@lwrjs/loader 0.6.4 → 0.7.0-alpha.2
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 +12 -2
- package/build/assets/prod/lwr-error-shim.js +8 -0
- package/build/assets/prod/lwr-loader-shim-legacy.bundle.js +14 -10
- package/build/assets/prod/lwr-loader-shim-legacy.bundle.min.js +2 -2
- package/build/assets/prod/lwr-loader-shim-legacy.js +13 -9
- package/build/assets/prod/lwr-loader-shim.bundle.js +60 -39
- package/build/assets/prod/lwr-loader-shim.bundle.min.js +2 -2
- package/build/assets/prod/lwr-loader-shim.js +13 -9
- package/build/cjs/index.cjs +3 -0
- package/build/cjs/modules/lwr/loader/moduleRegistry/importMetadataResolver.cjs +40 -25
- package/build/cjs/modules/lwr/loader/moduleRegistry/moduleRegistry.cjs +2 -2
- package/build/index.d.ts +1 -0
- package/build/index.js +3 -0
- package/build/modules/lwr/esmLoader/esmLoader.js +1 -1
- package/build/modules/lwr/loader/loader.js +47 -30
- package/build/modules/lwr/loaderLegacy/loaderLegacy.js +1 -1
- package/package.json +10 -8
package/README.md
CHANGED
|
@@ -342,7 +342,13 @@ Read more in the [bootstrap RFC](https://rfcs.lwc.dev/rfcs/lwr/0000-lwr-bootstra
|
|
|
342
342
|
Some host environments may desire to defer or manage when the application is initialized. To do this, the `customInit` bootstrap hook can be implemented by:
|
|
343
343
|
|
|
344
344
|
- setting `globalThis.LWR.autoBoot` to `false`
|
|
345
|
-
- adding a `globalThis.LWR.customInit` function
|
|
345
|
+
- adding a `globalThis.LWR.customInit` function
|
|
346
|
+
|
|
347
|
+
A host environment may set a custom error handler by implementing the `onError` hook:
|
|
348
|
+
|
|
349
|
+
- setting a `globalThis.LWR.onError` function
|
|
350
|
+
|
|
351
|
+
**Note**: An error handler set using `CustomInitAPI.onBootstrapError()` takes precedence over `globalThis.LWR.onError()`.
|
|
346
352
|
|
|
347
353
|
```ts
|
|
348
354
|
type CustomInitFunction = (lwr: CustomInitAPI, config: ClientBootstrapConfig) => void;
|
|
@@ -352,7 +358,7 @@ type CustomInitAPI = {
|
|
|
352
358
|
// called to trigger app initilization
|
|
353
359
|
initializeApp: InitializeApp;
|
|
354
360
|
// register bootstrap error state callback
|
|
355
|
-
onBootstrapError:
|
|
361
|
+
onBootstrapError: RegisterCustomErrorHandler;
|
|
356
362
|
// Register a dispatcher for the metrics profiler
|
|
357
363
|
attachDispatcher: (dispatcher: LogDispatcher) => void;
|
|
358
364
|
// A convenience pointer to the globally available LWR.define
|
|
@@ -366,6 +372,7 @@ type ClientBootstrapConfig = {
|
|
|
366
372
|
requiredModules: string[];
|
|
367
373
|
preloadModules?: string[];
|
|
368
374
|
customInit?: CustomInitFunction;
|
|
375
|
+
onError?: CustomErrorHandler;
|
|
369
376
|
baseUrl?: string;
|
|
370
377
|
endpoints?: Endpoints;
|
|
371
378
|
imports?: ImportMetadataImports;
|
|
@@ -391,6 +398,9 @@ The loader shim calls the `customInit` hook and **will not** start the applicati
|
|
|
391
398
|
// execute custom pre-initialization code
|
|
392
399
|
lwr.initializeApp();
|
|
393
400
|
},
|
|
401
|
+
onError: (error) => {
|
|
402
|
+
// report error
|
|
403
|
+
},
|
|
394
404
|
});
|
|
395
405
|
</script>
|
|
396
406
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2021, salesforce.com, inc.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
|
|
6
|
+
*/
|
|
7
|
+
/* LWR Error Shim v0.7.0-alpha.2 */
|
|
8
|
+
!function(){"use strict";if(!(globalThis.LWR&&globalThis.LWR.define)){const o=new Error("The LWR application failed to bootstrap");if(!globalThis.LWR||!globalThis.LWR.onError)throw o;globalThis.LWR.onError(o)}}();
|
|
@@ -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.
|
|
7
|
+
/* LWR Legacy Module Loader Shim v0.7.0-alpha.2 */
|
|
8
8
|
(function () {
|
|
9
9
|
'use strict';
|
|
10
10
|
|
|
@@ -135,20 +135,24 @@
|
|
|
135
135
|
constructor(global) {
|
|
136
136
|
this.defineCache = {};
|
|
137
137
|
this.orderedDefs = [];
|
|
138
|
+
// Start watchdog timer
|
|
139
|
+
if (hasSetTimeout) {
|
|
140
|
+
this.watchdogTimerId = this.startWatchdogTimer();
|
|
141
|
+
}
|
|
138
142
|
// Parse configuration
|
|
139
143
|
this.global = global;
|
|
140
144
|
this.config = global.LWR;
|
|
141
|
-
this.loaderModule = 'lwr/loaderLegacy/v/
|
|
145
|
+
this.loaderModule = 'lwr/loaderLegacy/v/0_7_0-alpha_2';
|
|
146
|
+
// Set up error handler
|
|
147
|
+
this.errorHandler = this.config.onError;
|
|
142
148
|
// Set up the temporary LWR.define function and customInit hook
|
|
143
149
|
const tempDefine = this.tempDefine.bind(this);
|
|
144
150
|
global.LWR.define = tempDefine;
|
|
145
151
|
this.bootReady = this.config.autoBoot;
|
|
146
|
-
// Start watchdog timer
|
|
147
|
-
if (hasSetTimeout) {
|
|
148
|
-
this.watchdogTimerId = this.startWatchdogTimer();
|
|
149
|
-
}
|
|
150
152
|
try {
|
|
151
153
|
customInit(Object.freeze(this.config), this.postCustomInit.bind(this), tempDefine, (e) => {
|
|
154
|
+
// customInit handlers can overwrite
|
|
155
|
+
// the error handler with onBootstrapError
|
|
152
156
|
this.errorHandler = e;
|
|
153
157
|
});
|
|
154
158
|
}
|
|
@@ -239,7 +243,7 @@
|
|
|
239
243
|
const exporter = (exports) => {
|
|
240
244
|
Object.assign(exports, { logOperationStart, logOperationEnd });
|
|
241
245
|
};
|
|
242
|
-
loader.define('lwr/profiler/v/
|
|
246
|
+
loader.define('lwr/profiler/v/0_7_0-alpha_2', ['exports'], exporter, {});
|
|
243
247
|
}
|
|
244
248
|
// Set up the application globals, import map, root custom element...
|
|
245
249
|
mountApp(loader) {
|
|
@@ -298,14 +302,14 @@
|
|
|
298
302
|
// The loader module is ALWAYS required
|
|
299
303
|
const GLOBAL = globalThis;
|
|
300
304
|
GLOBAL.LWR.requiredModules = GLOBAL.LWR.requiredModules || [];
|
|
301
|
-
if (GLOBAL.LWR.requiredModules.indexOf('lwr/loaderLegacy/v/
|
|
302
|
-
GLOBAL.LWR.requiredModules.push('lwr/loaderLegacy/v/
|
|
305
|
+
if (GLOBAL.LWR.requiredModules.indexOf('lwr/loaderLegacy/v/0_7_0-alpha_2') < 0) {
|
|
306
|
+
GLOBAL.LWR.requiredModules.push('lwr/loaderLegacy/v/0_7_0-alpha_2');
|
|
303
307
|
}
|
|
304
308
|
new LoaderShim(GLOBAL);
|
|
305
309
|
|
|
306
310
|
}());
|
|
307
311
|
|
|
308
|
-
LWR.define('lwr/loaderLegacy/v/
|
|
312
|
+
LWR.define('lwr/loaderLegacy/v/0_7_0-alpha_2', ['exports'], function (exports) { 'use strict';
|
|
309
313
|
|
|
310
314
|
const templateRegex = /\{([0-9]+)\}/g;
|
|
311
315
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -4,5 +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.
|
|
8
|
-
!function(){"use strict";var e;let t;function r(e){t=e}!function(e){e[e.Start=0]="Start",e[e.End=1]="End"}(e||(e={}));const o=globalThis.performance,s=void 0!==o&&"function"==typeof o.mark&&"function"==typeof o.clearMarks&&"function"==typeof o.measure&&"function"==typeof o.clearMeasures;function n({id:r,specifier:n}){t?t({id:r,phase:e.Start,specifier:n}):s&&o.mark(r+(n?`.${n}`:""))}function i({id:r,specifier:n}){if(t)t({id:r,phase:e.End,specifier:n});else if(s){const e=n?`.${n}`:"",t=r+e,s=`${r}.duration${e}`;o.measure(s,t),o.clearMarks(t),o.clearMeasures(s)}}function a(e,t,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:t,define:o,onBootstrapError:s,attachDispatcher:r},e)}}const l="function"==typeof setTimeout,d="undefined"!=typeof console;const c=globalThis;c.LWR.requiredModules=c.LWR.requiredModules||[],c.LWR.requiredModules.indexOf("lwr/loaderLegacy/v/0_6_4")<0&&c.LWR.requiredModules.push("lwr/loaderLegacy/v/0_6_4"),new class{constructor(e){this.defineCache={},this.orderedDefs=[],this.global=e,this.config=e.LWR,this.loaderModule="lwr/loaderLegacy/v/0_6_4";const t=this.tempDefine.bind(this);e.LWR.define=t,this.bootReady=this.config.autoBoot,l&&(this.watchdogTimerId=this.startWatchdogTimer());try{a(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()&&(l&&clearTimeout(this.watchdogTimerId),this.initApp())}postCustomInit(){this.bootReady=!0,this.canInit()&&this.initApp()}initApp(){try{const e={baseUrl:this.config.baseUrl,profiler:{logOperationStart:n,logOperationEnd:i},appMetadata:{appId:this.config.appId,bootstrapModule:this.config.bootstrapModule,rootComponent:this.config.rootComponent,rootComponents:this.config.rootComponents}},t=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],e,this.config.preloadModules);this.createProfilerModule(t),this.mountApp(t)}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()}))}))}createProfilerModule(e){e.define("lwr/profiler/v/0_6_4",["exports"],(e=>{Object.assign(e,{logOperationStart:n,logOperationEnd:i})}),{})}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){n({id:"lwr.bootstrap.error"}),this.errorHandler?this.errorHandler(e):d&&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)}}(c)}(),LWR.define("lwr/loaderLegacy/v/0_6_4",["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.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");const LOADER_PREFIX="lwr.loader.",MODULE_DEFINE=`${LOADER_PREFIX}module.define`,MODULE_FETCH=`${LOADER_PREFIX}module.fetch`,MODULE_ERROR=`${LOADER_PREFIX}module.error`;class ModuleRegistry{constructor(e){this.namedDefineRegistry=new Map,this.moduleRegistry=new Map,this.baseUrl=e.baseUrl,this.profiler=e.profiler}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.profiler.logOperationStart({id:MODULE_DEFINE,specifier:e}),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}),l.__esModule&&Object.defineProperty(e.module,"__esModule",{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,n=r||t;return this.profiler.logOperationStart({id:MODULE_FETCH,specifier:n}),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 this.profiler.logOperationEnd({id:MODULE_FETCH,specifier:n}),o})).catch((e=>{throw this.profiler.logOperationStart({id:MODULE_ERROR,specifier:n}),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){let t=(e=e||{}).baseUrl,r=e.profiler;if(t&&(t=t.replace(/\/?$/,"/")),t||(t=getBaseUrl()),!t)throw new LoaderError(NO_BASE_URL);this.baseUrl=t,r||(r={logOperationStart:()=>{},logOperationEnd:()=>{}}),this.registry=new ModuleRegistry({baseUrl:t,profiler:r}),this.services=Object.freeze({addLoaderPlugin:this.registry.addLoaderPlugin.bind(this.registry),handleStaleModule:this.registry.registerHandleStaleModuleHook.bind(this.registry),appMetadata:e.appMetadata})}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.7.0-alpha.2 */
|
|
8
|
+
!function(){"use strict";var e;let t;function r(e){t=e}!function(e){e[e.Start=0]="Start",e[e.End=1]="End"}(e||(e={}));const o=globalThis.performance,s=void 0!==o&&"function"==typeof o.mark&&"function"==typeof o.clearMarks&&"function"==typeof o.measure&&"function"==typeof o.clearMeasures;function n({id:r,specifier:n}){t?t({id:r,phase:e.Start,specifier:n}):s&&o.mark(r+(n?`.${n}`:""))}function i({id:r,specifier:n}){if(t)t({id:r,phase:e.End,specifier:n});else if(s){const e=n?`.${n}`:"",t=r+e,s=`${r}.duration${e}`;o.measure(s,t),o.clearMarks(t),o.clearMeasures(s)}}function a(e,t,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:t,define:o,onBootstrapError:s,attachDispatcher:r},e)}}const l="function"==typeof setTimeout,d="undefined"!=typeof console;const c=globalThis;c.LWR.requiredModules=c.LWR.requiredModules||[],c.LWR.requiredModules.indexOf("lwr/loaderLegacy/v/0_7_0-alpha_2")<0&&c.LWR.requiredModules.push("lwr/loaderLegacy/v/0_7_0-alpha_2"),new class{constructor(e){this.defineCache={},this.orderedDefs=[],l&&(this.watchdogTimerId=this.startWatchdogTimer()),this.global=e,this.config=e.LWR,this.loaderModule="lwr/loaderLegacy/v/0_7_0-alpha_2",this.errorHandler=this.config.onError;const t=this.tempDefine.bind(this);e.LWR.define=t,this.bootReady=this.config.autoBoot;try{a(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()&&(l&&clearTimeout(this.watchdogTimerId),this.initApp())}postCustomInit(){this.bootReady=!0,this.canInit()&&this.initApp()}initApp(){try{const e={baseUrl:this.config.baseUrl,profiler:{logOperationStart:n,logOperationEnd:i},appMetadata:{appId:this.config.appId,bootstrapModule:this.config.bootstrapModule,rootComponent:this.config.rootComponent,rootComponents:this.config.rootComponents}},t=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],e,this.config.preloadModules);this.createProfilerModule(t),this.mountApp(t)}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()}))}))}createProfilerModule(e){e.define("lwr/profiler/v/0_7_0-alpha_2",["exports"],(e=>{Object.assign(e,{logOperationStart:n,logOperationEnd:i})}),{})}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){n({id:"lwr.bootstrap.error"}),this.errorHandler?this.errorHandler(e):d&&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)}}(c)}(),LWR.define("lwr/loaderLegacy/v/0_7_0-alpha_2",["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.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");const LOADER_PREFIX="lwr.loader.",MODULE_DEFINE=`${LOADER_PREFIX}module.define`,MODULE_FETCH=`${LOADER_PREFIX}module.fetch`,MODULE_ERROR=`${LOADER_PREFIX}module.error`;class ModuleRegistry{constructor(e){this.namedDefineRegistry=new Map,this.moduleRegistry=new Map,this.baseUrl=e.baseUrl,this.profiler=e.profiler}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.profiler.logOperationStart({id:MODULE_DEFINE,specifier:e}),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}),l.__esModule&&Object.defineProperty(e.module,"__esModule",{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,n=r||t;return this.profiler.logOperationStart({id:MODULE_FETCH,specifier:n}),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 this.profiler.logOperationEnd({id:MODULE_FETCH,specifier:n}),o})).catch((e=>{throw this.profiler.logOperationStart({id:MODULE_ERROR,specifier:n}),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){let t=(e=e||{}).baseUrl,r=e.profiler;if(t&&(t=t.replace(/\/?$/,"/")),t||(t=getBaseUrl()),!t)throw new LoaderError(NO_BASE_URL);this.baseUrl=t,r||(r={logOperationStart:()=>{},logOperationEnd:()=>{}}),this.registry=new ModuleRegistry({baseUrl:t,profiler:r}),this.services=Object.freeze({addLoaderPlugin:this.registry.addLoaderPlugin.bind(this.registry),handleStaleModule:this.registry.registerHandleStaleModuleHook.bind(this.registry),appMetadata:e.appMetadata})}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.
|
|
7
|
+
/* LWR Legacy Module Loader Shim v0.7.0-alpha.2 */
|
|
8
8
|
(function () {
|
|
9
9
|
'use strict';
|
|
10
10
|
|
|
@@ -135,20 +135,24 @@
|
|
|
135
135
|
constructor(global) {
|
|
136
136
|
this.defineCache = {};
|
|
137
137
|
this.orderedDefs = [];
|
|
138
|
+
// Start watchdog timer
|
|
139
|
+
if (hasSetTimeout) {
|
|
140
|
+
this.watchdogTimerId = this.startWatchdogTimer();
|
|
141
|
+
}
|
|
138
142
|
// Parse configuration
|
|
139
143
|
this.global = global;
|
|
140
144
|
this.config = global.LWR;
|
|
141
|
-
this.loaderModule = 'lwr/loaderLegacy/v/
|
|
145
|
+
this.loaderModule = 'lwr/loaderLegacy/v/0_7_0-alpha_2';
|
|
146
|
+
// Set up error handler
|
|
147
|
+
this.errorHandler = this.config.onError;
|
|
142
148
|
// Set up the temporary LWR.define function and customInit hook
|
|
143
149
|
const tempDefine = this.tempDefine.bind(this);
|
|
144
150
|
global.LWR.define = tempDefine;
|
|
145
151
|
this.bootReady = this.config.autoBoot;
|
|
146
|
-
// Start watchdog timer
|
|
147
|
-
if (hasSetTimeout) {
|
|
148
|
-
this.watchdogTimerId = this.startWatchdogTimer();
|
|
149
|
-
}
|
|
150
152
|
try {
|
|
151
153
|
customInit(Object.freeze(this.config), this.postCustomInit.bind(this), tempDefine, (e) => {
|
|
154
|
+
// customInit handlers can overwrite
|
|
155
|
+
// the error handler with onBootstrapError
|
|
152
156
|
this.errorHandler = e;
|
|
153
157
|
});
|
|
154
158
|
}
|
|
@@ -239,7 +243,7 @@
|
|
|
239
243
|
const exporter = (exports) => {
|
|
240
244
|
Object.assign(exports, { logOperationStart, logOperationEnd });
|
|
241
245
|
};
|
|
242
|
-
loader.define('lwr/profiler/v/
|
|
246
|
+
loader.define('lwr/profiler/v/0_7_0-alpha_2', ['exports'], exporter, {});
|
|
243
247
|
}
|
|
244
248
|
// Set up the application globals, import map, root custom element...
|
|
245
249
|
mountApp(loader) {
|
|
@@ -298,8 +302,8 @@
|
|
|
298
302
|
// The loader module is ALWAYS required
|
|
299
303
|
const GLOBAL = globalThis;
|
|
300
304
|
GLOBAL.LWR.requiredModules = GLOBAL.LWR.requiredModules || [];
|
|
301
|
-
if (GLOBAL.LWR.requiredModules.indexOf('lwr/loaderLegacy/v/
|
|
302
|
-
GLOBAL.LWR.requiredModules.push('lwr/loaderLegacy/v/
|
|
305
|
+
if (GLOBAL.LWR.requiredModules.indexOf('lwr/loaderLegacy/v/0_7_0-alpha_2') < 0) {
|
|
306
|
+
GLOBAL.LWR.requiredModules.push('lwr/loaderLegacy/v/0_7_0-alpha_2');
|
|
303
307
|
}
|
|
304
308
|
new LoaderShim(GLOBAL);
|
|
305
309
|
|
|
@@ -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.
|
|
7
|
+
/* LWR Module Loader Shim v0.7.0-alpha.2 */
|
|
8
8
|
(function () {
|
|
9
9
|
'use strict';
|
|
10
10
|
|
|
@@ -133,20 +133,24 @@
|
|
|
133
133
|
constructor(global) {
|
|
134
134
|
this.defineCache = {};
|
|
135
135
|
this.orderedDefs = [];
|
|
136
|
+
// Start watchdog timer
|
|
137
|
+
if (hasSetTimeout) {
|
|
138
|
+
this.watchdogTimerId = this.startWatchdogTimer();
|
|
139
|
+
}
|
|
136
140
|
// Parse configuration
|
|
137
141
|
this.global = global;
|
|
138
142
|
this.config = global.LWR;
|
|
139
|
-
this.loaderSpecifier = 'lwr/loader/v/
|
|
143
|
+
this.loaderSpecifier = 'lwr/loader/v/0_7_0-alpha_2';
|
|
144
|
+
// Set up error handler
|
|
145
|
+
this.errorHandler = this.config.onError;
|
|
140
146
|
// Set up the temporary LWR.define function and customInit hook
|
|
141
147
|
const tempDefine = this.tempDefine.bind(this);
|
|
142
148
|
global.LWR.define = tempDefine;
|
|
143
149
|
this.bootReady = this.config.autoBoot;
|
|
144
|
-
// Start watchdog timer
|
|
145
|
-
if (hasSetTimeout) {
|
|
146
|
-
this.watchdogTimerId = this.startWatchdogTimer();
|
|
147
|
-
}
|
|
148
150
|
try {
|
|
149
151
|
customInit(Object.freeze(this.config), this.postCustomInit.bind(this), tempDefine, (e) => {
|
|
152
|
+
// customInit handlers can overwrite
|
|
153
|
+
// the error handler with onBootstrapError
|
|
150
154
|
this.errorHandler = e;
|
|
151
155
|
});
|
|
152
156
|
}
|
|
@@ -238,7 +242,7 @@
|
|
|
238
242
|
const exporter = (exports) => {
|
|
239
243
|
Object.assign(exports, { logOperationStart, logOperationEnd });
|
|
240
244
|
};
|
|
241
|
-
loader.define('lwr/profiler/v/
|
|
245
|
+
loader.define('lwr/profiler/v/0_7_0-alpha_2', ['exports'], exporter);
|
|
242
246
|
}
|
|
243
247
|
// Set up the application globals, import map, root custom element...
|
|
244
248
|
mountApp(loader) {
|
|
@@ -298,14 +302,14 @@
|
|
|
298
302
|
// The loader module is ALWAYS required
|
|
299
303
|
const GLOBAL = globalThis;
|
|
300
304
|
GLOBAL.LWR.requiredModules = GLOBAL.LWR.requiredModules || [];
|
|
301
|
-
if (GLOBAL.LWR.requiredModules.indexOf('lwr/loader/v/
|
|
302
|
-
GLOBAL.LWR.requiredModules.push('lwr/loader/v/
|
|
305
|
+
if (GLOBAL.LWR.requiredModules.indexOf('lwr/loader/v/0_7_0-alpha_2') < 0) {
|
|
306
|
+
GLOBAL.LWR.requiredModules.push('lwr/loader/v/0_7_0-alpha_2');
|
|
303
307
|
}
|
|
304
308
|
new LoaderShim(GLOBAL);
|
|
305
309
|
|
|
306
310
|
}());
|
|
307
311
|
|
|
308
|
-
LWR.define('lwr/loader/v/
|
|
312
|
+
LWR.define('lwr/loader/v/0_7_0-alpha_2', ['exports'], function (exports) { 'use strict';
|
|
309
313
|
|
|
310
314
|
const templateRegex = /\{([0-9]+)\}/g;
|
|
311
315
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -629,23 +633,25 @@ LWR.define('lwr/loader/v/0_6_4', ['exports'], function (exports) { 'use strict';
|
|
|
629
633
|
? this.config.endpoints.uris.mapping
|
|
630
634
|
: undefined;
|
|
631
635
|
}
|
|
632
|
-
|
|
633
|
-
const modifiers = this.config.endpoints ? this.config.endpoints.modifiers :
|
|
634
|
-
|
|
636
|
+
getQueryParams(importer) {
|
|
637
|
+
const modifiers = this.config.endpoints ? this.config.endpoints.modifiers : {};
|
|
638
|
+
const params = importer ? Object.assign({ importer }, modifiers) : Object.assign({}, modifiers);
|
|
639
|
+
const keys = Object.keys(params);
|
|
640
|
+
if (keys.length < 1) {
|
|
635
641
|
// No modifiers return an empty string to append to the URL
|
|
636
642
|
return '';
|
|
637
643
|
}
|
|
638
644
|
else {
|
|
639
|
-
const qs =
|
|
640
|
-
.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(
|
|
645
|
+
const qs = keys
|
|
646
|
+
.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
|
|
641
647
|
.join('&');
|
|
642
648
|
return `?${qs}`;
|
|
643
649
|
}
|
|
644
650
|
}
|
|
645
|
-
buildMappingUrl(specifier) {
|
|
651
|
+
buildMappingUrl(specifier, importer) {
|
|
646
652
|
const mappingEndpoint = this.getMappingEndpoint();
|
|
647
653
|
const specifiers = encodeURIComponent(specifier);
|
|
648
|
-
const modifiers = this.
|
|
654
|
+
const modifiers = this.getQueryParams(importer);
|
|
649
655
|
return `${mappingEndpoint}${specifiers}${modifiers}`;
|
|
650
656
|
}
|
|
651
657
|
getBaseUrl() {
|
|
@@ -687,14 +693,28 @@ LWR.define('lwr/loader/v/0_6_4', ['exports'], function (exports) { 'use strict';
|
|
|
687
693
|
});
|
|
688
694
|
}
|
|
689
695
|
}
|
|
696
|
+
getImporterSpecifier(specifier, importer) {
|
|
697
|
+
return `${specifier}?importer=${encodeURIComponent(importer)}`;
|
|
698
|
+
}
|
|
690
699
|
// Get URL from the local cache or return undefiend
|
|
691
|
-
getURI(specifier) {
|
|
692
|
-
|
|
693
|
-
|
|
700
|
+
getURI(specifier, importer) {
|
|
701
|
+
// Check if we have the raw specifier or with the importer in the cache
|
|
702
|
+
let cachedSpecifier = undefined;
|
|
703
|
+
if (this.importURICache.has(specifier)) {
|
|
704
|
+
cachedSpecifier = specifier;
|
|
705
|
+
}
|
|
706
|
+
else if (importer) {
|
|
707
|
+
const importerSpecifier = this.getImporterSpecifier(specifier, importer);
|
|
708
|
+
if (this.importURICache.has(importerSpecifier)) {
|
|
709
|
+
cachedSpecifier = importerSpecifier;
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
return cachedSpecifier
|
|
713
|
+
? resolveUrl(this.importURICache.get(cachedSpecifier).uri, this.getBaseUrl())
|
|
694
714
|
: undefined;
|
|
695
715
|
}
|
|
696
|
-
resolveLocal(specifier) {
|
|
697
|
-
const uri = this.getURI(specifier);
|
|
716
|
+
resolveLocal(specifier, importer) {
|
|
717
|
+
const uri = this.getURI(specifier, importer);
|
|
698
718
|
if (uri) {
|
|
699
719
|
return uri;
|
|
700
720
|
}
|
|
@@ -713,8 +733,8 @@ LWR.define('lwr/loader/v/0_6_4', ['exports'], function (exports) { 'use strict';
|
|
|
713
733
|
* @param specifier
|
|
714
734
|
* @returns module URI
|
|
715
735
|
*/
|
|
716
|
-
async resolve(specifier) {
|
|
717
|
-
let uri = this.getURI(specifier);
|
|
736
|
+
async resolve(specifier, importer) {
|
|
737
|
+
let uri = this.getURI(specifier, importer);
|
|
718
738
|
if (uri) {
|
|
719
739
|
return uri;
|
|
720
740
|
}
|
|
@@ -722,32 +742,33 @@ LWR.define('lwr/loader/v/0_6_4', ['exports'], function (exports) { 'use strict';
|
|
|
722
742
|
return specifier;
|
|
723
743
|
}
|
|
724
744
|
else {
|
|
725
|
-
const
|
|
745
|
+
const pendingURICacheKey = importer ? this.getImporterSpecifier(specifier, importer) : specifier;
|
|
746
|
+
const pending = this.pendingURICache.get(pendingURICacheKey);
|
|
726
747
|
if (pending) {
|
|
727
748
|
return pending;
|
|
728
749
|
}
|
|
729
|
-
this.config.profiler.logOperationStart({ id: MAPPINGS_FETCH,
|
|
750
|
+
this.config.profiler.logOperationStart({ id: MAPPINGS_FETCH, pendingURICacheKey });
|
|
730
751
|
const fetchMappingService = this.hasMappingHooks()
|
|
731
752
|
? this.evaluateMappingHooks
|
|
732
753
|
: this.fetchNewMappings;
|
|
733
754
|
const promise = fetchMappingService
|
|
734
|
-
.bind(this)(specifier)
|
|
755
|
+
.bind(this)(specifier, importer)
|
|
735
756
|
.then((importMetadata) => {
|
|
736
757
|
if (!importMetadata || !importMetadata.imports) {
|
|
737
|
-
throw new LoaderError(UNRESOLVED, [
|
|
758
|
+
throw new LoaderError(UNRESOLVED, [pendingURICacheKey]);
|
|
738
759
|
}
|
|
739
760
|
this.registerImportMappings(importMetadata, [specifier]);
|
|
740
|
-
uri = this.getURI(specifier);
|
|
761
|
+
uri = this.getURI(specifier, importer);
|
|
741
762
|
if (!uri) {
|
|
742
|
-
throw new LoaderError(UNRESOLVED, [
|
|
763
|
+
throw new LoaderError(UNRESOLVED, [pendingURICacheKey]);
|
|
743
764
|
}
|
|
744
|
-
this.config.profiler.logOperationEnd({ id: MAPPINGS_FETCH,
|
|
765
|
+
this.config.profiler.logOperationEnd({ id: MAPPINGS_FETCH, pendingURICacheKey });
|
|
745
766
|
return uri;
|
|
746
767
|
})
|
|
747
768
|
.finally(() => {
|
|
748
|
-
this.pendingURICache.delete(
|
|
769
|
+
this.pendingURICache.delete(pendingURICacheKey);
|
|
749
770
|
});
|
|
750
|
-
this.pendingURICache.set(
|
|
771
|
+
this.pendingURICache.set(pendingURICacheKey, promise);
|
|
751
772
|
return promise;
|
|
752
773
|
}
|
|
753
774
|
}
|
|
@@ -759,7 +780,7 @@ LWR.define('lwr/loader/v/0_6_4', ['exports'], function (exports) { 'use strict';
|
|
|
759
780
|
* @param specifier Request module identifier
|
|
760
781
|
* @returns Import Metadata from the module root
|
|
761
782
|
*/
|
|
762
|
-
async evaluateMappingHooks(specifier) {
|
|
783
|
+
async evaluateMappingHooks(specifier, importer) {
|
|
763
784
|
// Check with any registered loadMappingHooks
|
|
764
785
|
const loadMappingHooks = this.loadMappingHooks;
|
|
765
786
|
if (loadMappingHooks.length) {
|
|
@@ -775,15 +796,15 @@ LWR.define('lwr/loader/v/0_6_4', ['exports'], function (exports) { 'use strict';
|
|
|
775
796
|
}
|
|
776
797
|
}
|
|
777
798
|
// If we still do not have a match call the mapping service
|
|
778
|
-
return this.fetchNewMappings(specifier);
|
|
799
|
+
return this.fetchNewMappings(specifier, importer);
|
|
779
800
|
}
|
|
780
|
-
async fetchNewMappings(specifier) {
|
|
801
|
+
async fetchNewMappings(specifier, importer) {
|
|
781
802
|
if (typeof globalThis.fetch !== 'function') {
|
|
782
803
|
throw new LoaderError(UNRESOLVED, [specifier]);
|
|
783
804
|
}
|
|
784
805
|
// TODO For module invalidation with bundles it is recommended we have to send back all loaded root specified
|
|
785
806
|
// to ensure we detect all conflicts.
|
|
786
|
-
const uri = resolveUrl(this.buildMappingUrl(specifier), this.getBaseUrl());
|
|
807
|
+
const uri = resolveUrl(this.buildMappingUrl(specifier, importer), this.getBaseUrl());
|
|
787
808
|
return globalThis.fetch(uri).then((res) => {
|
|
788
809
|
if (!res.ok) {
|
|
789
810
|
this.config.profiler.logOperationStart({ id: MAPPINGS_ERROR, specifier });
|
|
@@ -999,7 +1020,7 @@ LWR.define('lwr/loader/v/0_6_4', ['exports'], function (exports) { 'use strict';
|
|
|
999
1020
|
if (this.moduleRegistry.has(resolvedOrPlain)) {
|
|
1000
1021
|
return resolvedOrPlain;
|
|
1001
1022
|
}
|
|
1002
|
-
const resolvedUrl = this.resolver.resolveLocal(resolvedOrPlain);
|
|
1023
|
+
const resolvedUrl = this.resolver.resolveLocal(resolvedOrPlain, importer);
|
|
1003
1024
|
if (resolvedUrl) {
|
|
1004
1025
|
// return the plain id if it is already defined && the resolvedUrl is NOT already in the module registry
|
|
1005
1026
|
if (this.namedDefineRegistry.has(resolvedOrPlain) &&
|
|
@@ -1015,7 +1036,7 @@ LWR.define('lwr/loader/v/0_6_4', ['exports'], function (exports) { 'use strict';
|
|
|
1015
1036
|
return resolvedOrPlain;
|
|
1016
1037
|
}
|
|
1017
1038
|
try {
|
|
1018
|
-
resolved = await this.resolver.resolve(resolvedOrPlain);
|
|
1039
|
+
resolved = await this.resolver.resolve(resolvedOrPlain, importer);
|
|
1019
1040
|
}
|
|
1020
1041
|
catch (e) {
|
|
1021
1042
|
// defer to error handling below for unresolved
|
|
@@ -4,5 +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 Module Loader Shim v0.
|
|
8
|
-
!function(){"use strict";var e;let t;function r(e){t=e}!function(e){e[e.Start=0]="Start",e[e.End=1]="End"}(e||(e={}));const o=globalThis.performance,i=void 0!==o&&"function"==typeof o.mark&&"function"==typeof o.clearMarks&&"function"==typeof o.measure&&"function"==typeof o.clearMeasures;function n({id:r,specifier:n}){t?t({id:r,phase:e.Start,specifier:n}):i&&o.mark(r+(n?`.${n}`:""))}function s({id:r,specifier:n}){if(t)t({id:r,phase:e.End,specifier:n});else if(i){const e=n?`.${n}`:"",t=r+e,i=`${r}.duration${e}`;o.measure(i,t),o.clearMarks(t),o.clearMeasures(i)}}function a(e,t,o,i){const{autoBoot:n,customInit:s}=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,s),s){s({initializeApp:t,define:o,onBootstrapError:i,attachDispatcher:r},e)}}const l="function"==typeof setTimeout,d="undefined"!=typeof console;const c=globalThis;c.LWR.requiredModules=c.LWR.requiredModules||[],c.LWR.requiredModules.indexOf("lwr/loader/v/0_6_4")<0&&c.LWR.requiredModules.push("lwr/loader/v/0_6_4"),new class{constructor(e){this.defineCache={},this.orderedDefs=[],this.global=e,this.config=e.LWR,this.loaderSpecifier="lwr/loader/v/0_6_4";const t=this.tempDefine.bind(this);e.LWR.define=t,this.bootReady=this.config.autoBoot,l&&(this.watchdogTimerId=this.startWatchdogTimer());try{a(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()&&(l&&clearTimeout(this.watchdogTimerId),this.initApp())}postCustomInit(){this.bootReady=!0,this.canInit()&&this.initApp()}initApp(){try{const e={endpoints:this.config.endpoints,baseUrl:this.config.baseUrl,profiler:{logOperationStart:n,logOperationEnd:s},appMetadata:{appId:this.config.appId,bootstrapModule:this.config.bootstrapModule,rootComponent:this.config.rootComponent,rootComponents:this.config.rootComponents}},t=function(e,t,r,o){if(!t||"function"!=typeof t[2])throw new Error(`Expected loader with specifier "${e}" to be a module`);const i={};t[2].call(null,i);const{Loader:n}=i,s=new n(r);return o&&o.length&&s.registerExternalModules(o),s.define(e,["exports"],(e=>{Object.assign(e,{define:s.define.bind(s),load:s.load.bind(s),services:s.services})})),s}(this.loaderSpecifier,this.defineCache[this.loaderSpecifier],e,this.config.preloadModules);this.createProfilerModule(t),this.mountApp(t)}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()}))}))}createProfilerModule(e){e.define("lwr/profiler/v/0_6_4",["exports"],(e=>{Object.assign(e,{logOperationStart:n,logOperationEnd:s})}))}mountApp(e){const{bootstrapModule:t,rootComponent:r,rootComponents:o,endpoints:i,imports:n,index:s}=this.config;this.global.LWR=Object.freeze({define:e.define.bind(e),rootComponent:r,rootComponents:o,endpoints:i,imports:n||{},index:s||{}}),this.orderedDefs.forEach((t=>{t!==this.loaderSpecifier&&e.define(...this.defineCache[t])}));const{disableInitDefer:a}=this.config;e.registerImportMappings({imports:n,index:s},[t,r]).then((()=>{if(!a)return this.waitForDOMContentLoaded()})).then((()=>e.load(t))).catch((e=>{this.enterErrorState(new Error(`Application ${r} could not be loaded: ${e}`))}))}enterErrorState(e){n({id:"lwr.bootstrap.error"}),this.errorHandler?this.errorHandler(e):d&&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)}}(c)}(),LWR.define("lwr/loader/v/0_6_4",["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'}),NO_MAPPING_URL=Object.freeze({code:3019,level:0,message:"Mapping endpoint not set"}),BAD_IMPORT_METADATA=Object.freeze({code:3020,level:0,message:"Invalid import metadata: {0} {1}"});Object.freeze({code:3011,level:0,message:"import map is not valid"});const 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 i=o.slice(0,o.lastIndexOf("/")+1)+e,n=[];let s=-1;for(let e=0;e<i.length;e++)-1!==s?"/"===i[e]&&(n.push(i.slice(s,e+1)),s=-1):"."===i[e]?"."!==i[e+1]||"/"!==i[e+2]&&e+2!==i.length?"/"===i[e+1]||e+1===i.length?e+=1:s=e:(n.pop(),e+=2):s=e;return-1!==s&&n.push(i.slice(s)),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.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 LOADER_PREFIX="lwr.loader.",MODULE_DEFINE=`${LOADER_PREFIX}module.define`,MODULE_FETCH=`${LOADER_PREFIX}module.fetch`,MODULE_ERROR=`${LOADER_PREFIX}module.error`,MAPPINGS_FETCH=`${LOADER_PREFIX}mappings.fetch`,MAPPINGS_ERROR=`${LOADER_PREFIX}mappings.error`;class ImportMetadataResolver{constructor(e,t){this.importURICache=new Map,this.pendingURICache=new Map,this.loadMappingHooks=[],this.config=e,this.invalidationCallback=t}addLoadMappingHook(e){this.loadMappingHooks.push(e)}getMappingEndpoint(){return this.config.endpoints&&this.config.endpoints.uris?this.config.endpoints.uris.mapping:void 0}getModifiersAsUrlParams(){const e=this.config.endpoints?this.config.endpoints.modifiers:void 0;if(e){return`?${Object.keys(e).map((t=>`${encodeURIComponent(t)}=${encodeURIComponent(e[t])}`)).join("&")}`}return""}buildMappingUrl(e){return`${this.getMappingEndpoint()}${encodeURIComponent(e)}${this.getModifiersAsUrlParams()}`}getBaseUrl(){return this.config.baseUrl}registerImportMappings(e,t){if(!t||0===t.length){const r=e?JSON.stringify(e):"undefined";throw new LoaderError(BAD_IMPORT_METADATA,[r,t?"[]":"undefined"])}if(!e)throw new LoaderError(BAD_IMPORT_METADATA,["undefined",JSON.stringify(t)]);if(!e.imports||0===Object.keys(e.imports).length)throw new LoaderError(BAD_IMPORT_METADATA,[JSON.stringify(e),JSON.stringify(t)]);const r=e.index||{};for(const[o,i]of Object.entries(e.imports))i.forEach((e=>{const i=r[e],n=this.importURICache.get(e);if(n){const t=i||o,r=n.identity||n.uri;r!==t&&this.invalidationCallback({name:e,oldUrl:r,newUrl:t})}else this.saveImportURIRecord(e,o,i,t.includes(e))}))}getURI(e){return this.importURICache.has(e)?resolveUrl(this.importURICache.get(e).uri,this.getBaseUrl()):void 0}resolveLocal(e){const t=this.getURI(e);return t||(isUrl(e)||e.startsWith("/")?e:void 0)}async resolve(e){let t=this.getURI(e);if(t)return t;if(isUrl(e)||e.startsWith("/"))return e;{const r=this.pendingURICache.get(e);if(r)return r;this.config.profiler.logOperationStart({id:MAPPINGS_FETCH,specifier:e});const o=(this.hasMappingHooks()?this.evaluateMappingHooks:this.fetchNewMappings).bind(this)(e).then((r=>{if(!r||!r.imports)throw new LoaderError(UNRESOLVED,[e]);if(this.registerImportMappings(r,[e]),t=this.getURI(e),!t)throw new LoaderError(UNRESOLVED,[e]);return this.config.profiler.logOperationEnd({id:MAPPINGS_FETCH,specifier:e}),t})).finally((()=>{this.pendingURICache.delete(e)}));return this.pendingURICache.set(e,o),o}}hasMappingHooks(){return this.loadMappingHooks.length>0}async evaluateMappingHooks(e){const t=this.loadMappingHooks;if(t.length){const r=Array.from(this.importURICache.keys());for(let o=0;o<t.length;o++){const i=t[o],n=await i(e,{knownModules:r});if(n||void 0===n)return n}}return this.fetchNewMappings(e)}async fetchNewMappings(e){if("function"!=typeof globalThis.fetch)throw new LoaderError(UNRESOLVED,[e]);const t=resolveUrl(this.buildMappingUrl(e),this.getBaseUrl());return globalThis.fetch(t).then((t=>{if(!t.ok)throw this.config.profiler.logOperationStart({id:MAPPINGS_ERROR,specifier:e}),new LoaderError(UNRESOLVED,[e]);return t.json().then((e=>e)).catch((t=>{throw new LoaderError(UNRESOLVED,[e])}))}))}saveImportURIRecord(e,t,r,o){r&&t!==r?this.importURICache.set(e,{uri:t,identity:r,isRoot:o}):this.importURICache.set(e,{uri:t,isRoot:o})}}function reportError(e){hasConsole&&console.error(e)}function evaluateHandleStaleModuleHooks(e,t){const{name:r,oldUrl:o,newUrl:i}=t;for(let t=0;t<e.length;t++){const n=e[t];try{if(null!==n({name:r,oldUrl:o,newUrl:i}))break}catch(e){reportError(new LoaderError(STALE_HOOK_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 i=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(i)}))})):t}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.profiler=e.profiler,this.resolver=new ImportMetadataResolver(e,this.importMetadataInvalidationCallback.bind(this))}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.resolver.getBaseUrl();let o,i=e;const n=this.resolveHook;if(n){for(let e=0;e<n.length;e++){const t=(0,n[e])(i,{parentUrl:r});let s;if((t||null===t)&&(s=isResponseAPromise(t)?await t:t),null!==s){if("string"==typeof s){if(resolveIfNotPlainOrUrl(s,r))throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);i=s;continue}if(o=s&&s.url&&(resolveIfNotPlainOrUrl(s.url,r)||s.url),!o)throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);break}}if(i!==e){if(!o&&this.namedDefineRegistry.has(i))return i;e=i}}if(!o){const t=resolveIfNotPlainOrUrl(e,r)||e;if(this.moduleRegistry.has(t))return t;const i=this.resolver.resolveLocal(t);if(i){if(this.namedDefineRegistry.has(t)&&this.namedDefineRegistry.get(t).defined){const e=this.moduleRegistry.get(i);if(!e||!e.aliases.has(t))return t}return i}if(this.namedDefineRegistry.has(t))return t;try{o=await this.resolver.resolve(t)}catch(e){}}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){const o=this.namedDefineRegistry.get(e);if(o&&o.defined)return void(this.lastDefine=o);const i={name:e,dependencies:t,exporter:r,defined:!0};o&&o.external&&o.external.resolveExternal(i),this.profiler.logOperationStart({id:MODULE_DEFINE,specifier:e}),this.namedDefineRegistry.set(e,i),this.lastDefine=i}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,i)=>{t=o,r=setTimeout((()=>{i(new LoaderError(MODULE_LOAD_TIMEOUT,[e]))}),MODULE_LOAD_TIMEOUT_TIMER)})).finally((()=>{clearTimeout(r)})),i={name:e,defined:!1,external:{resolveExternal:t,moduleDefPromise:o}};this.namedDefineRegistry.set(e,i)}})),t.length)throw new LoaderError(MODULE_ALREADY_LOADED,[t.join(", ")])}getImportMetadataResolver(){return this.resolver}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),i=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:i,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:i}=await e.instantiation,n={},s=await Promise.all(i.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(...s);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}),l.__esModule&&Object.defineProperty(e.module,"__esModule",{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 i=this.resolver.getBaseUrl(),n=r||t;return this.profiler.logOperationStart({id:MODULE_FETCH,specifier:n}),Promise.resolve().then((async()=>{const t=this.loadHook;if(t)for(let r=0;r<t.length;r++){const o=(0,t[r])(e,i),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 this.profiler.logOperationEnd({id:MODULE_FETCH,specifier:n}),o})).catch((e=>{throw this.profiler.logOperationStart({id:MODULE_ERROR,specifier:n}),e}))}addLoaderPlugin(e){if("object"!=typeof e)throw new LoaderError(INVALID_HOOK);const{loadModule:t,resolveModule:r,loadMapping:o}=e;r&&(this.resolveHook?this.resolveHook.push(r):this.resolveHook=[r]),t&&(this.loadHook?this.loadHook.push(t):this.loadHook=[t]),o&&this.resolver.addLoadMappingHook(o)}importMetadataInvalidationCallback({name:e,oldUrl:t,newUrl:r}){const o=this.handleStaleModuleHook;o?evaluateHandleStaleModuleHooks(o,{name:e,oldUrl:t,newUrl:r}):hasConsole&&console.warn(`stale module detected ${e}, current URL:${t}, new URL:${r}`)}registerHandleStaleModuleHook(e){this.handleStaleModuleHook?this.handleStaleModuleHook.push(e):this.handleStaleModuleHook=[e]}}class Loader{constructor(e){let t=e.baseUrl;const r=e.endpoints?e.endpoints.uris.mapping:void 0;let o=e.profiler;if(!r)throw new LoaderError(NO_MAPPING_URL);if(e.endpoints.uris.mapping=r.replace(/\/?$/,"/"),t&&(t=t.replace(/\/?$/,"/")),t||(t=getBaseUrl()),!t)throw new LoaderError(NO_BASE_URL);if(o||(o={logOperationStart:()=>{},logOperationEnd:()=>{}}),this.registry=new ModuleRegistry(Object.freeze({endpoints:e.endpoints,baseUrl:t,profiler:o})),e.appMetadata&&!e.appMetadata.appId){const t=e.appMetadata.bootstrapModule.match(/@lwr-bootstrap\/(.+)\/v\/.+/),r=t&&t[1];e.appMetadata.appId=r}this.services=Object.freeze({addLoaderPlugin:this.registry.addLoaderPlugin.bind(this.registry),handleStaleModule:this.registry.registerHandleStaleModuleHook.bind(this.registry),appMetadata:e.appMetadata})}define(e,t,r){invariant("string"==typeof e,MISSING_NAME);let o=r,i=t;"function"==typeof i&&(o=t,i=[]),invariant(Array.isArray(i),INVALID_DEPS),this.registry.define(e,i,o)}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,t){this.registry.getImportMetadataResolver().registerImportMappings(e,t)}registerExternalModules(e){this.registry.registerExternalModules(e)}}exports.Loader=Loader,Object.defineProperty(exports,"__esModule",{value:!0})}));
|
|
7
|
+
/* LWR Module Loader Shim v0.7.0-alpha.2 */
|
|
8
|
+
!function(){"use strict";var e;let t;function r(e){t=e}!function(e){e[e.Start=0]="Start",e[e.End=1]="End"}(e||(e={}));const o=globalThis.performance,i=void 0!==o&&"function"==typeof o.mark&&"function"==typeof o.clearMarks&&"function"==typeof o.measure&&"function"==typeof o.clearMeasures;function n({id:r,specifier:n}){t?t({id:r,phase:e.Start,specifier:n}):i&&o.mark(r+(n?`.${n}`:""))}function s({id:r,specifier:n}){if(t)t({id:r,phase:e.End,specifier:n});else if(i){const e=n?`.${n}`:"",t=r+e,i=`${r}.duration${e}`;o.measure(i,t),o.clearMarks(t),o.clearMeasures(i)}}function a(e,t,o,i){const{autoBoot:n,customInit:s}=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,s),s){s({initializeApp:t,define:o,onBootstrapError:i,attachDispatcher:r},e)}}const l="function"==typeof setTimeout,d="undefined"!=typeof console;const c=globalThis;c.LWR.requiredModules=c.LWR.requiredModules||[],c.LWR.requiredModules.indexOf("lwr/loader/v/0_7_0-alpha_2")<0&&c.LWR.requiredModules.push("lwr/loader/v/0_7_0-alpha_2"),new class{constructor(e){this.defineCache={},this.orderedDefs=[],l&&(this.watchdogTimerId=this.startWatchdogTimer()),this.global=e,this.config=e.LWR,this.loaderSpecifier="lwr/loader/v/0_7_0-alpha_2",this.errorHandler=this.config.onError;const t=this.tempDefine.bind(this);e.LWR.define=t,this.bootReady=this.config.autoBoot;try{a(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()&&(l&&clearTimeout(this.watchdogTimerId),this.initApp())}postCustomInit(){this.bootReady=!0,this.canInit()&&this.initApp()}initApp(){try{const e={endpoints:this.config.endpoints,baseUrl:this.config.baseUrl,profiler:{logOperationStart:n,logOperationEnd:s},appMetadata:{appId:this.config.appId,bootstrapModule:this.config.bootstrapModule,rootComponent:this.config.rootComponent,rootComponents:this.config.rootComponents}},t=function(e,t,r,o){if(!t||"function"!=typeof t[2])throw new Error(`Expected loader with specifier "${e}" to be a module`);const i={};t[2].call(null,i);const{Loader:n}=i,s=new n(r);return o&&o.length&&s.registerExternalModules(o),s.define(e,["exports"],(e=>{Object.assign(e,{define:s.define.bind(s),load:s.load.bind(s),services:s.services})})),s}(this.loaderSpecifier,this.defineCache[this.loaderSpecifier],e,this.config.preloadModules);this.createProfilerModule(t),this.mountApp(t)}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()}))}))}createProfilerModule(e){e.define("lwr/profiler/v/0_7_0-alpha_2",["exports"],(e=>{Object.assign(e,{logOperationStart:n,logOperationEnd:s})}))}mountApp(e){const{bootstrapModule:t,rootComponent:r,rootComponents:o,endpoints:i,imports:n,index:s}=this.config;this.global.LWR=Object.freeze({define:e.define.bind(e),rootComponent:r,rootComponents:o,endpoints:i,imports:n||{},index:s||{}}),this.orderedDefs.forEach((t=>{t!==this.loaderSpecifier&&e.define(...this.defineCache[t])}));const{disableInitDefer:a}=this.config;e.registerImportMappings({imports:n,index:s},[t,r]).then((()=>{if(!a)return this.waitForDOMContentLoaded()})).then((()=>e.load(t))).catch((e=>{this.enterErrorState(new Error(`Application ${r} could not be loaded: ${e}`))}))}enterErrorState(e){n({id:"lwr.bootstrap.error"}),this.errorHandler?this.errorHandler(e):d&&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)}}(c)}(),LWR.define("lwr/loader/v/0_7_0-alpha_2",["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'}),NO_MAPPING_URL=Object.freeze({code:3019,level:0,message:"Mapping endpoint not set"}),BAD_IMPORT_METADATA=Object.freeze({code:3020,level:0,message:"Invalid import metadata: {0} {1}"});Object.freeze({code:3011,level:0,message:"import map is not valid"});const 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 i=o.slice(0,o.lastIndexOf("/")+1)+e,n=[];let s=-1;for(let e=0;e<i.length;e++)-1!==s?"/"===i[e]&&(n.push(i.slice(s,e+1)),s=-1):"."===i[e]?"."!==i[e+1]||"/"!==i[e+2]&&e+2!==i.length?"/"===i[e+1]||e+1===i.length?e+=1:s=e:(n.pop(),e+=2):s=e;return-1!==s&&n.push(i.slice(s)),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.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 LOADER_PREFIX="lwr.loader.",MODULE_DEFINE=`${LOADER_PREFIX}module.define`,MODULE_FETCH=`${LOADER_PREFIX}module.fetch`,MODULE_ERROR=`${LOADER_PREFIX}module.error`,MAPPINGS_FETCH=`${LOADER_PREFIX}mappings.fetch`,MAPPINGS_ERROR=`${LOADER_PREFIX}mappings.error`;class ImportMetadataResolver{constructor(e,t){this.importURICache=new Map,this.pendingURICache=new Map,this.loadMappingHooks=[],this.config=e,this.invalidationCallback=t}addLoadMappingHook(e){this.loadMappingHooks.push(e)}getMappingEndpoint(){return this.config.endpoints&&this.config.endpoints.uris?this.config.endpoints.uris.mapping:void 0}getQueryParams(e){const t=this.config.endpoints?this.config.endpoints.modifiers:{},r=e?Object.assign({importer:e},t):Object.assign({},t),o=Object.keys(r);if(o.length<1)return"";return`?${o.map((e=>`${encodeURIComponent(e)}=${encodeURIComponent(r[e])}`)).join("&")}`}buildMappingUrl(e,t){return`${this.getMappingEndpoint()}${encodeURIComponent(e)}${this.getQueryParams(t)}`}getBaseUrl(){return this.config.baseUrl}registerImportMappings(e,t){if(!t||0===t.length){const r=e?JSON.stringify(e):"undefined";throw new LoaderError(BAD_IMPORT_METADATA,[r,t?"[]":"undefined"])}if(!e)throw new LoaderError(BAD_IMPORT_METADATA,["undefined",JSON.stringify(t)]);if(!e.imports||0===Object.keys(e.imports).length)throw new LoaderError(BAD_IMPORT_METADATA,[JSON.stringify(e),JSON.stringify(t)]);const r=e.index||{};for(const[o,i]of Object.entries(e.imports))i.forEach((e=>{const i=r[e],n=this.importURICache.get(e);if(n){const t=i||o,r=n.identity||n.uri;r!==t&&this.invalidationCallback({name:e,oldUrl:r,newUrl:t})}else this.saveImportURIRecord(e,o,i,t.includes(e))}))}getImporterSpecifier(e,t){return`${e}?importer=${encodeURIComponent(t)}`}getURI(e,t){let r;if(this.importURICache.has(e))r=e;else if(t){const o=this.getImporterSpecifier(e,t);this.importURICache.has(o)&&(r=o)}return r?resolveUrl(this.importURICache.get(r).uri,this.getBaseUrl()):void 0}resolveLocal(e,t){const r=this.getURI(e,t);return r||(isUrl(e)||e.startsWith("/")?e:void 0)}async resolve(e,t){let r=this.getURI(e,t);if(r)return r;if(isUrl(e)||e.startsWith("/"))return e;{const o=t?this.getImporterSpecifier(e,t):e,i=this.pendingURICache.get(o);if(i)return i;this.config.profiler.logOperationStart({id:MAPPINGS_FETCH,pendingURICacheKey:o});const n=(this.hasMappingHooks()?this.evaluateMappingHooks:this.fetchNewMappings).bind(this)(e,t).then((i=>{if(!i||!i.imports)throw new LoaderError(UNRESOLVED,[o]);if(this.registerImportMappings(i,[e]),r=this.getURI(e,t),!r)throw new LoaderError(UNRESOLVED,[o]);return this.config.profiler.logOperationEnd({id:MAPPINGS_FETCH,pendingURICacheKey:o}),r})).finally((()=>{this.pendingURICache.delete(o)}));return this.pendingURICache.set(o,n),n}}hasMappingHooks(){return this.loadMappingHooks.length>0}async evaluateMappingHooks(e,t){const r=this.loadMappingHooks;if(r.length){const t=Array.from(this.importURICache.keys());for(let o=0;o<r.length;o++){const i=r[o],n=await i(e,{knownModules:t});if(n||void 0===n)return n}}return this.fetchNewMappings(e,t)}async fetchNewMappings(e,t){if("function"!=typeof globalThis.fetch)throw new LoaderError(UNRESOLVED,[e]);const r=resolveUrl(this.buildMappingUrl(e,t),this.getBaseUrl());return globalThis.fetch(r).then((t=>{if(!t.ok)throw this.config.profiler.logOperationStart({id:MAPPINGS_ERROR,specifier:e}),new LoaderError(UNRESOLVED,[e]);return t.json().then((e=>e)).catch((t=>{throw new LoaderError(UNRESOLVED,[e])}))}))}saveImportURIRecord(e,t,r,o){r&&t!==r?this.importURICache.set(e,{uri:t,identity:r,isRoot:o}):this.importURICache.set(e,{uri:t,isRoot:o})}}function reportError(e){hasConsole&&console.error(e)}function evaluateHandleStaleModuleHooks(e,t){const{name:r,oldUrl:o,newUrl:i}=t;for(let t=0;t<e.length;t++){const n=e[t];try{if(null!==n({name:r,oldUrl:o,newUrl:i}))break}catch(e){reportError(new LoaderError(STALE_HOOK_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 i=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(i)}))})):t}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.profiler=e.profiler,this.resolver=new ImportMetadataResolver(e,this.importMetadataInvalidationCallback.bind(this))}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.resolver.getBaseUrl();let o,i=e;const n=this.resolveHook;if(n){for(let e=0;e<n.length;e++){const t=(0,n[e])(i,{parentUrl:r});let s;if((t||null===t)&&(s=isResponseAPromise(t)?await t:t),null!==s){if("string"==typeof s){if(resolveIfNotPlainOrUrl(s,r))throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);i=s;continue}if(o=s&&s.url&&(resolveIfNotPlainOrUrl(s.url,r)||s.url),!o)throw new LoaderError(INVALID_LOADER_SERVICE_RESPONSE);break}}if(i!==e){if(!o&&this.namedDefineRegistry.has(i))return i;e=i}}if(!o){const i=resolveIfNotPlainOrUrl(e,r)||e;if(this.moduleRegistry.has(i))return i;const n=this.resolver.resolveLocal(i,t);if(n){if(this.namedDefineRegistry.has(i)&&this.namedDefineRegistry.get(i).defined){const e=this.moduleRegistry.get(n);if(!e||!e.aliases.has(i))return i}return n}if(this.namedDefineRegistry.has(i))return i;try{o=await this.resolver.resolve(i,t)}catch(e){}}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){const o=this.namedDefineRegistry.get(e);if(o&&o.defined)return void(this.lastDefine=o);const i={name:e,dependencies:t,exporter:r,defined:!0};o&&o.external&&o.external.resolveExternal(i),this.profiler.logOperationStart({id:MODULE_DEFINE,specifier:e}),this.namedDefineRegistry.set(e,i),this.lastDefine=i}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,i)=>{t=o,r=setTimeout((()=>{i(new LoaderError(MODULE_LOAD_TIMEOUT,[e]))}),MODULE_LOAD_TIMEOUT_TIMER)})).finally((()=>{clearTimeout(r)})),i={name:e,defined:!1,external:{resolveExternal:t,moduleDefPromise:o}};this.namedDefineRegistry.set(e,i)}})),t.length)throw new LoaderError(MODULE_ALREADY_LOADED,[t.join(", ")])}getImportMetadataResolver(){return this.resolver}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),i=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:i,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:i}=await e.instantiation,n={},s=await Promise.all(i.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(...s);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}),l.__esModule&&Object.defineProperty(e.module,"__esModule",{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 i=this.resolver.getBaseUrl(),n=r||t;return this.profiler.logOperationStart({id:MODULE_FETCH,specifier:n}),Promise.resolve().then((async()=>{const t=this.loadHook;if(t)for(let r=0;r<t.length;r++){const o=(0,t[r])(e,i),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 this.profiler.logOperationEnd({id:MODULE_FETCH,specifier:n}),o})).catch((e=>{throw this.profiler.logOperationStart({id:MODULE_ERROR,specifier:n}),e}))}addLoaderPlugin(e){if("object"!=typeof e)throw new LoaderError(INVALID_HOOK);const{loadModule:t,resolveModule:r,loadMapping:o}=e;r&&(this.resolveHook?this.resolveHook.push(r):this.resolveHook=[r]),t&&(this.loadHook?this.loadHook.push(t):this.loadHook=[t]),o&&this.resolver.addLoadMappingHook(o)}importMetadataInvalidationCallback({name:e,oldUrl:t,newUrl:r}){const o=this.handleStaleModuleHook;o?evaluateHandleStaleModuleHooks(o,{name:e,oldUrl:t,newUrl:r}):hasConsole&&console.warn(`stale module detected ${e}, current URL:${t}, new URL:${r}`)}registerHandleStaleModuleHook(e){this.handleStaleModuleHook?this.handleStaleModuleHook.push(e):this.handleStaleModuleHook=[e]}}class Loader{constructor(e){let t=e.baseUrl;const r=e.endpoints?e.endpoints.uris.mapping:void 0;let o=e.profiler;if(!r)throw new LoaderError(NO_MAPPING_URL);if(e.endpoints.uris.mapping=r.replace(/\/?$/,"/"),t&&(t=t.replace(/\/?$/,"/")),t||(t=getBaseUrl()),!t)throw new LoaderError(NO_BASE_URL);if(o||(o={logOperationStart:()=>{},logOperationEnd:()=>{}}),this.registry=new ModuleRegistry(Object.freeze({endpoints:e.endpoints,baseUrl:t,profiler:o})),e.appMetadata&&!e.appMetadata.appId){const t=e.appMetadata.bootstrapModule.match(/@lwr-bootstrap\/(.+)\/v\/.+/),r=t&&t[1];e.appMetadata.appId=r}this.services=Object.freeze({addLoaderPlugin:this.registry.addLoaderPlugin.bind(this.registry),handleStaleModule:this.registry.registerHandleStaleModuleHook.bind(this.registry),appMetadata:e.appMetadata})}define(e,t,r){invariant("string"==typeof e,MISSING_NAME);let o=r,i=t;"function"==typeof i&&(o=t,i=[]),invariant(Array.isArray(i),INVALID_DEPS),this.registry.define(e,i,o)}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,t){this.registry.getImportMetadataResolver().registerImportMappings(e,t)}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 Module Loader Shim v0.
|
|
7
|
+
/* LWR Module Loader Shim v0.7.0-alpha.2 */
|
|
8
8
|
(function () {
|
|
9
9
|
'use strict';
|
|
10
10
|
|
|
@@ -133,20 +133,24 @@
|
|
|
133
133
|
constructor(global) {
|
|
134
134
|
this.defineCache = {};
|
|
135
135
|
this.orderedDefs = [];
|
|
136
|
+
// Start watchdog timer
|
|
137
|
+
if (hasSetTimeout) {
|
|
138
|
+
this.watchdogTimerId = this.startWatchdogTimer();
|
|
139
|
+
}
|
|
136
140
|
// Parse configuration
|
|
137
141
|
this.global = global;
|
|
138
142
|
this.config = global.LWR;
|
|
139
|
-
this.loaderSpecifier = 'lwr/loader/v/
|
|
143
|
+
this.loaderSpecifier = 'lwr/loader/v/0_7_0-alpha_2';
|
|
144
|
+
// Set up error handler
|
|
145
|
+
this.errorHandler = this.config.onError;
|
|
140
146
|
// Set up the temporary LWR.define function and customInit hook
|
|
141
147
|
const tempDefine = this.tempDefine.bind(this);
|
|
142
148
|
global.LWR.define = tempDefine;
|
|
143
149
|
this.bootReady = this.config.autoBoot;
|
|
144
|
-
// Start watchdog timer
|
|
145
|
-
if (hasSetTimeout) {
|
|
146
|
-
this.watchdogTimerId = this.startWatchdogTimer();
|
|
147
|
-
}
|
|
148
150
|
try {
|
|
149
151
|
customInit(Object.freeze(this.config), this.postCustomInit.bind(this), tempDefine, (e) => {
|
|
152
|
+
// customInit handlers can overwrite
|
|
153
|
+
// the error handler with onBootstrapError
|
|
150
154
|
this.errorHandler = e;
|
|
151
155
|
});
|
|
152
156
|
}
|
|
@@ -238,7 +242,7 @@
|
|
|
238
242
|
const exporter = (exports) => {
|
|
239
243
|
Object.assign(exports, { logOperationStart, logOperationEnd });
|
|
240
244
|
};
|
|
241
|
-
loader.define('lwr/profiler/v/
|
|
245
|
+
loader.define('lwr/profiler/v/0_7_0-alpha_2', ['exports'], exporter);
|
|
242
246
|
}
|
|
243
247
|
// Set up the application globals, import map, root custom element...
|
|
244
248
|
mountApp(loader) {
|
|
@@ -298,8 +302,8 @@
|
|
|
298
302
|
// The loader module is ALWAYS required
|
|
299
303
|
const GLOBAL = globalThis;
|
|
300
304
|
GLOBAL.LWR.requiredModules = GLOBAL.LWR.requiredModules || [];
|
|
301
|
-
if (GLOBAL.LWR.requiredModules.indexOf('lwr/loader/v/
|
|
302
|
-
GLOBAL.LWR.requiredModules.push('lwr/loader/v/
|
|
305
|
+
if (GLOBAL.LWR.requiredModules.indexOf('lwr/loader/v/0_7_0-alpha_2') < 0) {
|
|
306
|
+
GLOBAL.LWR.requiredModules.push('lwr/loader/v/0_7_0-alpha_2');
|
|
303
307
|
}
|
|
304
308
|
new LoaderShim(GLOBAL);
|
|
305
309
|
|
package/build/cjs/index.cjs
CHANGED
|
@@ -32,7 +32,9 @@ var import_package = __toModule(require("@lwrjs/loader/package"));
|
|
|
32
32
|
var AmdLoaderShimService = class {
|
|
33
33
|
constructor({dir = "assets"}, context) {
|
|
34
34
|
this.name = "loader-shim-resource";
|
|
35
|
+
this.errorShimName = "lwr-error-shim.js";
|
|
35
36
|
this.filenames = [
|
|
37
|
+
this.errorShimName,
|
|
36
38
|
"lwr-loader-shim.js",
|
|
37
39
|
"lwr-loader-shim.bundle.js",
|
|
38
40
|
"lwr-loader-shim.bundle.min.js",
|
|
@@ -55,6 +57,7 @@ var AmdLoaderShimService = class {
|
|
|
55
57
|
return {
|
|
56
58
|
specifier,
|
|
57
59
|
type: "application/javascript",
|
|
60
|
+
inline: specifier === this.errorShimName ? true : false,
|
|
58
61
|
stream: import_fs.default.createReadStream(absFilepath),
|
|
59
62
|
src: this.context.resourceRegistry.resolveResourceUri({specifier, version}, environment)
|
|
60
63
|
};
|
|
@@ -43,19 +43,21 @@ var ImportMetadataResolver = class {
|
|
|
43
43
|
getMappingEndpoint() {
|
|
44
44
|
return this.config.endpoints && this.config.endpoints.uris ? this.config.endpoints.uris.mapping : void 0;
|
|
45
45
|
}
|
|
46
|
-
|
|
47
|
-
const modifiers = this.config.endpoints ? this.config.endpoints.modifiers :
|
|
48
|
-
|
|
46
|
+
getQueryParams(importer) {
|
|
47
|
+
const modifiers = this.config.endpoints ? this.config.endpoints.modifiers : {};
|
|
48
|
+
const params = importer ? {importer, ...modifiers} : {...modifiers};
|
|
49
|
+
const keys = Object.keys(params);
|
|
50
|
+
if (keys.length < 1) {
|
|
49
51
|
return "";
|
|
50
52
|
} else {
|
|
51
|
-
const qs =
|
|
53
|
+
const qs = keys.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`).join("&");
|
|
52
54
|
return `?${qs}`;
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
|
-
buildMappingUrl(specifier) {
|
|
57
|
+
buildMappingUrl(specifier, importer) {
|
|
56
58
|
const mappingEndpoint = this.getMappingEndpoint();
|
|
57
59
|
const specifiers = encodeURIComponent(specifier);
|
|
58
|
-
const modifiers = this.
|
|
60
|
+
const modifiers = this.getQueryParams(importer);
|
|
59
61
|
return `${mappingEndpoint}${specifiers}${modifiers}`;
|
|
60
62
|
}
|
|
61
63
|
getBaseUrl() {
|
|
@@ -96,11 +98,23 @@ var ImportMetadataResolver = class {
|
|
|
96
98
|
});
|
|
97
99
|
}
|
|
98
100
|
}
|
|
99
|
-
|
|
100
|
-
return
|
|
101
|
+
getImporterSpecifier(specifier, importer) {
|
|
102
|
+
return `${specifier}?importer=${encodeURIComponent(importer)}`;
|
|
101
103
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
getURI(specifier, importer) {
|
|
105
|
+
let cachedSpecifier = void 0;
|
|
106
|
+
if (this.importURICache.has(specifier)) {
|
|
107
|
+
cachedSpecifier = specifier;
|
|
108
|
+
} else if (importer) {
|
|
109
|
+
const importerSpecifier = this.getImporterSpecifier(specifier, importer);
|
|
110
|
+
if (this.importURICache.has(importerSpecifier)) {
|
|
111
|
+
cachedSpecifier = importerSpecifier;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return cachedSpecifier ? (0, import_url.resolveUrl)(this.importURICache.get(cachedSpecifier).uri, this.getBaseUrl()) : void 0;
|
|
115
|
+
}
|
|
116
|
+
resolveLocal(specifier, importer) {
|
|
117
|
+
const uri = this.getURI(specifier, importer);
|
|
104
118
|
if (uri) {
|
|
105
119
|
return uri;
|
|
106
120
|
} else if ((0, import_url.isUrl)(specifier) || specifier.startsWith("/")) {
|
|
@@ -108,41 +122,42 @@ var ImportMetadataResolver = class {
|
|
|
108
122
|
}
|
|
109
123
|
return void 0;
|
|
110
124
|
}
|
|
111
|
-
async resolve(specifier) {
|
|
112
|
-
let uri = this.getURI(specifier);
|
|
125
|
+
async resolve(specifier, importer) {
|
|
126
|
+
let uri = this.getURI(specifier, importer);
|
|
113
127
|
if (uri) {
|
|
114
128
|
return uri;
|
|
115
129
|
} else if ((0, import_url.isUrl)(specifier) || specifier.startsWith("/")) {
|
|
116
130
|
return specifier;
|
|
117
131
|
} else {
|
|
118
|
-
const
|
|
132
|
+
const pendingURICacheKey = importer ? this.getImporterSpecifier(specifier, importer) : specifier;
|
|
133
|
+
const pending = this.pendingURICache.get(pendingURICacheKey);
|
|
119
134
|
if (pending) {
|
|
120
135
|
return pending;
|
|
121
136
|
}
|
|
122
|
-
this.config.profiler.logOperationStart({id: import_metrics.MAPPINGS_FETCH,
|
|
137
|
+
this.config.profiler.logOperationStart({id: import_metrics.MAPPINGS_FETCH, pendingURICacheKey});
|
|
123
138
|
const fetchMappingService = this.hasMappingHooks() ? this.evaluateMappingHooks : this.fetchNewMappings;
|
|
124
|
-
const promise = fetchMappingService.bind(this)(specifier).then((importMetadata) => {
|
|
139
|
+
const promise = fetchMappingService.bind(this)(specifier, importer).then((importMetadata) => {
|
|
125
140
|
if (!importMetadata || !importMetadata.imports) {
|
|
126
|
-
throw new import_messages.LoaderError(import_messages.UNRESOLVED, [
|
|
141
|
+
throw new import_messages.LoaderError(import_messages.UNRESOLVED, [pendingURICacheKey]);
|
|
127
142
|
}
|
|
128
143
|
this.registerImportMappings(importMetadata, [specifier]);
|
|
129
|
-
uri = this.getURI(specifier);
|
|
144
|
+
uri = this.getURI(specifier, importer);
|
|
130
145
|
if (!uri) {
|
|
131
|
-
throw new import_messages.LoaderError(import_messages.UNRESOLVED, [
|
|
146
|
+
throw new import_messages.LoaderError(import_messages.UNRESOLVED, [pendingURICacheKey]);
|
|
132
147
|
}
|
|
133
|
-
this.config.profiler.logOperationEnd({id: import_metrics.MAPPINGS_FETCH,
|
|
148
|
+
this.config.profiler.logOperationEnd({id: import_metrics.MAPPINGS_FETCH, pendingURICacheKey});
|
|
134
149
|
return uri;
|
|
135
150
|
}).finally(() => {
|
|
136
|
-
this.pendingURICache.delete(
|
|
151
|
+
this.pendingURICache.delete(pendingURICacheKey);
|
|
137
152
|
});
|
|
138
|
-
this.pendingURICache.set(
|
|
153
|
+
this.pendingURICache.set(pendingURICacheKey, promise);
|
|
139
154
|
return promise;
|
|
140
155
|
}
|
|
141
156
|
}
|
|
142
157
|
hasMappingHooks() {
|
|
143
158
|
return this.loadMappingHooks.length > 0;
|
|
144
159
|
}
|
|
145
|
-
async evaluateMappingHooks(specifier) {
|
|
160
|
+
async evaluateMappingHooks(specifier, importer) {
|
|
146
161
|
const loadMappingHooks = this.loadMappingHooks;
|
|
147
162
|
if (loadMappingHooks.length) {
|
|
148
163
|
const knownModules = Array.from(this.importURICache.keys());
|
|
@@ -154,13 +169,13 @@ var ImportMetadataResolver = class {
|
|
|
154
169
|
}
|
|
155
170
|
}
|
|
156
171
|
}
|
|
157
|
-
return this.fetchNewMappings(specifier);
|
|
172
|
+
return this.fetchNewMappings(specifier, importer);
|
|
158
173
|
}
|
|
159
|
-
async fetchNewMappings(specifier) {
|
|
174
|
+
async fetchNewMappings(specifier, importer) {
|
|
160
175
|
if (typeof globalThis.fetch !== "function") {
|
|
161
176
|
throw new import_messages.LoaderError(import_messages.UNRESOLVED, [specifier]);
|
|
162
177
|
}
|
|
163
|
-
const uri = (0, import_url.resolveUrl)(this.buildMappingUrl(specifier), this.getBaseUrl());
|
|
178
|
+
const uri = (0, import_url.resolveUrl)(this.buildMappingUrl(specifier, importer), this.getBaseUrl());
|
|
164
179
|
return globalThis.fetch(uri).then((res) => {
|
|
165
180
|
if (!res.ok) {
|
|
166
181
|
this.config.profiler.logOperationStart({id: import_metrics.MAPPINGS_ERROR, specifier});
|
|
@@ -95,7 +95,7 @@ var ModuleRegistry = class {
|
|
|
95
95
|
if (this.moduleRegistry.has(resolvedOrPlain)) {
|
|
96
96
|
return resolvedOrPlain;
|
|
97
97
|
}
|
|
98
|
-
const resolvedUrl = this.resolver.resolveLocal(resolvedOrPlain);
|
|
98
|
+
const resolvedUrl = this.resolver.resolveLocal(resolvedOrPlain, importer);
|
|
99
99
|
if (resolvedUrl) {
|
|
100
100
|
if (this.namedDefineRegistry.has(resolvedOrPlain) && this.namedDefineRegistry.get(resolvedOrPlain).defined) {
|
|
101
101
|
const record = this.moduleRegistry.get(resolvedUrl);
|
|
@@ -109,7 +109,7 @@ var ModuleRegistry = class {
|
|
|
109
109
|
return resolvedOrPlain;
|
|
110
110
|
}
|
|
111
111
|
try {
|
|
112
|
-
resolved = await this.resolver.resolve(resolvedOrPlain);
|
|
112
|
+
resolved = await this.resolver.resolve(resolvedOrPlain, importer);
|
|
113
113
|
} catch (e) {
|
|
114
114
|
}
|
|
115
115
|
}
|
package/build/index.d.ts
CHANGED
package/build/index.js
CHANGED
|
@@ -4,7 +4,9 @@ import { rootPath } from '@lwrjs/loader/package';
|
|
|
4
4
|
export default class AmdLoaderShimService {
|
|
5
5
|
constructor({ dir = 'assets' }, context) {
|
|
6
6
|
this.name = 'loader-shim-resource';
|
|
7
|
+
this.errorShimName = 'lwr-error-shim.js';
|
|
7
8
|
this.filenames = [
|
|
9
|
+
this.errorShimName,
|
|
8
10
|
'lwr-loader-shim.js',
|
|
9
11
|
'lwr-loader-shim.bundle.js',
|
|
10
12
|
'lwr-loader-shim.bundle.min.js',
|
|
@@ -29,6 +31,7 @@ export default class AmdLoaderShimService {
|
|
|
29
31
|
return {
|
|
30
32
|
specifier,
|
|
31
33
|
type: 'application/javascript',
|
|
34
|
+
inline: specifier === this.errorShimName ? true : false,
|
|
32
35
|
stream: fs.createReadStream(absFilepath),
|
|
33
36
|
src: this.context.resourceRegistry.resolveResourceUri({ specifier, version }, environment),
|
|
34
37
|
};
|
|
@@ -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 ESM Module Loader v0.
|
|
7
|
+
/* LWR ESM Module Loader v0.7.0-alpha.2 */
|
|
8
8
|
/**
|
|
9
9
|
* Simplified version of the AMD Import Metadata Resolver.
|
|
10
10
|
* Just reads the ImportMetadata at construction time.
|
|
@@ -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 v0.
|
|
7
|
+
/* LWR Module Loader v0.7.0-alpha.2 */
|
|
8
8
|
const templateRegex = /\{([0-9]+)\}/g;
|
|
9
9
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
10
|
function templateString(template, args) {
|
|
@@ -327,23 +327,25 @@ class ImportMetadataResolver {
|
|
|
327
327
|
? this.config.endpoints.uris.mapping
|
|
328
328
|
: undefined;
|
|
329
329
|
}
|
|
330
|
-
|
|
331
|
-
const modifiers = this.config.endpoints ? this.config.endpoints.modifiers :
|
|
332
|
-
|
|
330
|
+
getQueryParams(importer) {
|
|
331
|
+
const modifiers = this.config.endpoints ? this.config.endpoints.modifiers : {};
|
|
332
|
+
const params = importer ? Object.assign({ importer }, modifiers) : Object.assign({}, modifiers);
|
|
333
|
+
const keys = Object.keys(params);
|
|
334
|
+
if (keys.length < 1) {
|
|
333
335
|
// No modifiers return an empty string to append to the URL
|
|
334
336
|
return '';
|
|
335
337
|
}
|
|
336
338
|
else {
|
|
337
|
-
const qs =
|
|
338
|
-
.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(
|
|
339
|
+
const qs = keys
|
|
340
|
+
.map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
|
|
339
341
|
.join('&');
|
|
340
342
|
return `?${qs}`;
|
|
341
343
|
}
|
|
342
344
|
}
|
|
343
|
-
buildMappingUrl(specifier) {
|
|
345
|
+
buildMappingUrl(specifier, importer) {
|
|
344
346
|
const mappingEndpoint = this.getMappingEndpoint();
|
|
345
347
|
const specifiers = encodeURIComponent(specifier);
|
|
346
|
-
const modifiers = this.
|
|
348
|
+
const modifiers = this.getQueryParams(importer);
|
|
347
349
|
return `${mappingEndpoint}${specifiers}${modifiers}`;
|
|
348
350
|
}
|
|
349
351
|
getBaseUrl() {
|
|
@@ -385,14 +387,28 @@ class ImportMetadataResolver {
|
|
|
385
387
|
});
|
|
386
388
|
}
|
|
387
389
|
}
|
|
390
|
+
getImporterSpecifier(specifier, importer) {
|
|
391
|
+
return `${specifier}?importer=${encodeURIComponent(importer)}`;
|
|
392
|
+
}
|
|
388
393
|
// Get URL from the local cache or return undefiend
|
|
389
|
-
getURI(specifier) {
|
|
390
|
-
|
|
391
|
-
|
|
394
|
+
getURI(specifier, importer) {
|
|
395
|
+
// Check if we have the raw specifier or with the importer in the cache
|
|
396
|
+
let cachedSpecifier = undefined;
|
|
397
|
+
if (this.importURICache.has(specifier)) {
|
|
398
|
+
cachedSpecifier = specifier;
|
|
399
|
+
}
|
|
400
|
+
else if (importer) {
|
|
401
|
+
const importerSpecifier = this.getImporterSpecifier(specifier, importer);
|
|
402
|
+
if (this.importURICache.has(importerSpecifier)) {
|
|
403
|
+
cachedSpecifier = importerSpecifier;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return cachedSpecifier
|
|
407
|
+
? resolveUrl(this.importURICache.get(cachedSpecifier).uri, this.getBaseUrl())
|
|
392
408
|
: undefined;
|
|
393
409
|
}
|
|
394
|
-
resolveLocal(specifier) {
|
|
395
|
-
const uri = this.getURI(specifier);
|
|
410
|
+
resolveLocal(specifier, importer) {
|
|
411
|
+
const uri = this.getURI(specifier, importer);
|
|
396
412
|
if (uri) {
|
|
397
413
|
return uri;
|
|
398
414
|
}
|
|
@@ -411,8 +427,8 @@ class ImportMetadataResolver {
|
|
|
411
427
|
* @param specifier
|
|
412
428
|
* @returns module URI
|
|
413
429
|
*/
|
|
414
|
-
async resolve(specifier) {
|
|
415
|
-
let uri = this.getURI(specifier);
|
|
430
|
+
async resolve(specifier, importer) {
|
|
431
|
+
let uri = this.getURI(specifier, importer);
|
|
416
432
|
if (uri) {
|
|
417
433
|
return uri;
|
|
418
434
|
}
|
|
@@ -420,32 +436,33 @@ class ImportMetadataResolver {
|
|
|
420
436
|
return specifier;
|
|
421
437
|
}
|
|
422
438
|
else {
|
|
423
|
-
const
|
|
439
|
+
const pendingURICacheKey = importer ? this.getImporterSpecifier(specifier, importer) : specifier;
|
|
440
|
+
const pending = this.pendingURICache.get(pendingURICacheKey);
|
|
424
441
|
if (pending) {
|
|
425
442
|
return pending;
|
|
426
443
|
}
|
|
427
|
-
this.config.profiler.logOperationStart({ id: MAPPINGS_FETCH,
|
|
444
|
+
this.config.profiler.logOperationStart({ id: MAPPINGS_FETCH, pendingURICacheKey });
|
|
428
445
|
const fetchMappingService = this.hasMappingHooks()
|
|
429
446
|
? this.evaluateMappingHooks
|
|
430
447
|
: this.fetchNewMappings;
|
|
431
448
|
const promise = fetchMappingService
|
|
432
|
-
.bind(this)(specifier)
|
|
449
|
+
.bind(this)(specifier, importer)
|
|
433
450
|
.then((importMetadata) => {
|
|
434
451
|
if (!importMetadata || !importMetadata.imports) {
|
|
435
|
-
throw new LoaderError(UNRESOLVED, [
|
|
452
|
+
throw new LoaderError(UNRESOLVED, [pendingURICacheKey]);
|
|
436
453
|
}
|
|
437
454
|
this.registerImportMappings(importMetadata, [specifier]);
|
|
438
|
-
uri = this.getURI(specifier);
|
|
455
|
+
uri = this.getURI(specifier, importer);
|
|
439
456
|
if (!uri) {
|
|
440
|
-
throw new LoaderError(UNRESOLVED, [
|
|
457
|
+
throw new LoaderError(UNRESOLVED, [pendingURICacheKey]);
|
|
441
458
|
}
|
|
442
|
-
this.config.profiler.logOperationEnd({ id: MAPPINGS_FETCH,
|
|
459
|
+
this.config.profiler.logOperationEnd({ id: MAPPINGS_FETCH, pendingURICacheKey });
|
|
443
460
|
return uri;
|
|
444
461
|
})
|
|
445
462
|
.finally(() => {
|
|
446
|
-
this.pendingURICache.delete(
|
|
463
|
+
this.pendingURICache.delete(pendingURICacheKey);
|
|
447
464
|
});
|
|
448
|
-
this.pendingURICache.set(
|
|
465
|
+
this.pendingURICache.set(pendingURICacheKey, promise);
|
|
449
466
|
return promise;
|
|
450
467
|
}
|
|
451
468
|
}
|
|
@@ -457,7 +474,7 @@ class ImportMetadataResolver {
|
|
|
457
474
|
* @param specifier Request module identifier
|
|
458
475
|
* @returns Import Metadata from the module root
|
|
459
476
|
*/
|
|
460
|
-
async evaluateMappingHooks(specifier) {
|
|
477
|
+
async evaluateMappingHooks(specifier, importer) {
|
|
461
478
|
// Check with any registered loadMappingHooks
|
|
462
479
|
const loadMappingHooks = this.loadMappingHooks;
|
|
463
480
|
if (loadMappingHooks.length) {
|
|
@@ -473,15 +490,15 @@ class ImportMetadataResolver {
|
|
|
473
490
|
}
|
|
474
491
|
}
|
|
475
492
|
// If we still do not have a match call the mapping service
|
|
476
|
-
return this.fetchNewMappings(specifier);
|
|
493
|
+
return this.fetchNewMappings(specifier, importer);
|
|
477
494
|
}
|
|
478
|
-
async fetchNewMappings(specifier) {
|
|
495
|
+
async fetchNewMappings(specifier, importer) {
|
|
479
496
|
if (typeof globalThis.fetch !== 'function') {
|
|
480
497
|
throw new LoaderError(UNRESOLVED, [specifier]);
|
|
481
498
|
}
|
|
482
499
|
// TODO For module invalidation with bundles it is recommended we have to send back all loaded root specified
|
|
483
500
|
// to ensure we detect all conflicts.
|
|
484
|
-
const uri = resolveUrl(this.buildMappingUrl(specifier), this.getBaseUrl());
|
|
501
|
+
const uri = resolveUrl(this.buildMappingUrl(specifier, importer), this.getBaseUrl());
|
|
485
502
|
return globalThis.fetch(uri).then((res) => {
|
|
486
503
|
if (!res.ok) {
|
|
487
504
|
this.config.profiler.logOperationStart({ id: MAPPINGS_ERROR, specifier });
|
|
@@ -697,7 +714,7 @@ class ModuleRegistry {
|
|
|
697
714
|
if (this.moduleRegistry.has(resolvedOrPlain)) {
|
|
698
715
|
return resolvedOrPlain;
|
|
699
716
|
}
|
|
700
|
-
const resolvedUrl = this.resolver.resolveLocal(resolvedOrPlain);
|
|
717
|
+
const resolvedUrl = this.resolver.resolveLocal(resolvedOrPlain, importer);
|
|
701
718
|
if (resolvedUrl) {
|
|
702
719
|
// return the plain id if it is already defined && the resolvedUrl is NOT already in the module registry
|
|
703
720
|
if (this.namedDefineRegistry.has(resolvedOrPlain) &&
|
|
@@ -713,7 +730,7 @@ class ModuleRegistry {
|
|
|
713
730
|
return resolvedOrPlain;
|
|
714
731
|
}
|
|
715
732
|
try {
|
|
716
|
-
resolved = await this.resolver.resolve(resolvedOrPlain);
|
|
733
|
+
resolved = await this.resolver.resolve(resolvedOrPlain, importer);
|
|
717
734
|
}
|
|
718
735
|
catch (e) {
|
|
719
736
|
// defer to error handling below for unresolved
|
|
@@ -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 v0.
|
|
7
|
+
/* LWR Legacy Module Loader v0.7.0-alpha.2 */
|
|
8
8
|
const templateRegex = /\{([0-9]+)\}/g;
|
|
9
9
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
10
|
function templateString(template, args) {
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"version": "0.
|
|
8
|
+
"version": "0.7.0-alpha.2",
|
|
9
9
|
"homepage": "https://developer.salesforce.com/docs/platform/lwr/overview",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"import": "./build/metrics.js",
|
|
29
29
|
"require": "./build/cjs/metrics.cjs"
|
|
30
30
|
},
|
|
31
|
+
"./prod-error-shim": "./build/assets/prod/lwr-error-shim.js",
|
|
31
32
|
"./prod-loader-shim": "./build/assets/prod/lwr-loader-shim.js",
|
|
32
33
|
"./prod-loader-shim-bundle": "./build/assets/prod/lwr-loader-shim.bundle.js",
|
|
33
34
|
"./prod-loader-shim-bundle-min": "./build/assets/prod/lwr-loader-shim.bundle.min.js",
|
|
@@ -50,22 +51,23 @@
|
|
|
50
51
|
"test:browserLegacy:ci": "rm tsconfig.tsbuildinfo; yarn build; JEST_PUPPETEER_CONFIG=jest-puppeteer-legacy.config.cjs jest --runInBand --no-cache --config jest.browser-legacy.config.cjs",
|
|
51
52
|
"start:testserver": "node build/__tests__/shim/browser/test_server.js",
|
|
52
53
|
"start:testserverLegacy": "node build/__tests__/shim-legacy/browser/test_server.js",
|
|
53
|
-
"build:platform": "yarn build:shim && node ./scripts/platform-versioning.js",
|
|
54
|
+
"build:platform": "yarn build:shim && yarn build:error-shim && node ./scripts/platform-versioning.js",
|
|
54
55
|
"build:shim:bundle": "rollup --config scripts/rollup-shim-bundle.config.cjs && rollup --config scripts/rollup-shim-legacy-bundle.config.cjs && rollup --config scripts/rollup.moduleBundle.config.cjs",
|
|
55
56
|
"build:shim:bundle:minify": "MINIFY=true yarn build:shim:bundle",
|
|
56
57
|
"build:shim": "rollup --config scripts/rollup-shim.config.cjs",
|
|
57
58
|
"build:loader": "rollup --config scripts/rollup.config.cjs",
|
|
59
|
+
"build:error-shim": "rollup --config scripts/rollup-error-shim.config.cjs",
|
|
58
60
|
"build:ts": "tsc -b",
|
|
59
|
-
"build": "yarn build:ts && yarn build:shim && yarn build:loader && yarn build:shim:bundle && yarn build:shim:bundle:minify"
|
|
61
|
+
"build": "yarn build:ts && yarn build:error-shim && yarn build:shim && yarn build:loader && yarn build:shim:bundle && yarn build:shim:bundle:minify"
|
|
60
62
|
},
|
|
61
63
|
"devDependencies": {
|
|
62
|
-
"@lwrjs/compiler": "0.
|
|
63
|
-
"@lwrjs/diagnostics": "0.
|
|
64
|
-
"@lwrjs/types": "0.
|
|
64
|
+
"@lwrjs/compiler": "0.7.0-alpha.2",
|
|
65
|
+
"@lwrjs/diagnostics": "0.7.0-alpha.2",
|
|
66
|
+
"@lwrjs/types": "0.7.0-alpha.2",
|
|
65
67
|
"rollup-plugin-terser": "^7.0.2"
|
|
66
68
|
},
|
|
67
69
|
"dependencies": {
|
|
68
|
-
"@lwrjs/shared-utils": "0.
|
|
70
|
+
"@lwrjs/shared-utils": "0.7.0-alpha.2"
|
|
69
71
|
},
|
|
70
72
|
"lwc": {
|
|
71
73
|
"modules": [
|
|
@@ -82,5 +84,5 @@
|
|
|
82
84
|
"engines": {
|
|
83
85
|
"node": ">=14.15.4 <17"
|
|
84
86
|
},
|
|
85
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "fc3a13d1c5440833eb2ec17fbf0e294554bafa08"
|
|
86
88
|
}
|