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.
64 lines (63 loc) • 3.13 kB
JavaScript
const require_utils = require("../../common/utils.cjs");
//#region src/opml/generate/utils.ts
const generateOutline = (outline, options) => {
if (!require_utils.isObject(outline)) return;
const value = {
"@text": require_utils.generatePlainString(outline.text),
"@type": require_utils.generatePlainString(outline.type),
"@isComment": require_utils.generateBoolean(outline.isComment),
"@isBreakpoint": require_utils.generateBoolean(outline.isBreakpoint),
"@created": require_utils.generateRfc822Date(outline.created),
"@category": require_utils.generatePlainString(outline.category),
"@description": require_utils.generatePlainString(outline.description),
"@xmlUrl": require_utils.generatePlainString(outline.xmlUrl),
"@htmlUrl": require_utils.generatePlainString(outline.htmlUrl),
"@language": require_utils.generatePlainString(outline.language),
"@title": require_utils.generatePlainString(outline.title),
"@version": require_utils.generatePlainString(outline.version),
"@url": require_utils.generatePlainString(outline.url),
outline: require_utils.trimArray(outline.outlines, (item) => generateOutline(item, options))
};
if (options?.extraOutlineAttributes) for (const attribute of options.extraOutlineAttributes) {
const attributeKey = `@${attribute}`;
if (!require_utils.isPresent(outline[attribute])) continue;
value[attributeKey] = require_utils.generatePlainString(outline[attribute]);
}
return require_utils.trimObject(value);
};
const generateHead = (head) => {
if (!require_utils.isObject(head)) return;
return require_utils.trimObject({
title: require_utils.generateCdataString(head.title),
dateCreated: require_utils.generateRfc822Date(head.dateCreated),
dateModified: require_utils.generateRfc822Date(head.dateModified),
ownerName: require_utils.generateCdataString(head.ownerName),
ownerEmail: require_utils.generateCdataString(head.ownerEmail),
ownerId: require_utils.generateCdataString(head.ownerId),
docs: require_utils.generateCdataString(head.docs),
expansionState: require_utils.generateCsvOf(head.expansionState, require_utils.generateNumber),
vertScrollState: require_utils.generateNumber(head.vertScrollState),
windowTop: require_utils.generateNumber(head.windowTop),
windowLeft: require_utils.generateNumber(head.windowLeft),
windowBottom: require_utils.generateNumber(head.windowBottom),
windowRight: require_utils.generateNumber(head.windowRight)
});
};
const generateBody = (body, options) => {
if (!require_utils.isObject(body)) return;
return require_utils.trimObject({ outline: require_utils.trimArray(body.outlines, (item) => generateOutline(item, options)) });
};
const generateDocument = (opml, options) => {
if (!require_utils.isObject(opml)) return;
const value = require_utils.trimObject({
"@version": "2.0",
head: generateHead(opml.head),
body: generateBody(opml.body, options)
});
if (value?.body !== void 0) return { opml: value };
};
//#endregion
exports.generateBody = generateBody;
exports.generateDocument = generateDocument;
exports.generateHead = generateHead;
exports.generateOutline = generateOutline;