var sourceMap = require("source-map"); var chokidar = require("chokidar"); var util2 = require("../../lib/6to5/util"); var path = require("path"); var util = require("./util"); var fs = require("fs"); var _ = require("lodash"); module.exports = function (commander, filenames, opts) { var results = []; var buildResult = function () { var map = new sourceMap.SourceMapGenerator({ file: commander.outFile || "stdout" }); var code = ""; var offset = 0; _.each(results, function (result) { var filename = result.filename; code += result.code + "\n"; if (result.map) { var consumer = new sourceMap.SourceMapConsumer(result.map); map._sources.add(filename); map.setSourceContent(filename, result.actual); consumer.eachMapping(function (mapping) { map._mappings.push({ generatedLine: mapping.generatedLine + offset, generatedColumn: mapping.generatedColumn, originalLine: mapping.originalLine, originalColumn: mapping.originalColumn, source: filename }); }); offset = code.split("\n").length; } }); if (commander.sourceMapsInline || (!commander.outFile && commander.sourceMaps)) { code += "\n" + util2.sourceMapToComment(map); } return { map: map, code: code } }; var output = function () { var result = buildResult(); if (commander.outFile) { if (commander.sourceMaps) { fs.writeFileSync(commander.outFile + ".map", JSON.stringify(result.map)); } fs.writeFileSync(commander.outFile, result.code); } else { console.log(result.code); } }; var stdin = function () { var code = ""; process.stdin.setEncoding("utf8"); process.stdin.on("readable", function () { var chunk = process.stdin.read(); if (chunk !== null) code += chunk; }); process.stdin.on("end", function() { results.push(util.transform(commander.filename, code)); output(); }); }; var walk = function () { var _filenames = []; results = []; _.each(filenames, function (filename) { if (!fs.existsSync(filename)) return; var stat = fs.statSync(filename); if (stat.isDirectory()) { var dirname = filename; _.each(util.readdirFilter(filename), function (filename) { _filenames.push(path.join(dirname, filename)); }); } else { _filenames.push(filename); } }); _.each(_filenames, function (filename, i) { results.push(util.compile(filename, { _noStrict: i != 0 })); }); output(); }; var files = function () { walk(); if (commander.watch) { var watcher = chokidar.watch(filenames, { persistent: true, ignoreInitial: true }); _.each(["add", "change", "unlink"], function (type) { watcher.on(type, function (filename) { console.log(type, filename); walk(); }); }); } }; if (filenames.length) { files(); } else { stdin(); } };