UNPKG

meblog

Version:

A simple blog engine for personal blogging

54 lines (53 loc) 2.09 kB
"use strict"; 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;