meblog
Version:
A simple blog engine for personal blogging
54 lines (53 loc) • 2.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const fs_1 = tslib_1.__importDefault(require("fs"));
const path_1 = tslib_1.__importDefault(require("path"));
const ConfigHolder_1 = tslib_1.__importDefault(require("./ConfigHolder"));
class RssGenerator extends ConfigHolder_1.default {
dataSource;
constructor(dataSource) {
super(dataSource.config);
this.dataSource = dataSource;
}
generate(outputDir, locale) {
if (!fs_1.default.existsSync(outputDir)) {
fs_1.default.mkdirSync(outputDir, { recursive: true });
}
const filePath = path_1.default.join(outputDir, './rss.xml');
const content = this.generateRssContent(locale);
fs_1.default.writeFileSync(filePath, content);
}
generateRssContent(locale) {
return ('<rss version="2.0">' +
'<channel>' +
`<title>${this.getI18nFallbackToConfig('siteName', locale)}</title>` +
`<link>${this.config.baseUrl}</link>` +
`<description>${this.getI18nFallbackToConfig('siteDescription', locale)}</description>` +
(locale ? `<language>${locale}</language>` : '') +
this.generateItemFeeds(locale) +
'</channel>' +
'</rss>');
}
generateItemFeeds(locale) {
return this.dataSource
.getPosts(locale)
.map((p) => this.getItemFeed(p))
.join('');
}
getItemFeed(post) {
const postUrl = this.postRootUrl(post);
return ('<item>' +
`<title>${post.title}</title>` +
`<link>${postUrl}</link>` +
`<description><![CDATA[${post.excerpt}]]></description>` +
`<guid>${postUrl}</guid>` +
`<pubDate>${this.formatRFC822DateTime(post.publishedAt)}</pubDate>` +
this.getItemCategories(post) +
'</item>');
}
getItemCategories(post) {
return post.tags.map((tag) => `<category>${tag}</category>`).join('');
}
}
exports.default = RssGenerator;