aboutsummaryrefslogtreecommitdiff
path: root/node_modules/json5/lib/cli.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/json5/lib/cli.js')
-rwxr-xr-xnode_modules/json5/lib/cli.js112
1 files changed, 112 insertions, 0 deletions
diff --git a/node_modules/json5/lib/cli.js b/node_modules/json5/lib/cli.js
new file mode 100755
index 0000000..de852f1
--- /dev/null
+++ b/node_modules/json5/lib/cli.js
@@ -0,0 +1,112 @@
+#!/usr/bin/env node
+
+const fs = require('fs')
+const path = require('path')
+const minimist = require('minimist')
+const pkg = require('../package.json')
+const JSON5 = require('./')
+
+const argv = minimist(process.argv.slice(2), {
+ alias: {
+ 'convert': 'c',
+ 'space': 's',
+ 'validate': 'v',
+ 'out-file': 'o',
+ 'version': 'V',
+ 'help': 'h',
+ },
+ boolean: [
+ 'convert',
+ 'validate',
+ 'version',
+ 'help',
+ ],
+ string: [
+ 'space',
+ 'out-file',
+ ],
+})
+
+if (argv.version) {
+ version()
+} else if (argv.help) {
+ usage()
+} else {
+ const inFilename = argv._[0]
+
+ let readStream
+ if (inFilename) {
+ readStream = fs.createReadStream(inFilename)
+ } else {
+ readStream = process.stdin
+ }
+
+ let json5 = ''
+ readStream.on('data', data => {
+ json5 += data
+ })
+
+ readStream.on('end', () => {
+ let space
+ if (argv.space === 't' || argv.space === 'tab') {
+ space = '\t'
+ } else {
+ space = Number(argv.space)
+ }
+
+ let value
+ try {
+ value = JSON5.parse(json5)
+ if (!argv.validate) {
+ const json = JSON.stringify(value, null, space)
+
+ let writeStream
+
+ // --convert is for backward compatibility with v0.5.1. If
+ // specified with <file> and not --out-file, then a file with
+ // the same name but with a .json extension will be written.
+ if (argv.convert && inFilename && !argv.o) {
+ const parsedFilename = path.parse(inFilename)
+ const outFilename = path.format(
+ Object.assign(
+ parsedFilename,
+ {base: path.basename(parsedFilename.base, parsedFilename.ext) + '.json'}
+ )
+ )
+
+ writeStream = fs.createWriteStream(outFilename)
+ } else if (argv.o) {
+ writeStream = fs.createWriteStream(argv.o)
+ } else {
+ writeStream = process.stdout
+ }
+
+ writeStream.write(json)
+ }
+ } catch (err) {
+ console.error(err.message)
+ process.exit(1)
+ }
+ })
+}
+
+function version () {
+ console.log(pkg.version)
+}
+
+function usage () {
+ console.log(
+ `
+ Usage: json5 [options] <file>
+
+ If <file> is not provided, then STDIN is used.
+
+ Options:
+
+ -s, --space The number of spaces to indent or 't' for tabs
+ -o, --out-file [file] Output to the specified file, otherwise STDOUT
+ -v, --validate Validate JSON5 but do not output JSON
+ -V, --version Output the version number
+ -h, --help Output usage information`
+ )
+}