1 | var esprima = require("esprima-next");
|
2 | var jsStringEscape = require("js-string-escape");
|
3 |
|
4 | module.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 | };
|