Files
smartfeed/ts/smartfeed.classes.feed.ts
Juergen Kunz 622b74e628 chore: update README for clarity and formatting improvements
fix: update test imports to use new package path

refactor: improve feed class structure and formatting

refactor: enhance smartfeed class for better readability

chore: streamline plugin exports for consistency

chore: update TypeScript configuration for improved compatibility

ci: add workflows for handling tag and non-tag pushes
2025-10-31 17:07:13 +00:00

79 lines
1.8 KiB
TypeScript

import * as plugins from './smartfeed.plugins';
export interface IFeedOptions {
domain: string;
title: string;
description: string;
category: string;
company: string;
companyEmail: string;
companyDomain: string;
}
export interface IFeedItem {
title: string;
timestamp: number;
url: string;
authorName: string;
imageUrl: string;
content: string;
}
export class Feed {
options: IFeedOptions;
items: IFeedItem[] = [];
constructor(optionsArg: IFeedOptions) {
this.options = optionsArg;
}
public addItem(itemArg: IFeedItem) {
this.items.push(itemArg);
}
private getFeedObject() {
const feed = new plugins.feed.Feed({
copyright: `All rights reserved, ${this.options.company}`,
id: `https://${this.options.domain}`,
link: `https://${this.options.domain}`,
title: this.options.title,
author: {
name: this.options.company,
email: this.options.companyEmail,
link: this.options.companyEmail,
},
description: this.options.description,
generator: '@pushrocks/smartfeed',
language: 'en',
});
feed.addCategory(this.options.category);
for (const itemArg of this.items) {
feed.addItem({
title: itemArg.title,
date: new Date(itemArg.timestamp),
link: itemArg.url.replace(/&/gm, '&'),
image: itemArg.imageUrl.replace(/&/gm, '&'),
content: itemArg.content,
author: [
{
name: itemArg.authorName,
},
],
});
}
return feed;
}
public exportRssFeedString(): string {
return this.getFeedObject().rss2();
}
public exportAtomFeed(): string {
return this.getFeedObject().atom1();
}
public exportJsonFeed(): string {
return this.getFeedObject().json1();
}
}