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.
		
		
		
		
		
			
		
			
				
					
					
						
							132 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							132 lines
						
					
					
						
							2.7 KiB
						
					
					
				#!/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)); | 
						|
});
 | 
						|
 |