@pie-players/pie-players-shared 0.3.47 → 0.3.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +30 -0
  2. package/dist/i18n/simple-i18n.js.map +1 -1
  3. package/dist/instrumentation/debug-panel-stream.js.map +1 -1
  4. package/dist/instrumentation/providers/CompositeInstrumentationProvider.js.map +1 -1
  5. package/dist/instrumentation/providers/DebugPanelInstrumentationProvider.js +2 -1
  6. package/dist/instrumentation/providers/DebugPanelInstrumentationProvider.js.map +1 -1
  7. package/dist/loaders/ElementLoader.js +2 -1
  8. package/dist/loaders/ElementLoader.js.map +1 -1
  9. package/dist/loaders/element-loader.js +28 -4
  10. package/dist/loaders/element-loader.js.map +1 -1
  11. package/dist/loaders/esm-adapter.d.ts +22 -5
  12. package/dist/loaders/esm-adapter.js +320 -60
  13. package/dist/loaders/esm-adapter.js.map +1 -1
  14. package/dist/loaders/iife-adapter.js +1 -2
  15. package/dist/loaders/iife-adapter.js.map +1 -1
  16. package/dist/loaders/index.d.ts +1 -1
  17. package/dist/loaders/index.js.map +1 -1
  18. package/dist/pie/authoring.js +4 -2
  19. package/dist/pie/authoring.js.map +1 -1
  20. package/dist/pie/config.js +4 -1
  21. package/dist/pie/config.js.map +1 -1
  22. package/dist/pie/configure-initialization.js.map +1 -1
  23. package/dist/pie/correct-response-env.js.map +1 -1
  24. package/dist/pie/index.d.ts +1 -1
  25. package/dist/pie/index.js +1 -1
  26. package/dist/pie/index.js.map +1 -1
  27. package/dist/pie/initialization.js.map +1 -1
  28. package/dist/pie/instrumentation-event-bridge.js.map +1 -1
  29. package/dist/pie/instrumentation-event-map.js.map +1 -1
  30. package/dist/pie/instrumentation-provider-resolution.js.map +1 -1
  31. package/dist/pie/item-controller-storage.js.map +1 -1
  32. package/dist/pie/item-controller.d.ts +15 -0
  33. package/dist/pie/item-controller.js +22 -2
  34. package/dist/pie/item-controller.js.map +1 -1
  35. package/dist/pie/item-session-contract.d.ts +1 -0
  36. package/dist/pie/item-session-contract.js +28 -13
  37. package/dist/pie/item-session-contract.js.map +1 -1
  38. package/dist/pie/math-rendering.js.map +1 -1
  39. package/dist/pie/overrides.js +2 -1
  40. package/dist/pie/overrides.js.map +1 -1
  41. package/dist/pie/resource-monitor.js.map +1 -1
  42. package/dist/pie/stage-tracker.js.map +1 -1
  43. package/dist/pie/types.d.ts +7 -0
  44. package/dist/pie/types.js.map +1 -1
  45. package/dist/pie/updates.d.ts +3 -3
  46. package/dist/pie/updates.js +39 -18
  47. package/dist/pie/updates.js.map +1 -1
  48. package/dist/security/sanitize-item-markup.js.map +1 -1
  49. package/dist/security/wrap-overwide-images.js +1 -2
  50. package/dist/security/wrap-overwide-images.js.map +1 -1
  51. package/dist/security/wrap-overwide-tables.js +1 -2
  52. package/dist/security/wrap-overwide-tables.js.map +1 -1
  53. package/dist/server/npm-registry.js.map +1 -1
  54. package/package.json +1 -1
