UNPKG

1.84 kBJavaScriptView Raw
1var esprima = require("esprima");
2var jsStringEscape = require("js-string-escape");
3
4module.exports = function(load){
5 var name = load.name;
6 var metadata = load.metadata || {};
7
8 var metaDeps = metadata.deps || [];
9 var deps = ["module", "@loader", "require"].concat(metaDeps);
10 var exports = "undefined";
11 if(metadata.exports) {
12 exports = "\"" + metadata.exports + "\"";
13 } else if(metadata.exports === false) {
14 exports = "false";
15 }
16 var preparedExportName = "";
17 if(typeof metadata.exports !== "undefined") {
18 preparedExportName = exports;
19 } else if(metadata.init) {
20 preparedExportName = true;
21 }
22
23 var source = jsStringEscape(load.source);
24 var code = "define(\"" + name + "\", " + JSON.stringify(deps) +
25 ", function(module, loader, require) {\n" +
26 " loader.get(\"@@global-helpers\").prepareGlobal({\n" +
27 " require: require,\n" +
28 " name: module.id,\n" +
29 " deps: " + JSON.stringify(metaDeps) + ", \n" +
30 (preparedExportName ? "exports: " + preparedExportName + ", \n" : "") +
31 (metadata.globals ? "globals: " + JSON.stringify(metadata.globals) + "\n" : "") +
32 " });\n" +
33 " var define = loader.global.define;\n" +
34 " var require = loader.global.require;\n" +
35 " var source = \"" + source + "\";\n" +
36 (metadata.init ? " var init = " + metadata.init.toString() + ";\n" : "") +
37 " loader.global.define = undefined;\n" +
38 " loader.global.module = undefined;\n" +
39 " loader.global.exports = undefined;\n" +
40 " loader.__exec({'source': source, 'address': module.uri});\n" +
41 " loader.global.require = require;\n" +
42 " loader.global.define = define;\n" +
43 "\n return loader.get(\"@@global-helpers\").retrieveGlobal(module.id, " +
44 exports + (metadata.init ? ", init" : "") + ");" +
45 "\n});";
46
47 var ast = esprima.parse(code);
48 return ast;
49};