@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.
- package/dist/index.js +4 -0
- package/dist/index.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/index.d.ts +4 -4
- package/dist/pie/index.d.ts.map +1 -1
- package/dist/pie/index.js +7 -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/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/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/ui/use-promise.svelte.ts +109 -0
- package/package.json +6 -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 -116
- package/dist/pie/iife-loader.d.ts.map +0 -1
- package/dist/pie/iife-loader.js +0 -561
- 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
|
|
2
|
+
* Element Loader — element aggregation utilities.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
|
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
|
|
2
|
+
* Element Loader — element aggregation utilities.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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}(
|
|
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
|
-
|
|
51
|
+
existingEncodedVersion: versionMatch[1],
|
|
44
52
|
}
|
|
45
53
|
: { baseName: tagName };
|
|
46
54
|
};
|
|
47
55
|
const normalizeElementTag = (tagName, packageSpec) => {
|
|
48
|
-
const { baseName,
|
|
56
|
+
const { baseName, existingEncodedVersion } = parseTagName(tagName);
|
|
49
57
|
const { version } = parsePackageName(packageSpec);
|
|
50
|
-
if (!version
|
|
58
|
+
if (!version)
|
|
51
59
|
return tagName;
|
|
52
|
-
|
|
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
|
|
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"}
|