UNPKG

funcunit

Version:
103 lines (86 loc) 3.15 kB
/* * Traceur and Babel transpile hook for Loader */ (function(Loader) { var g = __global; function getTranspilerModule(loader, globalName) { return loader.newModule({ 'default': g[globalName], __useDefault: true }); } // use Traceur by default Loader.prototype.transpiler = 'traceur'; Loader.prototype.transpile = function(load) { var self = this; // pick up Transpiler modules from existing globals on first run if set if (!self.transpilerHasRun) { if (g.traceur && !self.has('traceur')) self.set('traceur', getTranspilerModule(self, 'traceur')); if (g.babel && !self.has('babel')) self.set('babel', getTranspilerModule(self, 'babel')); self.transpilerHasRun = true; } return self['import'](self.transpiler).then(function(transpiler) { if (transpiler.__useDefault) transpiler = transpiler['default']; return 'var __moduleAddress = "' + load.address + '";' + (transpiler.Compiler ? traceurTranspile : babelTranspile).call(self, load, transpiler); }); }; Loader.prototype.instantiate = function(load) { var self = this; return Promise.resolve(self.normalize(self.transpiler)) .then(function(transpilerNormalized) { // load transpiler as a global (avoiding System clobbering) if (load.name === transpilerNormalized) { return { deps: [], execute: function() { var curSystem = g.System; var curLoader = g.Reflect.Loader; // ensure not detected as CommonJS __eval('(function(require,exports,module){' + load.source + '})();', g, load); g.System = curSystem; g.Reflect.Loader = curLoader; return getTranspilerModule(self, load.name); } }; } }); }; function traceurTranspile(load, traceur) { var options = this.traceurOptions || {}; options.modules = 'instantiate'; options.script = false; options.sourceMaps = 'inline'; options.filename = load.address; options.inputSourceMap = load.metadata.sourceMap; options.moduleName = false; var compiler = new traceur.Compiler(options); var source = doTraceurCompile(load.source, compiler, options.filename); // add "!eval" to end of Traceur sourceURL // I believe this does something? source += '!eval'; return source; } function doTraceurCompile(source, compiler, filename) { try { return compiler.compile(source, filename); } catch(e) { // traceur throws an error array throw e[0]; } } function babelTranspile(load, babel) { var options = this.babelOptions || {}; options.modules = 'system'; options.sourceMap = 'inline'; options.filename = load.address; options.code = true; options.ast = false; if (!options.blacklist) options.blacklist = ['react']; var source = babel.transform(load.source, options).code; // add "!eval" to end of Babel sourceURL // I believe this does something? return source + '\n//# sourceURL=' + load.address + '!eval'; } })(__global.LoaderPolyfill);