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.

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