@lwrjs/loader 0.6.0-alpha.1 → 0.6.0-alpha.10

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/README.md CHANGED
@@ -66,7 +66,7 @@ LWR's AMD-like module format support. Unlike generic AMD, all modules in LWR mus
66
66
  - `name` - The module name
67
67
  - `dependencies` - A list of module dependencies (module imports)
68
68
  - `execute` - The function containing the module code.
69
- - `signatures` - An argument unique to LWR's AMD loader. The object containing the "signature" of the module and the signatures for each of its dependencies. Signatures are used to identify module changes from the server and is discussed at length in the [Module API RFC](https://rfcs.lwc.dev/rfcs/lws/0002-component-api#signatures).
69
+ - `signatures` - An argument unique to LWR's AMD loader. The object containing the "signature" of the module and the signatures for each of its dependencies. Signatures are used to identify module changes from the server and is discussed at length in the [Module API RFC](https://rfcs.lwc.dev/rfcs/lwr/0002-component-api#signatures).
70
70
 
71
71
  In order to load modules from the server, you must set the define on the global scope matching the module define call from the server:
72
72
 
@@ -306,7 +306,7 @@ A web client provides the following HTML document to bootstrap a LWR application
306
306
  </body>
307
307
  ```
308
308
 
309
- Read more in the [bootstrap RFC](https://rfcs.lwc.dev/rfcs/lws/0000-lwr-bootstrap#web-client-bootstrap-flow).
309
+ Read more in the [bootstrap RFC](https://rfcs.lwc.dev/rfcs/lwr/0000-lwr-bootstrap#web-client-bootstrap-flow).
310
310
 
311
311
  ### Client Bootstrap Config
312
312
 
@@ -335,7 +335,7 @@ globalThis.LWR: {
335
335
  }
336
336
  ```
337
337
 
