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.

86 lines (85 loc) 3.55 kB
import { isObject, parseArrayOf, parseDate, parseNumber, parseSingularOf, parseString, parseYesNoBoolean, retrieveText, trimObject } from "../../../common/utils.js"; //#region src/namespaces/rawvoice/parse/utils.ts const parseRating = (value) => { return trimObject({ value: parseString(retrieveText(value)), tv: parseString(value?.["@tv"]), movie: parseString(value?.["@movie"]) }); }; const parseLiveStream = (value) => { return trimObject({ url: parseString(retrieveText(value)), schedule: parseDate(value?.["@schedule"]), duration: parseString(value?.["@duration"]), type: parseString(value?.["@type"]) }); }; const parsePoster = (value) => { if (!isObject(value)) return; return trimObject({ url: parseString(value["@url"]) }); }; const parseAlternateEnclosure = (value) => { if (!isObject(value)) return; return trimObject({ src: parseString(value["@src"]), type: parseString(value["@type"]), length: parseNumber(value["@length"]) }); }; const parseSubscribe = (value) => { if (!isObject(value)) return; const subscribe = {}; for (const key in value) if (key.startsWith("@")) { const attrName = key.slice(1); const attrValue = parseString(value[key]); if (attrValue) subscribe[attrName] = attrValue; } return trimObject(subscribe); }; const parseMetamark = (value) => { if (!isObject(value)) return; return trimObject({ type: parseString(value["@type"]), link: parseString(value["@link"]), position: parseNumber(value["@position"]), duration: parseNumber(value["@duration"]), value: parseString(retrieveText(value)) }); }; const parseDonate = (value) => { if (!isObject(value)) return; return trimObject({ href: parseString(value["@href"]), value: parseString(retrieveText(value)) }); }; const retrieveItem = (value) => { if (!isObject(value)) return; return trimObject({ poster: parseSingularOf(value["rawvoice:poster"], parsePoster), isHd: parseSingularOf(value["rawvoice:ishd"], (value) => parseYesNoBoolean(retrieveText(value))), embed: parseSingularOf(value["rawvoice:embed"], (value) => parseString(retrieveText(value))), webm: parseSingularOf(value["rawvoice:webm"], parseAlternateEnclosure), mp4: parseSingularOf(value["rawvoice:mp4"], parseAlternateEnclosure), metamarks: parseArrayOf(value["rawvoice:metamark"], parseMetamark) }); }; const retrieveFeed = (value) => { if (!isObject(value)) return; return trimObject({ rating: parseSingularOf(value["rawvoice:rating"], parseRating), liveEmbed: parseSingularOf(value["rawvoice:liveembed"], (value) => parseString(retrieveText(value))), flashLiveStream: parseSingularOf(value["rawvoice:flashlivestream"], parseLiveStream), httpLiveStream: parseSingularOf(value["rawvoice:httplivestream"], parseLiveStream), shoutcastLiveStream: parseSingularOf(value["rawvoice:shoutcastlivestream"], parseLiveStream), liveStream: parseSingularOf(value["rawvoice:livestream"], parseLiveStream), location: parseSingularOf(value["rawvoice:location"], (value) => parseString(retrieveText(value))), frequency: parseSingularOf(value["rawvoice:frequency"], (value) => parseString(retrieveText(value))), mycast: parseSingularOf(value["rawvoice:mycast"], (value) => parseYesNoBoolean(retrieveText(value))), subscribe: parseSingularOf(value["rawvoice:subscribe"], parseSubscribe), donate: parseSingularOf(value["rawvoice:donate"], parseDonate) }); }; //#endregion export { parseAlternateEnclosure, parseDonate, parseLiveStream, parseMetamark, parsePoster, parseRating, parseSubscribe, retrieveFeed, retrieveItem };