diff --git a/package-lock.json b/package-lock.json index 5a08ca7481a..835a2689036 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,8 @@ "postcss-media-variables": "2.0.1", "postcss-nesting": "8.0.1", "pug": "3.0.2", - "sync-request": "6.1.0" + "sync-request": "6.1.0", + "xml-formatter": "2.4.1" }, "engines": { "node": ">=16.0.0" @@ -4934,6 +4935,27 @@ } } }, + "node_modules/xml-formatter": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.4.1.tgz", + "integrity": "sha512-UFnFRNum4BxicU9U4DPhIlHAQqHtT/vTdCvC6fiD78xlpug8YLgawW3MHmT1+eCAM7YomvMGZziiMz9AnExZgQ==", + "dev": true, + "dependencies": { + "xml-parser-xo": "^3.1.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/xml-parser-xo": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.1.2.tgz", + "integrity": "sha512-Qyttmiy305unyg1ONpArT4FPDL3J+ohXWpMI1ecopClGMw53lCRHJ4FV/fVYHFU6qfEzMV0frqSlNaLo2dw15Q==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/xmlhttprequest-ssl": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.2.tgz", @@ -9027,6 +9049,21 @@ "dev": true, "requires": {} }, + "xml-formatter": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.4.1.tgz", + "integrity": "sha512-UFnFRNum4BxicU9U4DPhIlHAQqHtT/vTdCvC6fiD78xlpug8YLgawW3MHmT1+eCAM7YomvMGZziiMz9AnExZgQ==", + "dev": true, + "requires": { + "xml-parser-xo": "^3.1.2" + } + }, + "xml-parser-xo": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.1.2.tgz", + "integrity": "sha512-Qyttmiy305unyg1ONpArT4FPDL3J+ohXWpMI1ecopClGMw53lCRHJ4FV/fVYHFU6qfEzMV0frqSlNaLo2dw15Q==", + "dev": true + }, "xmlhttprequest-ssl": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.2.tgz", diff --git a/package.json b/package.json index 31c91ad3870..e95e5a725e4 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "postcss-media-variables": "2.0.1", "postcss-nesting": "8.0.1", "pug": "3.0.2", - "sync-request": "6.1.0" + "sync-request": "6.1.0", + "xml-formatter": "2.4.1" } } diff --git a/tasks/fetch_feed.js b/tasks/fetch_feed.js index 983127beb77..5eed516e409 100644 --- a/tasks/fetch_feed.js +++ b/tasks/fetch_feed.js @@ -5,7 +5,8 @@ const { masterFeedUrl, publicFeedUrl } = require('../content/meta.json') const nodes = require('../content/nodes.json') const request = require('sync-request') const parser = require('fast-xml-parser') -const JSON2XMLParser = require("fast-xml-parser").j2xParser; +const JSON2XMLParser = require('fast-xml-parser').j2xParser +const xmlFormat = require('xml-formatter') const he = require('he') const debug = process.env.CI @@ -14,12 +15,12 @@ const write = (name, data) => writeFileSync(join(dir, name), data) const writeJSON = (name, data) => write(`generated/${name}.json`, JSON.stringify(data, null, 2)) const commonOpts = { - attributeNamePrefix: "", - attrNodeName: "__attr", - textNodeName: "#text", + attributeNamePrefix: '', + attrNodeName: '__attr', + textNodeName: '#text', ignoreAttributes: false, - cdataTagName: "__cdata", - cdataPositionChar: "\\c" + cdataTagName: '__cdata', + cdataPositionChar: '\\c' } const xml2jsonOpts = { @@ -41,7 +42,7 @@ const xml2jsonOpts = { var json2xmlOpts = { ...commonOpts, format: false, - indentBy: " ", + indentBy: ' ', supressEmptyNode: false, tagValueProcessor: a => a, attrValueProcessor: a => he.encode(a, { isAttributeValue: true, useNamedReferences: true }) @@ -139,8 +140,7 @@ const parseEpisode = e => { const outputXML = JSON2XML.parse(feed) writeJSON('episodes', episodes) - write('dist/feed.xml', outputXML) - write('dist/anchor.xml', anchorXML) + write('dist/feed.xml', xmlFormat(outputXML, { indentation: ' ', collapseContent: true })) if (_noParticipants.length) { console.log('Keine Teilnehmerliste')