@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.
Files changed (66) hide show
  1. package/dist/index.js +4 -0
  2. package/dist/index.js.map +1 -1
  3. package/dist/loaders/ElementLoader.d.ts +6 -34
  4. package/dist/loaders/ElementLoader.d.ts.map +1 -1
  5. package/dist/loaders/ElementLoader.js +21 -9
  6. package/dist/loaders/ElementLoader.js.map +1 -1
  7. package/dist/loaders/element-loader-types.d.ts +91 -0
  8. package/dist/loaders/element-loader-types.d.ts.map +1 -0
  9. package/dist/loaders/element-loader-types.js +26 -0
  10. package/dist/loaders/element-loader-types.js.map +1 -0
  11. package/dist/loaders/element-loader.d.ts +92 -0
  12. package/dist/loaders/element-loader.d.ts.map +1 -0
  13. package/dist/loaders/element-loader.js +391 -0
  14. package/dist/loaders/element-loader.js.map +1 -0
  15. package/dist/loaders/esm-adapter.d.ts +40 -0
  16. package/dist/loaders/esm-adapter.d.ts.map +1 -0
  17. package/dist/loaders/esm-adapter.js +274 -0
  18. package/dist/loaders/esm-adapter.js.map +1 -0
  19. package/dist/loaders/iife-adapter.d.ts +86 -0
  20. package/dist/loaders/iife-adapter.d.ts.map +1 -0
  21. package/dist/loaders/iife-adapter.js +365 -0
  22. package/dist/loaders/iife-adapter.js.map +1 -0
  23. package/dist/loaders/index.d.ts +30 -17
  24. package/dist/loaders/index.d.ts.map +1 -1
  25. package/dist/loaders/index.js +26 -14
  26. package/dist/loaders/index.js.map +1 -1
  27. package/dist/pie/index.d.ts +4 -4
  28. package/dist/pie/index.d.ts.map +1 -1
  29. package/dist/pie/index.js +7 -2
  30. package/dist/pie/index.js.map +1 -1
  31. package/dist/pie/initialization.d.ts +26 -1
  32. package/dist/pie/initialization.d.ts.map +1 -1
  33. package/dist/pie/initialization.js +72 -15
  34. package/dist/pie/initialization.js.map +1 -1
  35. package/dist/pie/instrumentation-event-map.d.ts.map +1 -1
  36. package/dist/pie/instrumentation-event-map.js +27 -16
  37. package/dist/pie/instrumentation-event-map.js.map +1 -1
  38. package/dist/pie/stage-tracker.d.ts +51 -0
  39. package/dist/pie/stage-tracker.d.ts.map +1 -0
  40. package/dist/pie/stage-tracker.js +106 -0
  41. package/dist/pie/stage-tracker.js.map +1 -0
  42. package/dist/pie/stages.d.ts +75 -0
  43. package/dist/pie/stages.d.ts.map +1 -0
  44. package/dist/pie/stages.js +58 -0
  45. package/dist/pie/stages.js.map +1 -0
  46. package/dist/pie/use-resource-monitor.svelte.d.ts.map +1 -1
  47. package/dist/pie/use-resource-monitor.svelte.js +88 -75
  48. package/dist/pie/use-resource-monitor.svelte.js.map +1 -1
  49. package/dist/ui/use-promise.svelte.ts +109 -0
  50. package/package.json +6 -1
  51. package/dist/loaders/EsmElementLoader.d.ts +0 -69
  52. package/dist/loaders/EsmElementLoader.d.ts.map +0 -1
  53. package/dist/loaders/EsmElementLoader.js +0 -72
  54. package/dist/loaders/EsmElementLoader.js.map +0 -1
  55. package/dist/loaders/IifeElementLoader.d.ts +0 -61
  56. package/dist/loaders/IifeElementLoader.d.ts.map +0 -1
  57. package/dist/loaders/IifeElementLoader.js +0 -63
  58. package/dist/loaders/IifeElementLoader.js.map +0 -1
  59. package/dist/pie/esm-loader.d.ts +0 -104
  60. package/dist/pie/esm-loader.d.ts.map +0 -1
  61. package/dist/pie/esm-loader.js +0 -358
  62. package/dist/pie/esm-loader.js.map +0 -1
  63. package/dist/pie/iife-loader.d.ts +0 -116
  64. package/dist/pie/iife-loader.d.ts.map +0 -1
  65. package/dist/pie/iife-loader.js +0 -561
  66. package/dist/pie/iife-loader.js.map +0 -1
