@pie-players/pie-players-shared 0.3.29 → 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 (197) hide show
  1. package/{src → dist}/components/PieItemPlayer.svelte +156 -88
  2. package/dist/i18n/translations/en/tools.json +1 -1
  3. package/{src → dist}/i18n/use-i18n-standalone.svelte.ts +1 -0
  4. package/{src → dist}/i18n/use-i18n.svelte.ts +1 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +6 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/loader-config.d.ts +25 -0
  10. package/dist/loader-config.d.ts.map +1 -1
  11. package/dist/loader-config.js +5 -0
  12. package/dist/loader-config.js.map +1 -1
  13. package/dist/loaders/ElementLoader.d.ts +6 -34
  14. package/dist/loaders/ElementLoader.d.ts.map +1 -1
  15. package/dist/loaders/ElementLoader.js +21 -9
  16. package/dist/loaders/ElementLoader.js.map +1 -1
  17. package/dist/loaders/element-loader-types.d.ts +91 -0
  18. package/dist/loaders/element-loader-types.d.ts.map +1 -0
  19. package/dist/loaders/element-loader-types.js +26 -0
  20. package/dist/loaders/element-loader-types.js.map +1 -0
  21. package/dist/loaders/element-loader.d.ts +92 -0
  22. package/dist/loaders/element-loader.d.ts.map +1 -0
  23. package/dist/loaders/element-loader.js +391 -0
  24. package/dist/loaders/element-loader.js.map +1 -0
  25. package/dist/loaders/esm-adapter.d.ts +40 -0
  26. package/dist/loaders/esm-adapter.d.ts.map +1 -0
  27. package/dist/loaders/esm-adapter.js +274 -0
  28. package/dist/loaders/esm-adapter.js.map +1 -0
  29. package/dist/loaders/iife-adapter.d.ts +86 -0
  30. package/dist/loaders/iife-adapter.d.ts.map +1 -0
  31. package/dist/loaders/iife-adapter.js +365 -0
  32. package/dist/loaders/iife-adapter.js.map +1 -0
  33. package/dist/loaders/index.d.ts +30 -17
  34. package/dist/loaders/index.d.ts.map +1 -1
  35. package/dist/loaders/index.js +26 -14
  36. package/dist/loaders/index.js.map +1 -1
  37. package/dist/pie/config.d.ts.map +1 -1
  38. package/dist/pie/config.js +12 -5
  39. package/dist/pie/config.js.map +1 -1
  40. package/dist/pie/index.d.ts +6 -4
  41. package/dist/pie/index.d.ts.map +1 -1
  42. package/dist/pie/index.js +8 -2
  43. package/dist/pie/index.js.map +1 -1
  44. package/dist/pie/initialization.d.ts +26 -1
  45. package/dist/pie/initialization.d.ts.map +1 -1
  46. package/dist/pie/initialization.js +72 -15
  47. package/dist/pie/initialization.js.map +1 -1
  48. package/dist/pie/instrumentation-event-map.d.ts.map +1 -1
  49. package/dist/pie/instrumentation-event-map.js +27 -16
  50. package/dist/pie/instrumentation-event-map.js.map +1 -1
  51. package/dist/pie/overrides.d.ts +9 -0
  52. package/dist/pie/overrides.d.ts.map +1 -1
  53. package/dist/pie/overrides.js +36 -0
  54. package/dist/pie/overrides.js.map +1 -1
  55. package/dist/pie/resource-monitor.d.ts +17 -0
  56. package/dist/pie/resource-monitor.d.ts.map +1 -1
  57. package/dist/pie/resource-monitor.js +284 -81
  58. package/dist/pie/resource-monitor.js.map +1 -1
  59. package/dist/pie/stage-tracker.d.ts +51 -0
  60. package/dist/pie/stage-tracker.d.ts.map +1 -0
  61. package/dist/pie/stage-tracker.js +106 -0
  62. package/dist/pie/stage-tracker.js.map +1 -0
  63. package/dist/pie/stages.d.ts +75 -0
  64. package/dist/pie/stages.d.ts.map +1 -0
  65. package/dist/pie/stages.js +58 -0
  66. package/dist/pie/stages.js.map +1 -0
  67. package/dist/pie/updates.d.ts.map +1 -1
  68. package/dist/pie/updates.js +65 -2
  69. package/dist/pie/updates.js.map +1 -1
  70. package/dist/pie/use-resource-monitor.svelte.d.ts.map +1 -1
  71. package/dist/pie/use-resource-monitor.svelte.js +88 -75
  72. package/dist/pie/use-resource-monitor.svelte.js.map +1 -1
  73. package/dist/security/index.d.ts +5 -0
  74. package/dist/security/index.d.ts.map +1 -0
  75. package/dist/security/index.js +5 -0
  76. package/dist/security/index.js.map +1 -0
  77. package/dist/security/sanitize-item-markup.d.ts +46 -0
  78. package/dist/security/sanitize-item-markup.d.ts.map +1 -0
  79. package/dist/security/sanitize-item-markup.js +174 -0
  80. package/dist/security/sanitize-item-markup.js.map +1 -0
  81. package/dist/security/sanitize-svg-icon.d.ts +15 -0
  82. package/dist/security/sanitize-svg-icon.d.ts.map +1 -0
  83. package/dist/security/sanitize-svg-icon.js +89 -0
  84. package/dist/security/sanitize-svg-icon.js.map +1 -0
  85. package/dist/security/validate-style-url.d.ts +28 -0
  86. package/dist/security/validate-style-url.d.ts.map +1 -0
  87. package/dist/security/validate-style-url.js +58 -0
  88. package/dist/security/validate-style-url.js.map +1 -0
  89. package/dist/security/wrap-overwide-images.d.ts +31 -0
  90. package/dist/security/wrap-overwide-images.d.ts.map +1 -0
  91. package/dist/security/wrap-overwide-images.js +92 -0
  92. package/dist/security/wrap-overwide-images.js.map +1 -0
  93. package/dist/server/npm-registry.d.ts +8 -0
  94. package/dist/server/npm-registry.d.ts.map +1 -0
  95. package/dist/server/npm-registry.js +60 -0
  96. package/dist/server/npm-registry.js.map +1 -0
  97. package/dist/types/index.d.ts +10 -0
  98. package/dist/types/index.d.ts.map +1 -1
  99. package/dist/types/index.js.map +1 -1
  100. package/dist/ui/first-focusable.d.ts +21 -0
  101. package/dist/ui/first-focusable.d.ts.map +1 -0
  102. package/dist/ui/first-focusable.js +73 -0
  103. package/dist/ui/first-focusable.js.map +1 -0
  104. package/dist/ui/focus-trap.d.ts.map +1 -1
  105. package/dist/ui/focus-trap.js +2 -13
  106. package/dist/ui/focus-trap.js.map +1 -1
  107. package/dist/ui/use-promise.svelte.ts +109 -0
  108. package/package.json +49 -34
  109. package/dist/i18n/scripts/check-coverage.d.ts +0 -16
  110. package/dist/i18n/scripts/check-coverage.d.ts.map +0 -1
  111. package/dist/i18n/scripts/check-coverage.js +0 -262
  112. package/dist/i18n/scripts/check-coverage.js.map +0 -1
  113. package/dist/i18n/scripts/scan-hardcoded.d.ts +0 -16
  114. package/dist/i18n/scripts/scan-hardcoded.d.ts.map +0 -1
  115. package/dist/i18n/scripts/scan-hardcoded.js +0 -266
  116. package/dist/i18n/scripts/scan-hardcoded.js.map +0 -1
  117. package/dist/i18n/use-i18n-standalone.svelte.d.ts +0 -87
  118. package/dist/i18n/use-i18n-standalone.svelte.d.ts.map +0 -1
  119. package/dist/i18n/use-i18n-standalone.svelte.js +0 -151
  120. package/dist/i18n/use-i18n-standalone.svelte.js.map +0 -1
  121. package/dist/i18n/use-i18n.svelte.d.ts +0 -67
  122. package/dist/i18n/use-i18n.svelte.d.ts.map +0 -1
  123. package/dist/i18n/use-i18n.svelte.js +0 -144
  124. package/dist/i18n/use-i18n.svelte.js.map +0 -1
  125. package/dist/instrumentation/providers/DataDogInstrumentationProvider.d.ts +0 -170
  126. package/dist/instrumentation/providers/DataDogInstrumentationProvider.d.ts.map +0 -1
  127. package/dist/instrumentation/providers/DataDogInstrumentationProvider.js +0 -183
  128. package/dist/instrumentation/providers/DataDogInstrumentationProvider.js.map +0 -1
  129. package/dist/loaders/EsmElementLoader.d.ts +0 -69
  130. package/dist/loaders/EsmElementLoader.d.ts.map +0 -1
  131. package/dist/loaders/EsmElementLoader.js +0 -72
  132. package/dist/loaders/EsmElementLoader.js.map +0 -1
  133. package/dist/loaders/IifeElementLoader.d.ts +0 -61
  134. package/dist/loaders/IifeElementLoader.d.ts.map +0 -1
  135. package/dist/loaders/IifeElementLoader.js +0 -63
  136. package/dist/loaders/IifeElementLoader.js.map +0 -1
  137. package/dist/pie/esm-loader.d.ts +0 -104
  138. package/dist/pie/esm-loader.d.ts.map +0 -1
  139. package/dist/pie/esm-loader.js +0 -358
  140. package/dist/pie/esm-loader.js.map +0 -1
  141. package/dist/pie/iife-loader.d.ts +0 -81
  142. package/dist/pie/iife-loader.d.ts.map +0 -1
  143. package/dist/pie/iife-loader.js +0 -425
  144. package/dist/pie/iife-loader.js.map +0 -1
  145. package/dist/theming/css-variables.d.ts +0 -7
  146. package/dist/theming/css-variables.d.ts.map +0 -1
  147. package/dist/theming/css-variables.js +0 -43
  148. package/dist/theming/css-variables.js.map +0 -1
  149. package/dist/theming/index.d.ts +0 -4
  150. package/dist/theming/index.d.ts.map +0 -1
  151. package/dist/theming/index.js +0 -3
  152. package/dist/theming/index.js.map +0 -1
  153. package/dist/theming/presets.d.ts +0 -7
  154. package/dist/theming/presets.d.ts.map +0 -1
  155. package/dist/theming/presets.js +0 -146
  156. package/dist/theming/presets.js.map +0 -1
  157. package/dist/theming/types.d.ts +0 -5
  158. package/dist/theming/types.d.ts.map +0 -1
  159. package/dist/theming/types.js +0 -2
  160. package/dist/theming/types.js.map +0 -1
  161. package/dist/types/custom-elements.d.ts +0 -158
  162. package/dist/types/custom-elements.d.ts.map +0 -1
  163. package/dist/types/custom-elements.js +0 -8
  164. package/dist/types/custom-elements.js.map +0 -1
  165. package/dist/types/search.d.ts +0 -105
  166. package/dist/types/search.d.ts.map +0 -1
  167. package/dist/types/search.js +0 -12
  168. package/dist/types/search.js.map +0 -1
  169. package/dist/types/transform.d.ts +0 -48
  170. package/dist/types/transform.d.ts.map +0 -1
  171. package/dist/types/transform.js +0 -21
  172. package/dist/types/transform.js.map +0 -1
  173. package/src/i18n/README.md +0 -223
  174. package/src/i18n/index.ts +0 -26
  175. package/src/i18n/loader.ts +0 -156
  176. package/src/i18n/scripts/check-coverage.ts +0 -345
  177. package/src/i18n/scripts/scan-hardcoded.ts +0 -342
  178. package/src/i18n/simple-i18n.ts +0 -236
  179. package/src/i18n/translations/ar/common.json +0 -36
  180. package/src/i18n/translations/ar/toolkit.json +0 -48
  181. package/src/i18n/translations/ar/tools.json +0 -103
  182. package/src/i18n/translations/en/common.json +0 -36
  183. package/src/i18n/translations/en/toolkit.json +0 -48
  184. package/src/i18n/translations/en/tools.json +0 -103
  185. package/src/i18n/translations/es/common.json +0 -36
  186. package/src/i18n/translations/es/toolkit.json +0 -48
  187. package/src/i18n/translations/es/tools.json +0 -103
  188. package/src/i18n/translations/zh/common.json +0 -36
  189. package/src/i18n/translations/zh/toolkit.json +0 -48
  190. package/src/i18n/translations/zh/tools.json +0 -103
  191. package/src/i18n/types.ts +0 -66
  192. /package/{src → dist}/components/PiePreviewLayout.svelte +0 -0
  193. /package/{src → dist}/components/PiePreviewToggle.svelte +0 -0
  194. /package/{src → dist}/components/PieSpinner.svelte +0 -0
  195. /package/{src → dist}/components/ToolSettingsButton.svelte +0 -0
  196. /package/{src → dist}/components/ToolSettingsPanel.svelte +0 -0
  197. /package/{src → dist}/components/index.ts +0 -0
