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