UNPKG

1.82 kBJavaScriptView Raw
1var steal = require("steal");
2var fs = require("fs");
3var asap = require("pdenodeify");
4var readFile = asap(fs.readFile);
5var clone = require("lodash").cloneDeep;
6var getESModuleImports = require("./load/get_es_module_imports");
7
8module.exports = function(load){
9 load = clone(load);
10 load.metadata.deps = [];
11
12 var localSteal = steal.clone();
13 var System = localSteal.System;
14 System.preventModuleExecution = true;
15 trap(System);
16
17 if(load.metadata.useSource) {
18 return compare(load.source);
19 }
20
21 var address = load.address.replace("file:", "");
22 return readFile(address, "utf8").then(compare);
23
24 function compare(source){
25 return Promise.resolve().then(function(){
26 var plugin = load.metadata.plugin;
27 var translatePromise;
28 if(plugin && plugin.translate) {
29 load.source = source;
30 translatePromise = Promise.resolve(
31 plugin.translate.call(System, load));
32 } else {
33 translatePromise = Promise.resolve(source);
34 }
35 return translatePromise;
36 })
37 .then(function(source){
38 if(source) {
39 load.source = source;
40 }
41
42 return System.instantiate(load).then(function(result){
43 var deps = result ? result.deps : getESModuleImports(load);
44
45 // If this is a plugin then the plugin is a dependency but not
46 // returned as such by instantiate.
47 if(load.metadata.plugin){
48 var pluginDep = load.metadata.pluginName;
49 if(!~deps.indexOf(pluginDep)) deps.push(pluginDep);
50 }
51
52 return {
53 source: load.source,
54 deps: deps,
55 virtualModules: System.virtualDefines
56 };
57 });
58 });
59 }
60
61};
62
63function trap(System) {
64 // trap defines so we know about them.
65 System.virtualDefines = [];
66 System.define = function(name, source){
67 this.virtualDefines.push({name:name,source:source});
68 };
69
70 // prevent fetch
71 System.fetch = function(){
72 return Promise.resolve('');
73 };
74}