From f9ef0682cfbb73b7ff8e94ded73798464d7d7e14 Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Fri, 24 Nov 2023 14:35:13 -0600 Subject: [PATCH] add xml format option --- package-lock.json | 27 +++++++++++++++++++++++++++ packages/cli/index.js | 17 +++++++++++++++-- packages/cli/package.json | 1 + 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index a1e3dc5..e790dee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2387,6 +2387,27 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-xml-parser": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz", + "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -5297,6 +5318,11 @@ "node": ">=0.10.0" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "node_modules/sucrase": { "version": "3.34.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", @@ -5977,6 +6003,7 @@ "dependencies": { "aas-lib": "^0.1.0", "commander": "^11.1.0", + "fast-xml-parser": "^4.3.2", "serialport": "^12.0.0", "ws": "^8.14.2" }, diff --git a/packages/cli/index.js b/packages/cli/index.js index 3356ba0..8d80590 100755 --- a/packages/cli/index.js +++ b/packages/cli/index.js @@ -5,6 +5,7 @@ const { Console, Packets } = require('aas-lib'); const { writeFileSync } = require('fs'); const { program, Option } = require('commander'); const { WebSocketServer } = require('ws'); +const { XMLBuilder } = require('fast-xml-parser'); const packageInfo = require('./package.json'); @@ -13,7 +14,7 @@ program.version(packageInfo.version); program.description('Simple protocol router /s'); program.option('-d, --device ', 'serialport path'); program.option('-o, --output ', 'file to write console info to'); -program.addOption(new Option('-f, --format ').choices(['json']).default('json')); +program.addOption(new Option('-f, --format ').choices(['json', 'xml']).default('json')); program.option('--websocket ', 'enable websocket server for updates', undefined); program.parse(process.argv); @@ -25,6 +26,9 @@ if (!options.device) { let ws; let updateTimeout; + +let xmlBuilder; + if (options.websocket) { ws = new WebSocketServer({ port: options.websocket }); } @@ -72,8 +76,17 @@ port.on('data', (data) => { } if (options.output && aasConsole.sportInitialized) { try { + let outputString; if (options.format === 'json') { - writeFileSync(options.output, JSON.stringify(aasConsole, null, 2)); + outputString = JSON.stringify(aasConsole, null, 2); + } else if (options.format === 'xml') { + if (!xmlBuilder) { + xmlBuilder = new XMLBuilder(); + } + outputString = xmlBuilder.build({ console: aasConsole.toJSON() }); + } + if (outputString) { + writeFileSync(options.output, outputString); } } catch (error) { console.error(`app: problem writing to output file -> ${options.output}`); diff --git a/packages/cli/package.json b/packages/cli/package.json index 2c8b219..0c038a8 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -15,6 +15,7 @@ "dependencies": { "aas-lib": "^0.1.0", "commander": "^11.1.0", + "fast-xml-parser": "^4.3.2", "serialport": "^12.0.0", "ws": "^8.14.2" },