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