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.

83 lines (82 loc) 5.63 kB
const require_utils = require("../../../common/utils.cjs"); //#region src/namespaces/itunes/parse/utils.ts const explicitOrYesRegex = /^\p{White_Space}*(explicit|yes)\p{White_Space}*$/iu; const durationRegex = /^(?:(\d+):)?(\d+):(\d+)$/; const parseCategory = (value) => { if (!require_utils.isObject(value)) return; return require_utils.trimObject({ text: require_utils.parseString(value["@text"]), categories: require_utils.parseArrayOf(value["itunes:category"], parseCategory) }); }; const parseOwner = (value) => { if (!require_utils.isObject(value)) return; return require_utils.trimObject({ name: require_utils.parseSingularOf(value["itunes:name"], (value) => require_utils.parseString(require_utils.retrieveText(value))), email: require_utils.parseSingularOf(value["itunes:email"], (value) => require_utils.parseString(require_utils.retrieveText(value))) }); }; const parseExplicit = (value) => { const boolean = require_utils.parseBoolean(value); if (boolean !== void 0) return boolean; if (typeof value === "string") return explicitOrYesRegex.test(value); }; const parseDuration = (value) => { const duration = require_utils.parseNumber(value); if (duration !== void 0) return duration; if (typeof value !== "string") return; const match = value.match(durationRegex); if (match) { const [, hours, minutes, seconds] = match; return Number(hours || 0) * 3600 + Number(minutes) * 60 + Number(seconds); } }; const parseImage = (value) => { if (require_utils.isNonEmptyStringOrNumber(value)) return require_utils.parseString(value); if (!require_utils.isObject(value)) return; return require_utils.parseString(value["@href"]); }; const retrieveItem = (value) => { if (!require_utils.isObject(value)) return; return require_utils.trimObject({ duration: require_utils.parseSingularOf(value["itunes:duration"], (value) => parseDuration(require_utils.retrieveText(value))), image: require_utils.parseSingularOf(value["itunes:image"], parseImage), explicit: require_utils.parseSingularOf(value["itunes:explicit"], (value) => parseExplicit(require_utils.retrieveText(value))), author: require_utils.parseSingularOf(value["itunes:author"], (value) => require_utils.parseString(require_utils.retrieveText(value))), title: require_utils.parseSingularOf(value["itunes:title"], (value) => require_utils.parseString(require_utils.retrieveText(value))), episode: require_utils.parseSingularOf(value["itunes:episode"], (value) => require_utils.parseNumber(require_utils.retrieveText(value))), season: require_utils.parseSingularOf(value["itunes:season"], (value) => require_utils.parseNumber(require_utils.retrieveText(value))), episodeType: require_utils.parseSingularOf(value["itunes:episodetype"], (value) => require_utils.parseString(require_utils.retrieveText(value))), block: require_utils.parseSingularOf(value["itunes:block"], (value) => require_utils.parseYesNoBoolean(require_utils.retrieveText(value))), summary: require_utils.parseSingularOf(value["itunes:summary"], (value) => require_utils.parseString(require_utils.retrieveText(value))), subtitle: require_utils.parseSingularOf(value["itunes:subtitle"], (value) => require_utils.parseString(require_utils.retrieveText(value))), keywords: require_utils.parseSingularOf(value["itunes:keywords"], (value) => require_utils.parseCsvOf(require_utils.retrieveText(value), require_utils.parseString)) }); }; const retrieveFeed = (value) => { if (!require_utils.isObject(value)) return; return require_utils.trimObject({ image: require_utils.parseSingularOf(value["itunes:image"], parseImage), explicit: require_utils.parseSingularOf(value["itunes:explicit"], (value) => parseExplicit(require_utils.retrieveText(value))), author: require_utils.parseSingularOf(value["itunes:author"], (value) => require_utils.parseString(require_utils.retrieveText(value))), title: require_utils.parseSingularOf(value["itunes:title"], (value) => require_utils.parseString(require_utils.retrieveText(value))), type: require_utils.parseSingularOf(value["itunes:type"], (value) => require_utils.parseString(require_utils.retrieveText(value))), newFeedUrl: require_utils.parseSingularOf(value["itunes:new-feed-url"], (value) => require_utils.parseString(require_utils.retrieveText(value))), block: require_utils.parseSingularOf(value["itunes:block"], (value) => require_utils.parseYesNoBoolean(require_utils.retrieveText(value))), complete: require_utils.parseSingularOf(value["itunes:complete"], (value) => require_utils.parseYesNoBoolean(require_utils.retrieveText(value))), applePodcastsVerify: require_utils.parseSingularOf(value["itunes:applepodcastsverify"], (value) => require_utils.parseString(require_utils.retrieveText(value))), categories: require_utils.parseArrayOf(value["itunes:category"], parseCategory), owner: require_utils.parseSingularOf(value["itunes:owner"], parseOwner), summary: require_utils.parseSingularOf(value["itunes:summary"], (value) => require_utils.parseString(require_utils.retrieveText(value))), subtitle: require_utils.parseSingularOf(value["itunes:subtitle"], (value) => require_utils.parseString(require_utils.retrieveText(value))), keywords: require_utils.parseSingularOf(value["itunes:keywords"], (value) => require_utils.parseCsvOf(require_utils.retrieveText(value), require_utils.parseString)) }); }; //#endregion exports.parseCategory = parseCategory; exports.parseDuration = parseDuration; exports.parseExplicit = parseExplicit; exports.parseImage = parseImage; exports.parseOwner = parseOwner; exports.retrieveFeed = retrieveFeed; exports.retrieveItem = retrieveItem;