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