@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.
- package/{src → dist}/components/PieItemPlayer.svelte +156 -88
- package/dist/i18n/translations/en/tools.json +1 -1
- package/{src → dist}/i18n/use-i18n-standalone.svelte.ts +1 -0
- package/{src → dist}/i18n/use-i18n.svelte.ts +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/loader-config.d.ts +25 -0
- package/dist/loader-config.d.ts.map +1 -1
- package/dist/loader-config.js +5 -0
- package/dist/loader-config.js.map +1 -1
- package/dist/loaders/ElementLoader.d.ts +6 -34
- package/dist/loaders/ElementLoader.d.ts.map +1 -1
- package/dist/loaders/ElementLoader.js +21 -9
- package/dist/loaders/ElementLoader.js.map +1 -1
- package/dist/loaders/element-loader-types.d.ts +91 -0
- package/dist/loaders/element-loader-types.d.ts.map +1 -0
- package/dist/loaders/element-loader-types.js +26 -0
- package/dist/loaders/element-loader-types.js.map +1 -0
- package/dist/loaders/element-loader.d.ts +92 -0
- package/dist/loaders/element-loader.d.ts.map +1 -0
- package/dist/loaders/element-loader.js +391 -0
- package/dist/loaders/element-loader.js.map +1 -0
- package/dist/loaders/esm-adapter.d.ts +40 -0
- package/dist/loaders/esm-adapter.d.ts.map +1 -0
- package/dist/loaders/esm-adapter.js +274 -0
- package/dist/loaders/esm-adapter.js.map +1 -0
- package/dist/loaders/iife-adapter.d.ts +86 -0
- package/dist/loaders/iife-adapter.d.ts.map +1 -0
- package/dist/loaders/iife-adapter.js +365 -0
- package/dist/loaders/iife-adapter.js.map +1 -0
- package/dist/loaders/index.d.ts +30 -17
- package/dist/loaders/index.d.ts.map +1 -1
- package/dist/loaders/index.js +26 -14
- package/dist/loaders/index.js.map +1 -1
- package/dist/pie/config.d.ts.map +1 -1
- package/dist/pie/config.js +12 -5
- package/dist/pie/config.js.map +1 -1
- package/dist/pie/index.d.ts +6 -4
- package/dist/pie/index.d.ts.map +1 -1
- package/dist/pie/index.js +8 -2
- package/dist/pie/index.js.map +1 -1
- package/dist/pie/initialization.d.ts +26 -1
- package/dist/pie/initialization.d.ts.map +1 -1
- package/dist/pie/initialization.js +72 -15
- package/dist/pie/initialization.js.map +1 -1
- package/dist/pie/instrumentation-event-map.d.ts.map +1 -1
- package/dist/pie/instrumentation-event-map.js +27 -16
- package/dist/pie/instrumentation-event-map.js.map +1 -1
- package/dist/pie/overrides.d.ts +9 -0
- package/dist/pie/overrides.d.ts.map +1 -1
- package/dist/pie/overrides.js +36 -0
- package/dist/pie/overrides.js.map +1 -1
- package/dist/pie/resource-monitor.d.ts +17 -0
- package/dist/pie/resource-monitor.d.ts.map +1 -1
- package/dist/pie/resource-monitor.js +284 -81
- package/dist/pie/resource-monitor.js.map +1 -1
- package/dist/pie/stage-tracker.d.ts +51 -0
- package/dist/pie/stage-tracker.d.ts.map +1 -0
- package/dist/pie/stage-tracker.js +106 -0
- package/dist/pie/stage-tracker.js.map +1 -0
- package/dist/pie/stages.d.ts +75 -0
- package/dist/pie/stages.d.ts.map +1 -0
- package/dist/pie/stages.js +58 -0
- package/dist/pie/stages.js.map +1 -0
- package/dist/pie/updates.d.ts.map +1 -1
- package/dist/pie/updates.js +65 -2
- package/dist/pie/updates.js.map +1 -1
- package/dist/pie/use-resource-monitor.svelte.d.ts.map +1 -1
- package/dist/pie/use-resource-monitor.svelte.js +88 -75
- package/dist/pie/use-resource-monitor.svelte.js.map +1 -1
- package/dist/security/index.d.ts +5 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +5 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/sanitize-item-markup.d.ts +46 -0
- package/dist/security/sanitize-item-markup.d.ts.map +1 -0
- package/dist/security/sanitize-item-markup.js +174 -0
- package/dist/security/sanitize-item-markup.js.map +1 -0
- package/dist/security/sanitize-svg-icon.d.ts +15 -0
- package/dist/security/sanitize-svg-icon.d.ts.map +1 -0
- package/dist/security/sanitize-svg-icon.js +89 -0
- package/dist/security/sanitize-svg-icon.js.map +1 -0
- package/dist/security/validate-style-url.d.ts +28 -0
- package/dist/security/validate-style-url.d.ts.map +1 -0
- package/dist/security/validate-style-url.js +58 -0
- package/dist/security/validate-style-url.js.map +1 -0
- package/dist/security/wrap-overwide-images.d.ts +31 -0
- package/dist/security/wrap-overwide-images.d.ts.map +1 -0
- package/dist/security/wrap-overwide-images.js +92 -0
- package/dist/security/wrap-overwide-images.js.map +1 -0
- package/dist/server/npm-registry.d.ts +8 -0
- package/dist/server/npm-registry.d.ts.map +1 -0
- package/dist/server/npm-registry.js +60 -0
- package/dist/server/npm-registry.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/ui/first-focusable.d.ts +21 -0
- package/dist/ui/first-focusable.d.ts.map +1 -0
- package/dist/ui/first-focusable.js +73 -0
- package/dist/ui/first-focusable.js.map +1 -0
- package/dist/ui/focus-trap.d.ts.map +1 -1
- package/dist/ui/focus-trap.js +2 -13
- package/dist/ui/focus-trap.js.map +1 -1
- package/dist/ui/use-promise.svelte.ts +109 -0
- package/package.json +49 -34
- package/dist/i18n/scripts/check-coverage.d.ts +0 -16
- package/dist/i18n/scripts/check-coverage.d.ts.map +0 -1
- package/dist/i18n/scripts/check-coverage.js +0 -262
- package/dist/i18n/scripts/check-coverage.js.map +0 -1
- package/dist/i18n/scripts/scan-hardcoded.d.ts +0 -16
- package/dist/i18n/scripts/scan-hardcoded.d.ts.map +0 -1
- package/dist/i18n/scripts/scan-hardcoded.js +0 -266
- package/dist/i18n/scripts/scan-hardcoded.js.map +0 -1
- package/dist/i18n/use-i18n-standalone.svelte.d.ts +0 -87
- package/dist/i18n/use-i18n-standalone.svelte.d.ts.map +0 -1
- package/dist/i18n/use-i18n-standalone.svelte.js +0 -151
- package/dist/i18n/use-i18n-standalone.svelte.js.map +0 -1
- package/dist/i18n/use-i18n.svelte.d.ts +0 -67
- package/dist/i18n/use-i18n.svelte.d.ts.map +0 -1
- package/dist/i18n/use-i18n.svelte.js +0 -144
- package/dist/i18n/use-i18n.svelte.js.map +0 -1
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.d.ts +0 -170
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.d.ts.map +0 -1
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.js +0 -183
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.js.map +0 -1
- package/dist/loaders/EsmElementLoader.d.ts +0 -69
- package/dist/loaders/EsmElementLoader.d.ts.map +0 -1
- package/dist/loaders/EsmElementLoader.js +0 -72
- package/dist/loaders/EsmElementLoader.js.map +0 -1
- package/dist/loaders/IifeElementLoader.d.ts +0 -61
- package/dist/loaders/IifeElementLoader.d.ts.map +0 -1
- package/dist/loaders/IifeElementLoader.js +0 -63
- package/dist/loaders/IifeElementLoader.js.map +0 -1
- package/dist/pie/esm-loader.d.ts +0 -104
- package/dist/pie/esm-loader.d.ts.map +0 -1
- package/dist/pie/esm-loader.js +0 -358
- package/dist/pie/esm-loader.js.map +0 -1
- package/dist/pie/iife-loader.d.ts +0 -81
- package/dist/pie/iife-loader.d.ts.map +0 -1
- package/dist/pie/iife-loader.js +0 -425
- package/dist/pie/iife-loader.js.map +0 -1
- package/dist/theming/css-variables.d.ts +0 -7
- package/dist/theming/css-variables.d.ts.map +0 -1
- package/dist/theming/css-variables.js +0 -43
- package/dist/theming/css-variables.js.map +0 -1
- package/dist/theming/index.d.ts +0 -4
- package/dist/theming/index.d.ts.map +0 -1
- package/dist/theming/index.js +0 -3
- package/dist/theming/index.js.map +0 -1
- package/dist/theming/presets.d.ts +0 -7
- package/dist/theming/presets.d.ts.map +0 -1
- package/dist/theming/presets.js +0 -146
- package/dist/theming/presets.js.map +0 -1
- package/dist/theming/types.d.ts +0 -5
- package/dist/theming/types.d.ts.map +0 -1
- package/dist/theming/types.js +0 -2
- package/dist/theming/types.js.map +0 -1
- package/dist/types/custom-elements.d.ts +0 -158
- package/dist/types/custom-elements.d.ts.map +0 -1
- package/dist/types/custom-elements.js +0 -8
- package/dist/types/custom-elements.js.map +0 -1
- package/dist/types/search.d.ts +0 -105
- package/dist/types/search.d.ts.map +0 -1
- package/dist/types/search.js +0 -12
- package/dist/types/search.js.map +0 -1
- package/dist/types/transform.d.ts +0 -48
- package/dist/types/transform.d.ts.map +0 -1
- package/dist/types/transform.js +0 -21
- package/dist/types/transform.js.map +0 -1
- package/src/i18n/README.md +0 -223
- package/src/i18n/index.ts +0 -26
- package/src/i18n/loader.ts +0 -156
- package/src/i18n/scripts/check-coverage.ts +0 -345
- package/src/i18n/scripts/scan-hardcoded.ts +0 -342
- package/src/i18n/simple-i18n.ts +0 -236
- package/src/i18n/translations/ar/common.json +0 -36
- package/src/i18n/translations/ar/toolkit.json +0 -48
- package/src/i18n/translations/ar/tools.json +0 -103
- package/src/i18n/translations/en/common.json +0 -36
- package/src/i18n/translations/en/toolkit.json +0 -48
- package/src/i18n/translations/en/tools.json +0 -103
- package/src/i18n/translations/es/common.json +0 -36
- package/src/i18n/translations/es/toolkit.json +0 -48
- package/src/i18n/translations/es/tools.json +0 -103
- package/src/i18n/translations/zh/common.json +0 -36
- package/src/i18n/translations/zh/toolkit.json +0 -48
- package/src/i18n/translations/zh/tools.json +0 -103
- package/src/i18n/types.ts +0 -66
- /package/{src → dist}/components/PiePreviewLayout.svelte +0 -0
- /package/{src → dist}/components/PiePreviewToggle.svelte +0 -0
- /package/{src → dist}/components/PieSpinner.svelte +0 -0
- /package/{src → dist}/components/ToolSettingsButton.svelte +0 -0
- /package/{src → dist}/components/ToolSettingsPanel.svelte +0 -0
- /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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"}
|