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.
62 lines (61 loc) • 3.88 kB
JavaScript
const require_utils = require("../../common/utils.cjs");
//#region src/opml/parse/utils.ts
const parseOutline = (value, options) => {
if (!require_utils.isObject(value)) return;
const outline = {
text: require_utils.parseString(value["@text"]),
type: require_utils.parseString(value["@type"]),
isComment: require_utils.parseBoolean(value["@iscomment"]),
isBreakpoint: require_utils.parseBoolean(value["@isbreakpoint"]),
created: require_utils.parseDate(value["@created"]),
category: require_utils.parseString(value["@category"]),
description: require_utils.parseString(value["@description"]),
xmlUrl: require_utils.parseString(value["@xmlurl"]),
htmlUrl: require_utils.parseString(value["@htmlurl"]),
language: require_utils.parseString(value["@language"]),
title: require_utils.parseString(value["@title"]),
version: require_utils.parseString(value["@version"]),
url: require_utils.parseString(value["@url"]),
outlines: require_utils.parseArrayOf(value.outline, (value) => parseOutline(value, options))
};
if (options?.extraOutlineAttributes) for (const attribute of options.extraOutlineAttributes) {
const attributeKey = `@${attribute.toLowerCase()}`;
if (!require_utils.isPresent(value[attributeKey])) continue;
outline[attribute] = require_utils.parseString(value[attributeKey]);
}
return require_utils.trimObject(outline);
};
const parseHead = (value) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({
title: require_utils.parseSingularOf(value.title, (value) => require_utils.parseString(require_utils.retrieveText(value))),
dateCreated: require_utils.parseSingularOf(value.datecreated, (value) => require_utils.parseDate(require_utils.retrieveText(value))),
dateModified: require_utils.parseSingularOf(value.datemodified, (value) => require_utils.parseDate(require_utils.retrieveText(value))),
ownerName: require_utils.parseSingularOf(value.ownername, (value) => require_utils.parseString(require_utils.retrieveText(value))),
ownerEmail: require_utils.parseSingularOf(value.owneremail, (value) => require_utils.parseString(require_utils.retrieveText(value))),
ownerId: require_utils.parseSingularOf(value.ownerid, (value) => require_utils.parseString(require_utils.retrieveText(value))),
docs: require_utils.parseSingularOf(value.docs, (value) => require_utils.parseString(require_utils.retrieveText(value))),
expansionState: require_utils.parseSingularOf(value.expansionstate, (value) => require_utils.parseCsvOf(require_utils.retrieveText(value), require_utils.parseNumber)),
vertScrollState: require_utils.parseSingularOf(value.vertscrollstate, (value) => require_utils.parseNumber(require_utils.retrieveText(value))),
windowTop: require_utils.parseSingularOf(value.windowtop, (value) => require_utils.parseNumber(require_utils.retrieveText(value))),
windowLeft: require_utils.parseSingularOf(value.windowleft, (value) => require_utils.parseNumber(require_utils.retrieveText(value))),
windowBottom: require_utils.parseSingularOf(value.windowbottom, (value) => require_utils.parseNumber(require_utils.retrieveText(value))),
windowRight: require_utils.parseSingularOf(value.windowright, (value) => require_utils.parseNumber(require_utils.retrieveText(value)))
});
};
const parseBody = (value, options) => {
if (!require_utils.isObject(value)) return;
return require_utils.trimObject({ outlines: require_utils.parseArrayOf(value.outline, (value) => parseOutline(value, options), options?.maxItems) });
};
const parseDocument = (value, options) => {
if (!require_utils.isObject(value?.opml)) return;
return require_utils.trimObject({
head: parseHead(value.opml.head),
body: parseBody(value.opml.body, options)
});
};
//#endregion
exports.parseBody = parseBody;
exports.parseDocument = parseDocument;
exports.parseHead = parseHead;
exports.parseOutline = parseOutline;