Files
meteor/packages/ecmascript/plugin.js
Ben Newman c2d8a1b6c4 Upgrade meteor-babel and enable jscript plugin for client-side code.
The jscript plugin works around various limitations of older Internet
Explorer versions, in particular those described here:
http://kiro.me/blog/nfe_dilemma.html
2015-07-23 14:39:18 -04:00

73 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 babelOptions = Babel.getDefaultOptions();
babelOptions.sourceMap = true;
babelOptions.filename = inputFilePath;
babelOptions.sourceFileName = "/" + inputFilePath;
babelOptions.sourceMapName = "/" + outputFilePath + ".map";
var targetCouldBeInternetExplorer8 =
inputFile.getArch() === "web.browser";
if (targetCouldBeInternetExplorer8) {
// Perform some additional transformations to improve
// compatibility in older browsers (e.g. wrapping named function
// expressions, per http://kiro.me/blog/nfe_dilemma.html).
babelOptions.whitelist.push("jscript");
}
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();
});