@@ -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 an ESM CDN (esm.sh,\n * jsDelivr, etc.), optionally resolving bare specifiers through an\n * `<script type=\"importmap\">` injected into the host document. On any\n * per-tag failure (module load, non-constructor element class, define\n * failure), throws `AdapterFailure` with a structured `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 { 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 EsmBackendConfig = {\n\tkind: \"esm\";\n\t/** Base URL for the ESM CDN (e.g., \"https://esm.sh\"). */\n\tcdnBaseUrl: string;\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};\n\n/** @internal */\nexport type EsmModuleImporter = (specifier: string) => Promise<unknown>;\n/** @internal */\nexport type EsmImportMapObserver = (json: string, doc: Document) => void;\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\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 moduleResolution = config.moduleResolution ?? \"url\";\n\tconst view = config.view ?? \"delivery\";\n\tconst loadControllers = config.loadControllers ?? true;\n\tconst viewConfig =\n\t\tconfig.viewConfig ??\n\t\tBUILT_IN_VIEWS[view] ??\n\t\tBUILT_IN_VIEWS.delivery;\n\n\tconst injectedPackages = new Set<string>();\n\tlet importer: EsmModuleImporter = defaultImporter;\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\trestore() {\n\t\t\timporter = defaultImporter;\n\t\t\timportMapObserver = undefined;\n\t\t\tinjectedPackages.clear();\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\n\t\tif (moduleResolution === \"import-map\") {\n\t\t\tassertImportMapSupported();\n\t\t\tconst newEntries: ElementMap = {};\n\t\t\tfor (const [tag, pkg] of Object.entries(elements)) {\n\t\t\t\tconst packageName = extractPackageName(pkg);\n\t\t\t\tif (!injectedPackages.has(packageName)) {\n\t\t\t\t\tnewEntries[tag] = pkg;\n\t\t\t\t\tinjectedPackages.add(packageName);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(newEntries).length > 0) {\n\t\t\t\tconst json = buildImportMapJson(\n\t\t\t\t\tnewEntries,\n\t\t\t\t\tviewConfig,\n\t\t\t\t\tcdnBaseUrl,\n\t\t\t\t\tloadControllers,\n\t\t\t\t);\n\t\t\t\tinjectImportMap(json, context.doc);\n\t\t\t\timportMapObserver?.(json, context.doc);\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\tcdnBaseUrl,\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\tcdnBaseUrl,\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\tcdnBaseUrl,\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\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\nfunction extractPackageName(packageVersion: string): string {\n\tconst parts = packageVersion.split(\"@\");\n\treturn parts.length >= 3 ? `@${parts[1]}` : parts[0];\n}\n\nfunction isJsDelivrNpm(cdnBaseUrl: string): boolean {\n\treturn cdnBaseUrl.includes(\"cdn.jsdelivr.net/npm\");\n}\n\nfunction resolvePackageUrl(packageVersion: string, cdnBaseUrl: string): string {\n\tif (isJsDelivrNpm(cdnBaseUrl)) {\n\t\treturn `${cdnBaseUrl}/${packageVersion}/+esm`;\n\t}\n\treturn `${cdnBaseUrl}/${packageVersion}`;\n}\n\nfunction resolveSubpathUrl(\n\tpackageVersion: string,\n\tsubpath: string,\n\tcdnBaseUrl: string,\n): string {\n\tconst cleanSubpath = subpath.startsWith(\"/\") ? subpath.slice(1) : subpath;\n\tif (isJsDelivrNpm(cdnBaseUrl)) {\n\t\treturn `${cdnBaseUrl}/${packageVersion}/${cleanSubpath}/+esm`;\n\t}\n\treturn `${cdnBaseUrl}/${packageVersion}/${cleanSubpath}`;\n}\n\nfunction resolveControllerUrl(\n\tpackageVersion: string,\n\tcdnBaseUrl: string,\n): string {\n\tif (isJsDelivrNpm(cdnBaseUrl)) {\n\t\treturn `${cdnBaseUrl}/${packageVersion}/controller/+esm`;\n\t}\n\treturn `${cdnBaseUrl}/${packageVersion}/controller`;\n}\n\nfunction resolveElementSpecifier(\n\tpackageName: string,\n\tpackageVersion: string,\n\tviewConfig: ViewConfig,\n\tmoduleResolution: \"url\" | \"import-map\",\n\tcdnBaseUrl: 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 viewConfig.subpath\n\t\t? resolveSubpathUrl(packageVersion, viewConfig.subpath, cdnBaseUrl)\n\t\t: resolvePackageUrl(packageVersion, cdnBaseUrl);\n}\n\nfunction resolveControllerSpecifier(\n\tpackageName: string,\n\tpackageVersion: string,\n\tmoduleResolution: \"url\" | \"import-map\",\n\tcdnBaseUrl: string,\n): string {\n\tif (moduleResolution === \"import-map\") {\n\t\treturn `${packageName}/controller`;\n\t}\n\treturn resolveControllerUrl(packageVersion, cdnBaseUrl);\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\nfunction buildImportMapJson(\n\telements: ElementMap,\n\tviewConfig: ViewConfig,\n\tcdnBaseUrl: string,\n\tloadControllers: boolean,\n): string {\n\tconst imports: Record<string, string> = {};\n\tfor (const [, pkg] of Object.entries(elements)) {\n\t\tconst packageName = extractPackageName(pkg);\n\t\timports[packageName] = resolvePackageUrl(pkg, cdnBaseUrl);\n\t\tif (viewConfig.subpath) {\n\t\t\timports[`${packageName}${viewConfig.subpath}`] = resolveSubpathUrl(\n\t\t\t\tpkg,\n\t\t\t\tviewConfig.subpath,\n\t\t\t\tcdnBaseUrl,\n\t\t\t);\n\t\t}\n\t\tif (loadControllers) {\n\t\t\timports[`${packageName}/controller`] = resolveControllerUrl(\n\t\t\t\tpkg,\n\t\t\t\tcdnBaseUrl,\n\t\t\t);\n\t\t}\n\t\tif (viewConfig.fallback) {\n\t\t\tconst fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];\n\t\t\tif (fallbackConfig?.subpath) {\n\t\t\t\timports[`${packageName}${fallbackConfig.subpath}`] = resolveSubpathUrl(\n\t\t\t\t\tpkg,\n\t\t\t\t\tfallbackConfig.subpath,\n\t\t\t\t\tcdnBaseUrl,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\treturn JSON.stringify({ imports }, null, 2);\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\"\n\t\t\t? HTMLScriptElement\n\t\t\t: undefined\n\t) as (typeof HTMLScriptElement & {\n\t\tsupports?: (type: string) => boolean;\n\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 =\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"]}
@@ -304,8 +304,7 @@ function defaultLoadBundleScript(url, doc) {
304
304
  });
305
305
  }
306
306
  function readPieModule() {
307
- const maybeWindow = globalThis
308
- .window;
307
+ const maybeWindow = globalThis.window;
309
308
  const pieDefault = maybeWindow?.pie?.default;
310
309
  if (!pieDefault || typeof pieDefault !== "object")
311
310
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"iife-adapter.js","sourceRoot":"","sources":["../../src/loaders/iife-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * IIFE backend adapter for the ElementLoader primitive.\n *\n * Loads PIE elements from IIFE bundles served by the PIE build service,\n * then registers them with `customElements`. On any per-tag failure\n * (missing package, non-constructor element class, define failure),\n * throws `AdapterFailure` with a structured `reasons` map that the\n * primitive unpacks into `ElementLoaderError.reasons`.\n *\n * This adapter deliberately does *not* gate its own promise on\n * `customElements.whenDefined` — the primitive performs that verification\n * uniformly for every backend, so the adapter's job is narrowly:\n *\n * 1. Fetch the bundle.\n * 2. Extract per-tag element classes from `window.pie.default`.\n * 3. Validate each class is a custom-element constructor.\n * 4. Call `customElements.define` via `defineCustomElementSafely`.\n * 5. Collect structured per-tag reasons for anything that failed.\n * 6. Resolve (everything OK) or throw `AdapterFailure` (anything failed).\n */\n\nimport type { InstrumentationProvider } from \"../instrumentation/types.js\";\nimport { isInstrumentationProvider } from \"../instrumentation/provider-guards.js\";\nimport {\n\tDEFAULT_IIFE_BUNDLE_RETRY_CONFIG,\n\ttype IifeBundleRetryConfig,\n} from \"../loader-config.js\";\nimport { defineCustomElementSafely } from \"../pie/custom-element-define.js\";\nimport { pieRegistry } from \"../pie/registry.js\";\nimport { validateCustomElementTag } from \"../pie/tag-names.js\";\nimport {\n\tBundleType,\n\tisCustomElementConstructor,\n\tStatus,\n} from \"../pie/types.js\";\nimport { getPackageWithoutVersion } from \"../pie/utils.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/**\n * Default PIE bundle service base URL. Exported so widgets can use it as\n * the fallback when the host does not supply `loaderOptions.bundleHost`.\n */\nexport const DEFAULT_BUNDLE_HOST = \"https://proxy.pie-api.com/bundles/\";\n\n/**\n * Bundle-build retry status emitted while a bundle is being built or after\n * it completes. Hosts that display a \"bundle is building…\" UI subscribe via\n * `onBundleRetryStatus` and read each transition.\n */\nexport type IifeBundleRetryStatus = {\n\tstate: \"retrying\" | \"completed\" | \"timeout\" | \"cancelled\";\n\turl: string;\n\tattempt: number;\n\telapsedMs: number;\n\ttimeoutMs: number;\n\tretryDelayMs?: number;\n\treason?: string;\n};\n\nexport type IifeBackendConfig = {\n\tkind: \"iife\";\n\t/** Base URL for the PIE bundle service. */\n\tbundleHost: string;\n\t/** Bundle variant to request (player / client-player / editor). */\n\tbundleType?: BundleType;\n\t/** Whether the registered entries should carry their controller exports. */\n\tneedsControllers?: boolean;\n\t/** Explicit bundle override (hash + optional URL) supplied by the host. */\n\tbundleInfo?: { hash?: string; url?: string };\n\t/** Debug flag hook. */\n\tdebugEnabled?: () => boolean;\n\t/**\n\t * Retry policy for transient bundle load failures.\n\t *\n\t * When the bundle service is building a bundle on demand, the first\n\t * few `<script src>` requests can fail. This policy polls until the\n\t * bundle is available or `timeoutMs` elapses. Default matches\n\t * `DEFAULT_IIFE_BUNDLE_RETRY_CONFIG`.\n\t */\n\tbundleRetry?: IifeBundleRetryConfig;\n\t/**\n\t * Callback invoked with retry status transitions. Lets hosts render\n\t * \"bundle still building, retrying in Ns\" messaging without touching\n\t * internal adapter state.\n\t */\n\tonBundleRetryStatus?: (status: IifeBundleRetryStatus) => void;\n\t/**\n\t * If true and `instrumentationProvider` is set and ready, retry\n\t * lifecycle events (`pie-iife-bundle-retry*`) are emitted.\n\t */\n\ttrackPageActions?: boolean;\n\t/**\n\t * Instrumentation provider used to emit retry lifecycle telemetry.\n\t */\n\tinstrumentationProvider?: InstrumentationProvider;\n};\n\n/**\n * Bundle-script loader seam. Default implementation injects a `<script>` tag\n * into the document head. Tests replace it with a scripted stub via\n * `IifeBackendTestSeams.replaceLoadBundleScript`.\n *\n * @internal\n */\nexport type IifeBundleScriptLoader = (\n\turl: string,\n\tdoc: Document,\n) => Promise<void>;\n\n/**\n * Test-only seam exposed via `IifeBackend.__seams`. Lets contract tests\n * inject scripted bundle-load behaviour without going through the network\n * or the document. Not part of the runtime API; production code must not\n * touch this field.\n *\n * @internal\n */\nexport type IifeBackendTestSeams = {\n\treplaceLoadBundleScript(fn: IifeBundleScriptLoader): void;\n\trestore(): void;\n};\n\nexport type IifeBackend = ElementLoaderBackend & {\n\t/** @internal Test-only seam — see {@link IifeBackendTestSeams}. */\n\treadonly __seams: IifeBackendTestSeams;\n};\n\nexport function createIifeBackend(config: IifeBackendConfig): IifeBackend {\n\tconst bundleType = config.bundleType ?? BundleType.clientPlayer;\n\tconst needsControllers = config.needsControllers ?? true;\n\n\tlet loadBundleScript: IifeBundleScriptLoader = defaultLoadBundleScript;\n\tconst inFlightBundleLoads = new Map<string, Promise<void>>();\n\n\tconst __seams: IifeBackendTestSeams = {\n\t\treplaceLoadBundleScript(fn) {\n\t\t\tloadBundleScript = fn;\n\t\t\tinFlightBundleLoads.clear();\n\t\t},\n\t\trestore() {\n\t\t\tloadBundleScript = defaultLoadBundleScript;\n\t\t\tinFlightBundleLoads.clear();\n\t\t},\n\t};\n\n\tasync function ensureBundleLoaded(\n\t\turl: string,\n\t\tdoc: Document,\n\t): Promise<void> {\n\t\tconst existing = inFlightBundleLoads.get(url);\n\t\tif (existing) return existing;\n\t\tconst promise = loadBundleScriptWithRetry(url, doc).finally(() => {\n\t\t\tinFlightBundleLoads.delete(url);\n\t\t});\n\t\tinFlightBundleLoads.set(url, promise);\n\t\treturn promise;\n\t}\n\n\t/**\n\t * Wrap the single-shot script loader with poll-until-ready retry.\n\t *\n\t * The PIE bundle service may return a transient failure while it\n\t * builds a bundle on demand. Retry with fixed-interval polling until\n\t * the bundle is ready or the cumulative deadline elapses. Emits\n\t * retry lifecycle events to the host via `onBundleRetryStatus` and to\n\t * the instrumentation provider (if configured and ready).\n\t */\n\tasync function loadBundleScriptWithRetry(\n\t\turl: string,\n\t\tdoc: Document,\n\t): Promise<void> {\n\t\tconst { retryDelayMs, timeoutMs } = resolveBundleRetryConfig(\n\t\t\tconfig.bundleRetry,\n\t\t);\n\t\tconst startedAt = Date.now();\n\t\tlet attempt = 0;\n\t\twhile (true) {\n\t\t\tattempt += 1;\n\t\t\ttry {\n\t\t\t\tawait loadBundleScript(url, doc);\n\t\t\t\tconst elapsedMs = Date.now() - startedAt;\n\t\t\t\tif (attempt > 1) {\n\t\t\t\t\tconfig.onBundleRetryStatus?.({\n\t\t\t\t\t\tstate: \"completed\",\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t});\n\t\t\t\t\ttrackRetryEvent(\"pie-iife-bundle-retry-success\", {\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} catch (error) {\n\t\t\t\tconst elapsedMs = Date.now() - startedAt;\n\t\t\t\tconst remainingMs = timeoutMs - elapsedMs;\n\t\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\t\tif (remainingMs <= 0) {\n\t\t\t\t\tconst timeoutError = new Error(\n\t\t\t\t\t\t`IIFE bundle load timed out after ${timeoutMs}ms: ${url}`,\n\t\t\t\t\t);\n\t\t\t\t\tconfig.onBundleRetryStatus?.({\n\t\t\t\t\t\tstate: \"timeout\",\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t\treason,\n\t\t\t\t\t});\n\t\t\t\t\ttrackRetryEvent(\"pie-iife-bundle-retry-timeout\", {\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t\tlastError: reason,\n\t\t\t\t\t});\n\t\t\t\t\ttrackRetryError(timeoutError, {\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t\tlastError: reason,\n\t\t\t\t\t});\n\t\t\t\t\tthrow timeoutError;\n\t\t\t\t}\n\t\t\t\tconst nextDelay = Math.min(retryDelayMs, remainingMs);\n\t\t\t\tconfig.onBundleRetryStatus?.({\n\t\t\t\t\tstate: \"retrying\",\n\t\t\t\t\turl,\n\t\t\t\t\tattempt,\n\t\t\t\t\telapsedMs,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\tretryDelayMs: nextDelay,\n\t\t\t\t\treason,\n\t\t\t\t});\n\t\t\t\ttrackRetryEvent(\"pie-iife-bundle-retry\", {\n\t\t\t\t\turl,\n\t\t\t\t\tattempt,\n\t\t\t\t\telapsedMs,\n\t\t\t\t\tretryDelayMs: nextDelay,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\tlastError: reason,\n\t\t\t\t});\n\t\t\t\tawait waitMs(nextDelay);\n\t\t\t}\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 trackRetryEvent(\n\t\teventName: string,\n\t\tattributes: Record<string, unknown>,\n\t): void {\n\t\tconst provider = getInstrumentationProvider();\n\t\tif (!provider) return;\n\t\ttry {\n\t\t\tprovider.trackEvent(eventName, attributes);\n\t\t} catch {\n\t\t\t// Swallow: instrumentation must never break loading.\n\t\t}\n\t}\n\n\tfunction trackRetryError(\n\t\terror: Error,\n\t\tattributes: Record<string, unknown>,\n\t): void {\n\t\tconst provider = getInstrumentationProvider();\n\t\tif (!provider) return;\n\t\ttry {\n\t\t\tprovider.trackError(error, {\n\t\t\t\t...attributes,\n\t\t\t\tcomponent: \"iife-adapter\",\n\t\t\t\terrorType: \"IifeBundleRetryError\",\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\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\n\t\tconst bundleUrl = buildBundleUrl(elements, bundleType, config);\n\t\ttry {\n\t\t\tawait ensureBundleLoaded(bundleUrl, context.doc);\n\t\t} catch (err) {\n\t\t\tconst cause = err instanceof Error ? err.message : String(err);\n\t\t\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\t\t\tfor (const tag of Object.keys(elements)) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"bundle-load-failed\",\n\t\t\t\t\ttag,\n\t\t\t\t\turl: bundleUrl,\n\t\t\t\t\tcause,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow new AdapterFailure(reasons);\n\t\t}\n\n\t\tconst pieModule = readPieModule();\n\t\tif (!pieModule) {\n\t\t\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\t\t\tfor (const tag of Object.keys(elements)) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"bundle-load-failed\",\n\t\t\t\t\ttag,\n\t\t\t\t\turl: bundleUrl,\n\t\t\t\t\tcause: \"window.pie.default missing after bundle load\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow new AdapterFailure(reasons);\n\t\t}\n\n\t\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\t\tconst isEditorBundle = bundleType === BundleType.editor;\n\t\tconst registry = pieRegistry();\n\n\t\tfor (const [tag, packageVersion] of Object.entries(elements)) {\n\t\t\tconst packageName = getPackageWithoutVersion(packageVersion);\n\t\t\tconst elementData = pieModule[packageName];\n\t\t\tif (!elementData) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"package-not-in-bundle\",\n\t\t\t\t\ttag,\n\t\t\t\t\tpackageName,\n\t\t\t\t\tavailablePackages: Object.keys(pieModule),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst ElementClass = isEditorBundle\n\t\t\t\t? (elementData.Configure ?? createEmptyConfigure())\n\t\t\t\t: elementData.Element;\n\n\t\t\tif (!ElementClass) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"no-element-class\",\n\t\t\t\t\ttag,\n\t\t\t\t\tpackageName,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!isCustomElementConstructor(ElementClass)) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"not-a-constructor\",\n\t\t\t\t\ttag,\n\t\t\t\t\tpackageName,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet actualTag: string;\n\t\t\ttry {\n\t\t\t\tactualTag = validateCustomElementTag(\n\t\t\t\t\ttag,\n\t\t\t\t\t`element tag for ${packageName}`,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"define-failed\",\n\t\t\t\t\ttag,\n\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tdefineCustomElementSafely(\n\t\t\t\t\tactualTag,\n\t\t\t\t\tclass extends ElementClass {},\n\t\t\t\t\t`element tag for ${packageName}`,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"define-failed\",\n\t\t\t\t\ttag,\n\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tregistry[actualTag] = {\n\t\t\t\tpackage: packageVersion,\n\t\t\t\tstatus: Status.loaded,\n\t\t\t\ttagName: actualTag,\n\t\t\t\telement: ElementClass,\n\t\t\t\tcontroller: needsControllers ? (elementData.controller ?? null) : null,\n\t\t\t\tconfig: elementData.config ?? null,\n\t\t\t\tbundleType,\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\treturn {\n\t\tload,\n\t\tget __seams() {\n\t\t\treturn __seams;\n\t\t},\n\t};\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction defaultLoadBundleScript(url: string, doc: Document): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst script = doc.createElement(\"script\") as HTMLScriptElement;\n\t\tscript.src = url;\n\t\tscript.defer = true;\n\t\tscript.setAttribute(\"data-pie-bundle\", \"true\");\n\t\tscript.onload = () => resolve();\n\t\tscript.onerror = () =>\n\t\t\treject(new Error(`Failed to load IIFE bundle from: ${url}`));\n\t\tdoc.head.appendChild(script);\n\t});\n}\n\nfunction readPieModule(): Record<string, any> | undefined {\n\tconst maybeWindow = (globalThis as { window?: { pie?: { default?: unknown } } })\n\t\t.window;\n\tconst pieDefault = maybeWindow?.pie?.default;\n\tif (!pieDefault || typeof pieDefault !== \"object\") return undefined;\n\treturn pieDefault as Record<string, any>;\n}\n\nfunction buildBundleUrl(\n\telements: ElementMap,\n\tbundleType: BundleType,\n\tconfig: IifeBackendConfig,\n): string {\n\tconst elementTags = Object.keys(elements).sort().join(\",\");\n\n\tif (config.bundleInfo?.url) {\n\t\tconst separator = config.bundleInfo.url.includes(\"?\") ? \"&\" : \"?\";\n\t\treturn elementTags\n\t\t\t? `${config.bundleInfo.url}${separator}elements=${encodeURIComponent(elementTags)}`\n\t\t\t: config.bundleInfo.url;\n\t}\n\n\tconst packageVersions = Object.values(elements).join(\"+\");\n\tconst host = normalizeBundleHost(config.bundleHost);\n\tconst base = `${host}${encodeURI(packageVersions)}/${bundleType}`;\n\treturn elementTags\n\t\t? `${base}?elements=${encodeURIComponent(elementTags)}`\n\t\t: base;\n}\n\nfunction normalizeBundleHost(host: string): string {\n\treturn `${host.trim().replace(/\\/+$/, \"\")}/`;\n}\n\nfunction resolveBundleRetryConfig(\n\tconfigured: IifeBundleRetryConfig | undefined,\n): Required<IifeBundleRetryConfig> {\n\tconst retryDelayMs =\n\t\ttypeof configured?.retryDelayMs === \"number\" && configured.retryDelayMs > 0\n\t\t\t? configured.retryDelayMs\n\t\t\t: DEFAULT_IIFE_BUNDLE_RETRY_CONFIG.retryDelayMs;\n\tconst timeoutMs =\n\t\ttypeof configured?.timeoutMs === \"number\" && configured.timeoutMs > 0\n\t\t\t? configured.timeoutMs\n\t\t\t: DEFAULT_IIFE_BUNDLE_RETRY_CONFIG.timeoutMs;\n\treturn { retryDelayMs, timeoutMs };\n}\n\nfunction waitMs(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction createEmptyConfigure(): CustomElementConstructor {\n\t// Minimal configure fallback used for editor bundles that omit a Configure\n\t// export. Intentionally silent; the host will see a blank configuration UI\n\t// rather than a hard failure.\n\treturn class EmptyConfigureElement extends HTMLElement {\n\t\tprivate _model: unknown;\n\t\tprivate _configuration: unknown;\n\t\tget model() {\n\t\t\treturn this._model;\n\t\t}\n\t\tset model(v: unknown) {\n\t\t\tthis._model = v;\n\t\t}\n\t\tget configuration() {\n\t\t\treturn this._configuration;\n\t\t}\n\t\tset configuration(v: unknown) {\n\t\t\tthis._configuration = v;\n\t\t}\n\t};\n}\n"]}
1
+ {"version":3,"file":"iife-adapter.js","sourceRoot":"","sources":["../../src/loaders/iife-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * IIFE backend adapter for the ElementLoader primitive.\n *\n * Loads PIE elements from IIFE bundles served by the PIE build service,\n * then registers them with `customElements`. On any per-tag failure\n * (missing package, non-constructor element class, define failure),\n * throws `AdapterFailure` with a structured `reasons` map that the\n * primitive unpacks into `ElementLoaderError.reasons`.\n *\n * This adapter deliberately does *not* gate its own promise on\n * `customElements.whenDefined` — the primitive performs that verification\n * uniformly for every backend, so the adapter's job is narrowly:\n *\n * 1. Fetch the bundle.\n * 2. Extract per-tag element classes from `window.pie.default`.\n * 3. Validate each class is a custom-element constructor.\n * 4. Call `customElements.define` via `defineCustomElementSafely`.\n * 5. Collect structured per-tag reasons for anything that failed.\n * 6. Resolve (everything OK) or throw `AdapterFailure` (anything failed).\n */\n\nimport type { InstrumentationProvider } from \"../instrumentation/types.js\";\nimport { isInstrumentationProvider } from \"../instrumentation/provider-guards.js\";\nimport {\n\tDEFAULT_IIFE_BUNDLE_RETRY_CONFIG,\n\ttype IifeBundleRetryConfig,\n} from \"../loader-config.js\";\nimport { defineCustomElementSafely } from \"../pie/custom-element-define.js\";\nimport { pieRegistry } from \"../pie/registry.js\";\nimport { validateCustomElementTag } from \"../pie/tag-names.js\";\nimport {\n\tBundleType,\n\tisCustomElementConstructor,\n\tStatus,\n} from \"../pie/types.js\";\nimport { getPackageWithoutVersion } from \"../pie/utils.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/**\n * Default PIE bundle service base URL. Exported so widgets can use it as\n * the fallback when the host does not supply `loaderOptions.bundleHost`.\n */\nexport const DEFAULT_BUNDLE_HOST = \"https://proxy.pie-api.com/bundles/\";\n\n/**\n * Bundle-build retry status emitted while a bundle is being built or after\n * it completes. Hosts that display a \"bundle is building…\" UI subscribe via\n * `onBundleRetryStatus` and read each transition.\n */\nexport type IifeBundleRetryStatus = {\n\tstate: \"retrying\" | \"completed\" | \"timeout\" | \"cancelled\";\n\turl: string;\n\tattempt: number;\n\telapsedMs: number;\n\ttimeoutMs: number;\n\tretryDelayMs?: number;\n\treason?: string;\n};\n\nexport type IifeBackendConfig = {\n\tkind: \"iife\";\n\t/** Base URL for the PIE bundle service. */\n\tbundleHost: string;\n\t/** Bundle variant to request (player / client-player / editor). */\n\tbundleType?: BundleType;\n\t/** Whether the registered entries should carry their controller exports. */\n\tneedsControllers?: boolean;\n\t/** Explicit bundle override (hash + optional URL) supplied by the host. */\n\tbundleInfo?: { hash?: string; url?: string };\n\t/** Debug flag hook. */\n\tdebugEnabled?: () => boolean;\n\t/**\n\t * Retry policy for transient bundle load failures.\n\t *\n\t * When the bundle service is building a bundle on demand, the first\n\t * few `<script src>` requests can fail. This policy polls until the\n\t * bundle is available or `timeoutMs` elapses. Default matches\n\t * `DEFAULT_IIFE_BUNDLE_RETRY_CONFIG`.\n\t */\n\tbundleRetry?: IifeBundleRetryConfig;\n\t/**\n\t * Callback invoked with retry status transitions. Lets hosts render\n\t * \"bundle still building, retrying in Ns\" messaging without touching\n\t * internal adapter state.\n\t */\n\tonBundleRetryStatus?: (status: IifeBundleRetryStatus) => void;\n\t/**\n\t * If true and `instrumentationProvider` is set and ready, retry\n\t * lifecycle events (`pie-iife-bundle-retry*`) are emitted.\n\t */\n\ttrackPageActions?: boolean;\n\t/**\n\t * Instrumentation provider used to emit retry lifecycle telemetry.\n\t */\n\tinstrumentationProvider?: InstrumentationProvider;\n};\n\n/**\n * Bundle-script loader seam. Default implementation injects a `<script>` tag\n * into the document head. Tests replace it with a scripted stub via\n * `IifeBackendTestSeams.replaceLoadBundleScript`.\n *\n * @internal\n */\nexport type IifeBundleScriptLoader = (\n\turl: string,\n\tdoc: Document,\n) => Promise<void>;\n\n/**\n * Test-only seam exposed via `IifeBackend.__seams`. Lets contract tests\n * inject scripted bundle-load behaviour without going through the network\n * or the document. Not part of the runtime API; production code must not\n * touch this field.\n *\n * @internal\n */\nexport type IifeBackendTestSeams = {\n\treplaceLoadBundleScript(fn: IifeBundleScriptLoader): void;\n\trestore(): void;\n};\n\nexport type IifeBackend = ElementLoaderBackend & {\n\t/** @internal Test-only seam — see {@link IifeBackendTestSeams}. */\n\treadonly __seams: IifeBackendTestSeams;\n};\n\nexport function createIifeBackend(config: IifeBackendConfig): IifeBackend {\n\tconst bundleType = config.bundleType ?? BundleType.clientPlayer;\n\tconst needsControllers = config.needsControllers ?? true;\n\n\tlet loadBundleScript: IifeBundleScriptLoader = defaultLoadBundleScript;\n\tconst inFlightBundleLoads = new Map<string, Promise<void>>();\n\n\tconst __seams: IifeBackendTestSeams = {\n\t\treplaceLoadBundleScript(fn) {\n\t\t\tloadBundleScript = fn;\n\t\t\tinFlightBundleLoads.clear();\n\t\t},\n\t\trestore() {\n\t\t\tloadBundleScript = defaultLoadBundleScript;\n\t\t\tinFlightBundleLoads.clear();\n\t\t},\n\t};\n\n\tasync function ensureBundleLoaded(url: string, doc: Document): Promise<void> {\n\t\tconst existing = inFlightBundleLoads.get(url);\n\t\tif (existing) return existing;\n\t\tconst promise = loadBundleScriptWithRetry(url, doc).finally(() => {\n\t\t\tinFlightBundleLoads.delete(url);\n\t\t});\n\t\tinFlightBundleLoads.set(url, promise);\n\t\treturn promise;\n\t}\n\n\t/**\n\t * Wrap the single-shot script loader with poll-until-ready retry.\n\t *\n\t * The PIE bundle service may return a transient failure while it\n\t * builds a bundle on demand. Retry with fixed-interval polling until\n\t * the bundle is ready or the cumulative deadline elapses. Emits\n\t * retry lifecycle events to the host via `onBundleRetryStatus` and to\n\t * the instrumentation provider (if configured and ready).\n\t */\n\tasync function loadBundleScriptWithRetry(\n\t\turl: string,\n\t\tdoc: Document,\n\t): Promise<void> {\n\t\tconst { retryDelayMs, timeoutMs } = resolveBundleRetryConfig(\n\t\t\tconfig.bundleRetry,\n\t\t);\n\t\tconst startedAt = Date.now();\n\t\tlet attempt = 0;\n\t\twhile (true) {\n\t\t\tattempt += 1;\n\t\t\ttry {\n\t\t\t\tawait loadBundleScript(url, doc);\n\t\t\t\tconst elapsedMs = Date.now() - startedAt;\n\t\t\t\tif (attempt > 1) {\n\t\t\t\t\tconfig.onBundleRetryStatus?.({\n\t\t\t\t\t\tstate: \"completed\",\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t});\n\t\t\t\t\ttrackRetryEvent(\"pie-iife-bundle-retry-success\", {\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t} catch (error) {\n\t\t\t\tconst elapsedMs = Date.now() - startedAt;\n\t\t\t\tconst remainingMs = timeoutMs - elapsedMs;\n\t\t\t\tconst reason = error instanceof Error ? error.message : String(error);\n\t\t\t\tif (remainingMs <= 0) {\n\t\t\t\t\tconst timeoutError = new Error(\n\t\t\t\t\t\t`IIFE bundle load timed out after ${timeoutMs}ms: ${url}`,\n\t\t\t\t\t);\n\t\t\t\t\tconfig.onBundleRetryStatus?.({\n\t\t\t\t\t\tstate: \"timeout\",\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t\treason,\n\t\t\t\t\t});\n\t\t\t\t\ttrackRetryEvent(\"pie-iife-bundle-retry-timeout\", {\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t\tlastError: reason,\n\t\t\t\t\t});\n\t\t\t\t\ttrackRetryError(timeoutError, {\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\telapsedMs,\n\t\t\t\t\t\ttimeoutMs,\n\t\t\t\t\t\tlastError: reason,\n\t\t\t\t\t});\n\t\t\t\t\tthrow timeoutError;\n\t\t\t\t}\n\t\t\t\tconst nextDelay = Math.min(retryDelayMs, remainingMs);\n\t\t\t\tconfig.onBundleRetryStatus?.({\n\t\t\t\t\tstate: \"retrying\",\n\t\t\t\t\turl,\n\t\t\t\t\tattempt,\n\t\t\t\t\telapsedMs,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\tretryDelayMs: nextDelay,\n\t\t\t\t\treason,\n\t\t\t\t});\n\t\t\t\ttrackRetryEvent(\"pie-iife-bundle-retry\", {\n\t\t\t\t\turl,\n\t\t\t\t\tattempt,\n\t\t\t\t\telapsedMs,\n\t\t\t\t\tretryDelayMs: nextDelay,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\tlastError: reason,\n\t\t\t\t});\n\t\t\t\tawait waitMs(nextDelay);\n\t\t\t}\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 trackRetryEvent(\n\t\teventName: string,\n\t\tattributes: Record<string, unknown>,\n\t): void {\n\t\tconst provider = getInstrumentationProvider();\n\t\tif (!provider) return;\n\t\ttry {\n\t\t\tprovider.trackEvent(eventName, attributes);\n\t\t} catch {\n\t\t\t// Swallow: instrumentation must never break loading.\n\t\t}\n\t}\n\n\tfunction trackRetryError(\n\t\terror: Error,\n\t\tattributes: Record<string, unknown>,\n\t): void {\n\t\tconst provider = getInstrumentationProvider();\n\t\tif (!provider) return;\n\t\ttry {\n\t\t\tprovider.trackError(error, {\n\t\t\t\t...attributes,\n\t\t\t\tcomponent: \"iife-adapter\",\n\t\t\t\terrorType: \"IifeBundleRetryError\",\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\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\n\t\tconst bundleUrl = buildBundleUrl(elements, bundleType, config);\n\t\ttry {\n\t\t\tawait ensureBundleLoaded(bundleUrl, context.doc);\n\t\t} catch (err) {\n\t\t\tconst cause = err instanceof Error ? err.message : String(err);\n\t\t\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\t\t\tfor (const tag of Object.keys(elements)) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"bundle-load-failed\",\n\t\t\t\t\ttag,\n\t\t\t\t\turl: bundleUrl,\n\t\t\t\t\tcause,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow new AdapterFailure(reasons);\n\t\t}\n\n\t\tconst pieModule = readPieModule();\n\t\tif (!pieModule) {\n\t\t\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\t\t\tfor (const tag of Object.keys(elements)) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"bundle-load-failed\",\n\t\t\t\t\ttag,\n\t\t\t\t\turl: bundleUrl,\n\t\t\t\t\tcause: \"window.pie.default missing after bundle load\",\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow new AdapterFailure(reasons);\n\t\t}\n\n\t\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\t\tconst isEditorBundle = bundleType === BundleType.editor;\n\t\tconst registry = pieRegistry();\n\n\t\tfor (const [tag, packageVersion] of Object.entries(elements)) {\n\t\t\tconst packageName = getPackageWithoutVersion(packageVersion);\n\t\t\tconst elementData = pieModule[packageName];\n\t\t\tif (!elementData) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"package-not-in-bundle\",\n\t\t\t\t\ttag,\n\t\t\t\t\tpackageName,\n\t\t\t\t\tavailablePackages: Object.keys(pieModule),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst ElementClass = isEditorBundle\n\t\t\t\t? (elementData.Configure ?? createEmptyConfigure())\n\t\t\t\t: elementData.Element;\n\n\t\t\tif (!ElementClass) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"no-element-class\",\n\t\t\t\t\ttag,\n\t\t\t\t\tpackageName,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!isCustomElementConstructor(ElementClass)) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"not-a-constructor\",\n\t\t\t\t\ttag,\n\t\t\t\t\tpackageName,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet actualTag: string;\n\t\t\ttry {\n\t\t\t\tactualTag = validateCustomElementTag(\n\t\t\t\t\ttag,\n\t\t\t\t\t`element tag for ${packageName}`,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"define-failed\",\n\t\t\t\t\ttag,\n\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tdefineCustomElementSafely(\n\t\t\t\t\tactualTag,\n\t\t\t\t\tclass extends ElementClass {},\n\t\t\t\t\t`element tag for ${packageName}`,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\treasons.set(tag, {\n\t\t\t\t\tkind: \"define-failed\",\n\t\t\t\t\ttag,\n\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tregistry[actualTag] = {\n\t\t\t\tpackage: packageVersion,\n\t\t\t\tstatus: Status.loaded,\n\t\t\t\ttagName: actualTag,\n\t\t\t\telement: ElementClass,\n\t\t\t\tcontroller: needsControllers ? (elementData.controller ?? null) : null,\n\t\t\t\tconfig: elementData.config ?? null,\n\t\t\t\tbundleType,\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\treturn {\n\t\tload,\n\t\tget __seams() {\n\t\t\treturn __seams;\n\t\t},\n\t};\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction defaultLoadBundleScript(url: string, doc: Document): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst script = doc.createElement(\"script\") as HTMLScriptElement;\n\t\tscript.src = url;\n\t\tscript.defer = true;\n\t\tscript.setAttribute(\"data-pie-bundle\", \"true\");\n\t\tscript.onload = () => resolve();\n\t\tscript.onerror = () =>\n\t\t\treject(new Error(`Failed to load IIFE bundle from: ${url}`));\n\t\tdoc.head.appendChild(script);\n\t});\n}\n\nfunction readPieModule(): Record<string, any> | undefined {\n\tconst maybeWindow = (\n\t\tglobalThis as { window?: { pie?: { default?: unknown } } }\n\t).window;\n\tconst pieDefault = maybeWindow?.pie?.default;\n\tif (!pieDefault || typeof pieDefault !== \"object\") return undefined;\n\treturn pieDefault as Record<string, any>;\n}\n\nfunction buildBundleUrl(\n\telements: ElementMap,\n\tbundleType: BundleType,\n\tconfig: IifeBackendConfig,\n): string {\n\tconst elementTags = Object.keys(elements).sort().join(\",\");\n\n\tif (config.bundleInfo?.url) {\n\t\tconst separator = config.bundleInfo.url.includes(\"?\") ? \"&\" : \"?\";\n\t\treturn elementTags\n\t\t\t? `${config.bundleInfo.url}${separator}elements=${encodeURIComponent(elementTags)}`\n\t\t\t: config.bundleInfo.url;\n\t}\n\n\tconst packageVersions = Object.values(elements).join(\"+\");\n\tconst host = normalizeBundleHost(config.bundleHost);\n\tconst base = `${host}${encodeURI(packageVersions)}/${bundleType}`;\n\treturn elementTags\n\t\t? `${base}?elements=${encodeURIComponent(elementTags)}`\n\t\t: base;\n}\n\nfunction normalizeBundleHost(host: string): string {\n\treturn `${host.trim().replace(/\\/+$/, \"\")}/`;\n}\n\nfunction resolveBundleRetryConfig(\n\tconfigured: IifeBundleRetryConfig | undefined,\n): Required<IifeBundleRetryConfig> {\n\tconst retryDelayMs =\n\t\ttypeof configured?.retryDelayMs === \"number\" && configured.retryDelayMs > 0\n\t\t\t? configured.retryDelayMs\n\t\t\t: DEFAULT_IIFE_BUNDLE_RETRY_CONFIG.retryDelayMs;\n\tconst timeoutMs =\n\t\ttypeof configured?.timeoutMs === \"number\" && configured.timeoutMs > 0\n\t\t\t? configured.timeoutMs\n\t\t\t: DEFAULT_IIFE_BUNDLE_RETRY_CONFIG.timeoutMs;\n\treturn { retryDelayMs, timeoutMs };\n}\n\nfunction waitMs(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction createEmptyConfigure(): CustomElementConstructor {\n\t// Minimal configure fallback used for editor bundles that omit a Configure\n\t// export. Intentionally silent; the host will see a blank configuration UI\n\t// rather than a hard failure.\n\treturn class EmptyConfigureElement extends HTMLElement {\n\t\tprivate _model: unknown;\n\t\tprivate _configuration: unknown;\n\t\tget model() {\n\t\t\treturn this._model;\n\t\t}\n\t\tset model(v: unknown) {\n\t\t\tthis._model = v;\n\t\t}\n\t\tget configuration() {\n\t\t\treturn this._configuration;\n\t\t}\n\t\tset configuration(v: unknown) {\n\t\t\tthis._configuration = v;\n\t\t}\n\t};\n}\n"]}
@@ -34,7 +34,7 @@ export type { ElementMap } from "./ElementLoader.js";
34
34
  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
