]> git.proxmox.com Git - mirror_novnc.git/blobdiff - vendor/browser-es-module-loader/src/browser-es-module-loader.js
Try to populate error location on Promise errors
[mirror_novnc.git] / vendor / browser-es-module-loader / src / browser-es-module-loader.js
index 4b968eba37b9d5f487e8686cad2b0fc2d5ced4c1..67f1dce48213881f83a66570784f5b09a5c5a63f 100644 (file)
@@ -9,6 +9,34 @@ var loader;
 // <script type="module"> support
 var anonSources = {};
 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
+    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);
+    }
+
+    // throw so it still shows up in the console
+    throw err;
+  }
+
   function ready() {
     document.removeEventListener('DOMContentLoaded', ready, false );
 
@@ -20,22 +48,7 @@ if (typeof document != 'undefined' && document.getElementsByTagName) {
       if (script.type == 'module' && !script.loaded) {
         script.loaded = true;
         if (script.src) {
-          loader.import(script.src).catch(function(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);
-              }
-              evt.message = err.message;
-              evt.error = err;
-              window.dispatchEvent(evt);
-
-              // throw so it still shows up in the console
-              throw err;
-          });
+          loader.import(script.src).catch(handleError);
         }
         // anonymous modules supported via a custom naming scheme and registry
         else {
@@ -46,22 +59,7 @@ if (typeof document != 'undefined' && document.getElementsByTagName) {
 
           var anonName = resolveIfNotPlain(uri, baseURI);
           anonSources[anonName] = script.innerHTML;
-          loader.import(anonName).catch(function(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);
-              }
-              evt.message = err.message;
-              evt.error = err;
-              window.dispatchEvent(evt);
-
-              // throw so it still shows up in the console
-              throw err;
-          });
+          loader.import(anonName).catch(handleError);
         }
       }
     }