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.
152 lines (151 loc) • 9.42 kB
JavaScript
import { generateCdataString, generateNumber, generateRfc3339Date, isObject, trimArray, trimObject } from "../../../common/utils.js";
//#region src/namespaces/prism/generate/utils.ts
const generateFeed = (feed) => {
if (!isObject(feed)) return;
return trimObject({
"prism:publicationName": generateCdataString(feed.publicationName),
"prism:issn": generateCdataString(feed.issn),
"prism:eIssn": generateCdataString(feed.eIssn),
"prism:isbn": trimArray(feed.isbns, generateCdataString),
"prism:issueIdentifier": generateCdataString(feed.issueIdentifier),
"prism:issueName": generateCdataString(feed.issueName),
"prism:issueTeaser": generateCdataString(feed.issueTeaser),
"prism:issueType": generateCdataString(feed.issueType),
"prism:volume": generateCdataString(feed.volume),
"prism:number": generateCdataString(feed.number),
"prism:edition": generateCdataString(feed.edition),
"prism:aggregateIssueNumber": generateNumber(feed.aggregateIssueNumber),
"prism:aggregationType": generateCdataString(feed.aggregationType),
"prism:coverDate": generateRfc3339Date(feed.coverDate),
"prism:coverDisplayDate": generateCdataString(feed.coverDisplayDate),
"prism:publicationDate": trimArray(feed.publicationDates, generateRfc3339Date),
"prism:publicationDisplayDate": trimArray(feed.publicationDisplayDates, generateCdataString),
"prism:creationDate": generateRfc3339Date(feed.creationDate),
"prism:modificationDate": generateRfc3339Date(feed.modificationDate),
"prism:dateReceived": generateRfc3339Date(feed.dateReceived),
"prism:onSaleDate": trimArray(feed.onSaleDates, generateRfc3339Date),
"prism:onSaleDay": trimArray(feed.onSaleDays, generateCdataString),
"prism:offSaleDate": trimArray(feed.offSaleDates, generateRfc3339Date),
"prism:killDate": generateRfc3339Date(feed.killDate),
"prism:copyrightYear": trimArray(feed.copyrightYears, generateCdataString),
"prism:contentType": generateCdataString(feed.contentType),
"prism:alternateTitle": trimArray(feed.alternateTitles, generateCdataString),
"prism:subtitle": trimArray(feed.subtitles, generateCdataString),
"prism:teaser": trimArray(feed.teasers, generateCdataString),
"prism:keyword": trimArray(feed.keywords, generateCdataString),
"prism:seriesTitle": generateCdataString(feed.seriesTitle),
"prism:seriesNumber": generateNumber(feed.seriesNumber),
"prism:bookEdition": trimArray(feed.bookEditions, generateCdataString),
"prism:nationalCatalogNumber": generateCdataString(feed.nationalCatalogNumber),
"prism:productCode": trimArray(feed.productCodes, generateCdataString),
"prism:uspsNumber": generateCdataString(feed.uspsNumber),
"prism:publishingFrequency": generateCdataString(feed.publishingFrequency),
"prism:channel": trimArray(feed.channels, generateCdataString),
"prism:subchannel1": generateCdataString(feed.subchannel1),
"prism:subchannel2": generateCdataString(feed.subchannel2),
"prism:subchannel3": generateCdataString(feed.subchannel3),
"prism:subchannel4": generateCdataString(feed.subchannel4),
"prism:section": generateCdataString(feed.section),
"prism:subsection1": generateCdataString(feed.subsection1),
"prism:subsection2": generateCdataString(feed.subsection2),
"prism:subsection3": generateCdataString(feed.subsection3),
"prism:subsection4": generateCdataString(feed.subsection4),
"prism:corporateEntity": trimArray(feed.corporateEntities, generateCdataString),
"prism:distributor": generateCdataString(feed.distributor),
"prism:sellingAgency": trimArray(feed.sellingAgencies, generateCdataString),
"prism:organization": trimArray(feed.organizations, generateCdataString),
"prism:person": trimArray(feed.persons, generateCdataString),
"prism:platform": trimArray(feed.platforms, generateCdataString),
"prism:originPlatform": trimArray(feed.originPlatforms, generateCdataString),
"prism:device": generateCdataString(feed.device),
"prism:complianceProfile": generateCdataString(feed.complianceProfile),
"prism:blogTitle": generateCdataString(feed.blogTitle),
"prism:blogURL": generateCdataString(feed.blogURL),
"prism:link": trimArray(feed.links, generateCdataString),
"prism:url": trimArray(feed.urls, generateCdataString),
"prism:byteCount": generateNumber(feed.byteCount),
"prism:rating": trimArray(feed.ratings, generateCdataString),
"prism:timePeriod": generateCdataString(feed.timePeriod),
"prism:versionIdentifier": generateCdataString(feed.versionIdentifier),
"prism:ticker": trimArray(feed.tickers, generateCdataString),
"prism:academicField": trimArray(feed.academicFields, generateCdataString),
"prism:event": trimArray(feed.events, generateCdataString),
"prism:genre": trimArray(feed.genres, generateCdataString),
"prism:industry": trimArray(feed.industries, generateCdataString),
"prism:location": trimArray(feed.locations, generateCdataString),
"prism:object": trimArray(feed.objects, generateCdataString),
"prism:profession": generateCdataString(feed.profession),
"prism:sport": generateCdataString(feed.sport),
"prism:embargoDate": generateRfc3339Date(feed.embargoDate),
"prism:copyright": generateCdataString(feed.copyright),
"prism:expirationDate": generateRfc3339Date(feed.expirationDate),
"prism:rightsAgent": generateCdataString(feed.rightsAgent)
});
};
const generateItem = (item) => {
if (!isObject(item)) return;
return trimObject({
"prism:publicationName": generateCdataString(item.publicationName),
"prism:issn": generateCdataString(item.issn),
"prism:eIssn": generateCdataString(item.eIssn),
"prism:doi": generateCdataString(item.doi),
"prism:url": trimArray(item.urls, generateCdataString),
"prism:volume": generateCdataString(item.volume),
"prism:number": generateCdataString(item.number),
"prism:edition": generateCdataString(item.edition),
"prism:section": generateCdataString(item.section),
"prism:startingPage": generateCdataString(item.startingPage),
"prism:endingPage": generateCdataString(item.endingPage),
"prism:pageRange": generateCdataString(item.pageRange),
"prism:pageCount": generateNumber(item.pageCount),
"prism:pageProgressionDirection": generateCdataString(item.pageProgressionDirection),
"prism:samplePageRange": generateCdataString(item.samplePageRange),
"prism:publicationDate": trimArray(item.publicationDates, generateRfc3339Date),
"prism:publicationDisplayDate": trimArray(item.publicationDisplayDates, generateCdataString),
"prism:creationDate": generateRfc3339Date(item.creationDate),
"prism:modificationDate": generateRfc3339Date(item.modificationDate),
"prism:dateReceived": generateRfc3339Date(item.dateReceived),
"prism:killDate": generateRfc3339Date(item.killDate),
"prism:copyrightYear": trimArray(item.copyrightYears, generateCdataString),
"prism:contentType": generateCdataString(item.contentType),
"prism:genre": trimArray(item.genres, generateCdataString),
"prism:alternateTitle": trimArray(item.alternateTitles, generateCdataString),
"prism:subtitle": trimArray(item.subtitles, generateCdataString),
"prism:teaser": trimArray(item.teasers, generateCdataString),
"prism:keyword": trimArray(item.keywords, generateCdataString),
"prism:corporateEntity": trimArray(item.corporateEntities, generateCdataString),
"prism:organization": trimArray(item.organizations, generateCdataString),
"prism:person": trimArray(item.persons, generateCdataString),
"prism:platform": trimArray(item.platforms, generateCdataString),
"prism:device": generateCdataString(item.device),
"prism:academicField": trimArray(item.academicFields, generateCdataString),
"prism:event": trimArray(item.events, generateCdataString),
"prism:industry": trimArray(item.industries, generateCdataString),
"prism:location": trimArray(item.locations, generateCdataString),
"prism:object": trimArray(item.objects, generateCdataString),
"prism:profession": generateCdataString(item.profession),
"prism:sport": generateCdataString(item.sport),
"prism:hasAlternative": trimArray(item.hasAlternatives, generateCdataString),
"prism:hasCorrection": trimArray(item.hasCorrections, generateCdataString),
"prism:hasTranslation": trimArray(item.hasTranslations, generateCdataString),
"prism:isAlternativeOf": trimArray(item.isAlternativeOf, generateCdataString),
"prism:isCorrectionOf": trimArray(item.isCorrectionOf, generateCdataString),
"prism:isTranslationOf": generateCdataString(item.isTranslationOf),
"prism:supplementTitle": trimArray(item.supplementTitles, generateCdataString),
"prism:supplementDisplayID": generateCdataString(item.supplementDisplayID),
"prism:supplementStartingPage": generateCdataString(item.supplementStartingPage),
"prism:link": trimArray(item.links, generateCdataString),
"prism:wordCount": generateNumber(item.wordCount),
"prism:byteCount": generateNumber(item.byteCount),
"prism:rating": trimArray(item.ratings, generateCdataString),
"prism:timePeriod": generateCdataString(item.timePeriod),
"prism:versionIdentifier": generateCdataString(item.versionIdentifier),
"prism:ticker": trimArray(item.tickers, generateCdataString),
"prism:embargoDate": generateRfc3339Date(item.embargoDate),
"prism:copyright": generateCdataString(item.copyright),
"prism:expirationDate": generateRfc3339Date(item.expirationDate),
"prism:rightsAgent": generateCdataString(item.rightsAgent)
});
};
//#endregion
export { generateFeed, generateItem };