Files
meteor/packages/ecmascript/plugin.js
Ben Newman 5e4ed8eb28 Fix IE8 for-in loops using babelHelpers.sanitizeForInObject.
Upgraded meteor-babel to 0.5.4 for sanitizeForInObject support.
2015-08-03 20:40:11 -04:00

71 lines
1.9 KiB
JavaScript

function BabelCompiler() {}
var BCp = BabelCompiler.prototype;
BCp.processFilesForTarget = function (inputFiles) {
inputFiles.forEach(function (inputFile) {
var source = inputFile.getContentsAsString();
var inputFilePath = inputFile.getPathInPackage();
var outputFilePath = inputFile.getPathInPackage();
var fileOptions = inputFile.getFileOptions();
var toBeAdded = {
sourcePath: inputFilePath,
path: outputFilePath,
data: source,
hash: inputFile.getSourceHash(),
sourceMap: null,
bare: !! fileOptions.bare
};
if (fileOptions.transpile !== false) {
var targetCouldBeInternetExplorer8 =
inputFile.getArch() === "web.browser";
var babelOptions = Babel.getDefaultOptions({
// Perform some additional transformations to improve
// compatibility in older browsers (e.g. wrapping named function
// expressions, per http://kiro.me/blog/nfe_dilemma.html).
jscript: targetCouldBeInternetExplorer8
});
babelOptions.sourceMap = true;
babelOptions.filename = inputFilePath;
babelOptions.sourceFileName = "/" + inputFilePath;
babelOptions.sourceMapName = "/" + outputFilePath + ".map";
try {
var result = Babel.compile(source, babelOptions);
} catch (e) {
if (e.loc) {
inputFile.error({
message: e.message,
sourcePath: inputFilePath,
line: e.loc.line,
column: e.loc.column,
});
return;
}
throw e;
}
toBeAdded.data = result.code;
toBeAdded.hash = result.hash;
toBeAdded.sourceMap = result.map;
}
inputFile.addJavaScript(toBeAdded);
});
};
BCp.setDiskCacheDirectory = function (cacheDir) {
Babel.setCacheDir(cacheDir);
};
Plugin.registerCompiler({
extensions: ['js'],
}, function () {
return new BabelCompiler();
});