|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #!/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`
- )
- }
|