338
- Read more in the [bootstrap RFC](https://rfcs.lwc.dev/rfcs/lws/0000-lwr-bootstrap#client-bootstrap-config).
338
+ Read more in the [bootstrap RFC](https://rfcs.lwc.dev/rfcs/lwr/0000-lwr-bootstrap#client-bootstrap-config).
339
339
 
340
340
  ### Custom Initialization
341
341
 
@@ -353,6 +353,8 @@ type CustomInitAPI = {
353
353
  initializeApp: InitializeApp;
354
354
  // register bootstrap error state callback
355
355
  onBootstrapError: RegisterBootstrapErrorHandler;
356
+ // Register a dispatcher for the metrics profiler
357
+ attachDispatcher: (dispatcher: LogDispatcher) => void;
356
358
  // A convenience pointer to the globally available LWR.define
357
359
  define: Function;
358
360
  };
@@ -396,7 +398,7 @@ The loader shim calls the `customInit` hook and **will not** start the applicati
396
398
  </body>
397
399
  ```
398
400
 
399
- Read more in the [bootstrap RFC](https://rfcs.lwc.dev/rfcs/lws/0000-lwr-bootstrap#custominit-hook).
401
+ Read more in the [bootstrap RFC](https://rfcs.lwc.dev/rfcs/lwr/0000-lwr-bootstrap#custominit-hook).
400
402
 
401
403
  ### Output
402
404
 
@@ -5,6 +5,7 @@ import path from 'path';
5
5
  import fs from 'fs';
6
6
  import { once } from 'events';
7
7
  import { pathToFileURL, fileURLToPath, URL } from 'url';
8
+ import { isNodeError } from '@lwrjs/diagnostics';
8
9
  import { getAMDModule } from '../../../modules/lwr/loader/__tests__/utils/amd.js';
9
10
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
11
  const baseUrl = pathToFileURL(path.resolve(__dirname, '../../../../') + '/');
@@ -36,7 +37,7 @@ http.createServer(async function (req, res) {
36
37
  await once(fileStream, 'readable');
37
38
  }
38
39
  catch (e) {
39
- if (e.code === 'EISDIR' || e.code === 'ENOENT') {
40
+ if (isNodeError(e) && (e.code === 'EISDIR' || e.code === 'ENOENT')) {
40
41
  res.writeHead(404, {
41
42
  'content-type': 'text/html',
42
43
  });
@@ -5,6 +5,7 @@ import path from 'path';
5
5
  import fs from 'fs';
6
6
  import { once } from 'events';
7
7
  import { pathToFileURL, fileURLToPath, URL } from 'url';
8
+ import { isNodeError } from '@lwrjs/diagnostics';
8
9
  import { getAMDModule } from '../../../modules/lwr/loaderLegacy/__tests__/utils/amd.js';
9
10
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
10
11
  const baseUrl = pathToFileURL(path.resolve(__dirname, '../../../../') + '/');
@@ -36,7 +37,7 @@ http.createServer(async function (req, res) {
36
37
  await once(fileStream, 'readable');
37
38
  }
38
39
  catch (e) {
39
- if (e.code === 'EISDIR' || e.code === 'ENOENT') {
40
+ if (isNodeError(e) && (e.code === 'EISDIR' || e.code === 'ENOENT')) {
40
41
  res.writeHead(404, {
41
42
  'content-type': 'text/html',
42
43
  });
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: MIT
5
5
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
6
6
  */
7
- /* LWR Legacy Module Loader Shim v0.6.0-alpha.1 */
7
+ /* LWR Legacy Module Loader Shim v0.6.0-alpha.10 */
8
8
  (function () {
9
9
  'use strict';
10
10
 
@@ -36,6 +36,13 @@
36
36
 
37
37
  const REQUIRED_MODULES_TIMEOUT = 300 * 1000;
38
38
 
39
+ var Phase;
40
+ (function (Phase) {
41
+ Phase[Phase["Start"] = 0] = "Start";
42
+ })(Phase || (Phase = {}));
43
+ function attachDispatcher(dispatcher) {
44
+ }
45
+
39
46
  // Check for errors with autoBoot and customInit
40
47
  function validatePreInit(autoBoot, customInit) {
41
48
  // If autoBoot === false, there must be a customInit hook
@@ -58,6 +65,7 @@
58
65
  initializeApp,
59
66
  define,
60
67
  onBootstrapError,
68
+ attachDispatcher,
61
69
  };
62
70
  customInit(lwr, config);
63
71
  }
@@ -75,7 +83,7 @@
75
83
  // Parse configuration
76
84
  this.global = global;
77
85
  this.config = global.LWR;
78
- this.loaderModule = 'lwr/loaderLegacy/v/0_6_0-alpha_1';
86
+ this.loaderModule = 'lwr/loaderLegacy/v/0_6_0-alpha_10';
79
87
  // Set up the temporary LWR.define function and customInit hook
80
88
  const tempDefine = this.tempDefine.bind(this);
81
89
  global.LWR.define = tempDefine;
@@ -214,14 +222,14 @@
214
222
  // The loader module is ALWAYS required
215
223
  const GLOBAL = globalThis;
216
224
  GLOBAL.LWR.requiredModules = GLOBAL.LWR.requiredModules || [];
217
- if (GLOBAL.LWR.requiredModules.indexOf('lwr/loaderLegacy/v/0_6_0-alpha_1') < 0) {
218
- GLOBAL.LWR.requiredModules.push('lwr/loaderLegacy/v/0_6_0-alpha_1');
225
+ if (GLOBAL.LWR.requiredModules.indexOf('lwr/loaderLegacy/v/0_6_0-alpha_10') < 0) {
226
+ GLOBAL.LWR.requiredModules.push('lwr/loaderLegacy/v/0_6_0-alpha_10');
219
227
  }
220
228
  new LoaderShim(GLOBAL);
221
229
 
222
230
  }());
223
231
 
224
- LWR.define('lwr/loaderLegacy/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use strict';
232
+ LWR.define('lwr/loaderLegacy/v/0_6_0-alpha_10', ['exports'], function (exports) { 'use strict';
225
233
 
226
234
  const templateRegex = /\{([0-9]+)\}/g;
227
235
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -692,15 +700,14 @@ LWR.define('lwr/loaderLegacy/v/0_6_0-alpha_1', ['exports'], function (exports) {
692
700
  }
693
701
  if (this.resolver) {
694
702
  resolved = this.resolver.resolve(resolvedOrPlain, parentUrl);
695
- // return the plain id IFF its already defined && the resolvedUrl is NOT already in the module registry
703
+ // return the plain id if it is already defined && the resolvedUrl is NOT already in the module registry
696
704
  if (this.namedDefineRegistry.has(resolvedOrPlain) &&
697
705
  this.namedDefineRegistry.get(resolvedOrPlain).defined) {
698
706
  const record = this.moduleRegistry.get(resolved);
699
- if (!record || record.originalId !== resolvedOrPlain) {
707
+ if (!record || !record.aliases.has(resolvedOrPlain)) {
700
708
  return resolvedOrPlain;
701
709
  }
702
710
  }
703
- // return resolved;
704
711
  }
705
712
  else {
706
713
  resolved = resolvedOrPlain;
@@ -830,6 +837,10 @@ LWR.define('lwr/loaderLegacy/v/0_6_0-alpha_1', ['exports'], function (exports) {
830
837
  getModuleRecord(resolvedId, id) {
831
838
  let moduleRecord = this.moduleRegistry.get(resolvedId);
832
839
  if (moduleRecord) {
840
+ // Make sure the original id is in the alias set
841
+ if (!moduleRecord.aliases.has(id)) {
842
+ moduleRecord.aliases.add(id);
843
+ }
833
844
  return moduleRecord;
834
845
  }
835
846
  const instantiation = this.getModuleDef(resolvedId, id);
@@ -849,7 +860,7 @@ LWR.define('lwr/loaderLegacy/v/0_6_0-alpha_1', ['exports'], function (exports) {
849
860
  });
850
861
  moduleRecord = {
851
862
  id: resolvedId,
852
- originalId: id,
863
+ aliases: new Set([id]),
853
864
  module: Object.create(null),
854
865
  dependencyRecords,
855
866
  instantiation,
@@ -1130,7 +1141,7 @@ LWR.define('lwr/loaderLegacy/v/0_6_0-alpha_1', ['exports'], function (exports) {
1130
1141
  }
1131
1142
  else if (defaultUri) {
1132
1143
  // When a specifier's URI cannot be resolved via the imports, fallback to "default".
1133
- // -> https://rfcs.lwc.dev/rfcs/lws/0000-import-metadata#json-schema
1144
+ // -> https://rfcs.lwc.dev/rfcs/lwr/0000-import-metadata#json-schema
1134
1145
  // However, if `id` is already a fully resolved url,
1135
1146
  // we cannot prepend the defaultUri -> https://github.com/salesforce/lwr/issues/378.
1136
1147
  // In this case we do not apply any package mappings and allow the caller (resolveImportMapEntry) to handle it.
@@ -4,28 +4,5 @@
4
4
  * SPDX-License-Identifier: MIT
5
5
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
6
6
  */
7
- /* LWR Legacy Module Loader Shim v0.6.0-alpha.1 */
8
- !function(){"use strict";function e(e,t,r,o){const{autoBoot:s,customInit:n}=e;if(function(e,t){if(!e&&!t)throw new Error("The customInit hook is required when autoBoot is false");if(e&&t)throw new Error("The customInit hook must not be defined when autoBoot is true")}(s,n),n){n({initializeApp:t,define:r,onBootstrapError:o},e)}}const t="function"==typeof setTimeout,r="undefined"!=typeof console;const o=globalThis;o.LWR.requiredModules=o.LWR.requiredModules||[],o.LWR.requiredModules.indexOf("lwr/loaderLegacy/v/0_6_0-alpha_1")<0&&o.LWR.requiredModules.push("lwr/loaderLegacy/v/0_6_0-alpha_1"),new class{constructor(r){this.defineCache={},this.orderedDefs=[],this.global=r,this.config=r.LWR,this.loaderModule="lwr/loaderLegacy/v/0_6_0-alpha_1";const o=this.tempDefine.bind(this);r.LWR.define=o,this.bootReady=this.config.autoBoot,t&&(this.watchdogTimerId=this.startWatchdogTimer());try{e(Object.freeze(this.config),this.postCustomInit.bind(this),o,e=>{this.errorHandler=e})}catch(e){this.enterErrorState(e)}}canInit(){const e=this.config.requiredModules.every(e=>this.orderedDefs.includes(e));return this.bootReady&&e}tempDefine(...e){const r=e[0];this.defineCache[r]=e,this.orderedDefs.push(r),this.canInit()&&(t&&clearTimeout(this.watchdogTimerId),this.initApp())}postCustomInit(){this.bootReady=!0,this.canInit()&&this.initApp()}initApp(){try{const e=function(e,t,r,o){if(!t||"function"!=typeof t[2])throw new Error(`Expected loader with specifier "${e}" to be a module`);const s={};t[2].call(null,s);const{Loader:n}=s,i=new n(r);return o&&o.length&&i.registerExternalModules(o),i.define(e,["exports"],e=>{Object.assign(e,{define:i.define.bind(i),load:i.load.bind(i),services:i.services})},t[3]),i}(this.loaderModule,this.defineCache[this.loaderModule],this.config.baseUrl,this.config.preloadModules);this.mountApp(e)}catch(e){this.enterErrorState(e)}}waitForDOMContentLoaded(){return void 0===typeof document||"interactive"===document.readyState||"complete"===document.readyState?Promise.resolve():new Promise(e=>{document.addEventListener("DOMContentLoaded",()=>{e()})})}mountApp(e){const{bootstrapModule:t,rootComponent:r,importMappings:o,rootComponents:s,endpoints:n}=this.config;this.global.LWR=Object.freeze({define:e.define.bind(e),rootComponent:r,rootComponents:s,importMappings:o,endpoints:n}),this.orderedDefs.forEach(t=>{t!==this.loaderModule&&e.define(...this.defineCache[t])});const{disableInitDefer:i}=this.config;e.registerImportMappings(o).then(()=>{if(!i)return this.waitForDOMContentLoaded()}).then(()=>e.load(t)).catch(e=>{this.enterErrorState(new Error(`Application ${r} could not be loaded: ${e}`))})}enterErrorState(e){this.errorHandler?this.errorHandler(e):r&&console.error("An error occurred during LWR bootstrap. "+e.message,e.stack)}startWatchdogTimer(){return setTimeout(()=>{this.enterErrorState(new Error("Failed to load required modules - timed out"))},3e5)}}(o)}(),LWR.define("lwr/loaderLegacy/v/0_6_0-alpha_1",["exports"],(function(exports){"use strict";const templateRegex=/\{([0-9]+)\}/g;function templateString(e,t){return e.replace(templateRegex,(e,r)=>t[r])}function generateErrorMessage(e,t){const r=Array.isArray(t)?templateString(e.message,t):e.message;return`LWR${e.code}: ${r}`}class LoaderError extends Error{constructor(e,t){super(),this.message=generateErrorMessage(e,t)}}function invariant(e,t){if(!e)throw new LoaderError(t)}const MISSING_NAME=Object.freeze({code:3e3,message:"A module name is required.",level:0}),FAIL_INSTANTIATE=Object.freeze({code:3004,message:"Failed to instantiate module: {0}",level:0}),NO_AMD_REQUIRE=Object.freeze({code:3005,message:"AMD require not supported.",level:0}),FAILED_DEP=Object.freeze({code:3006,level:0,message:"Failed to load dependency: {0}"}),INVALID_DEPS=Object.freeze({code:3007,message:"Unexpected value received for dependencies argument; expected an array.",level:0}),FAIL_LOAD=Object.freeze({code:3008,level:0,message:"Error loading {0}"}),UNRESOLVED=Object.freeze({code:3009,level:0,message:"Unable to resolve bare specifier: {0}"}),NO_BASE_URL=Object.freeze({code:3010,level:0,message:"baseUrl not set"});Object.freeze({code:3011,level:0,message:"Cannot set a loader service multiple times"});const INVALID_HOOK=Object.freeze({code:3012,level:0,message:"Invalid hook received"}),INVALID_LOADER_SERVICE_RESPONSE=Object.freeze({code:3013,level:0,message:"Invalid response received from hook"}),MODULE_LOAD_TIMEOUT=Object.freeze({code:3014,level:0,message:"Error loading {0} - timed out"}),HTTP_FAIL_LOAD=Object.freeze({code:3015,level:0,message:"Error loading {0}, status code {1}"}),STALE_HOOK_ERROR=Object.freeze({code:3016,level:0,message:"An error occurred handling module conflict"}),MODULE_ALREADY_LOADED=Object.freeze({code:3017,level:0,message:"Marking module(s) as externally loaded, but they are already loaded: {0}"}),FAIL_HOOK_LOAD=Object.freeze({code:3018,level:0,message:'Error loading "{0}" from hook'}),BAD_IMPORT_MAP=Object.freeze({code:3011,level:0,message:"import map is not valid"}),hasDocument="undefined"!=typeof document,hasSetTimeout="function"==typeof setTimeout,hasConsole="undefined"!=typeof console;function getBaseUrl(){let e=void 0;if(hasDocument){const t=document.querySelector("base[href]");e=t&&t.href}if(!e&&"undefined"!=typeof location){e=location.href.split("#")[0].split("?")[0];const t=e.lastIndexOf("/");-1!==t&&(e=e.slice(0,t+1))}return e}
9
- /**
10
- * Check if a string is a URL based on Common Internet Scheme Syntax
11
- * https://www.ietf.org/rfc/rfc1738.txt
12
- *
13
- * URL Format:
14
- * <scheme>:<scheme-specific-part>
15
- * Common Internet Scheme Syntax:
16
- * The scheme specific part starts with a double slash('//')
17
- *
18
- * A valid URL has a colon that is followed by a double slash.
19
- *
20
- * @param url - the url that is being checked
21
- * @returns boolean
22
- *
23
- * @example Valid URLs
24
- * 'https://salesforce.com'
25
- * 'http://localhost:3000'
26
- *
27
- * @example Invalid URLs
28
- * 'salesforce.com'
29
- * 'localhost:3000'
30
- * '@salesforce/label/type:namespace:name'
31
- */function isUrl(e){return-1!==e.indexOf("://")}function resolveIfNotPlainOrUrl(e,t){if(-1!==e.indexOf("\\")&&(e=e.replace(/\\/g,"/")),"/"===e[0]&&"/"===e[1])return t.slice(0,t.indexOf(":")+1)+e;if("."===e[0]&&("/"===e[1]||"."===e[1]&&("/"===e[2]||2===e.length&&(e+="/"))||1===e.length&&(e+="/"))||"/"===e[0]){const r=t.slice(0,t.indexOf(":")+1);let o;if("/"===t[r.length+1]?"file:"!==r?(o=t.slice(r.length+2),o=o.slice(o.indexOf("/")+1)):o=t.slice(8):o=t.slice(r.length+("/"===t[r.length]?1:0)),"/"===e[0])return t.slice(0,t.length-o.length-1)+e;const s=o.slice(0,o.lastIndexOf("/")+1)+e,n=[];let i=-1;for(let e=0;e<s.length;e++)-1!==i?"/"===s[e]&&(n.push(s.slice(i,e+1)),i=-1):"."===s[e]?"."!==s[e+1]||"/"!==s[e+2]&&e+2!==s.length?"/"===s[e+1]||e+1===s.length?e+=1:i=e:(n.pop(),e+=2):i=e;return-1!==i&&n.push(s.slice(i)),t.slice(0,t.length-o.length)+n.join("")}}function resolveUrl(e,t){return resolveIfNotPlainOrUrl(e,t)||(isUrl(e)?e:resolveIfNotPlainOrUrl("./"+e,t))}function createScript(e){const t=document.createElement("script");return t.charset="utf-8",t.async=!0,t.crossOrigin="anonymous",t.src=e,t}let lastWindowError$1,lastWindowErrorUrl;function loadModuleDef(e){return new Promise((function(t,r){if(hasDocument){const o=createScript(e);o.addEventListener("error",()=>{r(new LoaderError(FAIL_LOAD,[e]))}),o.addEventListener("load",()=>{document.head.removeChild(o),lastWindowErrorUrl===e?r(lastWindowError$1):t()}),document.head.appendChild(o)}}))}hasDocument&&window.addEventListener("error",e=>{lastWindowErrorUrl=e.filename,lastWindowError$1=e.error});const MODULE_LOAD_TIMEOUT_TIMER=3e5;let lastWindowError;function isCustomResponse(e){return Object.prototype.hasOwnProperty.call(e,"data")&&!Object.prototype.hasOwnProperty.call(e,"blob")}function isFetchResponse(e){return"function"==typeof e.blob}function isResponseAPromise(e){return!(!e||!e.then)}async function evaluateLoadHookResponse(response,id){return Promise.resolve().then(async()=>{if(!response.status)throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);if(200!==response.status)throw new LoaderError(HTTP_FAIL_LOAD,[id,""+response.status]);const isResponse=isFetchResponse(response);let code;if(isCustomResponse(response))code=response.data;else{if(!isResponse)throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);code=await response.text()}if(!code)throw new LoaderError(FAIL_LOAD,[id]);code=`${code}\n//# sourceURL=${id}`;try{eval(code)}catch(e){throw new LoaderError(FAIL_LOAD,[id])}if(lastWindowError)throw new LoaderError(FAIL_LOAD,[id]);return!0}).finally(()=>{})}async function evaluateLoadHook(e,t){return hasSetTimeout?new Promise((r,o)=>{const s=setTimeout(()=>{o(new LoaderError(MODULE_LOAD_TIMEOUT,[e]))},MODULE_LOAD_TIMEOUT_TIMER);t.then(e=>{r(e)}).catch(()=>{o(new LoaderError(FAIL_HOOK_LOAD,[e]))}).finally(()=>{clearTimeout(s)})}):t}function reportError(e){hasConsole&&console.error(e)}function evaluateHandleStaleModuleHooks(e,t){const{name:r,oldHash:o,newHash:s}=t;for(let t=0;t<e.length;t++){const n=e[t];try{if(null!==n({name:r,oldHash:o,newHash:s}))break}catch(e){reportError(new LoaderError(STALE_HOOK_ERROR))}}}hasDocument&&globalThis.addEventListener("error",e=>{lastWindowError=e.error}),!hasSetTimeout&&hasConsole&&console.warn("setTimeout API is not available, watchdog timer on load hook will not be set");class ModuleRegistry{constructor(e){this.namedDefineRegistry=new Map,this.moduleRegistry=new Map,this.baseUrl=e}async load(e,t){const r=await this.resolve(e,t),o=this.getModuleRecord(r,e);return o.evaluated?o.module:(o.evaluationPromise||(o.evaluationPromise=this.topLevelEvaluation(o)),o.evaluationPromise)}async resolve(e,t){const r=this.baseUrl;let o,s=e;const n=this.resolveHook;if(n){for(let e=0;e<n.length;e++){const t=(0,n[e])(s,{parentUrl:r});let i;if((t||null===t)&&(i=isResponseAPromise(t)?await t:t),null!==i){if("string"==typeof i){if(resolveIfNotPlainOrUrl(i,r))throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);s=i;continue}if(o=i&&i.url&&(resolveIfNotPlainOrUrl(i.url,r)||i.url),!o)throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);break}}if(s!==e){if(!o&&this.namedDefineRegistry.has(s))return s;e=s}}if(!o){const t=resolveIfNotPlainOrUrl(e,r)||e;if(this.moduleRegistry.has(t))return t;if(this.resolver){if(o=this.resolver.resolve(t,r),this.namedDefineRegistry.has(t)&&this.namedDefineRegistry.get(t).defined){const e=this.moduleRegistry.get(o);if(!e||e.originalId!==t)return t}}else o=t}if(!o||!isUrl(o)){if(this.namedDefineRegistry.has(e))return e;throw new LoaderError(UNRESOLVED,[e])}return t&&isUrl(o)&&(o+="?importer="+encodeURIComponent(t)),o}has(e){return this.moduleRegistry.has(e)}define(e,t,r,o){const s=this.namedDefineRegistry.get(e);if(s&&s.defined)return void(this.lastDefine=s);const n={name:e,dependencies:t,exporter:r,signatures:o,defined:!0};s&&s.external&&s.external.resolveExternal(n),this.namedDefineRegistry.set(e,n),this.lastDefine=n,o.hashes&&Object.entries(o.hashes).forEach(([e,t])=>{this.checkModuleSignature(e,t)})}registerExternalModules(e){const t=[];if(e.map(e=>{if(this.namedDefineRegistry.has(e))t.push(e);else{let t,r;const o=new Promise((o,s)=>{t=o,r=setTimeout(()=>{s(new LoaderError(MODULE_LOAD_TIMEOUT,[e]))},MODULE_LOAD_TIMEOUT_TIMER)}).finally(()=>{clearTimeout(r)}),s={name:e,defined:!1,external:{resolveExternal:t,moduleDefPromise:o}};this.namedDefineRegistry.set(e,s)}}),t.length)throw new LoaderError(MODULE_ALREADY_LOADED,[t.join(", ")])}checkModuleSignature(e,t){const r=this.namedDefineRegistry.get(e);if(!r){const r={name:e,signatures:{ownHash:t},defined:!1};return void this.namedDefineRegistry.set(e,r)}const o=r.signatures?r.signatures.ownHash:void 0;if(o&&t!==o){const r=this.handleStaleModuleHook;r?evaluateHandleStaleModuleHooks(r,{name:e,oldHash:o,newHash:t}):hasConsole&&console.warn(`stale module detected ${e}, current sig:${o}, new sig:${t}`)}}setImportResolver(e){this.resolver=e}getModuleRecord(e,t){let r=this.moduleRegistry.get(e);if(r)return r;const o=this.getModuleDef(e,t),s=o.then(e=>{const t=e.dependencies.map(e=>{if("exports"!==e)return invariant("require"!==e,NO_AMD_REQUIRE),this.getModuleDependencyRecord.call(this,e)}).filter(e=>void 0!==e);return Promise.all(t)});return r={id:e,originalId:t,module:Object.create(null),dependencyRecords:s,instantiation:o,evaluated:!1,evaluationPromise:null},this.moduleRegistry.set(e,r),r}async getModuleDependencyRecord(e){const t=await this.resolve(e);return this.getModuleRecord(t,e)}async topLevelEvaluation(e){return await this.instantiateAll(e,{}),this.evaluateModule(e,{})}async instantiateAll(e,t){if(!t[e.id]){t[e.id]=!0;const r=await e.dependencyRecords;if(r)for(let e=0;e<r.length;e++){const o=r[e];await this.instantiateAll(o,t)}}}async evaluateModule(e,t){const r=await e.dependencyRecords;r.length>0&&(t[e.id]=!0,await this.evaluateModuleDependencies(r,t));const{exporter:o,dependencies:s}=await e.instantiation,n={},i=await Promise.all(s.map(async e=>{if("exports"===e)return n;const t=await this.resolve(e),r=this.moduleRegistry.get(t);if(!r)throw new LoaderError(FAILED_DEP,[t]);const o=r.module;if(!r.evaluated)return this.getCircularDependencyWrapper(o);if(o)return o.__defaultInterop?o.default:o;throw new LoaderError(FAILED_DEP,[t])}));if(e.evaluated)return e.module;let a=o(...i);void 0!==a?(a={default:a},Object.defineProperty(a,"__defaultInterop",{value:!0})):this.isNamedExportDefaultOnly(n)&&Object.defineProperty(n,"__useDefault",{value:!0});const l=a||n;for(const t in l)Object.defineProperty(e.module,t,{enumerable:!0,set(e){l[t]=e},get:()=>l[t]});return l.__useDefault&&Object.defineProperty(e.module,"__useDefault",{value:!0}),l.__defaultInterop&&Object.defineProperty(e.module,"__defaultInterop",{value:!0}),e.evaluated=!0,Object.freeze(e.module),e.module}isNamedExportDefaultOnly(e){return void 0!==e&&2===Object.getOwnPropertyNames(e).length&&Object.prototype.hasOwnProperty.call(e,"default")&&Object.prototype.hasOwnProperty.call(e,"__esModule")}getCircularDependencyWrapper(e){const t=()=>e.__useDefault||e.__defaultInterop?e.default:e;return t.__circular__=!0,t}async evaluateModuleDependencies(e,t){for(let r=0;r<e.length;r++){const o=e[r];o.evaluated||t[o.id]||(t[o.id]=!0,await this.evaluateModule(o,t))}}async getModuleDef(e,t){this.lastDefine=void 0;const r=isUrl(e)?t!==e?t:void 0:e;let o=r&&this.namedDefineRegistry.get(r);if(o&&o.external)return o.external.moduleDefPromise;if(o&&o.defined)return o;const s=this.baseUrl;return Promise.resolve().then(async()=>{const t=this.loadHook;if(t)for(let r=0;r<t.length;r++){const o=(0,t[r])(e,s),n=isResponseAPromise(o)?await evaluateLoadHook(e,o):o;if(void 0===n)throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);if(n&&null!==n)return evaluateLoadHookResponse(n,e)}return!1}).then(t=>{if(!0!==t&&hasDocument)return loadModuleDef(e)}).then(()=>{if(o=r&&this.namedDefineRegistry.get(r),o||(o=this.lastDefine),!o)throw new LoaderError(FAIL_INSTANTIATE,[e]);return o}).catch(e=>{throw e})}addLoaderPlugin(e){if("object"!=typeof e)throw new LoaderError(INVALID_HOOK);const{loadModule:t,resolveModule:r}=e;r&&(this.resolveHook?this.resolveHook.push(r):this.resolveHook=[r]),t&&(this.loadHook?this.loadHook.push(t):this.loadHook=[t])}registerHandleStaleModuleHook(e){this.handleStaleModuleHook?this.handleStaleModuleHook.push(e):this.handleStaleModuleHook=[e]}}function getMatch(e,t){if(t[e])return e;let r=e.length;do{const o=e.slice(0,r+1);if(o in t)return o}while(-1!==(r=e.lastIndexOf("/",r-1)))}function targetWarning(e,t,r){hasConsole&&console.warn("Package target "+r+", resolving target '"+t+"' for "+e)}function applyPackages(e,t,r){const o=getMatch(e,t);if(o){const r=t[o];if(null===r)return;if(!(e.length>o.length&&"/"!==r[r.length-1])){return e.length>o.length&&"/"===r[r.length-1]&&r.lastIndexOf(o)===r.length-o.length?r.substring(0,r.lastIndexOf(o))+encodeURIComponent(e):r+e.slice(o.length)}targetWarning(o,r,"should have a trailing '/'")}else if(r&&!isUrl(e))return r+encodeURIComponent(e)}function resolveImportMapEntry(e,t,r){e.scopes||(e.scopes={}),e.imports||(e.imports={});const o=e.scopes;let s=r&&getMatch(r,o);for(;s;){const e=applyPackages(t,o[s]);if(e)return e;s=getMatch(s.slice(0,s.lastIndexOf("/")),o)}return applyPackages(t,e.imports,e.default)||isUrl(t)&&t||void 0}function resolveAndComposePackages(e,t,r,o,s){for(const n in e){const i=resolveIfNotPlainOrUrl(n,r)||n,a=e[n];if("string"!=typeof a)continue;const l=resolveImportMapEntry(o,resolveIfNotPlainOrUrl(a,r)||a,s);l?t[i]=l:targetWarning(n,a,"bare specifier did not resolve")}}function resolveAndComposeImportMap(e,t,r={imports:{},scopes:{}}){const o={imports:Object.assign({},r.imports),scopes:Object.assign({},r.scopes),default:e.default};if(e.imports&&resolveAndComposePackages(e.imports,o.imports,t,r),e.scopes)for(const s in e.scopes){const n=resolveUrl(s,t);resolveAndComposePackages(e.scopes[s],o.scopes[n]||(o.scopes[n]={}),t,r,n)}return e.default&&(o.default=resolveIfNotPlainOrUrl(e.default,t)),o}class ImportMapResolver{constructor(e){this.importMap=e}resolve(e,t){return resolveImportMapEntry(this.importMap,e,t)}}const IMPORTMAP_SCRIPT_TYPE="lwr-importmap";function iterateDocumentImportMaps(e,t){const r=document.querySelectorAll(`script[type="${IMPORTMAP_SCRIPT_TYPE}"]`+t),o=Array.from(r).filter(e=>!e.src||(hasConsole&&console.warn("LWR does not support import maps from script src"),!1));Array.prototype.forEach.call(o,e)}async function getImportMapFromScript(e){return Promise.resolve(e.innerHTML)}async function evaluateImportMaps(e){let t={imports:{},scopes:{}},r=Promise.resolve(t);if(hasDocument){if(e||(e=getBaseUrl()),!e)throw new LoaderError(NO_BASE_URL);iterateDocumentImportMaps(o=>{r=r.then(()=>getImportMapFromScript(o)).then(e=>{try{return JSON.parse(e)}catch(e){throw new LoaderError(BAD_IMPORT_MAP)}}).then(r=>(t=resolveAndComposeImportMap(r,o.src||e,t),t))},"")}return r}class Loader{constructor(e){if(e&&(e=e.replace(/\/?$/,"/")),e||(e=getBaseUrl()),!e)throw new LoaderError(NO_BASE_URL);this.baseUrl=e,this.registry=new ModuleRegistry(e),this.services=Object.freeze({addLoaderPlugin:this.registry.addLoaderPlugin.bind(this.registry),handleStaleModule:this.registry.registerHandleStaleModuleHook.bind(this.registry)})}define(e,t,r,o){invariant("string"==typeof e,MISSING_NAME);let s=r,n=t,i=o;"function"==typeof n&&(s=t,n=[],i=r),i=i||{},invariant(Array.isArray(n),INVALID_DEPS),this.registry.define(e,n,s,i)}async load(e,t){return this.registry.load(e,t)}has(e){return this.registry.has(e)}async resolve(e,t){return this.registry.resolve(e,t)}async registerImportMappings(e){let t;if(t=e?resolveAndComposeImportMap(e,this.baseUrl,this.parentImportMap):await evaluateImportMaps(this.baseUrl),this.parentImportMap=t,this.parentImportMap){const e=new ImportMapResolver(this.parentImportMap);this.registry.setImportResolver(e)}}registerExternalModules(e){this.registry.registerExternalModules(e)}}exports.Loader=Loader,Object.defineProperty(exports,"__esModule",{value:!0})}));
7
+ /* LWR Legacy Module Loader Shim v0.6.0-alpha.10 */
8
+ !function(){"use strict";var e;function t(e){}function r(e,r,o,s){const{autoBoot:n,customInit:i}=e;if(function(e,t){if(!e&&!t)throw new Error("The customInit hook is required when autoBoot is false");if(e&&t)throw new Error("The customInit hook must not be defined when autoBoot is true")}(n,i),i){i({initializeApp:r,define:o,onBootstrapError:s,attachDispatcher:t},e)}}!function(e){e[e.Start=0]="Start"}(e||(e={}));const o="function"==typeof setTimeout,s="undefined"!=typeof console;const n=globalThis;n.LWR.requiredModules=n.LWR.requiredModules||[],n.LWR.requiredModules.indexOf("lwr/loaderLegacy/v/0_6_0-alpha_10")<0&&n.LWR.requiredModules.push("lwr/loaderLegacy/v/0_6_0-alpha_10"),new class{constructor(e){this.defineCache={},this.orderedDefs=[],this.global=e,this.config=e.LWR,this.loaderModule="lwr/loaderLegacy/v/0_6_0-alpha_10";const t=this.tempDefine.bind(this);e.LWR.define=t,this.bootReady=this.config.autoBoot,o&&(this.watchdogTimerId=this.startWatchdogTimer());try{r(Object.freeze(this.config),this.postCustomInit.bind(this),t,(e=>{this.errorHandler=e}))}catch(e){this.enterErrorState(e)}}canInit(){const e=this.config.requiredModules.every((e=>this.orderedDefs.includes(e)));return this.bootReady&&e}tempDefine(...e){const t=e[0];this.defineCache[t]=e,this.orderedDefs.push(t),this.canInit()&&(o&&clearTimeout(this.watchdogTimerId),this.initApp())}postCustomInit(){this.bootReady=!0,this.canInit()&&this.initApp()}initApp(){try{const e=function(e,t,r,o){if(!t||"function"!=typeof t[2])throw new Error(`Expected loader with specifier "${e}" to be a module`);const s={};t[2].call(null,s);const{Loader:n}=s,i=new n(r);return o&&o.length&&i.registerExternalModules(o),i.define(e,["exports"],(e=>{Object.assign(e,{define:i.define.bind(i),load:i.load.bind(i),services:i.services})}),t[3]),i}(this.loaderModule,this.defineCache[this.loaderModule],this.config.baseUrl,this.config.preloadModules);this.mountApp(e)}catch(e){this.enterErrorState(e)}}waitForDOMContentLoaded(){return void 0===typeof document||"interactive"===document.readyState||"complete"===document.readyState?Promise.resolve():new Promise((e=>{document.addEventListener("DOMContentLoaded",(()=>{e()}))}))}mountApp(e){const{bootstrapModule:t,rootComponent:r,importMappings:o,rootComponents:s,endpoints:n}=this.config;this.global.LWR=Object.freeze({define:e.define.bind(e),rootComponent:r,rootComponents:s,importMappings:o,endpoints:n}),this.orderedDefs.forEach((t=>{t!==this.loaderModule&&e.define(...this.defineCache[t])}));const{disableInitDefer:i}=this.config;e.registerImportMappings(o).then((()=>{if(!i)return this.waitForDOMContentLoaded()})).then((()=>e.load(t))).catch((e=>{this.enterErrorState(new Error(`Application ${r} could not be loaded: ${e}`))}))}enterErrorState(e){this.errorHandler?this.errorHandler(e):s&&console.error(`An error occurred during LWR bootstrap. ${e.message}`,e.stack)}startWatchdogTimer(){return setTimeout((()=>{this.enterErrorState(new Error("Failed to load required modules - timed out"))}),3e5)}}(n)}(),LWR.define("lwr/loaderLegacy/v/0_6_0-alpha_10",["exports"],(function(exports){"use strict";const templateRegex=/\{([0-9]+)\}/g;function templateString(e,t){return e.replace(templateRegex,((e,r)=>t[r]))}function generateErrorMessage(e,t){const r=Array.isArray(t)?templateString(e.message,t):e.message;return`LWR${e.code}: ${r}`}class LoaderError extends Error{constructor(e,t){super(),this.message=generateErrorMessage(e,t)}}function invariant(e,t){if(!e)throw new LoaderError(t)}const MISSING_NAME=Object.freeze({code:3e3,message:"A module name is required.",level:0}),FAIL_INSTANTIATE=Object.freeze({code:3004,message:"Failed to instantiate module: {0}",level:0}),NO_AMD_REQUIRE=Object.freeze({code:3005,message:"AMD require not supported.",level:0}),FAILED_DEP=Object.freeze({code:3006,level:0,message:"Failed to load dependency: {0}"}),INVALID_DEPS=Object.freeze({code:3007,message:"Unexpected value received for dependencies argument; expected an array.",level:0}),FAIL_LOAD=Object.freeze({code:3008,level:0,message:"Error loading {0}"}),UNRESOLVED=Object.freeze({code:3009,level:0,message:"Unable to resolve bare specifier: {0}"}),NO_BASE_URL=Object.freeze({code:3010,level:0,message:"baseUrl not set"});Object.freeze({code:3011,level:0,message:"Cannot set a loader service multiple times"});const INVALID_HOOK=Object.freeze({code:3012,level:0,message:"Invalid hook received"}),INVALID_LOADER_SERVICE_RESPONSE=Object.freeze({code:3013,level:0,message:"Invalid response received from hook"}),MODULE_LOAD_TIMEOUT=Object.freeze({code:3014,level:0,message:"Error loading {0} - timed out"}),HTTP_FAIL_LOAD=Object.freeze({code:3015,level:0,message:"Error loading {0}, status code {1}"}),STALE_HOOK_ERROR=Object.freeze({code:3016,level:0,message:"An error occurred handling module conflict"}),MODULE_ALREADY_LOADED=Object.freeze({code:3017,level:0,message:"Marking module(s) as externally loaded, but they are already loaded: {0}"}),FAIL_HOOK_LOAD=Object.freeze({code:3018,level:0,message:'Error loading "{0}" from hook'}),BAD_IMPORT_MAP=Object.freeze({code:3011,level:0,message:"import map is not valid"}),hasDocument="undefined"!=typeof document,hasSetTimeout="function"==typeof setTimeout,hasConsole="undefined"!=typeof console;function getBaseUrl(){let e;if(hasDocument){const t=document.querySelector("base[href]");e=t&&t.href}if(!e&&"undefined"!=typeof location){e=location.href.split("#")[0].split("?")[0];const t=e.lastIndexOf("/");-1!==t&&(e=e.slice(0,t+1))}return e}function isUrl(e){return-1!==e.indexOf("://")}function resolveIfNotPlainOrUrl(e,t){if(-1!==e.indexOf("\\")&&(e=e.replace(/\\/g,"/")),"/"===e[0]&&"/"===e[1])return t.slice(0,t.indexOf(":")+1)+e;if("."===e[0]&&("/"===e[1]||"."===e[1]&&("/"===e[2]||2===e.length&&(e+="/"))||1===e.length&&(e+="/"))||"/"===e[0]){const r=t.slice(0,t.indexOf(":")+1);let o;if("/"===t[r.length+1]?"file:"!==r?(o=t.slice(r.length+2),o=o.slice(o.indexOf("/")+1)):o=t.slice(8):o=t.slice(r.length+("/"===t[r.length]?1:0)),"/"===e[0])return t.slice(0,t.length-o.length-1)+e;const s=o.slice(0,o.lastIndexOf("/")+1)+e,n=[];let i=-1;for(let e=0;e<s.length;e++)-1!==i?"/"===s[e]&&(n.push(s.slice(i,e+1)),i=-1):"."===s[e]?"."!==s[e+1]||"/"!==s[e+2]&&e+2!==s.length?"/"===s[e+1]||e+1===s.length?e+=1:i=e:(n.pop(),e+=2):i=e;return-1!==i&&n.push(s.slice(i)),t.slice(0,t.length-o.length)+n.join("")}}function resolveUrl(e,t){return resolveIfNotPlainOrUrl(e,t)||(isUrl(e)?e:resolveIfNotPlainOrUrl("./"+e,t))}function createScript(e){const t=document.createElement("script");return t.charset="utf-8",t.async=!0,t.crossOrigin="anonymous",t.src=e,t}let lastWindowError$1,lastWindowErrorUrl;function loadModuleDef(e){return new Promise((function(t,r){if(hasDocument){const o=createScript(e);o.addEventListener("error",(()=>{r(new LoaderError(FAIL_LOAD,[e]))})),o.addEventListener("load",(()=>{document.head.removeChild(o),lastWindowErrorUrl===e?r(lastWindowError$1):t()})),document.head.appendChild(o)}}))}hasDocument&&window.addEventListener("error",(e=>{lastWindowErrorUrl=e.filename,lastWindowError$1=e.error}));const MODULE_LOAD_TIMEOUT_TIMER=3e5;let lastWindowError;function isCustomResponse(e){return Object.prototype.hasOwnProperty.call(e,"data")&&!Object.prototype.hasOwnProperty.call(e,"blob")}function isFetchResponse(e){return"function"==typeof e.blob}function isResponseAPromise(e){return!(!e||!e.then)}async function evaluateLoadHookResponse(response,id){return Promise.resolve().then((async()=>{if(!response.status)throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);if(200!==response.status)throw new LoaderError(HTTP_FAIL_LOAD,[id,`${response.status}`]);const isResponse=isFetchResponse(response);let code;if(isCustomResponse(response))code=response.data;else{if(!isResponse)throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);code=await response.text()}if(!code)throw new LoaderError(FAIL_LOAD,[id]);code=`${code}\n//# sourceURL=${id}`;try{eval(code)}catch(e){throw new LoaderError(FAIL_LOAD,[id])}if(lastWindowError)throw new LoaderError(FAIL_LOAD,[id]);return!0})).finally((()=>{}))}async function evaluateLoadHook(e,t){return hasSetTimeout?new Promise(((r,o)=>{const s=setTimeout((()=>{o(new LoaderError(MODULE_LOAD_TIMEOUT,[e]))}),MODULE_LOAD_TIMEOUT_TIMER);t.then((e=>{r(e)})).catch((()=>{o(new LoaderError(FAIL_HOOK_LOAD,[e]))})).finally((()=>{clearTimeout(s)}))})):t}function reportError(e){hasConsole&&console.error(e)}function evaluateHandleStaleModuleHooks(e,t){const{name:r,oldHash:o,newHash:s}=t;for(let t=0;t<e.length;t++){const n=e[t];try{if(null!==n({name:r,oldHash:o,newHash:s}))break}catch(e){reportError(new LoaderError(STALE_HOOK_ERROR))}}}hasDocument&&globalThis.addEventListener("error",(e=>{lastWindowError=e.error})),!hasSetTimeout&&hasConsole&&console.warn("setTimeout API is not available, watchdog timer on load hook will not be set");class ModuleRegistry{constructor(e){this.namedDefineRegistry=new Map,this.moduleRegistry=new Map,this.baseUrl=e}async load(e,t){const r=await this.resolve(e,t),o=this.getModuleRecord(r,e);return o.evaluated?o.module:(o.evaluationPromise||(o.evaluationPromise=this.topLevelEvaluation(o)),o.evaluationPromise)}async resolve(e,t){const r=this.baseUrl;let o,s=e;const n=this.resolveHook;if(n){for(let e=0;e<n.length;e++){const t=(0,n[e])(s,{parentUrl:r});let i;if((t||null===t)&&(i=isResponseAPromise(t)?await t:t),null!==i){if("string"==typeof i){if(resolveIfNotPlainOrUrl(i,r))throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);s=i;continue}if(o=i&&i.url&&(resolveIfNotPlainOrUrl(i.url,r)||i.url),!o)throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);break}}if(s!==e){if(!o&&this.namedDefineRegistry.has(s))return s;e=s}}if(!o){const t=resolveIfNotPlainOrUrl(e,r)||e;if(this.moduleRegistry.has(t))return t;if(this.resolver){if(o=this.resolver.resolve(t,r),this.namedDefineRegistry.has(t)&&this.namedDefineRegistry.get(t).defined){const e=this.moduleRegistry.get(o);if(!e||!e.aliases.has(t))return t}}else o=t}if(!o||!isUrl(o)){if(this.namedDefineRegistry.has(e))return e;throw new LoaderError(UNRESOLVED,[e])}return t&&isUrl(o)&&(o+=`?importer=${encodeURIComponent(t)}`),o}has(e){return this.moduleRegistry.has(e)}define(e,t,r,o){const s=this.namedDefineRegistry.get(e);if(s&&s.defined)return void(this.lastDefine=s);const n={name:e,dependencies:t,exporter:r,signatures:o,defined:!0};s&&s.external&&s.external.resolveExternal(n),this.namedDefineRegistry.set(e,n),this.lastDefine=n,o.hashes&&Object.entries(o.hashes).forEach((([e,t])=>{this.checkModuleSignature(e,t)}))}registerExternalModules(e){const t=[];if(e.map((e=>{if(this.namedDefineRegistry.has(e))t.push(e);else{let t,r;const o=new Promise(((o,s)=>{t=o,r=setTimeout((()=>{s(new LoaderError(MODULE_LOAD_TIMEOUT,[e]))}),MODULE_LOAD_TIMEOUT_TIMER)})).finally((()=>{clearTimeout(r)})),s={name:e,defined:!1,external:{resolveExternal:t,moduleDefPromise:o}};this.namedDefineRegistry.set(e,s)}})),t.length)throw new LoaderError(MODULE_ALREADY_LOADED,[t.join(", ")])}checkModuleSignature(e,t){const r=this.namedDefineRegistry.get(e);if(!r){const r={name:e,signatures:{ownHash:t},defined:!1};return void this.namedDefineRegistry.set(e,r)}const o=r.signatures?r.signatures.ownHash:void 0;if(o&&t!==o){const r=this.handleStaleModuleHook;r?evaluateHandleStaleModuleHooks(r,{name:e,oldHash:o,newHash:t}):hasConsole&&console.warn(`stale module detected ${e}, current sig:${o}, new sig:${t}`)}}setImportResolver(e){this.resolver=e}getModuleRecord(e,t){let r=this.moduleRegistry.get(e);if(r)return r.aliases.has(t)||r.aliases.add(t),r;const o=this.getModuleDef(e,t),s=o.then((e=>{const t=e.dependencies.map((e=>{if("exports"!==e)return invariant("require"!==e,NO_AMD_REQUIRE),this.getModuleDependencyRecord.call(this,e)})).filter((e=>void 0!==e));return Promise.all(t)}));return r={id:e,aliases:new Set([t]),module:Object.create(null),dependencyRecords:s,instantiation:o,evaluated:!1,evaluationPromise:null},this.moduleRegistry.set(e,r),r}async getModuleDependencyRecord(e){const t=await this.resolve(e);return this.getModuleRecord(t,e)}async topLevelEvaluation(e){return await this.instantiateAll(e,{}),this.evaluateModule(e,{})}async instantiateAll(e,t){if(!t[e.id]){t[e.id]=!0;const r=await e.dependencyRecords;if(r)for(let e=0;e<r.length;e++){const o=r[e];await this.instantiateAll(o,t)}}}async evaluateModule(e,t){const r=await e.dependencyRecords;r.length>0&&(t[e.id]=!0,await this.evaluateModuleDependencies(r,t));const{exporter:o,dependencies:s}=await e.instantiation,n={},i=await Promise.all(s.map((async e=>{if("exports"===e)return n;const t=await this.resolve(e),r=this.moduleRegistry.get(t);if(!r)throw new LoaderError(FAILED_DEP,[t]);const o=r.module;if(!r.evaluated)return this.getCircularDependencyWrapper(o);if(o)return o.__defaultInterop?o.default:o;throw new LoaderError(FAILED_DEP,[t])})));if(e.evaluated)return e.module;let a=o(...i);void 0!==a?(a={default:a},Object.defineProperty(a,"__defaultInterop",{value:!0})):this.isNamedExportDefaultOnly(n)&&Object.defineProperty(n,"__useDefault",{value:!0});const l=a||n;for(const t in l)Object.defineProperty(e.module,t,{enumerable:!0,set(e){l[t]=e},get:()=>l[t]});return l.__useDefault&&Object.defineProperty(e.module,"__useDefault",{value:!0}),l.__defaultInterop&&Object.defineProperty(e.module,"__defaultInterop",{value:!0}),e.evaluated=!0,Object.freeze(e.module),e.module}isNamedExportDefaultOnly(e){return void 0!==e&&2===Object.getOwnPropertyNames(e).length&&Object.prototype.hasOwnProperty.call(e,"default")&&Object.prototype.hasOwnProperty.call(e,"__esModule")}getCircularDependencyWrapper(e){const t=()=>e.__useDefault||e.__defaultInterop?e.default:e;return t.__circular__=!0,t}async evaluateModuleDependencies(e,t){for(let r=0;r<e.length;r++){const o=e[r];o.evaluated||t[o.id]||(t[o.id]=!0,await this.evaluateModule(o,t))}}async getModuleDef(e,t){this.lastDefine=void 0;const r=isUrl(e)?t!==e?t:void 0:e;let o=r&&this.namedDefineRegistry.get(r);if(o&&o.external)return o.external.moduleDefPromise;if(o&&o.defined)return o;const s=this.baseUrl;return Promise.resolve().then((async()=>{const t=this.loadHook;if(t)for(let r=0;r<t.length;r++){const o=(0,t[r])(e,s),n=isResponseAPromise(o)?await evaluateLoadHook(e,o):o;if(void 0===n)throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);if(n&&null!==n)return evaluateLoadHookResponse(n,e)}return!1})).then((t=>{if(!0!==t&&hasDocument)return loadModuleDef(e)})).then((()=>{if(o=r&&this.namedDefineRegistry.get(r),o||(o=this.lastDefine),!o)throw new LoaderError(FAIL_INSTANTIATE,[e]);return o})).catch((e=>{throw e}))}addLoaderPlugin(e){if("object"!=typeof e)throw new LoaderError(INVALID_HOOK);const{loadModule:t,resolveModule:r}=e;r&&(this.resolveHook?this.resolveHook.push(r):this.resolveHook=[r]),t&&(this.loadHook?this.loadHook.push(t):this.loadHook=[t])}registerHandleStaleModuleHook(e){this.handleStaleModuleHook?this.handleStaleModuleHook.push(e):this.handleStaleModuleHook=[e]}}function getMatch(e,t){if(t[e])return e;let r=e.length;do{const o=e.slice(0,r+1);if(o in t)return o}while(-1!==(r=e.lastIndexOf("/",r-1)))}function targetWarning(e,t,r){hasConsole&&console.warn("Package target "+r+", resolving target '"+t+"' for "+e)}function applyPackages(e,t,r){const o=getMatch(e,t);if(o){const r=t[o];if(null===r)return;if(!(e.length>o.length&&"/"!==r[r.length-1])){return e.length>o.length&&"/"===r[r.length-1]&&r.lastIndexOf(o)===r.length-o.length?r.substring(0,r.lastIndexOf(o))+encodeURIComponent(e):r+e.slice(o.length)}targetWarning(o,r,"should have a trailing '/'")}else if(r&&!isUrl(e))return r+encodeURIComponent(e)}function resolveImportMapEntry(e,t,r){e.scopes||(e.scopes={}),e.imports||(e.imports={});const o=e.scopes;let s=r&&getMatch(r,o);for(;s;){const e=applyPackages(t,o[s]);if(e)return e;s=getMatch(s.slice(0,s.lastIndexOf("/")),o)}return applyPackages(t,e.imports,e.default)||isUrl(t)&&t||void 0}function resolveAndComposePackages(e,t,r,o,s){for(const n in e){const i=resolveIfNotPlainOrUrl(n,r)||n,a=e[n];if("string"!=typeof a)continue;const l=resolveImportMapEntry(o,resolveIfNotPlainOrUrl(a,r)||a,s);l?t[i]=l:targetWarning(n,a,"bare specifier did not resolve")}}function resolveAndComposeImportMap(e,t,r={imports:{},scopes:{}}){const o={imports:Object.assign({},r.imports),scopes:Object.assign({},r.scopes),default:e.default};if(e.imports&&resolveAndComposePackages(e.imports,o.imports,t,r),e.scopes)for(const s in e.scopes){const n=resolveUrl(s,t);resolveAndComposePackages(e.scopes[s],o.scopes[n]||(o.scopes[n]={}),t,r,n)}return e.default&&(o.default=resolveIfNotPlainOrUrl(e.default,t)),o}class ImportMapResolver{constructor(e){this.importMap=e}resolve(e,t){return resolveImportMapEntry(this.importMap,e,t)}}const IMPORTMAP_SCRIPT_TYPE="lwr-importmap";function iterateDocumentImportMaps(e,t){const r=document.querySelectorAll(`script[type="${IMPORTMAP_SCRIPT_TYPE}"]`+t),o=Array.from(r).filter((e=>!e.src||(hasConsole&&console.warn("LWR does not support import maps from script src"),!1)));Array.prototype.forEach.call(o,e)}async function getImportMapFromScript(e){return Promise.resolve(e.innerHTML)}async function evaluateImportMaps(e){let t={imports:{},scopes:{}},r=Promise.resolve(t);if(hasDocument){if(e||(e=getBaseUrl()),!e)throw new LoaderError(NO_BASE_URL);iterateDocumentImportMaps((o=>{r=r.then((()=>getImportMapFromScript(o))).then((e=>{try{return JSON.parse(e)}catch(e){throw new LoaderError(BAD_IMPORT_MAP)}})).then((r=>(t=resolveAndComposeImportMap(r,o.src||e,t),t)))}),"")}return r}class Loader{constructor(e){if(e&&(e=e.replace(/\/?$/,"/")),e||(e=getBaseUrl()),!e)throw new LoaderError(NO_BASE_URL);this.baseUrl=e,this.registry=new ModuleRegistry(e),this.services=Object.freeze({addLoaderPlugin:this.registry.addLoaderPlugin.bind(this.registry),handleStaleModule:this.registry.registerHandleStaleModuleHook.bind(this.registry)})}define(e,t,r,o){invariant("string"==typeof e,MISSING_NAME);let s=r,n=t,i=o;"function"==typeof n&&(s=t,n=[],i=r),i=i||{},invariant(Array.isArray(n),INVALID_DEPS),this.registry.define(e,n,s,i)}async load(e,t){return this.registry.load(e,t)}has(e){return this.registry.has(e)}async resolve(e,t){return this.registry.resolve(e,t)}async registerImportMappings(e){let t;if(t=e?resolveAndComposeImportMap(e,this.baseUrl,this.parentImportMap):await evaluateImportMaps(this.baseUrl),this.parentImportMap=t,this.parentImportMap){const e=new ImportMapResolver(this.parentImportMap);this.registry.setImportResolver(e)}}registerExternalModules(e){this.registry.registerExternalModules(e)}}exports.Loader=Loader,Object.defineProperty(exports,"__esModule",{value:!0})}));
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: MIT
5
5
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
6
6
  */
