// <script type="module"> support
var anonSources = {};
if (typeof document != 'undefined' && document.getElementsByTagName) {
- function handleError(err) {
+ var handleError = function(err) {
// dispatch an error event so that we can display in errors in browsers
// that don't yet support unhandledrejection
if (window.onunhandledrejection === undefined) {
evt.initEvent('error', true, true);
}
evt.message = err.message;
+ if (err.fileName) {
+ evt.filename = err.fileName;
+ evt.lineno = err.lineNumber;
+ evt.colno = err.columnNumber;
+ } else if (err.sourceURL) {
+ evt.filename = err.sourceURL;
+ evt.lineno = err.line;
+ evt.colno = err.column;
+ }
evt.error = err;
window.dispatchEvent(evt);
}
throw err;
}
- function ready() {
+ var ready = function() {
document.removeEventListener('DOMContentLoaded', ready, false );
var anonCnt = 0;
}
// anonymous modules supported via a custom naming scheme and registry
else {
- var uri = './<anon' + ++anonCnt + '>';
+ var uri = './<anon' + ++anonCnt + '>.js';
if (script.id !== ""){
uri = "./" + script.id;
}
function xhrFetch(url, resolve, reject) {
var xhr = new XMLHttpRequest();
- function load(source) {
+ var load = function(source) {
resolve(xhr.responseText);
}
- function error() {
+ var error = function() {
reject(new Error('XHR error' + (xhr.status ? ' (' + xhr.status + (xhr.statusText ? ' ' + xhr.statusText : '') + ')' : '') + ' loading ' + url));
}
}
var WorkerPool = function (script, size) {
+ var current = document.currentScript;
+ // IE doesn't support currentScript
+ if (!current) {
+ // Find an entry with out basename
+ var scripts = document.getElementsByTagName('script');
+ for (var i = 0; i < scripts.length; i++) {
+ if (scripts[i].src.indexOf("browser-es-module-loader.js") !== -1) {
+ current = scripts[i];
+ break;
+ }
+ }
+ if (!current)
+ throw Error("Could not find own <script> element");
+ }
+ script = current.src.substr(0, current.src.lastIndexOf("/")) + "/" + script;
this._workers = new Array(size);
this._ind = 0;
this._size = size;
this._jobs = 0;
this.onmessage = undefined;
this._stopTimeout = undefined;
- for (let i = 0; i < size; i++) {
- let wrkr = new Worker(script);
+ for (var i = 0; i < size; i++) {
+ var wrkr = new Worker(script);
wrkr._count = 0;
wrkr._ind = i;
wrkr.onmessage = this._onmessage.bind(this, wrkr);
+ wrkr.onerror = this._onerror.bind(this);
this._workers[i] = wrkr;
}
clearTimeout(this._stopTimeout);
this._stopTimeout = undefined;
}
- let wrkr = this._workers[this._ind % this._size];
+ var wrkr = this._workers[this._ind % this._size];
wrkr._count++;
this._jobs++;
wrkr.postMessage(msg);
this._checkJobs();
},
+ _onerror: function(err) {
+ try {
+ var evt = new Event('error');
+ } catch (_eventError) {
+ var evt = document.createEvent('Event');
+ evt.initEvent('error', true, true);
+ }
+ evt.message = err.message;
+ evt.filename = err.filename;
+ evt.lineno = err.lineno;
+ evt.colno = err.colno;
+ evt.error = err.error;
+ window.dispatchEvent(evt);
+ },
+
_checkJobs: function () {
if (this._jobs === 0 && this._stopTimeout === undefined) {
// wait for 2s of inactivity before stopping (that should be enough for local loading)
};
var promiseMap = new Map();
-var babelWorker = new WorkerPool('/vendor/browser-es-module-loader/dist/babel-worker.js', 3);
+var babelWorker = new WorkerPool('babel-worker.js', 3);
babelWorker.onmessage = function (evt) {
var promFuncs = promiseMap.get(evt.data.key);
promFuncs.resolve(evt.data);
})
.then(function(source) {
// check our cache first
- const cacheEntryTrans = localStorage.getItem(key+'!transpiled');
- if (cacheEntryTrans) {
- const cacheEntryRaw = localStorage.getItem(key+'!raw');
+ var cacheEntry = localStorage.getItem(key);
+ if (cacheEntry) {
+ cacheEntry = JSON.parse(cacheEntry);
// TODO: store a hash instead
- if (cacheEntryRaw === source) {
- return Promise.resolve({key: key, code: cacheEntryTrans, source: source});
+ if (cacheEntry.source === source) {
+ return Promise.resolve({key: key, code: cacheEntry.code, source: cacheEntry.source});
}
}
return new Promise(function (resolve, reject) {
}).then(function (data) {
// evaluate without require, exports and module variables
// we leave module in for now to allow module.require access
- if (data.key.slice(-8) !== '#nocache') {
- localStorage.setItem(key+'!raw', data.source);
- localStorage.setItem(data.key+'!transpiled', data.code);
+ try {
+ var cacheEntry = JSON.stringify({source: data.source, code: data.code});
+ localStorage.setItem(key, cacheEntry);
+ } catch (e) {
+ if (window.console) {
+ window.console.warn('Unable to cache transpiled version of ' + key + ': ' + e);
+ }
}
(0, eval)(data.code + '\n//# sourceURL=' + data.key + '!transpiled');
processAnonRegister();