- export type { EsmBackend, ViewConfig } from "./esm-adapter.js";
37
+ export type { BuiltInEsmCdnProviderName, EsmBackend, EsmCdnProvider, EsmCdnProviderName, EsmCdnProviderOption, ViewConfig, } from "./esm-adapter.js";
38
38
  export { BUILT_IN_VIEWS, createEsmBackend } 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";
@@ -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;AAE7B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAKpE,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 { EsmBackend, ViewConfig } from \"./esm-adapter.js\";\nexport { BUILT_IN_VIEWS, createEsmBackend } 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"]}
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,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAKpE,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 { BUILT_IN_VIEWS, createEsmBackend } 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"]}
@@ -22,7 +22,7 @@ function lookupOwn(source, keys) {
22
22
  if (!isRecord(source))
23
23
  return undefined;
24
24
  for (const key of keys) {
25
- if (Object.prototype.hasOwnProperty.call(source, key)) {
25
+ if (Object.hasOwn(source, key)) {
26
26
  return source[key];
27
27
  }
28
28
  }
@@ -147,7 +147,9 @@ export async function validateAuthoringModels(config, configuration = {}, option
147
147
  };
148
148
  }
149
149
  function toError(value) {
150
- return value instanceof Error ? value : new Error(String(value ?? "Unknown authoring error"));
150
+ return value instanceof Error
151
+ ? value
152
+ : new Error(String(value ?? "Unknown authoring error"));
151
153
  }
152
154
  export function createAuthoringAssetEventManager(rootElement, handlers, onHandlerError) {
153
155
  return new AssetEventManager(rootElement, handlers.onInsertImage
@@ -1 +1 @@
1
- {"version":3,"file":"authoring.js","sourceRoot":"","sources":["../../src/pie/authoring.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tConfigEntity,\n\tImageHandler,\n\tPieController,\n\tPieModel,\n\tSoundHandler,\n} from \"../types/index.js\";\nimport { AssetEventManager } from \"./asset-handler.js\";\nimport { createPieLogger, isGlobalDebugEnabled } from \"./logger.js\";\nimport { findPieController } from \"./scoring.js\";\nimport type { AuthoringEnv, ConfigureElement } from \"./types.js\";\nimport { parsePackageName } from \"./utils.js\";\n\nconst logger = createPieLogger(\"authoring\", () => isGlobalDebugEnabled());\n\ntype RecordValue = Record<string, any>;\n\nexport type InitializedConfigureModel = {\n\tid: string;\n\telement: string;\n\tconfigureTag: string;\n\tconfiguration: unknown;\n};\n\nexport type AuthoringValidationResult = {\n\thasErrors: boolean;\n\tvalidatedModels: Array<PieModel & { validation?: unknown }>;\n};\n\nexport type AuthoringMediaHandlers = {\n\tonInsertImage?: (handler: ImageHandler) => void;\n\tonDeleteImage?: (src: string, done: (err?: Error) => void) => void;\n\tonInsertSound?: (handler: SoundHandler) => void;\n\tonDeleteSound?: (src: string, done: (err?: Error) => void) => void;\n};\n\nfunction isRecord(value: unknown): value is RecordValue {\n\treturn !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction packageNameWithoutVersion(packageSpec: string): string {\n\ttry {\n\t\treturn parsePackageName(packageSpec).name;\n\t} catch {\n\t\treturn packageSpec;\n\t}\n}\n\nfunction packageBaseName(packageName: string): string {\n\tconst lastSegment = packageName.split(\"/\").pop();\n\treturn lastSegment || packageName;\n}\n\nfunction lookupOwn(source: unknown, keys: string[]): unknown {\n\tif (!isRecord(source)) return undefined;\n\tfor (const key of keys) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\treturn source[key];\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction mergeConfiguration(deliveryConfig: unknown, authoringConfig: unknown): unknown {\n\tif (authoringConfig === undefined) {\n\t\treturn deliveryConfig ?? {};\n\t}\n\tif (isRecord(deliveryConfig) && isRecord(authoringConfig)) {\n\t\treturn {\n\t\t\t...deliveryConfig,\n\t\t\t...authoringConfig,\n\t\t};\n\t}\n\treturn authoringConfig;\n}\n\nexport function resolveConfigureConfiguration(\n\tconfiguration: Record<string, any> | undefined,\n\telementTag: string,\n\tpackageSpec: string,\n): unknown {\n\tconst versionlessPackageName = packageNameWithoutVersion(packageSpec);\n\tconst basePackageName = packageBaseName(versionlessPackageName);\n\tconst deliveryConfig = lookupOwn(configuration, [\n\t\tpackageSpec,\n\t\tversionlessPackageName,\n\t\telementTag,\n\t]);\n\tconst authoringConfig = lookupOwn(configuration?.authoring, [\n\t\telementTag,\n\t\tpackageSpec,\n\t\tversionlessPackageName,\n\t\tbasePackageName,\n\t]);\n\treturn mergeConfiguration(deliveryConfig, authoringConfig);\n}\n\nfunction findModelForConfigureElement(\n\tmodels: PieModel[],\n\tconfigureElement: Element,\n): PieModel | undefined {\n\tconst modelId = configureElement.id;\n\tif (!modelId) return undefined;\n\treturn models.find((model) => model.id === modelId);\n}\n\nfunction queryConfigureElements(\n\tcontainer: Pick<ParentNode, \"querySelectorAll\">,\n\tconfigureTag: string,\n): Element[] {\n\treturn Array.from(container.querySelectorAll(configureTag));\n}\n\nexport function initializeAuthoringConfigures(\n\tconfig: ConfigEntity,\n\tconfiguration: Record<string, any> = {},\n\toptions: { env: AuthoringEnv; container?: Pick<ParentNode, \"querySelectorAll\"> },\n): InitializedConfigureModel[] {\n\tconst container = options.container ?? document;\n\tconst initializedModels: InitializedConfigureModel[] = [];\n\n\tlogger.debug(\"[initializeAuthoringConfigures] Starting initialization\");\n\tlogger.debug(\"[initializeAuthoringConfigures] Config:\", config);\n\tlogger.debug(\"[initializeAuthoringConfigures] Configuration:\", configuration);\n\tlogger.debug(\"[initializeAuthoringConfigures] Env:\", options.env);\n\n\tif (!config?.elements || !config?.models) {\n\t\tlogger.warn(\"[initializeAuthoringConfigures] Invalid config - missing elements or models\");\n\t\treturn initializedModels;\n\t}\n\n\tfor (const [elementTag, packageSpec] of Object.entries(config.elements)) {\n\t\tconst configureTag = `${elementTag}-config`;\n\t\tconst elements = queryConfigureElements(container, configureTag);\n\n\t\tlogger.debug(\n\t\t\t`[initializeAuthoringConfigures] Found ${elements.length} ${configureTag} elements`,\n\t\t);\n\n\t\tfor (const element of elements) {\n\t\t\tconst model = findModelForConfigureElement(config.models, element);\n\n\t\t\tif (!model) {\n\t\t\t\tlogger.warn(\n\t\t\t\t\t`[initializeAuthoringConfigures] No model found for ${configureTag}#${element.id || \"(missing-id)\"}`,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst configureElement = element as unknown as ConfigureElement;\n\t\t\tconst elementConfiguration = resolveConfigureConfiguration(\n\t\t\t\tconfiguration,\n\t\t\t\telementTag,\n\t\t\t\tString(packageSpec),\n\t\t\t);\n\n\t\t\tconfigureElement.model = model;\n\t\t\tconfigureElement.configuration = elementConfiguration;\n\n\t\t\tinitializedModels.push({\n\t\t\t\tid: model.id,\n\t\t\t\telement: model.element,\n\t\t\t\tconfigureTag,\n\t\t\t\tconfiguration: elementConfiguration,\n\t\t\t});\n\n\t\t\tlogger.debug(\n\t\t\t\t`[initializeAuthoringConfigures] Model and configuration set for ${configureTag}#${model.id}`,\n\t\t\t\telementConfiguration,\n\t\t\t);\n\t\t}\n\t}\n\n\tlogger.debug(\"[initializeAuthoringConfigures] Initialization complete\");\n\treturn initializedModels;\n}\n\nfunction resolveValidationController(configureElement: Element): PieController | undefined {\n\treturn findPieController(configureElement.localName);\n}\n\nfunction hasValidationErrors(validation: unknown): boolean {\n\tif (!validation || typeof validation !== \"object\") return false;\n\tconst validationRecord = validation as Record<string, unknown>;\n\tif (validationRecord.hasErrors === true) return true;\n\tconst errors = validationRecord.errors;\n\treturn Array.isArray(errors) && errors.length > 0;\n}\n\nexport async function validateAuthoringModels(\n\tconfig: ConfigEntity,\n\tconfiguration: Record<string, any> = {},\n\toptions: { container?: Pick<ParentNode, \"querySelectorAll\"> } = {},\n): Promise<AuthoringValidationResult> {\n\tconst container = options.container ?? document;\n\tconst validatedModels: AuthoringValidationResult[\"validatedModels\"] = [];\n\n\tif (!config?.elements || !config?.models) {\n\t\treturn { hasErrors: false, validatedModels };\n\t}\n\n\tfor (const [elementTag, packageSpec] of Object.entries(config.elements)) {\n\t\tconst configureTag = `${elementTag}-config`;\n\t\tconst elements = queryConfigureElements(container, configureTag);\n\n\t\tfor (const element of elements) {\n\t\t\tconst model = findModelForConfigureElement(config.models, element);\n\t\t\tif (!model) continue;\n\n\t\t\tconst controller = resolveValidationController(element);\n\t\t\tconst elementConfiguration = resolveConfigureConfiguration(\n\t\t\t\tconfiguration,\n\t\t\t\telementTag,\n\t\t\t\tString(packageSpec),\n\t\t\t);\n\t\t\tconst validation =\n\t\t\t\ttypeof controller?.validate === \"function\"\n\t\t\t\t\t? await controller.validate(model, elementConfiguration as object)\n\t\t\t\t\t: undefined;\n\n\t\t\tvalidatedModels.push({\n\t\t\t\t...model,\n\t\t\t\t...(isRecord(validation) ? validation : {}),\n\t\t\t\tid: model.id,\n\t\t\t\telement: model.element,\n\t\t\t\tvalidation,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\thasErrors: validatedModels.some((model) => hasValidationErrors(model.validation)),\n\t\tvalidatedModels,\n\t};\n}\n\nfunction toError(value: unknown): Error {\n\treturn value instanceof Error ? value : new Error(String(value ?? \"Unknown authoring error\"));\n}\n\nexport function createAuthoringAssetEventManager(\n\trootElement: HTMLElement,\n\thandlers: AuthoringMediaHandlers,\n\tonHandlerError: (context: string, error: Error) => void,\n): AssetEventManager {\n\treturn new AssetEventManager(\n\t\trootElement,\n\t\thandlers.onInsertImage\n\t\t\t? (handler) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandlers.onInsertImage?.(handler);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = toError(error);\n\t\t\t\t\t\tonHandlerError(\"onInsertImage\", err);\n\t\t\t\t\t\thandler.done(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: undefined,\n\t\thandlers.onDeleteImage\n\t\t\t? (src, done) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandlers.onDeleteImage?.(src, done);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = toError(error);\n\t\t\t\t\t\tonHandlerError(\"onDeleteImage\", err);\n\t\t\t\t\t\tdone(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: undefined,\n\t\thandlers.onInsertSound\n\t\t\t? (handler) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandlers.onInsertSound?.(handler);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = toError(error);\n\t\t\t\t\t\tonHandlerError(\"onInsertSound\", err);\n\t\t\t\t\t\thandler.done(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: undefined,\n\t\thandlers.onDeleteSound\n\t\t\t? (src, done) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandlers.onDeleteSound?.(src, done);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = toError(error);\n\t\t\t\t\t\tonHandlerError(\"onDeleteSound\", err);\n\t\t\t\t\t\tdone(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: undefined,\n\t);\n}\n"]}
1
+ {"version":3,"file":"authoring.js","sourceRoot":"","sources":["../../src/pie/authoring.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tConfigEntity,\n\tImageHandler,\n\tPieController,\n\tPieModel,\n\tSoundHandler,\n} from \"../types/index.js\";\nimport { AssetEventManager } from \"./asset-handler.js\";\nimport { createPieLogger, isGlobalDebugEnabled } from \"./logger.js\";\nimport { findPieController } from \"./scoring.js\";\nimport type { AuthoringEnv, ConfigureElement } from \"./types.js\";\nimport { parsePackageName } from \"./utils.js\";\n\nconst logger = createPieLogger(\"authoring\", () => isGlobalDebugEnabled());\n\ntype RecordValue = Record<string, any>;\n\nexport type InitializedConfigureModel = {\n\tid: string;\n\telement: string;\n\tconfigureTag: string;\n\tconfiguration: unknown;\n};\n\nexport type AuthoringValidationResult = {\n\thasErrors: boolean;\n\tvalidatedModels: Array<PieModel & { validation?: unknown }>;\n};\n\nexport type AuthoringMediaHandlers = {\n\tonInsertImage?: (handler: ImageHandler) => void;\n\tonDeleteImage?: (src: string, done: (err?: Error) => void) => void;\n\tonInsertSound?: (handler: SoundHandler) => void;\n\tonDeleteSound?: (src: string, done: (err?: Error) => void) => void;\n};\n\nfunction isRecord(value: unknown): value is RecordValue {\n\treturn !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction packageNameWithoutVersion(packageSpec: string): string {\n\ttry {\n\t\treturn parsePackageName(packageSpec).name;\n\t} catch {\n\t\treturn packageSpec;\n\t}\n}\n\nfunction packageBaseName(packageName: string): string {\n\tconst lastSegment = packageName.split(\"/\").pop();\n\treturn lastSegment || packageName;\n}\n\nfunction lookupOwn(source: unknown, keys: string[]): unknown {\n\tif (!isRecord(source)) return undefined;\n\tfor (const key of keys) {\n\t\tif (Object.hasOwn(source, key)) {\n\t\t\treturn source[key];\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction mergeConfiguration(\n\tdeliveryConfig: unknown,\n\tauthoringConfig: unknown,\n): unknown {\n\tif (authoringConfig === undefined) {\n\t\treturn deliveryConfig ?? {};\n\t}\n\tif (isRecord(deliveryConfig) && isRecord(authoringConfig)) {\n\t\treturn {\n\t\t\t...deliveryConfig,\n\t\t\t...authoringConfig,\n\t\t};\n\t}\n\treturn authoringConfig;\n}\n\nexport function resolveConfigureConfiguration(\n\tconfiguration: Record<string, any> | undefined,\n\telementTag: string,\n\tpackageSpec: string,\n): unknown {\n\tconst versionlessPackageName = packageNameWithoutVersion(packageSpec);\n\tconst basePackageName = packageBaseName(versionlessPackageName);\n\tconst deliveryConfig = lookupOwn(configuration, [\n\t\tpackageSpec,\n\t\tversionlessPackageName,\n\t\telementTag,\n\t]);\n\tconst authoringConfig = lookupOwn(configuration?.authoring, [\n\t\telementTag,\n\t\tpackageSpec,\n\t\tversionlessPackageName,\n\t\tbasePackageName,\n\t]);\n\treturn mergeConfiguration(deliveryConfig, authoringConfig);\n}\n\nfunction findModelForConfigureElement(\n\tmodels: PieModel[],\n\tconfigureElement: Element,\n): PieModel | undefined {\n\tconst modelId = configureElement.id;\n\tif (!modelId) return undefined;\n\treturn models.find((model) => model.id === modelId);\n}\n\nfunction queryConfigureElements(\n\tcontainer: Pick<ParentNode, \"querySelectorAll\">,\n\tconfigureTag: string,\n): Element[] {\n\treturn Array.from(container.querySelectorAll(configureTag));\n}\n\nexport function initializeAuthoringConfigures(\n\tconfig: ConfigEntity,\n\tconfiguration: Record<string, any> = {},\n\toptions: {\n\t\tenv: AuthoringEnv;\n\t\tcontainer?: Pick<ParentNode, \"querySelectorAll\">;\n\t},\n): InitializedConfigureModel[] {\n\tconst container = options.container ?? document;\n\tconst initializedModels: InitializedConfigureModel[] = [];\n\n\tlogger.debug(\"[initializeAuthoringConfigures] Starting initialization\");\n\tlogger.debug(\"[initializeAuthoringConfigures] Config:\", config);\n\tlogger.debug(\"[initializeAuthoringConfigures] Configuration:\", configuration);\n\tlogger.debug(\"[initializeAuthoringConfigures] Env:\", options.env);\n\n\tif (!config?.elements || !config?.models) {\n\t\tlogger.warn(\n\t\t\t\"[initializeAuthoringConfigures] Invalid config - missing elements or models\",\n\t\t);\n\t\treturn initializedModels;\n\t}\n\n\tfor (const [elementTag, packageSpec] of Object.entries(config.elements)) {\n\t\tconst configureTag = `${elementTag}-config`;\n\t\tconst elements = queryConfigureElements(container, configureTag);\n\n\t\tlogger.debug(\n\t\t\t`[initializeAuthoringConfigures] Found ${elements.length} ${configureTag} elements`,\n\t\t);\n\n\t\tfor (const element of elements) {\n\t\t\tconst model = findModelForConfigureElement(config.models, element);\n\n\t\t\tif (!model) {\n\t\t\t\tlogger.warn(\n\t\t\t\t\t`[initializeAuthoringConfigures] No model found for ${configureTag}#${element.id || \"(missing-id)\"}`,\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst configureElement = element as unknown as ConfigureElement;\n\t\t\tconst elementConfiguration = resolveConfigureConfiguration(\n\t\t\t\tconfiguration,\n\t\t\t\telementTag,\n\t\t\t\tString(packageSpec),\n\t\t\t);\n\n\t\t\tconfigureElement.model = model;\n\t\t\tconfigureElement.configuration = elementConfiguration;\n\n\t\t\tinitializedModels.push({\n\t\t\t\tid: model.id,\n\t\t\t\telement: model.element,\n\t\t\t\tconfigureTag,\n\t\t\t\tconfiguration: elementConfiguration,\n\t\t\t});\n\n\t\t\tlogger.debug(\n\t\t\t\t`[initializeAuthoringConfigures] Model and configuration set for ${configureTag}#${model.id}`,\n\t\t\t\telementConfiguration,\n\t\t\t);\n\t\t}\n\t}\n\n\tlogger.debug(\"[initializeAuthoringConfigures] Initialization complete\");\n\treturn initializedModels;\n}\n\nfunction resolveValidationController(\n\tconfigureElement: Element,\n): PieController | undefined {\n\treturn findPieController(configureElement.localName);\n}\n\nfunction hasValidationErrors(validation: unknown): boolean {\n\tif (!validation || typeof validation !== \"object\") return false;\n\tconst validationRecord = validation as Record<string, unknown>;\n\tif (validationRecord.hasErrors === true) return true;\n\tconst errors = validationRecord.errors;\n\treturn Array.isArray(errors) && errors.length > 0;\n}\n\nexport async function validateAuthoringModels(\n\tconfig: ConfigEntity,\n\tconfiguration: Record<string, any> = {},\n\toptions: { container?: Pick<ParentNode, \"querySelectorAll\"> } = {},\n): Promise<AuthoringValidationResult> {\n\tconst container = options.container ?? document;\n\tconst validatedModels: AuthoringValidationResult[\"validatedModels\"] = [];\n\n\tif (!config?.elements || !config?.models) {\n\t\treturn { hasErrors: false, validatedModels };\n\t}\n\n\tfor (const [elementTag, packageSpec] of Object.entries(config.elements)) {\n\t\tconst configureTag = `${elementTag}-config`;\n\t\tconst elements = queryConfigureElements(container, configureTag);\n\n\t\tfor (const element of elements) {\n\t\t\tconst model = findModelForConfigureElement(config.models, element);\n\t\t\tif (!model) continue;\n\n\t\t\tconst controller = resolveValidationController(element);\n\t\t\tconst elementConfiguration = resolveConfigureConfiguration(\n\t\t\t\tconfiguration,\n\t\t\t\telementTag,\n\t\t\t\tString(packageSpec),\n\t\t\t);\n\t\t\tconst validation =\n\t\t\t\ttypeof controller?.validate === \"function\"\n\t\t\t\t\t? await controller.validate(model, elementConfiguration as object)\n\t\t\t\t\t: undefined;\n\n\t\t\tvalidatedModels.push({\n\t\t\t\t...model,\n\t\t\t\t...(isRecord(validation) ? validation : {}),\n\t\t\t\tid: model.id,\n\t\t\t\telement: model.element,\n\t\t\t\tvalidation,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\thasErrors: validatedModels.some((model) =>\n\t\t\thasValidationErrors(model.validation),\n\t\t),\n\t\tvalidatedModels,\n\t};\n}\n\nfunction toError(value: unknown): Error {\n\treturn value instanceof Error\n\t\t? value\n\t\t: new Error(String(value ?? \"Unknown authoring error\"));\n}\n\nexport function createAuthoringAssetEventManager(\n\trootElement: HTMLElement,\n\thandlers: AuthoringMediaHandlers,\n\tonHandlerError: (context: string, error: Error) => void,\n): AssetEventManager {\n\treturn new AssetEventManager(\n\t\trootElement,\n\t\thandlers.onInsertImage\n\t\t\t? (handler) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandlers.onInsertImage?.(handler);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = toError(error);\n\t\t\t\t\t\tonHandlerError(\"onInsertImage\", err);\n\t\t\t\t\t\thandler.done(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: undefined,\n\t\thandlers.onDeleteImage\n\t\t\t? (src, done) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandlers.onDeleteImage?.(src, done);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = toError(error);\n\t\t\t\t\t\tonHandlerError(\"onDeleteImage\", err);\n\t\t\t\t\t\tdone(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: undefined,\n\t\thandlers.onInsertSound\n\t\t\t? (handler) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandlers.onInsertSound?.(handler);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = toError(error);\n\t\t\t\t\t\tonHandlerError(\"onInsertSound\", err);\n\t\t\t\t\t\thandler.done(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: undefined,\n\t\thandlers.onDeleteSound\n\t\t\t? (src, done) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\thandlers.onDeleteSound?.(src, done);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst err = toError(error);\n\t\t\t\t\t\tonHandlerError(\"onDeleteSound\", err);\n\t\t\t\t\t\tdone(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t: undefined,\n\t);\n}\n"]}
@@ -83,7 +83,10 @@ export const validatePieConfigContract = (config) => {
83
83
  errors.push(`Markup tag "${tagName}" is not declared in \`elements\`.`);
84
84
  }
85
85
  }
86
- const referencedTags = new Set([...modelElementTags, ...markupElementTags]);
86
+ const referencedTags = new Set([
87
+ ...modelElementTags,
88
+ ...markupElementTags,
89
+ ]);
87
90
  for (const tagName of elementTags) {
88
91
  if (!referencedTags.has(tagName)) {
89
92
  warnings.push(`Element "${tagName}" is declared in \`elements\` but not referenced by models or markup.`);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/pie/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQ9C,SAAS,wBAAwB,CAAC,MAAc;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,QAAQ,GAAG,yBAAyB,CAAC;IAC3C,IAAI,KAAK,GAA2B,IAAI,CAAC;IACzC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,yEAAyE;QACzE,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACxC,MAAe,EACqB,EAAE;IACtC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,OAAO;YACN,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,CAAC,2BAA2B,CAAC;YACrC,QAAQ;SACR,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAE1B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,UAAU,GAAG,QAAmC,CAAC;IACvD,MAAM,SAAS,GAAG,MAAwC,CAAC;IAC3D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE5C,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACjE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YACtD,SAAS;QACV,CAAC;QACD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,yCAAyC,CAAC,CAAC;YAC1E,SAAS;QACV,CAAC;QACD,IAAI,CAAC;YACJ,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACR,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,+BAA+B,WAAW,IAAI,CAAC,CAAC;QAChF,CAAC;IACF,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,MAAM,YAAY,GAAG,KAAK,EAAE,OAAO,CAAC;QACpC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,kBAAkB,KAAK,0CAA0C,CAAC,CAAC;YAC/E,SAAS;QACV,CAAC;QACD,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,YAAY,IAAI,UAAU,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CACV,kBAAkB,YAAY,oCAAoC,CAClE,CAAC;QACH,CAAC;IACF,CAAC;IAED,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,MAAgB,CAAC,CAAC;IACrE,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,eAAe,OAAO,oCAAoC,CAAC,CAAC;QACzE,CAAC;IACF,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,gBAAgB,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC;IACpF,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CACZ,YAAY,OAAO,uEAAuE,CAC1F,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO;QACN,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;KACR,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAe,EAAQ,EAAE;IAChE,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO;IACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC/B,UAAwB,EACxB,UAAkB,EACL,EAAE;IACf,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,IAAI,UAAU,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC1D,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACrC,OAAO,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC;QAC9B,CAAC,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAChC,UAAwB,EACxB,UAAkB,EACT,EAAE;IACX,MAAM,KAAK,GACV,UAAU,IAAI,UAAU,CAAC,QAAQ;QAChC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAClD,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,CACN,gBAAgB,CAAC,UAAU,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAChE,CAAC;QACH,CAAC,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACP,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAClC,MAAoB,EACpB,UAAkB,EAClB,QAA6D,EAC9C,EAAE;IACjB,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnD,IAAI,IAAI,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QAC5D,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;gBACpB,IAAI,EAAE,EAAE,CAAC;oBACR,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC7C,CAAC;YACF,CAAC;YACD,OAAO,GAAG,CAAC;QACZ,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAqB,EAAgB,EAAE;IACxE,OAAO,mBAAmB,CACzB,SAAS,CAAC,OAAO,CAAC,EAClB,qBAAqB,EACrB,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACnB,OAAO;MACJ,MAAM;;SAEH,GAAG,QAAQ,EAAE,OAAO,GAAG;;KAE3B,CAAC;IACJ,CAAC,CACD,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,SAAY,EACR,EAAE;IACN,MAAM,iBAAiB,GAAG,YAAY,CAAC;IACvC,MAAM,mBAAmB,GAAG,eAAe,CAAC;IAC5C,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAU,EAAE,CACvD,OAAO;SACL,IAAI,EAAE;SACN,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAE1B,MAAM,gBAAgB,GAAG,CACxB,MAAc,EAC0C,EAAE;QAC1D,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAChC,IAAI,MAAM,CAAC,GAAG,iBAAiB,IAAI,mBAAmB,IAAI,CAAC,CAC3D,CAAC;QACF,OAAO,YAAY;YAClB,CAAC,CAAC;gBACA,QAAQ,EAAE,MAAM,CAAC,OAAO,CACvB,GAAG,iBAAiB,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,EACxC,EAAE,CACF;gBACD,sBAAsB,EAAE,YAAY,CAAC,CAAC,CAAC;aACvC;YACF,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,GAAW,EAAU,EAAE;QACnE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE1D,IAAI,sBAAsB,KAAK,oBAAoB,EAAE,CAAC;YACrD,OAAO,GAAG,QAAQ,GAAG,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;QACjE,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC,CAAC;IAEF,gDAAgD;IAChD,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACvE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE;QACtB,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,EAAE,GAAa,CAAC,CAAC;QACjE,OAAO;YACN,GAAG,GAAG;YACN,CAAC,MAAM,CAAC,EAAE;gBACT,aAAa;gBACb,OAAO,EAAE,GAAa;aACtB;SACD,CAAC;IACH,CAAC,EACD,EAAgE,CAChE,CAAC;IAEF,sCAAsC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CACpD,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,CACpD,YAAY,KAAK,aAAa;QAC7B,CAAC,CAAC,aAAa;aACZ,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,YAAY,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,aAAa,EAAE,CAAC;aACjE,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,YAAY,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,aAAa,EAAE,CAAC;QACtE,CAAC,CAAC,aAAa,EACjB,SAAS,CAAC,MAAM,CAAC,MAAM,CACvB,CAAC;IAEF,6BAA6B;IAC7B,MAAM,QAAQ,GAA2B,MAAM,CAAC,MAAM,CACrD,eAAe,CACf,CAAC,MAAM,CACP,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1C,GAAG,GAAG;QACN,CAAC,aAAa,CAAC,EAAE,GAAG;KACpB,CAAC,EACF,EAA4B,CAC5B,CAAC;IAEF,oEAAoE;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACpD,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC;QACtC,MAAM,OAAO,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;QAEjD,mEAAmE;QACnE,IAAI,OAAO,IAAI,OAAO,CAAC,aAAa,KAAK,eAAe,EAAE,CAAC;YAC1D,OAAO;gBACN,GAAG,KAAK;gBACR,OAAO,EAAE,OAAO,CAAC,aAAa;aAC9B,CAAC;QACH,CAAC;QAED,iFAAiF;QACjF,IAAI,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACd,CAAC;QAED,6EAA6E;QAC7E,6CAA6C;QAC7C,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;YACxE,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC3C,OAAO,QAAQ,KAAK,eAAe,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,+EAA+E;YAC/E,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;YACjD,OAAO;gBACN,GAAG,KAAK;gBACR,OAAO,EAAE,aAAa;aACtB,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,OAAO,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO;QACN,GAAG,SAAS;QACZ,MAAM,EAAE;YACP,GAAG,SAAS,CAAC,MAAM;YACnB,QAAQ;YACR,MAAM;YACN,MAAM;SACN;KACD,CAAC;AACH,CAAC,CAAC","sourcesContent":["/**\n * PIE Config Module\n *\n * Configuration entity manipulation utilities.\n */\n\nimport { cloneDeep } from \"../object/index.js\";\nimport type { ConfigContainerEntity, ConfigEntity, PieModel } from \"../types/index.js\";\nimport { parsePackageName } from \"./utils.js\";\n\nexport type PieConfigContractValidationResult = {\n\tvalid: boolean;\n\terrors: string[];\n\twarnings: string[];\n};\n\nfunction collectMarkupElementTags(markup: string): Set<string> {\n\tconst tags = new Set<string>();\n\tconst tagRegex = /<\\/?([a-zA-Z][\\w-]*)\\b/g;\n\tlet match: RegExpExecArray | null = null;\n\twhile ((match = tagRegex.exec(markup)) !== null) {\n\t\tconst tagName = String(match[1] || \"\").trim();\n\t\tif (!tagName) continue;\n\t\t// PIE custom elements use custom-element naming (must include a hyphen).\n\t\tif (tagName.includes(\"-\")) {\n\t\t\ttags.add(tagName);\n\t\t}\n\t}\n\treturn tags;\n}\n\nexport const validatePieConfigContract = (\n\tconfig: unknown,\n): PieConfigContractValidationResult => {\n\tconst errors: string[] = [];\n\tconst warnings: string[] = [];\n\tif (!config || typeof config !== \"object\" || Array.isArray(config)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terrors: [\"Config must be an object.\"],\n\t\t\twarnings,\n\t\t};\n\t}\n\n\tconst cfg = config as Record<string, unknown>;\n\tconst markup = cfg.markup;\n\tconst elements = cfg.elements;\n\tconst models = cfg.models;\n\n\tif (typeof markup !== \"string\") {\n\t\terrors.push(\"`markup` must be a string.\");\n\t}\n\tif (!elements || typeof elements !== \"object\" || Array.isArray(elements)) {\n\t\terrors.push(\"`elements` must be an object.\");\n\t}\n\tif (!Array.isArray(models)) {\n\t\terrors.push(\"`models` must be an array.\");\n\t}\n\tif (errors.length > 0) {\n\t\treturn { valid: false, errors, warnings };\n\t}\n\n\tconst elementMap = elements as Record<string, unknown>;\n\tconst modelList = models as Array<Record<string, unknown>>;\n\tconst elementTags = Object.keys(elementMap);\n\n\tfor (const [tagName, packageSpec] of Object.entries(elementMap)) {\n\t\tif (typeof tagName !== \"string\" || tagName.trim().length === 0) {\n\t\t\terrors.push(\"`elements` contains an empty tag name.\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof packageSpec !== \"string\" || packageSpec.trim().length === 0) {\n\t\t\terrors.push(`Element \"${tagName}\" must map to a non-empty package spec.`);\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tparsePackageName(packageSpec);\n\t\t} catch {\n\t\t\terrors.push(`Element \"${tagName}\" has invalid package spec \"${packageSpec}\".`);\n\t\t}\n\t}\n\n\tconst modelElementTags = new Set<string>();\n\tfor (const [index, model] of modelList.entries()) {\n\t\tconst modelElement = model?.element;\n\t\tif (typeof modelElement !== \"string\" || modelElement.trim().length === 0) {\n\t\t\terrors.push(`Model at index ${index} is missing a valid \"element\" reference.`);\n\t\t\tcontinue;\n\t\t}\n\t\tmodelElementTags.add(modelElement);\n\t\tif (!(modelElement in elementMap)) {\n\t\t\terrors.push(\n\t\t\t\t`Model element \"${modelElement}\" is not declared in \\`elements\\`.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst markupElementTags = collectMarkupElementTags(markup as string);\n\tfor (const tagName of markupElementTags) {\n\t\tif (!(tagName in elementMap)) {\n\t\t\terrors.push(`Markup tag \"${tagName}\" is not declared in \\`elements\\`.`);\n\t\t}\n\t}\n\n\tconst referencedTags = new Set<string>([...modelElementTags, ...markupElementTags]);\n\tfor (const tagName of elementTags) {\n\t\tif (!referencedTags.has(tagName)) {\n\t\t\twarnings.push(\n\t\t\t\t`Element \"${tagName}\" is declared in \\`elements\\` but not referenced by models or markup.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn {\n\t\tvalid: errors.length === 0,\n\t\terrors,\n\t\twarnings,\n\t};\n};\n\nexport const assertPieConfigContract = (config: unknown): void => {\n\tconst result = validatePieConfigContract(config);\n\tif (result.valid) return;\n\tthrow new Error(`Invalid PIE config contract: ${result.errors.join(\" | \")}`);\n};\n\n/**\n * Get all models for a given npm package\n */\nexport const modelsForPackage = (\n\tpieContent: ConfigEntity,\n\tnpmPackage: string,\n): PieModel[] => {\n\tif (pieContent && pieContent.models && pieContent.elements && npmPackage) {\n\t\tconst element = elementForPackage(pieContent, npmPackage);\n\t\treturn pieContent.models.filter((m) => {\n\t\t\treturn element === m.element;\n\t\t});\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/**\n * Gets the element tag defined for a package.\n * @param pieContent the pie content\n * @param npmPackage npm package name\n */\nexport const elementForPackage = (\n\tpieContent: ConfigEntity,\n\tnpmPackage: string,\n): string => {\n\tconst elems =\n\t\tpieContent && pieContent.elements\n\t\t\t? Object.keys(pieContent.elements).filter((elTag) => {\n\t\t\t\t\tconst pkg = pieContent.elements[elTag];\n\t\t\t\t\treturn (\n\t\t\t\t\t\tparsePackageName(npmPackage).name === parsePackageName(pkg).name\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t: [];\n\tif (elems.length > 1) {\n\t\tthrow new Error(\"invalid item format: multiple elements for package.\");\n\t} else {\n\t\treturn elems[0];\n\t}\n};\n\n/**\n * Modify the markup for a package that is present in elements/model but missing from markup,\n * like is the case for rubrics for instance. It does not change the input, but returns a deep\n * copy with the (potentially) modified markup.\n * @param config the pie content\n * @param npmPackage the npm package\n * @param template a callback function for modifying the markup\n */\nexport const addMarkupForPackage = (\n\tconfig: ConfigEntity,\n\tnpmPackage: string,\n\ttemplate: (id: string, tag: string, markup: string) => string,\n): ConfigEntity => {\n\tif (!config?.markup || !npmPackage) {\n\t\treturn config;\n\t}\n\tconst elem = elementForPackage(config, npmPackage);\n\tif (elem) {\n\t\tconst model = config.models.find((m) => m.element === elem);\n\t\tif (elem && model) {\n\t\t\tconst out = cloneDeep(config);\n\t\t\tconst match = out.markup.match(new RegExp(elem));\n\t\t\tif (!match) {\n\t\t\t\tconst id = model.id;\n\t\t\t\tif (id) {\n\t\t\t\t\tout.markup = template(id, elem, out.markup);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\t}\n\treturn config;\n};\n\n/**\n * Adds rubric html to markup if the item has a rubric and this is not included in the markup (which would be typical).\n */\nexport const addRubricIfNeeded = (content: ConfigEntity): ConfigEntity => {\n\treturn addMarkupForPackage(\n\t\tcloneDeep(content),\n\t\t\"@pie-element/rubric\",\n\t\t(id, tag, markup) => {\n\t\t\treturn `\n ${markup}\n <div style='width: 75%'>\n <${tag} id='${id}'></${tag}>\n </div>\n `;\n\t\t},\n\t);\n};\n\n/**\n * We make the web component name unique by using the version number. This is needed\n * because the spec doesn't allow for removing/ updating a custom element definition\n * once it's been defined. This is a workaround to ensure that the custom element\n * is redefined when the version changes. This requires the same thing to be done\n * in the markup when the item is loaded on the backend, similarly, and in addition\n * to applying sanctioned versions appropriate for the current organization.\n */\nexport const makeUniqueTags = <T extends ConfigContainerEntity>(\n\tcontainer: T,\n): T => {\n\tconst VERSION_DELIMITER = \"--version-\";\n\tconst TAG_VERSION_PATTERN = \"[0-9A-Za-z-]+\";\n\tconst encodeVersionForTag = (version: string): string =>\n\t\tversion\n\t\t\t.trim()\n\t\t\t.replace(/[.+]/g, \"-\")\n\t\t\t.replace(/[^0-9A-Za-z-]/g, \"-\")\n\t\t\t.replace(/-{2,}/g, \"-\");\n\n\tconst parseElementName = (\n\t\telName: string,\n\t): { baseName: string; existingEncodedVersion?: string } => {\n\t\tconst versionMatch = elName.match(\n\t\t\tnew RegExp(`${VERSION_DELIMITER}(${TAG_VERSION_PATTERN})$`),\n\t\t);\n\t\treturn versionMatch\n\t\t\t? {\n\t\t\t\t\tbaseName: elName.replace(\n\t\t\t\t\t\t`${VERSION_DELIMITER}${versionMatch[1]}`,\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t),\n\t\t\t\t\texistingEncodedVersion: versionMatch[1],\n\t\t\t\t}\n\t\t\t: { baseName: elName };\n\t};\n\n\tconst createVersionedName = (elName: string, pkg: string): string => {\n\t\tconst { baseName, existingEncodedVersion } = parseElementName(elName);\n\t\tconst { version } = parsePackageName(pkg);\n\t\tconst targetEncodedVersion = encodeVersionForTag(version);\n\n\t\tif (existingEncodedVersion !== targetEncodedVersion) {\n\t\t\treturn `${baseName}${VERSION_DELIMITER}${targetEncodedVersion}`;\n\t\t}\n\n\t\treturn elName;\n\t};\n\n\t// Create mapping of original to versioned names\n\tconst elementMappings = Object.entries(container.config.elements).reduce(\n\t\t(acc, [elName, pkg]) => {\n\t\t\tconst versionedName = createVersionedName(elName, pkg as string);\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t[elName]: {\n\t\t\t\t\tversionedName,\n\t\t\t\t\tpackage: pkg as string,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\t{} as Record<string, { versionedName: string; package: string }>,\n\t);\n\n\t// Transform markup using the mappings\n\tconst markup = Object.entries(elementMappings).reduce(\n\t\t(currentMarkup, [originalName, { versionedName }]) =>\n\t\t\toriginalName !== versionedName\n\t\t\t\t? currentMarkup\n\t\t\t\t\t\t.replace(new RegExp(`<${originalName}`, \"g\"), `<${versionedName}`)\n\t\t\t\t\t\t.replace(new RegExp(`</${originalName}`, \"g\"), `</${versionedName}`)\n\t\t\t\t: currentMarkup,\n\t\tcontainer.config.markup,\n\t);\n\n\t// Create new elements object\n\tconst elements: Record<string, string> = Object.values(\n\t\telementMappings,\n\t).reduce(\n\t\t(acc, { versionedName, package: pkg }) => ({\n\t\t\t...acc,\n\t\t\t[versionedName]: pkg,\n\t\t}),\n\t\t{} as Record<string, string>,\n\t);\n\n\t// Update the 'element' property in models to use the versioned name\n\tconst models = container.config.models.map((model) => {\n\t\tconst originalElement = model.element;\n\t\tconst mapping = elementMappings[originalElement];\n\n\t\t// If we have a mapping and the element name has changed, update it\n\t\tif (mapping && mapping.versionedName !== originalElement) {\n\t\t\treturn {\n\t\t\t\t...model,\n\t\t\t\telement: mapping.versionedName,\n\t\t\t};\n\t\t}\n\n\t\t// Check if the element is already directly referenced in the new elements object\n\t\tif (elements[originalElement]) {\n\t\t\treturn model;\n\t\t}\n\n\t\t// For cases where the model's element isn't in the original elements mapping\n\t\t// Try to find by base name (without version)\n\t\tconst baseNameMatches = Object.entries(elementMappings).filter(([key]) => {\n\t\t\tconst { baseName } = parseElementName(key);\n\t\t\treturn baseName === originalElement;\n\t\t});\n\n\t\tif (baseNameMatches.length > 0) {\n\t\t\t// Use the first match if there are multiple (shouldn't happen in normal usage)\n\t\t\tconst [, { versionedName }] = baseNameMatches[0];\n\t\t\treturn {\n\t\t\t\t...model,\n\t\t\t\telement: versionedName,\n\t\t\t};\n\t\t}\n\n\t\t// If we can't find a mapping, keep the original\n\t\treturn model;\n\t});\n\n\treturn {\n\t\t...container,\n\t\tconfig: {\n\t\t\t...container.config,\n\t\t\telements,\n\t\t\tmarkup,\n\t\t\tmodels,\n\t\t},\n\t};\n};\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/pie/config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PIE Config Module\n *\n * Configuration entity manipulation utilities.\n */\n\nimport { cloneDeep } from \"../object/index.js\";\nimport type {\n\tConfigContainerEntity,\n\tConfigEntity,\n\tPieModel,\n} from \"../types/index.js\";\nimport { parsePackageName } from \"./utils.js\";\n\nexport type PieConfigContractValidationResult = {\n\tvalid: boolean;\n\terrors: string[];\n\twarnings: string[];\n};\n\nfunction collectMarkupElementTags(markup: string): Set<string> {\n\tconst tags = new Set<string>();\n\tconst tagRegex = /<\\/?([a-zA-Z][\\w-]*)\\b/g;\n\tlet match: RegExpExecArray | null = null;\n\twhile ((match = tagRegex.exec(markup)) !== null) {\n\t\tconst tagName = String(match[1] || \"\").trim();\n\t\tif (!tagName) continue;\n\t\t// PIE custom elements use custom-element naming (must include a hyphen).\n\t\tif (tagName.includes(\"-\")) {\n\t\t\ttags.add(tagName);\n\t\t}\n\t}\n\treturn tags;\n}\n\nexport const validatePieConfigContract = (\n\tconfig: unknown,\n): PieConfigContractValidationResult => {\n\tconst errors: string[] = [];\n\tconst warnings: string[] = [];\n\tif (!config || typeof config !== \"object\" || Array.isArray(config)) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terrors: [\"Config must be an object.\"],\n\t\t\twarnings,\n\t\t};\n\t}\n\n\tconst cfg = config as Record<string, unknown>;\n\tconst markup = cfg.markup;\n\tconst elements = cfg.elements;\n\tconst models = cfg.models;\n\n\tif (typeof markup !== \"string\") {\n\t\terrors.push(\"`markup` must be a string.\");\n\t}\n\tif (!elements || typeof elements !== \"object\" || Array.isArray(elements)) {\n\t\terrors.push(\"`elements` must be an object.\");\n\t}\n\tif (!Array.isArray(models)) {\n\t\terrors.push(\"`models` must be an array.\");\n\t}\n\tif (errors.length > 0) {\n\t\treturn { valid: false, errors, warnings };\n\t}\n\n\tconst elementMap = elements as Record<string, unknown>;\n\tconst modelList = models as Array<Record<string, unknown>>;\n\tconst elementTags = Object.keys(elementMap);\n\n\tfor (const [tagName, packageSpec] of Object.entries(elementMap)) {\n\t\tif (typeof tagName !== \"string\" || tagName.trim().length === 0) {\n\t\t\terrors.push(\"`elements` contains an empty tag name.\");\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof packageSpec !== \"string\" || packageSpec.trim().length === 0) {\n\t\t\terrors.push(`Element \"${tagName}\" must map to a non-empty package spec.`);\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tparsePackageName(packageSpec);\n\t\t} catch {\n\t\t\terrors.push(\n\t\t\t\t`Element \"${tagName}\" has invalid package spec \"${packageSpec}\".`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst modelElementTags = new Set<string>();\n\tfor (const [index, model] of modelList.entries()) {\n\t\tconst modelElement = model?.element;\n\t\tif (typeof modelElement !== \"string\" || modelElement.trim().length === 0) {\n\t\t\terrors.push(\n\t\t\t\t`Model at index ${index} is missing a valid \"element\" reference.`,\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tmodelElementTags.add(modelElement);\n\t\tif (!(modelElement in elementMap)) {\n\t\t\terrors.push(\n\t\t\t\t`Model element \"${modelElement}\" is not declared in \\`elements\\`.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst markupElementTags = collectMarkupElementTags(markup as string);\n\tfor (const tagName of markupElementTags) {\n\t\tif (!(tagName in elementMap)) {\n\t\t\terrors.push(`Markup tag \"${tagName}\" is not declared in \\`elements\\`.`);\n\t\t}\n\t}\n\n\tconst referencedTags = new Set<string>([\n\t\t...modelElementTags,\n\t\t...markupElementTags,\n\t]);\n\tfor (const tagName of elementTags) {\n\t\tif (!referencedTags.has(tagName)) {\n\t\t\twarnings.push(\n\t\t\t\t`Element \"${tagName}\" is declared in \\`elements\\` but not referenced by models or markup.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn {\n\t\tvalid: errors.length === 0,\n\t\terrors,\n\t\twarnings,\n\t};\n};\n\nexport const assertPieConfigContract = (config: unknown): void => {\n\tconst result = validatePieConfigContract(config);\n\tif (result.valid) return;\n\tthrow new Error(`Invalid PIE config contract: ${result.errors.join(\" | \")}`);\n};\n\n/**\n * Get all models for a given npm package\n */\nexport const modelsForPackage = (\n\tpieContent: ConfigEntity,\n\tnpmPackage: string,\n): PieModel[] => {\n\tif (pieContent && pieContent.models && pieContent.elements && npmPackage) {\n\t\tconst element = elementForPackage(pieContent, npmPackage);\n\t\treturn pieContent.models.filter((m) => {\n\t\t\treturn element === m.element;\n\t\t});\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/**\n * Gets the element tag defined for a package.\n * @param pieContent the pie content\n * @param npmPackage npm package name\n */\nexport const elementForPackage = (\n\tpieContent: ConfigEntity,\n\tnpmPackage: string,\n): string => {\n\tconst elems =\n\t\tpieContent && pieContent.elements\n\t\t\t? Object.keys(pieContent.elements).filter((elTag) => {\n\t\t\t\t\tconst pkg = pieContent.elements[elTag];\n\t\t\t\t\treturn (\n\t\t\t\t\t\tparsePackageName(npmPackage).name === parsePackageName(pkg).name\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t: [];\n\tif (elems.length > 1) {\n\t\tthrow new Error(\"invalid item format: multiple elements for package.\");\n\t} else {\n\t\treturn elems[0];\n\t}\n};\n\n/**\n * Modify the markup for a package that is present in elements/model but missing from markup,\n * like is the case for rubrics for instance. It does not change the input, but returns a deep\n * copy with the (potentially) modified markup.\n * @param config the pie content\n * @param npmPackage the npm package\n * @param template a callback function for modifying the markup\n */\nexport const addMarkupForPackage = (\n\tconfig: ConfigEntity,\n\tnpmPackage: string,\n\ttemplate: (id: string, tag: string, markup: string) => string,\n): ConfigEntity => {\n\tif (!config?.markup || !npmPackage) {\n\t\treturn config;\n\t}\n\tconst elem = elementForPackage(config, npmPackage);\n\tif (elem) {\n\t\tconst model = config.models.find((m) => m.element === elem);\n\t\tif (elem && model) {\n\t\t\tconst out = cloneDeep(config);\n\t\t\tconst match = out.markup.match(new RegExp(elem));\n\t\t\tif (!match) {\n\t\t\t\tconst id = model.id;\n\t\t\t\tif (id) {\n\t\t\t\t\tout.markup = template(id, elem, out.markup);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\t}\n\treturn config;\n};\n\n/**\n * Adds rubric html to markup if the item has a rubric and this is not included in the markup (which would be typical).\n */\nexport const addRubricIfNeeded = (content: ConfigEntity): ConfigEntity => {\n\treturn addMarkupForPackage(\n\t\tcloneDeep(content),\n\t\t\"@pie-element/rubric\",\n\t\t(id, tag, markup) => {\n\t\t\treturn `\n ${markup}\n <div style='width: 75%'>\n <${tag} id='${id}'></${tag}>\n </div>\n `;\n\t\t},\n\t);\n};\n\n/**\n * We make the web component name unique by using the version number. This is needed\n * because the spec doesn't allow for removing/ updating a custom element definition\n * once it's been defined. This is a workaround to ensure that the custom element\n * is redefined when the version changes. This requires the same thing to be done\n * in the markup when the item is loaded on the backend, similarly, and in addition\n * to applying sanctioned versions appropriate for the current organization.\n */\nexport const makeUniqueTags = <T extends ConfigContainerEntity>(\n\tcontainer: T,\n): T => {\n\tconst VERSION_DELIMITER = \"--version-\";\n\tconst TAG_VERSION_PATTERN = \"[0-9A-Za-z-]+\";\n\tconst encodeVersionForTag = (version: string): string =>\n\t\tversion\n\t\t\t.trim()\n\t\t\t.replace(/[.+]/g, \"-\")\n\t\t\t.replace(/[^0-9A-Za-z-]/g, \"-\")\n\t\t\t.replace(/-{2,}/g, \"-\");\n\n\tconst parseElementName = (\n\t\telName: string,\n\t): { baseName: string; existingEncodedVersion?: string } => {\n\t\tconst versionMatch = elName.match(\n\t\t\tnew RegExp(`${VERSION_DELIMITER}(${TAG_VERSION_PATTERN})$`),\n\t\t);\n\t\treturn versionMatch\n\t\t\t? {\n\t\t\t\t\tbaseName: elName.replace(\n\t\t\t\t\t\t`${VERSION_DELIMITER}${versionMatch[1]}`,\n\t\t\t\t\t\t\"\",\n\t\t\t\t\t),\n\t\t\t\t\texistingEncodedVersion: versionMatch[1],\n\t\t\t\t}\n\t\t\t: { baseName: elName };\n\t};\n\n\tconst createVersionedName = (elName: string, pkg: string): string => {\n\t\tconst { baseName, existingEncodedVersion } = parseElementName(elName);\n\t\tconst { version } = parsePackageName(pkg);\n\t\tconst targetEncodedVersion = encodeVersionForTag(version);\n\n\t\tif (existingEncodedVersion !== targetEncodedVersion) {\n\t\t\treturn `${baseName}${VERSION_DELIMITER}${targetEncodedVersion}`;\n\t\t}\n\n\t\treturn elName;\n\t};\n\n\t// Create mapping of original to versioned names\n\tconst elementMappings = Object.entries(container.config.elements).reduce(\n\t\t(acc, [elName, pkg]) => {\n\t\t\tconst versionedName = createVersionedName(elName, pkg as string);\n\t\t\treturn {\n\t\t\t\t...acc,\n\t\t\t\t[elName]: {\n\t\t\t\t\tversionedName,\n\t\t\t\t\tpackage: pkg as string,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t\t{} as Record<string, { versionedName: string; package: string }>,\n\t);\n\n\t// Transform markup using the mappings\n\tconst markup = Object.entries(elementMappings).reduce(\n\t\t(currentMarkup, [originalName, { versionedName }]) =>\n\t\t\toriginalName !== versionedName\n\t\t\t\t? currentMarkup\n\t\t\t\t\t\t.replace(new RegExp(`<${originalName}`, \"g\"), `<${versionedName}`)\n\t\t\t\t\t\t.replace(new RegExp(`</${originalName}`, \"g\"), `</${versionedName}`)\n\t\t\t\t: currentMarkup,\n\t\tcontainer.config.markup,\n\t);\n\n\t// Create new elements object\n\tconst elements: Record<string, string> = Object.values(\n\t\telementMappings,\n\t).reduce(\n\t\t(acc, { versionedName, package: pkg }) => ({\n\t\t\t...acc,\n\t\t\t[versionedName]: pkg,\n\t\t}),\n\t\t{} as Record<string, string>,\n\t);\n\n\t// Update the 'element' property in models to use the versioned name\n\tconst models = container.config.models.map((model) => {\n\t\tconst originalElement = model.element;\n\t\tconst mapping = elementMappings[originalElement];\n\n\t\t// If we have a mapping and the element name has changed, update it\n\t\tif (mapping && mapping.versionedName !== originalElement) {\n\t\t\treturn {\n\t\t\t\t...model,\n\t\t\t\telement: mapping.versionedName,\n\t\t\t};\n\t\t}\n\n\t\t// Check if the element is already directly referenced in the new elements object\n\t\tif (elements[originalElement]) {\n\t\t\treturn model;\n\t\t}\n\n\t\t// For cases where the model's element isn't in the original elements mapping\n\t\t// Try to find by base name (without version)\n\t\tconst baseNameMatches = Object.entries(elementMappings).filter(([key]) => {\n\t\t\tconst { baseName } = parseElementName(key);\n\t\t\treturn baseName === originalElement;\n\t\t});\n\n\t\tif (baseNameMatches.length > 0) {\n\t\t\t// Use the first match if there are multiple (shouldn't happen in normal usage)\n\t\t\tconst [, { versionedName }] = baseNameMatches[0];\n\t\t\treturn {\n\t\t\t\t...model,\n\t\t\t\telement: versionedName,\n\t\t\t};\n\t\t}\n\n\t\t// If we can't find a mapping, keep the original\n\t\treturn model;\n\t});\n\n\treturn {\n\t\t...container,\n\t\tconfig: {\n\t\t\t...container.config,\n\t\t\telements,\n\t\t\tmarkup,\n\t\t\tmodels,\n\t\t},\n\t};\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"configure-initialization.js","sourceRoot":"","sources":["../../src/pie/configure-initialization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,6BAA6B,GAE7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAE/E;;;;;;;GAOG;AACH,MAAM,UAAU,oCAAoC,CACnD,MAAoB,EACpB,aAAkC,EAClC,OAAgF;IAEhF,MAAM,CAAC,KAAK,CACX,gEAAgE,CAChE,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CACV,oFAAoF,CACpF,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;IAED,iFAAiF;IACjF,KAAK,WAAW,EAAE,CAAC;IAEnB,MAAM,iBAAiB,GAAG,6BAA6B,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IACxF,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAC/E,OAAO,iBAAiB,CAAC;AAC1B,CAAC","sourcesContent":["/**\n * Configure Element Initialization\n *\n * Handles initialization of PIE configure elements (authoring mode).\n * Parallel to initialization.ts but for configure elements with -config suffix.\n */\n\nimport type { ConfigEntity } from \"../types/index.js\";\nimport {\n\tinitializeAuthoringConfigures,\n\ttype InitializedConfigureModel,\n} from \"./authoring.js\";\nimport { createPieLogger, isGlobalDebugEnabled } from \"./logger.js\";\nimport { pieRegistry } from \"./registry.js\";\nimport type { AuthoringEnv } from \"./types.js\";\n\nconst logger = createPieLogger(\"configure-init\", () => isGlobalDebugEnabled());\n\n/**\n * Initialize configure elements from loaded bundle\n *\n * This function:\n * 1. Finds all configure elements in the DOM (elements with -config suffix)\n * 2. Sets their model and configuration properties\n * 3. Attaches event listeners for model-updated events\n */\nexport function initializeConfiguresFromLoadedBundle(\n\tconfig: ConfigEntity,\n\tconfiguration: Record<string, any>,\n\toptions: { env: AuthoringEnv; container?: Pick<ParentNode, \"querySelectorAll\"> },\n): InitializedConfigureModel[] {\n\tlogger.debug(\n\t\t\"[initializeConfiguresFromLoadedBundle] Starting initialization\",\n\t);\n\n\tif (!config?.elements || !config?.models) {\n\t\tlogger.warn(\n\t\t\t\"[initializeConfiguresFromLoadedBundle] Invalid config - missing elements or models\",\n\t\t);\n\t\treturn [];\n\t}\n\n\t// Ensure the PIE registry is initialized (side effects register global helpers).\n\tvoid pieRegistry();\n\n\tconst initializedModels = initializeAuthoringConfigures(config, configuration, options);\n\tlogger.debug(\"[initializeConfiguresFromLoadedBundle] Initialization complete\");\n\treturn initializedModels;\n}\n\n"]}
1
+ {"version":3,"file":"configure-initialization.js","sourceRoot":"","sources":["../../src/pie/configure-initialization.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,6BAA6B,GAE7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAE/E;;;;;;;GAOG;AACH,MAAM,UAAU,oCAAoC,CACnD,MAAoB,EACpB,aAAkC,EAClC,OAGC;IAED,MAAM,CAAC,KAAK,CACX,gEAAgE,CAChE,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CACV,oFAAoF,CACpF,CAAC;QACF,OAAO,EAAE,CAAC;IACX,CAAC;IAED,iFAAiF;IACjF,KAAK,WAAW,EAAE,CAAC;IAEnB,MAAM,iBAAiB,GAAG,6BAA6B,CACtD,MAAM,EACN,aAAa,EACb,OAAO,CACP,CAAC;IACF,MAAM,CAAC,KAAK,CACX,gEAAgE,CAChE,CAAC;IACF,OAAO,iBAAiB,CAAC;AAC1B,CAAC","sourcesContent":["/**\n * Configure Element Initialization\n *\n * Handles initialization of PIE configure elements (authoring mode).\n * Parallel to initialization.ts but for configure elements with -config suffix.\n */\n\nimport type { ConfigEntity } from \"../types/index.js\";\nimport {\n\tinitializeAuthoringConfigures,\n\ttype InitializedConfigureModel,\n} from \"./authoring.js\";\nimport { createPieLogger, isGlobalDebugEnabled } from \"./logger.js\";\nimport { pieRegistry } from \"./registry.js\";\nimport type { AuthoringEnv } from \"./types.js\";\n\nconst logger = createPieLogger(\"configure-init\", () => isGlobalDebugEnabled());\n\n/**\n * Initialize configure elements from loaded bundle\n *\n * This function:\n * 1. Finds all configure elements in the DOM (elements with -config suffix)\n * 2. Sets their model and configuration properties\n * 3. Attaches event listeners for model-updated events\n */\nexport function initializeConfiguresFromLoadedBundle(\n\tconfig: ConfigEntity,\n\tconfiguration: Record<string, any>,\n\toptions: {\n\t\tenv: AuthoringEnv;\n\t\tcontainer?: Pick<ParentNode, \"querySelectorAll\">;\n\t},\n): InitializedConfigureModel[] {\n\tlogger.debug(\n\t\t\"[initializeConfiguresFromLoadedBundle] Starting initialization\",\n\t);\n\n\tif (!config?.elements || !config?.models) {\n\t\tlogger.warn(\n\t\t\t\"[initializeConfiguresFromLoadedBundle] Invalid config - missing elements or models\",\n\t\t);\n\t\treturn [];\n\t}\n\n\t// Ensure the PIE registry is initialized (side effects register global helpers).\n\tvoid pieRegistry();\n\n\tconst initializedModels = initializeAuthoringConfigures(\n\t\tconfig,\n\t\tconfiguration,\n\t\toptions,\n\t);\n\tlogger.debug(\n\t\t\"[initializeConfiguresFromLoadedBundle] Initialization complete\",\n\t);\n\treturn initializedModels;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"correct-response-env.js","sourceRoot":"","sources":["../../src/pie/correct-response-env.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,GAAQ,EAAW,EAAE,CAC/D,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC;AAE1B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAQ,EAAO,EAAE,CAAC,CAAC;IACvD,GAAG,GAAG;IACN,IAAI,EAAE,YAAY;CACnB,CAAC,CAAC","sourcesContent":["import type { Env } from \"../types/index.js\";\n\nexport const canPopulateCorrectResponses = (env: Env): boolean =>\n env.mode !== \"evaluate\";\n\nexport const getCorrectResponseEnv = (env: Env): Env => ({\n ...env,\n role: \"instructor\",\n});\n"]}
1
+ {"version":3,"file":"correct-response-env.js","sourceRoot":"","sources":["../../src/pie/correct-response-env.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,GAAQ,EAAW,EAAE,CAChE,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC;AAEzB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAQ,EAAO,EAAE,CAAC,CAAC;IACxD,GAAG,GAAG;IACN,IAAI,EAAE,YAAY;CAClB,CAAC,CAAC","sourcesContent":["import type { Env } from \"../types/index.js\";\n\nexport const canPopulateCorrectResponses = (env: Env): boolean =>\n\tenv.mode !== \"evaluate\";\n\nexport const getCorrectResponseEnv = (env: Env): Env => ({\n\t...env,\n\trole: \"instructor\",\n});\n"]}
@@ -23,7 +23,7 @@ export type { CreateStageTrackerOptions, StageTracker, } from "./stage-tracker.j
23
23
  export { ASSESSMENT_INSTRUMENTATION_EVENT_MAP, SECTION_INSTRUMENTATION_EVENT_MAP, TOOLKIT_INSTRUMENTATION_EVENT_MAP, } from "./instrumentation-event-map.js";
24
24
  export type { InstrumentationEventMapping } from "./instrumentation-event-map.js";
25
25
  export type { ItemControllerOptions } from "./item-controller.js";
26
- export { ItemController, normalizeItemSessionContainer } from "./item-controller.js";
26
+ export { ItemController, normalizeItemSessionContainer, } from "./item-controller.js";
27
27
  export type { ItemSessionContainer as CanonicalItemSessionContainer, ItemSessionUpdateIntent, NormalizedItemSessionChange, } from "./item-session-contract.js";
28
28
  export { hasResponseValue, normalizeItemSessionChange, } from "./item-session-contract.js";
29
29
  export type { ItemSessionContainer, ItemSessionStorageStrategy, } from "./item-controller-storage.js";