| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 | #!/usr/bin/env nodeconst fs = require('fs')const path = require('path')const pkg = require('../package.json')const JSON5 = require('./')const argv = parseArgs()if (argv.version) {    version()} else if (argv.help) {    usage()} else {    const inFilename = argv.defaults[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.outFile) {                    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.outFile) {                    writeStream = fs.createWriteStream(argv.outFile)                } else {                    writeStream = process.stdout                }                writeStream.write(json)            }        } catch (err) {            console.error(err.message)            process.exit(1)        }    })}function parseArgs () {    let convert    let space    let validate    let outFile    let version    let help    const defaults = []    const args = process.argv.slice(2)    for (let i = 0; i < args.length; i++) {        const arg = args[i]        switch (arg) {        case '--convert':        case '-c':            convert = true            break        case '--space':        case '-s':            space = args[++i]            break        case '--validate':        case '-v':            validate = true            break        case '--out-file':        case '-o':            outFile = args[++i]            break        case '--version':        case '-V':            version = true            break        case '--help':        case '-h':            help = true            break        default:            defaults.push(arg)            break        }    }    return {        convert,        space,        validate,        outFile,        version,        help,        defaults,    }}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`    )}
 |