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

Commit 827d22e

Browse files
committed
0.7.1
1 parent 6ebae41 commit 827d22e

7 files changed

+180
-146
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ See the [demo folder](https://github.com/ModuleLoader/es6-module-loader/blob/mas
1717

1818
For an example of a universal module loader based on this polyfill for loading AMD, CommonJS and globals, see [SystemJS](https://github.com/systemjs/systemjs).
1919

20-
_The current version is tested against **[Traceur 0.0.45](https://github.com/google/traceur-compiler/tree/0.0.45)**._
20+
_The current version is tested against **[Traceur 0.0.49](https://github.com/google/traceur-compiler/tree/0.0.49)**._
2121

2222
_Note the ES6 module specification is still in draft, and subject to change._
2323

2424
### Basic Use
2525

26-
Download both [es6-module-loader.js](https://github.com/ModuleLoader/es6-module-loader/v0.7.0/dist/es6-module-loader.js) and [traceur.js](https://github.com/jmcriffey/bower-traceur/0.0.45/traceur.js) into the same folder.
26+
Download both [es6-module-loader.js](https://github.com/ModuleLoader/es6-module-loader/v0.7.1/dist/es6-module-loader.js) and traceur.js into the same folder.
2727

2828
If using ES6 syntax (optional), include `traceur.js` in the page first then include `es6-module-loader.js`:
2929

@@ -181,7 +181,7 @@ A basic example of using this extension with a build would be the following:
181181
traceur --out app-build.js app/app.js --modules=instantiate
182182
```
183183

184-
2. If using additional ES6 features apart from modules syntax, load [`traceur-runtime.js`](https://github.com/jmcriffey/bower-traceur/0.0.45/traceur-runtime.js) (also included in the `bin` folder when installing Traceur through Bower or npm). Then include `es6-module-loader.js` and then apply the register extension before doing the import or loading the bundle as a script:
184+
2. If using additional ES6 features apart from modules syntax, load `traceur-runtime.js` (included in the `bin` folder when installing Traceur through Bower or npm). Then include `es6-module-loader.js` and then apply the register extension before doing the import or loading the bundle as a script:
185185

186186
```html
187187
<script src="traceur-runtime.js"></script>

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "es6-module-loader",
3-
"version": "0.7.0",
3+
"version": "0.7.1",
44
"description": "An ES6 Module Loader polyfill based on the latest spec.",
55
"homepage": "https://github.com/ModuleLoader/es6-module-loader",
66
"main": "dist/es6-module-loader-sans-promises.js",

dist/es6-module-loader-sans-promises.js

Lines changed: 86 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -110,18 +110,20 @@ function logloads(loads) {
110110
var traceur;
111111

112112
var defineProperty;
113-
try {
114-
if (!!Object.defineProperty({}, 'a', {})) {
115-
defineProperty = Object.defineProperty;
116-
}
117-
} catch (e) {
118-
defineProperty = function (obj, prop, opt) {
119-
try {
120-
obj[prop] = opt.value || opt.get.call(obj);
113+
(function () {
114+
try {
115+
if (!!Object.defineProperty({}, 'a', {})) {
116+
defineProperty = Object.defineProperty;
117+
}
118+
} catch (e) {
119+
defineProperty = function (obj, prop, opt) {
120+
try {
121+
obj[prop] = opt.value || opt.get.call(obj);
122+
}
123+
catch(e) {}
121124
}
122-
catch(e) {}
123125
}
124-
}
126+
}());
125127

126128
console.assert = console.assert || function() {};
127129

@@ -190,64 +192,66 @@ function logloads(loads) {
190192

191193
console.assert(load.source, 'Non-empty source');
192194

193-
var depsList;
194-
try {
195-
var parser = new traceur.syntax.Parser(new traceur.syntax.SourceFile(load.address, load.source));
196-
var body = parser.parseModule();
195+
var depsList, curRegister, curSystem, oldSourceMaps, oldModules;
196+
(function () {
197+
try {
198+
var parser = new traceur.syntax.Parser(new traceur.syntax.SourceFile(load.address, load.source));
199+
var body = parser.parseModule();
197200

198-
load.kind = 'declarative';
199-
depsList = getImports(body);
201+
load.kind = 'declarative';
202+
depsList = getImports(body);
200203

201-
var oldSourceMaps = traceur.options.sourceMaps;
202-
var oldModules = traceur.options.modules;
204+
oldSourceMaps = traceur.options.sourceMaps;
205+
oldModules = traceur.options.modules;
203206

204-
traceur.options.sourceMaps = true;
205-
traceur.options.modules = 'instantiate';
207+
traceur.options.sourceMaps = true;
208+
traceur.options.modules = 'instantiate';
206209

207-
var reporter = new traceur.util.ErrorReporter();
210+
var reporter = new traceur.util.ErrorReporter();
208211

209-
reporter.reportMessageInternal = function(location, kind, format, args) {
210-
throw new SyntaxError(kind, location.start && location.start.line_, location.start && location.start.column_);
211-
}
212+
reporter.reportMessageInternal = function(location, kind, format, args) {
213+
throw new SyntaxError(kind, location.start && location.start.line_, location.start && location.start.column_);
214+
}
212215

213-
// traceur expects its version of System
214-
var curSystem = __global.System;
215-
__global.System = __global.traceurSystem;
216+
// traceur expects its version of System
217+
curSystem = __global.System;
218+
__global.System = __global.traceurSystem;
216219

217-
var tree = (new traceur.codegeneration.module.AttachModuleNameTransformer(load.name)).transformAny(body);
218-
tree = (new traceur.codegeneration.FromOptionsTransformer(reporter)).transform(tree);
220+
var tree = (new traceur.codegeneration.module.AttachModuleNameTransformer(load.name)).transformAny(body);
221+
tree = (new traceur.codegeneration.FromOptionsTransformer(reporter)).transform(tree);
219222

220-
var sourceMapGenerator = new traceur.outputgeneration.SourceMapGenerator({ file: load.address });
221-
var options = { sourceMapGenerator: sourceMapGenerator };
223+
var sourceMapGenerator = new traceur.outputgeneration.SourceMapGenerator({ file: load.address });
224+
var options = { sourceMapGenerator: sourceMapGenerator };
222225

223-
var source = traceur.outputgeneration.TreeWriter.write(tree, options);
226+
var source = traceur.outputgeneration.TreeWriter.write(tree, options);
224227

225-
if (__global.btoa)
226-
source += '\n//# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(options.sourceMap))) + '\n';
228+
if (__global.btoa)
229+
source += '\n//# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(options.sourceMap))) + '\n';
227230

228-
// now run System.register
229-
var curRegister = System.register;
231+
// now run System.register
232+
curRegister = System.register;
230233

231-
System.register = function(name, deps, declare) {
232-
// store the registered declaration as load.declare
233-
load.declare = typeof name == 'string' ? declare : deps;
234-
}
234+
System.register = function(name, deps, declare) {
235+
// store the registered declaration as load.declare
236+
load.declare = typeof name == 'string' ? declare : deps;
237+
}
235238

236-
__eval(source, __global, load.name);
237-
}
238-
catch(e) {
239-
if (e.name == 'SyntaxError' || e.name == 'TypeError')
240-
e.message = 'Evaluating ' + (load.name || load.address) + '\n\t' + e.message;
241-
if (curRegister)
242-
System.register = curRegister;
243-
if (curSystem)
244-
__global.System = curSystem;
245-
if (oldSourceMaps)
246-
traceur.options.sourceMaps = oldSourceMaps;
247-
if (oldModules)
248-
traceur.options.modules = oldModules;
249-
throw e;
250-
}
239+
__eval(source, __global, load.name);
240+
}
241+
catch(e) {
242+
if (e.name == 'SyntaxError' || e.name == 'TypeError')
243+
e.message = 'Evaluating ' + (load.name || load.address) + '\n\t' + e.message;
244+
if (curRegister)
245+
System.register = curRegister;
246+
if (curSystem)
247+
__global.System = curSystem;
248+
if (oldSourceMaps)
249+
traceur.options.sourceMaps = oldSourceMaps;
250+
if (oldModules)
251+
traceur.options.modules = oldModules;
252+
throw e;
253+
}
254+
}());
251255
System.register = curRegister;
252256
__global.System = curSystem;
253257
traceur.options.sourceMaps = oldSourceMaps;
@@ -869,7 +873,7 @@ function logloads(loads) {
869873
function evaluateLoadedModule(loader, load) {
870874
console.assert(load.status == 'linked', 'is linked ' + load.name);
871875

872-
ensureEvaluated(load.module, [], loader);
876+
doEnsureEvaluated(load.module, [], loader);
873877
return load.module.module;
874878
}
875879

@@ -881,20 +885,22 @@ function logloads(loads) {
881885
* module.dependencies list of module objects for dependencies
882886
*
883887
*/
884-
885-
// execution errors don't propogate in the pipeline
886-
// see https://bugs.ecmascript.org/show_bug.cgi?id=2993
887888
function doExecute(module) {
888889
try {
889890
module.execute.call(__global);
890891
}
891892
catch(e) {
892-
setTimeout(function() {
893-
throw e;
894-
});
893+
return e;
895894
}
896895
}
897896

897+
// propogate execution errors
898+
// see https://bugs.ecmascript.org/show_bug.cgi?id=2993
899+
function doEnsureEvaluated(module, seen, loader) {
900+
var err = ensureEvaluated(module, seen, loader);
901+
if (err)
902+
throw err;
903+
}
898904
// 15.2.6.2 EnsureEvaluated adjusted
899905
function ensureEvaluated(module, seen, loader) {
900906
if (module.evaluated || !module.dependencies)
@@ -903,20 +909,31 @@ function logloads(loads) {
903909
seen.push(module);
904910

905911
var deps = module.dependencies;
912+
var err;
906913

907914
for (var i = 0; i < deps.length; i++) {
908915
var dep = deps[i];
909-
if (indexOf.call(seen, dep) == -1)
910-
ensureEvaluated(dep, seen, loader);
916+
if (indexOf.call(seen, dep) == -1) {
917+
err = ensureEvaluated(dep, seen, loader);
918+
// stop on error, see https://bugs.ecmascript.org/show_bug.cgi?id=2996
919+
if (err)
920+
return err + '\n in module ' + dep.name;
921+
}
911922
}
912923

924+
if (module.failed)
925+
return new Error('Module failed execution.');
926+
913927
if (module.evaluated)
914928
return;
915929

916930
module.evaluated = true;
917-
doExecute(module);
931+
err = doExecute(module);
932+
if (err)
933+
module.failed = true;
918934
module.module = _newModule(module.exports);
919-
delete module.execute;
935+
module.execute = undefined;
936+
return err;
920937
}
921938

922939
// 26.3 Loader
@@ -994,7 +1011,7 @@ function logloads(loads) {
9941011
get: function(key) {
9951012
if (!this._loader.modules[key])
9961013
return;
997-
ensureEvaluated(this._loader.modules[key], [], this);
1014+
doEnsureEvaluated(this._loader.modules[key], [], this);
9981015
return this._loader.modules[key].module;
9991016
},
10001017
// 26.3.3.7
@@ -1012,7 +1029,7 @@ function logloads(loads) {
10121029
var loader = loaderObj._loader;
10131030

10141031
if (loader.modules[name]) {
1015-
ensureEvaluated(loader.modules[name], [], loader._loader);
1032+
doEnsureEvaluated(loader.modules[name], [], loader._loader);
10161033
return loader.modules[name].module;
10171034
}
10181035

@@ -1028,7 +1045,7 @@ function logloads(loads) {
10281045
// 26.3.3.10
10291046
load: function(name, options) {
10301047
if (this._loader.modules[name]) {
1031-
ensureEvaluated(this._loader.modules[name], [], this._loader);
1048+
doEnsureEvaluated(this._loader.modules[name], [], this._loader);
10321049
return Promise.resolve(this._loader.modules[name].module);
10331050
}
10341051
return importPromises[name] || createImportPromise(name, loadModule(this._loader, name, {}));

0 commit comments

Comments
 (0)