UNPKG

feedsmith

Version:

Fast, all‑in‑one feed parser and generator for RSS, Atom, RDF, and JSON Feed, with support for Podcast, iTunes, Dublin Core, and OPML files.

64 lines (63 loc) 3.13 kB
const require_utils = require("../../common/utils.cjs"); //#region src/opml/generate/utils.ts const generateOutline = (outline, options) => { if (!require_utils.isObject(outline)) return; const value = { "@text": require_utils.generatePlainString(outline.text), "@type": require_utils.generatePlainString(outline.type), "@isComment": require_utils.generateBoolean(outline.isComment), "@isBreakpoint": require_utils.generateBoolean(outline.isBreakpoint), "@created": require_utils.generateRfc822Date(outline.created), "@category": require_utils.generatePlainString(outline.category), "@description": require_utils.generatePlainString(outline.description), "@xmlUrl": require_utils.generatePlainString(outline.xmlUrl), "@htmlUrl": require_utils.generatePlainString(outline.htmlUrl), "@language": require_utils.generatePlainString(outline.language), "@title": require_utils.generatePlainString(outline.title), "@version": require_utils.generatePlainString(outline.version), "@url": require_utils.generatePlainString(outline.url), outline: require_utils.trimArray(outline.outlines, (item) => generateOutline(item, options)) }; if (options?.extraOutlineAttributes) for (const attribute of options.extraOutlineAttributes) { const attributeKey = `@${attribute}`; if (!require_utils.isPresent(outline[attribute])) continue; value[attributeKey] = require_utils.generatePlainString(outline[attribute]); } return require_utils.trimObject(value); }; const generateHead = (head) => { if (!require_utils.isObject(head)) return; return require_utils.trimObject({ title: require_utils.generateCdataString(head.title), dateCreated: require_utils.generateRfc822Date(head.dateCreated), dateModified: require_utils.generateRfc822Date(head.dateModified), ownerName: require_utils.generateCdataString(head.ownerName), ownerEmail: require_utils.generateCdataString(head.ownerEmail), ownerId: require_utils.generateCdataString(head.ownerId), docs: require_utils.generateCdataString(head.docs), expansionState: require_utils.generateCsvOf(head.expansionState, require_utils.generateNumber), vertScrollState: require_utils.generateNumber(head.vertScrollState), windowTop: require_utils.generateNumber(head.windowTop), windowLeft: require_utils.generateNumber(head.windowLeft), windowBottom: require_utils.generateNumber(head.windowBottom), windowRight: require_utils.generateNumber(head.windowRight) }); }; const generateBody = (body, options) => { if (!require_utils.isObject(body)) return; return require_utils.trimObject({ outline: require_utils.trimArray(body.outlines, (item) => generateOutline(item, options)) }); }; const generateDocument = (opml, options) => { if (!require_utils.isObject(opml)) return; const value = require_utils.trimObject({ "@version": "2.0", head: generateHead(opml.head), body: generateBody(opml.body, options) }); if (value?.body !== void 0) return { opml: value }; }; //#endregion exports.generateBody = generateBody; exports.generateDocument = generateDocument; exports.generateHead = generateHead; exports.generateOutline = generateOutline;