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

Commit 6524a6d

Browse files
committed
make baseURL a loader constructor option
1 parent 80c2119 commit 6524a6d

File tree

4 files changed

+137
-132
lines changed

4 files changed

+137
-132
lines changed

src/loader.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,6 @@
2020

2121
function Module() {}
2222
function Loader(options) {
23-
options = options || {};
24-
25-
if (options.normalize)
26-
this.normalize = options.normalize;
27-
if (options.locate)
28-
this.locate = options.locate;
29-
if (options.fetch)
30-
this.fetch = options.fetch;
31-
if (options.translate)
32-
this.translate = options.translate;
33-
if (options.instantiate)
34-
this.instantiate = options.instantiate;
35-
3623
this._loader = {
3724
loaderObj: this,
3825
loads: [],

src/system.js

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,10 @@
1212

1313
var System;
1414

15-
function SystemLoader(options) {
16-
Loader.call(this, options || {});
15+
function SystemLoader(baseURL) {
16+
Loader.call(this);
1717

18-
var baseURL;
19-
// Set default baseURL and paths
20-
if (typeof document != 'undefined' && document.getElementsByTagName) {
21-
baseURL = document.baseURI;
22-
23-
if (!baseURL) {
24-
var bases = document.getElementsByTagName('base');
25-
baseURL = bases[0] && bases[0].href || window.location.href;
26-
}
27-
28-
// sanitize out the hash and querystring
29-
baseURL = baseURL.split('#')[0].split('?')[0];
30-
baseURL = baseURL.substr(0, baseURL.lastIndexOf('/') + 1);
31-
}
32-
else if (typeof process != 'undefined' && process.cwd) {
33-
baseURL = 'file://' + (isWindows ? '/' : '') + process.cwd() + '/';
34-
if (isWindows)
35-
baseURL = baseURL.replace(/\\/g, '/');
36-
}
37-
else if (typeof location != 'undefined') {
38-
baseURL = __global.location.href;
39-
}
40-
else {
41-
throw new TypeError('No environment baseURL');
42-
}
18+
baseURL = baseURL || baseURI;
4319

4420
this.baseURL = baseURL;
4521
this.paths = {};

src/wrapper-start.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,30 @@
5757
}
5858

5959
var URL = __global.URL || URLPolyfill;
60+
61+
var baseURI;
62+
63+
// environent baseURI detection
64+
if (typeof document != 'undefined' && document.getElementsByTagName) {
65+
baseURI = document.baseURI;
66+
67+
if (!baseURI) {
68+
var bases = document.getElementsByTagName('base');
69+
baseURI = bases[0] && bases[0].href || window.location.href;
70+
}
71+
72+
// sanitize out the hash and querystring
73+
baseURI = baseURI.split('#')[0].split('?')[0];
74+
baseURI = baseURI.substr(0, baseURI.lastIndexOf('/') + 1);
75+
}
76+
else if (typeof process != 'undefined' && process.cwd) {
77+
baseURI = 'file://' + (isWindows ? '/' : '') + process.cwd() + '/';
78+
if (isWindows)
79+
baseURI = baseURI.replace(/\\/g, '/');
80+
}
81+
else if (typeof location != 'undefined') {
82+
baseURI = __global.location.href;
83+
}
84+
else {
85+
throw new TypeError('No environment baseURI');
86+
}

test/custom-loader.js

Lines changed: 107 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -15,114 +15,129 @@
1515
return module;
1616
};
1717

18-
var customLoader = new Reflect.Loader({
19-
normalize: function (name, parentName, parentAddress) {
20-
return new Promise(function(resolve, reject) {
21-
if (name == 'asdfasdf') {
22-
return setTimeout(function () {
23-
resolve('test/loader/async-norm.js');
24-
}, 500);
25-
}
18+
function CustomLoader(baseURL) {
19+
System.constructor.call(this, baseURL);
20+
}
21+
22+
// inline Object.create-style class extension
23+
function CustomLoaderProto() {}
24+
CustomLoaderProto.prototype = System.constructor.prototype;
25+
CustomLoader.prototype = new CustomLoaderProto();
26+
27+
28+
29+
CustomLoader.prototype.normalize = function (name, parentName, parentAddress) {
30+
return new Promise(function(resolve, reject) {
31+
if (name == 'asdfasdf') {
32+
return setTimeout(function () {
33+
resolve('test/loader/async-norm.js');
34+
}, 500);
35+
}
2636

27-
if (name == 'error1') {
28-
return setTimeout(function () { reject('error1'); }, 100);
29-
}
37+
if (name == 'error1') {
38+
return setTimeout(function () { reject('error1'); }, 100);
39+
}
40+
41+
var normalized = System.normalize(name, parentName, parentAddress);
42+
resolve(normalized);
43+
});
44+
};
3045

31-
var normalized = System.normalize(name, parentName, parentAddress);
32-
resolve(normalized);
46+
CustomLoader.prototype.locate = function (load) {
47+
if (load.name == 'error2') {
48+
return new Promise(function (resolve, reject) {
49+
setTimeout(function () { reject('error2'); }, 100);
3350
});
34-
},
35-
locate: function (load) {
36-
if (load.name == 'error2') {
37-
return new Promise(function (resolve, reject) {
38-
setTimeout(function () { reject('error2'); }, 100);
39-
});
40-
}
51+
}
4152

42-
if (load.name.match(/path\//))
43-
load.name = load.name.replace(/path\//, 'test/loader/');
53+
if (load.name.match(/path\//))
54+
load.name = load.name.replace(/path\//, 'test/loader/');
4455

45-
return System.locate(load);
46-
},
47-
fetch: function (load) {
48-
if (load.name == 'error3') {
49-
throw 'error3';
50-
}
51-
if (load.name == 'error4' || load.name == 'error5') {
52-
return 'asdf';
53-
}
54-
return System.fetch.apply(this, arguments);
55-
},
56-
translate: function (load) {
57-
if (load.name == 'error4') {
58-
return new Promise(function (resolve, reject) {
59-
setTimeout(function () { reject('error4'); }, 100);
60-
});
61-
}
62-
return System.translate.apply(this, arguments);
63-
},
64-
instantiate: function (load) {
65-
if (load.name.match(/(traceur|babel.+\/browser).js$/)) {
66-
var transpiler = this.transpiler;
67-
return System.import(transpiler).then(function() {
68-
return {
69-
deps: [],
70-
execute: function() {
71-
return System.get(System.normalize(transpiler));
72-
}
73-
};
74-
});
75-
}
56+
return System.locate(load);
57+
};
7658

77-
if (load.name == 'error5') {
78-
return new Promise(function (resolve, reject) {
79-
setTimeout(function () { reject('error5'); }, 100);
80-
});
81-
}
82-
// very bad AMD support
83-
if (load.source.indexOf('define') == -1) {
84-
return System.instantiate(load);
85-
}
59+
60+
CustomLoader.prototype.fetch = function (load) {
61+
if (load.name == 'error3') {
62+
throw 'error3';
63+
}
64+
if (load.name == 'error4' || load.name == 'error5') {
65+
return 'asdf';
66+
}
67+
return System.fetch.apply(this, arguments);
68+
};
8669

87-
var factory, deps;
88-
var define = function (_deps, _factory) {
89-
deps = _deps;
90-
factory = _factory;
91-
};
92-
eval(load.source);
70+
CustomLoader.prototype.translate = function (load) {
71+
if (load.name == 'error4') {
72+
return new Promise(function (resolve, reject) {
73+
setTimeout(function () { reject('error4'); }, 100);
74+
});
75+
}
76+
return System.translate.apply(this, arguments);
77+
};
9378

94-
customFactories[load.name] = factory;
79+
CustomLoader.prototype.instantiate = function (load) {
80+
if (load.name.match(/(traceur|babel.+\/browser).js$/)) {
81+
var transpiler = this.transpiler;
82+
return System.import(transpiler).then(function() {
83+
return {
84+
deps: [],
85+
execute: function() {
86+
return System.get(System.normalize(transpiler));
87+
}
88+
};
89+
});
90+
}
9591

96-
// normalize all dependencies now
97-
var normalizePromises = [];
98-
for (var i = 0; i < deps.length; i++) {
99-
normalizePromises.push(Promise.resolve(System.normalize(deps[i], load.name, load.address)));
100-
}
92+
if (load.name == 'error5') {
93+
return new Promise(function (resolve, reject) {
94+
setTimeout(function () { reject('error5'); }, 100);
95+
});
96+
}
97+
// very bad AMD support
98+
if (load.source.indexOf('define') == -1) {
99+
return System.instantiate(load);
100+
}
101101

102-
return Promise.all(normalizePromises).then(function (resolvedDeps) {
102+
var factory, deps;
103+
var define = function (_deps, _factory) {
104+
deps = _deps;
105+
factory = _factory;
106+
};
107+
eval(load.source);
103108

104-
return {
105-
deps: deps,
106-
execute: function () {
107-
if (customModules[load.name]) {
108-
return System.newModule(customModules[load.name]);
109-
}
109+
customFactories[load.name] = factory;
110110

111-
// first ensure all dependencies have been executed
112-
for (var i = 0; i < resolvedDeps.length; i++) {
113-
resolvedDeps[i] = executeModule(resolvedDeps[i]);
114-
}
111+
// normalize all dependencies now
112+
var normalizePromises = [];
113+
for (var i = 0; i < deps.length; i++) {
114+
normalizePromises.push(Promise.resolve(System.normalize(deps[i], load.name, load.address)));
115+
}
115116

116-
var module = factory.apply(null, resolvedDeps);
117+
return Promise.all(normalizePromises).then(function (resolvedDeps) {
117118

118-
customModules[load.name] = module;
119-
return System.newModule(module);
119+
return {
120+
deps: deps,
121+
execute: function () {
122+
if (customModules[load.name]) {
123+
return System.newModule(customModules[load.name]);
120124
}
121-
};
122-
});
123-
}
124-
});
125125

126+
// first ensure all dependencies have been executed
127+
for (var i = 0; i < resolvedDeps.length; i++) {
128+
resolvedDeps[i] = executeModule(resolvedDeps[i]);
129+
}
130+
131+
var module = factory.apply(null, resolvedDeps);
132+
133+
customModules[load.name] = module;
134+
return System.newModule(module);
135+
}
136+
};
137+
});
138+
};
139+
140+
var customLoader = new CustomLoader(System.baseURL);
126141
customLoader.transpiler = System.transpiler;
127142

128143

0 commit comments

Comments
 (0)