@pie-players/pie-players-shared 0.3.48 → 0.3.50
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/README.md +3 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/loaders/esm-adapter.d.ts +2 -0
- package/dist/loaders/esm-adapter.js +12 -2
- package/dist/loaders/esm-adapter.js.map +1 -1
- package/dist/loaders/index.d.ts +1 -1
- package/dist/loaders/index.js +1 -1
- package/dist/loaders/index.js.map +1 -1
- package/dist/pie/initialization.js +2 -1
- package/dist/pie/initialization.js.map +1 -1
- package/dist/pie/item-session-contract.js +15 -1
- package/dist/pie/item-session-contract.js.map +1 -1
- package/dist/pie/updates.js +9 -7
- package/dist/pie/updates.js.map +1 -1
- package/dist/security/index.d.ts +3 -2
- package/dist/security/index.js +3 -2
- package/dist/security/index.js.map +1 -1
- package/dist/security/wrap-model-rich-content.d.ts +1 -0
- package/dist/security/wrap-model-rich-content.js +41 -0
- package/dist/security/wrap-model-rich-content.js.map +1 -0
- package/dist/security/wrap-overwide-images.d.ts +30 -4
- package/dist/security/wrap-overwide-images.js +55 -30
- package/dist/security/wrap-overwide-images.js.map +1 -1
- package/dist/security/wrap-overwide-tables.d.ts +27 -3
- package/dist/security/wrap-overwide-tables.js +52 -29
- package/dist/security/wrap-overwide-tables.js.map +1 -1
- package/dist/types/index.d.ts +15 -3
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,9 +27,9 @@ Supported subpaths are declared in `package.json`:
|
|
|
27
27
|
|
|
28
28
|
## Browser ESM Element Contract
|
|
29
29
|
|
|
30
|
-
The canonical producer-side contract lives
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
The canonical producer-side contract lives with the `pie-elements-ng` package
|
|
31
|
+
contract. The loader assumptions here must stay aligned with that producer
|
|
32
|
+
surface.
|
|
33
33
|
|
|
34
34
|
The ESM element loader consumes static `@pie-element/*` browser entries such as
|
|
35
35
|
`dist/browser/delivery/index.js`; it does not transform element packages through
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export * from "./security/index.js";
|
|
|
6
6
|
export * from "./loaders/index.js";
|
|
7
7
|
export * from "./object/index.js";
|
|
8
8
|
export * from "./pie/index.js";
|
|
9
|
-
export type { AssessmentEntity, AssessmentItemRef, AssessmentSection, ConfigEntity, Env, ItemConfig, ItemEntity, OutcomeResponse, PassageEntity, PieController, PieModel, QuestionEntity, RubricBlock, TestPart, } from "./types/index.js";
|
|
9
|
+
export type { AssessmentEntity, AssessmentItemRef, AssessmentSection, AdvancedItemConfig, ConfigEntity, ConfigResource, Env, ItemConfig, ItemEntity, ItemSession, OutcomeResponse, PassageEntity, PieController, PieContent, PieDefaultModel, PieItemElement, PieModel, QuestionEntity, RubricBlock, TestPart, } from "./types/index.js";
|
|
10
10
|
export { editorPostFix } from "./types/index.js";
|
|
11
11
|
export * from "./ui/focus-trap.js";
|
|
12
12
|
export * from "./ui/first-focusable.js";
|
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;
|
|
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;AAuB/B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC","sourcesContent":["export * from \"./config/profile.js\";\nexport * from \"./instrumentation/index.js\";\nexport * from \"./loader-config.js\";\nexport * from \"./player-strategy.js\";\nexport * from \"./security/index.js\";\nexport * from \"./loaders/index.js\";\nexport * from \"./object/index.js\";\n// Barrel export for PIE runtime utilities\nexport * from \"./pie/index.js\";\nexport type {\n\tAssessmentEntity,\n\tAssessmentItemRef,\n\tAssessmentSection,\n\tAdvancedItemConfig,\n\tConfigEntity,\n\tConfigResource,\n\tEnv,\n\tItemConfig,\n\tItemEntity,\n\tItemSession,\n\tOutcomeResponse,\n\tPassageEntity,\n\tPieController,\n\tPieContent,\n\tPieDefaultModel,\n\tPieItemElement,\n\tPieModel,\n\tQuestionEntity,\n\tRubricBlock,\n\tTestPart,\n} from \"./types/index.js\";\nexport { editorPostFix } from \"./types/index.js\";\nexport * from \"./ui/focus-trap.js\";\nexport * from \"./ui/first-focusable.js\";\nexport * from \"./ui/debug-panel-persistence.js\";\nexport * from \"./ui/safe-storage.js\";\n"]}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* call `customElements.define`.
|
|
14
14
|
*/
|
|
15
15
|
import type { InstrumentationProvider } from "../instrumentation/types.js";
|
|
16
|
+
import type { ElementMap } from "./ElementLoader.js";
|
|
16
17
|
import { type ElementLoaderBackend } from "./element-loader-types.js";
|
|
17
18
|
/** View configuration: how a PIE package's subpath maps to a tag suffix. */
|
|
18
19
|
export type ViewConfig = {
|
|
@@ -54,3 +55,4 @@ export type EsmBackendConfig = {
|
|
|
54
55
|
};
|
|
55
56
|
export type EsmBackend = ElementLoaderBackend & {};
|
|
56
57
|
export declare function createEsmBackend(config: EsmBackendConfig): EsmBackend;
|
|
58
|
+
export declare function mapEsmViewElements(elements: ElementMap, view?: string, viewConfig?: ViewConfig): ElementMap;
|
|
@@ -29,7 +29,7 @@ export function createEsmBackend(config) {
|
|
|
29
29
|
const moduleResolution = config.moduleResolution ?? "url";
|
|
30
30
|
const view = config.view ?? "delivery";
|
|
31
31
|
const loadControllers = config.loadControllers ?? true;
|
|
32
|
-
const viewConfig = config.viewConfig
|
|
32
|
+
const viewConfig = resolveEsmViewConfig(view, config.viewConfig);
|
|
33
33
|
const injectedPackageVersions = new Set();
|
|
34
34
|
const importMappedPackageVersions = new Map();
|
|
35
35
|
let sharedDependencyVersions = {};
|
|
@@ -103,7 +103,7 @@ export function createEsmBackend(config) {
|
|
|
103
103
|
const packageName = extractPackageName(packageVersion);
|
|
104
104
|
let actualTag;
|
|
105
105
|
try {
|
|
106
|
-
actualTag = validateCustomElementTag(
|
|
106
|
+
actualTag = validateCustomElementTag(tag, `element tag for ${packageName}`);
|
|
107
107
|
}
|
|
108
108
|
catch (err) {
|
|
109
109
|
reasons.set(tag, {
|
|
@@ -252,6 +252,13 @@ export function createEsmBackend(config) {
|
|
|
252
252
|
};
|
|
253
253
|
}
|
|
254
254
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
255
|
+
export function mapEsmViewElements(elements, view = "delivery", viewConfig) {
|
|
256
|
+
const resolvedViewConfig = resolveEsmViewConfig(view, viewConfig);
|
|
257
|
+
return Object.fromEntries(Object.entries(elements).map(([tag, packageVersion]) => [
|
|
258
|
+
`${tag}${resolvedViewConfig.tagSuffix}`,
|
|
259
|
+
packageVersion,
|
|
260
|
+
]));
|
|
261
|
+
}
|
|
255
262
|
function defaultImporter(specifier) {
|
|
256
263
|
// @vite-ignore — dynamic import resolved at runtime.
|
|
257
264
|
return import(/* @vite-ignore */ specifier);
|
|
@@ -330,6 +337,9 @@ function toRawEsmShBaseUrl(cdnBaseUrl) {
|
|
|
330
337
|
}
|
|
331
338
|
return "https://raw.esm.sh";
|
|
332
339
|
}
|
|
340
|
+
function resolveEsmViewConfig(view, viewConfig) {
|
|
341
|
+
return viewConfig ?? BUILT_IN_VIEWS[view] ?? BUILT_IN_VIEWS.delivery;
|
|
342
|
+
}
|
|
333
343
|
function assertBrowserEsmExports(metadata, packageVersion, viewConfig, loadControllers, viewName) {
|
|
334
344
|
if (!metadata?.exports)
|
|
335
345
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esm-adapter.js","sourceRoot":"","sources":["../../src/loaders/esm-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ESM backend adapter for the ElementLoader primitive.\n *\n * Loads PIE elements via dynamic `import()` from static browser ESM files on a\n * CDN, optionally resolving bare specifiers through an import map injected into\n * the host document. On any per-tag failure (module load, non-constructor\n * element class, define failure), throws `AdapterFailure` with a structured\n * `reasons` map.\n *\n * Like the IIFE adapter, this module does not gate its own promise on\n * `customElements.whenDefined`; the primitive performs that verification\n * uniformly. Here the adapter's job is narrowly to fetch, extract, and\n * call `customElements.define`.\n */\n\nimport { defineCustomElementSafely } from \"../pie/custom-element-define.js\";\nimport type { InstrumentationProvider } from \"../instrumentation/types.js\";\nimport { isInstrumentationProvider } from \"../instrumentation/provider-guards.js\";\nimport { pieRegistry } from \"../pie/registry.js\";\nimport { validateCustomElementTag } from \"../pie/tag-names.js\";\nimport { isCustomElementConstructor, Status } from \"../pie/types.js\";\nimport type { ElementMap } from \"./ElementLoader.js\";\nimport {\n\tAdapterFailure,\n\ttype BackendContext,\n\ttype ElementLoaderBackend,\n\ttype ElementTag,\n\ttype RegistrationFailureReason,\n} from \"./element-loader-types.js\";\n\n/** View configuration: how a PIE package's subpath maps to a tag suffix. */\nexport type ViewConfig = {\n\tsubpath: string;\n\ttagSuffix: string;\n\tfallback?: string;\n};\n\nexport const BUILT_IN_VIEWS: Record<string, ViewConfig> = {\n\tdelivery: { subpath: \"\", tagSuffix: \"\" },\n\tauthor: { subpath: \"/author\", tagSuffix: \"-config\", fallback: \"delivery\" },\n\tprint: { subpath: \"/print\", tagSuffix: \"-print\", fallback: \"delivery\" },\n};\n\nexport type BuiltInEsmCdnProviderName = \"jsdelivr\" | \"esm.sh\";\nexport type EsmCdnProviderName = BuiltInEsmCdnProviderName | (string & {});\n\nexport type EsmCdnProvider = {\n\tname: EsmCdnProviderName;\n\tpackageJsonUrl(packageVersion: string): string;\n\tbrowserViewUrl(packageVersion: string, view: string): string;\n\tbrowserControllerUrl(packageVersion: string): string;\n\tsharedDependencyUrl(\n\t\tdependencyName: string,\n\t\tversion: string,\n\t\tsubpath?: string,\n\t): string;\n};\n\nexport type EsmCdnProviderOption = EsmCdnProviderName | EsmCdnProvider;\n\nexport type EsmBackendConfig = {\n\tkind: \"esm\";\n\t/** Base URL for the ESM CDN (e.g., \"https://esm.sh\"). */\n\tcdnBaseUrl: string;\n\t/** CDN URL strategy. Defaults to jsDelivr, or is inferred from cdnBaseUrl when possible. */\n\tcdnProvider?: EsmCdnProviderOption;\n\t/** `\"url\"` loads via fully-qualified URLs; `\"import-map\"` uses bare specifiers. */\n\tmoduleResolution?: \"url\" | \"import-map\";\n\t/** View to load (`delivery`, `author`, `print`, or a custom name). */\n\tview?: string;\n\t/** Custom view configuration (overrides built-ins). */\n\tviewConfig?: ViewConfig;\n\t/** Whether to also load controller modules. */\n\tloadControllers?: boolean;\n\t/** Debug flag hook. */\n\tdebugEnabled?: () => boolean;\n\t/** Whether ESM dependency conflict/failure events should be instrumented. */\n\ttrackPageActions?: boolean;\n\t/** Instrumentation provider for ESM dependency conflict/failure events. */\n\tinstrumentationProvider?: InstrumentationProvider;\n};\n\ntype PackageMetadata = {\n\texports?: Record<string, unknown>;\n\tdependencies?: Record<string, string>;\n\toptionalDependencies?: Record<string, string>;\n\tpeerDependencies?: Record<string, string>;\n\tpie?: {\n\t\tbrowserSharedDependencies?: Record<string, string>;\n\t};\n};\n\n/** @internal */\nexport type EsmModuleImporter = (specifier: string) => Promise<unknown>;\n/** @internal */\nexport type EsmImportMapObserver = (json: string, doc: Document) => void;\n/** @internal */\nexport type EsmPackageMetadataLoader = (\n\tpackageVersion: string,\n\tpackageJsonUrl: string,\n) => Promise<PackageMetadata | null>;\n\n/**\n * Test-only seam exposed via `EsmBackend.__seams`. Lets contract tests\n * inject scripted import behaviour and observe import-map injection\n * without going through the network or the document. Not part of the\n * runtime API; production code must not touch this field.\n *\n * @internal\n */\nexport type EsmBackendTestSeams = {\n\treplaceImporter(fn: EsmModuleImporter): void;\n\tobserveImportMapInjection(cb: EsmImportMapObserver): void;\n\treplacePackageMetadataLoader(fn: EsmPackageMetadataLoader): void;\n\trestore(): void;\n};\n\nexport type EsmBackend = ElementLoaderBackend & {\n\t/** @internal Test-only seam — see {@link EsmBackendTestSeams}. */\n\treadonly __seams: EsmBackendTestSeams;\n};\n\nexport function createEsmBackend(config: EsmBackendConfig): EsmBackend {\n\tconst cdnBaseUrl = config.cdnBaseUrl.replace(/\\/+$/, \"\");\n\tconst cdnProvider = resolveCdnProvider(config.cdnProvider, cdnBaseUrl);\n\tconst moduleResolution = config.moduleResolution ?? \"url\";\n\tconst view = config.view ?? \"delivery\";\n\tconst loadControllers = config.loadControllers ?? true;\n\tconst viewConfig =\n\t\tconfig.viewConfig ?? BUILT_IN_VIEWS[view] ?? BUILT_IN_VIEWS.delivery;\n\n\tconst injectedPackageVersions = new Set<string>();\n\tconst importMappedPackageVersions = new Map<string, string>();\n\tlet sharedDependencyVersions: Record<string, string> = {};\n\tlet importer: EsmModuleImporter = defaultImporter;\n\tlet packageMetadataLoader: EsmPackageMetadataLoader =\n\t\tdefaultPackageMetadataLoader;\n\tlet importMapObserver: EsmImportMapObserver | undefined;\n\n\tconst __seams: EsmBackendTestSeams = {\n\t\treplaceImporter(fn) {\n\t\t\timporter = fn;\n\t\t},\n\t\tobserveImportMapInjection(cb) {\n\t\t\timportMapObserver = cb;\n\t\t},\n\t\treplacePackageMetadataLoader(fn) {\n\t\t\tpackageMetadataLoader = fn;\n\t\t},\n\t\trestore() {\n\t\t\timporter = defaultImporter;\n\t\t\tpackageMetadataLoader = defaultPackageMetadataLoader;\n\t\t\timportMapObserver = undefined;\n\t\t\tinjectedPackageVersions.clear();\n\t\t\timportMappedPackageVersions.clear();\n\t\t\tsharedDependencyVersions = {};\n\t\t},\n\t};\n\n\tasync function load(\n\t\telements: ElementMap,\n\t\tcontext: BackendContext,\n\t): Promise<void> {\n\t\tif (!elements || Object.keys(elements).length === 0) return;\n\t\tif (moduleResolution === \"import-map\") {\n\t\t\tassertImportMapSupported();\n\t\t}\n\n\t\tconst newEntries: ElementMap = {};\n\t\tfor (const [tag, pkg] of Object.entries(elements)) {\n\t\t\tconst packageName = extractPackageName(pkg);\n\t\t\tif (moduleResolution === \"import-map\") {\n\t\t\t\tconst existingVersion = importMappedPackageVersions.get(packageName);\n\t\t\t\tif (existingVersion && existingVersion !== pkg) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Conflicting browser ESM package version for ${packageName}: ${existingVersion} is already mapped, but ${pkg} was requested`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!injectedPackageVersions.has(pkg)) {\n\t\t\t\tnewEntries[tag] = pkg;\n\t\t\t}\n\t\t}\n\t\tif (Object.keys(newEntries).length > 0) {\n\t\t\tlet importMapResult: BrowserImportMapBuildResult;\n\t\t\ttry {\n\t\t\t\timportMapResult = await buildImportMapJson(\n\t\t\t\t\tnewEntries,\n\t\t\t\t\tviewConfig,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t\tloadControllers,\n\t\t\t\t\tmoduleResolution === \"import-map\",\n\t\t\t\t\tpackageMetadataLoader,\n\t\t\t\t\tsharedDependencyVersions,\n\t\t\t\t\treportSharedDependencyConflict,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\treportSharedDependencyError(err);\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tconst json = importMapResult.json;\n\t\t\tif (json) {\n\t\t\t\tassertImportMapSupported();\n\t\t\t\tinjectImportMap(json, context.doc);\n\t\t\t\timportMapObserver?.(json, context.doc);\n\t\t\t}\n\t\t\tsharedDependencyVersions = importMapResult.sharedDependencyVersions;\n\t\t\tfor (const pkg of Object.values(newEntries)) {\n\t\t\t\tinjectedPackageVersions.add(pkg);\n\t\t\t\tif (moduleResolution === \"import-map\") {\n\t\t\t\t\timportMappedPackageVersions.set(extractPackageName(pkg), pkg);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\t\tconst registry = pieRegistry();\n\n\t\tawait Promise.all(\n\t\t\tObject.entries(elements).map(async ([tag, packageVersion]) => {\n\t\t\t\tconst packageName = extractPackageName(packageVersion);\n\t\t\t\tlet actualTag: string;\n\t\t\t\ttry {\n\t\t\t\t\tactualTag = validateCustomElementTag(\n\t\t\t\t\t\t`${tag}${viewConfig.tagSuffix}`,\n\t\t\t\t\t\t`element tag for ${packageName}`,\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"define-failed\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst specifier = resolveElementSpecifier(\n\t\t\t\t\tpackageName,\n\t\t\t\t\tpackageVersion,\n\t\t\t\t\tviewConfig,\n\t\t\t\t\tmoduleResolution,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t\tview,\n\t\t\t\t);\n\n\t\t\t\tlet module: any;\n\t\t\t\ttry {\n\t\t\t\t\tmodule = await importer(specifier);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (viewConfig.fallback) {\n\t\t\t\t\t\tconst fallbackConfig =\n\t\t\t\t\t\t\tBUILT_IN_VIEWS[viewConfig.fallback] ?? BUILT_IN_VIEWS.delivery;\n\t\t\t\t\t\tconst fallbackSpecifier = resolveElementSpecifier(\n\t\t\t\t\t\t\tpackageName,\n\t\t\t\t\t\t\tpackageVersion,\n\t\t\t\t\t\t\tfallbackConfig,\n\t\t\t\t\t\t\tmoduleResolution,\n\t\t\t\t\t\t\tcdnProvider,\n\t\t\t\t\t\t\tviewConfig.fallback,\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tmodule = await importer(fallbackSpecifier);\n\t\t\t\t\t\t} catch (fallbackErr) {\n\t\t\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\t\t\tkind: \"module-load-failed\",\n\t\t\t\t\t\t\t\ttag,\n\t\t\t\t\t\t\t\tspecifier: fallbackSpecifier,\n\t\t\t\t\t\t\t\tcause:\n\t\t\t\t\t\t\t\t\tfallbackErr instanceof Error\n\t\t\t\t\t\t\t\t\t\t? fallbackErr.message\n\t\t\t\t\t\t\t\t\t\t: String(fallbackErr),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\t\tkind: \"module-load-failed\",\n\t\t\t\t\t\t\ttag,\n\t\t\t\t\t\t\tspecifier,\n\t\t\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst ElementClass = pickElementClass(module, view);\n\t\t\t\tif (!ElementClass) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"no-element-class\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tpackageName,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!isCustomElementConstructor(ElementClass)) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"not-a-constructor\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tpackageName,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tdefineCustomElementSafely(\n\t\t\t\t\t\tactualTag,\n\t\t\t\t\t\tclass extends ElementClass {},\n\t\t\t\t\t\t`element tag for ${packageName}`,\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"define-failed\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet controller: any = null;\n\t\t\t\tif (loadControllers) {\n\t\t\t\t\tconst controllerSpecifier = resolveControllerSpecifier(\n\t\t\t\t\t\tpackageName,\n\t\t\t\t\t\tpackageVersion,\n\t\t\t\t\t\tmoduleResolution,\n\t\t\t\t\t\tcdnProvider,\n\t\t\t\t\t);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst controllerModule: any = await importer(controllerSpecifier);\n\t\t\t\t\t\tcontroller = controllerModule?.default ?? controllerModule;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Controllers are best-effort; element registration is what the\n\t\t\t\t\t\t// primitive verifies.\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tregistry[actualTag] = {\n\t\t\t\t\tpackage: packageVersion,\n\t\t\t\t\tstatus: Status.loaded,\n\t\t\t\t\ttagName: actualTag,\n\t\t\t\t\telement: ElementClass,\n\t\t\t\t\tcontroller,\n\t\t\t\t\tconfig: null,\n\t\t\t\t\tbundleType: \"esm\" as unknown as import(\"../pie/types.js\").BundleType,\n\t\t\t\t};\n\t\t\t}),\n\t\t);\n\n\t\tif (reasons.size > 0) {\n\t\t\tthrow new AdapterFailure(reasons);\n\t\t}\n\t}\n\n\tfunction getInstrumentationProvider(): InstrumentationProvider | undefined {\n\t\tif (!config.trackPageActions) return undefined;\n\t\tconst provider = config.instrumentationProvider;\n\t\tif (!isInstrumentationProvider(provider)) return undefined;\n\t\tif (!provider.isReady()) return undefined;\n\t\treturn provider;\n\t}\n\n\tfunction reportSharedDependencyConflict(\n\t\tattributes: Record<string, unknown>,\n\t): void {\n\t\tif (typeof console !== \"undefined\" && console.warn) {\n\t\t\tconsole.warn(\n\t\t\t\t`[pie-esm] Shared dependency version conflict resolved for ${String(attributes.dependencyName)}`,\n\t\t\t\tattributes,\n\t\t\t);\n\t\t}\n\t\tconst provider = getInstrumentationProvider();\n\t\tif (!provider) return;\n\t\ttry {\n\t\t\tprovider.trackEvent(\"pie-esm-shared-dependency-conflict\", attributes);\n\t\t} catch {\n\t\t\t// Swallow: instrumentation must never break loading.\n\t\t}\n\t}\n\n\tfunction reportSharedDependencyError(error: unknown): void {\n\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\tif (typeof console !== \"undefined\" && console.error) {\n\t\t\tconsole.error(\"[pie-esm] Shared dependency resolution failed\", err);\n\t\t}\n\t\tconst provider = getInstrumentationProvider();\n\t\tif (!provider) return;\n\t\ttry {\n\t\t\tprovider.trackError(err, {\n\t\t\t\tcomponent: \"esm-adapter\",\n\t\t\t\terrorType: \"EsmSharedDependencyError\",\n\t\t\t});\n\t\t} catch {\n\t\t\t// Swallow: instrumentation must never break loading.\n\t\t}\n\t}\n\n\treturn {\n\t\tload,\n\t\tget __seams() {\n\t\t\treturn __seams;\n\t\t},\n\t};\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction defaultImporter(specifier: string): Promise<unknown> {\n\t// @vite-ignore — dynamic import resolved at runtime.\n\treturn import(/* @vite-ignore */ specifier);\n}\n\nasync function defaultPackageMetadataLoader(\n\tpackageVersion: string,\n\tpackageJsonUrl: string,\n): Promise<PackageMetadata | null> {\n\tconst browserFetch =\n\t\ttypeof window !== \"undefined\" &&\n\t\ttypeof (window as Window & { fetch?: typeof fetch }).fetch === \"function\"\n\t\t\t? (window as Window & { fetch: typeof fetch }).fetch.bind(window)\n\t\t\t: undefined;\n\tif (!browserFetch) {\n\t\treturn null;\n\t}\n\n\tconst response = await browserFetch(packageJsonUrl);\n\tif (!response.ok) {\n\t\treturn null;\n\t}\n\treturn (await response.json()) as PackageMetadata;\n}\n\nfunction resolveCdnProvider(\n\tprovider: EsmCdnProviderOption | undefined,\n\tcdnBaseUrl: string,\n): EsmCdnProvider {\n\tif (isEsmCdnProvider(provider)) return provider;\n\tconst resolvedProviderName =\n\t\tprovider ?? (cdnBaseUrl.includes(\"esm.sh\") ? \"esm.sh\" : \"jsdelivr\");\n\tif (resolvedProviderName === \"esm.sh\") {\n\t\treturn createEsmShProvider(cdnBaseUrl);\n\t}\n\treturn createJsDelivrProvider(cdnBaseUrl, resolvedProviderName);\n}\n\nfunction isEsmCdnProvider(value: unknown): value is EsmCdnProvider {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst candidate = value as Partial<Record<keyof EsmCdnProvider, unknown>>;\n\treturn (\n\t\ttypeof candidate.name === \"string\" &&\n\t\ttypeof candidate.packageJsonUrl === \"function\" &&\n\t\ttypeof candidate.browserViewUrl === \"function\" &&\n\t\ttypeof candidate.browserControllerUrl === \"function\" &&\n\t\ttypeof candidate.sharedDependencyUrl === \"function\"\n\t);\n}\n\nfunction createJsDelivrProvider(\n\tcdnBaseUrl: string,\n\tname: EsmCdnProviderName = \"jsdelivr\",\n): EsmCdnProvider {\n\treturn {\n\t\tname,\n\t\tpackageJsonUrl: (packageVersion) =>\n\t\t\t`${cdnBaseUrl}/${packageVersion}/package.json`,\n\t\tbrowserViewUrl: (packageVersion, view) =>\n\t\t\t`${cdnBaseUrl}/${packageVersion}/dist/browser/${view}/index.js`,\n\t\tbrowserControllerUrl: (packageVersion) =>\n\t\t\t`${cdnBaseUrl}/${packageVersion}/dist/browser/controller/index.js`,\n\t\tsharedDependencyUrl: (dependencyName, version, subpath) => {\n\t\t\tconst suffix = subpath ? `/${subpath}/+esm` : \"/+esm\";\n\t\t\treturn `${cdnBaseUrl}/${dependencyName}@${version}${suffix}`;\n\t\t},\n\t};\n}\n\nfunction createEsmShProvider(cdnBaseUrl: string): EsmCdnProvider {\n\tconst esmBaseUrl = cdnBaseUrl.replace(/\\/+$/, \"\");\n\tconst rawBaseUrl = toRawEsmShBaseUrl(esmBaseUrl);\n\treturn {\n\t\tname: \"esm.sh\",\n\t\tpackageJsonUrl: (packageVersion) =>\n\t\t\t`${rawBaseUrl}/${packageVersion}/package.json`,\n\t\tbrowserViewUrl: (packageVersion, view) =>\n\t\t\t`${rawBaseUrl}/${packageVersion}/dist/browser/${view}/index.js`,\n\t\tbrowserControllerUrl: (packageVersion) =>\n\t\t\t`${rawBaseUrl}/${packageVersion}/dist/browser/controller/index.js`,\n\t\tsharedDependencyUrl: (dependencyName, version, subpath) => {\n\t\t\tconst suffix = subpath ? `/${subpath}` : \"\";\n\t\t\treturn `${esmBaseUrl}/${dependencyName}@${version}${suffix}`;\n\t\t},\n\t};\n}\n\nfunction toRawEsmShBaseUrl(cdnBaseUrl: string): string {\n\ttry {\n\t\tconst url = new URL(cdnBaseUrl);\n\t\tif (url.hostname === \"raw.esm.sh\")\n\t\t\treturn url.toString().replace(/\\/+$/, \"\");\n\t\tif (url.hostname === \"esm.sh\") {\n\t\t\turl.hostname = \"raw.esm.sh\";\n\t\t\treturn url.toString().replace(/\\/+$/, \"\");\n\t\t}\n\t} catch {\n\t\t// Fall through to the public raw endpoint for non-URL test fixtures.\n\t}\n\treturn \"https://raw.esm.sh\";\n}\n\nfunction assertBrowserEsmExports(\n\tmetadata: PackageMetadata | null,\n\tpackageVersion: string,\n\tviewConfig: ViewConfig,\n\tloadControllers: boolean,\n\tviewName: string,\n): void {\n\tif (!metadata?.exports) return;\n\n\tconst requiredExports = new Set<string>([\n\t\t`./browser/${browserViewName(viewConfig, viewName)}`,\n\t]);\n\tif (viewConfig.fallback) {\n\t\tconst fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];\n\t\tif (fallbackConfig) {\n\t\t\trequiredExports.add(\n\t\t\t\t`./browser/${browserViewName(fallbackConfig, viewConfig.fallback)}`,\n\t\t\t);\n\t\t}\n\t}\n\tif (loadControllers) {\n\t\trequiredExports.add(\"./browser/controller\");\n\t}\n\n\tfor (const exportKey of requiredExports) {\n\t\tif (!(exportKey in metadata.exports)) {\n\t\t\tthrow new Error(\n\t\t\t\t`${packageVersion} does not publish browser ESM export ${exportKey}; use IIFE/preloaded mode or publish browser ESM artifacts first`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction extractPackageName(packageVersion: string): string {\n\tconst parts = packageVersion.split(\"@\");\n\treturn parts.length >= 3 ? `@${parts[1]}` : parts[0];\n}\n\nfunction cleanViewSubpath(subpath: string): string | null {\n\tconst cleanSubpath = subpath.replace(/^\\/+|\\/+$/g, \"\");\n\treturn cleanSubpath.length > 0 ? cleanSubpath : null;\n}\n\nfunction browserViewName(\n\tviewConfig: ViewConfig,\n\tviewName = \"delivery\",\n): string {\n\tconst subpathView = cleanViewSubpath(viewConfig.subpath);\n\treturn subpathView ?? viewName;\n}\n\nfunction resolveBrowserViewUrl(\n\tpackageVersion: string,\n\tviewConfig: ViewConfig,\n\tcdnProvider: EsmCdnProvider,\n\tviewName = \"delivery\",\n): string {\n\tconst view = browserViewName(viewConfig, viewName);\n\treturn cdnProvider.browserViewUrl(packageVersion, view);\n}\n\nfunction resolveBrowserControllerUrl(\n\tpackageVersion: string,\n\tcdnProvider: EsmCdnProvider,\n): string {\n\treturn cdnProvider.browserControllerUrl(packageVersion);\n}\n\nfunction resolveElementSpecifier(\n\tpackageName: string,\n\tpackageVersion: string,\n\tviewConfig: ViewConfig,\n\tmoduleResolution: \"url\" | \"import-map\",\n\tcdnProvider: EsmCdnProvider,\n\tviewName: string,\n): string {\n\tif (moduleResolution === \"import-map\") {\n\t\treturn viewConfig.subpath\n\t\t\t? `${packageName}${viewConfig.subpath}`\n\t\t\t: packageName;\n\t}\n\treturn resolveBrowserViewUrl(\n\t\tpackageVersion,\n\t\tviewConfig,\n\t\tcdnProvider,\n\t\tviewName,\n\t);\n}\n\nfunction resolveControllerSpecifier(\n\tpackageName: string,\n\tpackageVersion: string,\n\tmoduleResolution: \"url\" | \"import-map\",\n\tcdnProvider: EsmCdnProvider,\n): string {\n\tif (moduleResolution === \"import-map\") {\n\t\treturn `${packageName}/controller`;\n\t}\n\treturn resolveBrowserControllerUrl(packageVersion, cdnProvider);\n}\n\nfunction pickElementClass(module: any, view: string): unknown {\n\tif (!module || typeof module !== \"object\") return undefined;\n\tif (view === \"author\") {\n\t\treturn module.default ?? module.Configure ?? module.Element;\n\t}\n\tif (view === \"print\") {\n\t\treturn module.default ?? module.Print ?? module.Element;\n\t}\n\treturn module.default ?? module.Element;\n}\n\nconst SHARED_BROWSER_DEPENDENCIES = [\"react\", \"react-dom\"] as const;\n\nfunction declaredSharedDependencyVersion(\n\tmetadata: PackageMetadata | null,\n\tdependencyName: (typeof SHARED_BROWSER_DEPENDENCIES)[number],\n\tpackageVersion: string,\n): string | undefined {\n\tconst version = metadata?.pie?.browserSharedDependencies?.[dependencyName];\n\tif (!version) {\n\t\tthrow new Error(\n\t\t\t`${packageVersion} is missing required pie.browserSharedDependencies.${dependencyName}`,\n\t\t);\n\t}\n\tif (!isExactVersion(version)) {\n\t\tthrow new Error(\n\t\t\t`${packageVersion} pie.browserSharedDependencies.${dependencyName} must be an exact version; received \"${version}\"`,\n\t\t);\n\t}\n\treturn version;\n}\n\nfunction packageUsesSharedDependency(\n\tmetadata: PackageMetadata | null,\n\tdependencyName: (typeof SHARED_BROWSER_DEPENDENCIES)[number],\n): boolean {\n\treturn Boolean(\n\t\tmetadata?.pie?.browserSharedDependencies?.[dependencyName] ||\n\t\t\tmetadata?.peerDependencies?.[dependencyName] ||\n\t\t\tmetadata?.dependencies?.[dependencyName] ||\n\t\t\tmetadata?.optionalDependencies?.[dependencyName],\n\t);\n}\n\nfunction addSharedDependencyImports(\n\timports: Record<string, string>,\n\tselectedVersions: Record<string, string>,\n\tlockedVersions: Set<string>,\n\tdependencyName: (typeof SHARED_BROWSER_DEPENDENCIES)[number],\n\tversion: string | undefined,\n\tcdnProvider: EsmCdnProvider,\n\tpackageVersion: string,\n\tonConflict: (attributes: Record<string, unknown>) => void,\n): void {\n\tif (!version) {\n\t\treturn;\n\t}\n\n\tconst currentVersion = selectedVersions[dependencyName];\n\tlet resolvedVersion = version;\n\tif (currentVersion && currentVersion !== version) {\n\t\tresolvedVersion = resolveSharedDependencyVersion(\n\t\t\tdependencyName,\n\t\t\tcurrentVersion,\n\t\t\tversion,\n\t\t\tpackageVersion,\n\t\t\tlockedVersions.has(dependencyName),\n\t\t);\n\t\tonConflict({\n\t\t\tdependencyName,\n\t\t\texistingVersion: currentVersion,\n\t\t\trequestedVersion: version,\n\t\t\tresolvedVersion,\n\t\t\tpackageVersion,\n\t\t});\n\t}\n\tselectedVersions[dependencyName] = resolvedVersion;\n\n\timports[dependencyName] = cdnProvider.sharedDependencyUrl(\n\t\tdependencyName,\n\t\tresolvedVersion,\n\t);\n\tif (dependencyName === \"react\") {\n\t\timports[\"react/jsx-runtime\"] = cdnProvider.sharedDependencyUrl(\n\t\t\t\"react\",\n\t\t\tresolvedVersion,\n\t\t\t\"jsx-runtime\",\n\t\t);\n\t\timports[\"react/jsx-dev-runtime\"] = cdnProvider.sharedDependencyUrl(\n\t\t\t\"react\",\n\t\t\tresolvedVersion,\n\t\t\t\"jsx-dev-runtime\",\n\t\t);\n\t}\n\tif (dependencyName === \"react-dom\") {\n\t\timports[\"react-dom/client\"] = cdnProvider.sharedDependencyUrl(\n\t\t\t\"react-dom\",\n\t\t\tresolvedVersion,\n\t\t\t\"client\",\n\t\t);\n\t}\n}\n\nfunction isExactVersion(version: string): boolean {\n\treturn /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/.test(version);\n}\n\nfunction parseVersion(version: string): {\n\tmajor: number;\n\tminor: number;\n\tpatch: number;\n} {\n\tconst match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n\tif (!match) {\n\t\tthrow new Error(`Invalid shared browser dependency version \"${version}\"`);\n\t}\n\treturn {\n\t\tmajor: Number(match[1]),\n\t\tminor: Number(match[2]),\n\t\tpatch: Number(match[3]),\n\t};\n}\n\nfunction compareVersions(a: string, b: string): number {\n\tconst parsedA = parseVersion(a);\n\tconst parsedB = parseVersion(b);\n\tif (parsedA.major !== parsedB.major) return parsedA.major - parsedB.major;\n\tif (parsedA.minor !== parsedB.minor) return parsedA.minor - parsedB.minor;\n\treturn parsedA.patch - parsedB.patch;\n}\n\nfunction resolveSharedDependencyVersion(\n\tdependencyName: string,\n\tcurrentVersion: string,\n\trequestedVersion: string,\n\tpackageVersion: string,\n\tisLocked: boolean,\n): string {\n\tconst current = parseVersion(currentVersion);\n\tconst requested = parseVersion(requestedVersion);\n\tif (current.major !== requested.major) {\n\t\tthrow new Error(\n\t\t\t`Conflicting shared browser dependency ${dependencyName}: ${currentVersion} vs ${requestedVersion} from ${packageVersion}; different major versions cannot share one browser singleton`,\n\t\t);\n\t}\n\tif (isLocked && compareVersions(requestedVersion, currentVersion) > 0) {\n\t\tthrow new Error(\n\t\t\t`Conflicting shared browser dependency ${dependencyName}: ${currentVersion} is already selected, but ${packageVersion} requires higher version ${requestedVersion}; the browser singleton cannot be upgraded after import-map injection`,\n\t\t);\n\t}\n\treturn compareVersions(currentVersion, requestedVersion) >= 0\n\t\t? currentVersion\n\t\t: requestedVersion;\n}\n\ntype BrowserImportMapBuildResult = {\n\tjson: string | null;\n\tsharedDependencyVersions: Record<string, string>;\n};\n\nasync function buildImportMapJson(\n\telements: ElementMap,\n\tviewConfig: ViewConfig,\n\tcdnProvider: EsmCdnProvider,\n\tloadControllers: boolean,\n\tincludeElementImports: boolean,\n\tpackageMetadataLoader: EsmPackageMetadataLoader,\n\tcurrentSharedDependencyVersions: Record<string, string>,\n\tonConflict: (attributes: Record<string, unknown>) => void,\n): Promise<BrowserImportMapBuildResult> {\n\tconst imports: Record<string, string> = {};\n\tconst selectedVersions: Record<string, string> = {\n\t\t...currentSharedDependencyVersions,\n\t};\n\tconst lockedVersions = new Set(Object.keys(currentSharedDependencyVersions));\n\tfor (const [, pkg] of Object.entries(elements)) {\n\t\tconst packageName = extractPackageName(pkg);\n\t\tif (includeElementImports) {\n\t\t\timports[packageName] = resolveBrowserViewUrl(\n\t\t\t\tpkg,\n\t\t\t\tBUILT_IN_VIEWS.delivery,\n\t\t\t\tcdnProvider,\n\t\t\t\t\"delivery\",\n\t\t\t);\n\t\t\tif (viewConfig.subpath) {\n\t\t\t\timports[`${packageName}${viewConfig.subpath}`] = resolveBrowserViewUrl(\n\t\t\t\t\tpkg,\n\t\t\t\t\tviewConfig,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t\tcleanViewSubpath(viewConfig.subpath) ?? \"delivery\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (loadControllers) {\n\t\t\t\timports[`${packageName}/controller`] = resolveBrowserControllerUrl(\n\t\t\t\t\tpkg,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (viewConfig.fallback) {\n\t\t\t\tconst fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];\n\t\t\t\tif (fallbackConfig) {\n\t\t\t\t\tconst fallbackSpecifier = fallbackConfig.subpath\n\t\t\t\t\t\t? `${packageName}${fallbackConfig.subpath}`\n\t\t\t\t\t\t: packageName;\n\t\t\t\t\timports[fallbackSpecifier] = resolveBrowserViewUrl(\n\t\t\t\t\t\tpkg,\n\t\t\t\t\t\tfallbackConfig,\n\t\t\t\t\t\tcdnProvider,\n\t\t\t\t\t\tviewConfig.fallback,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst metadata = await packageMetadataLoader(\n\t\t\tpkg,\n\t\t\tcdnProvider.packageJsonUrl(pkg),\n\t\t);\n\t\tassertBrowserEsmExports(\n\t\t\tmetadata,\n\t\t\tpkg,\n\t\t\tviewConfig,\n\t\t\tloadControllers,\n\t\t\tcleanViewSubpath(viewConfig.subpath) ?? \"delivery\",\n\t\t);\n\t\tfor (const dependencyName of SHARED_BROWSER_DEPENDENCIES) {\n\t\t\tif (!packageUsesSharedDependency(metadata, dependencyName)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\taddSharedDependencyImports(\n\t\t\t\timports,\n\t\t\t\tselectedVersions,\n\t\t\t\tlockedVersions,\n\t\t\t\tdependencyName,\n\t\t\t\tdeclaredSharedDependencyVersion(metadata, dependencyName, pkg),\n\t\t\t\tcdnProvider,\n\t\t\t\tpkg,\n\t\t\t\tonConflict,\n\t\t\t);\n\t\t}\n\t}\n\tif (Object.keys(imports).length === 0) {\n\t\treturn { json: null, sharedDependencyVersions: selectedVersions };\n\t}\n\treturn {\n\t\tjson: JSON.stringify({ imports }, null, 2),\n\t\tsharedDependencyVersions: selectedVersions,\n\t};\n}\n\nfunction injectImportMap(json: string, doc: Document): void {\n\tconst script = doc.createElement(\"script\") as HTMLScriptElement;\n\tscript.type = \"importmap\";\n\tscript.textContent = json;\n\tdoc.head.appendChild(script);\n}\n\nfunction assertImportMapSupported(): void {\n\tconst htmlScriptElement = (\n\t\ttypeof HTMLScriptElement !== \"undefined\" ? HTMLScriptElement : undefined\n\t) as\n\t\t| (typeof HTMLScriptElement & {\n\t\t\t\tsupports?: (type: string) => boolean;\n\t\t })\n\t\t| undefined;\n\tconst supports =\n\t\ttypeof htmlScriptElement?.supports === \"function\" &&\n\t\thtmlScriptElement.supports(\"importmap\");\n\tif (!supports) {\n\t\tthrow new Error(\n\t\t\t'This browser does not support import maps. Use moduleResolution=\"url\" or switch to iife/preloaded strategy.',\n\t\t);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"esm-adapter.js","sourceRoot":"","sources":["../../src/loaders/esm-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ESM backend adapter for the ElementLoader primitive.\n *\n * Loads PIE elements via dynamic `import()` from static browser ESM files on a\n * CDN, optionally resolving bare specifiers through an import map injected into\n * the host document. On any per-tag failure (module load, non-constructor\n * element class, define failure), throws `AdapterFailure` with a structured\n * `reasons` map.\n *\n * Like the IIFE adapter, this module does not gate its own promise on\n * `customElements.whenDefined`; the primitive performs that verification\n * uniformly. Here the adapter's job is narrowly to fetch, extract, and\n * call `customElements.define`.\n */\n\nimport { defineCustomElementSafely } from \"../pie/custom-element-define.js\";\nimport type { InstrumentationProvider } from \"../instrumentation/types.js\";\nimport { isInstrumentationProvider } from \"../instrumentation/provider-guards.js\";\nimport { pieRegistry } from \"../pie/registry.js\";\nimport { validateCustomElementTag } from \"../pie/tag-names.js\";\nimport { isCustomElementConstructor, Status } from \"../pie/types.js\";\nimport type { ElementMap } from \"./ElementLoader.js\";\nimport {\n\tAdapterFailure,\n\ttype BackendContext,\n\ttype ElementLoaderBackend,\n\ttype ElementTag,\n\ttype RegistrationFailureReason,\n} from \"./element-loader-types.js\";\n\n/** View configuration: how a PIE package's subpath maps to a tag suffix. */\nexport type ViewConfig = {\n\tsubpath: string;\n\ttagSuffix: string;\n\tfallback?: string;\n};\n\nexport const BUILT_IN_VIEWS: Record<string, ViewConfig> = {\n\tdelivery: { subpath: \"\", tagSuffix: \"\" },\n\tauthor: { subpath: \"/author\", tagSuffix: \"-config\", fallback: \"delivery\" },\n\tprint: { subpath: \"/print\", tagSuffix: \"-print\", fallback: \"delivery\" },\n};\n\nexport type BuiltInEsmCdnProviderName = \"jsdelivr\" | \"esm.sh\";\nexport type EsmCdnProviderName = BuiltInEsmCdnProviderName | (string & {});\n\nexport type EsmCdnProvider = {\n\tname: EsmCdnProviderName;\n\tpackageJsonUrl(packageVersion: string): string;\n\tbrowserViewUrl(packageVersion: string, view: string): string;\n\tbrowserControllerUrl(packageVersion: string): string;\n\tsharedDependencyUrl(\n\t\tdependencyName: string,\n\t\tversion: string,\n\t\tsubpath?: string,\n\t): string;\n};\n\nexport type EsmCdnProviderOption = EsmCdnProviderName | EsmCdnProvider;\n\nexport type EsmBackendConfig = {\n\tkind: \"esm\";\n\t/** Base URL for the ESM CDN (e.g., \"https://esm.sh\"). */\n\tcdnBaseUrl: string;\n\t/** CDN URL strategy. Defaults to jsDelivr, or is inferred from cdnBaseUrl when possible. */\n\tcdnProvider?: EsmCdnProviderOption;\n\t/** `\"url\"` loads via fully-qualified URLs; `\"import-map\"` uses bare specifiers. */\n\tmoduleResolution?: \"url\" | \"import-map\";\n\t/** View to load (`delivery`, `author`, `print`, or a custom name). */\n\tview?: string;\n\t/** Custom view configuration (overrides built-ins). */\n\tviewConfig?: ViewConfig;\n\t/** Whether to also load controller modules. */\n\tloadControllers?: boolean;\n\t/** Debug flag hook. */\n\tdebugEnabled?: () => boolean;\n\t/** Whether ESM dependency conflict/failure events should be instrumented. */\n\ttrackPageActions?: boolean;\n\t/** Instrumentation provider for ESM dependency conflict/failure events. */\n\tinstrumentationProvider?: InstrumentationProvider;\n};\n\ntype PackageMetadata = {\n\texports?: Record<string, unknown>;\n\tdependencies?: Record<string, string>;\n\toptionalDependencies?: Record<string, string>;\n\tpeerDependencies?: Record<string, string>;\n\tpie?: {\n\t\tbrowserSharedDependencies?: Record<string, string>;\n\t};\n};\n\n/** @internal */\nexport type EsmModuleImporter = (specifier: string) => Promise<unknown>;\n/** @internal */\nexport type EsmImportMapObserver = (json: string, doc: Document) => void;\n/** @internal */\nexport type EsmPackageMetadataLoader = (\n\tpackageVersion: string,\n\tpackageJsonUrl: string,\n) => Promise<PackageMetadata | null>;\n\n/**\n * Test-only seam exposed via `EsmBackend.__seams`. Lets contract tests\n * inject scripted import behaviour and observe import-map injection\n * without going through the network or the document. Not part of the\n * runtime API; production code must not touch this field.\n *\n * @internal\n */\nexport type EsmBackendTestSeams = {\n\treplaceImporter(fn: EsmModuleImporter): void;\n\tobserveImportMapInjection(cb: EsmImportMapObserver): void;\n\treplacePackageMetadataLoader(fn: EsmPackageMetadataLoader): void;\n\trestore(): void;\n};\n\nexport type EsmBackend = ElementLoaderBackend & {\n\t/** @internal Test-only seam — see {@link EsmBackendTestSeams}. */\n\treadonly __seams: EsmBackendTestSeams;\n};\n\nexport function createEsmBackend(config: EsmBackendConfig): EsmBackend {\n\tconst cdnBaseUrl = config.cdnBaseUrl.replace(/\\/+$/, \"\");\n\tconst cdnProvider = resolveCdnProvider(config.cdnProvider, cdnBaseUrl);\n\tconst moduleResolution = config.moduleResolution ?? \"url\";\n\tconst view = config.view ?? \"delivery\";\n\tconst loadControllers = config.loadControllers ?? true;\n\tconst viewConfig = resolveEsmViewConfig(view, config.viewConfig);\n\n\tconst injectedPackageVersions = new Set<string>();\n\tconst importMappedPackageVersions = new Map<string, string>();\n\tlet sharedDependencyVersions: Record<string, string> = {};\n\tlet importer: EsmModuleImporter = defaultImporter;\n\tlet packageMetadataLoader: EsmPackageMetadataLoader =\n\t\tdefaultPackageMetadataLoader;\n\tlet importMapObserver: EsmImportMapObserver | undefined;\n\n\tconst __seams: EsmBackendTestSeams = {\n\t\treplaceImporter(fn) {\n\t\t\timporter = fn;\n\t\t},\n\t\tobserveImportMapInjection(cb) {\n\t\t\timportMapObserver = cb;\n\t\t},\n\t\treplacePackageMetadataLoader(fn) {\n\t\t\tpackageMetadataLoader = fn;\n\t\t},\n\t\trestore() {\n\t\t\timporter = defaultImporter;\n\t\t\tpackageMetadataLoader = defaultPackageMetadataLoader;\n\t\t\timportMapObserver = undefined;\n\t\t\tinjectedPackageVersions.clear();\n\t\t\timportMappedPackageVersions.clear();\n\t\t\tsharedDependencyVersions = {};\n\t\t},\n\t};\n\n\tasync function load(\n\t\telements: ElementMap,\n\t\tcontext: BackendContext,\n\t): Promise<void> {\n\t\tif (!elements || Object.keys(elements).length === 0) return;\n\t\tif (moduleResolution === \"import-map\") {\n\t\t\tassertImportMapSupported();\n\t\t}\n\n\t\tconst newEntries: ElementMap = {};\n\t\tfor (const [tag, pkg] of Object.entries(elements)) {\n\t\t\tconst packageName = extractPackageName(pkg);\n\t\t\tif (moduleResolution === \"import-map\") {\n\t\t\t\tconst existingVersion = importMappedPackageVersions.get(packageName);\n\t\t\t\tif (existingVersion && existingVersion !== pkg) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Conflicting browser ESM package version for ${packageName}: ${existingVersion} is already mapped, but ${pkg} was requested`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!injectedPackageVersions.has(pkg)) {\n\t\t\t\tnewEntries[tag] = pkg;\n\t\t\t}\n\t\t}\n\t\tif (Object.keys(newEntries).length > 0) {\n\t\t\tlet importMapResult: BrowserImportMapBuildResult;\n\t\t\ttry {\n\t\t\t\timportMapResult = await buildImportMapJson(\n\t\t\t\t\tnewEntries,\n\t\t\t\t\tviewConfig,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t\tloadControllers,\n\t\t\t\t\tmoduleResolution === \"import-map\",\n\t\t\t\t\tpackageMetadataLoader,\n\t\t\t\t\tsharedDependencyVersions,\n\t\t\t\t\treportSharedDependencyConflict,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\treportSharedDependencyError(err);\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tconst json = importMapResult.json;\n\t\t\tif (json) {\n\t\t\t\tassertImportMapSupported();\n\t\t\t\tinjectImportMap(json, context.doc);\n\t\t\t\timportMapObserver?.(json, context.doc);\n\t\t\t}\n\t\t\tsharedDependencyVersions = importMapResult.sharedDependencyVersions;\n\t\t\tfor (const pkg of Object.values(newEntries)) {\n\t\t\t\tinjectedPackageVersions.add(pkg);\n\t\t\t\tif (moduleResolution === \"import-map\") {\n\t\t\t\t\timportMappedPackageVersions.set(extractPackageName(pkg), pkg);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\t\tconst registry = pieRegistry();\n\n\t\tawait Promise.all(\n\t\t\tObject.entries(elements).map(async ([tag, packageVersion]) => {\n\t\t\t\tconst packageName = extractPackageName(packageVersion);\n\t\t\t\tlet actualTag: string;\n\t\t\t\ttry {\n\t\t\t\t\tactualTag = validateCustomElementTag(\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\t`element tag for ${packageName}`,\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"define-failed\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst specifier = resolveElementSpecifier(\n\t\t\t\t\tpackageName,\n\t\t\t\t\tpackageVersion,\n\t\t\t\t\tviewConfig,\n\t\t\t\t\tmoduleResolution,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t\tview,\n\t\t\t\t);\n\n\t\t\t\tlet module: any;\n\t\t\t\ttry {\n\t\t\t\t\tmodule = await importer(specifier);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (viewConfig.fallback) {\n\t\t\t\t\t\tconst fallbackConfig =\n\t\t\t\t\t\t\tBUILT_IN_VIEWS[viewConfig.fallback] ?? BUILT_IN_VIEWS.delivery;\n\t\t\t\t\t\tconst fallbackSpecifier = resolveElementSpecifier(\n\t\t\t\t\t\t\tpackageName,\n\t\t\t\t\t\t\tpackageVersion,\n\t\t\t\t\t\t\tfallbackConfig,\n\t\t\t\t\t\t\tmoduleResolution,\n\t\t\t\t\t\t\tcdnProvider,\n\t\t\t\t\t\t\tviewConfig.fallback,\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tmodule = await importer(fallbackSpecifier);\n\t\t\t\t\t\t} catch (fallbackErr) {\n\t\t\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\t\t\tkind: \"module-load-failed\",\n\t\t\t\t\t\t\t\ttag,\n\t\t\t\t\t\t\t\tspecifier: fallbackSpecifier,\n\t\t\t\t\t\t\t\tcause:\n\t\t\t\t\t\t\t\t\tfallbackErr instanceof Error\n\t\t\t\t\t\t\t\t\t\t? fallbackErr.message\n\t\t\t\t\t\t\t\t\t\t: String(fallbackErr),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\t\tkind: \"module-load-failed\",\n\t\t\t\t\t\t\ttag,\n\t\t\t\t\t\t\tspecifier,\n\t\t\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst ElementClass = pickElementClass(module, view);\n\t\t\t\tif (!ElementClass) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"no-element-class\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tpackageName,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!isCustomElementConstructor(ElementClass)) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"not-a-constructor\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tpackageName,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tdefineCustomElementSafely(\n\t\t\t\t\t\tactualTag,\n\t\t\t\t\t\tclass extends ElementClass {},\n\t\t\t\t\t\t`element tag for ${packageName}`,\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"define-failed\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet controller: any = null;\n\t\t\t\tif (loadControllers) {\n\t\t\t\t\tconst controllerSpecifier = resolveControllerSpecifier(\n\t\t\t\t\t\tpackageName,\n\t\t\t\t\t\tpackageVersion,\n\t\t\t\t\t\tmoduleResolution,\n\t\t\t\t\t\tcdnProvider,\n\t\t\t\t\t);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst controllerModule: any = await importer(controllerSpecifier);\n\t\t\t\t\t\tcontroller = controllerModule?.default ?? controllerModule;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Controllers are best-effort; element registration is what the\n\t\t\t\t\t\t// primitive verifies.\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tregistry[actualTag] = {\n\t\t\t\t\tpackage: packageVersion,\n\t\t\t\t\tstatus: Status.loaded,\n\t\t\t\t\ttagName: actualTag,\n\t\t\t\t\telement: ElementClass,\n\t\t\t\t\tcontroller,\n\t\t\t\t\tconfig: null,\n\t\t\t\t\tbundleType: \"esm\" as unknown as import(\"../pie/types.js\").BundleType,\n\t\t\t\t};\n\t\t\t}),\n\t\t);\n\n\t\tif (reasons.size > 0) {\n\t\t\tthrow new AdapterFailure(reasons);\n\t\t}\n\t}\n\n\tfunction getInstrumentationProvider(): InstrumentationProvider | undefined {\n\t\tif (!config.trackPageActions) return undefined;\n\t\tconst provider = config.instrumentationProvider;\n\t\tif (!isInstrumentationProvider(provider)) return undefined;\n\t\tif (!provider.isReady()) return undefined;\n\t\treturn provider;\n\t}\n\n\tfunction reportSharedDependencyConflict(\n\t\tattributes: Record<string, unknown>,\n\t): void {\n\t\tif (typeof console !== \"undefined\" && console.warn) {\n\t\t\tconsole.warn(\n\t\t\t\t`[pie-esm] Shared dependency version conflict resolved for ${String(attributes.dependencyName)}`,\n\t\t\t\tattributes,\n\t\t\t);\n\t\t}\n\t\tconst provider = getInstrumentationProvider();\n\t\tif (!provider) return;\n\t\ttry {\n\t\t\tprovider.trackEvent(\"pie-esm-shared-dependency-conflict\", attributes);\n\t\t} catch {\n\t\t\t// Swallow: instrumentation must never break loading.\n\t\t}\n\t}\n\n\tfunction reportSharedDependencyError(error: unknown): void {\n\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\tif (typeof console !== \"undefined\" && console.error) {\n\t\t\tconsole.error(\"[pie-esm] Shared dependency resolution failed\", err);\n\t\t}\n\t\tconst provider = getInstrumentationProvider();\n\t\tif (!provider) return;\n\t\ttry {\n\t\t\tprovider.trackError(err, {\n\t\t\t\tcomponent: \"esm-adapter\",\n\t\t\t\terrorType: \"EsmSharedDependencyError\",\n\t\t\t});\n\t\t} catch {\n\t\t\t// Swallow: instrumentation must never break loading.\n\t\t}\n\t}\n\n\treturn {\n\t\tload,\n\t\tget __seams() {\n\t\t\treturn __seams;\n\t\t},\n\t};\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nexport function mapEsmViewElements(\n\telements: ElementMap,\n\tview = \"delivery\",\n\tviewConfig?: ViewConfig,\n): ElementMap {\n\tconst resolvedViewConfig = resolveEsmViewConfig(view, viewConfig);\n\treturn Object.fromEntries(\n\t\tObject.entries(elements).map(([tag, packageVersion]) => [\n\t\t\t`${tag}${resolvedViewConfig.tagSuffix}`,\n\t\t\tpackageVersion,\n\t\t]),\n\t);\n}\n\nfunction defaultImporter(specifier: string): Promise<unknown> {\n\t// @vite-ignore — dynamic import resolved at runtime.\n\treturn import(/* @vite-ignore */ specifier);\n}\n\nasync function defaultPackageMetadataLoader(\n\tpackageVersion: string,\n\tpackageJsonUrl: string,\n): Promise<PackageMetadata | null> {\n\tconst browserFetch =\n\t\ttypeof window !== \"undefined\" &&\n\t\ttypeof (window as Window & { fetch?: typeof fetch }).fetch === \"function\"\n\t\t\t? (window as Window & { fetch: typeof fetch }).fetch.bind(window)\n\t\t\t: undefined;\n\tif (!browserFetch) {\n\t\treturn null;\n\t}\n\n\tconst response = await browserFetch(packageJsonUrl);\n\tif (!response.ok) {\n\t\treturn null;\n\t}\n\treturn (await response.json()) as PackageMetadata;\n}\n\nfunction resolveCdnProvider(\n\tprovider: EsmCdnProviderOption | undefined,\n\tcdnBaseUrl: string,\n): EsmCdnProvider {\n\tif (isEsmCdnProvider(provider)) return provider;\n\tconst resolvedProviderName =\n\t\tprovider ?? (cdnBaseUrl.includes(\"esm.sh\") ? \"esm.sh\" : \"jsdelivr\");\n\tif (resolvedProviderName === \"esm.sh\") {\n\t\treturn createEsmShProvider(cdnBaseUrl);\n\t}\n\treturn createJsDelivrProvider(cdnBaseUrl, resolvedProviderName);\n}\n\nfunction isEsmCdnProvider(value: unknown): value is EsmCdnProvider {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst candidate = value as Partial<Record<keyof EsmCdnProvider, unknown>>;\n\treturn (\n\t\ttypeof candidate.name === \"string\" &&\n\t\ttypeof candidate.packageJsonUrl === \"function\" &&\n\t\ttypeof candidate.browserViewUrl === \"function\" &&\n\t\ttypeof candidate.browserControllerUrl === \"function\" &&\n\t\ttypeof candidate.sharedDependencyUrl === \"function\"\n\t);\n}\n\nfunction createJsDelivrProvider(\n\tcdnBaseUrl: string,\n\tname: EsmCdnProviderName = \"jsdelivr\",\n): EsmCdnProvider {\n\treturn {\n\t\tname,\n\t\tpackageJsonUrl: (packageVersion) =>\n\t\t\t`${cdnBaseUrl}/${packageVersion}/package.json`,\n\t\tbrowserViewUrl: (packageVersion, view) =>\n\t\t\t`${cdnBaseUrl}/${packageVersion}/dist/browser/${view}/index.js`,\n\t\tbrowserControllerUrl: (packageVersion) =>\n\t\t\t`${cdnBaseUrl}/${packageVersion}/dist/browser/controller/index.js`,\n\t\tsharedDependencyUrl: (dependencyName, version, subpath) => {\n\t\t\tconst suffix = subpath ? `/${subpath}/+esm` : \"/+esm\";\n\t\t\treturn `${cdnBaseUrl}/${dependencyName}@${version}${suffix}`;\n\t\t},\n\t};\n}\n\nfunction createEsmShProvider(cdnBaseUrl: string): EsmCdnProvider {\n\tconst esmBaseUrl = cdnBaseUrl.replace(/\\/+$/, \"\");\n\tconst rawBaseUrl = toRawEsmShBaseUrl(esmBaseUrl);\n\treturn {\n\t\tname: \"esm.sh\",\n\t\tpackageJsonUrl: (packageVersion) =>\n\t\t\t`${rawBaseUrl}/${packageVersion}/package.json`,\n\t\tbrowserViewUrl: (packageVersion, view) =>\n\t\t\t`${rawBaseUrl}/${packageVersion}/dist/browser/${view}/index.js`,\n\t\tbrowserControllerUrl: (packageVersion) =>\n\t\t\t`${rawBaseUrl}/${packageVersion}/dist/browser/controller/index.js`,\n\t\tsharedDependencyUrl: (dependencyName, version, subpath) => {\n\t\t\tconst suffix = subpath ? `/${subpath}` : \"\";\n\t\t\treturn `${esmBaseUrl}/${dependencyName}@${version}${suffix}`;\n\t\t},\n\t};\n}\n\nfunction toRawEsmShBaseUrl(cdnBaseUrl: string): string {\n\ttry {\n\t\tconst url = new URL(cdnBaseUrl);\n\t\tif (url.hostname === \"raw.esm.sh\")\n\t\t\treturn url.toString().replace(/\\/+$/, \"\");\n\t\tif (url.hostname === \"esm.sh\") {\n\t\t\turl.hostname = \"raw.esm.sh\";\n\t\t\treturn url.toString().replace(/\\/+$/, \"\");\n\t\t}\n\t} catch {\n\t\t// Fall through to the public raw endpoint for non-URL test fixtures.\n\t}\n\treturn \"https://raw.esm.sh\";\n}\n\nfunction resolveEsmViewConfig(view: string, viewConfig?: ViewConfig): ViewConfig {\n\treturn viewConfig ?? BUILT_IN_VIEWS[view] ?? BUILT_IN_VIEWS.delivery;\n}\n\nfunction assertBrowserEsmExports(\n\tmetadata: PackageMetadata | null,\n\tpackageVersion: string,\n\tviewConfig: ViewConfig,\n\tloadControllers: boolean,\n\tviewName: string,\n): void {\n\tif (!metadata?.exports) return;\n\n\tconst requiredExports = new Set<string>([\n\t\t`./browser/${browserViewName(viewConfig, viewName)}`,\n\t]);\n\tif (viewConfig.fallback) {\n\t\tconst fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];\n\t\tif (fallbackConfig) {\n\t\t\trequiredExports.add(\n\t\t\t\t`./browser/${browserViewName(fallbackConfig, viewConfig.fallback)}`,\n\t\t\t);\n\t\t}\n\t}\n\tif (loadControllers) {\n\t\trequiredExports.add(\"./browser/controller\");\n\t}\n\n\tfor (const exportKey of requiredExports) {\n\t\tif (!(exportKey in metadata.exports)) {\n\t\t\tthrow new Error(\n\t\t\t\t`${packageVersion} does not publish browser ESM export ${exportKey}; use IIFE/preloaded mode or publish browser ESM artifacts first`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction extractPackageName(packageVersion: string): string {\n\tconst parts = packageVersion.split(\"@\");\n\treturn parts.length >= 3 ? `@${parts[1]}` : parts[0];\n}\n\nfunction cleanViewSubpath(subpath: string): string | null {\n\tconst cleanSubpath = subpath.replace(/^\\/+|\\/+$/g, \"\");\n\treturn cleanSubpath.length > 0 ? cleanSubpath : null;\n}\n\nfunction browserViewName(\n\tviewConfig: ViewConfig,\n\tviewName = \"delivery\",\n): string {\n\tconst subpathView = cleanViewSubpath(viewConfig.subpath);\n\treturn subpathView ?? viewName;\n}\n\nfunction resolveBrowserViewUrl(\n\tpackageVersion: string,\n\tviewConfig: ViewConfig,\n\tcdnProvider: EsmCdnProvider,\n\tviewName = \"delivery\",\n): string {\n\tconst view = browserViewName(viewConfig, viewName);\n\treturn cdnProvider.browserViewUrl(packageVersion, view);\n}\n\nfunction resolveBrowserControllerUrl(\n\tpackageVersion: string,\n\tcdnProvider: EsmCdnProvider,\n): string {\n\treturn cdnProvider.browserControllerUrl(packageVersion);\n}\n\nfunction resolveElementSpecifier(\n\tpackageName: string,\n\tpackageVersion: string,\n\tviewConfig: ViewConfig,\n\tmoduleResolution: \"url\" | \"import-map\",\n\tcdnProvider: EsmCdnProvider,\n\tviewName: string,\n): string {\n\tif (moduleResolution === \"import-map\") {\n\t\treturn viewConfig.subpath\n\t\t\t? `${packageName}${viewConfig.subpath}`\n\t\t\t: packageName;\n\t}\n\treturn resolveBrowserViewUrl(\n\t\tpackageVersion,\n\t\tviewConfig,\n\t\tcdnProvider,\n\t\tviewName,\n\t);\n}\n\nfunction resolveControllerSpecifier(\n\tpackageName: string,\n\tpackageVersion: string,\n\tmoduleResolution: \"url\" | \"import-map\",\n\tcdnProvider: EsmCdnProvider,\n): string {\n\tif (moduleResolution === \"import-map\") {\n\t\treturn `${packageName}/controller`;\n\t}\n\treturn resolveBrowserControllerUrl(packageVersion, cdnProvider);\n}\n\nfunction pickElementClass(module: any, view: string): unknown {\n\tif (!module || typeof module !== \"object\") return undefined;\n\tif (view === \"author\") {\n\t\treturn module.default ?? module.Configure ?? module.Element;\n\t}\n\tif (view === \"print\") {\n\t\treturn module.default ?? module.Print ?? module.Element;\n\t}\n\treturn module.default ?? module.Element;\n}\n\nconst SHARED_BROWSER_DEPENDENCIES = [\"react\", \"react-dom\"] as const;\n\nfunction declaredSharedDependencyVersion(\n\tmetadata: PackageMetadata | null,\n\tdependencyName: (typeof SHARED_BROWSER_DEPENDENCIES)[number],\n\tpackageVersion: string,\n): string | undefined {\n\tconst version = metadata?.pie?.browserSharedDependencies?.[dependencyName];\n\tif (!version) {\n\t\tthrow new Error(\n\t\t\t`${packageVersion} is missing required pie.browserSharedDependencies.${dependencyName}`,\n\t\t);\n\t}\n\tif (!isExactVersion(version)) {\n\t\tthrow new Error(\n\t\t\t`${packageVersion} pie.browserSharedDependencies.${dependencyName} must be an exact version; received \"${version}\"`,\n\t\t);\n\t}\n\treturn version;\n}\n\nfunction packageUsesSharedDependency(\n\tmetadata: PackageMetadata | null,\n\tdependencyName: (typeof SHARED_BROWSER_DEPENDENCIES)[number],\n): boolean {\n\treturn Boolean(\n\t\tmetadata?.pie?.browserSharedDependencies?.[dependencyName] ||\n\t\t\tmetadata?.peerDependencies?.[dependencyName] ||\n\t\t\tmetadata?.dependencies?.[dependencyName] ||\n\t\t\tmetadata?.optionalDependencies?.[dependencyName],\n\t);\n}\n\nfunction addSharedDependencyImports(\n\timports: Record<string, string>,\n\tselectedVersions: Record<string, string>,\n\tlockedVersions: Set<string>,\n\tdependencyName: (typeof SHARED_BROWSER_DEPENDENCIES)[number],\n\tversion: string | undefined,\n\tcdnProvider: EsmCdnProvider,\n\tpackageVersion: string,\n\tonConflict: (attributes: Record<string, unknown>) => void,\n): void {\n\tif (!version) {\n\t\treturn;\n\t}\n\n\tconst currentVersion = selectedVersions[dependencyName];\n\tlet resolvedVersion = version;\n\tif (currentVersion && currentVersion !== version) {\n\t\tresolvedVersion = resolveSharedDependencyVersion(\n\t\t\tdependencyName,\n\t\t\tcurrentVersion,\n\t\t\tversion,\n\t\t\tpackageVersion,\n\t\t\tlockedVersions.has(dependencyName),\n\t\t);\n\t\tonConflict({\n\t\t\tdependencyName,\n\t\t\texistingVersion: currentVersion,\n\t\t\trequestedVersion: version,\n\t\t\tresolvedVersion,\n\t\t\tpackageVersion,\n\t\t});\n\t}\n\tselectedVersions[dependencyName] = resolvedVersion;\n\n\timports[dependencyName] = cdnProvider.sharedDependencyUrl(\n\t\tdependencyName,\n\t\tresolvedVersion,\n\t);\n\tif (dependencyName === \"react\") {\n\t\timports[\"react/jsx-runtime\"] = cdnProvider.sharedDependencyUrl(\n\t\t\t\"react\",\n\t\t\tresolvedVersion,\n\t\t\t\"jsx-runtime\",\n\t\t);\n\t\timports[\"react/jsx-dev-runtime\"] = cdnProvider.sharedDependencyUrl(\n\t\t\t\"react\",\n\t\t\tresolvedVersion,\n\t\t\t\"jsx-dev-runtime\",\n\t\t);\n\t}\n\tif (dependencyName === \"react-dom\") {\n\t\timports[\"react-dom/client\"] = cdnProvider.sharedDependencyUrl(\n\t\t\t\"react-dom\",\n\t\t\tresolvedVersion,\n\t\t\t\"client\",\n\t\t);\n\t}\n}\n\nfunction isExactVersion(version: string): boolean {\n\treturn /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/.test(version);\n}\n\nfunction parseVersion(version: string): {\n\tmajor: number;\n\tminor: number;\n\tpatch: number;\n} {\n\tconst match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n\tif (!match) {\n\t\tthrow new Error(`Invalid shared browser dependency version \"${version}\"`);\n\t}\n\treturn {\n\t\tmajor: Number(match[1]),\n\t\tminor: Number(match[2]),\n\t\tpatch: Number(match[3]),\n\t};\n}\n\nfunction compareVersions(a: string, b: string): number {\n\tconst parsedA = parseVersion(a);\n\tconst parsedB = parseVersion(b);\n\tif (parsedA.major !== parsedB.major) return parsedA.major - parsedB.major;\n\tif (parsedA.minor !== parsedB.minor) return parsedA.minor - parsedB.minor;\n\treturn parsedA.patch - parsedB.patch;\n}\n\nfunction resolveSharedDependencyVersion(\n\tdependencyName: string,\n\tcurrentVersion: string,\n\trequestedVersion: string,\n\tpackageVersion: string,\n\tisLocked: boolean,\n): string {\n\tconst current = parseVersion(currentVersion);\n\tconst requested = parseVersion(requestedVersion);\n\tif (current.major !== requested.major) {\n\t\tthrow new Error(\n\t\t\t`Conflicting shared browser dependency ${dependencyName}: ${currentVersion} vs ${requestedVersion} from ${packageVersion}; different major versions cannot share one browser singleton`,\n\t\t);\n\t}\n\tif (isLocked && compareVersions(requestedVersion, currentVersion) > 0) {\n\t\tthrow new Error(\n\t\t\t`Conflicting shared browser dependency ${dependencyName}: ${currentVersion} is already selected, but ${packageVersion} requires higher version ${requestedVersion}; the browser singleton cannot be upgraded after import-map injection`,\n\t\t);\n\t}\n\treturn compareVersions(currentVersion, requestedVersion) >= 0\n\t\t? currentVersion\n\t\t: requestedVersion;\n}\n\ntype BrowserImportMapBuildResult = {\n\tjson: string | null;\n\tsharedDependencyVersions: Record<string, string>;\n};\n\nasync function buildImportMapJson(\n\telements: ElementMap,\n\tviewConfig: ViewConfig,\n\tcdnProvider: EsmCdnProvider,\n\tloadControllers: boolean,\n\tincludeElementImports: boolean,\n\tpackageMetadataLoader: EsmPackageMetadataLoader,\n\tcurrentSharedDependencyVersions: Record<string, string>,\n\tonConflict: (attributes: Record<string, unknown>) => void,\n): Promise<BrowserImportMapBuildResult> {\n\tconst imports: Record<string, string> = {};\n\tconst selectedVersions: Record<string, string> = {\n\t\t...currentSharedDependencyVersions,\n\t};\n\tconst lockedVersions = new Set(Object.keys(currentSharedDependencyVersions));\n\tfor (const [, pkg] of Object.entries(elements)) {\n\t\tconst packageName = extractPackageName(pkg);\n\t\tif (includeElementImports) {\n\t\t\timports[packageName] = resolveBrowserViewUrl(\n\t\t\t\tpkg,\n\t\t\t\tBUILT_IN_VIEWS.delivery,\n\t\t\t\tcdnProvider,\n\t\t\t\t\"delivery\",\n\t\t\t);\n\t\t\tif (viewConfig.subpath) {\n\t\t\t\timports[`${packageName}${viewConfig.subpath}`] = resolveBrowserViewUrl(\n\t\t\t\t\tpkg,\n\t\t\t\t\tviewConfig,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t\tcleanViewSubpath(viewConfig.subpath) ?? \"delivery\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (loadControllers) {\n\t\t\t\timports[`${packageName}/controller`] = resolveBrowserControllerUrl(\n\t\t\t\t\tpkg,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (viewConfig.fallback) {\n\t\t\t\tconst fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];\n\t\t\t\tif (fallbackConfig) {\n\t\t\t\t\tconst fallbackSpecifier = fallbackConfig.subpath\n\t\t\t\t\t\t? `${packageName}${fallbackConfig.subpath}`\n\t\t\t\t\t\t: packageName;\n\t\t\t\t\timports[fallbackSpecifier] = resolveBrowserViewUrl(\n\t\t\t\t\t\tpkg,\n\t\t\t\t\t\tfallbackConfig,\n\t\t\t\t\t\tcdnProvider,\n\t\t\t\t\t\tviewConfig.fallback,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst metadata = await packageMetadataLoader(\n\t\t\tpkg,\n\t\t\tcdnProvider.packageJsonUrl(pkg),\n\t\t);\n\t\tassertBrowserEsmExports(\n\t\t\tmetadata,\n\t\t\tpkg,\n\t\t\tviewConfig,\n\t\t\tloadControllers,\n\t\t\tcleanViewSubpath(viewConfig.subpath) ?? \"delivery\",\n\t\t);\n\t\tfor (const dependencyName of SHARED_BROWSER_DEPENDENCIES) {\n\t\t\tif (!packageUsesSharedDependency(metadata, dependencyName)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\taddSharedDependencyImports(\n\t\t\t\timports,\n\t\t\t\tselectedVersions,\n\t\t\t\tlockedVersions,\n\t\t\t\tdependencyName,\n\t\t\t\tdeclaredSharedDependencyVersion(metadata, dependencyName, pkg),\n\t\t\t\tcdnProvider,\n\t\t\t\tpkg,\n\t\t\t\tonConflict,\n\t\t\t);\n\t\t}\n\t}\n\tif (Object.keys(imports).length === 0) {\n\t\treturn { json: null, sharedDependencyVersions: selectedVersions };\n\t}\n\treturn {\n\t\tjson: JSON.stringify({ imports }, null, 2),\n\t\tsharedDependencyVersions: selectedVersions,\n\t};\n}\n\nfunction injectImportMap(json: string, doc: Document): void {\n\tconst script = doc.createElement(\"script\") as HTMLScriptElement;\n\tscript.type = \"importmap\";\n\tscript.textContent = json;\n\tdoc.head.appendChild(script);\n}\n\nfunction assertImportMapSupported(): void {\n\tconst htmlScriptElement = (\n\t\ttypeof HTMLScriptElement !== \"undefined\" ? HTMLScriptElement : undefined\n\t) as\n\t\t| (typeof HTMLScriptElement & {\n\t\t\t\tsupports?: (type: string) => boolean;\n\t\t })\n\t\t| undefined;\n\tconst supports =\n\t\ttypeof htmlScriptElement?.supports === \"function\" &&\n\t\thtmlScriptElement.supports(\"importmap\");\n\tif (!supports) {\n\t\tthrow new Error(\n\t\t\t'This browser does not support import maps. Use moduleResolution=\"url\" or switch to iife/preloaded strategy.',\n\t\t);\n\t}\n}\n"]}
|
package/dist/loaders/index.d.ts
CHANGED
|
@@ -35,6 +35,6 @@ export { aggregateElements } from "./ElementLoader.js";
|
|
|
35
35
|
export type { BackendContext, BackendOption, ElementLoaderBackend, ElementTag, EnsureRegisteredOptions, EsmBackendConfig, IifeBackendConfig, RegistrationFailureReason, } from "./element-loader.js";
|
|
36
36
|
export { AdapterFailure, ElementAssertionError, ElementLoaderError, assertRegistered, ensureRegistered, } from "./element-loader.js";
|
|
37
37
|
export type { BuiltInEsmCdnProviderName, EsmBackend, EsmCdnProvider, EsmCdnProviderName, EsmCdnProviderOption, ViewConfig, } from "./esm-adapter.js";
|
|
38
|
-
export { BUILT_IN_VIEWS, createEsmBackend } from "./esm-adapter.js";
|
|
38
|
+
export { BUILT_IN_VIEWS, createEsmBackend, mapEsmViewElements, } from "./esm-adapter.js";
|
|
39
39
|
export type { IifeBackend, IifeBundleRetryStatus, } from "./iife-adapter.js";
|
|
40
40
|
export { createIifeBackend, DEFAULT_BUNDLE_HOST } from "./iife-adapter.js";
|
package/dist/loaders/index.js
CHANGED
|
@@ -32,6 +32,6 @@
|
|
|
32
32
|
*/
|
|
33
33
|
export { aggregateElements } from "./ElementLoader.js";
|
|
34
34
|
export { AdapterFailure, ElementAssertionError, ElementLoaderError, assertRegistered, ensureRegistered, } from "./element-loader.js";
|
|
35
|
-
export { BUILT_IN_VIEWS, createEsmBackend } from "./esm-adapter.js";
|
|
35
|
+
export { BUILT_IN_VIEWS, createEsmBackend, mapEsmViewElements, } from "./esm-adapter.js";
|
|
36
36
|
export { createIifeBackend, DEFAULT_BUNDLE_HOST } from "./iife-adapter.js";
|
|
37
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loaders/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAcvD,OAAO,EACN,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loaders/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAcvD,OAAO,EACN,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["/**\n * PIE Element Loaders\n *\n * Deep `ElementLoader` primitive — the public entry point for registering\n * PIE custom elements at runtime. Exposes `ensureRegistered` (async) and\n * `assertRegistered` (sync) with a truthful promise contract: the returned\n * promise resolves iff every requested tag is actually in `customElements`.\n *\n * Backends (IIFE, ESM) are internal adapter modules; they implement the\n * `ElementLoaderBackend` interface and are wired via `{ backend: ... }`\n * options.\n *\n * @example\n * ```typescript\n * import {\n * ensureRegistered,\n * BundleType,\n * } from \"@pie-players/pie-players-shared/loaders\";\n *\n * await ensureRegistered(\n * { \"pie-multiple-choice\": \"@pie-element/multiple-choice@11.0.1\" },\n * {\n * backend: {\n * kind: \"iife\",\n * bundleHost: \"https://proxy.pie-api.com/bundles/\",\n * bundleType: BundleType.clientPlayer,\n * needsControllers: true,\n * },\n * },\n * );\n * ```\n */\n\nexport type { ElementMap } from \"./ElementLoader.js\";\nexport { aggregateElements } from \"./ElementLoader.js\";\n\n// ElementLoader primitive — truthful-promise loader. The public entry point\n// for ensureRegistered / assertRegistered.\nexport type {\n\tBackendContext,\n\tBackendOption,\n\tElementLoaderBackend,\n\tElementTag,\n\tEnsureRegisteredOptions,\n\tEsmBackendConfig,\n\tIifeBackendConfig,\n\tRegistrationFailureReason,\n} from \"./element-loader.js\";\nexport {\n\tAdapterFailure,\n\tElementAssertionError,\n\tElementLoaderError,\n\tassertRegistered,\n\tensureRegistered,\n} from \"./element-loader.js\";\nexport type {\n\tBuiltInEsmCdnProviderName,\n\tEsmBackend,\n\tEsmCdnProvider,\n\tEsmCdnProviderName,\n\tEsmCdnProviderOption,\n\tViewConfig,\n} from \"./esm-adapter.js\";\nexport {\n\tBUILT_IN_VIEWS,\n\tcreateEsmBackend,\n\tmapEsmViewElements,\n} from \"./esm-adapter.js\";\nexport type {\n\tIifeBackend,\n\tIifeBundleRetryStatus,\n} from \"./iife-adapter.js\";\nexport { createIifeBackend, DEFAULT_BUNDLE_HOST } from \"./iife-adapter.js\";\n"]}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { BUILDER_BUNDLE_URL } from "../config/profile.js";
|
|
8
8
|
import { mergeObjectsIgnoringNullUndefined } from "../object/index.js";
|
|
9
|
+
import { wrapModelRichContent } from "../security/wrap-model-rich-content.js";
|
|
9
10
|
import { editorPostFix } from "../types/index.js";
|
|
10
11
|
import { createPieLogger, isGlobalDebugEnabled } from "./logger.js";
|
|
11
12
|
import { initializeMathRendering } from "./math-rendering.js";
|
|
@@ -68,7 +69,7 @@ const initializePieElement = (element, options) => {
|
|
|
68
69
|
role: env.role,
|
|
69
70
|
});
|
|
70
71
|
// Set model directly - server already processed it
|
|
71
|
-
element.model = model;
|
|
72
|
+
element.model = wrapModelRichContent(model);
|
|
72
73
|
}
|
|
73
74
|
else {
|
|
74
75
|
// Controller available - run client-side processing (client-player.js bundle)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initialization.js","sourceRoot":"","sources":["../../src/pie/initialization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAO1D,OAAO,EACN,UAAU,EACV,0BAA0B,EAC1B,cAAc,EACd,MAAM,GACN,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACN,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,GACvB,MAAM,YAAY,CAAC;AAEpB,+FAA+F;AAC/F,MAAM,MAAM,GAAG,eAAe,CAAC,oBAAoB,EAAE,GAAG,EAAE,CACzD,oBAAoB,EAAE,CACtB,CAAC;AAEF,2CAA2C;AAC3C,MAAM,cAAc,GAA2B;IAC9C,gBAAgB,EAAE,kBAAkB;IACpC,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,iEAAiE;IAChG,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;CACxC,CAAC;AAeF;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAC5B,OAAmB,EACnB,OAKC,EACM,EAAE;IACT,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IACzD,IAAK,OAAe,CAAC,gBAAgB,EAAE,CAAC;QACvC,OAAO;IACR,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAE9C,MAAM,CAAC,KAAK,CAAC,uCAAuC,OAAO,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE7E,8BAA8B;IAC9B,IAAI,KAAK,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAa,CAAC;IACzE,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,0FAA0F;QAC1F,sFAAsF;QACtF,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,aAAa,IAAI,aAAa,CAAC,UAAU,KAAK,UAAU,CAAC,YAAY,EAAE,CAAC;YAC3E,MAAM,CAAC,IAAI,CACV,0DAA0D,OAAO,IAAI,OAAO,CAAC,EAAE,4BAA4B,CAC3G,CAAC;QACH,CAAC;QACD,OAAO;IACR,CAAC;IAED,iEAAiE;IACjE,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1E,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC;IAChC,OAAe,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACzC,MAAM,CAAC,KAAK,CACX,0CAA0C,OAAO,IAAI,OAAO,CAAC,EAAE,GAAG,EAClE,cAAc,CACd,CAAC;IAEF,wGAAwG;IACxG,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,CAAC,KAAK,CACX,uDAAuD,OAAO,EAAE,CAChE,CAAC;QACF,MAAM,IAAI,KAAK,CACd,uBAAuB,OAAO,0DAA0D,CACxF,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,4EAA4E;QAC5E,MAAM,CAAC,KAAK,CACX,+CAA+C,OAAO,gCAAgC,CACtF,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,2DAA2D,EAAE;YACzE,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,kBAAkB,EAAE,iBAAiB,IAAI,KAAK;YAC9C,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;SACd,CAAC,CAAC;QAEH,mDAAmD;QACnD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;SAAM,CAAC;QACP,8EAA8E;QAC9E,8DAA8D;QAC9D,MAAM,CAAC,KAAK,CACX,+CAA+C,OAAO,gCAAgC,CACtF,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,cAAc,EAAE,CAAC;QACpB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YACpD,OAAO,CAAC,gBAAgB,CAAC,GAAU,EAAE,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACJ,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAAC,cAAsB,EAAE,GAAW,EAAU,EAAE,CAC/E,wBAAwB,CACvB,cAAc,GAAG,aAAa,EAC9B,0BAA0B,GAAG,EAAE,CAC/B,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAC/B,cAAsB,EACtB,MAAoB,EACpB,OAAc,EACd,OAA+B,EAC/B,OAAO,GAAG,KAAK,EACR,EAAE;IACT,gBAAgB,CAAC,cAAc,EAAE;QAChC,MAAM;QACN,OAAO;QACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QACxC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,cAAc,CAAC,IAAI;YAC/C,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC;SACtD,CAAC;KACF,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,6BAA6B,GAAG,CACrC,aAAyB,EACzB,MAAoB,EACpB,OAAc,EACd,QAAqB,EACrB,OAA+B,EACb,EAAE;IACpB,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,qBAAqB,GAAG,CAC7B,IAAU,EACV,SAA8B,EACpB,EAAE;QACZ,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACtD,OAAO,IAAI,YAAY,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QACnB,MAAM,CAAC,KAAK,CACX,+DAA+D,EAC/D,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAC1B,CAAC;IACH,CAAC;SAAM,CAAC;QACP,MAAM,CAAC,KAAK,CACX,0HAA0H,CAC1H,CAAC;IACH,CAAC;IACD,MAAM,CAAC,KAAK,CACX,kDAAkD,EAClD,MAAM,CAAC,QAAQ,CACf,CAAC;IAEF,sFAAsF;IACtF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,kBAAkB,GAAG;YAC3B,MAAM;YACN,OAAO;YACP,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE;QACzD,MAAM,cAAc,GAAG,wBAAwB,CAC9C,MAAM,EACN,sCAAsC,MAAM,CAAC,GAAG,CAAC,EAAE,CACnD,CAAC;QACF,MAAM,CAAC,KAAK,CACX,uDAAuD,cAAc,OAAO,GAAG,EAAE,CACjF,CAAC;QAEF,gEAAgE;QAChE,iEAAiE;QACjE,mEAAmE;QACnE,gEAAgE;QAChE,2CAA2C;QAC3C,IAAI,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACxC,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAElE,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC9C,MAAM,YAAY,GAAG,uBAAuB,CAC3C,cAAc,EACd,MAAM,CAAC,GAAG,CAAC,CACX,CAAC;gBACF,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACvE,CAAC;YACD,OAAO;QACR,CAAC;QAED,gEAAgE;QAChE,iEAAiE;QACjE,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,yDAAyD;YACzD,yDAAyD;YACzD,mDAAmD;YACnD,8DAA8D;YAC9D,oDAAoD;YACpD,6DAA6D;YAC7D,6DAA6D;YAC7D,6DAA6D;YAC7D,MAAM,CAAC,IAAI,CACV,6CAA6C,cAAc,+HAA+H,CAC1L,CAAC;YACF,OAAO;QACR,CAAC;QAED,MAAM,WAAW,GAAG,wBAAwB,CAAC,GAAa,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CACX,6DAA6D,WAAW,GAAG,CAC3E,CAAC;QAEF,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CACX,qDAAqD,EACrD,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CACnC,CAAC;QAEF,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CACX,8CAA8C,WAAW,wBAAwB,CACjF,CAAC;YACF,MAAM,CAAC,KAAK,CACX,gDAAgD,WAAW,GAAG,CAC9D,CAAC;YACF,MAAM,CAAC,KAAK,CACX,qDAAqD,EACrD,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAC1B,CAAC;YACF,MAAM,IAAI,KAAK,CACd,OAAO,WAAW,iBAAiB,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAC/D,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAK,CACX,mDAAmD,WAAW,GAAG,EACjE;YACC,aAAa,EAAE,CAAC,CAAC,WAAW,CAAC,UAAU;YACvC,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO;YACjC,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM;YAC/B,cAAc,EAAE,WAAW,CAAC,UAAU;gBACrC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;gBACrC,CAAC,CAAC,EAAE;YACL,UAAU,EAAE,OAAO,CAAC,UAAU;SAC9B,CACD,CAAC;QAEF,oDAAoD;QACpD,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,CAAC,YAAY,EAAE,CAAC;gBACpD,MAAM,CAAC,KAAK,CACX,uEAAuE,WAAW,GAAG,CACrF,CAAC;gBACF,MAAM,CAAC,KAAK,CACX,gDAAgD,OAAO,CAAC,UAAU,yBAAyB,CAC3F,CAAC;gBACF,MAAM,IAAI,KAAK,CACd,2BAA2B,WAAW,sDAAsD,CAC5F,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,KAAK,CACX,8DAA8D,WAAW,qDAAqD,CAC9H,CAAC;YACH,CAAC;QACF,CAAC;QAED,CAAC;YACA,uCAAuC;YACvC,MAAM,CAAC,KAAK,CACX,+CAA+C,MAAM,eACpD,WAAW,CAAC,UAAU;gBACrB,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,4CACJ,EAAE,CACF,CAAC;YACF,QAAQ,CAAC,cAAc,CAAC,GAAG;gBAC1B,OAAO,EAAE,GAAa;gBACtB,MAAM,EAAE,MAAM,CAAC,OAAO;gBACtB,OAAO,EAAE,cAAc;gBACvB,UAAU,EAAE,WAAW,CAAC,UAAU,IAAI,IAAI;gBAC1C,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;aAC9B,CAAC;YAEF,IAAI,0BAA0B,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,yBAAyB,CACxB,cAAc,EACd,WAAW,CAAC,OAAO,EACnB,sCAAsC,MAAM,CAAC,GAAG,CAAC,EAAE,CACnD,CAAC;gBAEF,+BAA+B;gBAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI,QAAQ,CAAC;gBACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;gBAC7D,MAAM,CAAC,KAAK,CACX,yCAAyC,QAAQ,CAAC,MAAM,sBAAsB,cAAc,GAAG,CAC/F,CAAC;gBAEF,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oBACvB,oBAAoB,CAAC,EAAgB,EAAE;wBACtC,MAAM;wBACN,OAAO;wBACP,GAAG,EAAE,OAAO,CAAC,GAAG;wBAChB,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,cAAc,CAAC;qBACxD,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,yBAAyB;gBACzB,QAAQ,CAAC,cAAc,CAAC,GAAG;oBAC1B,GAAG,QAAQ,CAAC,cAAc,CAAC;oBAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;iBACrB,CAAC;gBAEF,QAAQ,CAAC,IAAI,CACZ,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBACpD,MAAM,CAAC,KAAK,CACX,gEAAgE,EAChE,cAAc,CACd,CAAC;gBACH,CAAC,CAAC,CACF,CAAC;gBAEF,+DAA+D;gBAC/D,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;oBACjC,MAAM,CAAC,mBAAmB,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,EAAE,EAAE;wBAC/D,2DAA2D;wBAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC;wBAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;4BACd,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;4BAC/D,OAAO;wBACR,CAAC;wBAED,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;4BAC9B,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gCACnC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oCACpC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;wCACzC,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;4CACrD,OAAO;wCACR,CAAC;wCACD,MAAM,OAAO,GAAI,IAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;wCACxD,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;4CACvB,oBAAoB,CAAC,IAAkB,EAAE;gDACxC,MAAM,EAAE,OAAO,CAAC,MAAM;gDACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gDACxB,GAAG,EAAE,OAAO,CAAC,GAAG;gDAChB,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC;6CACjD,CAAC,CAAC;wCACJ,CAAC;wCAED,gCAAgC;wCAC/B,IAAgB;6CACf,gBAAgB,CAAC,GAAG,CAAC;6CACrB,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;4CACtB,IACC,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EACnD,CAAC;gDACF,OAAO;4CACR,CAAC;4CACD,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;4CACrD,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gDAC5B,oBAAoB,CAAC,SAAuB,EAAE;oDAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;oDACtB,OAAO,EAAE,OAAO,CAAC,OAAO;oDACxB,GAAG,EAAE,OAAO,CAAC,GAAG;oDAChB,cAAc,EACb,OAAO,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC;iDACvC,CAAC,CAAC;4CACJ,CAAC;wCACF,CAAC,CAAC,CAAC;oCACL,CAAC;gCACF,CAAC,CAAC,CAAC;4BACJ,CAAC;wBACF,CAAC,CAAC,CAAC;oBACJ,CAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;wBACjD,SAAS,EAAE,IAAI;wBACf,OAAO,EAAE,IAAI;qBACb,CAAC,CAAC;gBACJ,CAAC;gBAED,mCAAmC;gBACnC,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;oBAC9C,IAAI,0BAA0B,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;wBACvD,MAAM,YAAY,GAAG,uBAAuB,CAC3C,cAAc,EACd,MAAM,CAAC,GAAG,CAAC,CACX,CAAC;wBACF,yBAAyB,CACxB,YAAY,EACZ,WAAW,CAAC,SAAS,EACrB,0BAA0B,MAAM,CAAC,GAAG,CAAC,EAAE,CACvC,CAAC;wBACF,QAAQ,CAAC,IAAI,CACZ,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;4BAClD,MAAM,CAAC,KAAK,CACX,sEAAsE,YAAY,EAAE,CACpF,CAAC;wBACH,CAAC,CAAC,CACF,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACP,MAAM,CAAC,KAAK,CACX,qDAAqD,WAAW,6CAA6C,EAC7G,WAAW,CAAC,SAAS,CACrB,CAAC;oBACH,CAAC;gBACF,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,KAAK,CACX,mDAAmD,WAAW,6CAA6C,CAC3G,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC7C,MAAoB,EACpB,OAAc,EACd,OAA+B,EAAE,EAC1B,EAAE;IACT,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,iCAAiC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAExE,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACtE,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QACzC,6BAA6B,CAC5B,aAAa,EACb,MAAM,EACN,OAAO,EACP,QAAQ,EACR,OAAO,CACP,CAAC;QACF,OAAO;IACR,CAAC;IAED,MAAM,CAAC,KAAK,CACX,oOAAoO,CACpO,CAAC;IACF,6BAA6B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EACjC,MAAoB,EACpB,OAAc,EACd,OAA+B,EAAE,EAG/B,EAAE;IACJ,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACxC,CAAC;IAED,8DAA8D;IAC9D,MAAM,uBAAuB,EAAE,CAAC;IAEhC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,iCAAiC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,uBAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,OAAO,CAAO,CAAC,WAAW,EAAE,EAAE;QACrD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;YACzD,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBACrD,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;gBAEzC,4DAA4D;gBAC5D,MAAM,oBAAoB,GAAG,6BAA6B,CACzD,aAAa,EACb,MAAM,EACN,OAAO,EACP,QAAQ,EACR,OAAO,CACP,CAAC;gBAEF,+CAA+C;gBAC/C,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,KAAK,CACX,oEAAoE,EACpE,GAAG,CACH,CAAC;gBACF,WAAW,EAAE,CAAC;YACf,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,WAAW,CAAC;IAClB,OAAO,EAAE,OAAO,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,QAAgB,EAAiB,EAAE;IAC7E,MAAM,uBAAuB,EAAE,CAAC;IAChC,MAAM,iBAAiB,CACtB,QAAQ,EACR,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAC/B,KAAK,EAAE,SAAS,EAAE,EAAE;QACnB,4CAA4C;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC;QACvB,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC,+BAA+B;QAEhE,0BAA0B;QAC1B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC,CACD,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAC3C,QAAgB,EAChB,MAAoB,EACpB,OAAc,EACd,OAA+B,EAAE,EACjB,EAAE;IAClB,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;QACzD,+CAA+C;QAC/C,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,KAAK,EAC9B,QAAgB,EAChB,OAA4C,EAC5C,GAAsC,EACzB,EAAE;IACf,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB;QAC3C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC;QACrD,CAAC,CAAC,QAAQ,CAAC;IACZ,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC;QACJ,OAAO,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;YAAS,CAAC;QACV,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;AACF,CAAC,CAAC","sourcesContent":["/**\n * PIE Initialization Module\n *\n * Bundle loading and element initialization logic.\n * This is the core of the PIE player system.\n */\n\nimport { BUILDER_BUNDLE_URL } from \"../config/profile.js\";\nimport { mergeObjectsIgnoringNullUndefined } from \"../object/index.js\";\nimport type { ConfigEntity, Env, PieModel } from \"../types/index.js\";\nimport { editorPostFix } from \"../types/index.js\";\nimport { createPieLogger, isGlobalDebugEnabled } from \"./logger.js\";\nimport { initializeMathRendering } from \"./math-rendering.js\";\nimport { pieRegistry } from \"./registry.js\";\nimport { findPieController } from \"./scoring.js\";\nimport { defineCustomElementSafely } from \"./custom-element-define.js\";\nimport { validateCustomElementTag } from \"./tag-names.js\";\nimport type {\n\tEventListeners,\n\tLoadPieElementsOptions,\n\tPieElement,\n\tPieRegistry,\n} from \"./types.js\";\nimport {\n\tBundleType,\n\tisCustomElementConstructor,\n\tisPieAvailable,\n\tStatus,\n} from \"./types.js\";\nimport { updatePieElement } from \"./updates.js\";\nimport {\n\tfindOrAddSession,\n\tgetPackageWithoutVersion,\n\tgetPieElementBundlesUrl,\n} from \"./utils.js\";\n\n// Create module-level logger (respects global debug flag - pass function for dynamic checking)\nconst logger = createPieLogger(\"pie-initialization\", () =>\n\tisGlobalDebugEnabled(),\n);\n\n// Default options for loading PIE elements\nconst defaultOptions: LoadPieElementsOptions = {\n\tbuildServiceBase: BUILDER_BUNDLE_URL,\n\tbundleType: BundleType.player, // Default to player.js (no controllers, server-processed models)\n\tenv: { mode: \"gather\", role: \"student\" },\n};\n\n// Add this to your window types\ndeclare global {\n\tinterface Window {\n\t\t_pieElementObserver?: MutationObserver;\n\t\t_pieCurrentContext?: {\n\t\t\tconfig: ConfigEntity;\n\t\t\tsession: any[];\n\t\t\tenv?: Env;\n\t\t\tcontainer?: Element | Document;\n\t\t};\n\t}\n}\n\n/**\n * Helper function to initialize a PIE element\n */\nconst initializePieElement = (\n\telement: PieElement,\n\toptions: {\n\t\tconfig: ConfigEntity;\n\t\tsession: any[];\n\t\tenv?: Env;\n\t\teventListeners?: EventListeners;\n\t},\n): void => {\n\tconst { config, session, env, eventListeners } = options;\n\tif ((element as any).__pieInitialized) {\n\t\treturn;\n\t}\n\tconst tagName = element.tagName.toLowerCase();\n\n\tlogger.debug(`[initializePieElement] Initializing ${tagName}#${element.id}`);\n\n\t// Find model for this element\n\tlet model = config?.models?.find((m) => m.id === element.id) as PieModel;\n\tif (!model) {\n\t\t// Only warn if this element is from a client-player.js bundle (where models are expected)\n\t\t// player.js bundles use server-processed models, so missing models are expected there\n\t\tconst registry = pieRegistry();\n\t\tconst registryEntry = registry[tagName];\n\n\t\tif (registryEntry && registryEntry.bundleType === BundleType.clientPlayer) {\n\t\t\tlogger.warn(\n\t\t\t\t`[initializePieElement] Model not found for PIE element ${tagName}#${element.id} (client-player.js bundle)`,\n\t\t\t);\n\t\t}\n\t\treturn;\n\t}\n\n\t// Set session (with element property for updateSession callback)\n\tconst elementSession = findOrAddSession(session, model.id, model.element);\n\telement.session = elementSession;\n\t(element as any).__pieInitialized = true;\n\tlogger.debug(\n\t\t`[initializePieElement] Session set for ${tagName}#${element.id}:`,\n\t\telementSession,\n\t);\n\n\t// Set model - use controller if available (client-player.js), or use server-processed model (player.js)\n\tconst controller = findPieController(tagName);\n\n\tif (!env) {\n\t\tlogger.error(\n\t\t\t`[initializePieElement] ❌ FATAL: No env provided for ${tagName}`,\n\t\t);\n\t\tthrow new Error(\n\t\t\t`No env provided for ${tagName}. PIE elements require an env object with mode and role.`,\n\t\t);\n\t}\n\n\tif (!controller) {\n\t\t// No controller available - using server-processed model (player.js bundle)\n\t\tlogger.debug(\n\t\t\t`[initializePieElement] ℹ️ No controller for ${tagName}, using server-processed model`,\n\t\t);\n\t\tlogger.debug(`[initializePieElement] Model already processed by server:`, {\n\t\t\tid: model.id,\n\t\t\telement: model.element,\n\t\t\thasCorrectResponse: \"correctResponse\" in model,\n\t\t\tmode: env.mode,\n\t\t\trole: env.role,\n\t\t});\n\n\t\t// Set model directly - server already processed it\n\t\telement.model = model;\n\t} else {\n\t\t// Controller available - run client-side processing (client-player.js bundle)\n\t\t// Note: updatePieElementWithRef handles controller invocation\n\t\tlogger.debug(\n\t\t\t`[initializePieElement] Controller found for ${tagName}, will invoke model() function`,\n\t\t);\n\t}\n\n\t// Add event listeners\n\tif (eventListeners) {\n\t\tObject.entries(eventListeners).forEach(([evt, fn]) => {\n\t\t\telement.addEventListener(evt as any, fn);\n\t\t});\n\t}\n};\n\nconst getEditorElementTagName = (elementTagName: string, pkg: string): string =>\n\tvalidateCustomElementTag(\n\t\telementTagName + editorPostFix,\n\t\t`editor element tag for ${pkg}`,\n\t);\n\nconst updateRegisteredElement = (\n\telementTagName: string,\n\tconfig: ConfigEntity,\n\tsession: any[],\n\toptions: LoadPieElementsOptions,\n\tomitEnv = false,\n): void => {\n\tupdatePieElement(elementTagName, {\n\t\tconfig,\n\t\tsession,\n\t\t...(omitEnv ? {} : { env: options.env }),\n\t\tcontainer: options.container,\n\t\t...(options.eventListeners?.[elementTagName] && {\n\t\t\teventListeners: options.eventListeners[elementTagName],\n\t\t}),\n\t});\n};\n\n/**\n * Shared element registration logic\n * Extracted from initializePiesFromLoadedBundle and loadPieModule to eliminate ~200 lines of duplication\n * Also fixes MutationObserver memory leak by storing latest config/session in window context\n *\n * `elementModule` may be `null`. In that case we cannot register *new*\n * tags (no element constructor source), but we can still update tags\n * that another loader (e.g. the section-player's IIFE adapter) has\n * already registered with `customElements`. This is the common case\n * when `pie-item-player` mounts inside `pie-section-player`: the\n * section player has already pre-warmed the bundle through the deep\n * `ElementLoader` primitive, so the `window.pie.default` bundle-global\n * path is not required for those tags.\n */\nconst registerPieElementsFromBundle = (\n\telementModule: any | null,\n\tconfig: ConfigEntity,\n\tsession: any[],\n\tregistry: PieRegistry,\n\toptions: LoadPieElementsOptions,\n): Promise<void>[] => {\n\tconst promises: Promise<void>[] = [];\n\tconst isNodeWithinContainer = (\n\t\tnode: Node,\n\t\tcontainer?: Element | Document,\n\t): boolean => {\n\t\tif (!container || container === document) return true;\n\t\treturn node instanceof Node && container.contains(node);\n\t};\n\n\tif (elementModule) {\n\t\tlogger.debug(\n\t\t\t\"[registerPieElementsFromBundle] Available packages in bundle:\",\n\t\t\tObject.keys(elementModule),\n\t\t);\n\t} else {\n\t\tlogger.debug(\n\t\t\t\"[registerPieElementsFromBundle] No bundle module supplied; will only update tags already registered with customElements.\",\n\t\t);\n\t}\n\tlogger.debug(\n\t\t\"[registerPieElementsFromBundle] config.elements:\",\n\t\tconfig.elements,\n\t);\n\n\t// Store latest config/session in window so MutationObserver can access current values\n\tif (typeof window !== \"undefined\") {\n\t\twindow._pieCurrentContext = {\n\t\t\tconfig,\n\t\t\tsession,\n\t\t\tenv: options.env,\n\t\t\tcontainer: options.container,\n\t\t};\n\t}\n\n\tObject.entries(config.elements).forEach(([elName, pkg]) => {\n\t\tconst elementTagName = validateCustomElementTag(\n\t\t\telName,\n\t\t\t`element tag in config.elements for ${String(pkg)}`,\n\t\t);\n\t\tlogger.debug(\n\t\t\t`[registerPieElementsFromBundle] Processing element: ${elementTagName} -> ${pkg}`,\n\t\t);\n\n\t\t// Fast path — the tag is already registered with customElements\n\t\t// (typically by the host's pre-warm pipeline). We can update its\n\t\t// session/model bindings without needing the bundle module at all.\n\t\t// This branch is also the one that runs when `elementModule` is\n\t\t// `null` because `window.pie` was missing.\n\t\tif (customElements.get(elementTagName)) {\n\t\t\tupdateRegisteredElement(elementTagName, config, session, options);\n\n\t\t\tif (options.bundleType === BundleType.editor) {\n\t\t\t\tconst editorElName = getEditorElementTagName(\n\t\t\t\t\telementTagName,\n\t\t\t\t\tString(pkg),\n\t\t\t\t);\n\t\t\t\tupdateRegisteredElement(editorElName, config, session, options, true);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// From here on we are in the \"register a new tag\" branch, which\n\t\t// requires a bundle module to read the element constructor from.\n\t\tif (!elementModule) {\n\t\t\t// A missing bundle module + an unregistered tag is *not*\n\t\t\t// always an error: in the section-player composition the\n\t\t\t// host's own `ElementLoader` may register this tag\n\t\t\t// out-of-band moments later, in which case `updatePieElement`\n\t\t\t// will pick it up on the next reactive pass via the\n\t\t\t// MutationObserver / `whenDefined` paths. Log at warn so the\n\t\t\t// transient miss is still visible during diagnostics without\n\t\t\t// printing a red stack trace for a routine timing condition.\n\t\t\tlogger.warn(\n\t\t\t\t`[registerPieElementsFromBundle] Skipping \"${elementTagName}\" — no bundle module available and the tag is not yet registered. Will bind on next update if the host's loader registers it.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pkgStripped = getPackageWithoutVersion(pkg as string);\n\t\tlogger.debug(\n\t\t\t`[registerPieElementsFromBundle] Package without version: \"${pkgStripped}\"`,\n\t\t);\n\n\t\tconst elementData = elementModule[pkgStripped];\n\t\tlogger.debug(\n\t\t\t`[registerPieElementsFromBundle] elementData result:`,\n\t\t\telementData ? \"FOUND\" : \"UNDEFINED\",\n\t\t);\n\n\t\tif (!elementData) {\n\t\t\tlogger.error(\n\t\t\t\t`[registerPieElementsFromBundle] ❌ Package \"${pkgStripped}\" not found in bundle!`,\n\t\t\t);\n\t\t\tlogger.error(\n\t\t\t\t`[registerPieElementsFromBundle] Lookup key: \"${pkgStripped}\"`,\n\t\t\t);\n\t\t\tlogger.error(\n\t\t\t\t`[registerPieElementsFromBundle] Available packages:`,\n\t\t\t\tObject.keys(elementModule),\n\t\t\t);\n\t\t\tthrow new Error(\n\t\t\t\t`pie ${pkgStripped} not found in ${Object.keys(elementModule)}`,\n\t\t\t);\n\t\t}\n\n\t\tlogger.debug(\n\t\t\t`[registerPieElementsFromBundle] elementData for ${pkgStripped}:`,\n\t\t\t{\n\t\t\t\thasController: !!elementData.controller,\n\t\t\t\thasElement: !!elementData.Element,\n\t\t\t\thasConfig: !!elementData.config,\n\t\t\t\tcontrollerKeys: elementData.controller\n\t\t\t\t\t? Object.keys(elementData.controller)\n\t\t\t\t\t: [],\n\t\t\t\tbundleType: options.bundleType,\n\t\t\t},\n\t\t);\n\n\t\t// Validate controller presence based on bundle type\n\t\tif (!elementData.controller) {\n\t\t\tif (options.bundleType === BundleType.clientPlayer) {\n\t\t\t\tlogger.error(\n\t\t\t\t\t`[registerPieElementsFromBundle] ❌ CRITICAL: No controller found for ${pkgStripped}!`,\n\t\t\t\t);\n\t\t\t\tlogger.error(\n\t\t\t\t\t`[registerPieElementsFromBundle] Bundle type: ${options.bundleType} (controllers required)`,\n\t\t\t\t);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No controller found for ${pkgStripped}. client-player.js bundles MUST include controllers!`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlogger.debug(\n\t\t\t\t\t`[registerPieElementsFromBundle] ℹ️ No controller found for ${pkgStripped} - using server-processed models (player.js bundle)`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\t// Register the element in our registry\n\t\t\tlogger.debug(\n\t\t\t\t`[registerPieElementsFromBundle] Registering ${elName} in registry${\n\t\t\t\t\telementData.controller\n\t\t\t\t\t\t? \" with controller\"\n\t\t\t\t\t\t: \" (no controller - server-processed models)\"\n\t\t\t\t}`,\n\t\t\t);\n\t\t\tregistry[elementTagName] = {\n\t\t\t\tpackage: pkg as string,\n\t\t\t\tstatus: Status.loading,\n\t\t\t\ttagName: elementTagName,\n\t\t\t\tcontroller: elementData.controller || null,\n\t\t\t\tconfig: elementData.config,\n\t\t\t\tbundleType: options.bundleType,\n\t\t\t};\n\n\t\t\tif (isCustomElementConstructor(elementData.Element)) {\n\t\t\t\tdefineCustomElementSafely(\n\t\t\t\t\telementTagName,\n\t\t\t\t\telementData.Element,\n\t\t\t\t\t`element tag in config.elements for ${String(pkg)}`,\n\t\t\t\t);\n\n\t\t\t\t// Initialize existing elements\n\t\t\t\tconst searchRoot = options.container || document;\n\t\t\t\tconst elements = searchRoot.querySelectorAll(elementTagName);\n\t\t\t\tlogger.debug(\n\t\t\t\t\t`[registerPieElementsFromBundle] Found ${elements.length} elements for tag '${elementTagName}'`,\n\t\t\t\t);\n\n\t\t\t\telements.forEach((el) => {\n\t\t\t\t\tinitializePieElement(el as PieElement, {\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\tenv: options.env,\n\t\t\t\t\t\teventListeners: options.eventListeners?.[elementTagName],\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\t// Update registry status\n\t\t\t\tregistry[elementTagName] = {\n\t\t\t\t\t...registry[elementTagName],\n\t\t\t\t\tstatus: Status.loaded,\n\t\t\t\t};\n\n\t\t\t\tpromises.push(\n\t\t\t\t\tcustomElements.whenDefined(elementTagName).then(() => {\n\t\t\t\t\t\tlogger.debug(\n\t\t\t\t\t\t\t\"[registerPieElementsFromBundle] defined custom PIE element: %s\",\n\t\t\t\t\t\t\telementTagName,\n\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\t// Setup MutationObserver that uses current context (only once)\n\t\t\t\tif (!window._pieElementObserver) {\n\t\t\t\t\twindow._pieElementObserver = new MutationObserver((mutations) => {\n\t\t\t\t\t\t// Use current context from window instead of stale closure\n\t\t\t\t\t\tconst context = window._pieCurrentContext;\n\t\t\t\t\t\tif (!context) {\n\t\t\t\t\t\t\tlogger.warn(\"[MutationObserver] No current context available\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmutations.forEach((mutation) => {\n\t\t\t\t\t\t\tif (mutation.type === \"childList\") {\n\t\t\t\t\t\t\t\tmutation.addedNodes.forEach((node) => {\n\t\t\t\t\t\t\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t\t\t\t\t\t\tif (!isNodeWithinContainer(node, context.container)) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tconst tagName = (node as Element).tagName.toLowerCase();\n\t\t\t\t\t\t\t\t\t\tif (registry[tagName]) {\n\t\t\t\t\t\t\t\t\t\t\tinitializePieElement(node as PieElement, {\n\t\t\t\t\t\t\t\t\t\t\t\tconfig: context.config,\n\t\t\t\t\t\t\t\t\t\t\t\tsession: context.session,\n\t\t\t\t\t\t\t\t\t\t\t\tenv: context.env,\n\t\t\t\t\t\t\t\t\t\t\t\teventListeners: options.eventListeners?.[tagName],\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Check children of added nodes\n\t\t\t\t\t\t\t\t\t\t(node as Element)\n\t\t\t\t\t\t\t\t\t\t\t.querySelectorAll(\"*\")\n\t\t\t\t\t\t\t\t\t\t\t.forEach((childNode) => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\t!isNodeWithinContainer(childNode, context.container)\n\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tconst childTagName = childNode.tagName.toLowerCase();\n\t\t\t\t\t\t\t\t\t\t\t\tif (registry[childTagName]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tinitializePieElement(childNode as PieElement, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconfig: context.config,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsession: context.session,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tenv: context.env,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\teventListeners:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toptions.eventListeners?.[childTagName],\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\twindow._pieElementObserver.observe(document.body, {\n\t\t\t\t\t\tchildList: true,\n\t\t\t\t\t\tsubtree: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Handle editor elements if needed\n\t\t\t\tif (options.bundleType === BundleType.editor) {\n\t\t\t\t\tif (isCustomElementConstructor(elementData.Configure)) {\n\t\t\t\t\t\tconst editorElName = getEditorElementTagName(\n\t\t\t\t\t\t\telementTagName,\n\t\t\t\t\t\t\tString(pkg),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdefineCustomElementSafely(\n\t\t\t\t\t\t\teditorElName,\n\t\t\t\t\t\t\telementData.Configure,\n\t\t\t\t\t\t\t`editor element tag for ${String(pkg)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tpromises.push(\n\t\t\t\t\t\t\tcustomElements.whenDefined(editorElName).then(() => {\n\t\t\t\t\t\t\t\tlogger.debug(\n\t\t\t\t\t\t\t\t\t`[registerPieElementsFromBundle] defined custom PIE editor element: ${editorElName}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\t`[registerPieElementsFromBundle] pie.Configure for ${pkgStripped} is not a valid custom element constructor.`,\n\t\t\t\t\t\t\telementData.configure,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlogger.error(\n\t\t\t\t\t`[registerPieElementsFromBundle] pie.Element for ${pkgStripped} is not a valid custom element constructor.`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn promises;\n};\n\n/**\n * Initialize PIE elements from a bundle that may already be loaded.\n *\n * `window.pie` is the IIFE bundle-loading global populated by\n * `loadPieModule` / `loadBundleFromString`. When the host loaded the\n * bundle through the deep `ElementLoader` primitive instead — as\n * `pie-section-player` does — the global is irrelevant: the loader\n * registers tags directly with `customElements`, so this function only\n * needs to bind models/sessions to whatever is already registered.\n *\n * Behavior:\n * - `window.pie` available → register any new tags from the bundle and\n * update bindings for already-registered tags.\n * - `window.pie` missing → fall back to the update-only path. Tags that\n * are already registered get their model/session updated; tags that\n * are not yet registered are logged at `warn` and left alone — the\n * host's loader is expected to register them imminently, after which\n * the existing `MutationObserver` / `updatePieElements` flow binds\n * them on the next reactive pass.\n *\n * The original blanket `window.pie not found; was the bundle inlined\n * correctly?` error has been removed: in the section-player + item-player\n * composition it produced a confusing red stack trace for a routine\n * timing condition that the host already handles. Genuine failures\n * (bundle not loaded by *anyone*) still surface — every unregistered tag\n * gets its own warning, and `updatePieElements` later reports any tag\n * that never resolves.\n */\nexport const initializePiesFromLoadedBundle = (\n\tconfig: ConfigEntity,\n\tsession: any[],\n\topts: LoadPieElementsOptions = {},\n): void => {\n\tconst registry = pieRegistry();\n\tconst options = mergeObjectsIgnoringNullUndefined(defaultOptions, opts);\n\n\tif (isPieAvailable(window)) {\n\t\tlogger.debug(\"[initializePiesFromLoadedBundle] window.pie available\");\n\t\tconst elementModule = window.pie.default;\n\t\tregisterPieElementsFromBundle(\n\t\t\telementModule,\n\t\t\tconfig,\n\t\t\tsession,\n\t\t\tregistry,\n\t\t\toptions,\n\t\t);\n\t\treturn;\n\t}\n\n\tlogger.debug(\n\t\t\"[initializePiesFromLoadedBundle] window.pie not present; using update-only path. Already-registered tags will be bound now; missing tags are expected to be registered by the host's loader and will bind on the next update pass.\",\n\t);\n\tregisterPieElementsFromBundle(null, config, session, registry, options);\n};\n\n/**\n * Load a PIE bundle from a URL and initialize elements\n */\nexport const loadPieModule = async (\n\tconfig: ConfigEntity,\n\tsession: any[],\n\topts: LoadPieElementsOptions = {},\n): Promise<{\n\tsession: any[];\n}> => {\n\tif (!session) {\n\t\tthrow new Error(\"session is required\");\n\t}\n\n\t// Initialize math-rendering module (required by PIE elements)\n\tawait initializeMathRendering();\n\n\tconst registry = pieRegistry();\n\tconst options = mergeObjectsIgnoringNullUndefined(defaultOptions, opts);\n\tconst url = opts.bundleUrl || getPieElementBundlesUrl(config, options);\n\tconst script = document.createElement(\"script\");\n\tscript.src = url;\n\tscript.defer = true;\n\tscript.onerror = () => {\n\t\tthrow new Error(`failed to load script: ${url}`);\n\t};\n\n\tconst loadPromise = new Promise<void>((loadResolve) => {\n\t\tscript.addEventListener(\"load\", () => {\n\t\t\tlogger.debug(\"[loadPieModule] Script loaded from:\", url);\n\t\t\tif (isPieAvailable(window)) {\n\t\t\t\tlogger.debug(\"[loadPieModule] window.pie available\");\n\t\t\t\tconst elementModule = window.pie.default;\n\n\t\t\t\t// Use shared registration logic (returns array of promises)\n\t\t\t\tconst registrationPromises = registerPieElementsFromBundle(\n\t\t\t\t\telementModule,\n\t\t\t\t\tconfig,\n\t\t\t\t\tsession,\n\t\t\t\t\tregistry,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\n\t\t\t\t// Wait for all element definitions to complete\n\t\t\t\tPromise.all(registrationPromises).then(() => loadResolve());\n\t\t\t} else {\n\t\t\t\tlogger.error(\n\t\t\t\t\t\"[loadPieModule] pie var not found; is %s a proper PIE IIFE module?\",\n\t\t\t\t\turl,\n\t\t\t\t);\n\t\t\t\tloadResolve();\n\t\t\t}\n\t\t});\n\t});\n\n\tdocument.head.appendChild(script);\n\tawait loadPromise;\n\treturn { session };\n};\n\n/**\n * Load a PIE bundle from a JavaScript string into window.pie (IIFE bundles only)\n * This only registers elements and controllers - does NOT initialize them.\n * For initialization, use initializePiesFromLoadedBundle after loading.\n */\nexport const loadBundleFromString = async (bundleJs: string): Promise<void> => {\n\tawait initializeMathRendering();\n\tawait withBlobBundleUrl(\n\t\tbundleJs,\n\t\t{ stripSourceMapComment: true },\n\t\tasync (bundleUrl) => {\n\t\t\t// Create a script tag to execute the bundle\n\t\t\tconst script = document.createElement(\"script\");\n\t\t\tscript.src = bundleUrl;\n\t\t\tscript.type = \"text/javascript\"; // IIFE bundles are standard JS\n\n\t\t\t// Wait for script to load\n\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\tscript.onload = () => resolve();\n\t\t\t\tscript.onerror = () => reject(new Error(\"Failed to load bundle\"));\n\t\t\t\tdocument.head.appendChild(script);\n\t\t\t});\n\n\t\t\tlogger.debug(\"[loadBundleFromString] Bundle loaded into window.pie\");\n\t\t},\n\t);\n};\n\n/**\n * Load a PIE bundle from a JavaScript string and initialize elements\n * Convenience wrapper around loadBundleFromString + loadPieModule\n */\nexport const loadPieModuleFromString = async (\n\tbundleJs: string,\n\tconfig: ConfigEntity,\n\tsession: any[],\n\topts: LoadPieElementsOptions = {},\n): Promise<void> => {\n\tawait withBlobBundleUrl(bundleJs, {}, async (bundleUrl) => {\n\t\t// Use existing loadPieModule with the blob URL\n\t\tawait loadPieModule(config, session, { ...opts, bundleUrl });\n\t});\n};\n\nconst withBlobBundleUrl = async <T>(\n\tbundleJs: string,\n\toptions: { stripSourceMapComment?: boolean },\n\trun: (bundleUrl: string) => Promise<T>,\n): Promise<T> => {\n\tconst source = options.stripSourceMapComment\n\t\t? bundleJs.replace(/\\/\\/# sourceMappingURL=.*$/m, \"\")\n\t\t: bundleJs;\n\tconst blob = new Blob([source], { type: \"application/javascript\" });\n\tconst bundleUrl = URL.createObjectURL(blob);\n\ttry {\n\t\treturn await run(bundleUrl);\n\t} finally {\n\t\tURL.revokeObjectURL(bundleUrl);\n\t}\n};\n"]}
|
|
1
|
+
{"version":3,"file":"initialization.js","sourceRoot":"","sources":["../../src/pie/initialization.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PIE Initialization Module\n *\n * Bundle loading and element initialization logic.\n * This is the core of the PIE player system.\n */\n\nimport { BUILDER_BUNDLE_URL } from \"../config/profile.js\";\nimport { mergeObjectsIgnoringNullUndefined } from \"../object/index.js\";\nimport { wrapModelRichContent } from \"../security/wrap-model-rich-content.js\";\nimport type { ConfigEntity, Env, PieModel } from \"../types/index.js\";\nimport { editorPostFix } from \"../types/index.js\";\nimport { createPieLogger, isGlobalDebugEnabled } from \"./logger.js\";\nimport { initializeMathRendering } from \"./math-rendering.js\";\nimport { pieRegistry } from \"./registry.js\";\nimport { findPieController } from \"./scoring.js\";\nimport { defineCustomElementSafely } from \"./custom-element-define.js\";\nimport { validateCustomElementTag } from \"./tag-names.js\";\nimport type {\n\tEventListeners,\n\tLoadPieElementsOptions,\n\tPieElement,\n\tPieRegistry,\n} from \"./types.js\";\nimport {\n\tBundleType,\n\tisCustomElementConstructor,\n\tisPieAvailable,\n\tStatus,\n} from \"./types.js\";\nimport { updatePieElement } from \"./updates.js\";\nimport {\n\tfindOrAddSession,\n\tgetPackageWithoutVersion,\n\tgetPieElementBundlesUrl,\n} from \"./utils.js\";\n\n// Create module-level logger (respects global debug flag - pass function for dynamic checking)\nconst logger = createPieLogger(\"pie-initialization\", () =>\n\tisGlobalDebugEnabled(),\n);\n\n// Default options for loading PIE elements\nconst defaultOptions: LoadPieElementsOptions = {\n\tbuildServiceBase: BUILDER_BUNDLE_URL,\n\tbundleType: BundleType.player, // Default to player.js (no controllers, server-processed models)\n\tenv: { mode: \"gather\", role: \"student\" },\n};\n\n// Add this to your window types\ndeclare global {\n\tinterface Window {\n\t\t_pieElementObserver?: MutationObserver;\n\t\t_pieCurrentContext?: {\n\t\t\tconfig: ConfigEntity;\n\t\t\tsession: any[];\n\t\t\tenv?: Env;\n\t\t\tcontainer?: Element | Document;\n\t\t};\n\t}\n}\n\n/**\n * Helper function to initialize a PIE element\n */\nconst initializePieElement = (\n\telement: PieElement,\n\toptions: {\n\t\tconfig: ConfigEntity;\n\t\tsession: any[];\n\t\tenv?: Env;\n\t\teventListeners?: EventListeners;\n\t},\n): void => {\n\tconst { config, session, env, eventListeners } = options;\n\tif ((element as any).__pieInitialized) {\n\t\treturn;\n\t}\n\tconst tagName = element.tagName.toLowerCase();\n\n\tlogger.debug(`[initializePieElement] Initializing ${tagName}#${element.id}`);\n\n\t// Find model for this element\n\tlet model = config?.models?.find((m) => m.id === element.id) as PieModel;\n\tif (!model) {\n\t\t// Only warn if this element is from a client-player.js bundle (where models are expected)\n\t\t// player.js bundles use server-processed models, so missing models are expected there\n\t\tconst registry = pieRegistry();\n\t\tconst registryEntry = registry[tagName];\n\n\t\tif (registryEntry && registryEntry.bundleType === BundleType.clientPlayer) {\n\t\t\tlogger.warn(\n\t\t\t\t`[initializePieElement] Model not found for PIE element ${tagName}#${element.id} (client-player.js bundle)`,\n\t\t\t);\n\t\t}\n\t\treturn;\n\t}\n\n\t// Set session (with element property for updateSession callback)\n\tconst elementSession = findOrAddSession(session, model.id, model.element);\n\telement.session = elementSession;\n\t(element as any).__pieInitialized = true;\n\tlogger.debug(\n\t\t`[initializePieElement] Session set for ${tagName}#${element.id}:`,\n\t\telementSession,\n\t);\n\n\t// Set model - use controller if available (client-player.js), or use server-processed model (player.js)\n\tconst controller = findPieController(tagName);\n\n\tif (!env) {\n\t\tlogger.error(\n\t\t\t`[initializePieElement] ❌ FATAL: No env provided for ${tagName}`,\n\t\t);\n\t\tthrow new Error(\n\t\t\t`No env provided for ${tagName}. PIE elements require an env object with mode and role.`,\n\t\t);\n\t}\n\n\tif (!controller) {\n\t\t// No controller available - using server-processed model (player.js bundle)\n\t\tlogger.debug(\n\t\t\t`[initializePieElement] ℹ️ No controller for ${tagName}, using server-processed model`,\n\t\t);\n\t\tlogger.debug(`[initializePieElement] Model already processed by server:`, {\n\t\t\tid: model.id,\n\t\t\telement: model.element,\n\t\t\thasCorrectResponse: \"correctResponse\" in model,\n\t\t\tmode: env.mode,\n\t\t\trole: env.role,\n\t\t});\n\n\t\t// Set model directly - server already processed it\n\t\telement.model = wrapModelRichContent(model);\n\t} else {\n\t\t// Controller available - run client-side processing (client-player.js bundle)\n\t\t// Note: updatePieElementWithRef handles controller invocation\n\t\tlogger.debug(\n\t\t\t`[initializePieElement] Controller found for ${tagName}, will invoke model() function`,\n\t\t);\n\t}\n\n\t// Add event listeners\n\tif (eventListeners) {\n\t\tObject.entries(eventListeners).forEach(([evt, fn]) => {\n\t\t\telement.addEventListener(evt as any, fn);\n\t\t});\n\t}\n};\n\nconst getEditorElementTagName = (elementTagName: string, pkg: string): string =>\n\tvalidateCustomElementTag(\n\t\telementTagName + editorPostFix,\n\t\t`editor element tag for ${pkg}`,\n\t);\n\nconst updateRegisteredElement = (\n\telementTagName: string,\n\tconfig: ConfigEntity,\n\tsession: any[],\n\toptions: LoadPieElementsOptions,\n\tomitEnv = false,\n): void => {\n\tupdatePieElement(elementTagName, {\n\t\tconfig,\n\t\tsession,\n\t\t...(omitEnv ? {} : { env: options.env }),\n\t\tcontainer: options.container,\n\t\t...(options.eventListeners?.[elementTagName] && {\n\t\t\teventListeners: options.eventListeners[elementTagName],\n\t\t}),\n\t});\n};\n\n/**\n * Shared element registration logic\n * Extracted from initializePiesFromLoadedBundle and loadPieModule to eliminate ~200 lines of duplication\n * Also fixes MutationObserver memory leak by storing latest config/session in window context\n *\n * `elementModule` may be `null`. In that case we cannot register *new*\n * tags (no element constructor source), but we can still update tags\n * that another loader (e.g. the section-player's IIFE adapter) has\n * already registered with `customElements`. This is the common case\n * when `pie-item-player` mounts inside `pie-section-player`: the\n * section player has already pre-warmed the bundle through the deep\n * `ElementLoader` primitive, so the `window.pie.default` bundle-global\n * path is not required for those tags.\n */\nconst registerPieElementsFromBundle = (\n\telementModule: any | null,\n\tconfig: ConfigEntity,\n\tsession: any[],\n\tregistry: PieRegistry,\n\toptions: LoadPieElementsOptions,\n): Promise<void>[] => {\n\tconst promises: Promise<void>[] = [];\n\tconst isNodeWithinContainer = (\n\t\tnode: Node,\n\t\tcontainer?: Element | Document,\n\t): boolean => {\n\t\tif (!container || container === document) return true;\n\t\treturn node instanceof Node && container.contains(node);\n\t};\n\n\tif (elementModule) {\n\t\tlogger.debug(\n\t\t\t\"[registerPieElementsFromBundle] Available packages in bundle:\",\n\t\t\tObject.keys(elementModule),\n\t\t);\n\t} else {\n\t\tlogger.debug(\n\t\t\t\"[registerPieElementsFromBundle] No bundle module supplied; will only update tags already registered with customElements.\",\n\t\t);\n\t}\n\tlogger.debug(\n\t\t\"[registerPieElementsFromBundle] config.elements:\",\n\t\tconfig.elements,\n\t);\n\n\t// Store latest config/session in window so MutationObserver can access current values\n\tif (typeof window !== \"undefined\") {\n\t\twindow._pieCurrentContext = {\n\t\t\tconfig,\n\t\t\tsession,\n\t\t\tenv: options.env,\n\t\t\tcontainer: options.container,\n\t\t};\n\t}\n\n\tObject.entries(config.elements).forEach(([elName, pkg]) => {\n\t\tconst elementTagName = validateCustomElementTag(\n\t\t\telName,\n\t\t\t`element tag in config.elements for ${String(pkg)}`,\n\t\t);\n\t\tlogger.debug(\n\t\t\t`[registerPieElementsFromBundle] Processing element: ${elementTagName} -> ${pkg}`,\n\t\t);\n\n\t\t// Fast path — the tag is already registered with customElements\n\t\t// (typically by the host's pre-warm pipeline). We can update its\n\t\t// session/model bindings without needing the bundle module at all.\n\t\t// This branch is also the one that runs when `elementModule` is\n\t\t// `null` because `window.pie` was missing.\n\t\tif (customElements.get(elementTagName)) {\n\t\t\tupdateRegisteredElement(elementTagName, config, session, options);\n\n\t\t\tif (options.bundleType === BundleType.editor) {\n\t\t\t\tconst editorElName = getEditorElementTagName(\n\t\t\t\t\telementTagName,\n\t\t\t\t\tString(pkg),\n\t\t\t\t);\n\t\t\t\tupdateRegisteredElement(editorElName, config, session, options, true);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// From here on we are in the \"register a new tag\" branch, which\n\t\t// requires a bundle module to read the element constructor from.\n\t\tif (!elementModule) {\n\t\t\t// A missing bundle module + an unregistered tag is *not*\n\t\t\t// always an error: in the section-player composition the\n\t\t\t// host's own `ElementLoader` may register this tag\n\t\t\t// out-of-band moments later, in which case `updatePieElement`\n\t\t\t// will pick it up on the next reactive pass via the\n\t\t\t// MutationObserver / `whenDefined` paths. Log at warn so the\n\t\t\t// transient miss is still visible during diagnostics without\n\t\t\t// printing a red stack trace for a routine timing condition.\n\t\t\tlogger.warn(\n\t\t\t\t`[registerPieElementsFromBundle] Skipping \"${elementTagName}\" — no bundle module available and the tag is not yet registered. Will bind on next update if the host's loader registers it.`,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pkgStripped = getPackageWithoutVersion(pkg as string);\n\t\tlogger.debug(\n\t\t\t`[registerPieElementsFromBundle] Package without version: \"${pkgStripped}\"`,\n\t\t);\n\n\t\tconst elementData = elementModule[pkgStripped];\n\t\tlogger.debug(\n\t\t\t`[registerPieElementsFromBundle] elementData result:`,\n\t\t\telementData ? \"FOUND\" : \"UNDEFINED\",\n\t\t);\n\n\t\tif (!elementData) {\n\t\t\tlogger.error(\n\t\t\t\t`[registerPieElementsFromBundle] ❌ Package \"${pkgStripped}\" not found in bundle!`,\n\t\t\t);\n\t\t\tlogger.error(\n\t\t\t\t`[registerPieElementsFromBundle] Lookup key: \"${pkgStripped}\"`,\n\t\t\t);\n\t\t\tlogger.error(\n\t\t\t\t`[registerPieElementsFromBundle] Available packages:`,\n\t\t\t\tObject.keys(elementModule),\n\t\t\t);\n\t\t\tthrow new Error(\n\t\t\t\t`pie ${pkgStripped} not found in ${Object.keys(elementModule)}`,\n\t\t\t);\n\t\t}\n\n\t\tlogger.debug(\n\t\t\t`[registerPieElementsFromBundle] elementData for ${pkgStripped}:`,\n\t\t\t{\n\t\t\t\thasController: !!elementData.controller,\n\t\t\t\thasElement: !!elementData.Element,\n\t\t\t\thasConfig: !!elementData.config,\n\t\t\t\tcontrollerKeys: elementData.controller\n\t\t\t\t\t? Object.keys(elementData.controller)\n\t\t\t\t\t: [],\n\t\t\t\tbundleType: options.bundleType,\n\t\t\t},\n\t\t);\n\n\t\t// Validate controller presence based on bundle type\n\t\tif (!elementData.controller) {\n\t\t\tif (options.bundleType === BundleType.clientPlayer) {\n\t\t\t\tlogger.error(\n\t\t\t\t\t`[registerPieElementsFromBundle] ❌ CRITICAL: No controller found for ${pkgStripped}!`,\n\t\t\t\t);\n\t\t\t\tlogger.error(\n\t\t\t\t\t`[registerPieElementsFromBundle] Bundle type: ${options.bundleType} (controllers required)`,\n\t\t\t\t);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No controller found for ${pkgStripped}. client-player.js bundles MUST include controllers!`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlogger.debug(\n\t\t\t\t\t`[registerPieElementsFromBundle] ℹ️ No controller found for ${pkgStripped} - using server-processed models (player.js bundle)`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\t// Register the element in our registry\n\t\t\tlogger.debug(\n\t\t\t\t`[registerPieElementsFromBundle] Registering ${elName} in registry${\n\t\t\t\t\telementData.controller\n\t\t\t\t\t\t? \" with controller\"\n\t\t\t\t\t\t: \" (no controller - server-processed models)\"\n\t\t\t\t}`,\n\t\t\t);\n\t\t\tregistry[elementTagName] = {\n\t\t\t\tpackage: pkg as string,\n\t\t\t\tstatus: Status.loading,\n\t\t\t\ttagName: elementTagName,\n\t\t\t\tcontroller: elementData.controller || null,\n\t\t\t\tconfig: elementData.config,\n\t\t\t\tbundleType: options.bundleType,\n\t\t\t};\n\n\t\t\tif (isCustomElementConstructor(elementData.Element)) {\n\t\t\t\tdefineCustomElementSafely(\n\t\t\t\t\telementTagName,\n\t\t\t\t\telementData.Element,\n\t\t\t\t\t`element tag in config.elements for ${String(pkg)}`,\n\t\t\t\t);\n\n\t\t\t\t// Initialize existing elements\n\t\t\t\tconst searchRoot = options.container || document;\n\t\t\t\tconst elements = searchRoot.querySelectorAll(elementTagName);\n\t\t\t\tlogger.debug(\n\t\t\t\t\t`[registerPieElementsFromBundle] Found ${elements.length} elements for tag '${elementTagName}'`,\n\t\t\t\t);\n\n\t\t\t\telements.forEach((el) => {\n\t\t\t\t\tinitializePieElement(el as PieElement, {\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\tsession,\n\t\t\t\t\t\tenv: options.env,\n\t\t\t\t\t\teventListeners: options.eventListeners?.[elementTagName],\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t\t// Update registry status\n\t\t\t\tregistry[elementTagName] = {\n\t\t\t\t\t...registry[elementTagName],\n\t\t\t\t\tstatus: Status.loaded,\n\t\t\t\t};\n\n\t\t\t\tpromises.push(\n\t\t\t\t\tcustomElements.whenDefined(elementTagName).then(() => {\n\t\t\t\t\t\tlogger.debug(\n\t\t\t\t\t\t\t\"[registerPieElementsFromBundle] defined custom PIE element: %s\",\n\t\t\t\t\t\t\telementTagName,\n\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\t// Setup MutationObserver that uses current context (only once)\n\t\t\t\tif (!window._pieElementObserver) {\n\t\t\t\t\twindow._pieElementObserver = new MutationObserver((mutations) => {\n\t\t\t\t\t\t// Use current context from window instead of stale closure\n\t\t\t\t\t\tconst context = window._pieCurrentContext;\n\t\t\t\t\t\tif (!context) {\n\t\t\t\t\t\t\tlogger.warn(\"[MutationObserver] No current context available\");\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmutations.forEach((mutation) => {\n\t\t\t\t\t\t\tif (mutation.type === \"childList\") {\n\t\t\t\t\t\t\t\tmutation.addedNodes.forEach((node) => {\n\t\t\t\t\t\t\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t\t\t\t\t\t\tif (!isNodeWithinContainer(node, context.container)) {\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tconst tagName = (node as Element).tagName.toLowerCase();\n\t\t\t\t\t\t\t\t\t\tif (registry[tagName]) {\n\t\t\t\t\t\t\t\t\t\t\tinitializePieElement(node as PieElement, {\n\t\t\t\t\t\t\t\t\t\t\t\tconfig: context.config,\n\t\t\t\t\t\t\t\t\t\t\t\tsession: context.session,\n\t\t\t\t\t\t\t\t\t\t\t\tenv: context.env,\n\t\t\t\t\t\t\t\t\t\t\t\teventListeners: options.eventListeners?.[tagName],\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Check children of added nodes\n\t\t\t\t\t\t\t\t\t\t(node as Element)\n\t\t\t\t\t\t\t\t\t\t\t.querySelectorAll(\"*\")\n\t\t\t\t\t\t\t\t\t\t\t.forEach((childNode) => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\t\t\t!isNodeWithinContainer(childNode, context.container)\n\t\t\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tconst childTagName = childNode.tagName.toLowerCase();\n\t\t\t\t\t\t\t\t\t\t\t\tif (registry[childTagName]) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tinitializePieElement(childNode as PieElement, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconfig: context.config,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsession: context.session,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tenv: context.env,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\teventListeners:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toptions.eventListeners?.[childTagName],\n\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\twindow._pieElementObserver.observe(document.body, {\n\t\t\t\t\t\tchildList: true,\n\t\t\t\t\t\tsubtree: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Handle editor elements if needed\n\t\t\t\tif (options.bundleType === BundleType.editor) {\n\t\t\t\t\tif (isCustomElementConstructor(elementData.Configure)) {\n\t\t\t\t\t\tconst editorElName = getEditorElementTagName(\n\t\t\t\t\t\t\telementTagName,\n\t\t\t\t\t\t\tString(pkg),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdefineCustomElementSafely(\n\t\t\t\t\t\t\teditorElName,\n\t\t\t\t\t\t\telementData.Configure,\n\t\t\t\t\t\t\t`editor element tag for ${String(pkg)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tpromises.push(\n\t\t\t\t\t\t\tcustomElements.whenDefined(editorElName).then(() => {\n\t\t\t\t\t\t\t\tlogger.debug(\n\t\t\t\t\t\t\t\t\t`[registerPieElementsFromBundle] defined custom PIE editor element: ${editorElName}`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\t`[registerPieElementsFromBundle] pie.Configure for ${pkgStripped} is not a valid custom element constructor.`,\n\t\t\t\t\t\t\telementData.configure,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlogger.error(\n\t\t\t\t\t`[registerPieElementsFromBundle] pie.Element for ${pkgStripped} is not a valid custom element constructor.`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t});\n\n\treturn promises;\n};\n\n/**\n * Initialize PIE elements from a bundle that may already be loaded.\n *\n * `window.pie` is the IIFE bundle-loading global populated by\n * `loadPieModule` / `loadBundleFromString`. When the host loaded the\n * bundle through the deep `ElementLoader` primitive instead — as\n * `pie-section-player` does — the global is irrelevant: the loader\n * registers tags directly with `customElements`, so this function only\n * needs to bind models/sessions to whatever is already registered.\n *\n * Behavior:\n * - `window.pie` available → register any new tags from the bundle and\n * update bindings for already-registered tags.\n * - `window.pie` missing → fall back to the update-only path. Tags that\n * are already registered get their model/session updated; tags that\n * are not yet registered are logged at `warn` and left alone — the\n * host's loader is expected to register them imminently, after which\n * the existing `MutationObserver` / `updatePieElements` flow binds\n * them on the next reactive pass.\n *\n * The original blanket `window.pie not found; was the bundle inlined\n * correctly?` error has been removed: in the section-player + item-player\n * composition it produced a confusing red stack trace for a routine\n * timing condition that the host already handles. Genuine failures\n * (bundle not loaded by *anyone*) still surface — every unregistered tag\n * gets its own warning, and `updatePieElements` later reports any tag\n * that never resolves.\n */\nexport const initializePiesFromLoadedBundle = (\n\tconfig: ConfigEntity,\n\tsession: any[],\n\topts: LoadPieElementsOptions = {},\n): void => {\n\tconst registry = pieRegistry();\n\tconst options = mergeObjectsIgnoringNullUndefined(defaultOptions, opts);\n\n\tif (isPieAvailable(window)) {\n\t\tlogger.debug(\"[initializePiesFromLoadedBundle] window.pie available\");\n\t\tconst elementModule = window.pie.default;\n\t\tregisterPieElementsFromBundle(\n\t\t\telementModule,\n\t\t\tconfig,\n\t\t\tsession,\n\t\t\tregistry,\n\t\t\toptions,\n\t\t);\n\t\treturn;\n\t}\n\n\tlogger.debug(\n\t\t\"[initializePiesFromLoadedBundle] window.pie not present; using update-only path. Already-registered tags will be bound now; missing tags are expected to be registered by the host's loader and will bind on the next update pass.\",\n\t);\n\tregisterPieElementsFromBundle(null, config, session, registry, options);\n};\n\n/**\n * Load a PIE bundle from a URL and initialize elements\n */\nexport const loadPieModule = async (\n\tconfig: ConfigEntity,\n\tsession: any[],\n\topts: LoadPieElementsOptions = {},\n): Promise<{\n\tsession: any[];\n}> => {\n\tif (!session) {\n\t\tthrow new Error(\"session is required\");\n\t}\n\n\t// Initialize math-rendering module (required by PIE elements)\n\tawait initializeMathRendering();\n\n\tconst registry = pieRegistry();\n\tconst options = mergeObjectsIgnoringNullUndefined(defaultOptions, opts);\n\tconst url = opts.bundleUrl || getPieElementBundlesUrl(config, options);\n\tconst script = document.createElement(\"script\");\n\tscript.src = url;\n\tscript.defer = true;\n\tscript.onerror = () => {\n\t\tthrow new Error(`failed to load script: ${url}`);\n\t};\n\n\tconst loadPromise = new Promise<void>((loadResolve) => {\n\t\tscript.addEventListener(\"load\", () => {\n\t\t\tlogger.debug(\"[loadPieModule] Script loaded from:\", url);\n\t\t\tif (isPieAvailable(window)) {\n\t\t\t\tlogger.debug(\"[loadPieModule] window.pie available\");\n\t\t\t\tconst elementModule = window.pie.default;\n\n\t\t\t\t// Use shared registration logic (returns array of promises)\n\t\t\t\tconst registrationPromises = registerPieElementsFromBundle(\n\t\t\t\t\telementModule,\n\t\t\t\t\tconfig,\n\t\t\t\t\tsession,\n\t\t\t\t\tregistry,\n\t\t\t\t\toptions,\n\t\t\t\t);\n\n\t\t\t\t// Wait for all element definitions to complete\n\t\t\t\tPromise.all(registrationPromises).then(() => loadResolve());\n\t\t\t} else {\n\t\t\t\tlogger.error(\n\t\t\t\t\t\"[loadPieModule] pie var not found; is %s a proper PIE IIFE module?\",\n\t\t\t\t\turl,\n\t\t\t\t);\n\t\t\t\tloadResolve();\n\t\t\t}\n\t\t});\n\t});\n\n\tdocument.head.appendChild(script);\n\tawait loadPromise;\n\treturn { session };\n};\n\n/**\n * Load a PIE bundle from a JavaScript string into window.pie (IIFE bundles only)\n * This only registers elements and controllers - does NOT initialize them.\n * For initialization, use initializePiesFromLoadedBundle after loading.\n */\nexport const loadBundleFromString = async (bundleJs: string): Promise<void> => {\n\tawait initializeMathRendering();\n\tawait withBlobBundleUrl(\n\t\tbundleJs,\n\t\t{ stripSourceMapComment: true },\n\t\tasync (bundleUrl) => {\n\t\t\t// Create a script tag to execute the bundle\n\t\t\tconst script = document.createElement(\"script\");\n\t\t\tscript.src = bundleUrl;\n\t\t\tscript.type = \"text/javascript\"; // IIFE bundles are standard JS\n\n\t\t\t// Wait for script to load\n\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\tscript.onload = () => resolve();\n\t\t\t\tscript.onerror = () => reject(new Error(\"Failed to load bundle\"));\n\t\t\t\tdocument.head.appendChild(script);\n\t\t\t});\n\n\t\t\tlogger.debug(\"[loadBundleFromString] Bundle loaded into window.pie\");\n\t\t},\n\t);\n};\n\n/**\n * Load a PIE bundle from a JavaScript string and initialize elements\n * Convenience wrapper around loadBundleFromString + loadPieModule\n */\nexport const loadPieModuleFromString = async (\n\tbundleJs: string,\n\tconfig: ConfigEntity,\n\tsession: any[],\n\topts: LoadPieElementsOptions = {},\n): Promise<void> => {\n\tawait withBlobBundleUrl(bundleJs, {}, async (bundleUrl) => {\n\t\t// Use existing loadPieModule with the blob URL\n\t\tawait loadPieModule(config, session, { ...opts, bundleUrl });\n\t});\n};\n\nconst withBlobBundleUrl = async <T>(\n\tbundleJs: string,\n\toptions: { stripSourceMapComment?: boolean },\n\trun: (bundleUrl: string) => Promise<T>,\n): Promise<T> => {\n\tconst source = options.stripSourceMapComment\n\t\t? bundleJs.replace(/\\/\\/# sourceMappingURL=.*$/m, \"\")\n\t\t: bundleJs;\n\tconst blob = new Blob([source], { type: \"application/javascript\" });\n\tconst bundleUrl = URL.createObjectURL(blob);\n\ttry {\n\t\treturn await run(bundleUrl);\n\t} finally {\n\t\tURL.revokeObjectURL(bundleUrl);\n\t}\n};\n"]}
|
|
@@ -68,6 +68,20 @@ export function hasResponseField(value) {
|
|
|
68
68
|
}
|
|
69
69
|
return false;
|
|
70
70
|
}
|
|
71
|
+
function isPlainObject(value) {
|
|
72
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
73
|
+
}
|
|
74
|
+
function mergeSessionEntry(existing, incoming) {
|
|
75
|
+
const merged = { ...existing };
|
|
76
|
+
for (const [key, value] of Object.entries(incoming)) {
|
|
77
|
+
const previous = merged[key];
|
|
78
|
+
merged[key] =
|
|
79
|
+
isPlainObject(previous) && isPlainObject(value)
|
|
80
|
+
? mergeSessionEntry(previous, value)
|
|
81
|
+
: value;
|
|
82
|
+
}
|
|
83
|
+
return merged;
|
|
84
|
+
}
|
|
71
85
|
export function mergeElementIntoSession(itemId, previousItemSession, entryId, entry) {
|
|
72
86
|
const previous = normalizeItemSessionContainer(previousItemSession, itemId);
|
|
73
87
|
const nextData = [...previous.data];
|
|
@@ -80,7 +94,7 @@ export function mergeElementIntoSession(itemId, previousItemSession, entryId, en
|
|
|
80
94
|
const existing = nextData[existingIndex];
|
|
81
95
|
nextData[existingIndex] =
|
|
82
96
|
existing && typeof existing === "object"
|
|
83
|
-
?
|
|
97
|
+
? mergeSessionEntry(existing, entry)
|
|
84
98
|
: entry;
|
|
85
99
|
}
|
|
86
100
|
else {
|