@@ -0,0 +1,274 @@
1
+ /**
2
+ * ESM backend adapter for the ElementLoader primitive.
3
+ *
4
+ * Loads PIE elements via dynamic `import()` from an ESM CDN (esm.sh,
5
+ * jsDelivr, etc.), optionally resolving bare specifiers through an
6
+ * `<script type="importmap">` injected into the host document. On any
7
+ * per-tag failure (module load, non-constructor element class, define
8
+ * failure), throws `AdapterFailure` with a structured `reasons` map.
9
+ *
10
+ * Like the IIFE adapter, this module does not gate its own promise on
11
+ * `customElements.whenDefined`; the primitive performs that verification
12
+ * uniformly. Here the adapter's job is narrowly to fetch, extract, and
13
+ * call `customElements.define`.
14
+ */
15
+ import { defineCustomElementSafely } from "../pie/custom-element-define.js";
16
+ import { pieRegistry } from "../pie/registry.js";
17
+ import { validateCustomElementTag } from "../pie/tag-names.js";
18
+ import { isCustomElementConstructor, Status } from "../pie/types.js";
19
+ import { AdapterFailure, } from "./element-loader-types.js";
20
+ export const BUILT_IN_VIEWS = {
21
+ delivery: { subpath: "", tagSuffix: "" },
22
+ author: { subpath: "/author", tagSuffix: "-config", fallback: "delivery" },
23
+ print: { subpath: "/print", tagSuffix: "-print", fallback: "delivery" },
24
+ };
25
+ export function createEsmBackend(config) {
26
+ const cdnBaseUrl = config.cdnBaseUrl.replace(/\/+$/, "");
27
+ const moduleResolution = config.moduleResolution ?? "url";
28
+ const view = config.view ?? "delivery";
29
+ const loadControllers = config.loadControllers ?? true;
30
+ const viewConfig = config.viewConfig ??
31
+ BUILT_IN_VIEWS[view] ??
32
+ BUILT_IN_VIEWS.delivery;
33
+ const injectedPackages = new Set();
34
+ let importer = defaultImporter;
35
+ let importMapObserver;
36
+ const __seams = {
37
+ replaceImporter(fn) {
38
+ importer = fn;
39
+ },
40
+ observeImportMapInjection(cb) {
41
+ importMapObserver = cb;
42
+ },
43
+ restore() {
44
+ importer = defaultImporter;
45
+ importMapObserver = undefined;
46
+ injectedPackages.clear();
47
+ },
48
+ };
49
+ async function load(elements, context) {
50
+ if (!elements || Object.keys(elements).length === 0)
51
+ return;
52
+ if (moduleResolution === "import-map") {
53
+ assertImportMapSupported();
54
+ const newEntries = {};
55
+ for (const [tag, pkg] of Object.entries(elements)) {
56
+ const packageName = extractPackageName(pkg);
57
+ if (!injectedPackages.has(packageName)) {
58
+ newEntries[tag] = pkg;
59
+ injectedPackages.add(packageName);
60
+ }
61
+ }
62
+ if (Object.keys(newEntries).length > 0) {
63
+ const json = buildImportMapJson(newEntries, viewConfig, cdnBaseUrl, loadControllers);
64
+ injectImportMap(json, context.doc);
65
+ importMapObserver?.(json, context.doc);
66
+ }
67
+ }
68
+ const reasons = new Map();
69
+ const registry = pieRegistry();
70
+ await Promise.all(Object.entries(elements).map(async ([tag, packageVersion]) => {
71
+ const packageName = extractPackageName(packageVersion);
72
+ let actualTag;
73
+ try {
74
+ actualTag = validateCustomElementTag(`${tag}${viewConfig.tagSuffix}`, `element tag for ${packageName}`);
75
+ }
76
+ catch (err) {
77
+ reasons.set(tag, {
78
+ kind: "define-failed",
79
+ tag,
80
+ cause: err instanceof Error ? err.message : String(err),
81
+ });
82
+ return;
83
+ }
84
+ const specifier = resolveElementSpecifier(packageName, packageVersion, viewConfig, moduleResolution, cdnBaseUrl);
85
+ let module;
86
+ try {
87
+ module = await importer(specifier);
88
+ }
89
+ catch (err) {
90
+ if (viewConfig.fallback) {
91
+ const fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback] ?? BUILT_IN_VIEWS.delivery;
92
+ const fallbackSpecifier = resolveElementSpecifier(packageName, packageVersion, fallbackConfig, moduleResolution, cdnBaseUrl);
93
+ try {
94
+ module = await importer(fallbackSpecifier);
95
+ }
96
+ catch (fallbackErr) {
97
+ reasons.set(tag, {
98
+ kind: "module-load-failed",
99
+ tag,
100
+ specifier: fallbackSpecifier,
101
+ cause: fallbackErr instanceof Error
102
+ ? fallbackErr.message
103
+ : String(fallbackErr),
104
+ });
105
+ return;
106
+ }
107
+ }
108
+ else {
109
+ reasons.set(tag, {
110
+ kind: "module-load-failed",
111
+ tag,
112
+ specifier,
113
+ cause: err instanceof Error ? err.message : String(err),
114
+ });
115
+ return;
116
+ }
117
+ }
118
+ const ElementClass = pickElementClass(module, view);
119
+ if (!ElementClass) {
120
+ reasons.set(tag, {
121
+ kind: "no-element-class",
122
+ tag,
123
+ packageName,
124
+ });
125
+ return;
126
+ }
127
+ if (!isCustomElementConstructor(ElementClass)) {
128
+ reasons.set(tag, {
129
+ kind: "not-a-constructor",
130
+ tag,
131
+ packageName,
132
+ });
133
+ return;
134
+ }
135
+ try {
136
+ defineCustomElementSafely(actualTag, class extends ElementClass {
137
+ }, `element tag for ${packageName}`);
138
+ }
139
+ catch (err) {
140
+ reasons.set(tag, {
141
+ kind: "define-failed",
142
+ tag,
143
+ cause: err instanceof Error ? err.message : String(err),
144
+ });
145
+ return;
146
+ }
147
+ let controller = null;
148
+ if (loadControllers) {
149
+ const controllerSpecifier = resolveControllerSpecifier(packageName, packageVersion, moduleResolution, cdnBaseUrl);
150
+ try {
151
+ const controllerModule = await importer(controllerSpecifier);
152
+ controller = controllerModule?.default ?? controllerModule;
153
+ }
154
+ catch {
155
+ // Controllers are best-effort; element registration is what the
156
+ // primitive verifies.
157
+ }
158
+ }
159
+ registry[actualTag] = {
160
+ package: packageVersion,
161
+ status: Status.loaded,
162
+ tagName: actualTag,
163
+ element: ElementClass,
164
+ controller,
165
+ config: null,
166
+ bundleType: "esm",
167
+ };
168
+ }));
169
+ if (reasons.size > 0) {
170
+ throw new AdapterFailure(reasons);
171
+ }
172
+ }
173
+ return {
174
+ load,
175
+ get __seams() {
176
+ return __seams;
177
+ },
178
+ };
179
+ }
180
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
181
+ function defaultImporter(specifier) {
182
+ // @vite-ignore — dynamic import resolved at runtime.
183
+ return import(/* @vite-ignore */ specifier);
184
+ }
185
+ function extractPackageName(packageVersion) {
186
+ const parts = packageVersion.split("@");
187
+ return parts.length >= 3 ? `@${parts[1]}` : parts[0];
188
+ }
189
+ function isJsDelivrNpm(cdnBaseUrl) {
190
+ return cdnBaseUrl.includes("cdn.jsdelivr.net/npm");
191
+ }
192
+ function resolvePackageUrl(packageVersion, cdnBaseUrl) {
193
+ if (isJsDelivrNpm(cdnBaseUrl)) {
194
+ return `${cdnBaseUrl}/${packageVersion}/+esm`;
195
+ }
196
+ return `${cdnBaseUrl}/${packageVersion}`;
197
+ }
198
+ function resolveSubpathUrl(packageVersion, subpath, cdnBaseUrl) {
199
+ const cleanSubpath = subpath.startsWith("/") ? subpath.slice(1) : subpath;
200
+ if (isJsDelivrNpm(cdnBaseUrl)) {
201
+ return `${cdnBaseUrl}/${packageVersion}/${cleanSubpath}/+esm`;
202
+ }
203
+ return `${cdnBaseUrl}/${packageVersion}/${cleanSubpath}`;
204
+ }
205
+ function resolveControllerUrl(packageVersion, cdnBaseUrl) {
206
+ if (isJsDelivrNpm(cdnBaseUrl)) {
207
+ return `${cdnBaseUrl}/${packageVersion}/controller/+esm`;
208
+ }
209
+ return `${cdnBaseUrl}/${packageVersion}/controller`;
210
+ }
211
+ function resolveElementSpecifier(packageName, packageVersion, viewConfig, moduleResolution, cdnBaseUrl) {
212
+ if (moduleResolution === "import-map") {
213
+ return viewConfig.subpath
214
+ ? `${packageName}${viewConfig.subpath}`
215
+ : packageName;
216
+ }
217
+ return viewConfig.subpath
218
+ ? resolveSubpathUrl(packageVersion, viewConfig.subpath, cdnBaseUrl)
219
+ : resolvePackageUrl(packageVersion, cdnBaseUrl);
220
+ }
221
+ function resolveControllerSpecifier(packageName, packageVersion, moduleResolution, cdnBaseUrl) {
222
+ if (moduleResolution === "import-map") {
223
+ return `${packageName}/controller`;
224
+ }
225
+ return resolveControllerUrl(packageVersion, cdnBaseUrl);
226
+ }
227
+ function pickElementClass(module, view) {
228
+ if (!module || typeof module !== "object")
229
+ return undefined;
230
+ if (view === "author") {
231
+ return module.default ?? module.Configure ?? module.Element;
232
+ }
233
+ if (view === "print") {
234
+ return module.default ?? module.Print ?? module.Element;
235
+ }
236
+ return module.default ?? module.Element;
237
+ }
238
+ function buildImportMapJson(elements, viewConfig, cdnBaseUrl, loadControllers) {
239
+ const imports = {};
240
+ for (const [, pkg] of Object.entries(elements)) {
241
+ const packageName = extractPackageName(pkg);
242
+ imports[packageName] = resolvePackageUrl(pkg, cdnBaseUrl);
243
+ if (viewConfig.subpath) {
244
+ imports[`${packageName}${viewConfig.subpath}`] = resolveSubpathUrl(pkg, viewConfig.subpath, cdnBaseUrl);
245
+ }
246
+ if (loadControllers) {
247
+ imports[`${packageName}/controller`] = resolveControllerUrl(pkg, cdnBaseUrl);
248
+ }
249
+ if (viewConfig.fallback) {
250
+ const fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];
251
+ if (fallbackConfig?.subpath) {
252
+ imports[`${packageName}${fallbackConfig.subpath}`] = resolveSubpathUrl(pkg, fallbackConfig.subpath, cdnBaseUrl);
253
+ }
254
+ }
255
+ }
256
+ return JSON.stringify({ imports }, null, 2);
257
+ }
258
+ function injectImportMap(json, doc) {
259
+ const script = doc.createElement("script");
260
+ script.type = "importmap";
261
+ script.textContent = json;
262
+ doc.head.appendChild(script);
263
+ }
264
+ function assertImportMapSupported() {
265
+ const htmlScriptElement = (typeof HTMLScriptElement !== "undefined"
266
+ ? HTMLScriptElement
267
+ : undefined);
268
+ const supports = typeof htmlScriptElement?.supports === "function" &&
269
+ htmlScriptElement.supports("importmap");
270
+ if (!supports) {
271
+ throw new Error('This browser does not support import maps. Use moduleResolution="url" or switch to iife/preloaded strategy.');
272
+ }
273
+ }
274
+ //# sourceMappingURL=esm-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esm-adapter.js","sourceRoot":"","sources":["../../src/loaders/esm-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * IIFE backend adapter for the ElementLoader primitive.
3
+ *
4
+ * Loads PIE elements from IIFE bundles served by the PIE build service,
5
+ * then registers them with `customElements`. On any per-tag failure
6
+ * (missing package, non-constructor element class, define failure),
7
+ * throws `AdapterFailure` with a structured `reasons` map that the
8
+ * primitive unpacks into `ElementLoaderError.reasons`.
9
+ *
10
+ * This adapter deliberately does *not* gate its own promise on
11
+ * `customElements.whenDefined` — the primitive performs that verification
12
+ * uniformly for every backend, so the adapter's job is narrowly:
13
+ *
14
+ * 1. Fetch the bundle.
15
+ * 2. Extract per-tag element classes from `window.pie.default`.
16
+ * 3. Validate each class is a custom-element constructor.
17
+ * 4. Call `customElements.define` via `defineCustomElementSafely`.
18
+ * 5. Collect structured per-tag reasons for anything that failed.
19
+ * 6. Resolve (everything OK) or throw `AdapterFailure` (anything failed).
20
+ */
21
+ import type { InstrumentationProvider } from "../instrumentation/types.js";
22
+ import { type IifeBundleRetryConfig } from "../loader-config.js";
23
+ import { BundleType } from "../pie/types.js";
24
+ import { type ElementLoaderBackend } from "./element-loader-types.js";
25
+ /**
26
+ * Default PIE bundle service base URL. Exported so widgets can use it as
27
+ * the fallback when the host does not supply `loaderOptions.bundleHost`.
28
+ */
29
+ export declare const DEFAULT_BUNDLE_HOST = "https://proxy.pie-api.com/bundles/";
30
+ /**
31
+ * Bundle-build retry status emitted while a bundle is being built or after
32
+ * it completes. Hosts that display a "bundle is building…" UI subscribe via
33
+ * `onBundleRetryStatus` and read each transition.
34
+ */
35
+ export type IifeBundleRetryStatus = {
36
+ state: "retrying" | "completed" | "timeout" | "cancelled";
37
+ url: string;
38
+ attempt: number;
39
+ elapsedMs: number;
40
+ timeoutMs: number;
41
+ retryDelayMs?: number;
42
+ reason?: string;
43
+ };
44
+ export type IifeBackendConfig = {
45
+ kind: "iife";
46
+ /** Base URL for the PIE bundle service. */
47
+ bundleHost: string;
48
+ /** Bundle variant to request (player / client-player / editor). */
49
+ bundleType?: BundleType;
50
+ /** Whether the registered entries should carry their controller exports. */
51
+ needsControllers?: boolean;
52
+ /** Explicit bundle override (hash + optional URL) supplied by the host. */
53
+ bundleInfo?: {
54
+ hash?: string;
55
+ url?: string;
56
+ };
57
+ /** Debug flag hook. */
58
+ debugEnabled?: () => boolean;
59
+ /**
60
+ * Retry policy for transient bundle load failures.
61
+ *
62
+ * When the bundle service is building a bundle on demand, the first
63
+ * few `<script src>` requests can fail. This policy polls until the
64
+ * bundle is available or `timeoutMs` elapses. Default matches
65
+ * `DEFAULT_IIFE_BUNDLE_RETRY_CONFIG`.
66
+ */
67
+ bundleRetry?: IifeBundleRetryConfig;
68
+ /**
69
+ * Callback invoked with retry status transitions. Lets hosts render
70
+ * "bundle still building, retrying in Ns" messaging without touching
71
+ * internal adapter state.
72
+ */
73
+ onBundleRetryStatus?: (status: IifeBundleRetryStatus) => void;
74
+ /**
75
+ * If true and `instrumentationProvider` is set and ready, retry
76
+ * lifecycle events (`pie-iife-bundle-retry*`) are emitted.
77
+ */
78
+ trackPageActions?: boolean;
79
+ /**
80
+ * Instrumentation provider used to emit retry lifecycle telemetry.
81
+ */
82
+ instrumentationProvider?: InstrumentationProvider;
83
+ };
84
+ export type IifeBackend = ElementLoaderBackend & {};
85
+ export declare function createIifeBackend(config: IifeBackendConfig): IifeBackend;
86
+ //# sourceMappingURL=iife-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iife-adapter.d.ts","sourceRoot":"","sources":["../../src/loaders/iife-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E,OAAO,EAEN,KAAK,qBAAqB,EAC1B,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACN,UAAU,EAGV,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGN,KAAK,oBAAoB,EAGzB,MAAM,2BAA2B,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,uCAAuC,CAAC;AAExE;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IACnC,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,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2EAA2E;IAC3E,UAAU,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,uBAAuB;IACvB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;IAC7B;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC9D;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CAClD,CAAC;AA2BF,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG,EAGhD,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAmSxE"}