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
JavaScript
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;