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.

214 lines (213 loc) 14.1 kB
const require_utils = require("../../../common/utils.cjs"); const require_utils$1 = require("../../../namespaces/admin/parse/utils.cjs"); const require_utils$2 = require("../../../namespaces/app/parse/utils.cjs"); const require_utils$3 = require("../../../namespaces/arxiv/parse/utils.cjs"); const require_utils$4 = require("../../../namespaces/cc/parse/utils.cjs"); const require_utils$5 = require("../../../namespaces/creativecommons/parse/utils.cjs"); const require_utils$6 = require("../../../namespaces/dc/parse/utils.cjs"); const require_utils$7 = require("../../../namespaces/dcterms/parse/utils.cjs"); const require_utils$8 = require("../../../namespaces/geo/parse/utils.cjs"); const require_utils$9 = require("../../../namespaces/georss/parse/utils.cjs"); const require_utils$10 = require("../../../namespaces/googleplay/parse/utils.cjs"); const require_utils$11 = require("../../../namespaces/itunes/parse/utils.cjs"); const require_utils$12 = require("../../../namespaces/media/parse/utils.cjs"); const require_utils$13 = require("../../../namespaces/opensearch/parse/utils.cjs"); const require_utils$14 = require("../../../namespaces/pingback/parse/utils.cjs"); const require_utils$15 = require("../../../namespaces/psc/parse/utils.cjs"); const require_utils$16 = require("../../../namespaces/slash/parse/utils.cjs"); const require_utils$17 = require("../../../namespaces/sy/parse/utils.cjs"); const require_utils$18 = require("../../../namespaces/thr/parse/utils.cjs"); const require_utils$19 = require("../../../namespaces/trackback/parse/utils.cjs"); const require_utils$20 = require("../../../namespaces/wfw/parse/utils.cjs"); const require_utils$21 = require("../../../namespaces/yt/parse/utils.cjs"); //#region src/feeds/atom/parse/utils.ts const createNamespaceGetter = (value, prefix) => { if (!prefix) return (key) => value[key]; return (key) => value[prefix + key]; }; const parseLink = (value) => { if (!require_utils.isObject(value)) return; const namespaces = require_utils.detectNamespaces(value); return require_utils.trimObject({ href: require_utils.parseString(value["@href"]) ?? require_utils.parseString(require_utils.retrieveText(value)), rel: require_utils.parseString(value["@rel"]), type: require_utils.parseString(value["@type"]), hreflang: require_utils.parseString(value["@hreflang"]), title: require_utils.parseString(value["@title"]), length: require_utils.parseNumber(value["@length"]), thr: namespaces.has("thr") ? require_utils$18.retrieveLink(value) : void 0 }); }; const retrievePersonUri = (value, options) => { if (!require_utils.isObject(value)) return; const get = createNamespaceGetter(value, options?.prefix); const uri = require_utils.parseSingularOf(get("uri"), (value) => require_utils.parseString(require_utils.retrieveText(value))); const url = require_utils.parseSingularOf(get("url"), (value) => require_utils.parseString(require_utils.retrieveText(value))); return uri || url; }; const parsePerson = (value, options) => { if (!require_utils.isObject(value)) return; const namespaces = options?.asNamespace ? void 0 : require_utils.detectNamespaces(value); const get = createNamespaceGetter(value, options?.prefix); return require_utils.trimObject({ name: require_utils.parseSingularOf(get("name"), (value) => require_utils.parseString(require_utils.retrieveText(value))), uri: retrievePersonUri(value, options), email: require_utils.parseSingularOf(get("email"), (value) => require_utils.parseString(require_utils.retrieveText(value))), arxiv: namespaces?.has("arxiv") ? require_utils$3.retrieveAuthor(value) : void 0 }); }; const parseCategory = (value) => { if (!require_utils.isObject(value)) return; return require_utils.trimObject({ term: require_utils.parseString(value["@term"]), scheme: require_utils.parseString(value["@scheme"]), label: require_utils.parseString(value["@label"]) }); }; const retrieveGeneratorUri = (value) => { if (!require_utils.isObject(value)) return; const uri = require_utils.parseString(value["@uri"]); const url = require_utils.parseString(value["@url"]); return uri || url; }; const parseGenerator = (value) => { return require_utils.trimObject({ text: require_utils.parseString(require_utils.retrieveText(value)), uri: retrieveGeneratorUri(value), version: require_utils.parseString(value?.["@version"]) }); }; const parseSource = (value, options) => { if (!require_utils.isObject(value)) return; const get = createNamespaceGetter(value, options?.prefix); return require_utils.trimObject({ authors: require_utils.parseArrayOf(get("author"), (value) => parsePerson(value, options)), categories: require_utils.parseArrayOf(get("category"), (value) => parseCategory(value, options)), contributors: require_utils.parseArrayOf(get("contributor"), (value) => parsePerson(value, options)), generator: require_utils.parseSingularOf(get("generator"), (value) => parseGenerator(value, options)), icon: require_utils.parseSingularOf(get("icon"), (value) => require_utils.parseString(require_utils.retrieveText(value))), id: require_utils.parseSingularOf(get("id"), (value) => require_utils.parseString(require_utils.retrieveText(value))), links: require_utils.parseArrayOf(get("link"), (value) => parseLink(value, options)), logo: require_utils.parseSingularOf(get("logo"), (value) => require_utils.parseString(require_utils.retrieveText(value))), rights: require_utils.parseSingularOf(get("rights"), (value) => require_utils.parseString(require_utils.retrieveText(value))), subtitle: require_utils.parseSingularOf(get("subtitle"), (value) => require_utils.parseString(require_utils.retrieveText(value))), title: require_utils.parseSingularOf(get("title"), (value) => require_utils.parseString(require_utils.retrieveText(value))), updated: retrieveUpdated(value) }); }; const retrievePublished = (value, options) => { if (!require_utils.isObject(value)) return; const get = createNamespaceGetter(value, options?.prefix); const published = require_utils.parseSingularOf(get("published"), (value) => require_utils.parseDate(require_utils.retrieveText(value))); const issued = require_utils.parseSingularOf(get("issued"), (value) => require_utils.parseDate(require_utils.retrieveText(value))); const created = require_utils.parseSingularOf(get("created"), (value) => require_utils.parseDate(require_utils.retrieveText(value))); return published || issued || created; }; const retrieveUpdated = (value, options) => { if (!require_utils.isObject(value)) return; const get = createNamespaceGetter(value, options?.prefix); const updated = require_utils.parseSingularOf(get("updated"), (value) => require_utils.parseDate(require_utils.retrieveText(value))); const modified = require_utils.parseSingularOf(get("modified"), (value) => require_utils.parseDate(require_utils.retrieveText(value))); return updated || modified; }; const retrieveSubtitle = (value, options) => { if (!require_utils.isObject(value)) return; const get = createNamespaceGetter(value, options?.prefix); const subtitle = require_utils.parseSingularOf(get("subtitle"), (value) => require_utils.parseString(require_utils.retrieveText(value))); const tagline = require_utils.parseSingularOf(get("tagline"), (value) => require_utils.parseString(require_utils.retrieveText(value))); return subtitle || tagline; }; const parseEntry = (value, options) => { if (!require_utils.isObject(value)) return; const namespaces = options?.asNamespace ? void 0 : require_utils.detectNamespaces(value); const get = createNamespaceGetter(value, options?.prefix); return require_utils.trimObject({ authors: require_utils.parseArrayOf(get("author"), (value) => parsePerson(value, options)), categories: require_utils.parseArrayOf(get("category"), (value) => parseCategory(value, options)), content: require_utils.parseSingularOf(get("content"), (value) => require_utils.parseString(require_utils.retrieveText(value))), contributors: require_utils.parseArrayOf(get("contributor"), (value) => parsePerson(value, options)), id: require_utils.parseSingularOf(get("id"), (value) => require_utils.parseString(require_utils.retrieveText(value))), links: require_utils.parseArrayOf(get("link"), (value) => parseLink(value, options)), published: retrievePublished(value, options), rights: require_utils.parseSingularOf(get("rights"), (value) => require_utils.parseString(require_utils.retrieveText(value))), source: require_utils.parseSingularOf(get("source"), parseSource), summary: require_utils.parseSingularOf(get("summary"), (value) => require_utils.parseString(require_utils.retrieveText(value))), title: require_utils.parseSingularOf(get("title"), (value) => require_utils.parseString(require_utils.retrieveText(value))), updated: retrieveUpdated(value, options), app: namespaces?.has("app") ? require_utils$2.retrieveEntry(value) : void 0, arxiv: namespaces?.has("arxiv") ? require_utils$3.retrieveEntry(value) : void 0, cc: namespaces?.has("cc") ? require_utils$4.retrieveItemOrFeed(value) : void 0, dc: namespaces?.has("dc") ? require_utils$6.retrieveItemOrFeed(value) : void 0, slash: namespaces?.has("slash") ? require_utils$16.retrieveItem(value) : void 0, itunes: namespaces?.has("itunes") ? require_utils$11.retrieveItem(value) : void 0, googleplay: namespaces?.has("googleplay") ? require_utils$10.retrieveItem(value) : void 0, psc: namespaces?.has("psc") ? require_utils$15.retrieveItem(value) : void 0, media: namespaces?.has("media") ? require_utils$12.retrieveItemOrFeed(value) : void 0, georss: namespaces?.has("georss") ? require_utils$9.retrieveItemOrFeed(value) : void 0, geo: namespaces?.has("geo") ? require_utils$8.retrieveItemOrFeed(value) : void 0, thr: namespaces?.has("thr") ? require_utils$18.retrieveItem(value) : void 0, dcterms: namespaces?.has("dcterms") ? require_utils$7.retrieveItemOrFeed(value) : void 0, creativeCommons: namespaces?.has("creativecommons") ? require_utils$5.retrieveItemOrFeed(value) : void 0, wfw: namespaces?.has("wfw") ? require_utils$20.retrieveItem(value) : void 0, yt: namespaces?.has("yt") ? require_utils$21.retrieveItem(value) : void 0, pingback: namespaces?.has("pingback") ? require_utils$14.retrieveItem(value) : void 0, trackback: namespaces?.has("trackback") ? require_utils$19.retrieveItem(value) : void 0 }); }; const parseFeed = (value, options) => { if (!require_utils.isObject(value)) return; const namespaces = options?.asNamespace ? void 0 : require_utils.detectNamespaces(value); const get = createNamespaceGetter(value, options?.prefix); return require_utils.trimObject({ authors: require_utils.parseArrayOf(get("author"), (value) => parsePerson(value, options)), categories: require_utils.parseArrayOf(get("category"), (value) => parseCategory(value, options)), contributors: require_utils.parseArrayOf(get("contributor"), (value) => parsePerson(value, options)), generator: require_utils.parseSingularOf(get("generator"), (value) => parseGenerator(value, options)), icon: require_utils.parseSingularOf(get("icon"), (value) => require_utils.parseString(require_utils.retrieveText(value))), id: require_utils.parseSingularOf(get("id"), (value) => require_utils.parseString(require_utils.retrieveText(value))), links: require_utils.parseArrayOf(get("link"), (value) => parseLink(value, options)), logo: require_utils.parseSingularOf(get("logo"), (value) => require_utils.parseString(require_utils.retrieveText(value))), rights: require_utils.parseSingularOf(get("rights"), (value) => require_utils.parseString(require_utils.retrieveText(value))), subtitle: retrieveSubtitle(value, options), title: require_utils.parseSingularOf(get("title"), (value) => require_utils.parseString(require_utils.retrieveText(value))), updated: retrieveUpdated(value, options), entries: require_utils.parseArrayOf(get("entry"), (value) => parseEntry(value, options), options?.maxItems), cc: namespaces?.has("cc") ? require_utils$4.retrieveItemOrFeed(value) : void 0, dc: namespaces?.has("dc") ? require_utils$6.retrieveItemOrFeed(value) : void 0, sy: namespaces?.has("sy") ? require_utils$17.retrieveFeed(value) : void 0, itunes: namespaces?.has("itunes") ? require_utils$11.retrieveFeed(value) : void 0, googleplay: namespaces?.has("googleplay") ? require_utils$10.retrieveFeed(value) : void 0, media: namespaces?.has("media") ? require_utils$12.retrieveItemOrFeed(value) : void 0, georss: namespaces?.has("georss") ? require_utils$9.retrieveItemOrFeed(value) : void 0, geo: namespaces?.has("geo") ? require_utils$8.retrieveItemOrFeed(value) : void 0, dcterms: namespaces?.has("dcterms") ? require_utils$7.retrieveItemOrFeed(value) : void 0, creativeCommons: namespaces?.has("creativecommons") ? require_utils$5.retrieveItemOrFeed(value) : void 0, opensearch: namespaces?.has("opensearch") ? require_utils$13.retrieveFeed(value) : void 0, yt: namespaces?.has("yt") ? require_utils$21.retrieveFeed(value) : void 0, admin: namespaces?.has("admin") ? require_utils$1.retrieveFeed(value) : void 0, pingback: namespaces?.has("pingback") ? require_utils$14.retrieveFeed(value) : void 0 }); }; const retrieveFeed = (value, options) => { const notNamespaced = require_utils.parseSingularOf(value?.feed, (value) => parseFeed(value, options)); const namespaced = require_utils.parseSingularOf(value?.["atom:feed"], (value) => parseFeed(value, { ...options, prefix: "atom:" })); return notNamespaced || namespaced; }; //#endregion exports.createNamespaceGetter = createNamespaceGetter; exports.parseCategory = parseCategory; exports.parseEntry = parseEntry; exports.parseFeed = parseFeed; exports.parseGenerator = parseGenerator; exports.parseLink = parseLink; exports.parsePerson = parsePerson; exports.parseSource = parseSource; exports.retrieveFeed = retrieveFeed; exports.retrieveGeneratorUri = retrieveGeneratorUri; exports.retrievePersonUri = retrievePersonUri; exports.retrievePublished = retrievePublished; exports.retrieveSubtitle = retrieveSubtitle; exports.retrieveUpdated = retrieveUpdated;