1 | var assign = require("lodash/assign");
|
2 | var merge = require("lodash/merge");
|
3 |
|
4 | var trace = function(System, BuildSystem, startupCalledPromise, onFulfilled){
|
5 |
|
6 | System.pluginLoader = BuildSystem;
|
7 | BuildSystem.localLoader = System;
|
8 |
|
9 |
|
10 | var systemConfig = System.config;
|
11 | System.config = function(cfg) {
|
12 | System.__loaderConfig = System.__loaderConfig || {};
|
13 | assign(System.__loaderConfig, cfg);
|
14 | systemConfig.apply(System, arguments);
|
15 | };
|
16 |
|
17 | var systemLocate = System.locate;
|
18 | System.locate = function(load) {
|
19 | if(load.metadata.parsedModuleName && !load.metadata.packageJson) {
|
20 | var pmn = load.metadata.parsedModuleName;
|
21 | var packages = this.npmContext.packages, pkg;
|
22 | for(var i = 0; i < packages.length; i++) {
|
23 | pkg = packages[i];
|
24 | if(pkg.name === pmn.packageName && pkg.version === pmn.version) {
|
25 | load.metadata.packageJson = pkg;
|
26 | break;
|
27 | }
|
28 | }
|
29 | }
|
30 | return systemLocate.apply(this, arguments);
|
31 | };
|
32 |
|
33 |
|
34 | var buildInstantiate = BuildSystem.instantiate;
|
35 | BuildSystem.instantiate = function(load){
|
36 | var res = buildInstantiate.apply(this, arguments);
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 | if (load.metadata.useLocalDeps) {
|
43 | return startupCalledPromise
|
44 | .then(function() {
|
45 | return System.import(System.configMain);
|
46 | })
|
47 | .then(function() {
|
48 | return System.import(load.name);
|
49 | })
|
50 | .then(function () {
|
51 | return res;
|
52 | });
|
53 | }
|
54 | else {
|
55 |
|
56 | BuildSystem.import(load.name).then(function(pluginValue){
|
57 |
|
58 |
|
59 | var deps = load.metadata.deps || [];
|
60 | var dependencies = load.metadata.dependencies || [];
|
61 | onFulfilled(load, deps, dependencies, pluginValue);
|
62 | });
|
63 |
|
64 | return res;
|
65 | }
|
66 | };
|
67 |
|
68 | var buildConfig = BuildSystem.config;
|
69 | BuildSystem.config = function(cfg){
|
70 |
|
71 | if(cfg && cfg.meta && this.meta) {
|
72 | cfg = assign({}, cfg, {
|
73 | meta: merge({}, this.meta, cfg.meta)
|
74 | });
|
75 | }
|
76 | buildConfig.call(this, cfg);
|
77 | };
|
78 |
|
79 | System.preventModuleExecution = true;
|
80 | System.allowModuleExecution(System.configMain);
|
81 |
|
82 |
|
83 | var systemInstantiate = System.instantiate;
|
84 | System.instantiate = function(load){
|
85 |
|
86 | var pluginName = load.metadata.pluginName;
|
87 |
|
88 | var res = systemInstantiate.apply(this, arguments);
|
89 |
|
90 | return Promise.resolve(res).then(function fullfill(instantiateResult){
|
91 | var deps = load.metadata.deps || [];
|
92 | var dependencies = load.metadata.dependencies || [];
|
93 | if(pluginName) {
|
94 | deps = deps.concat([pluginName]);
|
95 | dependencies = dependencies.concat([pluginName]);
|
96 | }
|
97 |
|
98 |
|
99 |
|
100 |
|
101 | if(load.name === System.configMain && load.metadata.format === "global") {
|
102 | load.metadata.format = "cjs";
|
103 | }
|
104 |
|
105 | if(load.metadata.includeInDependencyGraph !== false) {
|
106 | onFulfilled(load, deps, dependencies);
|
107 | }
|
108 |
|
109 | return instantiateResult;
|
110 | });
|
111 | };
|
112 | };
|
113 |
|
114 | module.exports = trace;
|