#!/usr/bin/env node var commander = require("commander"); var path = require("path"); var repl = require("repl"); var to5 = require("../lib/6to5"); var util = require("../lib/6to5/util"); var vm = require("vm"); var _ = require("lodash"); commander.option("-e, --eval [script]", "Evaluate script"); commander.option("-p, --print", "Evaluate script and print result"); commander.option("-i, --ignore [regex]", "Ignore all files that match this regex when using the require hook"); commander.option("-x, --extensions [extensions]", "List of extensions to hook into [.es6,.js]"); commander.option("-r, --experimental", "Enable experimental support for proposed ES7 features"); commander.option("-g, --playground", "Enable playground support"); var pkg = require("../package.json"); commander.version(pkg.version); commander.usage("[options] [ -e script | script.js ] [arguments]"); commander.parse(process.argv); // to5.register({ experimental: commander.experimental, extensions: commander.extensions, ignore: commander.ignore }); // var _eval = function (code, filename) { code = to5.transform(code, { modules: "commonInterop", filename: filename, blacklist: ["useStrict"], experimental: commander.experimental }).code; return vm.runInThisContext(code, filename); }; if (commander.eval) { var result = _eval(commander.eval, "eval"); if (commander.print) console.log(result); } else { var filenames = commander.args; if (filenames.length) { _.each(filenames, function (filename) { if (!util.isAbsolute(filename)) { filename = path.join(process.cwd(), filename); } require(require.resolve(filename)); }); } else { replStart(); } } function replStart() { repl.start({ prompt: "> ", input: process.stdin, output: process.stdout, eval: replEval, useGlobal: true }); } function replEval(code, context, filename, callback) { var err; var result; try { if (/^\((.*?)\n\)$/.test(code)) { code = code.slice(1, -2); // remove "(" and "\n)" } result = _eval(code, filename); } catch (e) { err = e; } callback(err, result); }