treat transpilers as plugins

This commit is contained in:
guybedford 2016-10-04 18:00:06 +02:00
parent 232f994b74
commit 8fa13b5669

View File

@ -44,7 +44,14 @@
// do transpilation
return (loader._loader.transpilerPromise || (
loader._loader.transpilerPromise = Promise.resolve(
__global[loader.transpiler == 'typescript' ? 'ts' : loader.transpiler] || (loader.pluginLoader || loader)['import'](loader.transpiler)
__global[loader.transpiler == 'typescript' ? 'ts' : loader.transpiler] || (loader.pluginLoader || loader).normalize(loader.transpiler)
.then(function(normalized) {
loader._loader.transpilerNormalized = normalized;
return (loader.pluginLoader || loader).load(normalized)
.then(function() {
return (loader.pluginLoader || loader).get(normalized);
});
})
))).then(function(transpiler) {
loader._loader.loadedTranspilerRuntime = true;
@ -53,6 +60,8 @@
// if transpiler is the same as the plugin loader, then don't run twice
if (transpiler == load.metadata.loaderModule)
return load.source;
load.metadata.loaderModule = transpiler;
load.metadata.loader = loader._loader.transpilerNormalized;
// convert the source map into an object for transpilation chaining
if (typeof load.metadata.sourceMap == 'string')
@ -64,7 +73,7 @@
var sourceMap = load.metadata.sourceMap;
if (sourceMap && typeof sourceMap == 'object') {
var originalName = load.address.split('!')[0];
// force set the filename of the original file
if (!sourceMap.file || sourceMap.file == load.address)
sourceMap.file = originalName + '!transpiled';
@ -83,14 +92,14 @@
// legacy builder support
if (loader.builder)
load.metadata.originalSource = load.source;
// defined in es6-module-loader/src/transpile.js
return transpile.call(loader, load)
.then(function(source) {
// clear sourceMap as transpiler embeds it
load.metadata.sourceMap = undefined;
return source;
});
});
}, function(err) {
throw addToError(err, 'Unable to load transpiler to transpile ' + load.name);
});