UNPKG

1.98 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 execMeta = metadata.eval &&
24 ('{' + "'eval': '" + metadata.eval + "'" + "}");
25 var source = jsStringEscape(load.source);
26 var code = "define(\"" + name + "\", " + JSON.stringify(deps) +
27 ", function(module, loader, require) {\n" +
28 " loader.get(\"@@global-helpers\").prepareGlobal({\n" +
29 " require: require,\n" +
30 " name: module.id,\n" +
31 " deps: " + JSON.stringify(metaDeps) + ", \n" +
32 (preparedExportName ? "exports: " + preparedExportName + ", \n" : "") +
33 (metadata.globals ? "globals: " + JSON.stringify(metadata.globals) + "\n" : "") +
34 " });\n" +
35 " var define = loader.global.define;\n" +
36 " var require = loader.global.require;\n" +
37 " var source = \"" + source + "\";\n" +
38 (metadata.init ? " var init = " + metadata.init.toString() + ";\n" : "") +
39 " loader.global.define = undefined;\n" +
40 " loader.global.module = undefined;\n" +
41 " loader.global.exports = undefined;\n" +
42 " loader.__exec({'source': source, 'address': module.uri" +
43 (execMeta ? (",'metadata': " + execMeta) : "") +
44 "});\n" +
45 " loader.global.require = require;\n" +
46 " loader.global.define = define;\n" +
47 "\n return loader.get(\"@@global-helpers\").retrieveGlobal(module.id, " +
48 exports + (metadata.init ? ", init" : "") + ");" +
49 "\n});";
50
51 var ast = esprima.parse(code);
52 return ast;
53};