@pie-players/pie-players-shared 0.3.30 → 0.3.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/loaders/ElementLoader.d.ts +6 -34
- package/dist/loaders/ElementLoader.d.ts.map +1 -1
- package/dist/loaders/ElementLoader.js +21 -9
- package/dist/loaders/ElementLoader.js.map +1 -1
- package/dist/loaders/element-loader-types.d.ts +91 -0
- package/dist/loaders/element-loader-types.d.ts.map +1 -0
- package/dist/loaders/element-loader-types.js +26 -0
- package/dist/loaders/element-loader-types.js.map +1 -0
- package/dist/loaders/element-loader.d.ts +92 -0
- package/dist/loaders/element-loader.d.ts.map +1 -0
- package/dist/loaders/element-loader.js +391 -0
- package/dist/loaders/element-loader.js.map +1 -0
- package/dist/loaders/esm-adapter.d.ts +40 -0
- package/dist/loaders/esm-adapter.d.ts.map +1 -0
- package/dist/loaders/esm-adapter.js +274 -0
- package/dist/loaders/esm-adapter.js.map +1 -0
- package/dist/loaders/iife-adapter.d.ts +86 -0
- package/dist/loaders/iife-adapter.d.ts.map +1 -0
- package/dist/loaders/iife-adapter.js +365 -0
- package/dist/loaders/iife-adapter.js.map +1 -0
- package/dist/loaders/index.d.ts +30 -17
- package/dist/loaders/index.d.ts.map +1 -1
- package/dist/loaders/index.js +26 -14
- package/dist/loaders/index.js.map +1 -1
- package/dist/pie/index.d.ts +4 -4
- package/dist/pie/index.d.ts.map +1 -1
- package/dist/pie/index.js +7 -2
- package/dist/pie/index.js.map +1 -1
- package/dist/pie/initialization.d.ts +26 -1
- package/dist/pie/initialization.d.ts.map +1 -1
- package/dist/pie/initialization.js +72 -15
- package/dist/pie/initialization.js.map +1 -1
- package/dist/pie/instrumentation-event-map.d.ts.map +1 -1
- package/dist/pie/instrumentation-event-map.js +27 -16
- package/dist/pie/instrumentation-event-map.js.map +1 -1
- package/dist/pie/stage-tracker.d.ts +51 -0
- package/dist/pie/stage-tracker.d.ts.map +1 -0
- package/dist/pie/stage-tracker.js +106 -0
- package/dist/pie/stage-tracker.js.map +1 -0
- package/dist/pie/stages.d.ts +75 -0
- package/dist/pie/stages.d.ts.map +1 -0
- package/dist/pie/stages.js +58 -0
- package/dist/pie/stages.js.map +1 -0
- package/dist/pie/use-resource-monitor.svelte.d.ts.map +1 -1
- package/dist/pie/use-resource-monitor.svelte.js +88 -75
- package/dist/pie/use-resource-monitor.svelte.js.map +1 -1
- package/dist/ui/use-promise.svelte.ts +109 -0
- package/package.json +6 -1
- package/dist/loaders/EsmElementLoader.d.ts +0 -69
- package/dist/loaders/EsmElementLoader.d.ts.map +0 -1
- package/dist/loaders/EsmElementLoader.js +0 -72
- package/dist/loaders/EsmElementLoader.js.map +0 -1
- package/dist/loaders/IifeElementLoader.d.ts +0 -61
- package/dist/loaders/IifeElementLoader.d.ts.map +0 -1
- package/dist/loaders/IifeElementLoader.js +0 -63
- package/dist/loaders/IifeElementLoader.js.map +0 -1
- package/dist/pie/esm-loader.d.ts +0 -104
- package/dist/pie/esm-loader.d.ts.map +0 -1
- package/dist/pie/esm-loader.js +0 -358
- package/dist/pie/esm-loader.js.map +0 -1
- package/dist/pie/iife-loader.d.ts +0 -116
- package/dist/pie/iife-loader.d.ts.map +0 -1
- package/dist/pie/iife-loader.js +0 -561
- package/dist/pie/iife-loader.js.map +0 -1
package/dist/pie/esm-loader.d.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ESM PIE Loader
|
|
3
|
-
*
|
|
4
|
-
* Dynamically loads PIE elements from ESM CDN (esm.sh, jsDelivr, etc.)
|
|
5
|
-
* using import maps for version resolution.
|
|
6
|
-
*
|
|
7
|
-
* Supports loading different views/variants of elements (delivery, author, print,
|
|
8
|
-
* or custom UI variants) by importing from different subpaths.
|
|
9
|
-
*
|
|
10
|
-
* Integrates with the existing PIE registry system to enable shared
|
|
11
|
-
* initialization code to work with ESM-loaded elements.
|
|
12
|
-
*/
|
|
13
|
-
export interface EsmLoaderConfig {
|
|
14
|
-
cdnBaseUrl: string;
|
|
15
|
-
debugEnabled?: () => boolean;
|
|
16
|
-
/**
|
|
17
|
-
* Module resolution mode.
|
|
18
|
-
* - "url" (default): load using fully-qualified CDN URLs
|
|
19
|
-
* - "import-map": load using bare specifiers resolved by injected import maps
|
|
20
|
-
*/
|
|
21
|
-
moduleResolution?: "url" | "import-map";
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* View configuration for element loading
|
|
25
|
-
* Maps view names to their subpath and tag suffix
|
|
26
|
-
*/
|
|
27
|
-
export interface ViewConfig {
|
|
28
|
-
/** Subpath to import from (e.g., '/author', '/print', '/delivery-mobile') */
|
|
29
|
-
subpath: string;
|
|
30
|
-
/** Suffix to append to tag name (e.g., '-config', '-print', '') */
|
|
31
|
-
tagSuffix: string;
|
|
32
|
-
/** Optional fallback view if this view doesn't exist */
|
|
33
|
-
fallback?: string;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Options for loading elements
|
|
37
|
-
*/
|
|
38
|
-
export interface EsmLoadOptions {
|
|
39
|
-
/**
|
|
40
|
-
* View to load (e.g., 'delivery', 'author', 'print', 'delivery-mobile')
|
|
41
|
-
* Can be any subpath defined in the element's package.json exports
|
|
42
|
-
*/
|
|
43
|
-
view: string;
|
|
44
|
-
/** Whether to also load controller modules */
|
|
45
|
-
loadControllers?: boolean;
|
|
46
|
-
/** Custom view configuration (overrides built-in views) */
|
|
47
|
-
viewConfig?: ViewConfig;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Built-in view configurations
|
|
51
|
-
* Extensible - elements can define custom views (e.g., 'delivery-mobile', 'delivery-a11y')
|
|
52
|
-
*/
|
|
53
|
-
export declare const BUILT_IN_VIEWS: Record<string, ViewConfig>;
|
|
54
|
-
export declare class EsmPieLoader {
|
|
55
|
-
private cdnBaseUrl;
|
|
56
|
-
private moduleResolution;
|
|
57
|
-
private importMapInjected;
|
|
58
|
-
constructor(config: EsmLoaderConfig);
|
|
59
|
-
private extractPackageName;
|
|
60
|
-
private generateImportMap;
|
|
61
|
-
private isJsDelivrNpm;
|
|
62
|
-
private resolvePackageUrl;
|
|
63
|
-
private resolveControllerUrl;
|
|
64
|
-
private resolveSubpathUrl;
|
|
65
|
-
private injectImportMap;
|
|
66
|
-
private assertRuntimeSupport;
|
|
67
|
-
private normalizeImportError;
|
|
68
|
-
private resolveElementSpecifier;
|
|
69
|
-
private resolveControllerSpecifier;
|
|
70
|
-
private loadElement;
|
|
71
|
-
getController(tag: string): any | null;
|
|
72
|
-
elementsHaveLoaded(elements: Array<{
|
|
73
|
-
name: string;
|
|
74
|
-
tag: string;
|
|
75
|
-
}>): Promise<{
|
|
76
|
-
elements: typeof elements;
|
|
77
|
-
val: boolean;
|
|
78
|
-
}>;
|
|
79
|
-
/**
|
|
80
|
-
* Load PIE elements with specified view/variant
|
|
81
|
-
*
|
|
82
|
-
* @param contentConfig - Item config with elements
|
|
83
|
-
* @param doc - Document to inject import maps into
|
|
84
|
-
* @param options - Loading options (view, controllers, etc.)
|
|
85
|
-
*
|
|
86
|
-
* @example
|
|
87
|
-
* // Load delivery view with controllers
|
|
88
|
-
* await loader.load(config, document, { view: 'delivery', loadControllers: true });
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* // Load author view (configuration UI)
|
|
92
|
-
* await loader.load(config, document, { view: 'author', loadControllers: false });
|
|
93
|
-
*
|
|
94
|
-
* @example
|
|
95
|
-
* // Load custom mobile-optimized view with fallback
|
|
96
|
-
* await loader.load(config, document, {
|
|
97
|
-
* view: 'delivery-mobile',
|
|
98
|
-
* viewConfig: { subpath: '/delivery-mobile', tagSuffix: '', fallback: 'delivery' },
|
|
99
|
-
* loadControllers: true
|
|
100
|
-
* });
|
|
101
|
-
*/
|
|
102
|
-
load(contentConfig: any, doc: Document, options: EsmLoadOptions): Promise<void>;
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=esm-loader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"esm-loader.d.ts","sourceRoot":"","sources":["../../src/pie/esm-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;IAC7B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IAC1B,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,UAAU,CAAC;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAmBrD,CAAC;AAEF,qBAAa,YAAY;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,MAAM,EAAE,eAAe;IAUnC,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,iBAAiB;IA0CzB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,oBAAoB;IAmC5B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,0BAA0B;YAUpB,WAAW;IAsJlB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAKhC,kBAAkB,CAC9B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAC5C,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,QAAQ,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC;IAUvD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACU,IAAI,CAChB,aAAa,EAAE,GAAG,EAClB,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC;CAwDhB"}
|
package/dist/pie/esm-loader.js
DELETED
|
@@ -1,358 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ESM PIE Loader
|
|
3
|
-
*
|
|
4
|
-
* Dynamically loads PIE elements from ESM CDN (esm.sh, jsDelivr, etc.)
|
|
5
|
-
* using import maps for version resolution.
|
|
6
|
-
*
|
|
7
|
-
* Supports loading different views/variants of elements (delivery, author, print,
|
|
8
|
-
* or custom UI variants) by importing from different subpaths.
|
|
9
|
-
*
|
|
10
|
-
* Integrates with the existing PIE registry system to enable shared
|
|
11
|
-
* initialization code to work with ESM-loaded elements.
|
|
12
|
-
*/
|
|
13
|
-
import { createPieLogger } from "./logger.js";
|
|
14
|
-
import { pieRegistry } from "./registry.js";
|
|
15
|
-
import { defineCustomElementSafely } from "./custom-element-define.js";
|
|
16
|
-
import { validateCustomElementTag } from "./tag-names.js";
|
|
17
|
-
import { isCustomElementConstructor, Status } from "./types.js";
|
|
18
|
-
// Logger factory - will be initialized when loader is created
|
|
19
|
-
let logger;
|
|
20
|
-
/**
|
|
21
|
-
* Built-in view configurations
|
|
22
|
-
* Extensible - elements can define custom views (e.g., 'delivery-mobile', 'delivery-a11y')
|
|
23
|
-
*/
|
|
24
|
-
export const BUILT_IN_VIEWS = {
|
|
25
|
-
delivery: {
|
|
26
|
-
subpath: "",
|
|
27
|
-
tagSuffix: "",
|
|
28
|
-
},
|
|
29
|
-
author: {
|
|
30
|
-
subpath: "/author",
|
|
31
|
-
tagSuffix: "-config",
|
|
32
|
-
fallback: "delivery", // Fall back to delivery if author doesn't exist
|
|
33
|
-
},
|
|
34
|
-
print: {
|
|
35
|
-
subpath: "/print",
|
|
36
|
-
tagSuffix: "-print",
|
|
37
|
-
fallback: "delivery",
|
|
38
|
-
},
|
|
39
|
-
// Custom views can follow patterns like:
|
|
40
|
-
// 'delivery-mobile': { subpath: '/delivery-mobile', tagSuffix: '', fallback: 'delivery' }
|
|
41
|
-
// 'delivery-a11y': { subpath: '/delivery-a11y', tagSuffix: '', fallback: 'delivery' }
|
|
42
|
-
// 'delivery-simple': { subpath: '/delivery-simple', tagSuffix: '', fallback: 'delivery' }
|
|
43
|
-
};
|
|
44
|
-
export class EsmPieLoader {
|
|
45
|
-
cdnBaseUrl;
|
|
46
|
-
moduleResolution;
|
|
47
|
-
importMapInjected = false;
|
|
48
|
-
constructor(config) {
|
|
49
|
-
this.cdnBaseUrl = config.cdnBaseUrl.replace(/\/+$/, "");
|
|
50
|
-
this.moduleResolution = config.moduleResolution || "url";
|
|
51
|
-
// Initialize logger with debug function
|
|
52
|
-
logger = createPieLogger("esm-loader", config.debugEnabled || (() => false));
|
|
53
|
-
}
|
|
54
|
-
extractPackageName(packageVersion) {
|
|
55
|
-
// Extract package name from version string
|
|
56
|
-
// e.g., "@pie-element/multiple-choice@11.0.1-esmbeta.3" => "@pie-element/multiple-choice"
|
|
57
|
-
const parts = packageVersion.split("@");
|
|
58
|
-
return parts.length >= 3 ? `@${parts[1]}` : parts[0];
|
|
59
|
-
}
|
|
60
|
-
generateImportMap(elements, options) {
|
|
61
|
-
const imports = {};
|
|
62
|
-
const viewConfig = options.viewConfig ||
|
|
63
|
-
BUILT_IN_VIEWS[options.view] ||
|
|
64
|
-
BUILT_IN_VIEWS.delivery;
|
|
65
|
-
for (const [_tag, packageVersion] of Object.entries(elements)) {
|
|
66
|
-
const packageName = this.extractPackageName(packageVersion);
|
|
67
|
-
// Add root package import (for delivery/default view)
|
|
68
|
-
imports[packageName] = this.resolvePackageUrl(packageVersion);
|
|
69
|
-
// Add view-specific subpath if not root
|
|
70
|
-
if (viewConfig.subpath) {
|
|
71
|
-
imports[`${packageName}${viewConfig.subpath}`] = this.resolveSubpathUrl(packageVersion, viewConfig.subpath);
|
|
72
|
-
}
|
|
73
|
-
// Add controller path if requested
|
|
74
|
-
if (options.loadControllers) {
|
|
75
|
-
imports[`${packageName}/controller`] =
|
|
76
|
-
this.resolveControllerUrl(packageVersion);
|
|
77
|
-
}
|
|
78
|
-
// Add fallback view if specified
|
|
79
|
-
if (viewConfig.fallback) {
|
|
80
|
-
const fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];
|
|
81
|
-
if (fallbackConfig?.subpath) {
|
|
82
|
-
imports[`${packageName}${fallbackConfig.subpath}`] =
|
|
83
|
-
this.resolveSubpathUrl(packageVersion, fallbackConfig.subpath);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
return { imports };
|
|
88
|
-
}
|
|
89
|
-
isJsDelivrNpm() {
|
|
90
|
-
return this.cdnBaseUrl.includes("cdn.jsdelivr.net/npm");
|
|
91
|
-
}
|
|
92
|
-
resolvePackageUrl(packageVersion) {
|
|
93
|
-
// jsDelivr requires `+esm` to serve ESM-compatible output.
|
|
94
|
-
// Example: https://cdn.jsdelivr.net/npm/@pie-element/passage@5.3.3/+esm
|
|
95
|
-
if (this.isJsDelivrNpm()) {
|
|
96
|
-
return `${this.cdnBaseUrl}/${packageVersion}/+esm`;
|
|
97
|
-
}
|
|
98
|
-
// Default: treat baseUrl as a direct ESM CDN base (esm.sh, etc.)
|
|
99
|
-
return `${this.cdnBaseUrl}/${packageVersion}`;
|
|
100
|
-
}
|
|
101
|
-
resolveControllerUrl(packageVersion) {
|
|
102
|
-
if (this.isJsDelivrNpm()) {
|
|
103
|
-
return `${this.cdnBaseUrl}/${packageVersion}/controller/+esm`;
|
|
104
|
-
}
|
|
105
|
-
return `${this.cdnBaseUrl}/${packageVersion}/controller`;
|
|
106
|
-
}
|
|
107
|
-
resolveSubpathUrl(packageVersion, subpath) {
|
|
108
|
-
// Remove leading slash from subpath if present
|
|
109
|
-
const cleanSubpath = subpath.startsWith("/") ? subpath.slice(1) : subpath;
|
|
110
|
-
if (this.isJsDelivrNpm()) {
|
|
111
|
-
return `${this.cdnBaseUrl}/${packageVersion}/${cleanSubpath}/+esm`;
|
|
112
|
-
}
|
|
113
|
-
return `${this.cdnBaseUrl}/${packageVersion}/${cleanSubpath}`;
|
|
114
|
-
}
|
|
115
|
-
injectImportMap(importMap, doc) {
|
|
116
|
-
const script = doc.createElement("script");
|
|
117
|
-
script.type = "importmap";
|
|
118
|
-
script.textContent = JSON.stringify(importMap, null, 2);
|
|
119
|
-
doc.head.appendChild(script);
|
|
120
|
-
}
|
|
121
|
-
assertRuntimeSupport(doc) {
|
|
122
|
-
if (!doc?.head) {
|
|
123
|
-
throw new Error(`ESM loader requires a browser document with a <head> to load modules (moduleResolution=${this.moduleResolution}).`);
|
|
124
|
-
}
|
|
125
|
-
if (typeof customElements === "undefined") {
|
|
126
|
-
throw new Error(`ESM loader requires Custom Elements support in this environment (moduleResolution=${this.moduleResolution}).`);
|
|
127
|
-
}
|
|
128
|
-
if (this.moduleResolution === "import-map") {
|
|
129
|
-
const htmlScriptElement = HTMLScriptElement;
|
|
130
|
-
const supportsImportMap = typeof HTMLScriptElement !== "undefined" &&
|
|
131
|
-
typeof htmlScriptElement.supports === "function" &&
|
|
132
|
-
htmlScriptElement.supports("importmap");
|
|
133
|
-
if (!supportsImportMap) {
|
|
134
|
-
throw new Error('This browser does not support import maps. Use moduleResolution="url" or switch to iife/preloaded strategy.');
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
normalizeImportError(err, specifier, context) {
|
|
139
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
140
|
-
const lower = message.toLowerCase();
|
|
141
|
-
const likelyCspOrPolicy = lower.includes("refused") ||
|
|
142
|
-
lower.includes("content security policy") ||
|
|
143
|
-
lower.includes("failed to fetch dynamically imported module") ||
|
|
144
|
-
lower.includes("blocked");
|
|
145
|
-
const likelyResolutionIssue = lower.includes("failed to resolve module specifier") ||
|
|
146
|
-
lower.includes("cannot find module");
|
|
147
|
-
const hints = [];
|
|
148
|
-
if (this.moduleResolution === "import-map" && likelyResolutionIssue) {
|
|
149
|
-
hints.push("Import-map resolution failed. Ensure the import map contains this specifier, or use moduleResolution=\"url\".");
|
|
150
|
-
}
|
|
151
|
-
if (likelyCspOrPolicy) {
|
|
152
|
-
hints.push(`Check CSP allows module loading from ${this.cdnBaseUrl} (script-src/connect-src) and allows import maps if moduleResolution="import-map".`);
|
|
153
|
-
}
|
|
154
|
-
const prefix = `Failed to load ${context} module: ${specifier}`;
|
|
155
|
-
if (hints.length === 0) {
|
|
156
|
-
return new Error(`${prefix}. ${message}`);
|
|
157
|
-
}
|
|
158
|
-
return new Error(`${prefix}. ${message} Hints: ${hints.join(" ")}`);
|
|
159
|
-
}
|
|
160
|
-
resolveElementSpecifier(packageName, packageVersion, viewConfig) {
|
|
161
|
-
if (this.moduleResolution === "import-map") {
|
|
162
|
-
return viewConfig.subpath ? `${packageName}${viewConfig.subpath}` : packageName;
|
|
163
|
-
}
|
|
164
|
-
return viewConfig.subpath
|
|
165
|
-
? this.resolveSubpathUrl(packageVersion, viewConfig.subpath)
|
|
166
|
-
: this.resolvePackageUrl(packageVersion);
|
|
167
|
-
}
|
|
168
|
-
resolveControllerSpecifier(packageName, packageVersion) {
|
|
169
|
-
if (this.moduleResolution === "import-map") {
|
|
170
|
-
return `${packageName}/controller`;
|
|
171
|
-
}
|
|
172
|
-
return this.resolveControllerUrl(packageVersion);
|
|
173
|
-
}
|
|
174
|
-
async loadElement(tag, packageVersion, options) {
|
|
175
|
-
const registry = pieRegistry();
|
|
176
|
-
const viewConfig = options.viewConfig ||
|
|
177
|
-
BUILT_IN_VIEWS[options.view] ||
|
|
178
|
-
BUILT_IN_VIEWS.delivery;
|
|
179
|
-
try {
|
|
180
|
-
const packageName = this.extractPackageName(packageVersion);
|
|
181
|
-
const actualTag = validateCustomElementTag(`${tag}${viewConfig.tagSuffix}`, `element tag for ${packageName}`);
|
|
182
|
-
logger.debug(`Loading element ${actualTag} from ${packageName} (${packageVersion})`);
|
|
183
|
-
logger.debug(`View: ${options.view}, subpath: ${viewConfig.subpath}`);
|
|
184
|
-
// Determine import specifier based on resolution mode and view
|
|
185
|
-
const importSpecifier = this.resolveElementSpecifier(packageName, packageVersion, viewConfig);
|
|
186
|
-
let module;
|
|
187
|
-
let ElementClass;
|
|
188
|
-
try {
|
|
189
|
-
// @vite-ignore - Dynamic import from runtime specifier (URL or import-map bare path)
|
|
190
|
-
module = await import(/* @vite-ignore */ importSpecifier);
|
|
191
|
-
logger.debug(`Module loaded for ${actualTag}:`, module);
|
|
192
|
-
logger.debug(`Module exports:`, Object.keys(module));
|
|
193
|
-
// Try different export patterns based on view
|
|
194
|
-
if (options.view === "author") {
|
|
195
|
-
ElementClass = module.default || module.Configure || module.Element;
|
|
196
|
-
}
|
|
197
|
-
else if (options.view === "print") {
|
|
198
|
-
ElementClass = module.default || module.Print || module.Element;
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
ElementClass = module.default || module.Element;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
catch (err) {
|
|
205
|
-
// If loading fails and there's a fallback, try the fallback
|
|
206
|
-
if (viewConfig.fallback) {
|
|
207
|
-
logger.debug(`Primary element import failed for ${importSpecifier}; attempting fallback view "${viewConfig.fallback}"`);
|
|
208
|
-
const fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];
|
|
209
|
-
const fallbackSpecifier = this.resolveElementSpecifier(packageName, packageVersion, fallbackConfig || BUILT_IN_VIEWS.delivery);
|
|
210
|
-
try {
|
|
211
|
-
// @vite-ignore - Dynamic import from runtime specifier (URL or import-map bare path)
|
|
212
|
-
module = await import(/* @vite-ignore */ fallbackSpecifier);
|
|
213
|
-
}
|
|
214
|
-
catch (fallbackErr) {
|
|
215
|
-
throw this.normalizeImportError(fallbackErr, fallbackSpecifier, "fallback element");
|
|
216
|
-
}
|
|
217
|
-
ElementClass = module.default || module.Element;
|
|
218
|
-
logger.debug(`Loaded fallback view for ${actualTag}`);
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
throw this.normalizeImportError(err, importSpecifier, "element");
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
if (!ElementClass) {
|
|
225
|
-
throw new Error(`No suitable element class found in ${importSpecifier} for view ${options.view}`);
|
|
226
|
-
}
|
|
227
|
-
// Load controller separately if needed
|
|
228
|
-
let controller = null;
|
|
229
|
-
if (options.loadControllers) {
|
|
230
|
-
const controllerSpecifier = this.resolveControllerSpecifier(packageName, packageVersion);
|
|
231
|
-
try {
|
|
232
|
-
// @vite-ignore - Dynamic import from runtime specifier (URL or import-map bare path)
|
|
233
|
-
const controllerModule = await import(/* @vite-ignore */ controllerSpecifier);
|
|
234
|
-
logger.debug(`Controller module loaded for ${actualTag}:`, controllerModule);
|
|
235
|
-
// Controller exports as 'default'
|
|
236
|
-
controller = controllerModule.default || controllerModule;
|
|
237
|
-
if (controller) {
|
|
238
|
-
logger.debug(`Controller registered for ${actualTag}`);
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
logger.warn(`No controller export found for ${actualTag}`);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
catch (err) {
|
|
245
|
-
logger.warn(`Failed to load controller for ${actualTag}:`, this.normalizeImportError(err, controllerSpecifier, "controller"));
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
// Register in the global PIE registry (used by shared initialization code)
|
|
249
|
-
registry[actualTag] = {
|
|
250
|
-
package: packageVersion,
|
|
251
|
-
status: Status.loading,
|
|
252
|
-
tagName: actualTag,
|
|
253
|
-
element: ElementClass,
|
|
254
|
-
controller: controller,
|
|
255
|
-
config: null,
|
|
256
|
-
bundleType: "esm", // Mark as ESM-loaded
|
|
257
|
-
};
|
|
258
|
-
// Register custom element with the tag name (including suffix)
|
|
259
|
-
if (isCustomElementConstructor(ElementClass)) {
|
|
260
|
-
const defineResult = defineCustomElementSafely(actualTag, class extends ElementClass {
|
|
261
|
-
}, `element tag for ${packageName}`);
|
|
262
|
-
if (defineResult.status === "defined") {
|
|
263
|
-
logger.debug(`Registered custom element: ${actualTag}`);
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
logger.debug(`Element ${actualTag} already registered`);
|
|
267
|
-
}
|
|
268
|
-
registry[actualTag] = {
|
|
269
|
-
...registry[actualTag],
|
|
270
|
-
status: Status.loaded,
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
else {
|
|
274
|
-
logger.warn(`No Element export found in module`);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
catch (err) {
|
|
278
|
-
logger.error(`Failed to load element ${tag}:`, err);
|
|
279
|
-
throw err;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
getController(tag) {
|
|
283
|
-
const registry = pieRegistry();
|
|
284
|
-
return registry[tag]?.controller || null;
|
|
285
|
-
}
|
|
286
|
-
async elementsHaveLoaded(elements) {
|
|
287
|
-
// Wait for versioned tags to be defined
|
|
288
|
-
const promises = elements.map((el) => {
|
|
289
|
-
logger.debug(`Waiting for ${el.tag} to be defined`);
|
|
290
|
-
return customElements.whenDefined(el.tag);
|
|
291
|
-
});
|
|
292
|
-
await Promise.all(promises);
|
|
293
|
-
return { elements, val: true };
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Load PIE elements with specified view/variant
|
|
297
|
-
*
|
|
298
|
-
* @param contentConfig - Item config with elements
|
|
299
|
-
* @param doc - Document to inject import maps into
|
|
300
|
-
* @param options - Loading options (view, controllers, etc.)
|
|
301
|
-
*
|
|
302
|
-
* @example
|
|
303
|
-
* // Load delivery view with controllers
|
|
304
|
-
* await loader.load(config, document, { view: 'delivery', loadControllers: true });
|
|
305
|
-
*
|
|
306
|
-
* @example
|
|
307
|
-
* // Load author view (configuration UI)
|
|
308
|
-
* await loader.load(config, document, { view: 'author', loadControllers: false });
|
|
309
|
-
*
|
|
310
|
-
* @example
|
|
311
|
-
* // Load custom mobile-optimized view with fallback
|
|
312
|
-
* await loader.load(config, document, {
|
|
313
|
-
* view: 'delivery-mobile',
|
|
314
|
-
* viewConfig: { subpath: '/delivery-mobile', tagSuffix: '', fallback: 'delivery' },
|
|
315
|
-
* loadControllers: true
|
|
316
|
-
* });
|
|
317
|
-
*/
|
|
318
|
-
async load(contentConfig, doc, options) {
|
|
319
|
-
logger.debug("load() called with options:", options);
|
|
320
|
-
logger.debug("contentConfig:", contentConfig);
|
|
321
|
-
if (!contentConfig?.elements) {
|
|
322
|
-
logger.warn("No elements in config");
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
this.assertRuntimeSupport(doc);
|
|
326
|
-
const viewConfig = options.viewConfig ||
|
|
327
|
-
BUILT_IN_VIEWS[options.view] ||
|
|
328
|
-
BUILT_IN_VIEWS.delivery;
|
|
329
|
-
// 0. Generate and inject import map when import-map mode is enabled
|
|
330
|
-
if (this.moduleResolution === "import-map") {
|
|
331
|
-
if (!this.importMapInjected) {
|
|
332
|
-
logger.debug("Generating import map for view:", options.view);
|
|
333
|
-
const importMap = this.generateImportMap(contentConfig.elements, options);
|
|
334
|
-
logger.debug("Import map:", importMap);
|
|
335
|
-
this.injectImportMap(importMap, doc);
|
|
336
|
-
this.importMapInjected = true;
|
|
337
|
-
logger.debug("Import map injected");
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
logger.debug("Import map already injected, skipping");
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
else {
|
|
344
|
-
logger.debug(`Skipping import map injection (moduleResolution=${this.moduleResolution})`);
|
|
345
|
-
}
|
|
346
|
-
// 2. Dynamically import and register each element
|
|
347
|
-
const elementTags = Object.keys(contentConfig.elements);
|
|
348
|
-
logger.debug("Loading elements:", elementTags);
|
|
349
|
-
await Promise.all(elementTags.map((tag) => this.loadElement(tag, contentConfig.elements[tag], options)));
|
|
350
|
-
logger.debug("All elements loaded");
|
|
351
|
-
// 3. Wait for all custom elements to be defined
|
|
352
|
-
logger.debug("Waiting for custom elements to be defined");
|
|
353
|
-
const tagsWithSuffix = elementTags.map((tag) => validateCustomElementTag(`${tag}${viewConfig.tagSuffix}`, `element tag for view "${options.view}"`));
|
|
354
|
-
await Promise.all(tagsWithSuffix.map((tag) => customElements.whenDefined(tag)));
|
|
355
|
-
logger.debug("All custom elements defined");
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
//# sourceMappingURL=esm-loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"esm-loader.js","sourceRoot":"","sources":["../../src/pie/esm-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IIFE PIE Loader
|
|
3
|
-
*
|
|
4
|
-
* Dynamically loads PIE elements from IIFE bundles served by the PIE build service.
|
|
5
|
-
* Matches the behavior of the original pie-player from @pie-players/pie-player-components.
|
|
6
|
-
*
|
|
7
|
-
* Integrates with the existing PIE registry system to enable shared
|
|
8
|
-
* initialization code to work with IIFE-loaded elements.
|
|
9
|
-
*/
|
|
10
|
-
import { BundleType } from "./types.js";
|
|
11
|
-
import { type IifeBundleRetryConfig } from "../loader-config.js";
|
|
12
|
-
import type { InstrumentationProvider } from "../instrumentation/types.js";
|
|
13
|
-
export interface IifeLoaderConfig {
|
|
14
|
-
/**
|
|
15
|
-
* Base URL for the PIE bundle service
|
|
16
|
-
* This service builds and serves IIFE bundles dynamically based on element versions
|
|
17
|
-
* @example "https://proxy.pie-api.com/bundles/"
|
|
18
|
-
* @default "https://proxy.pie-api.com/bundles/"
|
|
19
|
-
*/
|
|
20
|
-
bundleHost: string;
|
|
21
|
-
/**
|
|
22
|
-
* Debug function (returns whether debug is enabled)
|
|
23
|
-
*/
|
|
24
|
-
debugEnabled?: () => boolean;
|
|
25
|
-
/**
|
|
26
|
-
* Timeout (ms) for `customElements.whenDefined(...)` waiting.
|
|
27
|
-
* Prevents infinite loading hangs.
|
|
28
|
-
*/
|
|
29
|
-
whenDefinedTimeoutMs?: number;
|
|
30
|
-
/**
|
|
31
|
-
* Retry policy for transient bundle load failures.
|
|
32
|
-
*/
|
|
33
|
-
bundleRetry?: IifeBundleRetryConfig;
|
|
34
|
-
/**
|
|
35
|
-
* Enable IIFE retry instrumentation events.
|
|
36
|
-
*/
|
|
37
|
-
trackPageActions?: boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Instrumentation provider used when tracking retry events.
|
|
40
|
-
*/
|
|
41
|
-
instrumentationProvider?: InstrumentationProvider;
|
|
42
|
-
/**
|
|
43
|
-
* Optional callback that reports active retry/building status.
|
|
44
|
-
*/
|
|
45
|
-
onBundleRetryStatus?: (status: IifeBundleRetryStatus) => void;
|
|
46
|
-
}
|
|
47
|
-
export interface IifeBundleRetryStatus {
|
|
48
|
-
state: "retrying" | "completed" | "timeout" | "cancelled";
|
|
49
|
-
url: string;
|
|
50
|
-
attempt: number;
|
|
51
|
-
elapsedMs: number;
|
|
52
|
-
timeoutMs: number;
|
|
53
|
-
retryDelayMs?: number;
|
|
54
|
-
reason?: string;
|
|
55
|
-
}
|
|
56
|
-
export declare const DEFAULT_BUNDLE_HOST = "https://proxy.pie-api.com/bundles/";
|
|
57
|
-
export declare class IifePieLoader {
|
|
58
|
-
private config;
|
|
59
|
-
constructor(config: IifeLoaderConfig);
|
|
60
|
-
private ensurePieHelpers;
|
|
61
|
-
private getRequestedPackageNames;
|
|
62
|
-
private isReusableActiveBundle;
|
|
63
|
-
private clearActiveBundleState;
|
|
64
|
-
private removePieBundleScripts;
|
|
65
|
-
private getActivePieBundleScriptUrls;
|
|
66
|
-
private buildLoadDiagnostics;
|
|
67
|
-
private isRecoverableRegistrationError;
|
|
68
|
-
private registerWithReloadRecovery;
|
|
69
|
-
private withGlobalLoadQueue;
|
|
70
|
-
private toErrorMessage;
|
|
71
|
-
private getBundleRetryConfig;
|
|
72
|
-
private emitBundleRetryStatus;
|
|
73
|
-
private getInstrumentationProvider;
|
|
74
|
-
private trackRetryEvent;
|
|
75
|
-
private trackRetryError;
|
|
76
|
-
private wait;
|
|
77
|
-
/**
|
|
78
|
-
* Get the bundle URL based on config elements
|
|
79
|
-
*/
|
|
80
|
-
private getBundleUrl;
|
|
81
|
-
/**
|
|
82
|
-
* Load an IIFE bundle from the specified URL
|
|
83
|
-
*/
|
|
84
|
-
private loadBundleScript;
|
|
85
|
-
private loadBundleScriptWithRetry;
|
|
86
|
-
private whenDefinedWithTimeout;
|
|
87
|
-
private createEmptyConfigure;
|
|
88
|
-
/**
|
|
89
|
-
* Register elements from the loaded IIFE bundle into the PIE registry
|
|
90
|
-
*/
|
|
91
|
-
private registerElementsFromBundle;
|
|
92
|
-
/**
|
|
93
|
-
* Load PIE elements from IIFE bundle
|
|
94
|
-
*
|
|
95
|
-
* @param contentConfig - Item config with elements
|
|
96
|
-
* @param doc - Document to inject script into
|
|
97
|
-
* @param bundleType - Type of bundle (BundleType.player, BundleType.clientPlayer, or BundleType.editor)
|
|
98
|
-
* @param needsControllers - Whether controllers are needed
|
|
99
|
-
*/
|
|
100
|
-
load(contentConfig: any, doc: Document, bundleType: BundleType, needsControllers: boolean): Promise<void>;
|
|
101
|
-
/**
|
|
102
|
-
* Get controller for a specific element tag
|
|
103
|
-
*/
|
|
104
|
-
getController(tag: string): any | null;
|
|
105
|
-
/**
|
|
106
|
-
* Wait for elements to be fully loaded
|
|
107
|
-
*/
|
|
108
|
-
elementsHaveLoaded(elements: Array<{
|
|
109
|
-
name: string;
|
|
110
|
-
tag: string;
|
|
111
|
-
}>): Promise<{
|
|
112
|
-
elements: typeof elements;
|
|
113
|
-
val: boolean;
|
|
114
|
-
}>;
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=iife-loader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"iife-loader.d.ts","sourceRoot":"","sources":["../../src/pie/iife-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAAE,UAAU,EAAsC,MAAM,YAAY,CAAC;AAE5E,OAAO,EAEN,KAAK,qBAAqB,EAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAM3E,MAAM,WAAW,gBAAgB;IAChC;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;IAE7B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;IAEpC;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAElD;;OAEG;IACH,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC9D;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,eAAO,MAAM,mBAAmB,uCAAuC,CAAC;AAYxE,qBAAa,aAAa;IACzB,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,EAAE,gBAAgB;IASpC,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,sBAAsB;IAkB9B,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,4BAA4B;IAcpC,OAAO,CAAC,oBAAoB;IAgC5B,OAAO,CAAC,8BAA8B;YASxB,0BAA0B;IAuDxC,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,IAAI;IAIZ;;OAEG;IACH,OAAO,CAAC,YAAY;IAkCpB;;OAEG;YACW,gBAAgB;YAsBhB,yBAAyB;IA+FvC,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,oBAAoB;IAuB5B;;OAEG;YACW,0BAA0B;IA2HxC;;;;;;;OAOG;IACU,IAAI,CAChB,aAAa,EAAE,GAAG,EAClB,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,OAAO,GACvB,OAAO,CAAC,IAAI,CAAC;IAsGhB;;OAEG;IACI,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAK7C;;OAEG;IACU,kBAAkB,CAC9B,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAC5C,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,QAAQ,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC;CAQvD"}
|