1 |
|
2 |
|
3 |
|
4 |
|
5 | var traceurPath = require.resolve("traceur");
|
6 | var path = require("path");
|
7 | var assign = require("lodash/assign");
|
8 |
|
9 | var search = path.sep + "node_modules" + path.sep + "traceur" + path.sep;
|
10 | var index = traceurPath.indexOf(search);
|
11 | var tPath = traceurPath.substr(0,index+search.length);
|
12 |
|
13 | for(var name in require.cache) {
|
14 | if( name.indexOf(tPath) === 0 ) {
|
15 | delete require.cache[name];
|
16 | }
|
17 | }
|
18 |
|
19 | var globalNames = ["System"];
|
20 |
|
21 | var oldGlobals = {};
|
22 | globalNames.forEach(function(name){
|
23 | oldGlobals[name] = global[name];
|
24 | });
|
25 |
|
26 | var traceur = require('traceur');
|
27 | var NodeCompiler = traceur.NodeCompiler;
|
28 | var commonJSOptions = traceur.commonJSOptions;
|
29 |
|
30 | var globals = {};
|
31 | globalNames.forEach(function(name){
|
32 | globals[name] = global[name];
|
33 | });
|
34 |
|
35 | globalNames.forEach(function(name){
|
36 | global[name] = oldGlobals[name];
|
37 | });
|
38 |
|
39 | module.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 | };
|