UNPKG

1.72 kBJavaScriptView Raw
1// traceur needs a version of System. It's possible that it's already
2// been required and System overwritten/lost.
3// This make sure traceur is entirely reloaded.
4
5var traceurPath = require.resolve("traceur");
6var path = require("path");
7var assign = require('object.assign');
8
9var search = path.sep + "node_modules" + path.sep + "traceur" + path.sep;
10var index = traceurPath.indexOf(search);
11var tPath = traceurPath.substr(0,index+search.length);
12
13for(var name in require.cache) {
14 if( name.indexOf(tPath) === 0 ) {
15 delete require.cache[name];
16 }
17}
18
19var globalNames = ["System"];
20
21var oldGlobals = {};
22globalNames.forEach(function(name){
23 oldGlobals[name] = global[name];
24});
25
26var traceur = require('traceur');
27var NodeCompiler = traceur.NodeCompiler;
28var commonJSOptions = traceur.commonJSOptions;
29
30var globals = {};
31globalNames.forEach(function(name){
32 globals[name] = global[name];
33});
34
35globalNames.forEach(function(name){
36 global[name] = oldGlobals[name];
37});
38
39module.exports = function(source, compileOptions, options){
40 var saved = {};
41 var theCompilerOptions = assign({}, compileOptions);
42
43 globalNames.forEach(function(name){
44 saved[name] = global[name];
45 global[name] = globals[name];
46 });
47
48 if(theCompilerOptions.sourceMaps) {
49 theCompilerOptions.sourceMaps = "memory";
50 }
51 if(options.traceurOptions) {
52 theCompilerOptions = assign(options.traceurOptions, theCompilerOptions);
53 }
54 var compiler = new NodeCompiler(commonJSOptions(theCompilerOptions));
55
56 var result = {};
57 result.code = compiler.compile(source, theCompilerOptions.filename, theCompilerOptions.filename);
58 result.map = compiler.getSourceMap();
59
60 globalNames.forEach(function(name){
61 global[name] = saved[name];
62 });
63
64 return result;
65};