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.
60 lines (59 loc) • 2.67 kB
JavaScript
import { isObject, parseArrayOf, parseBoolean, parseSingularOf, parseString, retrieveText, trimObject } from "../../../common/utils.js";
//#region src/namespaces/source/parse/utils.ts
const parseAccount = (value) => {
if (!isObject(value)) return;
return trimObject({
service: parseString(value["@service"]),
value: parseString(retrieveText(value))
});
};
const parseLikes = (value) => {
if (!isObject(value)) return;
return trimObject({ server: parseString(value["@server"]) });
};
const parseArchive = (value) => {
if (!isObject(value)) return;
return trimObject({
url: parseSingularOf(value["source:url"], (value) => parseString(retrieveText(value))),
startDay: parseSingularOf(value["source:startday"], (value) => parseString(retrieveText(value))),
endDay: parseSingularOf(value["source:endday"], (value) => parseString(retrieveText(value))),
filename: parseSingularOf(value["source:filename"], (value) => parseString(retrieveText(value)))
});
};
const parseSubscriptionList = (value) => {
if (!isObject(value)) return;
return trimObject({
url: parseString(value["@url"]),
value: parseString(retrieveText(value))
});
};
const parseInReplyTo = (value) => {
return trimObject({
value: parseString(retrieveText(value)),
isPermaLink: parseBoolean(value?.["@ispermalink"])
});
};
const retrieveFeed = (value) => {
if (!isObject(value)) return;
return trimObject({
accounts: parseArrayOf(value["source:account"], parseAccount),
likes: parseSingularOf(value["source:likes"], parseLikes),
archive: parseSingularOf(value["source:archive"], parseArchive),
subscriptionLists: parseArrayOf(value["source:subscriptionlist"], parseSubscriptionList),
cloud: parseSingularOf(value["source:cloud"], (value) => parseString(retrieveText(value))),
blogroll: parseSingularOf(value["source:blogroll"], (value) => parseString(retrieveText(value))),
self: parseSingularOf(value["source:self"], (value) => parseString(retrieveText(value))),
localTime: parseSingularOf(value["source:localtime"], (value) => parseString(retrieveText(value)))
});
};
const retrieveItem = (value) => {
if (!isObject(value)) return;
return trimObject({
markdown: parseSingularOf(value["source:markdown"], (value) => parseString(retrieveText(value))),
outlines: parseArrayOf(value["source:outline"], (value) => parseString(retrieveText(value))),
linkFull: parseSingularOf(value["source:linkfull"], (value) => parseString(retrieveText(value))),
inReplyTo: parseSingularOf(value["source:inreplyto"], parseInReplyTo)
});
};
//#endregion
export { parseAccount, parseArchive, parseInReplyTo, parseLikes, parseSubscriptionList, retrieveFeed, retrieveItem };