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.

61 lines (60 loc) 2.46 kB
import { generateBoolean, generateCdataString, generateTextOrCdataString, isNonEmptyString, isObject, trimArray, trimObject } from "../../../common/utils.js"; //#region src/namespaces/source/generate/utils.ts const generateAccount = (account) => { if (!isObject(account) || !isNonEmptyString(account.service)) return; return trimObject({ "@service": account.service, ...generateTextOrCdataString(account.value) }); }; const generateLikes = (likes) => { if (!isObject(likes) || !isNonEmptyString(likes.server)) return; return { "@server": likes.server }; }; const generateArchive = (archive) => { if (!isObject(archive) || !isNonEmptyString(archive.url) || !isNonEmptyString(archive.startDay)) return; return trimObject({ "source:url": archive.url, "source:startDay": archive.startDay, "source:endDay": generateCdataString(archive.endDay), "source:filename": generateCdataString(archive.filename) }); }; const generateSubscriptionList = (subscriptionList) => { if (!isObject(subscriptionList) || !isNonEmptyString(subscriptionList.url)) return; return trimObject({ "@url": subscriptionList.url, ...generateTextOrCdataString(subscriptionList.value) }); }; const generateInReplyTo = (inReplyTo) => { if (!isObject(inReplyTo) || !isNonEmptyString(inReplyTo.value)) return; return trimObject({ ...generateTextOrCdataString(inReplyTo.value), "@isPermaLink": generateBoolean(inReplyTo.isPermaLink) }); }; const generateFeed = (feed) => { if (!isObject(feed)) return; return trimObject({ "source:account": trimArray(feed.accounts, generateAccount), "source:likes": generateLikes(feed.likes), "source:archive": generateArchive(feed.archive), "source:subscriptionList": trimArray(feed.subscriptionLists, generateSubscriptionList), "source:cloud": generateCdataString(feed.cloud), "source:blogroll": generateCdataString(feed.blogroll), "source:self": generateCdataString(feed.self), "source:localTime": generateCdataString(feed.localTime) }); }; const generateItem = (item) => { if (!isObject(item)) return; return trimObject({ "source:markdown": generateCdataString(item.markdown), "source:outline": trimArray(item.outlines, generateCdataString), "source:linkFull": generateCdataString(item.linkFull), "source:inReplyTo": generateInReplyTo(item.inReplyTo) }); }; //#endregion export { generateAccount, generateArchive, generateFeed, generateInReplyTo, generateItem, generateLikes, generateSubscriptionList };