]> git.proxmox.com Git - mirror_novnc.git/blobdiff - vendor/browser-es-module-loader/src/browser-es-module-loader.js
Remove #nocache system as it is unused
[mirror_novnc.git] / vendor / browser-es-module-loader / src / browser-es-module-loader.js
index 4df849dc706e3e164e6b9b808eac47e98fa89999..dc7d0853bb528b97c18ca68da29544fea120588c 100644 (file)
@@ -12,15 +12,26 @@ if (typeof document != 'undefined' && document.getElementsByTagName) {
   function handleError(err) {
     // dispatch an error event so that we can display in errors in browsers
     // that don't yet support unhandledrejection
-    try {
-      var evt = new Event('error');
-    } catch (_eventError) {
-      var evt = document.createEvent('Event');
-      evt.initEvent('error', true, true);
+    if (window.onunhandledrejection === undefined) {
+      try {
+        var evt = new Event('error');
+      } catch (_eventError) {
+        var evt = document.createEvent('Event');
+        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);
     }
-    evt.message = err.message;
-    evt.error = err;
-    window.dispatchEvent(evt);
 
     // throw so it still shows up in the console
     throw err;
@@ -126,6 +137,7 @@ function xhrFetch(url, resolve, reject) {
 }
 
 var WorkerPool = function (script, size) {
+  script = document.currentScript.src.substr(0, document.currentScript.src.lastIndexOf("/")) + "/" + script;
   this._workers = new Array(size);
   this._ind = 0;
   this._size = size;
@@ -137,6 +149,7 @@ var WorkerPool = function (script, size) {
     wrkr._count = 0;
     wrkr._ind = i;
     wrkr.onmessage = this._onmessage.bind(this, wrkr);
+    wrkr.onerror = this._onerror.bind(this);
     this._workers[i] = wrkr;
   }
 
@@ -162,6 +175,21 @@ WorkerPool.prototype = {
     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)
@@ -177,7 +205,7 @@ WorkerPool.prototype = {
 };
 
 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);
@@ -218,9 +246,13 @@ BrowserESModuleLoader.prototype[RegisterLoader.instantiate] = function(key, proc
   }).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 {
+      localStorage.setItem(key+'!raw', data.source);
+      localStorage.setItem(data.key+'!transpiled', data.code);
+    } 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();