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