@jsenv/core 23.8.0 → 23.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/jsenv_browser_system.js +34 -34
- package/dist/jsenv_browser_system.js.map +13 -13
- package/dist/jsenv_compile_proxy.js.map +6 -6
- package/dist/jsenv_exploring_index.js.map +5 -5
- package/dist/jsenv_exploring_redirector.js.map +12 -12
- package/dist/jsenv_toolbar.js.map +7 -7
- package/dist/jsenv_toolbar_injector.js.map +5 -5
- package/helpers/babel/.eslintrc.cjs +24 -24
- package/helpers/babel/AsyncGenerator/AsyncGenerator.js +81 -81
- package/helpers/babel/AwaitValue/AwaitValue.js +3 -3
- package/helpers/babel/applyDecoratorDescriptor/applyDecoratorDescriptor.js +33 -33
- package/helpers/babel/arrayLikeToArray/arrayLikeToArray.js +7 -7
- package/helpers/babel/arrayWithHoles/arrayWithHoles.js +4 -4
- package/helpers/babel/arrayWithoutHoles/arrayWithoutHoles.js +6 -6
- package/helpers/babel/assertThisInitialized/assertThisInitialized.js +7 -7
- package/helpers/babel/asyncGeneratorDelegate/asyncGeneratorDelegate.js +40 -40
- package/helpers/babel/asyncIterator/asyncIterator.js +12 -12
- package/helpers/babel/asyncToGenerator/asyncToGenerator.js +34 -34
- package/helpers/babel/awaitAsyncGenerator/awaitAsyncGenerator.js +5 -5
- package/helpers/babel/classApplyDescriptorDestructureSet/classApplyDescriptorDestructureSet.js +20 -20
- package/helpers/babel/classApplyDescriptorGet/classApplyDescriptorGet.js +6 -6
- package/helpers/babel/classApplyDescriptorSet/classApplyDescriptorSet.js +13 -13
- package/helpers/babel/classCallCheck/classCallCheck.js +5 -5
- package/helpers/babel/classCheckPrivateStaticAccess/classCheckPrivateStaticAccess.js +5 -5
- package/helpers/babel/classCheckPrivateStaticFieldDescriptor/classCheckPrivateStaticFieldDescriptor.js +6 -6
- package/helpers/babel/classExtractFieldDescriptor/classExtractFieldDescriptor.js +7 -7
- package/helpers/babel/classNameTDZError/classNameTDZError.js +4 -4
- package/helpers/babel/classPrivateFieldDestructureSet/classPrivateFieldDestructureSet.js +7 -7
- package/helpers/babel/classPrivateFieldGet/classPrivateFieldGet.js +7 -7
- package/helpers/babel/classPrivateFieldLooseBase/classPrivateFieldLooseBase.js +6 -6
- package/helpers/babel/classPrivateFieldLooseKey/classPrivateFieldLooseKey.js +5 -5
- package/helpers/babel/classPrivateFieldSet/classPrivateFieldSet.js +8 -8
- package/helpers/babel/classPrivateMethodGet/classPrivateMethodGet.js +6 -6
- package/helpers/babel/classPrivateMethodSet/classPrivateMethodSet.js +3 -3
- package/helpers/babel/classStaticPrivateFieldSpecGet/classStaticPrivateFieldSpecGet.js +9 -9
- package/helpers/babel/classStaticPrivateFieldSpecSet/classStaticPrivateFieldSpecSet.js +15 -15
- package/helpers/babel/classStaticPrivateMethodGet/classStaticPrivateMethodGet.js +6 -6
- package/helpers/babel/classStaticPrivateMethodSet/classStaticPrivateMethodSet.js +3 -3
- package/helpers/babel/construct/construct.js +16 -16
- package/helpers/babel/createClass/createClass.js +15 -15
- package/helpers/babel/createForOfIteratorHelper/createForOfIteratorHelper.js +60 -60
- package/helpers/babel/createForOfIteratorHelperLoose/createForOfIteratorHelperLoose.js +23 -23
- package/helpers/babel/createRawReactElement/createRawReactElement.js +50 -50
- package/helpers/babel/createSuper/createSuper.js +22 -22
- package/helpers/babel/decorate/decorate.js +403 -403
- package/helpers/babel/defaults/defaults.js +11 -11
- package/helpers/babel/defineEnumerableProperties/defineEnumerableProperties.js +23 -23
- package/helpers/babel/defineProperty/defineProperty.js +18 -18
- package/helpers/babel/extends/extends.js +14 -14
- package/helpers/babel/get/get.js +13 -13
- package/helpers/babel/getPrototypeOf/getPrototypeOf.js +4 -4
- package/helpers/babel/inherits/inherits.js +15 -15
- package/helpers/babel/inheritsLoose/inheritsLoose.js +7 -7
- package/helpers/babel/initializerDefineProperty/initializerDefineProperty.js +10 -10
- package/helpers/babel/initializerWarningHelper/initializerWarningHelper.js +6 -6
- package/helpers/babel/instanceof/instanceof.js +6 -6
- package/helpers/babel/interopRequireDefault/interopRequireDefault.js +3 -3
- package/helpers/babel/interopRequireWildcard/interopRequireWildcard.js +37 -37
- package/helpers/babel/isNativeFunction/isNativeFunction.js +4 -4
- package/helpers/babel/isNativeReflectConstruct/isNativeReflectConstruct.js +21 -21
- package/helpers/babel/iterableToArray/iterableToArray.js +7 -7
- package/helpers/babel/iterableToArrayLimit/iterableToArrayLimit.js +36 -36
- package/helpers/babel/iterableToArrayLimitLoose/iterableToArrayLimitLoose.js +10 -10
- package/helpers/babel/jsx/jsx.js +45 -45
- package/helpers/babel/maybeArrayLike/maybeArrayLike.js +10 -10
- package/helpers/babel/newArrowCheck/newArrowCheck.js +5 -5
- package/helpers/babel/nonIterableRest/nonIterableRest.js +5 -5
- package/helpers/babel/nonIterableSpread/nonIterableSpread.js +5 -5
- package/helpers/babel/objectDestructuringEmpty/objectDestructuringEmpty.js +3 -3
- package/helpers/babel/objectSpread/objectSpread.js +23 -23
- package/helpers/babel/objectSpread2/objectSpread2.js +33 -33
- package/helpers/babel/objectWithoutProperties/objectWithoutProperties.js +19 -19
- package/helpers/babel/objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js +13 -13
- package/helpers/babel/possibleConstructorReturn/possibleConstructorReturn.js +10 -10
- package/helpers/babel/readOnlyError/readOnlyError.js +4 -4
- package/helpers/babel/readme.md +9 -9
- package/helpers/babel/set/set.js +44 -44
- package/helpers/babel/setPrototypeOf/setPrototypeOf.js +6 -6
- package/helpers/babel/skipFirstGeneratorNext/skipFirstGeneratorNext.js +8 -8
- package/helpers/babel/slicedToArray/slicedToArray.js +10 -10
- package/helpers/babel/slicedToArrayLoose/slicedToArrayLoose.js +13 -13
- package/helpers/babel/superPropBase/superPropBase.js +10 -10
- package/helpers/babel/taggedTemplateLiteral/taggedTemplateLiteral.js +10 -10
- package/helpers/babel/taggedTemplateLiteralLoose/taggedTemplateLiteralLoose.js +7 -7
- package/helpers/babel/tdz/tdz.js +4 -4
- package/helpers/babel/temporalRef/temporalRef.js +6 -6
- package/helpers/babel/temporalUndefined/temporalUndefined.js +3 -3
- package/helpers/babel/toArray/toArray.js +10 -10
- package/helpers/babel/toConsumableArray/toConsumableArray.js +10 -10
- package/helpers/babel/toPrimitive/toPrimitive.js +10 -10
- package/helpers/babel/toPropertyKey/toPropertyKey.js +6 -6
- package/helpers/babel/typeof/typeof.js +14 -14
- package/helpers/babel/unsupportedIterableToArray/unsupportedIterableToArray.js +12 -12
- package/helpers/babel/wrapAsyncGenerator/wrapAsyncGenerator.js +8 -8
- package/helpers/babel/wrapNativeSuper/wrapNativeSuper.js +30 -30
- package/helpers/babel/wrapRegExp/wrapRegExp.js +63 -63
- package/helpers/babel/writeOnlyError/writeOnlyError.js +4 -4
- package/helpers/regenerator-runtime/regenerator-runtime.js +748 -748
- package/{LICENSE → license} +21 -21
- package/package.json +1 -1
- package/src/buildProject.js +300 -300
- package/src/execute.js +184 -184
- package/src/internal/browser-launcher/jsenv-browser-system.js +199 -199
- package/src/internal/compiling/babel_plugin_import_assertions.js +121 -121
- package/src/internal/compiling/babel_plugin_import_metadata.js +22 -22
- package/src/internal/compiling/babel_plugin_import_visitor.js +84 -84
- package/src/internal/compiling/compile-directory/getOrGenerateCompiledFile.js +268 -268
- package/src/internal/compiling/compile-directory/updateMeta.js +154 -154
- package/src/internal/compiling/compile-directory/validateCache.js +265 -265
- package/src/internal/compiling/compileFile.js +222 -215
- package/src/internal/compiling/compileHtml.js +550 -550
- package/src/internal/compiling/createCompiledFileService.js +291 -291
- package/src/internal/compiling/html_source_file_service.js +404 -403
- package/src/internal/compiling/js-compilation-service/jsenvTransform.js +270 -270
- package/src/internal/compiling/jsenvCompilerForHtml.js +308 -300
- package/src/internal/compiling/jsenvCompilerForJavaScript.js +2 -0
- package/src/internal/compiling/startCompileServer.js +1052 -1048
- package/src/internal/compiling/transformResultToCompilationResult.js +220 -220
- package/src/internal/executing/coverage/babel_plugin_instrument.js +90 -90
- package/src/internal/executing/coverage/reportToCoverage.js +187 -187
- package/src/internal/executing/executePlan.js +183 -183
- package/src/internal/executing/launchAndExecute.js +458 -458
- package/src/internal/runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js +246 -246
- package/src/internal/runtime/createNodeRuntime/scanNodeRuntimeFeatures.js +112 -112
- package/src/internal/runtime/s.js +727 -727
- package/src/internal/toolbar/jsenv-logo.svg +144 -144
- package/src/internal/toolbar/toolbar.main.css +196 -196
- package/src/internal/toolbar/toolbar.main.js +227 -227
- package/src/internal/url_conversion.js +317 -317
- package/src/startExploring.js +309 -309
|
@@ -2321,9 +2321,9 @@
|
|
|
2321
2321
|
return fn();
|
|
2322
2322
|
});
|
|
2323
2323
|
|
|
2324
|
-
/*
|
|
2325
|
-
* SJS 6.11.0
|
|
2326
|
-
* Minimal SystemJS Build
|
|
2324
|
+
/*
|
|
2325
|
+
* SJS 6.11.0
|
|
2326
|
+
* Minimal SystemJS Build
|
|
2327
2327
|
*/
|
|
2328
2328
|
(function () {
|
|
2329
2329
|
function errMsg(errCode, msg) {
|
|
@@ -2416,12 +2416,12 @@
|
|
|
2416
2416
|
return parentUrl.slice(0, parentUrl.length - pathname.length) + output.join('');
|
|
2417
2417
|
}
|
|
2418
2418
|
}
|
|
2419
|
-
/*
|
|
2420
|
-
* Import maps implementation
|
|
2421
|
-
*
|
|
2422
|
-
* To make lookups fast we pre-resolve the entire import map
|
|
2423
|
-
* and then match based on backtracked hash lookups
|
|
2424
|
-
*
|
|
2419
|
+
/*
|
|
2420
|
+
* Import maps implementation
|
|
2421
|
+
*
|
|
2422
|
+
* To make lookups fast we pre-resolve the entire import map
|
|
2423
|
+
* and then match based on backtracked hash lookups
|
|
2424
|
+
*
|
|
2425
2425
|
*/
|
|
2426
2426
|
|
|
2427
2427
|
|
|
@@ -2500,21 +2500,21 @@
|
|
|
2500
2500
|
|
|
2501
2501
|
return applyPackages(resolvedOrPlain, importMap.imports) || resolvedOrPlain.indexOf(':') !== -1 && resolvedOrPlain;
|
|
2502
2502
|
}
|
|
2503
|
-
/*
|
|
2504
|
-
* SystemJS Core
|
|
2505
|
-
*
|
|
2506
|
-
* Provides
|
|
2507
|
-
* - System.import
|
|
2508
|
-
* - System.register support for
|
|
2509
|
-
* live bindings, function hoisting through circular references,
|
|
2510
|
-
* reexports, dynamic import, import.meta.url, top-level await
|
|
2511
|
-
* - System.getRegister to get the registration
|
|
2512
|
-
* - Symbol.toStringTag support in Module objects
|
|
2513
|
-
* - Hookable System.createContext to customize import.meta
|
|
2514
|
-
* - System.onload(err, id, deps) handler for tracing / hot-reloading
|
|
2515
|
-
*
|
|
2516
|
-
* Core comes with no System.prototype.resolve or
|
|
2517
|
-
* System.prototype.instantiate implementations
|
|
2503
|
+
/*
|
|
2504
|
+
* SystemJS Core
|
|
2505
|
+
*
|
|
2506
|
+
* Provides
|
|
2507
|
+
* - System.import
|
|
2508
|
+
* - System.register support for
|
|
2509
|
+
* live bindings, function hoisting through circular references,
|
|
2510
|
+
* reexports, dynamic import, import.meta.url, top-level await
|
|
2511
|
+
* - System.getRegister to get the registration
|
|
2512
|
+
* - Symbol.toStringTag support in Module objects
|
|
2513
|
+
* - Hookable System.createContext to customize import.meta
|
|
2514
|
+
* - System.onload(err, id, deps) handler for tracing / hot-reloading
|
|
2515
|
+
*
|
|
2516
|
+
* Core comes with no System.prototype.resolve or
|
|
2517
|
+
* System.prototype.instantiate implementations
|
|
2518
2518
|
*/
|
|
2519
2519
|
|
|
2520
2520
|
|
|
@@ -2553,8 +2553,8 @@
|
|
|
2553
2553
|
systemJSPrototype.register = function (deps, declare) {
|
|
2554
2554
|
lastRegister = [deps, declare];
|
|
2555
2555
|
};
|
|
2556
|
-
/*
|
|
2557
|
-
* getRegister provides the last anonymous System.register call
|
|
2556
|
+
/*
|
|
2557
|
+
* getRegister provides the last anonymous System.register call
|
|
2558
2558
|
*/
|
|
2559
2559
|
|
|
2560
2560
|
|
|
@@ -2763,8 +2763,8 @@
|
|
|
2763
2763
|
}
|
|
2764
2764
|
|
|
2765
2765
|
envGlobal.System = new SystemJS();
|
|
2766
|
-
/*
|
|
2767
|
-
* SystemJS browser attachments for script and import map processing
|
|
2766
|
+
/*
|
|
2767
|
+
* SystemJS browser attachments for script and import map processing
|
|
2768
2768
|
*/
|
|
2769
2769
|
|
|
2770
2770
|
var importMapPromise = Promise.resolve();
|
|
@@ -2849,8 +2849,8 @@
|
|
|
2849
2849
|
|
|
2850
2850
|
resolveAndComposeImportMap(newMap, newMapUrl, importMap);
|
|
2851
2851
|
}
|
|
2852
|
-
/*
|
|
2853
|
-
* Script instantiation loading
|
|
2852
|
+
/*
|
|
2853
|
+
* Script instantiation loading
|
|
2854
2854
|
*/
|
|
2855
2855
|
|
|
2856
2856
|
|
|
@@ -2942,8 +2942,8 @@
|
|
|
2942
2942
|
});
|
|
2943
2943
|
});
|
|
2944
2944
|
};
|
|
2945
|
-
/*
|
|
2946
|
-
* Fetch loader, sets up shouldFetch and fetch hooks
|
|
2945
|
+
/*
|
|
2946
|
+
* Fetch loader, sets up shouldFetch and fetch hooks
|
|
2947
2947
|
*/
|
|
2948
2948
|
|
|
2949
2949
|
|
|
@@ -2995,8 +2995,8 @@
|
|
|
2995
2995
|
|
|
2996
2996
|
return systemInstantiate.call(this, url, firstParentUrl);
|
|
2997
2997
|
};
|
|
2998
|
-
/*
|
|
2999
|
-
* Supports loading System.register in workers
|
|
2998
|
+
/*
|
|
2999
|
+
* Supports loading System.register in workers
|
|
3000
3000
|
*/
|
|
3001
3001
|
|
|
3002
3002
|
|
|
@@ -60,15 +60,15 @@
|
|
|
60
60
|
"../src/internal/browser-launcher/jsenv-browser-system.js"
|
|
61
61
|
],
|
|
62
62
|
"sourcesContent": [
|
|
63
|
-
"export default (obj, key, value) => {\
|
|
64
|
-
"import defineProperty from \"../defineProperty/defineProperty.js\"\
|
|
65
|
-
"const nativeTypeOf = (obj) => typeof obj\
|
|
66
|
-
"/* eslint-disable no-eq-null, eqeqeq */\
|
|
67
|
-
"import arrayLikeToArray from \"../arrayLikeToArray/arrayLikeToArray.js\"\
|
|
68
|
-
"export default function _iterableToArray(iter) {\
|
|
69
|
-
"/* eslint-disable consistent-return */\
|
|
70
|
-
"export default () => {\
|
|
71
|
-
"import arrayWithoutHoles from \"../arrayWithoutHoles/arrayWithoutHoles.js\"\
|
|
63
|
+
"export default (obj, key, value) => {\n // Shortcircuit the slow defineProperty path when possible.\n // We are trying to avoid issues where setters defined on the\n // prototype cause side effects under the fast path of simple\n // assignment. By checking for existence of the property with\n // the in operator, we can optimize most of this overhead away.\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value,\n enumerable: true,\n configurable: true,\n writable: true,\n })\n } else {\n obj[key] = value\n }\n return obj\n}\n",
|
|
64
|
+
"import defineProperty from \"../defineProperty/defineProperty.js\"\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object)\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object)\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable\n })\n }\n keys.push.apply(keys, symbols)\n }\n return keys\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {}\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n defineProperty(target, key, source[key])\n })\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source))\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key))\n })\n }\n }\n return target\n}\n",
|
|
65
|
+
"const nativeTypeOf = (obj) => typeof obj\n\nconst customTypeOf = (obj) => {\n return obj &&\n typeof Symbol === \"function\" &&\n obj.constructor === Symbol &&\n obj !== Symbol.prototype\n ? \"symbol\"\n : typeof obj\n}\n\nexport default typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\"\n ? nativeTypeOf\n : customTypeOf\n",
|
|
66
|
+
"/* eslint-disable no-eq-null, eqeqeq */\nexport default function arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length\n var arr2 = new Array(len)\n for (var i = 0; i < len; i++) arr2[i] = arr[i]\n return arr2\n}\n",
|
|
67
|
+
"import arrayLikeToArray from \"../arrayLikeToArray/arrayLikeToArray.js\"\n\n// eslint-disable-next-line consistent-return\nexport default (arr) => {\n if (Array.isArray(arr)) return arrayLikeToArray(arr)\n}\n",
|
|
68
|
+
"export default function _iterableToArray(iter) {\n if (\n (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null) ||\n iter[\"@@iterator\"] != null\n )\n return Array.from(iter)\n}\n",
|
|
69
|
+
"/* eslint-disable consistent-return */\nimport arrayLikeToArray from \"../arrayLikeToArray/arrayLikeToArray.js\"\n\nexport default function unsupportedIterableToArray(o, minLen) {\n if (!o) return\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen)\n var n = Object.prototype.toString.call(o).slice(8, -1)\n if (n === \"Object\" && o.constructor) n = o.constructor.name\n if (n === \"Map\" || n === \"Set\") return Array.from(o)\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))\n return arrayLikeToArray(o, minLen)\n}\n",
|
|
70
|
+
"export default () => {\n throw new TypeError(\n \"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\",\n )\n}\n",
|
|
71
|
+
"import arrayWithoutHoles from \"../arrayWithoutHoles/arrayWithoutHoles.js\"\nimport iterableToArray from \"../iterableToArray/iterableToArray.js\"\nimport unsupportedIterableToArray from \"../unsupportedIterableToArray/unsupportedIterableToArray.js\"\nimport nonIterableSpread from \"../nonIterableSpread/nonIterableSpread.js\"\n\nexport default (arr) =>\n arrayWithoutHoles(arr) ||\n iterableToArray(arr) ||\n unsupportedIterableToArray(arr) ||\n nonIterableSpread()\n",
|
|
72
72
|
"// https://developer.mozilla.org/en-US/docs/Glossary/Primitive\n\nexport const isComposite = (value) => {\n if (value === null) {\n return false\n }\n\n const type = typeof value\n if (type === \"object\") {\n return true\n }\n\n if (type === \"function\") {\n return true\n }\n\n return false\n}\n",
|
|
73
73
|
"import { isComposite } from \"./isComposite.js\"\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap\nconst compositeWellKnownMap = new WeakMap()\nconst primitiveWellKnownMap = new Map()\n\nexport const getCompositeGlobalPath = (value) => compositeWellKnownMap.get(value)\n\nexport const getPrimitiveGlobalPath = (value) => primitiveWellKnownMap.get(value)\n\nconst visitGlobalObject = (value) => {\n const visitValue = (value, path) => {\n if (isComposite(value)) {\n // prevent infinite recursion\n if (compositeWellKnownMap.has(value)) {\n return\n }\n compositeWellKnownMap.set(value, path)\n\n const visitProperty = (property) => {\n let descriptor\n try {\n descriptor = Object.getOwnPropertyDescriptor(value, property)\n } catch (e) {\n if (e.name === \"SecurityError\") {\n return\n }\n throw e\n }\n\n if (!descriptor) {\n // it's apparently possible to have getOwnPropertyNames returning\n // a property that later returns a null descriptor\n // for instance window.showModalDialog in webkit 13.0\n return\n }\n\n // do not trigger getter/setter\n if (\"value\" in descriptor) {\n const propertyValue = descriptor.value\n visitValue(propertyValue, [...path, property])\n }\n }\n\n Object.getOwnPropertyNames(value).forEach((name) => visitProperty(name))\n Object.getOwnPropertySymbols(value).forEach((symbol) => visitProperty(symbol))\n }\n\n primitiveWellKnownMap.set(value, path)\n return\n }\n\n visitValue(value, [])\n}\n\nif (typeof window === \"object\") visitGlobalObject(window)\n\nif (typeof global === \"object\") visitGlobalObject(global)\n",
|
|
74
74
|
"/**\n * transforms a javascript value into an object describing it.\n *\n */\n\nimport { isComposite } from \"./isComposite.js\"\nimport { getCompositeGlobalPath, getPrimitiveGlobalPath } from \"./global-value-path.js\"\n\nexport const decompose = (mainValue, { functionAllowed, prototypeStrict, ignoreSymbols }) => {\n const valueMap = {}\n const recipeArray = []\n\n const valueToIdentifier = (value, path = []) => {\n if (!isComposite(value)) {\n const existingIdentifier = identifierForPrimitive(value)\n if (existingIdentifier !== undefined) {\n return existingIdentifier\n }\n const identifier = identifierForNewValue(value)\n recipeArray[identifier] = primitiveToRecipe(value)\n return identifier\n }\n\n if (typeof Promise === \"function\" && value instanceof Promise) {\n throw new Error(createPromiseAreNotSupportedMessage({ path }))\n }\n if (typeof WeakSet === \"function\" && value instanceof WeakSet) {\n throw new Error(createWeakSetAreNotSupportedMessage({ path }))\n }\n if (typeof WeakMap === \"function\" && value instanceof WeakMap) {\n throw new Error(createWeakMapAreNotSupportedMessage({ path }))\n }\n if (typeof value === \"function\" && !functionAllowed) {\n throw new Error(createForbiddenFunctionMessage({ path }))\n }\n\n const existingIdentifier = identifierForComposite(value)\n if (existingIdentifier !== undefined) {\n return existingIdentifier\n }\n const identifier = identifierForNewValue(value)\n\n const compositeGlobalPath = getCompositeGlobalPath(value)\n if (compositeGlobalPath) {\n recipeArray[identifier] = createGlobalReferenceRecipe(compositeGlobalPath)\n return identifier\n }\n\n const propertyDescriptionArray = []\n Object.getOwnPropertyNames(value).forEach((propertyName) => {\n const propertyDescriptor = Object.getOwnPropertyDescriptor(value, propertyName)\n const propertyNameIdentifier = valueToIdentifier(propertyName, [...path, propertyName])\n const propertyDescription = computePropertyDescription(propertyDescriptor, propertyName, path)\n propertyDescriptionArray.push({ propertyNameIdentifier, propertyDescription })\n })\n\n const symbolDescriptionArray = []\n if (!ignoreSymbols) {\n Object.getOwnPropertySymbols(value).forEach((symbol) => {\n const propertyDescriptor = Object.getOwnPropertyDescriptor(value, symbol)\n const symbolIdentifier = valueToIdentifier(symbol, [...path, `[${symbol.toString()}]`])\n const propertyDescription = computePropertyDescription(propertyDescriptor, symbol, path)\n symbolDescriptionArray.push({ symbolIdentifier, propertyDescription })\n })\n }\n\n const methodDescriptionArray = computeMethodDescriptionArray(value, path)\n\n const extensible = Object.isExtensible(value)\n\n recipeArray[identifier] = createCompositeRecipe({\n propertyDescriptionArray,\n symbolDescriptionArray,\n methodDescriptionArray,\n extensible,\n })\n return identifier\n }\n\n const computePropertyDescription = (propertyDescriptor, propertyNameOrSymbol, path) => {\n if (propertyDescriptor.set && !functionAllowed) {\n throw new Error(createForbiddenPropertySetterMessage({ path, propertyNameOrSymbol }))\n }\n if (propertyDescriptor.get && !functionAllowed) {\n throw new Error(createForbiddenPropertyGetterMessage({ path, propertyNameOrSymbol }))\n }\n\n return {\n configurable: propertyDescriptor.configurable,\n writable: propertyDescriptor.writable,\n enumerable: propertyDescriptor.enumerable,\n getIdentifier:\n \"get\" in propertyDescriptor\n ? valueToIdentifier(propertyDescriptor.get, [\n ...path,\n String(propertyNameOrSymbol),\n \"[[descriptor:get]]\",\n ])\n : undefined,\n setIdentifier:\n \"set\" in propertyDescriptor\n ? valueToIdentifier(propertyDescriptor.set, [\n ...path,\n String(propertyNameOrSymbol),\n \"[[descriptor:set]]\",\n ])\n : undefined,\n valueIdentifier:\n \"value\" in propertyDescriptor\n ? valueToIdentifier(propertyDescriptor.value, [\n ...path,\n String(propertyNameOrSymbol),\n \"[[descriptor:value]]\",\n ])\n : undefined,\n }\n }\n\n const computeMethodDescriptionArray = (value, path) => {\n const methodDescriptionArray = []\n\n if (typeof Set === \"function\" && value instanceof Set) {\n const callArray = []\n value.forEach((entryValue, index) => {\n const entryValueIdentifier = valueToIdentifier(entryValue, [\n ...path,\n `[[SetEntryValue]]`,\n index,\n ])\n callArray.push([entryValueIdentifier])\n })\n methodDescriptionArray.push({ methodNameIdentifier: valueToIdentifier(\"add\"), callArray })\n }\n\n if (typeof Map === \"function\" && value instanceof Map) {\n const callArray = []\n value.forEach((entryValue, entryKey) => {\n const entryKeyIdentifier = valueToIdentifier(entryKey, [\n ...path,\n \"[[MapEntryKey]]\",\n entryKey,\n ])\n const entryValueIdentifier = valueToIdentifier(entryValue, [\n ...path,\n \"[[MapEntryValue]]\",\n entryValue,\n ])\n callArray.push([entryKeyIdentifier, entryValueIdentifier])\n })\n methodDescriptionArray.push({ methodNameIdentifier: valueToIdentifier(\"set\"), callArray })\n }\n\n return methodDescriptionArray\n }\n\n const identifierForPrimitive = (value) => {\n return Object.keys(valueMap).find((existingIdentifier) => {\n const existingValue = valueMap[existingIdentifier]\n if (Object.is(value, existingValue)) return true\n return value === existingValue\n })\n }\n\n const identifierForComposite = (value) => {\n return Object.keys(valueMap).find((existingIdentifier) => {\n const existingValue = valueMap[existingIdentifier]\n return value === existingValue\n })\n }\n\n const identifierForNewValue = (value) => {\n const identifier = nextIdentifier()\n valueMap[identifier] = value\n return identifier\n }\n\n let currentIdentifier = -1\n const nextIdentifier = () => {\n const identifier = String(parseInt(currentIdentifier) + 1)\n currentIdentifier = identifier\n return identifier\n }\n\n const mainIdentifier = valueToIdentifier(mainValue)\n\n // prototype, important to keep after the whole structure was visited\n // so that we discover if any prototype is part of the value\n const prototypeValueToIdentifier = (prototypeValue) => {\n // prototype is null\n if (prototypeValue === null) {\n return valueToIdentifier(prototypeValue)\n }\n\n // prototype found somewhere already\n const prototypeExistingIdentifier = identifierForComposite(prototypeValue)\n if (prototypeExistingIdentifier !== undefined) {\n return prototypeExistingIdentifier\n }\n\n // mark prototype as visited\n const prototypeIdentifier = identifierForNewValue(prototypeValue)\n\n // prototype is a global reference ?\n const prototypeGlobalPath = getCompositeGlobalPath(prototypeValue)\n if (prototypeGlobalPath) {\n recipeArray[prototypeIdentifier] = createGlobalReferenceRecipe(prototypeGlobalPath)\n return prototypeIdentifier\n }\n\n // otherwise prototype is unknown\n if (prototypeStrict) {\n throw new Error(createUnknownPrototypeMessage({ prototypeValue }))\n }\n\n return prototypeValueToIdentifier(Object.getPrototypeOf(prototypeValue), true)\n }\n const identifierForValueOf = (value, path = []) => {\n if (value instanceof Array) {\n return valueToIdentifier(value.length, [...path, \"length\"])\n }\n\n if (\"valueOf\" in value === false) {\n return undefined\n }\n\n if (typeof value.valueOf !== \"function\") {\n return undefined\n }\n\n const valueOfReturnValue = value.valueOf()\n if (!isComposite(valueOfReturnValue)) {\n return valueToIdentifier(valueOfReturnValue, [...path, \"valueOf()\"])\n }\n\n if (valueOfReturnValue === value) {\n return undefined\n }\n\n throw new Error(createUnexpectedValueOfReturnValueMessage())\n }\n\n recipeArray.slice().forEach((recipe, index) => {\n if (recipe.type === \"composite\") {\n const value = valueMap[index]\n\n if (typeof value === \"function\") {\n const valueOfIdentifier = nextIdentifier()\n recipeArray[valueOfIdentifier] = {\n type: \"primitive\",\n value,\n }\n recipe.valueOfIdentifier = valueOfIdentifier\n return\n }\n\n if (value instanceof RegExp) {\n const valueOfIdentifier = nextIdentifier()\n recipeArray[valueOfIdentifier] = {\n type: \"primitive\",\n value,\n }\n recipe.valueOfIdentifier = valueOfIdentifier\n return\n }\n\n // valueOf, mandatory to uneval new Date(10) for instance.\n recipe.valueOfIdentifier = identifierForValueOf(value)\n const prototypeValue = Object.getPrototypeOf(value)\n recipe.prototypeIdentifier = prototypeValueToIdentifier(prototypeValue, true)\n }\n })\n\n return {\n recipeArray,\n mainIdentifier,\n valueMap,\n }\n}\n\nconst primitiveToRecipe = (value) => {\n if (typeof value === \"symbol\") {\n return symbolToRecipe(value)\n }\n\n return createPimitiveRecipe(value)\n}\n\nconst symbolToRecipe = (symbol) => {\n const globalSymbolKey = Symbol.keyFor(symbol)\n if (globalSymbolKey !== undefined) {\n return createGlobalSymbolRecipe(globalSymbolKey)\n }\n\n const symbolGlobalPath = getPrimitiveGlobalPath(symbol)\n if (!symbolGlobalPath) {\n throw new Error(createUnknownSymbolMessage({ symbol }))\n }\n\n return createGlobalReferenceRecipe(symbolGlobalPath)\n}\n\nconst createPimitiveRecipe = (value) => {\n return {\n type: \"primitive\",\n value,\n }\n}\n\nconst createGlobalReferenceRecipe = (path) => {\n const recipe = {\n type: \"global-reference\",\n path,\n }\n return recipe\n}\n\nconst createGlobalSymbolRecipe = (key) => {\n return {\n type: \"global-symbol\",\n key,\n }\n}\n\nconst createCompositeRecipe = ({\n prototypeIdentifier,\n valueOfIdentifier,\n propertyDescriptionArray,\n symbolDescriptionArray,\n methodDescriptionArray,\n extensible,\n}) => {\n return {\n type: \"composite\",\n prototypeIdentifier,\n valueOfIdentifier,\n propertyDescriptionArray,\n symbolDescriptionArray,\n methodDescriptionArray,\n extensible,\n }\n}\n\nconst createPromiseAreNotSupportedMessage = ({ path }) => {\n if (path.length === 0) {\n return `promise are not supported.`\n }\n\n return `promise are not supported.\npromise found at: ${path.join(\"\")}`\n}\n\nconst createWeakSetAreNotSupportedMessage = ({ path }) => {\n if (path.length === 0) {\n return `weakSet are not supported.`\n }\n\n return `weakSet are not supported.\nweakSet found at: ${path.join(\"\")}`\n}\n\nconst createWeakMapAreNotSupportedMessage = ({ path }) => {\n if (path.length === 0) {\n return `weakMap are not supported.`\n }\n\n return `weakMap are not supported.\nweakMap found at: ${path.join(\"\")}`\n}\n\nconst createForbiddenFunctionMessage = ({ path }) => {\n if (path.length === 0) {\n return `function are not allowed.`\n }\n\n return `function are not allowed.\nfunction found at: ${path.join(\"\")}`\n}\n\nconst createForbiddenPropertyGetterMessage = ({\n path,\n propertyNameOrSymbol,\n}) => `property getter are not allowed.\ngetter found on property: ${String(propertyNameOrSymbol)}\nat: ${path.join(\"\")}`\n\nconst createForbiddenPropertySetterMessage = ({\n path,\n propertyNameOrSymbol,\n}) => `property setter are not allowed.\nsetter found on property: ${String(propertyNameOrSymbol)}\nat: ${path.join(\"\")}`\n\nconst createUnexpectedValueOfReturnValueMessage = () =>\n `valueOf() must return a primitive of the object itself.`\n\nconst createUnknownSymbolMessage = ({\n symbol,\n}) => `symbol must be global, like Symbol.iterator, or created using Symbol.for().\nsymbol: ${symbol.toString()}`\n\nconst createUnknownPrototypeMessage = ({ prototypeValue }) =>\n `prototype must be global, like Object.prototype, or somewhere in the value.\nprototype constructor name: ${prototypeValue.constructor.name}`\n",
|
|
@@ -88,8 +88,8 @@
|
|
|
88
88
|
"import { assertImportMap } from \"./internal/assertImportMap.js\"\n\nexport const sortImportMap = (importMap) => {\n assertImportMap(importMap)\n\n const { imports, scopes } = importMap\n\n return {\n ...(imports ? { imports: sortImports(imports) } : {}),\n ...(scopes ? { scopes: sortScopes(scopes) } : {}),\n }\n}\n\nexport const sortImports = (imports) => {\n const mappingsSorted = {}\n\n Object.keys(imports)\n .sort(compareLengthOrLocaleCompare)\n .forEach((name) => {\n mappingsSorted[name] = imports[name]\n })\n\n return mappingsSorted\n}\n\nexport const sortScopes = (scopes) => {\n const scopesSorted = {}\n\n Object.keys(scopes)\n .sort(compareLengthOrLocaleCompare)\n .forEach((scopeSpecifier) => {\n scopesSorted[scopeSpecifier] = sortImports(scopes[scopeSpecifier])\n })\n\n return scopesSorted\n}\n\nconst compareLengthOrLocaleCompare = (a, b) => {\n return b.length - a.length || a.localeCompare(b)\n}\n",
|
|
89
89
|
"import { assertImportMap } from \"./internal/assertImportMap.js\"\nimport { tryUrlResolution } from \"./internal/tryUrlResolution.js\"\nimport { resolveSpecifier } from \"./resolveSpecifier.js\"\nimport { sortImports, sortScopes } from \"./sortImportMap.js\"\n\nexport const normalizeImportMap = (importMap, baseUrl) => {\n assertImportMap(importMap)\n\n if (!isStringOrUrl(baseUrl)) {\n throw new TypeError(formulateBaseUrlMustBeStringOrUrl({ baseUrl }))\n }\n\n const { imports, scopes } = importMap\n\n return {\n imports: imports ? normalizeMappings(imports, baseUrl) : undefined,\n scopes: scopes ? normalizeScopes(scopes, baseUrl) : undefined,\n }\n}\n\nconst isStringOrUrl = (value) => {\n if (typeof value === \"string\") {\n return true\n }\n\n if (typeof URL === \"function\" && value instanceof URL) {\n return true\n }\n\n return false\n}\n\nconst normalizeMappings = (mappings, baseUrl) => {\n const mappingsNormalized = {}\n\n Object.keys(mappings).forEach((specifier) => {\n const address = mappings[specifier]\n\n if (typeof address !== \"string\") {\n console.warn(\n formulateAddressMustBeAString({\n address,\n specifier,\n }),\n )\n return\n }\n\n const specifierResolved = resolveSpecifier(specifier, baseUrl) || specifier\n\n const addressUrl = tryUrlResolution(address, baseUrl)\n if (addressUrl === null) {\n console.warn(\n formulateAdressResolutionFailed({\n address,\n baseUrl,\n specifier,\n }),\n )\n return\n }\n\n if (specifier.endsWith(\"/\") && !addressUrl.endsWith(\"/\")) {\n console.warn(\n formulateAddressUrlRequiresTrailingSlash({\n addressUrl,\n address,\n specifier,\n }),\n )\n return\n }\n mappingsNormalized[specifierResolved] = addressUrl\n })\n\n return sortImports(mappingsNormalized)\n}\n\nconst normalizeScopes = (scopes, baseUrl) => {\n const scopesNormalized = {}\n\n Object.keys(scopes).forEach((scopeSpecifier) => {\n const scopeMappings = scopes[scopeSpecifier]\n const scopeUrl = tryUrlResolution(scopeSpecifier, baseUrl)\n if (scopeUrl === null) {\n console.warn(\n formulateScopeResolutionFailed({\n scope: scopeSpecifier,\n baseUrl,\n }),\n )\n return\n }\n const scopeValueNormalized = normalizeMappings(scopeMappings, baseUrl)\n scopesNormalized[scopeUrl] = scopeValueNormalized\n })\n\n return sortScopes(scopesNormalized)\n}\n\nconst formulateBaseUrlMustBeStringOrUrl = ({ baseUrl }) => `baseUrl must be a string or an url.\n--- base url ---\n${baseUrl}`\n\nconst formulateAddressMustBeAString = ({ specifier, address }) => `Address must be a string.\n--- address ---\n${address}\n--- specifier ---\n${specifier}`\n\nconst formulateAdressResolutionFailed = ({\n address,\n baseUrl,\n specifier,\n}) => `Address url resolution failed.\n--- address ---\n${address}\n--- base url ---\n${baseUrl}\n--- specifier ---\n${specifier}`\n\nconst formulateAddressUrlRequiresTrailingSlash = ({\n addressURL,\n address,\n specifier,\n}) => `Address must end with /.\n--- address url ---\n${addressURL}\n--- address ---\n${address}\n--- specifier ---\n${specifier}`\n\nconst formulateScopeResolutionFailed = ({ scope, baseUrl }) => `Scope url resolution failed.\n--- scope ---\n${scope}\n--- base url ---\n${baseUrl}`\n",
|
|
90
90
|
"export const memoize = (compute) => {\n let memoized = false\n let memoizedValue\n\n const fnWithMemoization = (...args) => {\n if (memoized) {\n return memoizedValue\n }\n // if compute is recursive wait for it to be fully done before storing the lockValue\n // so set locked later\n memoizedValue = compute(...args)\n memoized = true\n return memoizedValue\n }\n\n fnWithMemoization.forget = () => {\n const value = memoizedValue\n memoized = false\n memoizedValue = undefined\n return value\n }\n\n return fnWithMemoization\n}\n",
|
|
91
|
-
"export default (source, excluded) => {\
|
|
92
|
-
"import objectWithoutPropertiesLoose from \"../objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js\"\
|
|
91
|
+
"export default (source, excluded) => {\n if (source === null) return {}\n var target = {}\n var sourceKeys = Object.keys(source)\n var key\n var i\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i]\n if (excluded.indexOf(key) >= 0) continue\n target[key] = source[key]\n }\n return target\n}\n",
|
|
92
|
+
"import objectWithoutPropertiesLoose from \"../objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js\"\n\nexport default (source, excluded) => {\n if (source === null) return {}\n\n var target = objectWithoutPropertiesLoose(source, excluded)\n var key\n var i\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source)\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i]\n if (excluded.indexOf(key) >= 0) continue\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue\n target[key] = source[key]\n }\n }\n return target\n}\n",
|
|
93
93
|
"export const createDetailedMessage = (message, details = {}) => {\n let string = `${message}`\n\n Object.keys(details).forEach((key) => {\n const value = details[key]\n string += `\n--- ${key} ---\n${\n Array.isArray(value)\n ? value.join(`\n`)\n : value\n}`\n })\n\n return string\n}\n",
|
|
94
94
|
"import { createDetailedMessage } from \"@jsenv/logger\"\n\nexport const fetchUsingXHR = async (\n url,\n {\n signal,\n method = \"GET\",\n credentials = \"same-origin\",\n headers = {},\n body = null,\n } = {},\n) => {\n const headersPromise = createPromiseAndHooks()\n const bodyPromise = createPromiseAndHooks()\n\n const xhr = new XMLHttpRequest()\n\n const failure = (error) => {\n // if it was already resolved, we must reject the body promise\n if (headersPromise.settled) {\n bodyPromise.reject(error)\n } else {\n headersPromise.reject(error)\n }\n }\n\n const cleanup = () => {\n xhr.ontimeout = null\n xhr.onerror = null\n xhr.onload = null\n xhr.onreadystatechange = null\n }\n\n xhr.ontimeout = () => {\n cleanup()\n failure(new Error(`xhr request timeout on ${url}.`))\n }\n\n xhr.onerror = (error) => {\n cleanup()\n // unfortunately with have no clue why it fails\n // might be cors for instance\n failure(createRequestError(error, { url }))\n }\n\n xhr.onload = () => {\n cleanup()\n bodyPromise.resolve()\n }\n\n signal.addEventListener(\"abort\", () => {\n xhr.abort()\n const abortError = new Error(\"aborted\")\n abortError.name = \"AbortError\"\n failure(abortError)\n })\n\n xhr.onreadystatechange = () => {\n // https://developer.mozilla.org/fr/docs/Web/API/XMLHttpRequest/readyState\n const { readyState } = xhr\n\n if (readyState === 2) {\n headersPromise.resolve()\n } else if (readyState === 4) {\n cleanup()\n bodyPromise.resolve()\n }\n }\n\n xhr.open(method, url, true)\n Object.keys(headers).forEach((key) => {\n xhr.setRequestHeader(key, headers[key])\n })\n xhr.withCredentials = computeWithCredentials({ credentials, url })\n if (\"responseType\" in xhr && hasBlob) {\n xhr.responseType = \"blob\"\n }\n xhr.send(body)\n\n await headersPromise\n\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseURL\n const responseUrl =\n \"responseURL\" in xhr ? xhr.responseURL : headers[\"x-request-url\"]\n let responseStatus = xhr.status\n const responseStatusText = xhr.statusText\n const responseHeaders = getHeadersFromXHR(xhr)\n\n const readBody = async () => {\n await bodyPromise\n\n const { status } = xhr\n // in Chrome on file:/// URLs, status is 0\n if (status === 0) {\n responseStatus = 200\n }\n\n const body = \"response\" in xhr ? xhr.response : xhr.responseText\n\n return {\n responseBody: body,\n responseBodyType: detectBodyType(body),\n }\n }\n\n const text = async () => {\n const { responseBody, responseBodyType } = await readBody()\n\n if (responseBodyType === \"blob\") {\n return blobToText(responseBody)\n }\n if (responseBodyType === \"formData\") {\n throw new Error(\"could not read FormData body as text\")\n }\n if (responseBodyType === \"dataView\") {\n return arrayBufferToText(responseBody.buffer)\n }\n if (responseBodyType === \"arrayBuffer\") {\n return arrayBufferToText(responseBody)\n }\n // if (responseBodyType === \"text\" || responseBodyType === 'searchParams') {\n // return body\n // }\n return String(responseBody)\n }\n\n const json = async () => {\n const responseText = await text()\n return JSON.parse(responseText)\n }\n\n const blob = async () => {\n if (!hasBlob) {\n throw new Error(`blob not supported`)\n }\n\n const { responseBody, responseBodyType } = await readBody()\n\n if (responseBodyType === \"blob\") {\n return responseBody\n }\n if (responseBodyType === \"dataView\") {\n return new Blob([cloneBuffer(responseBody.buffer)])\n }\n if (responseBodyType === \"arrayBuffer\") {\n return new Blob([cloneBuffer(responseBody)])\n }\n if (responseBodyType === \"formData\") {\n throw new Error(\"could not read FormData body as blob\")\n }\n return new Blob([String(responseBody)])\n }\n\n const arrayBuffer = async () => {\n const { responseBody, responseBodyType } = await readBody()\n\n if (responseBodyType === \"arrayBuffer\") {\n return cloneBuffer(responseBody)\n }\n const responseBlob = await blob()\n return blobToArrayBuffer(responseBlob)\n }\n\n const formData = async () => {\n if (!hasFormData) {\n throw new Error(`formData not supported`)\n }\n const responseText = await text()\n return textToFormData(responseText)\n }\n\n return {\n url: responseUrl,\n status: responseStatus,\n statusText: responseStatusText,\n headers: responseHeaders,\n text,\n json,\n blob,\n arrayBuffer,\n formData,\n }\n}\n\nconst canUseBlob = () => {\n if (typeof window.FileReader !== \"function\") return false\n\n if (typeof window.Blob !== \"function\") return false\n\n try {\n // eslint-disable-next-line no-new\n new Blob()\n return true\n } catch (e) {\n return false\n }\n}\n\nconst hasBlob = canUseBlob()\n\nconst hasFormData = typeof window.FormData === \"function\"\n\nconst hasArrayBuffer = typeof window.ArrayBuffer === \"function\"\n\nconst hasSearchParams = typeof window.URLSearchParams === \"function\"\n\nconst createRequestError = (error, { url }) => {\n return new Error(\n createDetailedMessage(`error during xhr request on ${url}.`, {\n [\"error stack\"]: error.stack,\n }),\n )\n}\n\nconst createPromiseAndHooks = () => {\n let resolve\n let reject\n const promise = new Promise((res, rej) => {\n resolve = (value) => {\n promise.settled = true\n res(value)\n }\n reject = (value) => {\n promise.settled = true\n rej(value)\n }\n })\n promise.resolve = resolve\n promise.reject = reject\n return promise\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch\nconst computeWithCredentials = ({ credentials, url }) => {\n if (credentials === \"same-origin\") {\n return originSameAsGlobalOrigin(url)\n }\n return credentials === \"include\"\n}\n\nconst originSameAsGlobalOrigin = (url) => {\n // if we cannot read globalOrigin from window.location.origin, let's consider it's ok\n if (typeof window !== \"object\") return true\n if (typeof window.location !== \"object\") return true\n const globalOrigin = window.location.origin\n if (globalOrigin === \"null\") return true\n return hrefToOrigin(url) === globalOrigin\n}\n\nconst detectBodyType = (body) => {\n if (!body) {\n return \"\"\n }\n if (typeof body === \"string\") {\n return \"text\"\n }\n if (hasBlob && Blob.prototype.isPrototypeOf(body)) {\n return \"blob\"\n }\n if (hasFormData && FormData.prototype.isPrototypeOf(body)) {\n return \"formData\"\n }\n if (hasArrayBuffer) {\n if (hasBlob && isDataView(body)) {\n return `dataView`\n }\n if (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body)) {\n return `arrayBuffer`\n }\n }\n if (hasSearchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n return \"searchParams\"\n }\n return \"\"\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders#Example\nconst getHeadersFromXHR = (xhr) => {\n const headerMap = {}\n\n const headersString = xhr.getAllResponseHeaders()\n if (headersString === \"\") return headerMap\n\n const lines = headersString.trim().split(/[\\r\\n]+/)\n lines.forEach((line) => {\n const parts = line.split(\": \")\n const name = parts.shift()\n const value = parts.join(\": \")\n headerMap[name.toLowerCase()] = value\n })\n\n return headerMap\n}\n\nconst hrefToOrigin = (href) => {\n const scheme = hrefToScheme(href)\n\n if (scheme === \"file\") {\n return \"file://\"\n }\n\n if (scheme === \"http\" || scheme === \"https\") {\n const secondProtocolSlashIndex = scheme.length + \"://\".length\n const pathnameSlashIndex = href.indexOf(\"/\", secondProtocolSlashIndex)\n\n if (pathnameSlashIndex === -1) return href\n return href.slice(0, pathnameSlashIndex)\n }\n\n return href.slice(0, scheme.length + 1)\n}\n\nconst hrefToScheme = (href) => {\n const colonIndex = href.indexOf(\":\")\n if (colonIndex === -1) return \"\"\n return href.slice(0, colonIndex)\n}\n\nconst isDataView = (obj) => {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nconst isArrayBufferView =\n ArrayBuffer.isView ||\n (() => {\n const viewClasses = [\n \"[object Int8Array]\",\n \"[object Uint8Array]\",\n \"[object Uint8ClampedArray]\",\n \"[object Int16Array]\",\n \"[object Uint16Array]\",\n \"[object Int32Array]\",\n \"[object Uint32Array]\",\n \"[object Float32Array]\",\n \"[object Float64Array]\",\n ]\n\n return (value) => {\n return (\n value && viewClasses.includes(Object.prototype.toString.call(value))\n )\n }\n })()\n\nconst textToFormData = (text) => {\n const form = new FormData()\n text\n .trim()\n .split(\"&\")\n .forEach(function (bytes) {\n if (bytes) {\n const split = bytes.split(\"=\")\n const name = split.shift().replace(/\\+/g, \" \")\n const value = split.join(\"=\").replace(/\\+/g, \" \")\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nconst blobToArrayBuffer = async (blob) => {\n const reader = new FileReader()\n const promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nconst blobToText = (blob) => {\n const reader = new FileReader()\n const promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nconst arrayBufferToText = (arrayBuffer) => {\n const view = new Uint8Array(arrayBuffer)\n const chars = new Array(view.length)\n let i = 0\n while (i < view.length) {\n chars[i] = String.fromCharCode(view[i])\n\n i++\n }\n return chars.join(\"\")\n}\n\nconst fileReaderReady = (reader) => {\n return new Promise(function (resolve, reject) {\n reader.onload = function () {\n resolve(reader.result)\n }\n reader.onerror = function () {\n reject(reader.error)\n }\n })\n}\n\nconst cloneBuffer = (buffer) => {\n if (buffer.slice) {\n return buffer.slice(0)\n }\n const view = new Uint8Array(buffer.byteLength)\n view.set(new Uint8Array(buffer))\n return view.buffer\n}\n",
|
|
95
95
|
"import { fetchUsingXHR } from \"./fetchUsingXHR.js\"\n\nconst fetchNative = async (url, { mode = \"cors\", ...options } = {}) => {\n const response = await window.fetch(url, {\n mode,\n ...options,\n })\n\n return {\n url: response.url,\n status: response.status,\n statusText: \"\",\n headers: responseToHeaders(response),\n text: () => response.text(),\n json: () => response.json(),\n blob: () => response.blob(),\n arrayBuffer: () => response.arrayBuffer(),\n formData: () => response.formData(),\n }\n}\n\nconst responseToHeaders = (response) => {\n const headers = {}\n response.headers.forEach((value, name) => {\n headers[name] = value\n })\n return headers\n}\n\nexport const fetchUrl =\n typeof window.fetch === \"function\" &&\n typeof window.AbortController === \"function\"\n ? fetchNative\n : fetchUsingXHR\n",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"export const applyDefaultExtension = (specifier, importer) => {\n if (!importer) {\n return specifier\n }\n\n const importerExtension = urlToExtension(importer)\n const fakeUrl = new URL(specifier, importer).href\n const specifierExtension = urlToExtension(fakeUrl)\n if (specifierExtension !== \"\") {\n return specifier\n }\n\n // I guess typescript still expect default extension to be .ts\n // in a tsx file.\n if (importerExtension === \"tsx\") {\n return `${specifier}.ts`\n }\n\n // extension magic\n return `${specifier}${importerExtension}`\n}\n\nconst urlToExtension = (url) => {\n return pathnameToExtension(urlToPathname(url))\n}\n\nconst urlToPathname = (url) => new URL(url).pathname\n\nconst pathnameToExtension = (pathname) => {\n const slashLastIndex = pathname.lastIndexOf(\"/\")\n if (slashLastIndex !== -1) {\n pathname = pathname.slice(slashLastIndex + 1)\n }\n\n const dotLastIndex = pathname.lastIndexOf(\".\")\n if (dotLastIndex === -1) return \"\"\n // if (dotLastIndex === pathname.length - 1) return \"\"\n const extension = pathname.slice(dotLastIndex)\n return extension\n}\n",
|
|
101
101
|
"import { createDetailedMessage } from \"@jsenv/logger\"\nimport { resolveImport } from \"@jsenv/importmap/src/resolveImport.js\"\n\nimport { tryToFindProjectRelativeUrl } from \"@jsenv/core/src/internal/runtime/module-registration.js\"\n\nimport { applyDefaultExtension } from \"./default-extension.js\"\n\nexport const createImportResolverForImportmap = async ({\n // projectDirectoryUrl,\n compileServerOrigin,\n compileDirectoryRelativeUrl,\n importMap,\n importMapUrl,\n importDefaultExtension,\n onBareSpecifierError = () => {},\n}) => {\n const _resolveImport = (specifier, importer) => {\n if (importDefaultExtension) {\n specifier = applyDefaultExtension(specifier, importer)\n }\n return resolveImport({\n specifier,\n importer,\n importMap,\n createBareSpecifierError: ({ specifier, importer }) => {\n const bareSpecifierError = createBareSpecifierError({\n specifier,\n importer:\n tryToFindProjectRelativeUrl(importer, {\n compileServerOrigin,\n compileDirectoryRelativeUrl,\n }) || importer,\n importMapUrl:\n tryToFindProjectRelativeUrl(importMapUrl, {\n compileServerOrigin,\n compileDirectoryRelativeUrl,\n }) || importMapUrl,\n importMap,\n })\n onBareSpecifierError(bareSpecifierError)\n return bareSpecifierError\n },\n })\n }\n\n return { resolveImport: _resolveImport }\n}\n\nconst createBareSpecifierError = ({ specifier, importer, importMapUrl }) => {\n const detailedMessage = createDetailedMessage(\"Unmapped bare specifier.\", {\n specifier,\n importer,\n ...(importMapUrl\n ? {\n \"how to fix\": `Add a mapping for \"${specifier}\" into the importmap file at ${importMapUrl}`,\n }\n : {\n \"how to fix\": `Add an importmap with a mapping for \"${specifier}\"`,\n \"suggestion\": `Generate importmap using https://github.com/jsenv/importmap-node-module`,\n }),\n })\n\n return new Error(detailedMessage)\n}\n",
|
|
102
102
|
"/* eslint-env browser */\n\nconst { performance } = window\n\nexport const measureAsyncFnPerf = performance\n ? async (fn, name) => {\n const perfMarkStartName = `${name}_start`\n\n performance.mark(perfMarkStartName)\n try {\n const value = await fn()\n return value\n } finally {\n performance.measure(name, perfMarkStartName)\n }\n }\n : async (fn) => {\n return fn()\n }\n",
|
|
103
|
-
"/*\r\n* SJS 6.11.0\r\n* Minimal SystemJS Build\r\n*/\r\n(function () {\r\n\r\n function errMsg(errCode, msg) {\r\n return (msg || \"\") + \" (SystemJS https://git.io/JvFET#\" + errCode + \")\";\r\n }\r\n\r\n var hasSymbol = typeof Symbol !== 'undefined';\r\n var hasSelf = typeof self !== 'undefined';\r\n var hasDocument = typeof document !== 'undefined';\r\n\r\n var envGlobal = hasSelf ? self : global;\r\n\r\n var baseUrl;\r\n\r\n if (hasDocument) {\r\n var baseEl = document.querySelector('base[href]');\r\n if (baseEl)\r\n baseUrl = baseEl.href;\r\n }\r\n\r\n if (!baseUrl && typeof location !== 'undefined') {\r\n baseUrl = location.href.split('#')[0].split('?')[0];\r\n var lastSepIndex = baseUrl.lastIndexOf('/');\r\n if (lastSepIndex !== -1)\r\n baseUrl = baseUrl.slice(0, lastSepIndex + 1);\r\n }\r\n\r\n var backslashRegEx = /\\\\/g;\r\n function resolveIfNotPlainOrUrl (relUrl, parentUrl) {\r\n if (relUrl.indexOf('\\\\') !== -1)\r\n relUrl = relUrl.replace(backslashRegEx, '/');\r\n // protocol-relative\r\n if (relUrl[0] === '/' && relUrl[1] === '/') {\r\n return parentUrl.slice(0, parentUrl.indexOf(':') + 1) + relUrl;\r\n }\r\n // relative-url\r\n else if (relUrl[0] === '.' && (relUrl[1] === '/' || relUrl[1] === '.' && (relUrl[2] === '/' || relUrl.length === 2 && (relUrl += '/')) ||\r\n relUrl.length === 1 && (relUrl += '/')) ||\r\n relUrl[0] === '/') {\r\n var parentProtocol = parentUrl.slice(0, parentUrl.indexOf(':') + 1);\r\n // Disabled, but these cases will give inconsistent results for deep backtracking\r\n //if (parentUrl[parentProtocol.length] !== '/')\r\n // throw Error('Cannot resolve');\r\n // read pathname from parent URL\r\n // pathname taken to be part after leading \"/\"\r\n var pathname;\r\n if (parentUrl[parentProtocol.length + 1] === '/') {\r\n // resolving to a :// so we need to read out the auth and host\r\n if (parentProtocol !== 'file:') {\r\n pathname = parentUrl.slice(parentProtocol.length + 2);\r\n pathname = pathname.slice(pathname.indexOf('/') + 1);\r\n }\r\n else {\r\n pathname = parentUrl.slice(8);\r\n }\r\n }\r\n else {\r\n // resolving to :/ so pathname is the /... part\r\n pathname = parentUrl.slice(parentProtocol.length + (parentUrl[parentProtocol.length] === '/'));\r\n }\r\n\r\n if (relUrl[0] === '/')\r\n return parentUrl.slice(0, parentUrl.length - pathname.length - 1) + relUrl;\r\n\r\n // join together and split for removal of .. and . segments\r\n // looping the string instead of anything fancy for perf reasons\r\n // '../../../../../z' resolved to 'x/y' is just 'z'\r\n var segmented = pathname.slice(0, pathname.lastIndexOf('/') + 1) + relUrl;\r\n\r\n var output = [];\r\n var segmentIndex = -1;\r\n for (var i = 0; i < segmented.length; i++) {\r\n // busy reading a segment - only terminate on '/'\r\n if (segmentIndex !== -1) {\r\n if (segmented[i] === '/') {\r\n output.push(segmented.slice(segmentIndex, i + 1));\r\n segmentIndex = -1;\r\n }\r\n }\r\n\r\n // new segment - check if it is relative\r\n else if (segmented[i] === '.') {\r\n // ../ segment\r\n if (segmented[i + 1] === '.' && (segmented[i + 2] === '/' || i + 2 === segmented.length)) {\r\n output.pop();\r\n i += 2;\r\n }\r\n // ./ segment\r\n else if (segmented[i + 1] === '/' || i + 1 === segmented.length) {\r\n i += 1;\r\n }\r\n else {\r\n // the start of a new segment as below\r\n segmentIndex = i;\r\n }\r\n }\r\n // it is the start of a new segment\r\n else {\r\n segmentIndex = i;\r\n }\r\n }\r\n // finish reading out the last segment\r\n if (segmentIndex !== -1)\r\n output.push(segmented.slice(segmentIndex));\r\n return parentUrl.slice(0, parentUrl.length - pathname.length) + output.join('');\r\n }\r\n }\r\n\r\n /*\r\n * Import maps implementation\r\n *\r\n * To make lookups fast we pre-resolve the entire import map\r\n * and then match based on backtracked hash lookups\r\n *\r\n */\r\n\r\n function resolveUrl (relUrl, parentUrl) {\r\n return resolveIfNotPlainOrUrl(relUrl, parentUrl) || (relUrl.indexOf(':') !== -1 ? relUrl : resolveIfNotPlainOrUrl('./' + relUrl, parentUrl));\r\n }\r\n\r\n function resolveAndComposePackages (packages, outPackages, baseUrl, parentMap, parentUrl) {\r\n for (var p in packages) {\r\n var resolvedLhs = resolveIfNotPlainOrUrl(p, baseUrl) || p;\r\n var rhs = packages[p];\r\n // package fallbacks not currently supported\r\n if (typeof rhs !== 'string')\r\n continue;\r\n var mapped = resolveImportMap(parentMap, resolveIfNotPlainOrUrl(rhs, baseUrl) || rhs, parentUrl);\r\n if (!mapped) {\r\n targetWarning('W1', p, rhs);\r\n }\r\n else\r\n outPackages[resolvedLhs] = mapped;\r\n }\r\n }\r\n\r\n function resolveAndComposeImportMap (json, baseUrl, outMap) {\r\n if (json.imports)\r\n resolveAndComposePackages(json.imports, outMap.imports, baseUrl, outMap, null);\r\n\r\n var u;\r\n for (u in json.scopes || {}) {\r\n var resolvedScope = resolveUrl(u, baseUrl);\r\n resolveAndComposePackages(json.scopes[u], outMap.scopes[resolvedScope] || (outMap.scopes[resolvedScope] = {}), baseUrl, outMap, resolvedScope);\r\n }\r\n\r\n for (u in json.depcache || {})\r\n outMap.depcache[resolveUrl(u, baseUrl)] = json.depcache[u];\r\n\r\n for (u in json.integrity || {})\r\n outMap.integrity[resolveUrl(u, baseUrl)] = json.integrity[u];\r\n }\r\n\r\n function getMatch (path, matchObj) {\r\n if (matchObj[path])\r\n return path;\r\n var sepIndex = path.length;\r\n do {\r\n var segment = path.slice(0, sepIndex + 1);\r\n if (segment in matchObj)\r\n return segment;\r\n } while ((sepIndex = path.lastIndexOf('/', sepIndex - 1)) !== -1)\r\n }\r\n\r\n function applyPackages (id, packages) {\r\n var pkgName = getMatch(id, packages);\r\n if (pkgName) {\r\n var pkg = packages[pkgName];\r\n if (pkg === null) return;\r\n if (id.length > pkgName.length && pkg[pkg.length - 1] !== '/') {\r\n targetWarning('W2', pkgName, pkg);\r\n }\r\n else\r\n return pkg + id.slice(pkgName.length);\r\n }\r\n }\r\n\r\n function targetWarning (code, match, target, msg) {\r\n console.warn(errMsg(code, [target, match].join(', ') ));\r\n }\r\n\r\n function resolveImportMap (importMap, resolvedOrPlain, parentUrl) {\r\n var scopes = importMap.scopes;\r\n var scopeUrl = parentUrl && getMatch(parentUrl, scopes);\r\n while (scopeUrl) {\r\n var packageResolution = applyPackages(resolvedOrPlain, scopes[scopeUrl]);\r\n if (packageResolution)\r\n return packageResolution;\r\n scopeUrl = getMatch(scopeUrl.slice(0, scopeUrl.lastIndexOf('/')), scopes);\r\n }\r\n return applyPackages(resolvedOrPlain, importMap.imports) || resolvedOrPlain.indexOf(':') !== -1 && resolvedOrPlain;\r\n }\r\n\r\n /*\r\n * SystemJS Core\r\n *\r\n * Provides\r\n * - System.import\r\n * - System.register support for\r\n * live bindings, function hoisting through circular references,\r\n * reexports, dynamic import, import.meta.url, top-level await\r\n * - System.getRegister to get the registration\r\n * - Symbol.toStringTag support in Module objects\r\n * - Hookable System.createContext to customize import.meta\r\n * - System.onload(err, id, deps) handler for tracing / hot-reloading\r\n *\r\n * Core comes with no System.prototype.resolve or\r\n * System.prototype.instantiate implementations\r\n */\r\n\r\n var toStringTag = hasSymbol && Symbol.toStringTag;\r\n var REGISTRY = hasSymbol ? Symbol() : '@';\r\n\r\n function SystemJS () {\r\n this[REGISTRY] = {};\r\n }\r\n\r\n var systemJSPrototype = SystemJS.prototype;\r\n\r\n systemJSPrototype.import = function (id, parentUrl) {\r\n var loader = this;\r\n return Promise.resolve(loader.prepareImport())\r\n .then(function() {\r\n return loader.resolve(id, parentUrl);\r\n })\r\n .then(function (id) {\r\n var load = getOrCreateLoad(loader, id);\r\n return load.C || topLevelLoad(loader, load);\r\n });\r\n };\r\n\r\n // Hookable createContext function -> allowing eg custom import meta\r\n systemJSPrototype.createContext = function (parentId) {\r\n var loader = this;\r\n return {\r\n url: parentId,\r\n resolve: function (id, parentUrl) {\r\n return Promise.resolve(loader.resolve(id, parentUrl || parentId));\r\n }\r\n };\r\n };\r\n function loadToId (load) {\r\n return load.id;\r\n }\r\n function triggerOnload (loader, load, err, isErrSource) {\r\n loader.onload(err, load.id, load.d && load.d.map(loadToId), !!isErrSource);\r\n if (err)\r\n throw err;\r\n }\r\n\r\n var lastRegister;\r\n systemJSPrototype.register = function (deps, declare) {\r\n lastRegister = [deps, declare];\r\n };\r\n\r\n /*\r\n * getRegister provides the last anonymous System.register call\r\n */\r\n systemJSPrototype.getRegister = function () {\r\n var _lastRegister = lastRegister;\r\n lastRegister = undefined;\r\n return _lastRegister;\r\n };\r\n\r\n function getOrCreateLoad (loader, id, firstParentUrl) {\r\n var load = loader[REGISTRY][id];\r\n if (load)\r\n return load;\r\n\r\n var importerSetters = [];\r\n var ns = Object.create(null);\r\n if (toStringTag)\r\n Object.defineProperty(ns, toStringTag, { value: 'Module' });\r\n\r\n var instantiatePromise = Promise.resolve()\r\n .then(function () {\r\n return loader.instantiate(id, firstParentUrl);\r\n })\r\n .then(function (registration) {\r\n if (!registration)\r\n throw Error(errMsg(2, id ));\r\n function _export (name, value) {\r\n // note if we have hoisted exports (including reexports)\r\n load.h = true;\r\n var changed = false;\r\n if (typeof name === 'string') {\r\n if (!(name in ns) || ns[name] !== value) {\r\n ns[name] = value;\r\n changed = true;\r\n }\r\n }\r\n else {\r\n for (var p in name) {\r\n var value = name[p];\r\n if (!(p in ns) || ns[p] !== value) {\r\n ns[p] = value;\r\n changed = true;\r\n }\r\n }\r\n\r\n if (name && name.__esModule) {\r\n ns.__esModule = name.__esModule;\r\n }\r\n }\r\n if (changed)\r\n for (var i = 0; i < importerSetters.length; i++) {\r\n var setter = importerSetters[i];\r\n if (setter) setter(ns);\r\n }\r\n return value;\r\n }\r\n var declared = registration[1](_export, registration[1].length === 2 ? {\r\n import: function (importId) {\r\n return loader.import(importId, id);\r\n },\r\n meta: loader.createContext(id)\r\n } : undefined);\r\n load.e = declared.execute || function () {};\r\n return [registration[0], declared.setters || []];\r\n }, function (err) {\r\n load.e = null;\r\n load.er = err;\r\n throw err;\r\n });\r\n\r\n var linkPromise = instantiatePromise\r\n .then(function (instantiation) {\r\n return Promise.all(instantiation[0].map(function (dep, i) {\r\n var setter = instantiation[1][i];\r\n return Promise.resolve(loader.resolve(dep, id))\r\n .then(function (depId) {\r\n var depLoad = getOrCreateLoad(loader, depId, id);\r\n // depLoad.I may be undefined for already-evaluated\r\n return Promise.resolve(depLoad.I)\r\n .then(function () {\r\n if (setter) {\r\n depLoad.i.push(setter);\r\n // only run early setters when there are hoisted exports of that module\r\n // the timing works here as pending hoisted export calls will trigger through importerSetters\r\n if (depLoad.h || !depLoad.I)\r\n setter(depLoad.n);\r\n }\r\n return depLoad;\r\n });\r\n });\r\n }))\r\n .then(function (depLoads) {\r\n load.d = depLoads;\r\n });\r\n });\r\n\r\n // Capital letter = a promise function\r\n return load = loader[REGISTRY][id] = {\r\n id: id,\r\n // importerSetters, the setters functions registered to this dependency\r\n // we retain this to add more later\r\n i: importerSetters,\r\n // module namespace object\r\n n: ns,\r\n\r\n // instantiate\r\n I: instantiatePromise,\r\n // link\r\n L: linkPromise,\r\n // whether it has hoisted exports\r\n h: false,\r\n\r\n // On instantiate completion we have populated:\r\n // dependency load records\r\n d: undefined,\r\n // execution function\r\n e: undefined,\r\n\r\n // On execution we have populated:\r\n // the execution error if any\r\n er: undefined,\r\n // in the case of TLA, the execution promise\r\n E: undefined,\r\n\r\n // On execution, L, I, E cleared\r\n\r\n // Promise for top-level completion\r\n C: undefined,\r\n\r\n // parent instantiator / executor\r\n p: undefined\r\n };\r\n }\r\n\r\n function instantiateAll (loader, load, parent, loaded) {\r\n if (!loaded[load.id]) {\r\n loaded[load.id] = true;\r\n // load.L may be undefined for already-instantiated\r\n return Promise.resolve(load.L)\r\n .then(function () {\r\n if (!load.p || load.p.e === null)\r\n load.p = parent;\r\n return Promise.all(load.d.map(function (dep) {\r\n return instantiateAll(loader, dep, parent, loaded);\r\n }));\r\n })\r\n .catch(function (err) {\r\n if (load.er)\r\n throw err;\r\n load.e = null;\r\n throw err;\r\n });\r\n }\r\n }\r\n\r\n function topLevelLoad (loader, load) {\r\n return load.C = instantiateAll(loader, load, load, {})\r\n .then(function () {\r\n return postOrderExec(loader, load, {});\r\n })\r\n .then(function () {\r\n return load.n;\r\n });\r\n }\r\n\r\n // the closest we can get to call(undefined)\r\n var nullContext = Object.freeze(Object.create(null));\r\n\r\n // returns a promise if and only if a top-level await subgraph\r\n // throws on sync errors\r\n function postOrderExec (loader, load, seen) {\r\n if (seen[load.id])\r\n return;\r\n seen[load.id] = true;\r\n\r\n if (!load.e) {\r\n if (load.er)\r\n throw load.er;\r\n if (load.E)\r\n return load.E;\r\n return;\r\n }\r\n\r\n // deps execute first, unless circular\r\n var depLoadPromises;\r\n load.d.forEach(function (depLoad) {\r\n try {\r\n var depLoadPromise = postOrderExec(loader, depLoad, seen);\r\n if (depLoadPromise)\r\n (depLoadPromises = depLoadPromises || []).push(depLoadPromise);\r\n }\r\n catch (err) {\r\n load.e = null;\r\n load.er = err;\r\n throw err;\r\n }\r\n });\r\n if (depLoadPromises)\r\n return Promise.all(depLoadPromises).then(doExec);\r\n\r\n return doExec();\r\n\r\n function doExec () {\r\n try {\r\n var execPromise = load.e.call(nullContext);\r\n if (execPromise) {\r\n execPromise = execPromise.then(function () {\r\n load.C = load.n;\r\n load.E = null; // indicates completion\r\n if (!true) ;\r\n }, function (err) {\r\n load.er = err;\r\n load.E = null;\r\n if (!true) ;\r\n throw err;\r\n });\r\n return load.E = execPromise;\r\n }\r\n // (should be a promise, but a minify optimization to leave out Promise.resolve)\r\n load.C = load.n;\r\n load.L = load.I = undefined;\r\n }\r\n catch (err) {\r\n load.er = err;\r\n throw err;\r\n }\r\n finally {\r\n load.e = null;\r\n }\r\n }\r\n }\r\n\r\n envGlobal.System = new SystemJS();\r\n\r\n /*\r\n * SystemJS browser attachments for script and import map processing\r\n */\r\n\r\n var importMapPromise = Promise.resolve();\r\n var importMap = { imports: {}, scopes: {}, depcache: {}, integrity: {} };\r\n\r\n // Scripts are processed immediately, on the first System.import, and on DOMReady.\r\n // Import map scripts are processed only once (by being marked) and in order for each phase.\r\n // This is to avoid using DOM mutation observers in core, although that would be an alternative.\r\n var processFirst = hasDocument;\r\n systemJSPrototype.prepareImport = function (doProcessScripts) {\r\n if (processFirst || doProcessScripts) {\r\n processScripts();\r\n processFirst = false;\r\n }\r\n return importMapPromise;\r\n };\r\n if (hasDocument) {\r\n processScripts();\r\n window.addEventListener('DOMContentLoaded', processScripts);\r\n }\r\n\r\n function processScripts () {\r\n [].forEach.call(document.querySelectorAll('script'), function (script) {\r\n if (script.sp) // sp marker = systemjs processed\r\n return;\r\n // TODO: deprecate systemjs-module in next major now that we have auto import\r\n if (script.type === 'systemjs-module') {\r\n script.sp = true;\r\n if (!script.src)\r\n return;\r\n System.import(script.src.slice(0, 7) === 'import:' ? script.src.slice(7) : resolveUrl(script.src, baseUrl)).catch(function (e) {\r\n // if there is a script load error, dispatch an \"error\" event\r\n // on the script tag.\r\n if (e.message.indexOf('https://git.io/JvFET#3') > -1) {\r\n var event = document.createEvent('Event');\r\n event.initEvent('error', false, false);\r\n script.dispatchEvent(event);\r\n }\r\n return Promise.reject(e);\r\n });\r\n }\r\n else if (script.type === 'systemjs-importmap') {\r\n script.sp = true;\r\n var fetchPromise = script.src ? fetch(script.src, { integrity: script.integrity }).then(function (res) {\r\n if (!res.ok)\r\n throw Error( res.status );\r\n return res.text();\r\n }).catch(function (err) {\r\n err.message = errMsg('W4', script.src ) + '\\n' + err.message;\r\n console.warn(err);\r\n if (typeof script.onerror === 'function') {\r\n script.onerror();\r\n }\r\n return '{}';\r\n }) : script.innerHTML;\r\n importMapPromise = importMapPromise.then(function () {\r\n return fetchPromise;\r\n }).then(function (text) {\r\n extendImportMap(importMap, text, script.src || baseUrl);\r\n });\r\n }\r\n });\r\n }\r\n\r\n function extendImportMap (importMap, newMapText, newMapUrl) {\r\n var newMap = {};\r\n try {\r\n newMap = JSON.parse(newMapText);\r\n } catch (err) {\r\n console.warn(Error(( errMsg('W5') )));\r\n }\r\n resolveAndComposeImportMap(newMap, newMapUrl, importMap);\r\n }\r\n\r\n /*\r\n * Script instantiation loading\r\n */\r\n\r\n if (hasDocument) {\r\n window.addEventListener('error', function (evt) {\r\n lastWindowErrorUrl = evt.filename;\r\n lastWindowError = evt.error;\r\n });\r\n var baseOrigin = location.origin;\r\n }\r\n\r\n systemJSPrototype.createScript = function (url) {\r\n var script = document.createElement('script');\r\n script.async = true;\r\n // Only add cross origin for actual cross origin\r\n // this is because Safari triggers for all\r\n // - https://bugs.webkit.org/show_bug.cgi?id=171566\r\n if (url.indexOf(baseOrigin + '/'))\r\n script.crossOrigin = 'anonymous';\r\n var integrity = importMap.integrity[url];\r\n if (integrity)\r\n script.integrity = integrity;\r\n script.src = url;\r\n return script;\r\n };\r\n\r\n // Auto imports -> script tags can be inlined directly for load phase\r\n var lastAutoImportDeps, lastAutoImportTimeout;\r\n var autoImportCandidates = {};\r\n var systemRegister = systemJSPrototype.register;\r\n var inlineScriptCount = 0;\r\n systemJSPrototype.register = function (deps, declare) {\r\n if (hasDocument && document.readyState === 'loading' && typeof deps !== 'string') {\r\n var scripts = document.querySelectorAll('script[src]');\r\n var lastScript = scripts[scripts.length - 1];\r\n var lastAutoImportUrl\r\n lastAutoImportDeps = deps;\r\n if (lastScript) {\r\n lastAutoImportUrl = lastScript.src;\r\n }\r\n else {\r\n inlineScriptCount++\r\n lastAutoImportUrl = document.location.href + \"__inline_script__\" + inlineScriptCount;\r\n }\r\n // if this is already a System load, then the instantiate has already begun\r\n // so this re-import has no consequence\r\n var loader = this;\r\n lastAutoImportTimeout = setTimeout(function () {\r\n autoImportCandidates[lastAutoImportUrl] = [deps, declare];\r\n loader.import(lastAutoImportUrl);\r\n });\r\n }\r\n else {\r\n lastAutoImportDeps = undefined;\r\n }\r\n return systemRegister.call(this, deps, declare);\r\n };\r\n\r\n var lastWindowErrorUrl, lastWindowError;\r\n systemJSPrototype.instantiate = function (url, firstParentUrl) {\r\n var autoImportRegistration = autoImportCandidates[url];\r\n if (autoImportRegistration) {\r\n delete autoImportCandidates[url];\r\n return autoImportRegistration;\r\n }\r\n var loader = this;\r\n return Promise.resolve(systemJSPrototype.createScript(url)).then(function (script) {\r\n return new Promise(function (resolve, reject) {\r\n script.addEventListener('error', function () {\r\n reject(Error(errMsg(3, [url, firstParentUrl].join(', ') )));\r\n });\r\n script.addEventListener('load', function () {\r\n document.head.removeChild(script);\r\n // Note that if an error occurs that isn't caught by this if statement,\r\n // that getRegister will return null and a \"did not instantiate\" error will be thrown.\r\n if (lastWindowErrorUrl === url) {\r\n reject(lastWindowError);\r\n }\r\n else {\r\n var register = loader.getRegister(url);\r\n // Clear any auto import registration for dynamic import scripts during load\r\n if (register && register[0] === lastAutoImportDeps)\r\n clearTimeout(lastAutoImportTimeout);\r\n resolve(register);\r\n }\r\n });\r\n document.head.appendChild(script);\r\n });\r\n });\r\n };\r\n\r\n /*\r\n * Fetch loader, sets up shouldFetch and fetch hooks\r\n */\r\n systemJSPrototype.shouldFetch = function () {\r\n return false;\r\n };\r\n if (typeof fetch !== 'undefined')\r\n systemJSPrototype.fetch = fetch;\r\n\r\n var instantiate = systemJSPrototype.instantiate;\r\n var jsContentTypeRegEx = /^(text|application)\\/(x-)?javascript(;|$)/;\r\n systemJSPrototype.instantiate = function (url, parent) {\r\n var loader = this;\r\n if (!this.shouldFetch(url))\r\n return instantiate.apply(this, arguments);\r\n return this.fetch(url, {\r\n credentials: 'same-origin',\r\n integrity: importMap.integrity[url]\r\n })\r\n .then(function (res) {\r\n if (!res.ok)\r\n throw Error(errMsg(7, [res.status, res.statusText, url, parent].join(', ') ));\r\n var contentType = res.headers.get('content-type');\r\n if (!contentType || !jsContentTypeRegEx.test(contentType))\r\n throw Error(errMsg(4, contentType ));\r\n return res.text().then(function (source) {\r\n if (source.indexOf('//# sourceURL=') < 0)\r\n source += '\\n//# sourceURL=' + url;\r\n (0, eval)(source);\r\n return loader.getRegister(url);\r\n });\r\n });\r\n };\r\n\r\n systemJSPrototype.resolve = function (id, parentUrl) {\r\n parentUrl = parentUrl || !true || baseUrl;\r\n return resolveImportMap(( importMap), resolveIfNotPlainOrUrl(id, parentUrl) || id, parentUrl) || throwUnresolved(id, parentUrl);\r\n };\r\n\r\n function throwUnresolved (id, parentUrl) {\r\n throw Error(errMsg(8, [id, parentUrl].join(', ') ));\r\n }\r\n\r\n var systemInstantiate = systemJSPrototype.instantiate;\r\n systemJSPrototype.instantiate = function (url, firstParentUrl) {\r\n var preloads = ( importMap).depcache[url];\r\n if (preloads) {\r\n for (var i = 0; i < preloads.length; i++)\r\n getOrCreateLoad(this, this.resolve(preloads[i], url), url);\r\n }\r\n return systemInstantiate.call(this, url, firstParentUrl);\r\n };\r\n\r\n /*\r\n * Supports loading System.register in workers\r\n */\r\n\r\n if (hasSelf && typeof importScripts === 'function')\r\n systemJSPrototype.instantiate = function (url) {\r\n var loader = this;\r\n return Promise.resolve().then(function () {\r\n importScripts(url);\r\n return loader.getRegister(url);\r\n });\r\n };\r\n\r\n}());",
|
|
103
|
+
"/*\n* SJS 6.11.0\n* Minimal SystemJS Build\n*/\n(function () {\n\n function errMsg(errCode, msg) {\n return (msg || \"\") + \" (SystemJS https://git.io/JvFET#\" + errCode + \")\";\n }\n\n var hasSymbol = typeof Symbol !== 'undefined';\n var hasSelf = typeof self !== 'undefined';\n var hasDocument = typeof document !== 'undefined';\n\n var envGlobal = hasSelf ? self : global;\n\n var baseUrl;\n\n if (hasDocument) {\n var baseEl = document.querySelector('base[href]');\n if (baseEl)\n baseUrl = baseEl.href;\n }\n\n if (!baseUrl && typeof location !== 'undefined') {\n baseUrl = location.href.split('#')[0].split('?')[0];\n var lastSepIndex = baseUrl.lastIndexOf('/');\n if (lastSepIndex !== -1)\n baseUrl = baseUrl.slice(0, lastSepIndex + 1);\n }\n\n var backslashRegEx = /\\\\/g;\n function resolveIfNotPlainOrUrl (relUrl, parentUrl) {\n if (relUrl.indexOf('\\\\') !== -1)\n relUrl = relUrl.replace(backslashRegEx, '/');\n // protocol-relative\n if (relUrl[0] === '/' && relUrl[1] === '/') {\n return parentUrl.slice(0, parentUrl.indexOf(':') + 1) + relUrl;\n }\n // relative-url\n else if (relUrl[0] === '.' && (relUrl[1] === '/' || relUrl[1] === '.' && (relUrl[2] === '/' || relUrl.length === 2 && (relUrl += '/')) ||\n relUrl.length === 1 && (relUrl += '/')) ||\n relUrl[0] === '/') {\n var parentProtocol = parentUrl.slice(0, parentUrl.indexOf(':') + 1);\n // Disabled, but these cases will give inconsistent results for deep backtracking\n //if (parentUrl[parentProtocol.length] !== '/')\n // throw Error('Cannot resolve');\n // read pathname from parent URL\n // pathname taken to be part after leading \"/\"\n var pathname;\n if (parentUrl[parentProtocol.length + 1] === '/') {\n // resolving to a :// so we need to read out the auth and host\n if (parentProtocol !== 'file:') {\n pathname = parentUrl.slice(parentProtocol.length + 2);\n pathname = pathname.slice(pathname.indexOf('/') + 1);\n }\n else {\n pathname = parentUrl.slice(8);\n }\n }\n else {\n // resolving to :/ so pathname is the /... part\n pathname = parentUrl.slice(parentProtocol.length + (parentUrl[parentProtocol.length] === '/'));\n }\n\n if (relUrl[0] === '/')\n return parentUrl.slice(0, parentUrl.length - pathname.length - 1) + relUrl;\n\n // join together and split for removal of .. and . segments\n // looping the string instead of anything fancy for perf reasons\n // '../../../../../z' resolved to 'x/y' is just 'z'\n var segmented = pathname.slice(0, pathname.lastIndexOf('/') + 1) + relUrl;\n\n var output = [];\n var segmentIndex = -1;\n for (var i = 0; i < segmented.length; i++) {\n // busy reading a segment - only terminate on '/'\n if (segmentIndex !== -1) {\n if (segmented[i] === '/') {\n output.push(segmented.slice(segmentIndex, i + 1));\n segmentIndex = -1;\n }\n }\n\n // new segment - check if it is relative\n else if (segmented[i] === '.') {\n // ../ segment\n if (segmented[i + 1] === '.' && (segmented[i + 2] === '/' || i + 2 === segmented.length)) {\n output.pop();\n i += 2;\n }\n // ./ segment\n else if (segmented[i + 1] === '/' || i + 1 === segmented.length) {\n i += 1;\n }\n else {\n // the start of a new segment as below\n segmentIndex = i;\n }\n }\n // it is the start of a new segment\n else {\n segmentIndex = i;\n }\n }\n // finish reading out the last segment\n if (segmentIndex !== -1)\n output.push(segmented.slice(segmentIndex));\n return parentUrl.slice(0, parentUrl.length - pathname.length) + output.join('');\n }\n }\n\n /*\n * Import maps implementation\n *\n * To make lookups fast we pre-resolve the entire import map\n * and then match based on backtracked hash lookups\n *\n */\n\n function resolveUrl (relUrl, parentUrl) {\n return resolveIfNotPlainOrUrl(relUrl, parentUrl) || (relUrl.indexOf(':') !== -1 ? relUrl : resolveIfNotPlainOrUrl('./' + relUrl, parentUrl));\n }\n\n function resolveAndComposePackages (packages, outPackages, baseUrl, parentMap, parentUrl) {\n for (var p in packages) {\n var resolvedLhs = resolveIfNotPlainOrUrl(p, baseUrl) || p;\n var rhs = packages[p];\n // package fallbacks not currently supported\n if (typeof rhs !== 'string')\n continue;\n var mapped = resolveImportMap(parentMap, resolveIfNotPlainOrUrl(rhs, baseUrl) || rhs, parentUrl);\n if (!mapped) {\n targetWarning('W1', p, rhs);\n }\n else\n outPackages[resolvedLhs] = mapped;\n }\n }\n\n function resolveAndComposeImportMap (json, baseUrl, outMap) {\n if (json.imports)\n resolveAndComposePackages(json.imports, outMap.imports, baseUrl, outMap, null);\n\n var u;\n for (u in json.scopes || {}) {\n var resolvedScope = resolveUrl(u, baseUrl);\n resolveAndComposePackages(json.scopes[u], outMap.scopes[resolvedScope] || (outMap.scopes[resolvedScope] = {}), baseUrl, outMap, resolvedScope);\n }\n\n for (u in json.depcache || {})\n outMap.depcache[resolveUrl(u, baseUrl)] = json.depcache[u];\n\n for (u in json.integrity || {})\n outMap.integrity[resolveUrl(u, baseUrl)] = json.integrity[u];\n }\n\n function getMatch (path, matchObj) {\n if (matchObj[path])\n return path;\n var sepIndex = path.length;\n do {\n var segment = path.slice(0, sepIndex + 1);\n if (segment in matchObj)\n return segment;\n } while ((sepIndex = path.lastIndexOf('/', sepIndex - 1)) !== -1)\n }\n\n function applyPackages (id, packages) {\n var pkgName = getMatch(id, packages);\n if (pkgName) {\n var pkg = packages[pkgName];\n if (pkg === null) return;\n if (id.length > pkgName.length && pkg[pkg.length - 1] !== '/') {\n targetWarning('W2', pkgName, pkg);\n }\n else\n return pkg + id.slice(pkgName.length);\n }\n }\n\n function targetWarning (code, match, target, msg) {\n console.warn(errMsg(code, [target, match].join(', ') ));\n }\n\n function resolveImportMap (importMap, resolvedOrPlain, parentUrl) {\n var scopes = importMap.scopes;\n var scopeUrl = parentUrl && getMatch(parentUrl, scopes);\n while (scopeUrl) {\n var packageResolution = applyPackages(resolvedOrPlain, scopes[scopeUrl]);\n if (packageResolution)\n return packageResolution;\n scopeUrl = getMatch(scopeUrl.slice(0, scopeUrl.lastIndexOf('/')), scopes);\n }\n return applyPackages(resolvedOrPlain, importMap.imports) || resolvedOrPlain.indexOf(':') !== -1 && resolvedOrPlain;\n }\n\n /*\n * SystemJS Core\n *\n * Provides\n * - System.import\n * - System.register support for\n * live bindings, function hoisting through circular references,\n * reexports, dynamic import, import.meta.url, top-level await\n * - System.getRegister to get the registration\n * - Symbol.toStringTag support in Module objects\n * - Hookable System.createContext to customize import.meta\n * - System.onload(err, id, deps) handler for tracing / hot-reloading\n *\n * Core comes with no System.prototype.resolve or\n * System.prototype.instantiate implementations\n */\n\n var toStringTag = hasSymbol && Symbol.toStringTag;\n var REGISTRY = hasSymbol ? Symbol() : '@';\n\n function SystemJS () {\n this[REGISTRY] = {};\n }\n\n var systemJSPrototype = SystemJS.prototype;\n\n systemJSPrototype.import = function (id, parentUrl) {\n var loader = this;\n return Promise.resolve(loader.prepareImport())\n .then(function() {\n return loader.resolve(id, parentUrl);\n })\n .then(function (id) {\n var load = getOrCreateLoad(loader, id);\n return load.C || topLevelLoad(loader, load);\n });\n };\n\n // Hookable createContext function -> allowing eg custom import meta\n systemJSPrototype.createContext = function (parentId) {\n var loader = this;\n return {\n url: parentId,\n resolve: function (id, parentUrl) {\n return Promise.resolve(loader.resolve(id, parentUrl || parentId));\n }\n };\n };\n function loadToId (load) {\n return load.id;\n }\n function triggerOnload (loader, load, err, isErrSource) {\n loader.onload(err, load.id, load.d && load.d.map(loadToId), !!isErrSource);\n if (err)\n throw err;\n }\n\n var lastRegister;\n systemJSPrototype.register = function (deps, declare) {\n lastRegister = [deps, declare];\n };\n\n /*\n * getRegister provides the last anonymous System.register call\n */\n systemJSPrototype.getRegister = function () {\n var _lastRegister = lastRegister;\n lastRegister = undefined;\n return _lastRegister;\n };\n\n function getOrCreateLoad (loader, id, firstParentUrl) {\n var load = loader[REGISTRY][id];\n if (load)\n return load;\n\n var importerSetters = [];\n var ns = Object.create(null);\n if (toStringTag)\n Object.defineProperty(ns, toStringTag, { value: 'Module' });\n\n var instantiatePromise = Promise.resolve()\n .then(function () {\n return loader.instantiate(id, firstParentUrl);\n })\n .then(function (registration) {\n if (!registration)\n throw Error(errMsg(2, id ));\n function _export (name, value) {\n // note if we have hoisted exports (including reexports)\n load.h = true;\n var changed = false;\n if (typeof name === 'string') {\n if (!(name in ns) || ns[name] !== value) {\n ns[name] = value;\n changed = true;\n }\n }\n else {\n for (var p in name) {\n var value = name[p];\n if (!(p in ns) || ns[p] !== value) {\n ns[p] = value;\n changed = true;\n }\n }\n\n if (name && name.__esModule) {\n ns.__esModule = name.__esModule;\n }\n }\n if (changed)\n for (var i = 0; i < importerSetters.length; i++) {\n var setter = importerSetters[i];\n if (setter) setter(ns);\n }\n return value;\n }\n var declared = registration[1](_export, registration[1].length === 2 ? {\n import: function (importId) {\n return loader.import(importId, id);\n },\n meta: loader.createContext(id)\n } : undefined);\n load.e = declared.execute || function () {};\n return [registration[0], declared.setters || []];\n }, function (err) {\n load.e = null;\n load.er = err;\n throw err;\n });\n\n var linkPromise = instantiatePromise\n .then(function (instantiation) {\n return Promise.all(instantiation[0].map(function (dep, i) {\n var setter = instantiation[1][i];\n return Promise.resolve(loader.resolve(dep, id))\n .then(function (depId) {\n var depLoad = getOrCreateLoad(loader, depId, id);\n // depLoad.I may be undefined for already-evaluated\n return Promise.resolve(depLoad.I)\n .then(function () {\n if (setter) {\n depLoad.i.push(setter);\n // only run early setters when there are hoisted exports of that module\n // the timing works here as pending hoisted export calls will trigger through importerSetters\n if (depLoad.h || !depLoad.I)\n setter(depLoad.n);\n }\n return depLoad;\n });\n });\n }))\n .then(function (depLoads) {\n load.d = depLoads;\n });\n });\n\n // Capital letter = a promise function\n return load = loader[REGISTRY][id] = {\n id: id,\n // importerSetters, the setters functions registered to this dependency\n // we retain this to add more later\n i: importerSetters,\n // module namespace object\n n: ns,\n\n // instantiate\n I: instantiatePromise,\n // link\n L: linkPromise,\n // whether it has hoisted exports\n h: false,\n\n // On instantiate completion we have populated:\n // dependency load records\n d: undefined,\n // execution function\n e: undefined,\n\n // On execution we have populated:\n // the execution error if any\n er: undefined,\n // in the case of TLA, the execution promise\n E: undefined,\n\n // On execution, L, I, E cleared\n\n // Promise for top-level completion\n C: undefined,\n\n // parent instantiator / executor\n p: undefined\n };\n }\n\n function instantiateAll (loader, load, parent, loaded) {\n if (!loaded[load.id]) {\n loaded[load.id] = true;\n // load.L may be undefined for already-instantiated\n return Promise.resolve(load.L)\n .then(function () {\n if (!load.p || load.p.e === null)\n load.p = parent;\n return Promise.all(load.d.map(function (dep) {\n return instantiateAll(loader, dep, parent, loaded);\n }));\n })\n .catch(function (err) {\n if (load.er)\n throw err;\n load.e = null;\n throw err;\n });\n }\n }\n\n function topLevelLoad (loader, load) {\n return load.C = instantiateAll(loader, load, load, {})\n .then(function () {\n return postOrderExec(loader, load, {});\n })\n .then(function () {\n return load.n;\n });\n }\n\n // the closest we can get to call(undefined)\n var nullContext = Object.freeze(Object.create(null));\n\n // returns a promise if and only if a top-level await subgraph\n // throws on sync errors\n function postOrderExec (loader, load, seen) {\n if (seen[load.id])\n return;\n seen[load.id] = true;\n\n if (!load.e) {\n if (load.er)\n throw load.er;\n if (load.E)\n return load.E;\n return;\n }\n\n // deps execute first, unless circular\n var depLoadPromises;\n load.d.forEach(function (depLoad) {\n try {\n var depLoadPromise = postOrderExec(loader, depLoad, seen);\n if (depLoadPromise)\n (depLoadPromises = depLoadPromises || []).push(depLoadPromise);\n }\n catch (err) {\n load.e = null;\n load.er = err;\n throw err;\n }\n });\n if (depLoadPromises)\n return Promise.all(depLoadPromises).then(doExec);\n\n return doExec();\n\n function doExec () {\n try {\n var execPromise = load.e.call(nullContext);\n if (execPromise) {\n execPromise = execPromise.then(function () {\n load.C = load.n;\n load.E = null; // indicates completion\n if (!true) ;\n }, function (err) {\n load.er = err;\n load.E = null;\n if (!true) ;\n throw err;\n });\n return load.E = execPromise;\n }\n // (should be a promise, but a minify optimization to leave out Promise.resolve)\n load.C = load.n;\n load.L = load.I = undefined;\n }\n catch (err) {\n load.er = err;\n throw err;\n }\n finally {\n load.e = null;\n }\n }\n }\n\n envGlobal.System = new SystemJS();\n\n /*\n * SystemJS browser attachments for script and import map processing\n */\n\n var importMapPromise = Promise.resolve();\n var importMap = { imports: {}, scopes: {}, depcache: {}, integrity: {} };\n\n // Scripts are processed immediately, on the first System.import, and on DOMReady.\n // Import map scripts are processed only once (by being marked) and in order for each phase.\n // This is to avoid using DOM mutation observers in core, although that would be an alternative.\n var processFirst = hasDocument;\n systemJSPrototype.prepareImport = function (doProcessScripts) {\n if (processFirst || doProcessScripts) {\n processScripts();\n processFirst = false;\n }\n return importMapPromise;\n };\n if (hasDocument) {\n processScripts();\n window.addEventListener('DOMContentLoaded', processScripts);\n }\n\n function processScripts () {\n [].forEach.call(document.querySelectorAll('script'), function (script) {\n if (script.sp) // sp marker = systemjs processed\n return;\n // TODO: deprecate systemjs-module in next major now that we have auto import\n if (script.type === 'systemjs-module') {\n script.sp = true;\n if (!script.src)\n return;\n System.import(script.src.slice(0, 7) === 'import:' ? script.src.slice(7) : resolveUrl(script.src, baseUrl)).catch(function (e) {\n // if there is a script load error, dispatch an \"error\" event\n // on the script tag.\n if (e.message.indexOf('https://git.io/JvFET#3') > -1) {\n var event = document.createEvent('Event');\n event.initEvent('error', false, false);\n script.dispatchEvent(event);\n }\n return Promise.reject(e);\n });\n }\n else if (script.type === 'systemjs-importmap') {\n script.sp = true;\n var fetchPromise = script.src ? fetch(script.src, { integrity: script.integrity }).then(function (res) {\n if (!res.ok)\n throw Error( res.status );\n return res.text();\n }).catch(function (err) {\n err.message = errMsg('W4', script.src ) + '\\n' + err.message;\n console.warn(err);\n if (typeof script.onerror === 'function') {\n script.onerror();\n }\n return '{}';\n }) : script.innerHTML;\n importMapPromise = importMapPromise.then(function () {\n return fetchPromise;\n }).then(function (text) {\n extendImportMap(importMap, text, script.src || baseUrl);\n });\n }\n });\n }\n\n function extendImportMap (importMap, newMapText, newMapUrl) {\n var newMap = {};\n try {\n newMap = JSON.parse(newMapText);\n } catch (err) {\n console.warn(Error(( errMsg('W5') )));\n }\n resolveAndComposeImportMap(newMap, newMapUrl, importMap);\n }\n\n /*\n * Script instantiation loading\n */\n\n if (hasDocument) {\n window.addEventListener('error', function (evt) {\n lastWindowErrorUrl = evt.filename;\n lastWindowError = evt.error;\n });\n var baseOrigin = location.origin;\n }\n\n systemJSPrototype.createScript = function (url) {\n var script = document.createElement('script');\n script.async = true;\n // Only add cross origin for actual cross origin\n // this is because Safari triggers for all\n // - https://bugs.webkit.org/show_bug.cgi?id=171566\n if (url.indexOf(baseOrigin + '/'))\n script.crossOrigin = 'anonymous';\n var integrity = importMap.integrity[url];\n if (integrity)\n script.integrity = integrity;\n script.src = url;\n return script;\n };\n\n // Auto imports -> script tags can be inlined directly for load phase\n var lastAutoImportDeps, lastAutoImportTimeout;\n var autoImportCandidates = {};\n var systemRegister = systemJSPrototype.register;\n var inlineScriptCount = 0;\n systemJSPrototype.register = function (deps, declare) {\n if (hasDocument && document.readyState === 'loading' && typeof deps !== 'string') {\n var scripts = document.querySelectorAll('script[src]');\n var lastScript = scripts[scripts.length - 1];\n var lastAutoImportUrl\n lastAutoImportDeps = deps;\n if (lastScript) {\n lastAutoImportUrl = lastScript.src;\n }\n else {\n inlineScriptCount++\n lastAutoImportUrl = document.location.href + \"__inline_script__\" + inlineScriptCount;\n }\n // if this is already a System load, then the instantiate has already begun\n // so this re-import has no consequence\n var loader = this;\n lastAutoImportTimeout = setTimeout(function () {\n autoImportCandidates[lastAutoImportUrl] = [deps, declare];\n loader.import(lastAutoImportUrl);\n });\n }\n else {\n lastAutoImportDeps = undefined;\n }\n return systemRegister.call(this, deps, declare);\n };\n\n var lastWindowErrorUrl, lastWindowError;\n systemJSPrototype.instantiate = function (url, firstParentUrl) {\n var autoImportRegistration = autoImportCandidates[url];\n if (autoImportRegistration) {\n delete autoImportCandidates[url];\n return autoImportRegistration;\n }\n var loader = this;\n return Promise.resolve(systemJSPrototype.createScript(url)).then(function (script) {\n return new Promise(function (resolve, reject) {\n script.addEventListener('error', function () {\n reject(Error(errMsg(3, [url, firstParentUrl].join(', ') )));\n });\n script.addEventListener('load', function () {\n document.head.removeChild(script);\n // Note that if an error occurs that isn't caught by this if statement,\n // that getRegister will return null and a \"did not instantiate\" error will be thrown.\n if (lastWindowErrorUrl === url) {\n reject(lastWindowError);\n }\n else {\n var register = loader.getRegister(url);\n // Clear any auto import registration for dynamic import scripts during load\n if (register && register[0] === lastAutoImportDeps)\n clearTimeout(lastAutoImportTimeout);\n resolve(register);\n }\n });\n document.head.appendChild(script);\n });\n });\n };\n\n /*\n * Fetch loader, sets up shouldFetch and fetch hooks\n */\n systemJSPrototype.shouldFetch = function () {\n return false;\n };\n if (typeof fetch !== 'undefined')\n systemJSPrototype.fetch = fetch;\n\n var instantiate = systemJSPrototype.instantiate;\n var jsContentTypeRegEx = /^(text|application)\\/(x-)?javascript(;|$)/;\n systemJSPrototype.instantiate = function (url, parent) {\n var loader = this;\n if (!this.shouldFetch(url))\n return instantiate.apply(this, arguments);\n return this.fetch(url, {\n credentials: 'same-origin',\n integrity: importMap.integrity[url]\n })\n .then(function (res) {\n if (!res.ok)\n throw Error(errMsg(7, [res.status, res.statusText, url, parent].join(', ') ));\n var contentType = res.headers.get('content-type');\n if (!contentType || !jsContentTypeRegEx.test(contentType))\n throw Error(errMsg(4, contentType ));\n return res.text().then(function (source) {\n if (source.indexOf('//# sourceURL=') < 0)\n source += '\\n//# sourceURL=' + url;\n (0, eval)(source);\n return loader.getRegister(url);\n });\n });\n };\n\n systemJSPrototype.resolve = function (id, parentUrl) {\n parentUrl = parentUrl || !true || baseUrl;\n return resolveImportMap(( importMap), resolveIfNotPlainOrUrl(id, parentUrl) || id, parentUrl) || throwUnresolved(id, parentUrl);\n };\n\n function throwUnresolved (id, parentUrl) {\n throw Error(errMsg(8, [id, parentUrl].join(', ') ));\n }\n\n var systemInstantiate = systemJSPrototype.instantiate;\n systemJSPrototype.instantiate = function (url, firstParentUrl) {\n var preloads = ( importMap).depcache[url];\n if (preloads) {\n for (var i = 0; i < preloads.length; i++)\n getOrCreateLoad(this, this.resolve(preloads[i], url), url);\n }\n return systemInstantiate.call(this, url, firstParentUrl);\n };\n\n /*\n * Supports loading System.register in workers\n */\n\n if (hasSelf && typeof importScripts === 'function')\n systemJSPrototype.instantiate = function (url) {\n var loader = this;\n return Promise.resolve().then(function () {\n importScripts(url);\n return loader.getRegister(url);\n });\n };\n\n}());",
|
|
104
104
|
"import { getJavaScriptModuleResponseError } from \"../module-registration.js\"\n\nimport \"../s.js\"\n\nexport const createBrowserSystem = ({\n compileServerOrigin,\n compileDirectoryRelativeUrl,\n importResolver,\n fetchSource,\n}) => {\n if (typeof window.System === \"undefined\") {\n throw new Error(`window.System is undefined`)\n }\n\n const browserSystem = window.System\n\n const resolve = (specifier, importer = document.location.href) => {\n return importResolver.resolveImport(specifier, importer)\n }\n\n browserSystem.resolve = resolve\n\n const instantiate = browserSystem.instantiate\n browserSystem.instantiate = async function (url, importerUrl) {\n const { importType, urlWithoutImportType } = extractImportTypeFromUrl(url)\n if (importType === \"json\") {\n const jsonModule = await instantiateAsJsonModule(urlWithoutImportType, {\n browserSystem,\n fetchSource,\n })\n return jsonModule\n }\n\n if (importType === \"css\") {\n const cssModule = await instantiateAsCssModule(urlWithoutImportType, {\n browserSystem,\n importerUrl,\n compileDirectoryRelativeUrl,\n fetchSource,\n })\n return cssModule\n }\n\n try {\n const registration = await instantiate.call(this, url, importerUrl)\n if (!registration) {\n throw new Error(\n `no registration found for JS at ${url}\n--- importer url ---\n${importerUrl}\n--- navigator.vendor ---\n${window.navigator.vendor}`,\n )\n }\n return registration\n } catch (e) {\n const jsenvError = await createDetailedInstantiateError({\n instantiateError: e,\n url,\n importerUrl,\n compileServerOrigin,\n compileDirectoryRelativeUrl,\n fetchSource,\n })\n throw jsenvError\n }\n }\n\n browserSystem.createContext = (importerUrl) => {\n return {\n url: importerUrl,\n resolve: (specifier) => resolve(specifier, importerUrl),\n }\n }\n\n return browserSystem\n}\n\nconst extractImportTypeFromUrl = (url) => {\n const urlObject = new URL(url)\n const { search } = urlObject\n const searchParams = new URLSearchParams(search)\n\n const importType = searchParams.get(\"import_type\")\n if (!importType) {\n return {}\n }\n\n searchParams.delete(\"import_type\")\n urlObject.search = String(searchParams)\n return {\n importType,\n urlWithoutImportType: urlObject.href,\n }\n}\n\nconst instantiateAsJsonModule = async (url, { browserSystem, fetchSource }) => {\n const response = await fetchSource(url, {\n contentTypeExpected: \"application/json\",\n })\n const json = await response.json()\n browserSystem.register([], (_export) => {\n return {\n execute: () => {\n _export(\"default\", json)\n },\n }\n })\n const registration = browserSystem.getRegister(url)\n if (!registration) {\n throw new Error(\n `no registration found for JSON at ${url}. Navigator.vendor: ${window.navigator.vendor}. JSON text: ${json}`,\n )\n }\n return registration\n}\n\nconst instantiateAsCssModule = async (\n url,\n { importerUrl, compileDirectoryRelativeUrl, browserSystem, fetchSource },\n) => {\n const response = await fetchSource(url, {\n contentTypeExpected: \"text/css\",\n })\n\n // There is a logic inside \"toolbar.eventsource.js\" which is reloading\n // all link rel=\"stylesheet\" when file ending with \".css\" are modified\n // But here it would not work because we have to replace the css in\n // the adopted stylsheet + all module importing this css module\n // should be reinstantiated\n // -> store a livereload callback forcing whole page reload\n const compileDirectoryServerUrl = `${window.location.origin}/${compileDirectoryRelativeUrl}`\n const originalFileRelativeUrl = response.url.slice(\n compileDirectoryServerUrl.length,\n )\n window.__jsenv__.livereloadingCallbacks[originalFileRelativeUrl] = ({\n reloadPage,\n }) => {\n reloadPage()\n }\n\n const cssText = await response.text()\n const cssTextWithBaseUrl = cssWithBaseUrl({\n cssText,\n cssUrl: url,\n baseUrl: importerUrl,\n })\n\n browserSystem.register([], (_export) => {\n return {\n execute: () => {\n const sheet = new CSSStyleSheet()\n sheet.replaceSync(cssTextWithBaseUrl)\n _export(\"default\", sheet)\n },\n }\n })\n const registration = browserSystem.getRegister(url)\n if (!registration) {\n throw new Error(\n `no registration found for CSS at ${url}. Navigator.vendor: ${window.navigator.vendor}. CSS text: ${cssTextWithBaseUrl}`,\n )\n }\n return registration\n}\n\n// CSSStyleSheet accepts a \"baseUrl\" parameter\n// as documented in https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/CSSStyleSheet#parameters\n// Unfortunately the polyfill do not seems to implement it\n// So we reuse \"systemjs\" strategy from https://github.com/systemjs/systemjs/blob/98609dbeef01ec62447e4b21449ce47e55f818bd/src/extras/module-types.js#L37\nconst cssWithBaseUrl = ({ cssUrl, cssText, baseUrl }) => {\n const cssDirectoryUrl = new URL(\"./\", cssUrl).href\n const baseDirectoryUrl = new URL(\"./\", baseUrl).href\n if (cssDirectoryUrl === baseDirectoryUrl) {\n return cssText\n }\n\n const cssTextRelocated = cssText.replace(\n /url\\(\\s*(?:([\"'])((?:\\\\.|[^\\n\\\\\"'])+)\\1|((?:\\\\.|[^\\s,\"'()\\\\])+))\\s*\\)/g,\n (match, quotes, relUrl1, relUrl2) => {\n const absoluteUrl = new URL(relUrl1 || relUrl2, cssUrl).href\n return `url(${quotes}${absoluteUrl}${quotes})`\n },\n )\n return cssTextRelocated\n}\n\nconst createDetailedInstantiateError = async ({\n instantiateError,\n url,\n importerUrl,\n compileServerOrigin,\n compileDirectoryRelativeUrl,\n fetchSource,\n}) => {\n let response\n try {\n response = await fetchSource(url, {\n importerUrl,\n contentTypeExpected: \"application/javascript\",\n })\n } catch (e) {\n e.code = \"NETWORK_FAILURE\"\n return e\n }\n\n const jsModuleResponseError = await getJavaScriptModuleResponseError(\n response,\n {\n url,\n importerUrl,\n compileServerOrigin,\n compileDirectoryRelativeUrl,\n },\n )\n return jsModuleResponseError || instantiateError\n}\n",
|
|
105
105
|
"export const displayErrorInDocument = (error) => {\n const title = \"An error occured\"\n let theme\n let message\n\n if (error && error.parsingError) {\n theme = \"light\"\n const { parsingError } = error\n message = errorToHTML(\n parsingError.messageHTML || escapeHtml(parsingError.message),\n )\n } else {\n theme = \"dark\"\n message = errorToHTML(error)\n }\n\n const css = `\n .jsenv-console {\n background: rgba(0, 0, 0, 0.95);\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n z-index: 1000;\n box-sizing: border-box;\n padding: 1em;\n }\n\n .jsenv-console h1 {\n color: red;\n display: flex;\n align-items: center;\n }\n\n #button-close-jsenv-console {\n margin-left: 10px;\n }\n\n .jsenv-console pre {\n overflow: auto;\n max-width: 70em;\n /* avoid scrollbar to hide the text behind it */\n padding: 20px;\n }\n\n .jsenv-console pre[data-theme=\"dark\"] {\n background: #111;\n border: 1px solid #333;\n color: #eee;\n }\n\n .jsenv-console pre[data-theme=\"light\"] {\n background: #1E1E1E;\n border: 1px solid white;\n color: #EEEEEE;\n }\n\n .jsenv-console pre a {\n color: inherit;\n }\n `\n const html = `\n <style type=\"text/css\">${css}></style>\n <div class=\"jsenv-console\">\n <h1>${title} <button id=\"button-close-jsenv-console\">X</button></h1>\n <pre data-theme=\"${theme}\">${message}</pre>\n </div>\n `\n const removeJsenvConsole = appendHMTLInside(html, document.body)\n\n document.querySelector(\"#button-close-jsenv-console\").onclick = () => {\n removeJsenvConsole()\n }\n}\n\nconst escapeHtml = (string) => {\n return string\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\")\n}\n\nconst errorToHTML = (error) => {\n let html\n\n if (error && error instanceof Error) {\n // stackTrace formatted by V8\n if (Error.captureStackTrace) {\n html = escapeHtml(error.stack)\n } else {\n // other stack trace such as firefox do not contain error.message\n html = escapeHtml(`${error.message}\n ${error.stack}`)\n }\n } else if (typeof error === \"string\") {\n html = error\n } else {\n html = JSON.stringify(error)\n }\n\n const htmlWithCorrectLineBreaks = html.replace(/\\n/g, \"\\n\")\n const htmlWithLinks = stringToStringWithLink(htmlWithCorrectLineBreaks, {\n transform: (url) => {\n return { href: url, text: url }\n },\n })\n return htmlWithLinks\n}\n\n// `Error: yo\n// at Object.execute (http://127.0.0.1:57300/build/src/__test__/file-throw.js:9:13)\n// at doExec (http://127.0.0.1:3000/src/__test__/file-throw.js:452:38)\n// at postOrderExec (http://127.0.0.1:3000/src/__test__/file-throw.js:448:16)\n// at http://127.0.0.1:3000/src/__test__/file-throw.js:399:18`.replace(/(?:https?|ftp|file):\\/\\/(.*+)$/gm, (...args) => {\n// debugger\n// })\nconst stringToStringWithLink = (\n source,\n {\n transform = (url) => {\n return {\n href: url,\n text: url,\n }\n },\n } = {},\n) => {\n return source.replace(/(?:https?|ftp|file):\\/\\/\\S+/gm, (match) => {\n let linkHTML = \"\"\n\n const lastChar = match[match.length - 1]\n\n // hotfix because our url regex sucks a bit\n const endsWithSeparationChar = lastChar === \")\" || lastChar === \":\"\n if (endsWithSeparationChar) {\n match = match.slice(0, -1)\n }\n\n const lineAndColumnPattern = /:([0-9]+):([0-9]+)$/\n const lineAndColumMatch = match.match(lineAndColumnPattern)\n if (lineAndColumMatch) {\n const lineAndColumnString = lineAndColumMatch[0]\n const lineNumber = lineAndColumMatch[1]\n const columnNumber = lineAndColumMatch[2]\n const url = match.slice(0, -lineAndColumnString.length)\n const { href, text } = transform(url)\n linkHTML = link({ href, text: `${text}:${lineNumber}:${columnNumber}` })\n } else {\n const linePattern = /:([0-9]+)$/\n const lineMatch = match.match(linePattern)\n if (lineMatch) {\n const lineString = lineMatch[0]\n const lineNumber = lineMatch[1]\n const url = match.slice(0, -lineString.length)\n const { href, text } = transform(url)\n linkHTML = link({\n href,\n text: `${text}:${lineNumber}`,\n })\n } else {\n const url = match\n const { href, text } = transform(url)\n linkHTML = link({ href, text })\n }\n }\n\n if (endsWithSeparationChar) {\n return `${linkHTML}${lastChar}`\n }\n return linkHTML\n })\n}\n\nconst link = ({ href, text = href }) => `<a href=\"${href}\">${text}</a>`\n\nconst appendHMTLInside = (html, parentNode) => {\n const temoraryParent = document.createElement(\"div\")\n temoraryParent.innerHTML = html\n return transferChildren(temoraryParent, parentNode)\n}\n\nconst transferChildren = (fromNode, toNode) => {\n const childNodes = [].slice.call(fromNode.childNodes, 0)\n let i = 0\n while (i < childNodes.length) {\n toNode.appendChild(childNodes[i])\n i++\n }\n return () => {\n let c = 0\n while (c < childNodes.length) {\n fromNode.appendChild(childNodes[c])\n c++\n }\n }\n}\n",
|
|
106
106
|
"const { Notification } = window\n\nconst displayErrorNotificationNotAvailable = () => {}\n\nconst displayErrorNotificationImplementation = async (error, { icon } = {}) => {\n const permission = await Notification.requestPermission()\n\n if (permission === \"granted\") {\n const notification = new Notification(\"An error occured\", {\n lang: \"en\",\n body: error.stack,\n icon,\n })\n notification.onclick = () => {\n window.focus()\n }\n }\n}\n\nexport const displayErrorNotification =\n typeof Notification === \"function\"\n ? displayErrorNotificationImplementation\n : displayErrorNotificationNotAvailable\n",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"import { createDetailedMessage } from \"@jsenv/logger\"\nimport { stackToString } from \"./stackToString.js\"\nimport { getOriginalCallsites } from \"./getOriginalCallsites.js\"\n\nexport const installErrorStackRemapping = ({\n fetchFile,\n resolveFile,\n SourceMapConsumer,\n indent = \" \",\n}) => {\n if (typeof fetchFile !== \"function\") {\n throw new TypeError(`fetchFile must be a function, got ${fetchFile}`)\n }\n if (typeof SourceMapConsumer !== \"function\") {\n throw new TypeError(\n `sourceMapConsumer must be a function, got ${SourceMapConsumer}`,\n )\n }\n if (typeof indent !== \"string\") {\n throw new TypeError(`indent must be a string, got ${indent}`)\n }\n\n const errorRemappingCache = new WeakMap()\n const errorRemapFailureCallbackMap = new WeakMap()\n\n let installed = false\n const previousPrepareStackTrace = Error.prepareStackTrace\n const install = () => {\n if (installed) return\n installed = true\n Error.prepareStackTrace = prepareStackTrace\n }\n\n const uninstall = () => {\n if (!installed) return\n installed = false\n Error.prepareStackTrace = previousPrepareStackTrace\n }\n\n // ensure we do not use prepareStackTrace for thoose error\n // otherwise we would recursively remap error stack\n // and if the reason causing the failure is still here\n // it would create an infinite loop\n const readErrorStack = (error) => {\n uninstall()\n const stack = error.stack\n install()\n return stack\n }\n\n const prepareStackTrace = (error, stack) => {\n const onFailure = (failureData) => {\n const failureCallbackArray = errorRemapFailureCallbackMap.get(error)\n if (failureCallbackArray) {\n failureCallbackArray.forEach((callback) => callback(failureData))\n }\n }\n\n const stackRemappingPromise = getOriginalCallsites({\n stack,\n error,\n resolveFile,\n fetchFile: memoizeFetch(fetchFile),\n SourceMapConsumer,\n readErrorStack,\n indent,\n onFailure,\n })\n errorRemappingCache.set(error, stackRemappingPromise)\n\n return stackToString(stack, { error, indent })\n }\n\n const getErrorOriginalStackString = async (\n error,\n {\n onFailure = (message) => {\n console.warn(message)\n },\n } = {},\n ) => {\n if (onFailure) {\n const remapFailureCallbackArray = errorRemapFailureCallbackMap.get(error)\n if (remapFailureCallbackArray) {\n errorRemapFailureCallbackMap.set(error, [\n ...remapFailureCallbackArray,\n onFailure,\n ])\n } else {\n errorRemapFailureCallbackMap.set(error, [onFailure])\n }\n }\n\n // ensure Error.prepareStackTrace gets triggered by reading error.stack now\n const { stack } = error\n const promise = errorRemappingCache.get(error)\n\n if (promise) {\n try {\n const originalCallsites = await promise\n errorRemapFailureCallbackMap.get(error)\n\n const firstCall = originalCallsites[0]\n if (firstCall) {\n Object.assign(error, {\n filename: firstCall.getFileName(),\n lineno: firstCall.getLineNumber(),\n columnno: firstCall.getColumnNumber(),\n })\n }\n return stackToString(originalCallsites, { error, indent })\n } catch (e) {\n onFailure(\n createDetailedMessage(`error while computing original stack.`, {\n [\"stack from error while computing\"]: readErrorStack(e),\n [\"stack from error to remap\"]: stack,\n }),\n )\n return stack\n }\n }\n\n return stack\n }\n\n install()\n\n return { getErrorOriginalStackString, uninstall }\n}\n\nconst memoizeFetch = (fetchUrl) => {\n const urlCache = {}\n return async (url) => {\n if (url in urlCache) {\n return urlCache[url]\n }\n const responsePromise = fetchUrl(url)\n urlCache[url] = responsePromise\n return responsePromise\n }\n}\n",
|
|
116
116
|
"/* eslint-env browser */\n\nimport { installErrorStackRemapping } from \"./installErrorStackRemapping.js\"\n\nexport const installBrowserErrorStackRemapping = (options = {}) =>\n installErrorStackRemapping({\n fetchFile: async (url) => {\n // browser having Error.captureStackTrace got window.fetch\n // and this executes only when Error.captureStackTrace exists\n // so no need for polyfill or whatever here\n const response = await window.fetch(url, {\n // by default a script tag is in \"no-cors\"\n // so we also fetch url with \"no-cors\"\n mode: \"no-cors\",\n })\n // we read response test before anything because once memoized fetch\n // gets annoying preventing you to read\n // body multiple times, even using response.clone()\n const text = await response.text()\n return {\n status: response.status,\n url: response.url,\n statusText: response.statusText,\n headers: responseToHeaders(response),\n text: () => text,\n json: response.json.bind(response),\n blob: response.blob.bind(response),\n arrayBuffer: response.arrayBuffer.bind(response),\n }\n },\n resolveFile: (specifier, importer = window.location.href) => {\n // browsers having Error.captureStrackTrace got window.URL\n // and this executes only when Error.captureStackTrace exists\n return String(new URL(specifier, importer))\n },\n ...options,\n })\n\nconst responseToHeaders = (response) => {\n const headers = {}\n response.headers.forEach((value, name) => {\n headers[name] = value\n })\n return headers\n}\n",
|
|
117
117
|
"import { createDetailedMessage } from \"@jsenv/logger\"\nimport { fetchUrl } from \"./fetch-browser.js\"\n\nexport const fetchAndEvalUsingFetch = async (url) => {\n const response = await fetchUrl(url)\n\n if (response.status >= 200 && response.status <= 299) {\n const text = await response.text()\n // eslint-disable-next-line no-eval\n window.eval(appendSourceURL(text, url))\n } else {\n const text = await response.text()\n throw new Error(\n createDetailedMessage(`Unexpected response for script.`, {\n [\"script url\"]: url,\n [\"response body\"]: text,\n [\"response status\"]: response.status,\n }),\n )\n }\n}\n\nconst appendSourceURL = (code, sourceURL) => {\n return `${code}\n${\"//#\"} sourceURL=${sourceURL}`\n}\n",
|
|
118
|
-
"/* eslint-env browser */\
|
|
118
|
+
"/* eslint-env browser */\n\nimport { unevalException } from \"../unevalException.js\"\nimport { createBrowserRuntime } from \"../runtime/createBrowserRuntime/createBrowserRuntime.js\"\nimport { installBrowserErrorStackRemapping } from \"../error-stack-remapping/installBrowserErrorStackRemapping.js\"\nimport { fetchUrl } from \"../browser-utils/fetch-browser.js\"\nimport { fetchAndEvalUsingFetch } from \"../browser-utils/fetchAndEvalUsingFetch.js\"\nimport { memoize } from \"../memoize.js\"\n\nconst getNavigationStartTime = () => {\n try {\n return window.performance.timing.navigationStart\n } catch (e) {\n return Date.now()\n }\n}\n\nconst navigationStartTime = getNavigationStartTime()\n\nconst readyPromise = new Promise((resolve) => {\n if (document.readyState === \"complete\") {\n resolve()\n } else {\n const loadCallback = () => {\n window.removeEventListener(\"load\", loadCallback)\n resolve()\n }\n window.addEventListener(\"load\", loadCallback)\n }\n})\n\nconst fileExecutionMap = {}\n\nconst executionResultPromise = readyPromise.then(async () => {\n const fileExecutionResultMap = {}\n const fileExecutionResultPromises = []\n let status = \"completed\"\n let exceptionSource = \"\"\n Object.keys(fileExecutionMap).forEach((key) => {\n fileExecutionResultMap[key] = null // to get always same order for Object.keys(executionResult)\n const fileExecutionResultPromise = fileExecutionMap[key]\n fileExecutionResultPromises.push(fileExecutionResultPromise)\n fileExecutionResultPromise.then((fileExecutionResult) => {\n fileExecutionResultMap[key] = fileExecutionResult\n if (fileExecutionResult.status === \"errored\") {\n status = \"errored\"\n exceptionSource = fileExecutionResult.exceptionSource\n }\n })\n })\n await Promise.all(fileExecutionResultPromises)\n\n return {\n status,\n ...(status === \"errored\" ? { exceptionSource } : {}),\n startTime: navigationStartTime,\n endTime: Date.now(),\n fileExecutionResultMap,\n }\n})\n\nconst executeFileUsingDynamicImport = async (\n specifier,\n identifier = specifier,\n) => {\n const { currentScript } = document\n const fileExecutionResultPromise = (async () => {\n try {\n const url = new URL(specifier, document.location.href).href\n performance.mark(`jsenv_file_import_start`)\n const namespace = await import(url)\n performance.measure(`jsenv_file_import`, `jsenv_file_import_start`)\n const executionResult = {\n status: \"completed\",\n namespace,\n }\n return executionResult\n } catch (e) {\n performance.measure(`jsenv_file_import`, `jsenv_file_import_start`)\n const executionResult = {\n status: \"errored\",\n exceptionSource: unevalException(e),\n }\n onExecutionError(executionResult, { currentScript })\n return executionResult\n }\n })()\n fileExecutionMap[identifier] = fileExecutionResultPromise\n return fileExecutionResultPromise\n}\n\nconst executeFileUsingSystemJs = (specifier) => {\n // si on a déja importer ce fichier ??\n // if (specifier in fileExecutionMap) {\n\n // }\n\n const { currentScript } = document\n\n const fileExecutionResultPromise = (async () => {\n const browserRuntime = await getBrowserRuntime()\n const executionResult = await browserRuntime.executeFile(specifier, {\n measurePerformance: true,\n collectPerformance: true,\n })\n if (executionResult.status === \"errored\") {\n onExecutionError(executionResult, { currentScript })\n }\n return executionResult\n })()\n fileExecutionMap[specifier] = fileExecutionResultPromise\n return fileExecutionResultPromise\n}\n\nconst onExecutionError = (executionResult, { currentScript }) => {\n // eslint-disable-next-line no-eval\n const originalError = window.eval(executionResult.exceptionSource)\n if (originalError.code === \"NETWORK_FAILURE\") {\n if (currentScript) {\n const errorEvent = new Event(\"error\")\n currentScript.dispatchEvent(errorEvent)\n }\n } else {\n const { parsingError } = originalError\n const globalErrorEvent = new Event(\"error\")\n if (parsingError) {\n globalErrorEvent.filename = parsingError.filename\n globalErrorEvent.lineno = parsingError.lineNumber\n globalErrorEvent.message = parsingError.message\n globalErrorEvent.colno = parsingError.columnNumber\n } else {\n globalErrorEvent.filename = originalError.filename\n globalErrorEvent.lineno = originalError.lineno\n globalErrorEvent.message = originalError.message\n globalErrorEvent.colno = originalError.columnno\n }\n window.dispatchEvent(globalErrorEvent)\n }\n}\n\nconst getBrowserRuntime = memoize(async () => {\n const compileServerOrigin = document.location.origin\n const compileMetaResponse = await fetchUrl(\n `${compileServerOrigin}/.jsenv/__compile_server_meta__.json`,\n )\n const compileMeta = await compileMetaResponse.json()\n const { outDirectoryRelativeUrl, errorStackRemapping } = compileMeta\n const outDirectoryUrl = `${compileServerOrigin}/${outDirectoryRelativeUrl}`\n const afterOutDirectory = document.location.href.slice(outDirectoryUrl.length)\n const parts = afterOutDirectory.split(\"/\")\n const compileId = parts[0]\n\n const browserRuntime = await createBrowserRuntime({\n compileServerOrigin,\n outDirectoryRelativeUrl,\n compileId,\n })\n\n if (errorStackRemapping && Error.captureStackTrace) {\n const { sourcemapMainFileRelativeUrl, sourcemapMappingFileRelativeUrl } =\n compileMeta\n\n await fetchAndEvalUsingFetch(\n `${compileServerOrigin}/${sourcemapMainFileRelativeUrl}`,\n )\n const { SourceMapConsumer } = window.sourceMap\n SourceMapConsumer.initialize({\n \"lib/mappings.wasm\": `${compileServerOrigin}/${sourcemapMappingFileRelativeUrl}`,\n })\n const { getErrorOriginalStackString } = installBrowserErrorStackRemapping({\n SourceMapConsumer,\n })\n\n const errorTransform = async (error) => {\n // code can throw something else than an error\n // in that case return it unchanged\n if (!error || !(error instanceof Error)) return error\n const originalStack = await getErrorOriginalStackString(error)\n error.stack = originalStack\n return error\n }\n\n const executeFile = browserRuntime.executeFile\n browserRuntime.executeFile = (file, options = {}) => {\n return executeFile(file, { errorTransform, ...options })\n }\n }\n\n return browserRuntime\n})\n\nconst livereloadingCallbacks = {}\n\nwindow.__jsenv__ = {\n livereloadingCallbacks,\n executionResultPromise,\n executeFileUsingDynamicImport,\n executeFileUsingSystemJs,\n}\n"
|
|
119
119
|
],
|
|
120
120
|
"names": [
|
|
121
121
|
"obj",
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
"../src/internal/browser-launcher/jsenv_compile_proxy.js"
|
|
34
34
|
],
|
|
35
35
|
"sourcesContent": [
|
|
36
|
-
"export default (obj, key, value) => {\
|
|
37
|
-
"import defineProperty from \"../defineProperty/defineProperty.js\"\
|
|
38
|
-
"export default (source, excluded) => {\
|
|
39
|
-
"import objectWithoutPropertiesLoose from \"../objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js\"\
|
|
40
|
-
"const nativeTypeOf = (obj) => typeof obj\
|
|
36
|
+
"export default (obj, key, value) => {\n // Shortcircuit the slow defineProperty path when possible.\n // We are trying to avoid issues where setters defined on the\n // prototype cause side effects under the fast path of simple\n // assignment. By checking for existence of the property with\n // the in operator, we can optimize most of this overhead away.\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value,\n enumerable: true,\n configurable: true,\n writable: true,\n })\n } else {\n obj[key] = value\n }\n return obj\n}\n",
|
|
37
|
+
"import defineProperty from \"../defineProperty/defineProperty.js\"\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object)\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object)\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable\n })\n }\n keys.push.apply(keys, symbols)\n }\n return keys\n}\n\nexport default function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {}\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n defineProperty(target, key, source[key])\n })\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source))\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key))\n })\n }\n }\n return target\n}\n",
|
|
38
|
+
"export default (source, excluded) => {\n if (source === null) return {}\n var target = {}\n var sourceKeys = Object.keys(source)\n var key\n var i\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i]\n if (excluded.indexOf(key) >= 0) continue\n target[key] = source[key]\n }\n return target\n}\n",
|
|
39
|
+
"import objectWithoutPropertiesLoose from \"../objectWithoutPropertiesLoose/objectWithoutPropertiesLoose.js\"\n\nexport default (source, excluded) => {\n if (source === null) return {}\n\n var target = objectWithoutPropertiesLoose(source, excluded)\n var key\n var i\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source)\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i]\n if (excluded.indexOf(key) >= 0) continue\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue\n target[key] = source[key]\n }\n }\n return target\n}\n",
|
|
40
|
+
"const nativeTypeOf = (obj) => typeof obj\n\nconst customTypeOf = (obj) => {\n return obj &&\n typeof Symbol === \"function\" &&\n obj.constructor === Symbol &&\n obj !== Symbol.prototype\n ? \"symbol\"\n : typeof obj\n}\n\nexport default typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\"\n ? nativeTypeOf\n : customTypeOf\n",
|
|
41
41
|
"export const createDetailedMessage = (message, details = {}) => {\n let string = `${message}`\n\n Object.keys(details).forEach((key) => {\n const value = details[key]\n string += `\n--- ${key} ---\n${\n Array.isArray(value)\n ? value.join(`\n`)\n : value\n}`\n })\n\n return string\n}\n",
|
|
42
42
|
"import { createDetailedMessage } from \"@jsenv/logger\"\n\nexport const fetchUsingXHR = async (\n url,\n {\n signal,\n method = \"GET\",\n credentials = \"same-origin\",\n headers = {},\n body = null,\n } = {},\n) => {\n const headersPromise = createPromiseAndHooks()\n const bodyPromise = createPromiseAndHooks()\n\n const xhr = new XMLHttpRequest()\n\n const failure = (error) => {\n // if it was already resolved, we must reject the body promise\n if (headersPromise.settled) {\n bodyPromise.reject(error)\n } else {\n headersPromise.reject(error)\n }\n }\n\n const cleanup = () => {\n xhr.ontimeout = null\n xhr.onerror = null\n xhr.onload = null\n xhr.onreadystatechange = null\n }\n\n xhr.ontimeout = () => {\n cleanup()\n failure(new Error(`xhr request timeout on ${url}.`))\n }\n\n xhr.onerror = (error) => {\n cleanup()\n // unfortunately with have no clue why it fails\n // might be cors for instance\n failure(createRequestError(error, { url }))\n }\n\n xhr.onload = () => {\n cleanup()\n bodyPromise.resolve()\n }\n\n signal.addEventListener(\"abort\", () => {\n xhr.abort()\n const abortError = new Error(\"aborted\")\n abortError.name = \"AbortError\"\n failure(abortError)\n })\n\n xhr.onreadystatechange = () => {\n // https://developer.mozilla.org/fr/docs/Web/API/XMLHttpRequest/readyState\n const { readyState } = xhr\n\n if (readyState === 2) {\n headersPromise.resolve()\n } else if (readyState === 4) {\n cleanup()\n bodyPromise.resolve()\n }\n }\n\n xhr.open(method, url, true)\n Object.keys(headers).forEach((key) => {\n xhr.setRequestHeader(key, headers[key])\n })\n xhr.withCredentials = computeWithCredentials({ credentials, url })\n if (\"responseType\" in xhr && hasBlob) {\n xhr.responseType = \"blob\"\n }\n xhr.send(body)\n\n await headersPromise\n\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseURL\n const responseUrl =\n \"responseURL\" in xhr ? xhr.responseURL : headers[\"x-request-url\"]\n let responseStatus = xhr.status\n const responseStatusText = xhr.statusText\n const responseHeaders = getHeadersFromXHR(xhr)\n\n const readBody = async () => {\n await bodyPromise\n\n const { status } = xhr\n // in Chrome on file:/// URLs, status is 0\n if (status === 0) {\n responseStatus = 200\n }\n\n const body = \"response\" in xhr ? xhr.response : xhr.responseText\n\n return {\n responseBody: body,\n responseBodyType: detectBodyType(body),\n }\n }\n\n const text = async () => {\n const { responseBody, responseBodyType } = await readBody()\n\n if (responseBodyType === \"blob\") {\n return blobToText(responseBody)\n }\n if (responseBodyType === \"formData\") {\n throw new Error(\"could not read FormData body as text\")\n }\n if (responseBodyType === \"dataView\") {\n return arrayBufferToText(responseBody.buffer)\n }\n if (responseBodyType === \"arrayBuffer\") {\n return arrayBufferToText(responseBody)\n }\n // if (responseBodyType === \"text\" || responseBodyType === 'searchParams') {\n // return body\n // }\n return String(responseBody)\n }\n\n const json = async () => {\n const responseText = await text()\n return JSON.parse(responseText)\n }\n\n const blob = async () => {\n if (!hasBlob) {\n throw new Error(`blob not supported`)\n }\n\n const { responseBody, responseBodyType } = await readBody()\n\n if (responseBodyType === \"blob\") {\n return responseBody\n }\n if (responseBodyType === \"dataView\") {\n return new Blob([cloneBuffer(responseBody.buffer)])\n }\n if (responseBodyType === \"arrayBuffer\") {\n return new Blob([cloneBuffer(responseBody)])\n }\n if (responseBodyType === \"formData\") {\n throw new Error(\"could not read FormData body as blob\")\n }\n return new Blob([String(responseBody)])\n }\n\n const arrayBuffer = async () => {\n const { responseBody, responseBodyType } = await readBody()\n\n if (responseBodyType === \"arrayBuffer\") {\n return cloneBuffer(responseBody)\n }\n const responseBlob = await blob()\n return blobToArrayBuffer(responseBlob)\n }\n\n const formData = async () => {\n if (!hasFormData) {\n throw new Error(`formData not supported`)\n }\n const responseText = await text()\n return textToFormData(responseText)\n }\n\n return {\n url: responseUrl,\n status: responseStatus,\n statusText: responseStatusText,\n headers: responseHeaders,\n text,\n json,\n blob,\n arrayBuffer,\n formData,\n }\n}\n\nconst canUseBlob = () => {\n if (typeof window.FileReader !== \"function\") return false\n\n if (typeof window.Blob !== \"function\") return false\n\n try {\n // eslint-disable-next-line no-new\n new Blob()\n return true\n } catch (e) {\n return false\n }\n}\n\nconst hasBlob = canUseBlob()\n\nconst hasFormData = typeof window.FormData === \"function\"\n\nconst hasArrayBuffer = typeof window.ArrayBuffer === \"function\"\n\nconst hasSearchParams = typeof window.URLSearchParams === \"function\"\n\nconst createRequestError = (error, { url }) => {\n return new Error(\n createDetailedMessage(`error during xhr request on ${url}.`, {\n [\"error stack\"]: error.stack,\n }),\n )\n}\n\nconst createPromiseAndHooks = () => {\n let resolve\n let reject\n const promise = new Promise((res, rej) => {\n resolve = (value) => {\n promise.settled = true\n res(value)\n }\n reject = (value) => {\n promise.settled = true\n rej(value)\n }\n })\n promise.resolve = resolve\n promise.reject = reject\n return promise\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch\nconst computeWithCredentials = ({ credentials, url }) => {\n if (credentials === \"same-origin\") {\n return originSameAsGlobalOrigin(url)\n }\n return credentials === \"include\"\n}\n\nconst originSameAsGlobalOrigin = (url) => {\n // if we cannot read globalOrigin from window.location.origin, let's consider it's ok\n if (typeof window !== \"object\") return true\n if (typeof window.location !== \"object\") return true\n const globalOrigin = window.location.origin\n if (globalOrigin === \"null\") return true\n return hrefToOrigin(url) === globalOrigin\n}\n\nconst detectBodyType = (body) => {\n if (!body) {\n return \"\"\n }\n if (typeof body === \"string\") {\n return \"text\"\n }\n if (hasBlob && Blob.prototype.isPrototypeOf(body)) {\n return \"blob\"\n }\n if (hasFormData && FormData.prototype.isPrototypeOf(body)) {\n return \"formData\"\n }\n if (hasArrayBuffer) {\n if (hasBlob && isDataView(body)) {\n return `dataView`\n }\n if (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body)) {\n return `arrayBuffer`\n }\n }\n if (hasSearchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n return \"searchParams\"\n }\n return \"\"\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders#Example\nconst getHeadersFromXHR = (xhr) => {\n const headerMap = {}\n\n const headersString = xhr.getAllResponseHeaders()\n if (headersString === \"\") return headerMap\n\n const lines = headersString.trim().split(/[\\r\\n]+/)\n lines.forEach((line) => {\n const parts = line.split(\": \")\n const name = parts.shift()\n const value = parts.join(\": \")\n headerMap[name.toLowerCase()] = value\n })\n\n return headerMap\n}\n\nconst hrefToOrigin = (href) => {\n const scheme = hrefToScheme(href)\n\n if (scheme === \"file\") {\n return \"file://\"\n }\n\n if (scheme === \"http\" || scheme === \"https\") {\n const secondProtocolSlashIndex = scheme.length + \"://\".length\n const pathnameSlashIndex = href.indexOf(\"/\", secondProtocolSlashIndex)\n\n if (pathnameSlashIndex === -1) return href\n return href.slice(0, pathnameSlashIndex)\n }\n\n return href.slice(0, scheme.length + 1)\n}\n\nconst hrefToScheme = (href) => {\n const colonIndex = href.indexOf(\":\")\n if (colonIndex === -1) return \"\"\n return href.slice(0, colonIndex)\n}\n\nconst isDataView = (obj) => {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nconst isArrayBufferView =\n ArrayBuffer.isView ||\n (() => {\n const viewClasses = [\n \"[object Int8Array]\",\n \"[object Uint8Array]\",\n \"[object Uint8ClampedArray]\",\n \"[object Int16Array]\",\n \"[object Uint16Array]\",\n \"[object Int32Array]\",\n \"[object Uint32Array]\",\n \"[object Float32Array]\",\n \"[object Float64Array]\",\n ]\n\n return (value) => {\n return (\n value && viewClasses.includes(Object.prototype.toString.call(value))\n )\n }\n })()\n\nconst textToFormData = (text) => {\n const form = new FormData()\n text\n .trim()\n .split(\"&\")\n .forEach(function (bytes) {\n if (bytes) {\n const split = bytes.split(\"=\")\n const name = split.shift().replace(/\\+/g, \" \")\n const value = split.join(\"=\").replace(/\\+/g, \" \")\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nconst blobToArrayBuffer = async (blob) => {\n const reader = new FileReader()\n const promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nconst blobToText = (blob) => {\n const reader = new FileReader()\n const promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nconst arrayBufferToText = (arrayBuffer) => {\n const view = new Uint8Array(arrayBuffer)\n const chars = new Array(view.length)\n let i = 0\n while (i < view.length) {\n chars[i] = String.fromCharCode(view[i])\n\n i++\n }\n return chars.join(\"\")\n}\n\nconst fileReaderReady = (reader) => {\n return new Promise(function (resolve, reject) {\n reader.onload = function () {\n resolve(reader.result)\n }\n reader.onerror = function () {\n reject(reader.error)\n }\n })\n}\n\nconst cloneBuffer = (buffer) => {\n if (buffer.slice) {\n return buffer.slice(0)\n }\n const view = new Uint8Array(buffer.byteLength)\n view.set(new Uint8Array(buffer))\n return view.buffer\n}\n",
|
|
43
43
|
"import { fetchUsingXHR } from \"./fetchUsingXHR.js\"\n\nconst fetchNative = async (url, { mode = \"cors\", ...options } = {}) => {\n const response = await window.fetch(url, {\n mode,\n ...options,\n })\n\n return {\n url: response.url,\n status: response.status,\n statusText: \"\",\n headers: responseToHeaders(response),\n text: () => response.text(),\n json: () => response.json(),\n blob: () => response.blob(),\n arrayBuffer: () => response.arrayBuffer(),\n formData: () => response.formData(),\n }\n}\n\nconst responseToHeaders = (response) => {\n const headers = {}\n response.headers.forEach((value, name) => {\n headers[name] = value\n })\n return headers\n}\n\nexport const fetchUrl =\n typeof window.fetch === \"function\" &&\n typeof window.AbortController === \"function\"\n ? fetchNative\n : fetchUsingXHR\n",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"import { versionCompare } from \"./versionCompare.js\"\n\nexport const versionIsBelow = (versionSupposedBelow, versionSupposedAbove) => {\n return versionCompare(versionSupposedBelow, versionSupposedAbove) < 0\n}\n",
|
|
61
61
|
"import { versionIsBelow } from \"./versionIsBelow.js\"\n\nexport const findHighestVersion = (...values) => {\n if (values.length === 0) throw new Error(`missing argument`)\n\n return values.reduce((highestVersion, value) => {\n if (versionIsBelow(highestVersion, value)) {\n return value\n }\n return highestVersion\n })\n}\n",
|
|
62
62
|
"import { findHighestVersion } from \"../semantic-versioning/index.js\"\n\nexport const resolveGroup = ({ name, version }, groupMap) => {\n return Object.keys(groupMap).find((compileIdCandidate) => {\n const { minRuntimeVersions } = groupMap[compileIdCandidate]\n const versionForGroup = minRuntimeVersions[name]\n if (!versionForGroup) {\n return false\n }\n const highestVersion = findHighestVersion(version, versionForGroup)\n return highestVersion === version\n })\n}\n",
|
|
63
|
-
"import { fetchJson } from \"../../browser-utils/fetchJson.js\"\
|
|
63
|
+
"import { fetchJson } from \"../../browser-utils/fetchJson.js\"\nimport { computeCompileIdFromGroupId } from \"../computeCompileIdFromGroupId.js\"\nimport { detectBrowser } from \"../detectBrowser/detectBrowser.js\"\nimport { resolveGroup } from \"../resolveGroup.js\"\n\nexport const scanBrowserRuntimeFeatures = async ({\n coverageHandledFromOutside = false,\n failFastOnFeatureDetection = false,\n} = {}) => {\n const {\n outDirectoryRelativeUrl,\n inlineImportMapIntoHTML,\n customCompilerPatterns,\n compileServerGroupMap,\n } = await fetchJson(\"/.jsenv/__compile_server_meta__.json\")\n\n const browser = detectBrowser()\n const compileId = computeCompileIdFromGroupId({\n groupId: resolveGroup(browser, compileServerGroupMap),\n groupMap: compileServerGroupMap,\n })\n const groupInfo = compileServerGroupMap[compileId]\n\n const featuresReport = {\n importmap: undefined,\n dynamicImport: undefined,\n topLevelAwait: undefined,\n jsonImportAssertions: undefined,\n cssImportAssertions: undefined,\n newStylesheet: undefined,\n }\n await detectSupportedFeatures({\n featuresReport,\n failFastOnFeatureDetection,\n inlineImportMapIntoHTML,\n })\n const pluginRequiredNameArray = await pluginRequiredNamesFromGroupInfo(\n groupInfo,\n {\n featuresReport,\n coverageHandledFromOutside,\n },\n )\n\n const canAvoidCompilation =\n customCompilerPatterns.length === 0 &&\n pluginRequiredNameArray.length === 0 &&\n featuresReport.importmap &&\n featuresReport.dynamicImport &&\n featuresReport.topLevelAwait\n\n return {\n canAvoidCompilation,\n featuresReport,\n customCompilerPatterns,\n pluginRequiredNameArray,\n inlineImportMapIntoHTML,\n outDirectoryRelativeUrl,\n compileId,\n browser,\n }\n}\n\nconst detectSupportedFeatures = async ({\n featuresReport,\n failFastOnFeatureDetection,\n inlineImportMapIntoHTML,\n}) => {\n // start testing importmap support first and not in paralell\n // so that there is not module script loaded beore importmap is injected\n // it would log an error in chrome console and return undefined\n const importmap = await supportsImportmap({\n // chrome supports inline but not remote importmap\n // https://github.com/WICG/import-maps/issues/235\n\n // at this stage we won't know if the html file will use\n // an importmap or not and if that importmap is inline or specified with an src\n // so we should test if browser support local and remote importmap.\n // But there exploring server can inline importmap by transforming html\n // and in that case we can test only the local importmap support\n // so we test importmap support and the remote one\n remote: !inlineImportMapIntoHTML,\n })\n featuresReport.importmap = importmap\n if (!importmap && failFastOnFeatureDetection) {\n return\n }\n\n const dynamicImport = await supportsDynamicImport()\n featuresReport.dynamicImport = dynamicImport\n if (!dynamicImport && failFastOnFeatureDetection) {\n return\n }\n\n const topLevelAwait = await supportsTopLevelAwait()\n featuresReport.topLevelAwait = topLevelAwait\n if (!topLevelAwait && failFastOnFeatureDetection) {\n return\n }\n}\n\nconst pluginRequiredNamesFromGroupInfo = async (\n groupInfo,\n { featuresReport, coverageHandledFromOutside },\n) => {\n const { pluginRequiredNameArray } = groupInfo\n const requiredPluginNames = pluginRequiredNameArray.slice()\n const markPluginAsSupported = (name) => {\n const index = requiredPluginNames.indexOf(name)\n if (index > -1) {\n requiredPluginNames.splice(index, 1)\n }\n }\n\n // When instrumentation CAN be handed by playwright\n // https://playwright.dev/docs/api/class-chromiumcoverage#chromiumcoveragestartjscoverageoptions\n // coverageHandledFromOutside is true and \"transform-instrument\" becomes non mandatory\n if (coverageHandledFromOutside) {\n markPluginAsSupported(\"transform-instrument\")\n }\n\n if (pluginRequiredNameArray.includes(\"transform-import-assertions\")) {\n const jsonImportAssertions = await supportsJsonImportAssertions()\n featuresReport.jsonImportAssertions = jsonImportAssertions\n\n const cssImportAssertions = await supportsCssImportAssertions()\n featuresReport.cssImportAssertions = cssImportAssertions\n\n if (jsonImportAssertions && cssImportAssertions) {\n markPluginAsSupported(\"transform-import-assertions\")\n }\n }\n\n if (pluginRequiredNameArray.includes(\"new-stylesheet-as-jsenv-import\")) {\n const newStylesheet = supportsNewStylesheet()\n featuresReport.newStylesheet = newStylesheet\n markPluginAsSupported(\"new-stylesheet-as-jsenv-import\")\n }\n\n return requiredPluginNames\n}\n\nconst supportsNewStylesheet = () => {\n try {\n // eslint-disable-next-line no-new\n new CSSStyleSheet()\n return true\n } catch (e) {\n return false\n }\n}\n\nconst supportsImportmap = async ({ remote = true } = {}) => {\n const specifier = asBase64Url(`export default false`)\n\n const importMap = {\n imports: {\n [specifier]: asBase64Url(`export default true`),\n },\n }\n\n const importmapScript = document.createElement(\"script\")\n const importmapString = JSON.stringify(importMap, null, \" \")\n importmapScript.type = \"importmap\"\n if (remote) {\n importmapScript.src = `data:application/json;base64,${window.btoa(\n importmapString,\n )}`\n } else {\n importmapScript.textContent = importmapString\n }\n\n document.body.appendChild(importmapScript)\n\n const scriptModule = document.createElement(\"script\")\n scriptModule.type = \"module\"\n scriptModule.src = asBase64Url(\n `import supported from \"${specifier}\"; window.__importmap_supported = supported`,\n )\n\n return new Promise((resolve, reject) => {\n scriptModule.onload = () => {\n const supported = window.__importmap_supported\n delete window.__importmap_supported\n document.body.removeChild(scriptModule)\n document.body.removeChild(importmapScript)\n resolve(supported)\n }\n scriptModule.onerror = () => {\n document.body.removeChild(scriptModule)\n document.body.removeChild(importmapScript)\n reject()\n }\n document.body.appendChild(scriptModule)\n })\n}\n\nconst supportsDynamicImport = async () => {\n const moduleSource = asBase64Url(`export default 42`)\n try {\n const namespace = await import(moduleSource)\n return namespace.default === 42\n } catch (e) {\n return false\n }\n}\n\nconst supportsTopLevelAwait = async () => {\n const moduleSource = asBase64Url(`export default await Promise.resolve(42)`)\n try {\n const namespace = await import(moduleSource)\n return namespace.default === 42\n } catch (e) {\n return false\n }\n}\n\nconst supportsJsonImportAssertions = async () => {\n const jsonBase64Url = asBase64Url(\"42\", \"application/json\")\n const moduleSource = asBase64Url(\n `export { default } from \"${jsonBase64Url}\" assert { type: \"json\" }`,\n )\n try {\n const namespace = await import(moduleSource)\n return namespace.default === 42\n } catch (e) {\n return false\n }\n}\n\nconst supportsCssImportAssertions = async () => {\n const cssBase64Url = asBase64Url(\"p { color: red; }\", \"text/css\")\n const moduleSource = asBase64Url(\n `export { default } from \"${cssBase64Url}\" assert { type: \"css\" }`,\n )\n try {\n const namespace = await import(moduleSource)\n return namespace.default instanceof CSSStyleSheet\n } catch (e) {\n return false\n }\n}\n\nconst asBase64Url = (text, mimeType = \"application/javascript\") => {\n return `data:${mimeType};base64,${window.btoa(text)}`\n}\n",
|
|
64
64
|
"/* eslint-env browser */\n\nimport { scanBrowserRuntimeFeatures } from \"../runtime/createBrowserRuntime/scanBrowserRuntimeFeatures.js\"\n\nwindow.scanBrowserRuntimeFeatures = scanBrowserRuntimeFeatures\n"
|
|
65
65
|
],
|
|
66
66
|
"names": [
|