7
- /* LWR Legacy Module Loader Shim v0.6.0-alpha.1 */
7
+ /* LWR Legacy Module Loader Shim v0.6.0-alpha.10 */
8
8
  (function () {
9
9
  'use strict';
10
10
 
@@ -36,6 +36,13 @@
36
36
 
37
37
  const REQUIRED_MODULES_TIMEOUT = 300 * 1000;
38
38
 
39
+ var Phase;
40
+ (function (Phase) {
41
+ Phase[Phase["Start"] = 0] = "Start";
42
+ })(Phase || (Phase = {}));
43
+ function attachDispatcher(dispatcher) {
44
+ }
45
+
39
46
  // Check for errors with autoBoot and customInit
40
47
  function validatePreInit(autoBoot, customInit) {
41
48
  // If autoBoot === false, there must be a customInit hook
@@ -58,6 +65,7 @@
58
65
  initializeApp,
59
66
  define,
60
67
  onBootstrapError,
68
+ attachDispatcher,
61
69
  };
62
70
  customInit(lwr, config);
63
71
  }
@@ -75,7 +83,7 @@
75
83
  // Parse configuration
76
84
  this.global = global;
77
85
  this.config = global.LWR;
78
- this.loaderModule = 'lwr/loaderLegacy/v/0_6_0-alpha_1';
86
+ this.loaderModule = 'lwr/loaderLegacy/v/0_6_0-alpha_10';
79
87
  // Set up the temporary LWR.define function and customInit hook
80
88
  const tempDefine = this.tempDefine.bind(this);
81
89
  global.LWR.define = tempDefine;
@@ -214,8 +222,8 @@
214
222
  // The loader module is ALWAYS required
215
223
  const GLOBAL = globalThis;
216
224
  GLOBAL.LWR.requiredModules = GLOBAL.LWR.requiredModules || [];
217
- if (GLOBAL.LWR.requiredModules.indexOf('lwr/loaderLegacy/v/0_6_0-alpha_1') < 0) {
218
- GLOBAL.LWR.requiredModules.push('lwr/loaderLegacy/v/0_6_0-alpha_1');
225
+ if (GLOBAL.LWR.requiredModules.indexOf('lwr/loaderLegacy/v/0_6_0-alpha_10') < 0) {
226
+ GLOBAL.LWR.requiredModules.push('lwr/loaderLegacy/v/0_6_0-alpha_10');
219
227
  }
220
228
  new LoaderShim(GLOBAL);
221
229
 
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: MIT
5
5
  * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
6
6
  */
7
- /* LWR Module Loader Shim v0.6.0-alpha.1 */
7
+ /* LWR Module Loader Shim v0.6.0-alpha.10 */
8
8
  (function () {
9
9
  'use strict';
10
10
 
@@ -34,6 +34,35 @@
34
34
  }
35
35
 
36
36
  const REQUIRED_MODULES_TIMEOUT = 300 * 1000;
37
+ const METRIC_END = 'lwr.bootstrap.end';
38
+ const METRIC_ERROR = 'lwr.bootstrap.error';
39
+
40
+ var Phase;
41
+ (function (Phase) {
42
+ Phase[Phase["Start"] = 0] = "Start";
43
+ })(Phase || (Phase = {}));
44
+ // Attach a custom dispatcher
45
+ let customDispatcher;
46
+ function attachDispatcher(dispatcher) {
47
+ customDispatcher = dispatcher;
48
+ }
49
+ // Check if the Performance API is available
50
+ // e.g. JSDom (used in Jest) doesn't implement these
51
+ const isPerfSupported = typeof globalThis.performance !== 'undefined' && typeof globalThis.performance.mark === 'function';
52
+ // For marking request metrics
53
+ // Fallback to the Performance API if there is no custom dispatcher
54
+ function logOperationStart({ id, specifier }) {
55
+ if (customDispatcher) {
56
+ customDispatcher({ id, phase: Phase.Start, specifier });
57
+ }
58
+ else if (isPerfSupported) {
59
+ globalThis.performance.mark(id + (specifier ? `.${specifier}` : ''));
60
+ }
61
+ }
62
+ function getProfilerAPI() {
63
+ // Create the public Profiler API
64
+ return { logOperationStart: logOperationStart.bind(this) };
65
+ }
37
66
 
38
67
  // Check for errors with autoBoot and customInit
39
68
  function validatePreInit(autoBoot, customInit) {
@@ -57,6 +86,7 @@
57
86
  initializeApp,
58
87
  define,
59
88
  onBootstrapError,
89
+ attachDispatcher,
60
90
  };
61
91
  customInit(lwr, config);
62
92
  }
@@ -74,7 +104,9 @@
74
104
  // Parse configuration
75
105
  this.global = global;
76
106
  this.config = global.LWR;
77
- this.loaderModule = 'lwr/loader/v/0_6_0-alpha_1';
107
+ this.loaderModule = 'lwr/loader/v/0_6_0-alpha_10';
108
+ // Set up the profiler for instrumentation
109
+ this.profiler = getProfilerAPI();
78
110
  // Set up the temporary LWR.define function and customInit hook
79
111
  const tempDefine = this.tempDefine.bind(this);
80
112
  global.LWR.define = tempDefine;
@@ -136,6 +168,7 @@
136
168
  const loaderConfig = {
137
169
  endpoints: this.config.endpoints,
138
170
  baseUrl: this.config.baseUrl,
171
+ profiler: this.profiler,
139
172
  };
140
173
  const loader = createLoader(this.loaderModule, this.defineCache[this.loaderModule], loaderConfig, this.config.preloadModules);
141
174
  this.mountApp(loader);
@@ -190,12 +223,16 @@
190
223
  }
191
224
  })
