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.
269 lines (268 loc) • 10.1 kB
JavaScript
import { generateArrayOrSingular, generateCdataString, generateCsvOf, generateNumber, generatePlainString, generateTextOrCdataString, generateYesNoBoolean, isObject, trimArray, trimObject } from "../../../common/utils.js";
//#region src/namespaces/media/generate/utils.ts
const generateRating = (rating) => {
if (!isObject(rating)) return;
return trimObject({
...generateTextOrCdataString(rating.value),
"@scheme": generatePlainString(rating.scheme)
});
};
const generateTitleOrDescription = (titleOrDescription) => {
if (!isObject(titleOrDescription)) return;
return trimObject({
...generateTextOrCdataString(titleOrDescription.value),
"@type": generatePlainString(titleOrDescription.type)
});
};
const generateThumbnail = (thumbnail) => {
if (!isObject(thumbnail)) return;
return trimObject({
"@url": generatePlainString(thumbnail.url),
"@height": generateNumber(thumbnail.height),
"@width": generateNumber(thumbnail.width),
"@time": generatePlainString(thumbnail.time)
});
};
const generateCategory = (category) => {
if (!isObject(category)) return;
return trimObject({
...generateTextOrCdataString(category.name),
"@scheme": generatePlainString(category.scheme),
"@label": generatePlainString(category.label)
});
};
const generateHash = (hash) => {
if (!isObject(hash)) return;
return trimObject({
...generateTextOrCdataString(hash.value),
"@algo": generatePlainString(hash.algo)
});
};
const generatePlayer = (player) => {
if (!isObject(player)) return;
return trimObject({
"@url": generatePlainString(player.url),
"@height": generateNumber(player.height),
"@width": generateNumber(player.width)
});
};
const generateCredit = (credit) => {
if (!isObject(credit)) return;
return trimObject({
...generateTextOrCdataString(credit.value),
"@role": generatePlainString(credit.role),
"@scheme": generatePlainString(credit.scheme)
});
};
const generateCopyright = (copyright) => {
if (!isObject(copyright)) return;
return trimObject({
...generateTextOrCdataString(copyright.value),
"@url": generatePlainString(copyright.url)
});
};
const generateText = (text) => {
if (!isObject(text)) return;
return trimObject({
...generateTextOrCdataString(text.value),
"@type": generatePlainString(text.type),
"@lang": generatePlainString(text.lang),
"@start": generatePlainString(text.start),
"@end": generatePlainString(text.end)
});
};
const generateRestriction = (restriction) => {
if (!isObject(restriction)) return;
return trimObject({
...generateTextOrCdataString(restriction.value),
"@relationship": generatePlainString(restriction.relationship),
"@type": generatePlainString(restriction.type)
});
};
const generateStarRating = (starRating) => {
if (!isObject(starRating)) return;
return trimObject({
"@average": generateNumber(starRating.average),
"@count": generateNumber(starRating.count),
"@min": generateNumber(starRating.min),
"@max": generateNumber(starRating.max)
});
};
const generateStatistics = (statistics) => {
if (!isObject(statistics)) return;
return trimObject({
"@views": generateNumber(statistics.views),
"@favorites": generateNumber(statistics.favorites)
});
};
const generateTag = (tag) => {
if (!isObject(tag)) return;
const name = generatePlainString(tag.name);
if (!name) return;
return `${name}:${generateNumber(tag.weight) ?? 1}`;
};
const generateCommunity = (community) => {
if (!isObject(community)) return;
return trimObject({
"media:starRating": generateStarRating(community.starRating),
"media:statistics": generateStatistics(community.statistics),
"media:tags": generateCsvOf(community.tags, generateTag)
});
};
const generateComments = (comments) => {
return trimObject({ "media:comment": trimArray(comments, generateCdataString) });
};
const generateResponses = (responses) => {
return trimObject({ "media:response": trimArray(responses, generateCdataString) });
};
const generateBackLinks = (backLinks) => {
return trimObject({ "media:backLink": trimArray(backLinks, generateCdataString) });
};
const generateScenes = (scenes) => {
return trimObject({ "media:scene": trimArray(scenes, generateScene) });
};
const generateParam = (param) => {
if (!isObject(param)) return;
return trimObject({
...generateTextOrCdataString(param.value),
"@name": generatePlainString(param.name)
});
};
const generateEmbed = (embed) => {
if (!isObject(embed)) return;
return trimObject({
"@url": generatePlainString(embed.url),
"@width": generateNumber(embed.width),
"@height": generateNumber(embed.height),
"media:param": trimArray(embed.params, generateParam)
});
};
const generateStatus = (status) => {
if (!isObject(status)) return;
return trimObject({
"@state": generatePlainString(status.state),
"@reason": generatePlainString(status.reason)
});
};
const generatePrice = (price) => {
if (!isObject(price)) return;
return trimObject({
"@type": generatePlainString(price.type),
"@info": generatePlainString(price.info),
"@price": generateNumber(price.price),
"@currency": generatePlainString(price.currency)
});
};
const generateLicense = (license) => {
if (!isObject(license)) return;
return trimObject({
...generateTextOrCdataString(license.name),
"@type": generatePlainString(license.type),
"@href": generatePlainString(license.href)
});
};
const generateSubTitle = (subTitle) => {
if (!isObject(subTitle)) return;
return trimObject({
"@type": generatePlainString(subTitle.type),
"@lang": generatePlainString(subTitle.lang),
"@href": generatePlainString(subTitle.href)
});
};
const generatePeerLink = (peerLink) => {
if (!isObject(peerLink)) return;
return trimObject({
"@type": generatePlainString(peerLink.type),
"@href": generatePlainString(peerLink.href)
});
};
const generateRights = (rights) => {
if (!isObject(rights)) return;
return trimObject({ "@status": generatePlainString(rights.status) });
};
const generateScene = (scene) => {
if (!isObject(scene)) return;
return trimObject({
sceneTitle: generateCdataString(scene.title),
sceneDescription: generateCdataString(scene.description),
sceneStartTime: generateCdataString(scene.startTime),
sceneEndTime: generateCdataString(scene.endTime)
});
};
const generateLocation = (location) => {
if (!isObject(location)) return;
return trimObject({
...generateTextOrCdataString(location.description),
"@start": generatePlainString(location.start),
"@end": generatePlainString(location.end),
"@lat": generateNumber(location.lat),
"@lng": generateNumber(location.lng)
});
};
const generateCommonElements = (elements) => {
if (!isObject(elements)) return;
return trimObject({
"media:rating": trimArray(elements.ratings, generateRating),
"media:title": generateTitleOrDescription(elements.title),
"media:description": generateTitleOrDescription(elements.description),
"media:keywords": generateCsvOf(elements.keywords, generatePlainString),
"media:thumbnail": trimArray(elements.thumbnails, generateThumbnail),
"media:category": trimArray(elements.categories, generateCategory),
"media:hash": trimArray(elements.hashes, generateHash),
"media:player": generatePlayer(elements.player),
"media:credit": trimArray(elements.credits, generateCredit),
"media:copyright": generateCopyright(elements.copyright),
"media:text": trimArray(elements.texts, generateText),
"media:restriction": trimArray(elements.restrictions, generateRestriction),
"media:community": generateCommunity(elements.community),
"media:comments": generateComments(elements.comments),
"media:embed": generateEmbed(elements.embed),
"media:responses": generateResponses(elements.responses),
"media:backLinks": generateBackLinks(elements.backLinks),
"media:status": generateStatus(elements.status),
"media:price": trimArray(elements.prices, generatePrice),
"media:license": trimArray(elements.licenses, generateLicense),
"media:subTitle": trimArray(elements.subTitles, generateSubTitle),
"media:peerLink": trimArray(elements.peerLinks, generatePeerLink),
"media:location": trimArray(elements.locations, generateLocation),
"media:rights": generateRights(elements.rights),
"media:scenes": generateScenes(elements.scenes)
});
};
const generateContent = (content) => {
if (!isObject(content)) return;
return trimObject({
"@url": generatePlainString(content.url),
"@fileSize": generateNumber(content.fileSize),
"@type": generatePlainString(content.type),
"@medium": generatePlainString(content.medium),
"@isDefault": generateYesNoBoolean(content.isDefault),
"@expression": generatePlainString(content.expression),
"@bitrate": generateNumber(content.bitrate),
"@framerate": generateNumber(content.framerate),
"@samplingrate": generateNumber(content.samplingrate),
"@channels": generateNumber(content.channels),
"@duration": generateNumber(content.duration),
"@height": generateNumber(content.height),
"@width": generateNumber(content.width),
"@lang": generatePlainString(content.lang),
...generateCommonElements(content)
});
};
const generateGroup = (group) => {
if (!isObject(group)) return;
return trimObject({
"media:content": trimArray(group.contents, generateContent),
...generateCommonElements(group)
});
};
const generateItemOrFeed = (itemOrFeed) => {
if (!isObject(itemOrFeed)) return;
return trimObject({
"media:group": generateArrayOrSingular(itemOrFeed.groups, itemOrFeed.group, generateGroup),
"media:content": trimArray(itemOrFeed.contents, generateContent),
...generateCommonElements(itemOrFeed)
});
};
//#endregion
export { generateBackLinks, generateCategory, generateComments, generateCommonElements, generateCommunity, generateContent, generateCopyright, generateCredit, generateEmbed, generateGroup, generateHash, generateItemOrFeed, generateLicense, generateLocation, generateParam, generatePeerLink, generatePlayer, generatePrice, generateRating, generateResponses, generateRestriction, generateRights, generateScene, generateScenes, generateStarRating, generateStatistics, generateStatus, generateSubTitle, generateTag, generateText, generateThumbnail, generateTitleOrDescription };