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.

269 lines (268 loc) 10.1 kB
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 };