192
225
  .then(() => loader.load(bootstrapModule))
226
+ .then(() => {
227
+ this.profiler.logOperationStart({ id: METRIC_END });
228
+ })
193
229
  .catch((reason) => {
194
230
  this.enterErrorState(new Error(`Application ${rootComponent} could not be loaded: ${reason}`));
195
231
  });
196
232
  }
197
233
  // Trigger bootstrap error state, and call error handler if registered
198
234
  enterErrorState(error) {
235
+ this.profiler.logOperationStart({ id: METRIC_ERROR });
199
236
  if (this.errorHandler) {
200
237
  this.errorHandler(error);
201
238
  }
@@ -218,14 +255,14 @@
218
255
  // The loader module is ALWAYS required
219
256
  const GLOBAL = globalThis;
220
257
  GLOBAL.LWR.requiredModules = GLOBAL.LWR.requiredModules || [];
221
- if (GLOBAL.LWR.requiredModules.indexOf('lwr/loader/v/0_6_0-alpha_1') < 0) {
222
- GLOBAL.LWR.requiredModules.push('lwr/loader/v/0_6_0-alpha_1');
258
+ if (GLOBAL.LWR.requiredModules.indexOf('lwr/loader/v/0_6_0-alpha_10') < 0) {
259
+ GLOBAL.LWR.requiredModules.push('lwr/loader/v/0_6_0-alpha_10');
223
260
  }
224
261
  new LoaderShim(GLOBAL);
225
262
 
226
263
  }());
