#!/usr/bin/env node var args = require('../lib/cli') .helpfile(__dirname+'/../Usage.txt') .version(require('../package.json').version) .minimist({ boolean: ['ast', 'verbose', 'compat'], string: ['indent'], alias: { h: 'help', v: 'version', V: 'verbose', i: 'indent' } }); var read = require('read-input'); var js2coffee = require('../index'); read(args._, function (err, res) { if (err) { console.error(err); process.exit(8); } res.successes.forEach(function (file) { var data = file.data; var options = { filename: file.name || '[stdin]', compat: args.compat, indent: args.indent }; try { var out = js2coffee.build(data, options); if (args.ast) { if (!args.verbose) out.ast = scrub(out.ast); console.log(inspect(out.ast)); } else { printWarnings(out.warnings); process.stdout.write(out.code); } } catch (err) { if (!err.js2coffee) { console.error(err.message); console.error(err.stack); } else { printError(err); } process.exit(16); } }); }); function inspect(data) { var colors = process.stdout.isTTY; return require('util').inspect(data, { depth: null, colors: colors }); } /* * removes "range" and "loc" */ function scrub(obj) { if (Array.isArray(obj)) { return obj.map(function (item) { return scrub(item); }); } else if (typeof obj === 'object') { for (var key in obj) { if (!obj.hasOwnProperty(key)) continue; if (key === 'range' || key === 'loc') { delete obj[key]; } else { obj[key] = scrub(obj[key]); } } return obj; } else { return obj; } } /* * heh */ function printWarnings (warnings) { if (!warnings || warnings.length === 0) return; var comments = warnings.map(function (warn) { var msg = '' + warn.filename + ':' + warn.start.line + ':' + warn.start.column + ': ' + c(34, '[warning] ') + warn.description; console.warn(msg); }); } function printError (err) { var msg = '' + err.filename + ':' + err.start.line + ':' + err.start.column + ': ' + c(31, '[error] ') + err.description; console.error(msg); } function c (color, str) { if (process.stdout.isTTY) return "\033[" + color + "m" + str + "\033[0m"; else return str; }