Skip to content
This repository was archived by the owner on Jul 13, 2020. It is now read-only.

Commit de24969

Browse files
committed
remove reliance on envfetch
1 parent cf375a5 commit de24969

File tree

1 file changed

+69
-9
lines changed

1 file changed

+69
-9
lines changed

src/system-register-loader.js

Lines changed: 69 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import RegisterLoader from 'es-module-loader/core/register-loader.js';
2-
import { isBrowser, isNode, global, baseURI } from 'es-module-loader/core/common.js';
2+
import { isBrowser, isNode, global, baseURI, fileUrlToPath } from 'es-module-loader/core/common.js';
33
import { resolveUrlToParentIfNotPlain } from 'es-module-loader/core/resolve.js';
4-
import { scriptLoad, nodeFetch } from 'es-module-loader/core/fetch.js';
54

65
/*
76
* Example System Register loader
@@ -36,26 +35,87 @@ SystemRegisterLoader.prototype.normalize = function(key, parent, metadata) {
3635
return key;
3736
};
3837

38+
var fs;
39+
3940
// instantiate just needs to run System.register
4041
// so we load the module name as a URL, and expect that to run System.register
4142
SystemRegisterLoader.prototype.instantiate = function(key, metadata) {
42-
var loader = this;
43+
var thisLoader = this;
4344

4445
return new Promise(function(resolve, reject) {
4546
if (isNode)
46-
nodeFetch(key, undefined, function(source) {
47-
eval(source);
48-
loader.processRegisterContext(key);
49-
resolve();
50-
}, reject);
47+
Promise.resolve(fs || (fs = typeof require !== 'undefined' ? require('fs') : loader.import('fs').then(m => m.default)))
48+
.then(function(fs) {
49+
console.log(fs);
50+
fs.readFile(fileUrlToPath(key), function(err, source) {
51+
if (err)
52+
return reject(err);
53+
54+
(0, eval)(source);
55+
thisLoader.processRegisterContext(key);
56+
resolve();
57+
});
58+
});
5159
else if (isBrowser)
5260
scriptLoad(key, function() {
53-
loader.processRegisterContext(key);
61+
thisLoader.processRegisterContext(key);
5462
resolve();
5563
}, reject);
5664
else
5765
throw new Error('No fetch system defined for this environment.');
5866
});
5967
};
6068

69+
function nodeFetch(url, authorization, fulfill, reject) {
70+
if (url.substr(0, 8) != 'file:///')
71+
throw new Error('Unable to fetch "' + url + '". Only file URLs of the form file:/// allowed running in Node.');
72+
fs = fs || module.require('fs');
73+
if (isWindows)
74+
url = url.replace(/\//g, '\\').substr(8);
75+
else
76+
url = url.substr(7);
77+
return fs.readFile(url, function(err, data) {
78+
if (err) {
79+
return reject(err);
80+
}
81+
else {
82+
// Strip Byte Order Mark out if it's the leading char
83+
var dataString = data + '';
84+
if (dataString[0] === '\ufeff')
85+
dataString = dataString.substr(1);
86+
87+
fulfill(dataString);
88+
}
89+
});
90+
}
91+
92+
function scriptLoad(src, resolve, reject) {
93+
var script = document.createElement('script');
94+
script.type = 'text/javascript';
95+
script.charset = 'utf-8';
96+
script.async = true;
97+
98+
script.addEventListener('load', load, false);
99+
script.addEventListener('error', error, false);
100+
101+
script.src = src;
102+
document.head.appendChild(script);
103+
104+
function load() {
105+
resolve();
106+
cleanup();
107+
}
108+
109+
function error(err) {
110+
cleanup();
111+
reject(new Error('Fetching ' + src));
112+
}
113+
114+
function cleanup() {
115+
script.removeEventListener('load', load, false);
116+
script.removeEventListener('error', error, false);
117+
document.head.removeChild(script);
118+
}
119+
}
120+
61121
export default SystemRegisterLoader;

0 commit comments

Comments
 (0)