@pie-players/pie-players-shared 0.2.0
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/config/profile.d.ts +15 -0
- package/dist/config/profile.d.ts.map +1 -0
- package/dist/config/profile.js +27 -0
- package/dist/config/profile.js.map +1 -0
- package/dist/i18n/index.d.ts +13 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +12 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/loader.d.ts +36 -0
- package/dist/i18n/loader.d.ts.map +1 -0
- package/dist/i18n/loader.js +133 -0
- package/dist/i18n/loader.js.map +1 -0
- package/dist/i18n/scripts/check-coverage.d.ts +16 -0
- package/dist/i18n/scripts/check-coverage.d.ts.map +1 -0
- package/dist/i18n/scripts/check-coverage.js +262 -0
- package/dist/i18n/scripts/check-coverage.js.map +1 -0
- package/dist/i18n/scripts/scan-hardcoded.d.ts +16 -0
- package/dist/i18n/scripts/scan-hardcoded.d.ts.map +1 -0
- package/dist/i18n/scripts/scan-hardcoded.js +266 -0
- package/dist/i18n/scripts/scan-hardcoded.js.map +1 -0
- package/dist/i18n/simple-i18n.d.ts +69 -0
- package/dist/i18n/simple-i18n.d.ts.map +1 -0
- package/dist/i18n/simple-i18n.js +199 -0
- package/dist/i18n/simple-i18n.js.map +1 -0
- package/dist/i18n/translations/ar/common.json +36 -0
- package/dist/i18n/translations/ar/toolkit.json +48 -0
- package/dist/i18n/translations/ar/tools.json +109 -0
- package/dist/i18n/translations/en/common.json +36 -0
- package/dist/i18n/translations/en/toolkit.json +48 -0
- package/dist/i18n/translations/en/tools.json +109 -0
- package/dist/i18n/translations/es/common.json +36 -0
- package/dist/i18n/translations/es/toolkit.json +48 -0
- package/dist/i18n/translations/es/tools.json +109 -0
- package/dist/i18n/translations/zh/common.json +36 -0
- package/dist/i18n/translations/zh/toolkit.json +48 -0
- package/dist/i18n/translations/zh/tools.json +109 -0
- package/dist/i18n/types.d.ts +58 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +8 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/use-i18n-standalone.svelte.d.ts +87 -0
- package/dist/i18n/use-i18n-standalone.svelte.d.ts.map +1 -0
- package/dist/i18n/use-i18n-standalone.svelte.js +151 -0
- package/dist/i18n/use-i18n-standalone.svelte.js.map +1 -0
- package/dist/i18n/use-i18n.svelte.d.ts +67 -0
- package/dist/i18n/use-i18n.svelte.d.ts.map +1 -0
- package/dist/i18n/use-i18n.svelte.js +144 -0
- package/dist/i18n/use-i18n.svelte.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/instrumentation/index.d.ts +53 -0
- package/dist/instrumentation/index.d.ts.map +1 -0
- package/dist/instrumentation/index.js +53 -0
- package/dist/instrumentation/index.js.map +1 -0
- package/dist/instrumentation/providers/BaseInstrumentationProvider.d.ts +197 -0
- package/dist/instrumentation/providers/BaseInstrumentationProvider.d.ts.map +1 -0
- package/dist/instrumentation/providers/BaseInstrumentationProvider.js +267 -0
- package/dist/instrumentation/providers/BaseInstrumentationProvider.js.map +1 -0
- package/dist/instrumentation/providers/ConsoleInstrumentationProvider.d.ts +106 -0
- package/dist/instrumentation/providers/ConsoleInstrumentationProvider.d.ts.map +1 -0
- package/dist/instrumentation/providers/ConsoleInstrumentationProvider.js +182 -0
- package/dist/instrumentation/providers/ConsoleInstrumentationProvider.js.map +1 -0
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.d.ts +170 -0
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.d.ts.map +1 -0
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.js +183 -0
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.js.map +1 -0
- package/dist/instrumentation/providers/NewRelicInstrumentationProvider.d.ts +86 -0
- package/dist/instrumentation/providers/NewRelicInstrumentationProvider.d.ts.map +1 -0
- package/dist/instrumentation/providers/NewRelicInstrumentationProvider.js +135 -0
- package/dist/instrumentation/providers/NewRelicInstrumentationProvider.js.map +1 -0
- package/dist/instrumentation/providers/index.d.ts +12 -0
- package/dist/instrumentation/providers/index.d.ts.map +1 -0
- package/dist/instrumentation/providers/index.js +12 -0
- package/dist/instrumentation/providers/index.js.map +1 -0
- package/dist/instrumentation/types.d.ts +348 -0
- package/dist/instrumentation/types.d.ts.map +1 -0
- package/dist/instrumentation/types.js +9 -0
- package/dist/instrumentation/types.js.map +1 -0
- package/dist/loader-config.d.ts +76 -0
- package/dist/loader-config.d.ts.map +1 -0
- package/dist/loader-config.js +12 -0
- package/dist/loader-config.js.map +1 -0
- package/dist/loaders/ElementLoader.d.ts +72 -0
- package/dist/loaders/ElementLoader.d.ts.map +1 -0
- package/dist/loaders/ElementLoader.js +52 -0
- package/dist/loaders/ElementLoader.js.map +1 -0
- package/dist/loaders/EsmElementLoader.d.ts +67 -0
- package/dist/loaders/EsmElementLoader.d.ts.map +1 -0
- package/dist/loaders/EsmElementLoader.js +71 -0
- package/dist/loaders/EsmElementLoader.js.map +1 -0
- package/dist/loaders/IifeElementLoader.d.ts +61 -0
- package/dist/loaders/IifeElementLoader.d.ts.map +1 -0
- package/dist/loaders/IifeElementLoader.js +63 -0
- package/dist/loaders/IifeElementLoader.js.map +1 -0
- package/dist/loaders/index.d.ts +28 -0
- package/dist/loaders/index.d.ts.map +1 -0
- package/dist/loaders/index.js +25 -0
- package/dist/loaders/index.js.map +1 -0
- package/dist/object/index.d.ts +12 -0
- package/dist/object/index.d.ts.map +1 -0
- package/dist/object/index.js +40 -0
- package/dist/object/index.js.map +1 -0
- package/dist/pie/asset-handler.d.ts +64 -0
- package/dist/pie/asset-handler.d.ts.map +1 -0
- package/dist/pie/asset-handler.js +238 -0
- package/dist/pie/asset-handler.js.map +1 -0
- package/dist/pie/component-context.d.ts +22 -0
- package/dist/pie/component-context.d.ts.map +1 -0
- package/dist/pie/component-context.js +30 -0
- package/dist/pie/component-context.js.map +1 -0
- package/dist/pie/config.d.ts +39 -0
- package/dist/pie/config.d.ts.map +1 -0
- package/dist/pie/config.js +174 -0
- package/dist/pie/config.js.map +1 -0
- package/dist/pie/configure-initialization.d.ts +35 -0
- package/dist/pie/configure-initialization.d.ts.map +1 -0
- package/dist/pie/configure-initialization.js +141 -0
- package/dist/pie/configure-initialization.js.map +1 -0
- package/dist/pie/esm-loader.d.ts +93 -0
- package/dist/pie/esm-loader.d.ts.map +1 -0
- package/dist/pie/esm-loader.js +308 -0
- package/dist/pie/esm-loader.js.map +1 -0
- package/dist/pie/iife-loader.d.ts +76 -0
- package/dist/pie/iife-loader.d.ts.map +1 -0
- package/dist/pie/iife-loader.js +303 -0
- package/dist/pie/iife-loader.js.map +1 -0
- package/dist/pie/index.d.ts +31 -0
- package/dist/pie/index.d.ts.map +1 -0
- package/dist/pie/index.js +34 -0
- package/dist/pie/index.js.map +1 -0
- package/dist/pie/initialization.d.ts +40 -0
- package/dist/pie/initialization.d.ts.map +1 -0
- package/dist/pie/initialization.js +349 -0
- package/dist/pie/initialization.js.map +1 -0
- package/dist/pie/logger.d.ts +64 -0
- package/dist/pie/logger.d.ts.map +1 -0
- package/dist/pie/logger.js +45 -0
- package/dist/pie/logger.js.map +1 -0
- package/dist/pie/math-rendering.d.ts +69 -0
- package/dist/pie/math-rendering.d.ts.map +1 -0
- package/dist/pie/math-rendering.js +98 -0
- package/dist/pie/math-rendering.js.map +1 -0
- package/dist/pie/overrides.d.ts +43 -0
- package/dist/pie/overrides.d.ts.map +1 -0
- package/dist/pie/overrides.js +146 -0
- package/dist/pie/overrides.js.map +1 -0
- package/dist/pie/player-initializer.d.ts +55 -0
- package/dist/pie/player-initializer.d.ts.map +1 -0
- package/dist/pie/player-initializer.js +123 -0
- package/dist/pie/player-initializer.js.map +1 -0
- package/dist/pie/registry.d.ts +11 -0
- package/dist/pie/registry.d.ts.map +1 -0
- package/dist/pie/registry.js +21 -0
- package/dist/pie/registry.js.map +1 -0
- package/dist/pie/resource-monitor.d.ts +208 -0
- package/dist/pie/resource-monitor.d.ts.map +1 -0
- package/dist/pie/resource-monitor.js +969 -0
- package/dist/pie/resource-monitor.js.map +1 -0
- package/dist/pie/scoring.d.ts +17 -0
- package/dist/pie/scoring.d.ts.map +1 -0
- package/dist/pie/scoring.js +84 -0
- package/dist/pie/scoring.js.map +1 -0
- package/dist/pie/types.d.ts +136 -0
- package/dist/pie/types.d.ts.map +1 -0
- package/dist/pie/types.js +52 -0
- package/dist/pie/types.js.map +1 -0
- package/dist/pie/updates.d.ts +20 -0
- package/dist/pie/updates.d.ts.map +1 -0
- package/dist/pie/updates.js +175 -0
- package/dist/pie/updates.js.map +1 -0
- package/dist/pie/use-resource-monitor.svelte.d.ts +56 -0
- package/dist/pie/use-resource-monitor.svelte.d.ts.map +1 -0
- package/dist/pie/use-resource-monitor.svelte.js +117 -0
- package/dist/pie/use-resource-monitor.svelte.js.map +1 -0
- package/dist/pie/utils.d.ts +44 -0
- package/dist/pie/utils.d.ts.map +1 -0
- package/dist/pie/utils.js +74 -0
- package/dist/pie/utils.js.map +1 -0
- package/dist/types/custom-elements.d.ts +183 -0
- package/dist/types/custom-elements.d.ts.map +1 -0
- package/dist/types/custom-elements.js +8 -0
- package/dist/types/custom-elements.js.map +1 -0
- package/dist/types/index.d.ts +761 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +120 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/search.d.ts +105 -0
- package/dist/types/search.d.ts.map +1 -0
- package/dist/types/search.js +12 -0
- package/dist/types/search.js.map +1 -0
- package/dist/types/transform.d.ts +48 -0
- package/dist/types/transform.d.ts.map +1 -0
- package/dist/types/transform.js +21 -0
- package/dist/types/transform.js.map +1 -0
- package/dist/ui/focus-trap.d.ts +10 -0
- package/dist/ui/focus-trap.d.ts.map +1 -0
- package/dist/ui/focus-trap.js +30 -0
- package/dist/ui/focus-trap.js.map +1 -0
- package/dist/ui/safe-storage.d.ts +3 -0
- package/dist/ui/safe-storage.d.ts.map +1 -0
- package/dist/ui/safe-storage.js +21 -0
- package/dist/ui/safe-storage.js.map +1 -0
- package/package.json +118 -0
- package/src/components/PieItemPlayer.svelte +604 -0
- package/src/components/PiePreviewLayout.svelte +144 -0
- package/src/components/PiePreviewToggle.svelte +110 -0
- package/src/components/PieSpinner.svelte +85 -0
- package/src/components/ToolSettingsButton.svelte +31 -0
- package/src/components/ToolSettingsPanel.svelte +90 -0
- package/src/components/index.ts +6 -0
- package/src/i18n/README.md +223 -0
- package/src/i18n/index.ts +26 -0
- package/src/i18n/loader.ts +156 -0
- package/src/i18n/scripts/check-coverage.ts +345 -0
- package/src/i18n/scripts/scan-hardcoded.ts +342 -0
- package/src/i18n/simple-i18n.ts +236 -0
- package/src/i18n/translations/ar/common.json +36 -0
- package/src/i18n/translations/ar/toolkit.json +48 -0
- package/src/i18n/translations/ar/tools.json +109 -0
- package/src/i18n/translations/en/common.json +36 -0
- package/src/i18n/translations/en/toolkit.json +48 -0
- package/src/i18n/translations/en/tools.json +109 -0
- package/src/i18n/translations/es/common.json +36 -0
- package/src/i18n/translations/es/toolkit.json +48 -0
- package/src/i18n/translations/es/tools.json +109 -0
- package/src/i18n/translations/zh/common.json +36 -0
- package/src/i18n/translations/zh/toolkit.json +48 -0
- package/src/i18n/translations/zh/tools.json +109 -0
- package/src/i18n/types.ts +66 -0
- package/src/i18n/use-i18n-standalone.svelte.ts +184 -0
- package/src/i18n/use-i18n.svelte.ts +163 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configure Element Initialization
|
|
3
|
+
*
|
|
4
|
+
* Handles initialization of PIE configure elements (authoring mode).
|
|
5
|
+
* Parallel to initialization.ts but for configure elements with -config suffix.
|
|
6
|
+
*/
|
|
7
|
+
import { createPieLogger, isGlobalDebugEnabled } from "./logger";
|
|
8
|
+
import { pieRegistry } from "./registry";
|
|
9
|
+
import { parsePackageName } from "./utils";
|
|
10
|
+
const logger = createPieLogger("configure-init", () => isGlobalDebugEnabled());
|
|
11
|
+
/**
|
|
12
|
+
* Initialize configure elements from loaded bundle
|
|
13
|
+
*
|
|
14
|
+
* This function:
|
|
15
|
+
* 1. Finds all configure elements in the DOM (elements with -config suffix)
|
|
16
|
+
* 2. Sets their model and configuration properties
|
|
17
|
+
* 3. Attaches event listeners for model-updated events
|
|
18
|
+
*/
|
|
19
|
+
export function initializeConfiguresFromLoadedBundle(config, configuration, options) {
|
|
20
|
+
const { env } = options;
|
|
21
|
+
logger.debug("[initializeConfiguresFromLoadedBundle] Starting initialization");
|
|
22
|
+
logger.debug("[initializeConfiguresFromLoadedBundle] Config:", config);
|
|
23
|
+
logger.debug("[initializeConfiguresFromLoadedBundle] Configuration:", configuration);
|
|
24
|
+
logger.debug("[initializeConfiguresFromLoadedBundle] Env:", env);
|
|
25
|
+
if (!config?.elements || !config?.models) {
|
|
26
|
+
logger.warn("[initializeConfiguresFromLoadedBundle] Invalid config - missing elements or models");
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// Ensure the PIE registry is initialized (side effects register global helpers).
|
|
30
|
+
void pieRegistry();
|
|
31
|
+
// Find all configure elements in the DOM
|
|
32
|
+
for (const [elementTag, packageName] of Object.entries(config.elements)) {
|
|
33
|
+
const configureTag = `${elementTag}-config`;
|
|
34
|
+
const elements = document.querySelectorAll(configureTag);
|
|
35
|
+
logger.debug(`[initializeConfiguresFromLoadedBundle] Found ${elements.length} ${configureTag} elements`);
|
|
36
|
+
elements.forEach((element) => {
|
|
37
|
+
const configureElement = element;
|
|
38
|
+
// Find the model for this element
|
|
39
|
+
const model = config.models.find((m) => m.element === elementTag);
|
|
40
|
+
if (model) {
|
|
41
|
+
logger.debug(`[initializeConfiguresFromLoadedBundle] Setting model on ${configureTag}:`, model);
|
|
42
|
+
// Set model property
|
|
43
|
+
configureElement.model = model;
|
|
44
|
+
// Set configuration property
|
|
45
|
+
const pkgBaseName = (() => {
|
|
46
|
+
try {
|
|
47
|
+
return parsePackageName(String(packageName)).name;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return String(packageName);
|
|
51
|
+
}
|
|
52
|
+
})();
|
|
53
|
+
// Legacy parity: allow configuration keyed by package name WITHOUT version.
|
|
54
|
+
const elementConfig = configuration[packageName] ||
|
|
55
|
+
configuration[pkgBaseName] ||
|
|
56
|
+
configuration[elementTag] ||
|
|
57
|
+
{};
|
|
58
|
+
configureElement.configuration = elementConfig;
|
|
59
|
+
logger.debug(`[initializeConfiguresFromLoadedBundle] Configuration set for ${configureTag}:`, elementConfig);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
logger.warn(`[initializeConfiguresFromLoadedBundle] No model found for element ${elementTag}`);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
logger.debug("[initializeConfiguresFromLoadedBundle] ✅ Initialization complete");
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Update configure elements with new configuration
|
|
70
|
+
*
|
|
71
|
+
* This function updates existing configure elements when configuration changes.
|
|
72
|
+
* Useful for reactive updates in the authoring UI.
|
|
73
|
+
*/
|
|
74
|
+
export function updateConfigureElements(config, configuration, env) {
|
|
75
|
+
logger.debug("[updateConfigureElements] Starting update");
|
|
76
|
+
logger.debug("[updateConfigureElements] Config:", config);
|
|
77
|
+
logger.debug("[updateConfigureElements] Configuration:", configuration);
|
|
78
|
+
logger.debug("[updateConfigureElements] Env:", env);
|
|
79
|
+
if (!config?.elements || !config?.models) {
|
|
80
|
+
logger.warn("[updateConfigureElements] Invalid config - missing elements or models");
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Find all configure elements in the DOM
|
|
84
|
+
for (const [elementTag, packageName] of Object.entries(config.elements)) {
|
|
85
|
+
const configureTag = `${elementTag}-config`;
|
|
86
|
+
const elements = document.querySelectorAll(configureTag);
|
|
87
|
+
logger.debug(`[updateConfigureElements] Updating ${elements.length} ${configureTag} elements`);
|
|
88
|
+
elements.forEach((element) => {
|
|
89
|
+
const configureElement = element;
|
|
90
|
+
// Find the model for this element
|
|
91
|
+
const model = config.models.find((m) => m.element === elementTag);
|
|
92
|
+
if (model) {
|
|
93
|
+
logger.debug(`[updateConfigureElements] Updating model on ${configureTag}:`, model);
|
|
94
|
+
// Update model property
|
|
95
|
+
configureElement.model = model;
|
|
96
|
+
// Update configuration property
|
|
97
|
+
const pkgBaseName = (() => {
|
|
98
|
+
try {
|
|
99
|
+
return parsePackageName(String(packageName)).name;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return String(packageName);
|
|
103
|
+
}
|
|
104
|
+
})();
|
|
105
|
+
const elementConfig = configuration[packageName] ||
|
|
106
|
+
configuration[pkgBaseName] ||
|
|
107
|
+
configuration[elementTag] ||
|
|
108
|
+
{};
|
|
109
|
+
configureElement.configuration = elementConfig;
|
|
110
|
+
logger.debug(`[updateConfigureElements] Configuration updated for ${configureTag}:`, elementConfig);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
logger.debug("[updateConfigureElements] ✅ Update complete");
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Find configure element in DOM by tag name
|
|
118
|
+
*/
|
|
119
|
+
export function findConfigureElement(elementTag) {
|
|
120
|
+
const configureTag = `${elementTag}-config`;
|
|
121
|
+
const element = document.querySelector(configureTag);
|
|
122
|
+
return element;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get all configure elements from config
|
|
126
|
+
*/
|
|
127
|
+
export function getAllConfigureElements(config) {
|
|
128
|
+
if (!config?.elements) {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
const configureElements = [];
|
|
132
|
+
for (const elementTag of Object.keys(config.elements)) {
|
|
133
|
+
const configureTag = `${elementTag}-config`;
|
|
134
|
+
const elements = document.querySelectorAll(configureTag);
|
|
135
|
+
elements.forEach((el) => {
|
|
136
|
+
configureElements.push(el);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return configureElements;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=configure-initialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure-initialization.js","sourceRoot":"","sources":["../../src/pie/configure-initialization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
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
|
+
/**
|
|
18
|
+
* View configuration for element loading
|
|
19
|
+
* Maps view names to their subpath and tag suffix
|
|
20
|
+
*/
|
|
21
|
+
export interface ViewConfig {
|
|
22
|
+
/** Subpath to import from (e.g., '/author', '/print', '/delivery-mobile') */
|
|
23
|
+
subpath: string;
|
|
24
|
+
/** Suffix to append to tag name (e.g., '-config', '-print', '') */
|
|
25
|
+
tagSuffix: string;
|
|
26
|
+
/** Optional fallback view if this view doesn't exist */
|
|
27
|
+
fallback?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Options for loading elements
|
|
31
|
+
*/
|
|
32
|
+
export interface EsmLoadOptions {
|
|
33
|
+
/**
|
|
34
|
+
* View to load (e.g., 'delivery', 'author', 'print', 'delivery-mobile')
|
|
35
|
+
* Can be any subpath defined in the element's package.json exports
|
|
36
|
+
*/
|
|
37
|
+
view: string;
|
|
38
|
+
/** Whether to also load controller modules */
|
|
39
|
+
loadControllers?: boolean;
|
|
40
|
+
/** Custom view configuration (overrides built-in views) */
|
|
41
|
+
viewConfig?: ViewConfig;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Built-in view configurations
|
|
45
|
+
* Extensible - elements can define custom views (e.g., 'delivery-mobile', 'delivery-a11y')
|
|
46
|
+
*/
|
|
47
|
+
export declare const BUILT_IN_VIEWS: Record<string, ViewConfig>;
|
|
48
|
+
export declare class EsmPieLoader {
|
|
49
|
+
private cdnBaseUrl;
|
|
50
|
+
private importMapInjected;
|
|
51
|
+
constructor(config: EsmLoaderConfig);
|
|
52
|
+
private extractPackageName;
|
|
53
|
+
private generateImportMap;
|
|
54
|
+
private isJsDelivrNpm;
|
|
55
|
+
private resolvePackageUrl;
|
|
56
|
+
private resolveControllerUrl;
|
|
57
|
+
private resolveSubpathUrl;
|
|
58
|
+
private injectImportMap;
|
|
59
|
+
private loadElement;
|
|
60
|
+
getController(tag: string): any | null;
|
|
61
|
+
elementsHaveLoaded(elements: Array<{
|
|
62
|
+
name: string;
|
|
63
|
+
tag: string;
|
|
64
|
+
}>): Promise<{
|
|
65
|
+
elements: typeof elements;
|
|
66
|
+
val: boolean;
|
|
67
|
+
}>;
|
|
68
|
+
/**
|
|
69
|
+
* Load PIE elements with specified view/variant
|
|
70
|
+
*
|
|
71
|
+
* @param contentConfig - Item config with elements
|
|
72
|
+
* @param doc - Document to inject import maps into
|
|
73
|
+
* @param options - Loading options (view, controllers, etc.)
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* // Load delivery view with controllers
|
|
77
|
+
* await loader.load(config, document, { view: 'delivery', loadControllers: true });
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* // Load author view (configuration UI)
|
|
81
|
+
* await loader.load(config, document, { view: 'author', loadControllers: false });
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* // Load custom mobile-optimized view with fallback
|
|
85
|
+
* await loader.load(config, document, {
|
|
86
|
+
* view: 'delivery-mobile',
|
|
87
|
+
* viewConfig: { subpath: '/delivery-mobile', tagSuffix: '', fallback: 'delivery' },
|
|
88
|
+
* loadControllers: true
|
|
89
|
+
* });
|
|
90
|
+
*/
|
|
91
|
+
load(contentConfig: any, doc: Document, options: EsmLoadOptions): Promise<void>;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=esm-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm-loader.d.ts","sourceRoot":"","sources":["../../src/pie/esm-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;CAC7B;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,iBAAiB,CAAS;gBAEtB,MAAM,EAAE,eAAe;IASnC,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;YAOT,WAAW;IAyIlB,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;CAiDhB"}
|
|
@@ -0,0 +1,308 @@
|
|
|
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";
|
|
14
|
+
import { initializeMathRendering } from "./math-rendering";
|
|
15
|
+
import { pieRegistry } from "./registry";
|
|
16
|
+
import { isCustomElementConstructor, Status } from "./types";
|
|
17
|
+
// Logger factory - will be initialized when loader is created
|
|
18
|
+
let logger;
|
|
19
|
+
/**
|
|
20
|
+
* Built-in view configurations
|
|
21
|
+
* Extensible - elements can define custom views (e.g., 'delivery-mobile', 'delivery-a11y')
|
|
22
|
+
*/
|
|
23
|
+
export const BUILT_IN_VIEWS = {
|
|
24
|
+
delivery: {
|
|
25
|
+
subpath: "",
|
|
26
|
+
tagSuffix: "",
|
|
27
|
+
},
|
|
28
|
+
author: {
|
|
29
|
+
subpath: "/author",
|
|
30
|
+
tagSuffix: "-config",
|
|
31
|
+
fallback: "delivery", // Fall back to delivery if author doesn't exist
|
|
32
|
+
},
|
|
33
|
+
print: {
|
|
34
|
+
subpath: "/print",
|
|
35
|
+
tagSuffix: "-print",
|
|
36
|
+
fallback: "delivery",
|
|
37
|
+
},
|
|
38
|
+
// Custom views can follow patterns like:
|
|
39
|
+
// 'delivery-mobile': { subpath: '/delivery-mobile', tagSuffix: '', fallback: 'delivery' }
|
|
40
|
+
// 'delivery-a11y': { subpath: '/delivery-a11y', tagSuffix: '', fallback: 'delivery' }
|
|
41
|
+
// 'delivery-simple': { subpath: '/delivery-simple', tagSuffix: '', fallback: 'delivery' }
|
|
42
|
+
};
|
|
43
|
+
export class EsmPieLoader {
|
|
44
|
+
cdnBaseUrl;
|
|
45
|
+
importMapInjected = false;
|
|
46
|
+
constructor(config) {
|
|
47
|
+
this.cdnBaseUrl = config.cdnBaseUrl;
|
|
48
|
+
// Initialize logger with debug function
|
|
49
|
+
logger = createPieLogger("esm-loader", config.debugEnabled || (() => false));
|
|
50
|
+
}
|
|
51
|
+
extractPackageName(packageVersion) {
|
|
52
|
+
// Extract package name from version string
|
|
53
|
+
// e.g., "@pie-element/multiple-choice@11.0.1-esmbeta.3" => "@pie-element/multiple-choice"
|
|
54
|
+
const parts = packageVersion.split("@");
|
|
55
|
+
return parts.length >= 3 ? `@${parts[1]}` : parts[0];
|
|
56
|
+
}
|
|
57
|
+
generateImportMap(elements, options) {
|
|
58
|
+
const imports = {};
|
|
59
|
+
const viewConfig = options.viewConfig ||
|
|
60
|
+
BUILT_IN_VIEWS[options.view] ||
|
|
61
|
+
BUILT_IN_VIEWS.delivery;
|
|
62
|
+
for (const [_tag, packageVersion] of Object.entries(elements)) {
|
|
63
|
+
const packageName = this.extractPackageName(packageVersion);
|
|
64
|
+
// Add root package import (for delivery/default view)
|
|
65
|
+
imports[packageName] = this.resolvePackageUrl(packageVersion);
|
|
66
|
+
// Add view-specific subpath if not root
|
|
67
|
+
if (viewConfig.subpath) {
|
|
68
|
+
imports[`${packageName}${viewConfig.subpath}`] = this.resolveSubpathUrl(packageVersion, viewConfig.subpath);
|
|
69
|
+
}
|
|
70
|
+
// Add controller path if requested
|
|
71
|
+
if (options.loadControllers) {
|
|
72
|
+
imports[`${packageName}/controller`] =
|
|
73
|
+
this.resolveControllerUrl(packageVersion);
|
|
74
|
+
}
|
|
75
|
+
// Add fallback view if specified
|
|
76
|
+
if (viewConfig.fallback) {
|
|
77
|
+
const fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];
|
|
78
|
+
if (fallbackConfig?.subpath) {
|
|
79
|
+
imports[`${packageName}${fallbackConfig.subpath}`] =
|
|
80
|
+
this.resolveSubpathUrl(packageVersion, fallbackConfig.subpath);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return { imports };
|
|
85
|
+
}
|
|
86
|
+
isJsDelivrNpm() {
|
|
87
|
+
return this.cdnBaseUrl.includes("cdn.jsdelivr.net/npm");
|
|
88
|
+
}
|
|
89
|
+
resolvePackageUrl(packageVersion) {
|
|
90
|
+
// jsDelivr requires `+esm` to serve ESM-compatible output.
|
|
91
|
+
// Example: https://cdn.jsdelivr.net/npm/@pie-element/passage@5.3.3/+esm
|
|
92
|
+
if (this.isJsDelivrNpm()) {
|
|
93
|
+
return `${this.cdnBaseUrl}/${packageVersion}/+esm`;
|
|
94
|
+
}
|
|
95
|
+
// Default: treat baseUrl as a direct ESM CDN base (esm.sh, etc.)
|
|
96
|
+
return `${this.cdnBaseUrl}/${packageVersion}`;
|
|
97
|
+
}
|
|
98
|
+
resolveControllerUrl(packageVersion) {
|
|
99
|
+
if (this.isJsDelivrNpm()) {
|
|
100
|
+
return `${this.cdnBaseUrl}/${packageVersion}/controller/+esm`;
|
|
101
|
+
}
|
|
102
|
+
return `${this.cdnBaseUrl}/${packageVersion}/controller`;
|
|
103
|
+
}
|
|
104
|
+
resolveSubpathUrl(packageVersion, subpath) {
|
|
105
|
+
// Remove leading slash from subpath if present
|
|
106
|
+
const cleanSubpath = subpath.startsWith("/") ? subpath.slice(1) : subpath;
|
|
107
|
+
if (this.isJsDelivrNpm()) {
|
|
108
|
+
return `${this.cdnBaseUrl}/${packageVersion}/${cleanSubpath}/+esm`;
|
|
109
|
+
}
|
|
110
|
+
return `${this.cdnBaseUrl}/${packageVersion}/${cleanSubpath}`;
|
|
111
|
+
}
|
|
112
|
+
injectImportMap(importMap, doc) {
|
|
113
|
+
const script = doc.createElement("script");
|
|
114
|
+
script.type = "importmap";
|
|
115
|
+
script.textContent = JSON.stringify(importMap, null, 2);
|
|
116
|
+
doc.head.appendChild(script);
|
|
117
|
+
}
|
|
118
|
+
async loadElement(tag, packageVersion, options) {
|
|
119
|
+
const registry = pieRegistry();
|
|
120
|
+
const viewConfig = options.viewConfig ||
|
|
121
|
+
BUILT_IN_VIEWS[options.view] ||
|
|
122
|
+
BUILT_IN_VIEWS.delivery;
|
|
123
|
+
try {
|
|
124
|
+
const packageName = this.extractPackageName(packageVersion);
|
|
125
|
+
const actualTag = `${tag}${viewConfig.tagSuffix}`;
|
|
126
|
+
logger.debug(`Loading element ${actualTag} from ${packageName} (${packageVersion})`);
|
|
127
|
+
logger.debug(`View: ${options.view}, subpath: ${viewConfig.subpath}`);
|
|
128
|
+
// Determine import path based on view
|
|
129
|
+
const importPath = viewConfig.subpath
|
|
130
|
+
? `${packageName}${viewConfig.subpath}`
|
|
131
|
+
: packageName;
|
|
132
|
+
let module;
|
|
133
|
+
let ElementClass;
|
|
134
|
+
try {
|
|
135
|
+
// @vite-ignore - Dynamic import from CDN via import maps (runtime resolution)
|
|
136
|
+
module = await import(/* @vite-ignore */ importPath);
|
|
137
|
+
logger.debug(`Module loaded for ${actualTag}:`, module);
|
|
138
|
+
logger.debug(`Module exports:`, Object.keys(module));
|
|
139
|
+
// Try different export patterns based on view
|
|
140
|
+
if (options.view === "author") {
|
|
141
|
+
ElementClass = module.default || module.Configure || module.Element;
|
|
142
|
+
}
|
|
143
|
+
else if (options.view === "print") {
|
|
144
|
+
ElementClass = module.default || module.Print || module.Element;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
ElementClass = module.default || module.Element;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
// If loading fails and there's a fallback, try the fallback
|
|
152
|
+
if (viewConfig.fallback) {
|
|
153
|
+
logger.warn(`Failed to load ${importPath}, trying fallback: ${viewConfig.fallback}`);
|
|
154
|
+
const fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];
|
|
155
|
+
// Construct fallback path
|
|
156
|
+
let fallbackPath;
|
|
157
|
+
if (fallbackConfig.subpath) {
|
|
158
|
+
fallbackPath = `${packageName}${fallbackConfig.subpath}`;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
fallbackPath = packageName;
|
|
162
|
+
}
|
|
163
|
+
// @vite-ignore - Dynamic import from CDN via import maps (runtime resolution)
|
|
164
|
+
module = await import(/* @vite-ignore */ fallbackPath);
|
|
165
|
+
ElementClass = module.default || module.Element;
|
|
166
|
+
logger.debug(`Loaded fallback view for ${actualTag}`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
throw err;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (!ElementClass) {
|
|
173
|
+
throw new Error(`No suitable element class found in ${importPath} for view ${options.view}`);
|
|
174
|
+
}
|
|
175
|
+
// Load controller separately if needed
|
|
176
|
+
let controller = null;
|
|
177
|
+
if (options.loadControllers) {
|
|
178
|
+
try {
|
|
179
|
+
// @vite-ignore - Dynamic import from CDN via import maps (runtime resolution)
|
|
180
|
+
const controllerModule = await import(
|
|
181
|
+
/* @vite-ignore */ `${packageName}/controller`);
|
|
182
|
+
logger.debug(`Controller module loaded for ${actualTag}:`, controllerModule);
|
|
183
|
+
// Controller exports as 'default'
|
|
184
|
+
controller = controllerModule.default || controllerModule;
|
|
185
|
+
if (controller) {
|
|
186
|
+
logger.debug(`Controller registered for ${actualTag}`);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
logger.warn(`No controller export found for ${actualTag}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
logger.warn(`Failed to load controller for ${actualTag}:`, err);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Register in the global PIE registry (used by shared initialization code)
|
|
197
|
+
registry[actualTag] = {
|
|
198
|
+
package: packageVersion,
|
|
199
|
+
status: Status.loading,
|
|
200
|
+
tagName: actualTag,
|
|
201
|
+
element: ElementClass,
|
|
202
|
+
controller: controller,
|
|
203
|
+
config: null,
|
|
204
|
+
bundleType: "esm", // Mark as ESM-loaded
|
|
205
|
+
};
|
|
206
|
+
// Register custom element with the tag name (including suffix)
|
|
207
|
+
if (!customElements.get(actualTag)) {
|
|
208
|
+
if (isCustomElementConstructor(ElementClass)) {
|
|
209
|
+
// Wrap the Element class to allow multiple versions
|
|
210
|
+
customElements.define(actualTag, class extends ElementClass {
|
|
211
|
+
});
|
|
212
|
+
logger.debug(`Registered custom element: ${actualTag}`);
|
|
213
|
+
// Update status to loaded
|
|
214
|
+
registry[actualTag] = {
|
|
215
|
+
...registry[actualTag],
|
|
216
|
+
status: Status.loaded,
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
logger.warn(`No Element export found in module`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
logger.debug(`Element ${actualTag} already registered`);
|
|
225
|
+
registry[actualTag] = {
|
|
226
|
+
...registry[actualTag],
|
|
227
|
+
status: Status.loaded,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
logger.error(`Failed to load element ${tag}:`, err);
|
|
233
|
+
throw err;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
getController(tag) {
|
|
237
|
+
const registry = pieRegistry();
|
|
238
|
+
return registry[tag]?.controller || null;
|
|
239
|
+
}
|
|
240
|
+
async elementsHaveLoaded(elements) {
|
|
241
|
+
// Wait for versioned tags to be defined
|
|
242
|
+
const promises = elements.map((el) => {
|
|
243
|
+
logger.debug(`Waiting for ${el.tag} to be defined`);
|
|
244
|
+
return customElements.whenDefined(el.tag);
|
|
245
|
+
});
|
|
246
|
+
await Promise.all(promises);
|
|
247
|
+
return { elements, val: true };
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Load PIE elements with specified view/variant
|
|
251
|
+
*
|
|
252
|
+
* @param contentConfig - Item config with elements
|
|
253
|
+
* @param doc - Document to inject import maps into
|
|
254
|
+
* @param options - Loading options (view, controllers, etc.)
|
|
255
|
+
*
|
|
256
|
+
* @example
|
|
257
|
+
* // Load delivery view with controllers
|
|
258
|
+
* await loader.load(config, document, { view: 'delivery', loadControllers: true });
|
|
259
|
+
*
|
|
260
|
+
* @example
|
|
261
|
+
* // Load author view (configuration UI)
|
|
262
|
+
* await loader.load(config, document, { view: 'author', loadControllers: false });
|
|
263
|
+
*
|
|
264
|
+
* @example
|
|
265
|
+
* // Load custom mobile-optimized view with fallback
|
|
266
|
+
* await loader.load(config, document, {
|
|
267
|
+
* view: 'delivery-mobile',
|
|
268
|
+
* viewConfig: { subpath: '/delivery-mobile', tagSuffix: '', fallback: 'delivery' },
|
|
269
|
+
* loadControllers: true
|
|
270
|
+
* });
|
|
271
|
+
*/
|
|
272
|
+
async load(contentConfig, doc, options) {
|
|
273
|
+
logger.debug("load() called with options:", options);
|
|
274
|
+
logger.debug("contentConfig:", contentConfig);
|
|
275
|
+
if (!contentConfig?.elements) {
|
|
276
|
+
logger.warn("No elements in config");
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
const viewConfig = options.viewConfig ||
|
|
280
|
+
BUILT_IN_VIEWS[options.view] ||
|
|
281
|
+
BUILT_IN_VIEWS.delivery;
|
|
282
|
+
// 0. Initialize math-rendering (required by PIE elements)
|
|
283
|
+
await initializeMathRendering();
|
|
284
|
+
// 1. Generate and inject import map (once per page)
|
|
285
|
+
if (!this.importMapInjected) {
|
|
286
|
+
logger.debug("Generating import map for view:", options.view);
|
|
287
|
+
const importMap = this.generateImportMap(contentConfig.elements, options);
|
|
288
|
+
logger.debug("Import map:", importMap);
|
|
289
|
+
this.injectImportMap(importMap, doc);
|
|
290
|
+
this.importMapInjected = true;
|
|
291
|
+
logger.debug("Import map injected");
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
logger.debug("Import map already injected, skipping");
|
|
295
|
+
}
|
|
296
|
+
// 2. Dynamically import and register each element
|
|
297
|
+
const elementTags = Object.keys(contentConfig.elements);
|
|
298
|
+
logger.debug("Loading elements:", elementTags);
|
|
299
|
+
await Promise.all(elementTags.map((tag) => this.loadElement(tag, contentConfig.elements[tag], options)));
|
|
300
|
+
logger.debug("All elements loaded");
|
|
301
|
+
// 3. Wait for all custom elements to be defined
|
|
302
|
+
logger.debug("Waiting for custom elements to be defined");
|
|
303
|
+
const tagsWithSuffix = elementTags.map((tag) => `${tag}${viewConfig.tagSuffix}`);
|
|
304
|
+
await Promise.all(tagsWithSuffix.map((tag) => customElements.whenDefined(tag)));
|
|
305
|
+
logger.debug("All custom elements defined");
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=esm-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm-loader.js","sourceRoot":"","sources":["../../src/pie/esm-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
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";
|
|
11
|
+
export interface IifeLoaderConfig {
|
|
12
|
+
/**
|
|
13
|
+
* Base URL for the PIE bundle service
|
|
14
|
+
* This service builds and serves IIFE bundles dynamically based on element versions
|
|
15
|
+
* @example "https://proxy.pie-api.com/bundles/"
|
|
16
|
+
* @default "https://proxy.pie-api.com/bundles/"
|
|
17
|
+
*/
|
|
18
|
+
bundleHost: string;
|
|
19
|
+
/**
|
|
20
|
+
* Debug function (returns whether debug is enabled)
|
|
21
|
+
*/
|
|
22
|
+
debugEnabled?: () => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* When true, retries a failed script load by appending a cache-busting query param.
|
|
25
|
+
* Mirrors legacy `reFetchBundle` behavior used by `pie-author`.
|
|
26
|
+
*/
|
|
27
|
+
reFetchBundle?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Timeout (ms) for `customElements.whenDefined(...)` waiting.
|
|
30
|
+
* Prevents infinite loading hangs; mirrors legacy loader behavior.
|
|
31
|
+
*/
|
|
32
|
+
whenDefinedTimeoutMs?: number;
|
|
33
|
+
}
|
|
34
|
+
export declare const DEFAULT_BUNDLE_HOST = "https://proxy.pie-api.com/bundles/";
|
|
35
|
+
export declare class IifePieLoader {
|
|
36
|
+
private config;
|
|
37
|
+
constructor(config: IifeLoaderConfig);
|
|
38
|
+
/**
|
|
39
|
+
* Get the bundle URL based on config elements
|
|
40
|
+
*/
|
|
41
|
+
private getBundleUrl;
|
|
42
|
+
/**
|
|
43
|
+
* Load an IIFE bundle from the specified URL
|
|
44
|
+
*/
|
|
45
|
+
private loadBundleScript;
|
|
46
|
+
private whenDefinedWithTimeout;
|
|
47
|
+
private createEmptyConfigure;
|
|
48
|
+
/**
|
|
49
|
+
* Register elements from the loaded IIFE bundle into the PIE registry
|
|
50
|
+
*/
|
|
51
|
+
private registerElementsFromBundle;
|
|
52
|
+
/**
|
|
53
|
+
* Load PIE elements from IIFE bundle
|
|
54
|
+
*
|
|
55
|
+
* @param contentConfig - Item config with elements
|
|
56
|
+
* @param doc - Document to inject script into
|
|
57
|
+
* @param bundleType - Type of bundle (BundleType.player, BundleType.clientPlayer, or BundleType.editor)
|
|
58
|
+
* @param needsControllers - Whether controllers are needed
|
|
59
|
+
*/
|
|
60
|
+
load(contentConfig: any, doc: Document, bundleType: BundleType, needsControllers: boolean): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Get controller for a specific element tag
|
|
63
|
+
*/
|
|
64
|
+
getController(tag: string): any | null;
|
|
65
|
+
/**
|
|
66
|
+
* Wait for elements to be fully loaded
|
|
67
|
+
*/
|
|
68
|
+
elementsHaveLoaded(elements: Array<{
|
|
69
|
+
name: string;
|
|
70
|
+
tag: string;
|
|
71
|
+
}>): Promise<{
|
|
72
|
+
elements: typeof elements;
|
|
73
|
+
val: boolean;
|
|
74
|
+
}>;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=iife-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iife-loader.d.ts","sourceRoot":"","sources":["../../src/pie/iife-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,UAAU,EAAsC,MAAM,SAAS,CAAC;AAMzE,MAAM,WAAW,gBAAgB;IAChC;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;IAE7B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAID,eAAO,MAAM,mBAAmB,uCAAuC,CAAC;AAUxE,qBAAa,aAAa;IACzB,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,EAAE,gBAAgB;IASpC;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;YACW,gBAAgB;IAsB9B,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,oBAAoB;IAuB5B;;OAEG;YACW,0BAA0B;IA8GxC;;;;;;;OAOG;IACU,IAAI,CAChB,aAAa,EAAE,GAAG,EAClB,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,OAAO,GACvB,OAAO,CAAC,IAAI,CAAC;IAmIhB;;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"}
|