You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.8 KiB
112 lines
2.8 KiB
#!/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` |
|
) |
|
}
|
|
|