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.

62 lines (61 loc) 3.88 kB
const require_utils = require("../../common/utils.cjs"); //#region src/opml/parse/utils.ts const parseOutline = (value, options) => { if (!require_utils.isObject(value)) return; const outline = { text: require_utils.parseString(value["@text"]), type: require_utils.parseString(value["@type"]), isComment: require_utils.parseBoolean(value["@iscomment"]), isBreakpoint: require_utils.parseBoolean(value["@isbreakpoint"]), created: require_utils.parseDate(value["@created"]), category: require_utils.parseString(value["@category"]), description: require_utils.parseString(value["@description"]), xmlUrl: require_utils.parseString(value["@xmlurl"]), htmlUrl: require_utils.parseString(value["@htmlurl"]), language: require_utils.parseString(value["@language"]), title: require_utils.parseString(value["@title"]), version: require_utils.parseString(value["@version"]), url: require_utils.parseString(value["@url"]), outlines: require_utils.parseArrayOf(value.outline, (value) => parseOutline(value, options)) }; if (options?.extraOutlineAttributes) for (const attribute of options.extraOutlineAttributes) { const attributeKey = `@${attribute.toLowerCase()}`; if (!require_utils.isPresent(value[attributeKey])) continue; outline[attribute] = require_utils.parseString(value[attributeKey]); } return require_utils.trimObject(outline); }; const parseHead = (value) => { if (!require_utils.isObject(value)) return; return require_utils.trimObject({ title: require_utils.parseSingularOf(value.title, (value) => require_utils.parseString(require_utils.retrieveText(value))), dateCreated: require_utils.parseSingularOf(value.datecreated, (value) => require_utils.parseDate(require_utils.retrieveText(value))), dateModified: require_utils.parseSingularOf(value.datemodified, (value) => require_utils.parseDate(require_utils.retrieveText(value))), ownerName: require_utils.parseSingularOf(value.ownername, (value) => require_utils.parseString(require_utils.retrieveText(value))), ownerEmail: require_utils.parseSingularOf(value.owneremail, (value) => require_utils.parseString(require_utils.retrieveText(value))), ownerId: require_utils.parseSingularOf(value.ownerid, (value) => require_utils.parseString(require_utils.retrieveText(value))), docs: require_utils.parseSingularOf(value.docs, (value) => require_utils.parseString(require_utils.retrieveText(value))), expansionState: require_utils.parseSingularOf(value.expansionstate, (value) => require_utils.parseCsvOf(require_utils.retrieveText(value), require_utils.parseNumber)), vertScrollState: require_utils.parseSingularOf(value.vertscrollstate, (value) => require_utils.parseNumber(require_utils.retrieveText(value))), windowTop: require_utils.parseSingularOf(value.windowtop, (value) => require_utils.parseNumber(require_utils.retrieveText(value))), windowLeft: require_utils.parseSingularOf(value.windowleft, (value) => require_utils.parseNumber(require_utils.retrieveText(value))), windowBottom: require_utils.parseSingularOf(value.windowbottom, (value) => require_utils.parseNumber(require_utils.retrieveText(value))), windowRight: require_utils.parseSingularOf(value.windowright, (value) => require_utils.parseNumber(require_utils.retrieveText(value))) }); }; const parseBody = (value, options) => { if (!require_utils.isObject(value)) return; return require_utils.trimObject({ outlines: require_utils.parseArrayOf(value.outline, (value) => parseOutline(value, options), options?.maxItems) }); }; const parseDocument = (value, options) => { if (!require_utils.isObject(value?.opml)) return; return require_utils.trimObject({ head: parseHead(value.opml.head), body: parseBody(value.opml.body, options) }); }; //#endregion exports.parseBody = parseBody; exports.parseDocument = parseDocument; exports.parseHead = parseHead; exports.parseOutline = parseOutline;