|
|
#!/usr/bin/env node
'use strict';
/*eslint-disable no-console*/
// stdlib
var fs = require('fs');
// 3rd-party
var argparse = require('argparse');
// internal
var yaml = require('..');
////////////////////////////////////////////////////////////////////////////////
var cli = new argparse.ArgumentParser({ prog: 'js-yaml', version: require('../package.json').version, addHelp: true });
cli.addArgument([ '-c', '--compact' ], { help: 'Display errors in compact mode', action: 'storeTrue' });
// deprecated (not needed after we removed output colors)
// option suppressed, but not completely removed for compatibility
cli.addArgument([ '-j', '--to-json' ], { help: argparse.Const.SUPPRESS, dest: 'json', action: 'storeTrue' });
cli.addArgument([ '-t', '--trace' ], { help: 'Show stack trace on error', action: 'storeTrue' });
cli.addArgument([ 'file' ], { help: 'File to read, utf-8 encoded without BOM', nargs: '?', defaultValue: '-' });
////////////////////////////////////////////////////////////////////////////////
var options = cli.parseArgs();
////////////////////////////////////////////////////////////////////////////////
function readFile(filename, encoding, callback) { if (options.file === '-') { // read from stdin
var chunks = [];
process.stdin.on('data', function (chunk) { chunks.push(chunk); });
process.stdin.on('end', function () { return callback(null, Buffer.concat(chunks).toString(encoding)); }); } else { fs.readFile(filename, encoding, callback); } }
readFile(options.file, 'utf8', function (error, input) { var output, isYaml;
if (error) { if (error.code === 'ENOENT') { console.error('File not found: ' + options.file); process.exit(2); }
console.error( options.trace && error.stack || error.message || String(error));
process.exit(1); }
try { output = JSON.parse(input); isYaml = false; } catch (err) { if (err instanceof SyntaxError) { try { output = []; yaml.loadAll(input, function (doc) { output.push(doc); }, {}); isYaml = true;
if (output.length === 0) output = null; else if (output.length === 1) output = output[0];
} catch (e) { if (options.trace && err.stack) console.error(e.stack); else console.error(e.toString(options.compact));
process.exit(1); } } else { console.error( options.trace && err.stack || err.message || String(err));
process.exit(1); } }
if (isYaml) console.log(JSON.stringify(output, null, ' ')); else console.log(yaml.dump(output)); });
|