@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
package/dist/index.js CHANGED
@@ -12,4 +12,8 @@ export * from "./ui/focus-trap.js";
12
12
  export * from "./ui/first-focusable.js";
13
13
  export * from "./ui/debug-panel-persistence.js";
14
14
  export * from "./ui/safe-storage.js";
15
+ // use-promise is a Svelte 5 runes module and is shipped as raw source via
16
+ // the `./ui/use-promise` subpath export. It is not re-exported here because
17
+ // tsc cannot compile `.svelte.ts` runes correctly; the consumer's Svelte
18
+ // plugin processes it at consume time.
15
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,0CAA0C;AAC1C,cAAc,gBAAgB,CAAC;AAmB/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,0CAA0C;AAC1C,cAAc,gBAAgB,CAAC;AAmB/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,0EAA0E;AAC1E,4EAA4E;AAC5E,yEAAyE;AACzE,uCAAuC"}
@@ -1,11 +1,12 @@
1
1
  /**
2
- * Element Loader - Core types and utilities for loading PIE elements
2
+ * Element Loader element aggregation utilities.
3
3
  *
4
- * This module provides element aggregation and loading abstractions for PIE players.
5
- * It enables loading multiple PIE elements in a single operation, eliminating duplicate
6
- * bundle requests when multiple items use the same elements.
4
+ * The deep `ElementLoader` primitive lives in `./element-loader.ts`. This
5
+ * module owns the shared `ElementMap` type and the `aggregateElements`
6
+ * helper that reduces many items' element declarations into a single
7
+ * deduplicated, version-aware map (used by the section-player to
8
+ * pre-warm in one shot).
7
9
  */
8
- import type { BundleType } from "../pie/types.js";
9
10
  import type { ItemEntity } from "../types/index.js";
10
11
  /**
11
12
  * Map of element tag names to their package versions
@@ -14,35 +15,6 @@ import type { ItemEntity } from "../types/index.js";
14
15
  export type ElementMap = {
15
16
  [tagName: string]: string;
16
17
  };
17
- /**
18
- * Options for loading PIE elements
19
- */
20
- export interface LoadOptions {
21
- /** Bundle type to load (player or clientPlayer) */
22
- bundleType?: BundleType;
23
- /** Whether to load controllers (for client-side processing) */
24
- needsControllers?: boolean;
25
- /** View mode (ESM only) - delivery, author, or print */
26
- view?: "delivery" | "author" | "print";
27
- }
28
- /**
29
- * Common interface for element loaders (IIFE and ESM)
30
- */
31
- export interface ElementLoaderInterface {
32
- /**
33
- * Load elements directly from an element map
34
- * @param elements - Map of element tag names to package versions
35
- * @param options - Loading options
36
- */
37
- loadElements(elements: ElementMap, options?: LoadOptions): Promise<void>;
38
- /**
39
- * Extract and load elements from items
40
- * Automatically aggregates unique elements from all items
41
- * @param items - Array of items to extract elements from
42
- * @param options - Loading options
43
- */
44
- loadFromItems(items: ItemEntity[], options?: LoadOptions): Promise<void>;
45
- }
46
18
  /**
47
19
  * Aggregate unique elements from multiple items
48
20
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ElementLoader.d.ts","sourceRoot":"","sources":["../../src/loaders/ElementLoader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,mDAAmD;IACnD,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,wDAAwD;IACxD,IAAI,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzE;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,CAmDjE"}
1
+ {"version":3,"file":"ElementLoader.d.ts","sourceRoot":"","sources":["../../src/loaders/ElementLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,CAmEjE"}
@@ -1,9 +1,11 @@
1
1
  /**
2
- * Element Loader - Core types and utilities for loading PIE elements
2
+ * Element Loader element aggregation utilities.
3
3
  *
4
- * This module provides element aggregation and loading abstractions for PIE players.
5
- * It enables loading multiple PIE elements in a single operation, eliminating duplicate
6
- * bundle requests when multiple items use the same elements.
4
+ * The deep `ElementLoader` primitive lives in `./element-loader.ts`. This
5
+ * module owns the shared `ElementMap` type and the `aggregateElements`
6
+ * helper that reduces many items' element declarations into a single
7
+ * deduplicated, version-aware map (used by the section-player to
8
+ * pre-warm in one shot).
7
9
  */