227
264
 
228
- LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use strict';
265
+ LWR.define('lwr/loader/v/0_6_0-alpha_10', ['exports'], function (exports) { 'use strict';
229
266
 
230
267
  const templateRegex = /\{([0-9]+)\}/g;
231
268
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -522,6 +559,13 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
522
559
  });
523
560
  }
524
561
 
562
+ const MODULE_LOAD_TIMEOUT_TIMER = 300000;
563
+ const METRIC_MODULE_DEFINE = 'lwr.loader.module.define';
564
+ const METRIC_MODULE_FETCH = 'lwr.loader.module.fetch';
565
+ const METRIC_MAPPINGS_FETCH = 'lwr.loader.mappings.fetch';
566
+ const METRIC_MODULE_ERROR = 'lwr.loader.module.error';
567
+ const METRIC_MAPPINGS_ERROR = 'lwr.loader.mappings.error';
568
+
525
569
  /* spec based import map resolver */
526
570
  class ImportMetadataResolver {
527
571
  constructor(config, invalidationCallback) {
@@ -637,6 +681,7 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
637
681
  if (pending) {
638
682
  return pending;
639
683
  }
684
+ this.config.profiler.logOperationStart({ id: METRIC_MAPPINGS_FETCH, specifier });
640
685
  const fetchMappingService = this.hasMappingHooks()
641
686
  ? this.evaluateMappingHooks
642
687
  : this.fetchNewMappings;
@@ -695,6 +740,7 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
695
740
  const uri = resolveUrl(this.buildMappingUrl(specifier), this.getBaseUrl());
696
741
  return globalThis.fetch(uri).then((res) => {
697
742
  if (!res.ok) {
743
+ this.config.profiler.logOperationStart({ id: METRIC_MAPPINGS_ERROR, specifier });
698
744
  throw new LoaderError(UNRESOLVED, [specifier]);
699
745
  }
700
746
  return res
@@ -748,8 +794,6 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
748
794
  }
749
795
  }
750
796
 
751
- const MODULE_LOAD_TIMEOUT_TIMER = 300000;
752
-
753
797
  let lastWindowError;
754
798
  if (hasDocument) {
755
799
  globalThis.addEventListener('error', (evt) => {
@@ -842,6 +886,7 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
842
886
  this.namedDefineRegistry = new Map();
843
887
  // The evaluted module registry where the module identifier (name or URL?) is the key
844
888
  this.moduleRegistry = new Map();
889
+ this.profiler = config.profiler;
845
890
  this.resolver = new ImportMetadataResolver(config, this.importMetadataInvalidationCallback.bind(this));
846
891
  }
847
892
  async load(id, importer) {
@@ -908,10 +953,11 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
908
953
  }
909
954
  const resolvedUrl = this.resolver.resolveLocal(resolvedOrPlain);
910
955
  if (resolvedUrl) {
911
- // return the plain id IFF its already defined && the resolvedUrl is NOT already in the module registry
912
- if (this.namedDefineRegistry.has(resolvedOrPlain)) {
956
+ // return the plain id if it is already defined && the resolvedUrl is NOT already in the module registry
957
+ if (this.namedDefineRegistry.has(resolvedOrPlain) &&
958
+ this.namedDefineRegistry.get(resolvedOrPlain).defined) {
913
959
  const record = this.moduleRegistry.get(resolvedUrl);
914
- if (!record || record.originalId !== resolvedOrPlain) {
960
+ if (!record || !record.aliases.has(resolvedOrPlain)) {
915
961
  return resolvedOrPlain;
916
962
  }
917
963
  }
@@ -962,6 +1008,7 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
962
1008
  // if module is "external", resolve the external promise to notify any dependees
963
1009
  mod.external.resolveExternal(moduleDef);
964
1010
  }
1011
+ this.profiler.logOperationStart({ id: METRIC_MODULE_DEFINE, specifier: name });
965
1012
  this.namedDefineRegistry.set(name, moduleDef);
966
1013
  this.lastDefine = moduleDef;
967
1014
  }
@@ -1012,6 +1059,10 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
1012
1059
  getModuleRecord(resolvedId, id) {
1013
1060
  let moduleRecord = this.moduleRegistry.get(resolvedId);
1014
1061
  if (moduleRecord) {
1062
+ // Make sure the original id is in the alias set
1063
+ if (!moduleRecord.aliases.has(id)) {
1064
+ moduleRecord.aliases.add(id);
1065
+ }
1015
1066
  return moduleRecord;
1016
1067
  }
1017
1068
  const instantiation = this.getModuleDef(resolvedId, id);
@@ -1031,7 +1082,7 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
1031
1082
  });
1032
1083
  moduleRecord = {
1033
1084
  id: resolvedId,
1034
- originalId: id,
1085
+ aliases: new Set([id]),
1035
1086
  module: Object.create(null),
1036
1087
  dependencyRecords,
1037
1088
  instantiation,
@@ -1187,6 +1238,8 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
1187
1238
  return moduleDef;
1188
1239
  }
1189
1240
  const parentUrl = this.resolver.getBaseUrl(); // only support baseUrl for now
1241
+ const specifier = moduleName || originalId;
1242
+ this.profiler.logOperationStart({ id: METRIC_MODULE_FETCH, specifier });
1190
1243
  return Promise.resolve()
1191
1244
  .then(async () => {
1192
1245
  const loadHooks = this.loadHook;
@@ -1227,6 +1280,7 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
1227
1280
  return moduleDef;
1228
1281
  })
1229
1282
  .catch((e) => {
1283
+ this.profiler.logOperationStart({ id: METRIC_MODULE_ERROR, specifier });
1230
1284
  throw e;
1231
1285
  });
1232
1286
  }
@@ -1288,6 +1342,7 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
1288
1342
  constructor(config) {
1289
1343
  let baseUrl = config.baseUrl;
1290
1344
  const mappingEndpoint = config.endpoints ? config.endpoints.uris.mapping : undefined;
1345
+ let profiler = config.profiler;
1291
1346
  if (!mappingEndpoint) {
1292
1347
  throw new LoaderError(NO_MAPPING_URL);
1293
1348
  }
@@ -1303,7 +1358,15 @@ LWR.define('lwr/loader/v/0_6_0-alpha_1', ['exports'], function (exports) { 'use
1303
1358
  if (!baseUrl) {
1304
1359
  throw new LoaderError(NO_BASE_URL);
1305
1360
  }
1306
- this.registry = new ModuleRegistry(Object.freeze({ endpoints: config.endpoints, baseUrl }));
1361
+ if (!profiler) {
1362
+ // default noop profiler
1363
+ profiler = {
1364
+ logOperationStart: () => {
1365
+ /* noop */
1366
+ },
1367
+ };
1368
+ }
1369
+ this.registry = new ModuleRegistry(Object.freeze({ endpoints: config.endpoints, baseUrl, profiler }));
1307
1370
  this.services = Object.freeze({
1308
1371
  addLoaderPlugin: this.registry.addLoaderPlugin.bind(this.registry),
1309
1372
  handleStaleModule: this.registry.registerHandleStaleModuleHook.bind(this.registry),