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.
298 lines (297 loc) • 13.2 kB
JavaScript
const require_utils = require("../../../common/utils.cjs");
//#region src/namespaces/media/parse/utils.ts
const parseRating = (value) => {
return require_utils.trimObject({
value: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value),
scheme: require_utils.parseString(value?.["@scheme"])
});
};
const retrieveRatings = (value) => {
if (!require_utils.isObject(value)) return;
if (value["media:rating"]) return require_utils.parseArrayOf(value["media:rating"], parseRating);
if (value["media:adult"]) return [{
value: require_utils.parseBoolean(require_utils.retrieveText(value["media:adult"])) ? "adult" : "nonadult",
scheme: "urn:simple"
}];
};
const parseTitleOrDescription = (value) => {
return require_utils.trimObject({
value: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value),
type: require_utils.parseString(value?.["@type"])
});
};
const parseThumbnail = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
url: require_utils.parseString(value["@url"]),
height: require_utils.parseNumber(value["@height"]),
width: require_utils.parseNumber(value["@width"]),
time: require_utils.parseString(value["@time"])
});
};
const parseCategory = (value) => {
return require_utils.trimObject({
name: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value),
scheme: require_utils.parseString(value?.["@scheme"]),
label: require_utils.parseString(value?.["@label"])
});
};
const parseHash = (value) => {
return require_utils.trimObject({
value: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value),
algo: require_utils.parseString(value?.["@algo"])
});
};
const parsePlayer = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
url: require_utils.parseString(value["@url"]),
height: require_utils.parseNumber(value["@height"]),
width: require_utils.parseNumber(value["@width"])
});
};
const parseCredit = (value) => {
return require_utils.trimObject({
value: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value),
role: require_utils.parseString(value?.["@role"]),
scheme: require_utils.parseString(value?.["@scheme"])
});
};
const parseCopyright = (value) => {
return require_utils.trimObject({
value: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value),
url: require_utils.parseString(value?.["@url"])
});
};
const parseText = (value) => {
return require_utils.trimObject({
value: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value),
type: require_utils.parseString(value?.["@type"]),
lang: require_utils.parseString(value?.["@lang"]),
start: require_utils.parseString(value?.["@start"]),
end: require_utils.parseString(value?.["@end"])
});
};
const parseRestriction = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
value: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value),
relationship: require_utils.parseString(value["@relationship"]),
type: require_utils.parseString(value["@type"])
});
};
const parseCommunity = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
starRating: require_utils.parseSingularOf(value["media:starrating"], parseStarRating),
statistics: require_utils.parseSingularOf(value["media:statistics"], parseStatistics),
tags: require_utils.parseSingularOf(value["media:tags"], parseTags)
});
};
const parseStarRating = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
average: require_utils.parseNumber(value["@average"]),
count: require_utils.parseNumber(value["@count"]),
min: require_utils.parseNumber(value["@min"]),
max: require_utils.parseNumber(value["@max"])
});
};
const parseStatistics = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
views: require_utils.parseNumber(value["@views"]),
favorites: require_utils.parseNumber(value["@favorites"])
});
};
const parseTags = (value) => {
return require_utils.parseCsvOf(value, (segment) => {
const split = segment.split(":");
return {
name: require_utils.parseString(split[0]) ?? "",
weight: require_utils.parseNumber(split[1]) ?? 1
};
});
};
const parseComments = (value) => {
return require_utils.parseArrayOf(value?.["media:comment"], (value) => require_utils.parseString(require_utils.retrieveText(value)));
};
const parseEmbed = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
url: require_utils.parseString(value["@url"]),
width: require_utils.parseNumber(value["@width"]),
height: require_utils.parseNumber(value["@height"]),
params: require_utils.parseArrayOf(value["media:param"], parseParam)
});
};
const parseParam = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
name: require_utils.parseString(value["@name"]),
value: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value)
});
};
const parseResponses = (value) => {
return require_utils.parseArrayOf(value?.["media:response"], (value) => require_utils.parseString(require_utils.retrieveText(value)));
};
const parseBackLinks = (value) => {
return require_utils.parseArrayOf(value?.["media:backlink"], (value) => require_utils.parseString(require_utils.retrieveText(value)));
};
const parseStatus = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
state: require_utils.parseString(value["@state"]),
reason: require_utils.parseString(value["@reason"])
});
};
const parsePrice = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
type: require_utils.parseString(value["@type"]),
info: require_utils.parseString(value["@info"]),
price: require_utils.parseNumber(value["@price"]),
currency: require_utils.parseString(value["@currency"])
});
};
const parseLicense = (value) => {
return require_utils.trimObject({
name: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value),
type: require_utils.parseString(value?.["@type"]),
href: require_utils.parseString(value?.["@href"])
});
};
const parseSubTitle = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
type: require_utils.parseString(value["@type"]),
lang: require_utils.parseString(value["@lang"]),
href: require_utils.parseString(value["@href"])
});
};
const parsePeerLink = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
type: require_utils.parseString(value["@type"]),
href: require_utils.parseString(value["@href"])
});
};
const parseRights = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({ status: require_utils.parseString(value["@status"]) });
};
const parseScene = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
title: require_utils.parseSingularOf(value.scenetitle, (value) => require_utils.parseString(require_utils.retrieveText(value))),
description: require_utils.parseSingularOf(value.scenedescription, (value) => require_utils.parseString(require_utils.retrieveText(value))),
startTime: require_utils.parseSingularOf(value.scenestarttime, (value) => require_utils.parseString(require_utils.retrieveText(value))),
endTime: require_utils.parseSingularOf(value.sceneendtime, (value) => require_utils.parseString(require_utils.retrieveText(value)))
});
};
const parseScenes = (value) => {
return require_utils.parseArrayOf(value?.["media:scene"], parseScene);
};
const parseLocation = (value) => {
if (require_utils.isNonEmptyStringOrNumber(value) || require_utils.isObject(value)) return require_utils.trimObject({ description: ((value) => require_utils.parseString(require_utils.retrieveText(value)))(value) });
};
const retrieveCommonElements = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
ratings: retrieveRatings(value),
title: require_utils.parseSingularOf(value["media:title"], parseTitleOrDescription),
description: require_utils.parseSingularOf(value["media:description"], parseTitleOrDescription),
keywords: require_utils.parseSingularOf(value["media:keywords"], (value) => require_utils.parseCsvOf(require_utils.retrieveText(value), require_utils.parseString)),
thumbnails: require_utils.parseArrayOf(value["media:thumbnail"], parseThumbnail),
categories: require_utils.parseArrayOf(value["media:category"], parseCategory),
hashes: require_utils.parseArrayOf(value["media:hash"], parseHash),
player: require_utils.parseSingularOf(value["media:player"], parsePlayer),
credits: require_utils.parseArrayOf(value["media:credit"], parseCredit),
copyright: require_utils.parseSingularOf(value["media:copyright"], parseCopyright),
texts: require_utils.parseArrayOf(value["media:text"], parseText),
restrictions: require_utils.parseArrayOf(value["media:restriction"], parseRestriction),
community: require_utils.parseSingularOf(value["media:community"], parseCommunity),
comments: require_utils.parseSingularOf(value["media:comments"], parseComments),
embed: require_utils.parseSingularOf(value["media:embed"], parseEmbed),
responses: require_utils.parseSingularOf(value["media:responses"], parseResponses),
backLinks: require_utils.parseSingularOf(value["media:backlinks"], parseBackLinks),
status: require_utils.parseSingularOf(value["media:status"], parseStatus),
prices: require_utils.parseArrayOf(value["media:price"], parsePrice),
licenses: require_utils.parseArrayOf(value["media:license"], parseLicense),
subTitles: require_utils.parseArrayOf(value["media:subtitle"], parseSubTitle),
peerLinks: require_utils.parseArrayOf(value["media:peerlink"], parsePeerLink),
locations: require_utils.parseArrayOf(value["media:location"], parseLocation),
rights: require_utils.parseSingularOf(value["media:rights"], parseRights),
scenes: require_utils.parseSingularOf(value["media:scenes"], parseScenes)
});
};
const parseContent = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
url: require_utils.parseString(value["@url"]),
fileSize: require_utils.parseNumber(value["@filesize"]),
type: require_utils.parseString(value["@type"]),
medium: require_utils.parseString(value["@medium"]),
isDefault: require_utils.parseBoolean(value["@isdefault"]),
expression: require_utils.parseString(value["@expression"]),
bitrate: require_utils.parseNumber(value["@bitrate"]),
framerate: require_utils.parseNumber(value["@framerate"]),
samplingrate: require_utils.parseNumber(value["@samplingrate"]),
channels: require_utils.parseNumber(value["@channels"]),
duration: require_utils.parseNumber(value["@duration"]),
height: require_utils.parseNumber(value["@height"]),
width: require_utils.parseNumber(value["@width"]),
lang: require_utils.parseString(value["@lang"]),
...retrieveCommonElements(value)
});
};
const parseGroup = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
contents: require_utils.parseArrayOf(value["media:content"], parseContent),
...retrieveCommonElements(value)
});
};
const retrieveItemOrFeed = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
groups: require_utils.parseArrayOf(value["media:group"], parseGroup),
contents: require_utils.parseArrayOf(value["media:content"], parseContent),
...retrieveCommonElements(value),
group: require_utils.parseSingularOf(value["media:group"], parseGroup)
});
};
//#endregion
exports.parseBackLinks = parseBackLinks;
exports.parseCategory = parseCategory;
exports.parseComments = parseComments;
exports.parseCommunity = parseCommunity;
exports.parseContent = parseContent;
exports.parseCopyright = parseCopyright;
exports.parseCredit = parseCredit;
exports.parseEmbed = parseEmbed;
exports.parseGroup = parseGroup;
exports.parseHash = parseHash;
exports.parseLicense = parseLicense;
exports.parseLocation = parseLocation;
exports.parseParam = parseParam;
exports.parsePeerLink = parsePeerLink;
exports.parsePlayer = parsePlayer;
exports.parsePrice = parsePrice;
exports.parseRating = parseRating;
exports.parseResponses = parseResponses;
exports.parseRestriction = parseRestriction;
exports.parseRights = parseRights;
exports.parseScene = parseScene;
exports.parseScenes = parseScenes;
exports.parseStarRating = parseStarRating;
exports.parseStatistics = parseStatistics;
exports.parseStatus = parseStatus;
exports.parseSubTitle = parseSubTitle;
exports.parseTags = parseTags;
exports.parseText = parseText;
exports.parseThumbnail = parseThumbnail;
exports.parseTitleOrDescription = parseTitleOrDescription;
exports.retrieveCommonElements = retrieveCommonElements;
exports.retrieveItemOrFeed = retrieveItemOrFeed;
exports.retrieveRatings = retrieveRatings;