8
10
  import { parsePackageName } from "../pie/utils.js";
9
11
  /**
@@ -35,21 +37,31 @@ export function aggregateElements(items) {
35
37
  const elementMap = {};
36
38
  const seenOriginalTags = {};
37
39
  const VERSION_DELIMITER = "--version-";
40
+ const TAG_VERSION_PATTERN = "[0-9A-Za-z-]+";
41
+ const encodeVersionForTag = (version) => version
42
+ .trim()
43
+ .replace(/[.+]/g, "-")
44
+ .replace(/[^0-9A-Za-z-]/g, "-")
45
+ .replace(/-{2,}/g, "-");
38
46
  const parseTagName = (tagName) => {
39
- const versionMatch = tagName.match(`${VERSION_DELIMITER}(\\d+-\\d+-\\d+)$`);
47
+ const versionMatch = tagName.match(new RegExp(`${VERSION_DELIMITER}(${TAG_VERSION_PATTERN})$`));
40
48
  return versionMatch
41
49
  ? {
42
50
  baseName: tagName.replace(`${VERSION_DELIMITER}${versionMatch[1]}`, ""),
43
- existingVersion: versionMatch[1].replace(/-/g, "."),
51
+ existingEncodedVersion: versionMatch[1],
44
52
  }
45
53
  : { baseName: tagName };
46
54
  };
47
55
  const normalizeElementTag = (tagName, packageSpec) => {
48
- const { baseName, existingVersion } = parseTagName(tagName);
56
+ const { baseName, existingEncodedVersion } = parseTagName(tagName);
49
57
  const { version } = parsePackageName(packageSpec);
50
- if (!version || existingVersion === version)
58
+ if (!version)
51
59
  return tagName;
52
- return `${baseName}${VERSION_DELIMITER}${version.replace(/\./g, "-")}`;
60
+ const targetEncodedVersion = encodeVersionForTag(version);
61
+ if (!targetEncodedVersion || existingEncodedVersion === targetEncodedVersion) {
62
+ return tagName;
63
+ }
64
+ return `${baseName}${VERSION_DELIMITER}${targetEncodedVersion}`;
53
65
  };
54
66
  items.forEach((item) => {
55
67
  const itemElements = item.config?.elements || {};
@@ -1 +1 @@
1
- {"version":3,"file":"ElementLoader.js","sourceRoot":"","sources":["../../src/loaders/ElementLoader.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA2CnD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAmB;IACpD,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,MAAM,gBAAgB,GAA2B,EAAE,CAAC;IAEpD,MAAM,iBAAiB,GAAG,YAAY,CAAC;IACvC,MAAM,YAAY,GAAG,CACpB,OAAe,EACkC,EAAE;QACnD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,iBAAiB,mBAAmB,CAAC,CAAC;QAC5E,OAAO,YAAY;YAClB,CAAC,CAAC;gBACA,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,iBAAiB,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;gBACvE,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;aACnD;YACF,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC1B,CAAC,CAAC;IACF,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAE,WAAmB,EAAU,EAAE;QAC5E,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,IAAI,eAAe,KAAK,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5D,OAAO,GAAG,QAAQ,GAAG,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;IACxE,CAAC,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;QAEjD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;YACnD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,gBAAgB,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;YACrC,CAAC;iBAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC;gBAClD,kEAAkE;gBAClE,MAAM,IAAI,KAAK,CACd,6BAA6B,GAAG,kBAAkB,gBAAgB,CAAC,GAAG,CAAC,QAAQ,WAAW,IAAI;oBAC7F,mEAAmE,CACpE,CAAC;YACH,CAAC;YAED,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAChC,UAAU,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC;YACzC,CAAC;iBAAM,IAAI,UAAU,CAAC,aAAa,CAAC,KAAK,WAAW,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CACd,6BAA6B,aAAa,kBAAkB,UAAU,CAAC,aAAa,CAAC,QAAQ,WAAW,IAAI;oBAC3G,mEAAmE,CACpE,CAAC;YACH,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"ElementLoader.js","sourceRoot":"","sources":["../../src/loaders/ElementLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Shared types for the ElementLoader primitive and its backend adapters.
3
+ *
4
+ * Keeping types in their own module breaks the import cycle that would
5
+ * otherwise form between the primitive (which dispatches to adapters) and
6
+ * the adapters (which implement the backend interface).
7
+ */
8
+ import type { ElementMap } from "./ElementLoader.js";
9
+ export type ElementTag = string;
10
+ export type { ElementMap };
11
+ /**
12
+ * Structured reason for why a specific tag failed to register.
13
+ *
14
+ * The primitive prefers adapter-supplied reasons (rich, diagnostic) over the
15
+ * generic `timeout` reason it synthesizes from its own verification pass.
16
+ */
17
+ export type RegistrationFailureReason = {
18
+ kind: "timeout";
19
+ tag: ElementTag;
20
+ timeoutMs: number;
21
+ } | {
22
+ kind: "not-a-constructor";
23
+ tag: ElementTag;
24
+ packageName?: string;
25
+ } | {
26
+ kind: "package-not-in-bundle";
27
+ tag: ElementTag;
28
+ packageName: string;
29
+ availablePackages: string[];
30
+ } | {
31
+ kind: "module-load-failed";
32
+ tag: ElementTag;
33
+ specifier: string;
34
+ cause: string;
35
+ } | {
36
+ kind: "bundle-load-failed";
37
+ tag: ElementTag;
38
+ url: string;
39
+ cause: string;
40
+ } | {
41
+ kind: "define-failed";
42
+ tag: ElementTag;
43
+ cause: string;
44
+ } | {
45
+ kind: "backend-rejected";
46
+ tag: ElementTag;
47
+ cause: string;
48
+ } | {
49
+ kind: "no-element-class";
50
+ tag: ElementTag;
51
+ packageName: string;
52
+ };
53
+ /**
54
+ * Thrown by an adapter when it has structured, per-tag knowledge of which
55
+ * registrations failed and why. The primitive unpacks the `reasons` map
56
+ * and merges it into its own `ElementLoaderError.reasons`.
57
+ *
58
+ * Generic `Error` thrown from an adapter is treated as catastrophic: the
59
+ * primitive assigns a blanket `backend-rejected` reason to every requested
60
+ * tag that is still missing after verification.
61
+ */
62
+ export declare class AdapterFailure extends Error {
63
+ readonly name = "AdapterFailure";
64
+ readonly reasons: Map<ElementTag, RegistrationFailureReason>;
65
+ constructor(reasons: Map<ElementTag, RegistrationFailureReason>);
66
+ }
67
+ /**
68
+ * Context the primitive hands to the adapter for each load.
69
+ *
70
+ * The adapter is free to use `whenDefinedTimeoutMs` for its own internal
71
+ * waits, but the primitive always enforces an independent
72
+ * `customElements.whenDefined` verification after the adapter returns — so
73
+ * an adapter cannot silently under-register tags even if it ignores this
74
+ * context.
75
+ */
76
+ export type BackendContext = {
77
+ doc: Document;
78
+ whenDefinedTimeoutMs: number;
79
+ };
80
+ /**
81
+ * Backend adapter contract.
82
+ *
83
+ * Resolve only if every requested tag was attempted and the adapter
84
+ * believes every tag is registered. On partial failure, throw
85
+ * `AdapterFailure` with a `reasons` map. On catastrophic failure, throw a
86
+ * generic Error.
87
+ */
88
+ export type ElementLoaderBackend = {
89
+ load(elements: ElementMap, context: BackendContext): Promise<void>;
90
+ };
91
+ //# sourceMappingURL=element-loader-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-loader-types.d.ts","sourceRoot":"","sources":["../../src/loaders/element-loader-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,MAAM,yBAAyB,GAClC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,GAAG,EAAE,UAAU,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE;IACA,IAAI,EAAE,uBAAuB,CAAC;IAC9B,GAAG,EAAE,UAAU,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC3B,GACD;IACA,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE,UAAU,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACb,GACD;IACA,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE,UAAU,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACb,GACD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,GAAG,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACxC,SAAkB,IAAI,oBAAoB;IAC1C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;gBAEjD,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,yBAAyB,CAAC;CAO/D;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,QAAQ,CAAC;IACd,oBAAoB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAClC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Shared types for the ElementLoader primitive and its backend adapters.
3
+ *
4
+ * Keeping types in their own module breaks the import cycle that would
5
+ * otherwise form between the primitive (which dispatches to adapters) and
6
+ * the adapters (which implement the backend interface).
7
+ */
8
+ /**
9
+ * Thrown by an adapter when it has structured, per-tag knowledge of which
10
+ * registrations failed and why. The primitive unpacks the `reasons` map
11
+ * and merges it into its own `ElementLoaderError.reasons`.
12
+ *
13
+ * Generic `Error` thrown from an adapter is treated as catastrophic: the
14
+ * primitive assigns a blanket `backend-rejected` reason to every requested
15
+ * tag that is still missing after verification.
16
+ */
17
+ export class AdapterFailure extends Error {
18
+ name = "AdapterFailure";
19
+ reasons;
20
+ constructor(reasons) {
21
+ const tags = [...reasons.keys()];
22
+ super(`Backend adapter failure for ${reasons.size} tag(s): ${tags.join(", ")}`);
23
+ this.reasons = reasons;
24
+ }
25
+ }
26
+ //# sourceMappingURL=element-loader-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-loader-types.js","sourceRoot":"","sources":["../../src/loaders/element-loader-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuCH;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACtB,IAAI,GAAG,gBAAgB,CAAC;IACjC,OAAO,CAA6C;IAE7D,YAAY,OAAmD;QAC9D,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,KAAK,CACJ,+BAA+B,OAAO,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxE,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;CACD"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * ElementLoader primitive — the one place where "these tags are registered
3
+ * with customElements" is decided.
4
+ *
5
+ * Owns the truthful promise contract end-to-end:
6
+ *
7
+ * ensureRegistered(elements, options) resolves iff every requested tag
8
+ * is in `customElements` at the moment of resolution. On partial
9
+ * success it rejects with an `ElementLoaderError` carrying the set of
10
+ * unregistered tags and a per-tag `RegistrationFailureReason` map.
11
+ *
12
+ * The primitive delegates the actual fetch/register work to a backend
13
+ * adapter (IIFE or ESM) but always verifies the outcome via
14
+ * `customElements.whenDefined`. An adapter cannot silently under-register
15
+ * — the primitive will catch it and surface a timeout reason.
16
+ *
17
+ * See packages/players-shared/tests/element-loader-contract.test.ts for
18
+ * the executable specification of every failure mode this primitive is
19
+ * required to catch.
20
+ */
21
+ import type { ElementMap } from "./ElementLoader.js";
22
+ import { type ElementLoaderBackend, type ElementTag, type RegistrationFailureReason } from "./element-loader-types.js";
23
+ import { type EsmBackendConfig } from "./esm-adapter.js";
24
+ import { type IifeBackendConfig } from "./iife-adapter.js";
25
+ export type { BackendContext, ElementLoaderBackend, ElementMap, ElementTag, RegistrationFailureReason, } from "./element-loader-types.js";
26
+ export { AdapterFailure } from "./element-loader-types.js";
27
+ export type { IifeBackendConfig } from "./iife-adapter.js";
28
+ export type { EsmBackendConfig } from "./esm-adapter.js";
29
+ /**
30
+ * Aggregate error thrown by `ensureRegistered` when one or more requested
31
+ * tags were not registered by the time verification timed out.
32
+ */
33
+ export declare class ElementLoaderError extends Error {
34
+ readonly name = "ElementLoaderError";
35
+ readonly unregisteredTags: Set<ElementTag>;
36
+ readonly reasons: Map<ElementTag, RegistrationFailureReason>;
37
+ constructor(message: string, unregisteredTags: Set<ElementTag>, reasons: Map<ElementTag, RegistrationFailureReason>);
38
+ }
39
+ /**
40
+ * Thrown by `assertRegistered` when any requested tag is missing from
41
+ * `customElements`. Carries enough detail for the host to diagnose what
42
+ * pre-registration step was skipped.
43
+ */
44
+ export declare class ElementAssertionError extends Error {
45
+ readonly name = "ElementAssertionError";
46
+ readonly expectedTags: readonly ElementTag[];
47
+ readonly missingTags: readonly ElementTag[];
48
+ readonly currentlyRegisteredTags: readonly ElementTag[];
49
+ constructor(expected: ElementTag[], missing: ElementTag[], currentlyRegistered: ElementTag[]);
50
+ }
51
+ export type BackendOption = IifeBackendConfig | EsmBackendConfig | ElementLoaderBackend;
52
+ export type EnsureRegisteredOptions = {
53
+ backend: BackendOption;
54
+ doc?: Document;
55
+ whenDefinedTimeoutMs?: number;
56
+ /**
57
+ * Outer cumulative deadline for the backend's `load()` call.
58
+ *
59
+ * Closes the "promise never settles" seam for adapters whose underlying
60
+ * fetch can stall indefinitely (e.g. ESM `import()` against a frozen
61
+ * CDN). When the deadline elapses, the primitive synthesizes an
62
+ * `AdapterFailure` with `kind: "timeout"` reasons for every requested
63
+ * tag — surfacing as a normal `ElementLoaderError` to the caller.
64
+ *
65
+ * Defaults to `DEFAULT_IIFE_BUNDLE_RETRY_CONFIG.timeoutMs` so
66
+ * adapter-internal retry windows (IIFE bundle-build polling) fit
67
+ * inside the same overall budget.
68
+ */
69
+ loadTimeoutMs?: number;
70
+ };
71
+ /**
72
+ * Resolve iff every tag in `elements` is registered with `customElements`.
73
+ * Reject with `ElementLoaderError` otherwise.
74
+ *
75
+ * The primitive is the sole authority on registration state:
76
+ * - Empty element map resolves immediately (no backend call).
77
+ * - Already-registered tags resolve immediately (no backend call).
78
+ * - Concurrent identical requests share one backend call.
79
+ * - After the adapter's `load` settles, a post-load verification pass
80
+ * (bounded `customElements.whenDefined`) checks every tag. Any missing
81
+ * tag becomes a rejection.
82
+ */
83
+ export declare function ensureRegistered(elements: ElementMap, options: EnsureRegisteredOptions): Promise<void>;
84
+ /**
85
+ * Synchronously assert that every tag is already in `customElements`.
86
+ * Throws `ElementAssertionError` with diagnostic detail otherwise.
87
+ *
88
+ * Used by hosts that opt into the "preloaded" strategy — they pre-register
89
+ * elements out-of-band and want a loud failure if anything is missing.
90
+ */
91
+ export declare function assertRegistered(tags: ElementTag[]): void;
92
+ //# sourceMappingURL=element-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-loader.d.ts","sourceRoot":"","sources":["../../src/loaders/element-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAGN,KAAK,oBAAoB,EACzB,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEN,KAAK,gBAAgB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEN,KAAK,iBAAiB,EACtB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACX,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,UAAU,EACV,yBAAyB,GACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,SAAkB,IAAI,wBAAwB;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;gBAG5D,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,GAAG,CAAC,UAAU,CAAC,EACjC,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,yBAAyB,CAAC;CAMpD;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,SAAkB,IAAI,2BAA2B;IACjD,QAAQ,CAAC,YAAY,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7C,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,uBAAuB,EAAE,SAAS,UAAU,EAAE,CAAC;gBAGvD,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,EAAE,UAAU,EAAE,EACrB,mBAAmB,EAAE,UAAU,EAAE;CASlC;AAkBD,MAAM,MAAM,aAAa,GACtB,iBAAiB,GACjB,gBAAgB,GAChB,oBAAoB,CAAC;AAExB,MAAM,MAAM,uBAAuB,GAAG;IACrC,OAAO,EAAE,aAAa,CAAC;IACvB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AASF;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACrC,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,uBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoCf;AA2FD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,CAKzD"}