I'm extremely stupid and didn't commit as I go. To anyone reading this I'm extremely sorry. A lot of these changes are very broad and I plan on releasing Babel 6.0.0 today live on stage at Ember Camp London so I'm afraid I couldn't wait. If you're ever in London I'll buy you a beer (or assorted beverage!) to make up for it, also I'll kiss your feet and give you a back massage, maybe.
87 lines
2.4 KiB
JavaScript
87 lines
2.4 KiB
JavaScript
let outputFileSync = require("output-file-sync");
|
|
let pathExists = require("path-exists");
|
|
let chokidar = require("chokidar");
|
|
let slash = require("slash");
|
|
let path = require("path");
|
|
let util = require("./util");
|
|
let fs = require("fs");
|
|
let _ = require("lodash");
|
|
|
|
module.exports = function (commander, filenames) {
|
|
function write(src, relative) {
|
|
// remove extension and then append back on .js
|
|
relative = relative.replace(/\.(\w*?)$/, "") + ".js";
|
|
|
|
let dest = path.join(commander.outDir, relative);
|
|
|
|
let data = util.compile(src, {
|
|
sourceFileName: slash(path.relative(dest + "/..", src)),
|
|
sourceMapTarget: path.basename(relative)
|
|
});
|
|
if (!commander.copyFiles && data.ignored) return;
|
|
|
|
// we've requested explicit sourcemaps to be written to disk
|
|
if (data.map && commander.sourceMaps && commander.sourceMaps !== "inline") {
|
|
let mapLoc = dest + ".map";
|
|
data.code = util.addSourceMappingUrl(data.code, mapLoc);
|
|
outputFileSync(mapLoc, JSON.stringify(data.map));
|
|
}
|
|
|
|
outputFileSync(dest, data.code);
|
|
util.chmod(src, dest);
|
|
|
|
util.log(src + " -> " + dest);
|
|
}
|
|
|
|
function handleFile(src, filename) {
|
|
if (util.shouldIgnore(src)) return;
|
|
|
|
if (util.canCompile(filename, commander.extensions)) {
|
|
write(src, filename);
|
|
} else if (commander.copyFiles) {
|
|
let dest = path.join(commander.outDir, filename);
|
|
outputFileSync(dest, fs.readFileSync(src));
|
|
util.chmod(src, dest);
|
|
}
|
|
}
|
|
|
|
function handle(filename) {
|
|
if (!pathExists.sync(filename)) return;
|
|
|
|
let stat = fs.statSync(filename);
|
|
|
|
if (stat.isDirectory(filename)) {
|
|
let dirname = filename;
|
|
|
|
_.each(util.readdir(dirname), function (filename) {
|
|
let src = path.join(dirname, filename);
|
|
handleFile(src, filename);
|
|
});
|
|
} else {
|
|
write(filename, filename);
|
|
}
|
|
}
|
|
|
|
_.each(filenames, handle);
|
|
|
|
if (commander.watch) {
|
|
_.each(filenames, function (dirname) {
|
|
let watcher = chokidar.watch(dirname, {
|
|
persistent: true,
|
|
ignoreInitial: true
|
|
});
|
|
|
|
_.each(["add", "change"], function (type) {
|
|
watcher.on(type, function (filename) {
|
|
let relative = path.relative(dirname, filename) || filename;
|
|
try {
|
|
handleFile(filename, relative);
|
|
} catch (err) {
|
|
console.error(err.stack);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
}
|
|
};
|