@@ -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"}
@@ -0,0 +1,391 @@
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 { DEFAULT_IIFE_BUNDLE_RETRY_CONFIG } from "../loader-config.js";
22
+ import { AdapterFailure, } from "./element-loader-types.js";
23
+ import { createEsmBackend, } from "./esm-adapter.js";
24
+ import { createIifeBackend, } from "./iife-adapter.js";
25
+ export { AdapterFailure } from "./element-loader-types.js";
26
+ /**
27
+ * Aggregate error thrown by `ensureRegistered` when one or more requested
28
+ * tags were not registered by the time verification timed out.
29
+ */
30
+ export class ElementLoaderError extends Error {
31
+ name = "ElementLoaderError";
32
+ unregisteredTags;
33
+ reasons;
34
+ constructor(message, unregisteredTags, reasons) {
35
+ super(message);
36
+ this.unregisteredTags = unregisteredTags;
37
+ this.reasons = reasons;
38
+ }
39
+ }
40
+ /**
41
+ * Thrown by `assertRegistered` when any requested tag is missing from
42
+ * `customElements`. Carries enough detail for the host to diagnose what
43
+ * pre-registration step was skipped.
44
+ */
45
+ export class ElementAssertionError extends Error {
46
+ name = "ElementAssertionError";
47
+ expectedTags;
48
+ missingTags;
49
+ currentlyRegisteredTags;
50
+ constructor(expected, missing, currentlyRegistered) {
51
+ super(buildAssertionMessage(expected, missing, currentlyRegistered));
52
+ this.expectedTags = expected;
53
+ this.missingTags = missing;
54
+ this.currentlyRegisteredTags = currentlyRegistered;
55
+ }
56
+ }
57
+ function buildAssertionMessage(expected, missing, registered) {
58
+ const expectedStr = expected.join(", ");
59
+ const missingStr = missing.join(", ");
60
+ const registeredStr = registered.length
61
+ ? registered.join(", ")
62
+ : "(none enumerable)";
63
+ return (`ElementLoader.assertRegistered: expected [${expectedStr}], ` +
64
+ `missing [${missingStr}]. customElements contains: [${registeredStr}].`);
65
+ }
66
+ const DEFAULT_WHEN_DEFINED_TIMEOUT_MS = 5000;
67
+ const DEFAULT_LOAD_TIMEOUT_MS = DEFAULT_IIFE_BUNDLE_RETRY_CONFIG.timeoutMs;
68
+ // Module-scoped in-flight cache. Key: backend signature + sorted elements.
69
+ // Keeps concurrent identical requests collapsed to one backend call.
70
+ const inFlightRequests = new Map();
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 async function ensureRegistered(elements, options) {
84
+ if (!elements || Object.keys(elements).length === 0)
85
+ return;
86
+ const tags = Object.keys(elements);
87
+ const timeoutMs = options.whenDefinedTimeoutMs ?? DEFAULT_WHEN_DEFINED_TIMEOUT_MS;
88
+ const loadTimeoutMs = options.loadTimeoutMs ?? DEFAULT_LOAD_TIMEOUT_MS;
89
+ // Fast path: everything already registered. Skip backend and dedup
90
+ // bookkeeping entirely.
91
+ if (allAlreadyRegistered(tags))
92
+ return;
93
+ const dedupKey = buildDedupKey(options.backend, elements);
94
+ const existing = inFlightRequests.get(dedupKey);
95
+ if (existing)
96
+ return existing;
97
+ const backend = resolveBackend(options.backend);
98
+ const doc = resolveDoc(options.doc);
99
+ const promise = runEnsureRegistered(elements, tags, backend, { doc, whenDefinedTimeoutMs: timeoutMs }, timeoutMs, loadTimeoutMs);
100
+ inFlightRequests.set(dedupKey, promise);
101
+ try {
102
+ await promise;
103
+ }
104
+ finally {
105
+ if (inFlightRequests.get(dedupKey) === promise) {
106
+ inFlightRequests.delete(dedupKey);
107
+ }
108
+ }
109
+ }
110
+ async function runEnsureRegistered(elements, tags, backend, context, timeoutMs, loadTimeoutMs) {
111
+ let adapterError;
112
+ try {
113
+ await raceWithLoadTimeout(backend.load(elements, context), tags, loadTimeoutMs);
114
+ }
115
+ catch (err) {
116
+ adapterError = err instanceof Error ? err : new Error(String(err));
117
+ }
118
+ const verification = await Promise.all(tags.map(async (tag) => {
119
+ if (isRegistered(tag))
120
+ return { tag, ok: true };
121
+ try {
122
+ await whenDefinedWithTimeout(tag, timeoutMs);
123
+ return { tag, ok: true };
124
+ }
125
+ catch {
126
+ return { tag, ok: false };
127
+ }
128
+ }));
129
+ const unregistered = new Set();
130
+ const reasons = new Map();
131
+ for (const v of verification) {
132
+ if (v.ok)
133
+ continue;
134
+ unregistered.add(v.tag);
135
+ const adapterReason = extractAdapterReason(adapterError, v.tag);
136
+ reasons.set(v.tag, adapterReason ?? { kind: "timeout", tag: v.tag, timeoutMs });
137
+ }
138
+ if (unregistered.size > 0) {
139
+ throw new ElementLoaderError(`Element registration failed; missing tags: ${[...unregistered].join(", ")}`, unregistered, reasons);
140
+ }
141
+ }
142
+ /**
143
+ * Race the backend's `load()` against a cumulative deadline.
144
+ *
145
+ * On timeout, synthesize an `AdapterFailure` whose `reasons` map carries
146
+ * a `kind: "timeout"` entry per requested tag. The verification pass in
147
+ * `runEnsureRegistered` will then produce a normal `ElementLoaderError`
148
+ * with structured per-tag reasons — same surface shape as any other
149
+ * adapter rejection.
150
+ */
151
+ async function raceWithLoadTimeout(loadPromise, tags, loadTimeoutMs) {
152
+ let timer;
153
+ try {
154
+ await Promise.race([
155
+ loadPromise,
156
+ new Promise((_, reject) => {
157
+ timer = setTimeout(() => {
158
+ const reasons = new Map();
159
+ for (const tag of tags) {
160
+ reasons.set(tag, {
161
+ kind: "timeout",
162
+ tag,
163
+ timeoutMs: loadTimeoutMs,
164
+ });
165
+ }
166
+ reject(new AdapterFailure(reasons));
167
+ }, loadTimeoutMs);
168
+ }),
169
+ ]);
170
+ }
171
+ finally {
172
+ if (timer)
173
+ clearTimeout(timer);
174
+ }
175
+ }
176
+ /**
177
+ * Synchronously assert that every tag is already in `customElements`.
178
+ * Throws `ElementAssertionError` with diagnostic detail otherwise.
179
+ *
180
+ * Used by hosts that opt into the "preloaded" strategy — they pre-register
181
+ * elements out-of-band and want a loud failure if anything is missing.
182
+ */
183
+ export function assertRegistered(tags) {
184
+ if (!tags || tags.length === 0)
185
+ return;
186
+ const missing = tags.filter((tag) => !isRegistered(tag));
187
+ if (missing.length === 0)
188
+ return;
189
+ throw new ElementAssertionError(tags, missing, snapshotRegisteredTags());
190
+ }
191
+ // ─── Internals ───────────────────────────────────────────────────────────────
192
+ function resolveBackend(backend) {
193
+ if (isDirectBackend(backend))
194
+ return backend;
195
+ if ("kind" in backend) {
196
+ if (backend.kind === "iife")
197
+ return createIifeBackend(backend);
198
+ if (backend.kind === "esm")
199
+ return createEsmBackend(backend);
200
+ }
201
+ throw new Error("ElementLoader: invalid backend option");
202
+ }
203
+ function isDirectBackend(backend) {
204
+ return (typeof backend.load === "function" &&
205
+ !("kind" in backend));
206
+ }
207
+ function resolveDoc(doc) {
208
+ if (doc)
209
+ return doc;
210
+ if (typeof document !== "undefined")
211
+ return document;
212
+ throw new Error("ElementLoader: no Document available; pass options.doc explicitly");
213
+ }
214
+ function buildDedupKey(backend, elements) {
215
+ const backendKey = backendKeyOf(backend);
216
+ const entries = Object.entries(elements).sort(([a], [b]) => a.localeCompare(b));
217
+ return `${backendKey}|${JSON.stringify(entries)}`;
218
+ }
219
+ const backendIds = new WeakMap();
220
+ let nextBackendId = 0;
221
+ const functionIds = new WeakMap();
222
+ let nextFunctionId = 0;
223
+ const opaqueObjectIds = new WeakMap();
224
+ let nextOpaqueObjectId = 0;
225
+ function backendKeyOf(backend) {
226
+ if (isDirectBackend(backend)) {
227
+ let id = backendIds.get(backend);
228
+ if (!id) {
229
+ id = `b${++nextBackendId}`;
230
+ backendIds.set(backend, id);
231
+ }
232
+ return `backend#${id}`;
233
+ }
234
+ if ("kind" in backend) {
235
+ if (backend.kind === "iife") {
236
+ return `iife#${fingerprintValue({
237
+ kind: "iife",
238
+ bundleHost: backend.bundleHost,
239
+ bundleType: backend.bundleType ?? "",
240
+ needsControllers: backend.needsControllers ?? true,
241
+ bundleInfo: backend.bundleInfo ?? null,
242
+ debugEnabled: backend.debugEnabled ?? null,
243
+ bundleRetry: backend.bundleRetry ?? null,
244
+ onBundleRetryStatus: backend.onBundleRetryStatus ?? null,
245
+ trackPageActions: backend.trackPageActions ?? false,
246
+ instrumentationProvider: backend.instrumentationProvider ?? null,
247
+ })}`;
248
+ }
249
+ if (backend.kind === "esm") {
250
+ return `esm#${fingerprintValue({
251
+ kind: "esm",
252
+ cdnBaseUrl: backend.cdnBaseUrl,
253
+ moduleResolution: backend.moduleResolution ?? "url",
254
+ view: backend.view ?? "delivery",
255
+ viewConfig: backend.viewConfig ?? null,
256
+ loadControllers: backend.loadControllers ?? true,
257
+ debugEnabled: backend.debugEnabled ?? null,
258
+ })}`;
259
+ }
260
+ }
261
+ return "unknown";
262
+ }
263
+ function fingerprintValue(value) {
264
+ return JSON.stringify(normalizeForFingerprint(value, new Map()));
265
+ }
266
+ function normalizeForFingerprint(value, seen) {
267
+ if (value === null || value === undefined)
268
+ return value;
269
+ const primitiveType = typeof value;
270
+ if (primitiveType === "string" ||
271
+ primitiveType === "number" ||
272
+ primitiveType === "boolean") {
273
+ return value;
274
+ }
275
+ if (primitiveType === "function") {
276
+ return { __functionRef: getFunctionRefId(value) };
277
+ }
278
+ if (primitiveType !== "object") {
279
+ return String(value);
280
+ }
281
+ const objectValue = value;
282
+ const existing = seen.get(objectValue);
283
+ if (existing)
284
+ return { __cycleRef: existing };
285
+ const cycleRefId = `cycle#${seen.size + 1}`;
286
+ seen.set(objectValue, cycleRefId);
287
+ if (Array.isArray(value)) {
288
+ return value.map((entry) => normalizeForFingerprint(entry, seen));
289
+ }
290
+ if (!isPlainObject(value)) {
291
+ return { __objectRef: getOpaqueObjectRefId(objectValue) };
292
+ }
293
+ const normalized = {};
294
+ for (const key of Object.keys(value).sort()) {
295
+ normalized[key] = normalizeForFingerprint(value[key], seen);
296
+ }
297
+ return normalized;
298
+ }
299
+ function isPlainObject(value) {
300
+ if (!value || typeof value !== "object")
301
+ return false;
302
+ const prototype = Object.getPrototypeOf(value);
303
+ return prototype === Object.prototype || prototype === null;
304
+ }
305
+ function getFunctionRefId(fn) {
306
+ let id = functionIds.get(fn);
307
+ if (!id) {
308
+ id = `fn#${++nextFunctionId}`;
309
+ functionIds.set(fn, id);
310
+ }
311
+ return id;
312
+ }
313
+ function getOpaqueObjectRefId(value) {
314
+ let id = opaqueObjectIds.get(value);
315
+ if (!id) {
316
+ id = `obj#${++nextOpaqueObjectId}`;
317
+ opaqueObjectIds.set(value, id);
318
+ }
319
+ return id;
320
+ }
321
+ function allAlreadyRegistered(tags) {
322
+ return tags.every((tag) => isRegistered(tag));
323
+ }
324
+ function isRegistered(tag) {
325
+ if (typeof customElements === "undefined")
326
+ return false;
327
+ return customElements.get(tag) !== undefined;
328
+ }
329
+ async function whenDefinedWithTimeout(tag, timeoutMs) {
330
+ if (typeof customElements === "undefined") {
331
+ throw new Error(`no customElements to await ${tag}`);
332
+ }
333
+ let timer;
334
+ try {
335
+ return await Promise.race([
336
+ customElements.whenDefined(tag).then(() => undefined),
337
+ new Promise((_, reject) => {
338
+ timer = setTimeout(() => reject(new Error(`Timeout waiting for ${tag}`)), timeoutMs);
339
+ }),
340
+ ]);
341
+ }
342
+ finally {
343
+ if (timer)
344
+ clearTimeout(timer);
345
+ }
346
+ }
347
+ function snapshotRegisteredTags() {
348
+ if (typeof customElements === "undefined")
349
+ return [];
350
+ // Standard `CustomElementRegistry` does not expose iteration. Tests install
351
+ // a scripted registry with a `__pieSnapshot` extension to make diagnostic
352
+ // messages assertable. Production falls through to an empty list —
353
+ // still strictly better than today's "missing tags: X" error which leaks
354
+ // no registry state at all.
355
+ const reg = customElements;
356
+ if (typeof reg.__pieSnapshot === "function") {
357
+ try {
358
+ return reg.__pieSnapshot();
359
+ }
360
+ catch {
361
+ return [];
362
+ }
363
+ }
364
+ return [];
365
+ }
366
+ function extractAdapterReason(err, tag) {
367
+ if (!err)
368
+ return undefined;
369
+ if (err instanceof AdapterFailure)
370
+ return err.reasons.get(tag);
371
+ return { kind: "backend-rejected", tag, cause: err.message };
372
+ }
373
+ // ─── Test-only helpers ───────────────────────────────────────────────────────
374
+ /**
375
+ * Internal helpers for test harnesses. Not part of the public runtime API;
376
+ * production code should never reach for these.
377
+ *
378
+ * @internal
379
+ */
380
+ export const __testing = {
381
+ resetDedupState() {
382
+ inFlightRequests.clear();
383
+ },
384
+ inFlightCount() {
385
+ return inFlightRequests.size;
386
+ },
387
+ dedupKeyFor(elements, backend) {
388
+ return buildDedupKey(backend, elements);
389
+ },
390
+ };
391
+ //# sourceMappingURL=element-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-loader.js","sourceRoot":"","sources":["../../src/loaders/element-loader.ts"],"names":[],"mappings":"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"}