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.
		
		
		
		
		
			
		
			
				
					
					
						
							127 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							127 lines
						
					
					
						
							2.7 KiB
						
					
					
				#!/usr/bin/env node
 | 
						|
 | 
						|
 | 
						|
'use strict';
 | 
						|
 | 
						|
/*eslint-disable no-console*/
 | 
						|
 | 
						|
 | 
						|
var fs       = require('fs');
 | 
						|
var argparse = require('argparse');
 | 
						|
var yaml     = require('..');
 | 
						|
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
var cli = new argparse.ArgumentParser({
 | 
						|
  prog:     'js-yaml',
 | 
						|
  add_help:  true
 | 
						|
});
 | 
						|
 | 
						|
cli.add_argument('-v', '--version', {
 | 
						|
  action: 'version',
 | 
						|
  version: require('../package.json').version
 | 
						|
});
 | 
						|
 | 
						|
cli.add_argument('-c', '--compact', {
 | 
						|
  help:   'Display errors in compact mode',
 | 
						|
  action: 'store_true'
 | 
						|
});
 | 
						|
 | 
						|
// deprecated (not needed after we removed output colors)
 | 
						|
// option suppressed, but not completely removed for compatibility
 | 
						|
cli.add_argument('-j', '--to-json', {
 | 
						|
  help:   argparse.SUPPRESS,
 | 
						|
  dest:   'json',
 | 
						|
  action: 'store_true'
 | 
						|
});
 | 
						|
 | 
						|
cli.add_argument('-t', '--trace', {
 | 
						|
  help:   'Show stack trace on error',
 | 
						|
  action: 'store_true'
 | 
						|
});
 | 
						|
 | 
						|
cli.add_argument('file', {
 | 
						|
  help:   'File to read, utf-8 encoded without BOM',
 | 
						|
  nargs:  '?',
 | 
						|
  default: '-'
 | 
						|
});
 | 
						|
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
 | 
						|
var options = cli.parse_args();
 | 
						|
 | 
						|
 | 
						|
////////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
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));
 | 
						|
});
 |