@pie-players/pie-players-shared 0.3.61 → 0.3.63

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 (147) hide show
  1. package/dist/config/profile.js +0 -1
  2. package/dist/i18n/index.js +0 -1
  3. package/dist/i18n/loader.js +0 -1
  4. package/dist/i18n/simple-i18n.js +0 -1
  5. package/dist/i18n/types.js +0 -1
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.js +1 -1
  8. package/dist/instrumentation/debug-panel-stream.js +0 -1
  9. package/dist/instrumentation/index.js +0 -1
  10. package/dist/instrumentation/provider-guards.js +0 -1
  11. package/dist/instrumentation/providers/BaseInstrumentationProvider.js +0 -1
  12. package/dist/instrumentation/providers/CompositeInstrumentationProvider.js +0 -1
  13. package/dist/instrumentation/providers/ConsoleInstrumentationProvider.js +0 -1
  14. package/dist/instrumentation/providers/DebugPanelInstrumentationProvider.js +0 -1
  15. package/dist/instrumentation/providers/NewRelicInstrumentationProvider.js +0 -1
  16. package/dist/instrumentation/providers/index.js +0 -1
  17. package/dist/instrumentation/types.js +0 -1
  18. package/dist/loader-config.js +0 -1
  19. package/dist/loaders/ElementLoader.js +0 -1
  20. package/dist/loaders/element-loader-types.js +0 -1
  21. package/dist/loaders/element-loader.js +0 -1
  22. package/dist/loaders/element-package-policy.js +0 -1
  23. package/dist/loaders/esm-adapter.js +0 -1
  24. package/dist/loaders/iife-adapter.js +0 -1
  25. package/dist/loaders/index.js +0 -1
  26. package/dist/object/index.js +0 -1
  27. package/dist/pie/asset-handler.js +0 -1
  28. package/dist/pie/authoring-tag.js +0 -1
  29. package/dist/pie/authoring.js +0 -1
  30. package/dist/pie/component-context.js +0 -1
  31. package/dist/pie/config.js +0 -1
  32. package/dist/pie/configure-initialization.js +0 -1
  33. package/dist/pie/correct-response-env.js +0 -1
  34. package/dist/pie/custom-element-define.js +0 -1
  35. package/dist/pie/index.js +0 -1
  36. package/dist/pie/initialization.js +0 -1
  37. package/dist/pie/instrumentation-event-bridge.js +0 -1
  38. package/dist/pie/instrumentation-event-map.js +0 -1
  39. package/dist/pie/instrumentation-provider-resolution.js +0 -1
  40. package/dist/pie/item-controller-storage.js +0 -1
  41. package/dist/pie/item-controller.js +0 -1
  42. package/dist/pie/item-session-contract.js +0 -1
  43. package/dist/pie/logger.js +0 -1
  44. package/dist/pie/math-rendering.js +0 -1
  45. package/dist/pie/overrides.js +0 -1
  46. package/dist/pie/player-initializer.js +0 -1
  47. package/dist/pie/registry.js +0 -1
  48. package/dist/pie/resource-monitor.js +0 -1
  49. package/dist/pie/scoring.js +0 -1
  50. package/dist/pie/stage-tracker.js +0 -1
  51. package/dist/pie/stages.js +0 -1
  52. package/dist/pie/tag-names.js +0 -1
  53. package/dist/pie/types.js +0 -1
  54. package/dist/pie/updates.js +0 -1
  55. package/dist/pie/utils.js +0 -1
  56. package/dist/pie/versioned-tag.js +0 -1
  57. package/dist/player-strategy.js +0 -1
  58. package/dist/security/index.js +0 -1
  59. package/dist/security/sanitize-item-markup.d.ts +11 -0
  60. package/dist/security/sanitize-item-markup.js +5 -3
  61. package/dist/security/sanitize-svg-icon.js +0 -1
  62. package/dist/security/validate-style-url.js +0 -1
  63. package/dist/security/wrap-model-rich-content.js +0 -1
  64. package/dist/security/wrap-overwide-images.js +0 -1
  65. package/dist/security/wrap-overwide-tables.js +0 -1
  66. package/dist/server/npm-registry.js +0 -1
  67. package/dist/types/index.js +0 -1
  68. package/dist/ui/content-styles.js +0 -1
  69. package/dist/ui/debug-panel-persistence.js +0 -1
  70. package/dist/ui/first-focusable.js +0 -1
  71. package/dist/ui/focus-trap.js +0 -1
  72. package/dist/ui/safe-storage.js +0 -1
  73. package/dist/ui/scope-css.d.ts +56 -0
  74. package/dist/ui/scope-css.js +310 -0
  75. package/dist/ui/zoom-compensation.js +0 -1
  76. package/package.json +4 -4
  77. package/dist/config/profile.js.map +0 -1
  78. package/dist/i18n/index.js.map +0 -1
  79. package/dist/i18n/loader.js.map +0 -1
  80. package/dist/i18n/simple-i18n.js.map +0 -1
  81. package/dist/i18n/types.js.map +0 -1
  82. package/dist/index.js.map +0 -1
  83. package/dist/instrumentation/debug-panel-stream.js.map +0 -1
  84. package/dist/instrumentation/index.js.map +0 -1
  85. package/dist/instrumentation/provider-guards.js.map +0 -1
  86. package/dist/instrumentation/providers/BaseInstrumentationProvider.js.map +0 -1
  87. package/dist/instrumentation/providers/CompositeInstrumentationProvider.js.map +0 -1
  88. package/dist/instrumentation/providers/ConsoleInstrumentationProvider.js.map +0 -1
  89. package/dist/instrumentation/providers/DebugPanelInstrumentationProvider.js.map +0 -1
  90. package/dist/instrumentation/providers/NewRelicInstrumentationProvider.js.map +0 -1
  91. package/dist/instrumentation/providers/index.js.map +0 -1
  92. package/dist/instrumentation/types.js.map +0 -1
  93. package/dist/loader-config.js.map +0 -1
  94. package/dist/loaders/ElementLoader.js.map +0 -1
  95. package/dist/loaders/element-loader-types.js.map +0 -1
  96. package/dist/loaders/element-loader.js.map +0 -1
  97. package/dist/loaders/element-package-policy.js.map +0 -1
  98. package/dist/loaders/esm-adapter.js.map +0 -1
  99. package/dist/loaders/iife-adapter.js.map +0 -1
  100. package/dist/loaders/index.js.map +0 -1
  101. package/dist/object/index.js.map +0 -1
  102. package/dist/pie/asset-handler.js.map +0 -1
  103. package/dist/pie/authoring-tag.js.map +0 -1
  104. package/dist/pie/authoring.js.map +0 -1
  105. package/dist/pie/component-context.js.map +0 -1
  106. package/dist/pie/config.js.map +0 -1
  107. package/dist/pie/configure-initialization.js.map +0 -1
  108. package/dist/pie/correct-response-env.js.map +0 -1
  109. package/dist/pie/custom-element-define.js.map +0 -1
  110. package/dist/pie/index.js.map +0 -1
  111. package/dist/pie/initialization.js.map +0 -1
  112. package/dist/pie/instrumentation-event-bridge.js.map +0 -1
  113. package/dist/pie/instrumentation-event-map.js.map +0 -1
  114. package/dist/pie/instrumentation-provider-resolution.js.map +0 -1
  115. package/dist/pie/item-controller-storage.js.map +0 -1
  116. package/dist/pie/item-controller.js.map +0 -1
  117. package/dist/pie/item-session-contract.js.map +0 -1
  118. package/dist/pie/logger.js.map +0 -1
  119. package/dist/pie/math-rendering.js.map +0 -1
  120. package/dist/pie/overrides.js.map +0 -1
  121. package/dist/pie/player-initializer.js.map +0 -1
  122. package/dist/pie/registry.js.map +0 -1
  123. package/dist/pie/resource-monitor.js.map +0 -1
  124. package/dist/pie/scoring.js.map +0 -1
  125. package/dist/pie/stage-tracker.js.map +0 -1
  126. package/dist/pie/stages.js.map +0 -1
  127. package/dist/pie/tag-names.js.map +0 -1
  128. package/dist/pie/types.js.map +0 -1
  129. package/dist/pie/updates.js.map +0 -1
  130. package/dist/pie/utils.js.map +0 -1
  131. package/dist/pie/versioned-tag.js.map +0 -1
  132. package/dist/player-strategy.js.map +0 -1
  133. package/dist/security/index.js.map +0 -1
  134. package/dist/security/sanitize-item-markup.js.map +0 -1
  135. package/dist/security/sanitize-svg-icon.js.map +0 -1
  136. package/dist/security/validate-style-url.js.map +0 -1
  137. package/dist/security/wrap-model-rich-content.js.map +0 -1
  138. package/dist/security/wrap-overwide-images.js.map +0 -1
  139. package/dist/security/wrap-overwide-tables.js.map +0 -1
  140. package/dist/server/npm-registry.js.map +0 -1
  141. package/dist/types/index.js.map +0 -1
  142. package/dist/ui/content-styles.js.map +0 -1
  143. package/dist/ui/debug-panel-persistence.js.map +0 -1
  144. package/dist/ui/first-focusable.js.map +0 -1
  145. package/dist/ui/focus-trap.js.map +0 -1
  146. package/dist/ui/safe-storage.js.map +0 -1
  147. package/dist/ui/zoom-compensation.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ElementLoader.js","sourceRoot":"","sources":["../../src/loaders/ElementLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAShE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAmB;IACpD,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;QAEjD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;YACnD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,aAAa,GAAG,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE;gBAC7D,sBAAsB,EAAE,IAAI;aAC5B,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAChC,UAAU,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC;YACzC,CAAC;iBAAM,IAAI,UAAU,CAAC,aAAa,CAAC,KAAK,WAAW,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CACd,6BAA6B,aAAa,kBAAkB,UAAU,CAAC,aAAa,CAAC,QAAQ,WAAW,IAAI;oBAC3G,+DAA+D,CAChE,CAAC;YACH,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACnB,CAAC","sourcesContent":["/**\n * Element Loader — element aggregation utilities.\n *\n * The deep `ElementLoader` primitive lives in `./element-loader.ts`. This\n * module owns the shared `ElementMap` type and the `aggregateElements`\n * helper that reduces many items' element declarations into a single\n * deduplicated, version-aware map (used by the section-player to\n * pre-warm in one shot).\n */\n\nimport { toPackageVersionedTag } from \"../pie/versioned-tag.js\";\nimport type { ItemEntity } from \"../types/index.js\";\n\n/**\n * Map of element tag names to their package versions\n * Example: { \"pie-multiple-choice\": \"@pie-element/multiple-choice@11.0.1\" }\n */\nexport type ElementMap = { [tagName: string]: string };\n\n/**\n * Aggregate unique elements from multiple items\n *\n * Extracts elements from all item configs, versions their full tag names, and\n * deduplicates identical tag/package pairs. Multiple package versions of the\n * same original tag remain distinct through their versioned tag names.\n *\n * @param items - Array of items to aggregate elements from\n * @returns Map of unique element tag names to package versions\n * @throws Error if two package specs resolve to the same versioned tag\n *\n * @example\n * ```typescript\n * const items = [\n * { config: { elements: { \"pie-mc\": \"@pie-element/mc@11.0.1\" } } },\n * { config: { elements: { \"pie-mc\": \"@pie-element/mc@11.0.1\" } } },\n * { config: { elements: { \"pie-hotspot\": \"@pie-element/hotspot@9.0.0\" } } }\n * ];\n *\n * const elements = aggregateElements(items);\n * // Result: {\n * // \"pie-mc--version-11-0-1\": \"@pie-element/mc@11.0.1\",\n * // \"pie-hotspot--version-9-0-0\": \"@pie-element/hotspot@9.0.0\"\n * // }\n * ```\n */\nexport function aggregateElements(items: ItemEntity[]): ElementMap {\n\tconst elementMap: Record<string, string> = {};\n\n\titems.forEach((item) => {\n\t\tconst itemElements = item.config?.elements || {};\n\n\t\tObject.entries(itemElements).forEach(([tag, pkg]) => {\n\t\t\tconst packageSpec = String(pkg);\n\t\t\tconst normalizedTag = toPackageVersionedTag(tag, packageSpec, {\n\t\t\t\tpreserveUnversionedTag: true,\n\t\t\t});\n\t\t\tif (!elementMap[normalizedTag]) {\n\t\t\t\telementMap[normalizedTag] = packageSpec;\n\t\t\t} else if (elementMap[normalizedTag] !== packageSpec) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Element version conflict: ${normalizedTag} requires both ${elementMap[normalizedTag]} and ${packageSpec}. ` +\n\t\t\t\t\t\t`Each full versioned tag must map to exactly one package spec.`,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t});\n\n\treturn elementMap;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"element-loader-types.js","sourceRoot":"","sources":["../../src/loaders/element-loader-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAuCH;;;;;;;;GAQG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACtB,IAAI,GAAG,gBAAgB,CAAC;IACjC,OAAO,CAA6C;IAE7D,YAAY,OAAmD;QAC9D,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,KAAK,CACJ,+BAA+B,OAAO,CAAC,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxE,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;CACD","sourcesContent":["/**\n * Shared types for the ElementLoader primitive and its backend adapters.\n *\n * Keeping types in their own module breaks the import cycle that would\n * otherwise form between the primitive (which dispatches to adapters) and\n * the adapters (which implement the backend interface).\n */\n\nimport type { ElementMap } from \"./ElementLoader.js\";\n\nexport type ElementTag = string;\n\nexport type { ElementMap };\n\n/**\n * Structured reason for why a specific tag failed to register.\n *\n * The primitive prefers adapter-supplied reasons (rich, diagnostic) over the\n * generic `timeout` reason it synthesizes from its own verification pass.\n */\nexport type RegistrationFailureReason =\n\t| { kind: \"timeout\"; tag: ElementTag; timeoutMs: number }\n\t| { kind: \"not-a-constructor\"; tag: ElementTag; packageName?: string }\n\t| {\n\t\t\tkind: \"package-not-in-bundle\";\n\t\t\ttag: ElementTag;\n\t\t\tpackageName: string;\n\t\t\tavailablePackages: string[];\n\t }\n\t| {\n\t\t\tkind: \"module-load-failed\";\n\t\t\ttag: ElementTag;\n\t\t\tspecifier: string;\n\t\t\tcause: string;\n\t }\n\t| {\n\t\t\tkind: \"bundle-load-failed\";\n\t\t\ttag: ElementTag;\n\t\t\turl: string;\n\t\t\tcause: string;\n\t }\n\t| { kind: \"define-failed\"; tag: ElementTag; cause: string }\n\t| { kind: \"backend-rejected\"; tag: ElementTag; cause: string }\n\t| { kind: \"no-element-class\"; tag: ElementTag; packageName: string };\n\n/**\n * Thrown by an adapter when it has structured, per-tag knowledge of which\n * registrations failed and why. The primitive unpacks the `reasons` map\n * and merges it into its own `ElementLoaderError.reasons`.\n *\n * Generic `Error` thrown from an adapter is treated as catastrophic: the\n * primitive assigns a blanket `backend-rejected` reason to every requested\n * tag that is still missing after verification.\n */\nexport class AdapterFailure extends Error {\n\toverride readonly name = \"AdapterFailure\";\n\treadonly reasons: Map<ElementTag, RegistrationFailureReason>;\n\n\tconstructor(reasons: Map<ElementTag, RegistrationFailureReason>) {\n\t\tconst tags = [...reasons.keys()];\n\t\tsuper(\n\t\t\t`Backend adapter failure for ${reasons.size} tag(s): ${tags.join(\", \")}`,\n\t\t);\n\t\tthis.reasons = reasons;\n\t}\n}\n\n/**\n * Context the primitive hands to the adapter for each load.\n *\n * The adapter is free to use `whenDefinedTimeoutMs` for its own internal\n * waits, but the primitive always enforces an independent\n * `customElements.whenDefined` verification after the adapter returns — so\n * an adapter cannot silently under-register tags even if it ignores this\n * context.\n */\nexport type BackendContext = {\n\tdoc: Document;\n\twhenDefinedTimeoutMs: number;\n};\n\n/**\n * Backend adapter contract.\n *\n * Resolve only if every requested tag was attempted and the adapter\n * believes every tag is registered. On partial failure, throw\n * `AdapterFailure` with a `reasons` map. On catastrophic failure, throw a\n * generic Error.\n */\nexport type ElementLoaderBackend = {\n\tload(elements: ElementMap, context: BackendContext): Promise<void>;\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"element-loader.js","sourceRoot":"","sources":["../../src/loaders/element-loader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ElementLoader primitive — the one place where \"these tags are registered\n * with customElements\" is decided.\n *\n * Owns the truthful promise contract end-to-end:\n *\n * ensureRegistered(elements, options) resolves iff every requested tag\n * is in `customElements` at the moment of resolution. On partial\n * success it rejects with an `ElementLoaderError` carrying the set of\n * unregistered tags and a per-tag `RegistrationFailureReason` map.\n *\n * The primitive delegates the actual fetch/register work to a backend\n * adapter (IIFE or ESM) but always verifies the outcome via\n * `customElements.whenDefined`. An adapter cannot silently under-register\n * — the primitive will catch it and surface a timeout reason.\n *\n * See packages/players-shared/tests/element-loader-contract.test.ts for\n * the executable specification of every failure mode this primitive is\n * required to catch.\n */\n\nimport { DEFAULT_IIFE_BUNDLE_RETRY_CONFIG } from \"../loader-config.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\";\nimport { createEsmBackend, type EsmBackendConfig } from \"./esm-adapter.js\";\nimport { createIifeBackend, type IifeBackendConfig } from \"./iife-adapter.js\";\nimport {\n\tassertElementPackagesAllowed,\n\ttype ElementPackagePolicy,\n} from \"./element-package-policy.js\";\n\nexport type {\n\tBackendContext,\n\tElementLoaderBackend,\n\tElementMap,\n\tElementTag,\n\tRegistrationFailureReason,\n} from \"./element-loader-types.js\";\nexport { AdapterFailure } from \"./element-loader-types.js\";\nexport type { IifeBackendConfig } from \"./iife-adapter.js\";\nexport type { EsmBackendConfig } from \"./esm-adapter.js\";\n\n/**\n * Aggregate error thrown by `ensureRegistered` when one or more requested\n * tags were not registered by the time verification timed out.\n */\nexport class ElementLoaderError extends Error {\n\toverride readonly name = \"ElementLoaderError\";\n\treadonly unregisteredTags: Set<ElementTag>;\n\treadonly reasons: Map<ElementTag, RegistrationFailureReason>;\n\n\tconstructor(\n\t\tmessage: string,\n\t\tunregisteredTags: Set<ElementTag>,\n\t\treasons: Map<ElementTag, RegistrationFailureReason>,\n\t) {\n\t\tsuper(message);\n\t\tthis.unregisteredTags = unregisteredTags;\n\t\tthis.reasons = reasons;\n\t}\n}\n\n/**\n * Thrown by `assertRegistered` when any requested tag is missing from\n * `customElements`. Carries enough detail for the host to diagnose what\n * pre-registration step was skipped.\n */\nexport class ElementAssertionError extends Error {\n\toverride readonly name = \"ElementAssertionError\";\n\treadonly expectedTags: readonly ElementTag[];\n\treadonly missingTags: readonly ElementTag[];\n\treadonly currentlyRegisteredTags: readonly ElementTag[];\n\n\tconstructor(\n\t\texpected: ElementTag[],\n\t\tmissing: ElementTag[],\n\t\tcurrentlyRegistered: ElementTag[],\n\t) {\n\t\tsuper(buildAssertionMessage(expected, missing, currentlyRegistered));\n\t\tthis.expectedTags = expected;\n\t\tthis.missingTags = missing;\n\t\tthis.currentlyRegisteredTags = currentlyRegistered;\n\t}\n}\n\nfunction buildAssertionMessage(\n\texpected: ElementTag[],\n\tmissing: ElementTag[],\n\tregistered: ElementTag[],\n): string {\n\tconst expectedStr = expected.join(\", \");\n\tconst missingStr = missing.join(\", \");\n\tconst registeredStr = registered.length\n\t\t? registered.join(\", \")\n\t\t: \"(none enumerable)\";\n\treturn (\n\t\t`ElementLoader.assertRegistered: expected [${expectedStr}], ` +\n\t\t`missing [${missingStr}]. customElements contains: [${registeredStr}].`\n\t);\n}\n\nexport type BackendOption =\n\t| IifeBackendConfig\n\t| EsmBackendConfig\n\t| ElementLoaderBackend;\n\nexport type EnsureRegisteredOptions = {\n\tbackend: BackendOption;\n\t/**\n\t * Optional host-controlled allow-list for executable `config.elements`\n\t * packages. Omit to preserve the trusted-application behavior.\n\t */\n\telementPackagePolicy?: ElementPackagePolicy;\n\tdoc?: Document;\n\twhenDefinedTimeoutMs?: number;\n\t/**\n\t * Outer cumulative deadline for the backend's `load()` call.\n\t *\n\t * Closes the \"promise never settles\" seam for adapters whose underlying\n\t * fetch can stall indefinitely (e.g. ESM `import()` against a frozen\n\t * CDN). When the deadline elapses, the primitive synthesizes an\n\t * `AdapterFailure` with `kind: \"timeout\"` reasons for every requested\n\t * tag — surfacing as a normal `ElementLoaderError` to the caller.\n\t *\n\t * Defaults to `DEFAULT_IIFE_BUNDLE_RETRY_CONFIG.timeoutMs` so\n\t * adapter-internal retry windows (IIFE bundle-build polling) fit\n\t * inside the same overall budget.\n\t */\n\tloadTimeoutMs?: number;\n};\n\nconst DEFAULT_WHEN_DEFINED_TIMEOUT_MS = 5000;\nconst DEFAULT_LOAD_TIMEOUT_MS = DEFAULT_IIFE_BUNDLE_RETRY_CONFIG.timeoutMs;\n\n// Module-scoped in-flight cache. Key: backend signature + sorted elements.\n// Keeps concurrent identical requests collapsed to one backend call.\nconst inFlightRequests = new Map<string, Promise<void>>();\nconst resolvedEsmBackends = new Map<string, ElementLoaderBackend>();\nconst resolvedBackendOverrides = new Map<string, ElementLoaderBackend>();\n\n/**\n * Resolve iff every tag in `elements` is registered with `customElements`.\n * Reject with `ElementLoaderError` otherwise.\n *\n * The primitive is the sole authority on registration state:\n * - Empty element map resolves immediately (no backend call).\n * - Already-registered tags resolve immediately (no backend call).\n * - Concurrent identical requests share one backend call.\n * - After the adapter's `load` settles, a post-load verification pass\n * (bounded `customElements.whenDefined`) checks every tag. Any missing\n * tag becomes a rejection.\n */\nexport async function ensureRegistered(\n\telements: ElementMap,\n\toptions: EnsureRegisteredOptions,\n): Promise<void> {\n\tif (!elements || Object.keys(elements).length === 0) return;\n\t// Enforce policy before the already-registered fast path: a matching tag in\n\t// the registry must not turn a disallowed authored package into valid input.\n\tassertElementPackagesAllowed(elements, options.elementPackagePolicy);\n\n\tconst tags = Object.keys(elements);\n\tconst timeoutMs =\n\t\toptions.whenDefinedTimeoutMs ?? DEFAULT_WHEN_DEFINED_TIMEOUT_MS;\n\tconst loadTimeoutMs = options.loadTimeoutMs ?? DEFAULT_LOAD_TIMEOUT_MS;\n\n\t// Fast path: everything already registered. Skip backend and dedup\n\t// bookkeeping entirely.\n\tif (allAlreadyRegistered(tags)) return;\n\n\tconst dedupKey = buildDedupKey(options.backend, elements);\n\tconst existing = inFlightRequests.get(dedupKey);\n\tif (existing) return existing;\n\n\tconst backend = resolveBackend(options.backend);\n\tconst doc = resolveDoc(options.doc);\n\n\tconst promise = runEnsureRegistered(\n\t\telements,\n\t\ttags,\n\t\tbackend,\n\t\t{ doc, whenDefinedTimeoutMs: timeoutMs },\n\t\ttimeoutMs,\n\t\tloadTimeoutMs,\n\t);\n\n\tinFlightRequests.set(dedupKey, promise);\n\ttry {\n\t\tawait promise;\n\t} finally {\n\t\tif (inFlightRequests.get(dedupKey) === promise) {\n\t\t\tinFlightRequests.delete(dedupKey);\n\t\t}\n\t}\n}\n\nasync function runEnsureRegistered(\n\telements: ElementMap,\n\ttags: ElementTag[],\n\tbackend: ElementLoaderBackend,\n\tcontext: BackendContext,\n\ttimeoutMs: number,\n\tloadTimeoutMs: number,\n): Promise<void> {\n\tlet adapterError: Error | undefined;\n\ttry {\n\t\tawait raceWithLoadTimeout(\n\t\t\tbackend.load(elements, context),\n\t\t\ttags,\n\t\t\tloadTimeoutMs,\n\t\t);\n\t} catch (err) {\n\t\tadapterError = err instanceof Error ? err : new Error(String(err));\n\t}\n\n\tconst verification = await Promise.all(\n\t\ttags.map(async (tag) => {\n\t\t\tif (isRegistered(tag)) return { tag, ok: true as const };\n\t\t\ttry {\n\t\t\t\tawait whenDefinedWithTimeout(tag, timeoutMs);\n\t\t\t\treturn { tag, ok: true as const };\n\t\t\t} catch {\n\t\t\t\treturn { tag, ok: false as const };\n\t\t\t}\n\t\t}),\n\t);\n\n\tconst unregistered = new Set<ElementTag>();\n\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\tfor (const v of verification) {\n\t\tif (v.ok) continue;\n\t\tunregistered.add(v.tag);\n\t\tconst adapterReason = extractAdapterReason(adapterError, v.tag);\n\t\treasons.set(\n\t\t\tv.tag,\n\t\t\tadapterReason ?? { kind: \"timeout\", tag: v.tag, timeoutMs },\n\t\t);\n\t}\n\n\tif (unregistered.size > 0) {\n\t\tthrow new ElementLoaderError(\n\t\t\t`Element registration failed; missing tags: ${[...unregistered].join(\", \")}`,\n\t\t\tunregistered,\n\t\t\treasons,\n\t\t);\n\t}\n}\n\n/**\n * Race the backend's `load()` against a cumulative deadline.\n *\n * On timeout, synthesize an `AdapterFailure` whose `reasons` map carries\n * a `kind: \"timeout\"` entry per requested tag. The verification pass in\n * `runEnsureRegistered` will then produce a normal `ElementLoaderError`\n * with structured per-tag reasons — same surface shape as any other\n * adapter rejection.\n */\nasync function raceWithLoadTimeout(\n\tloadPromise: Promise<void>,\n\ttags: ElementTag[],\n\tloadTimeoutMs: number,\n): Promise<void> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\ttry {\n\t\tawait Promise.race([\n\t\t\tloadPromise,\n\t\t\tnew Promise<void>((_, reject) => {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\t\t\t\t\tfor (const tag of tags) {\n\t\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\t\tkind: \"timeout\",\n\t\t\t\t\t\t\ttag,\n\t\t\t\t\t\t\ttimeoutMs: loadTimeoutMs,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treject(new AdapterFailure(reasons));\n\t\t\t\t}, loadTimeoutMs);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timer) clearTimeout(timer);\n\t}\n}\n\n/**\n * Synchronously assert that every tag is already in `customElements`.\n * Throws `ElementAssertionError` with diagnostic detail otherwise.\n *\n * Used by hosts that opt into the \"preloaded\" strategy — they pre-register\n * elements out-of-band and want a loud failure if anything is missing.\n */\nexport function assertRegistered(tags: ElementTag[]): void {\n\tif (!tags || tags.length === 0) return;\n\tconst missing = tags.filter((tag) => !isRegistered(tag));\n\tif (missing.length === 0) return;\n\tthrow new ElementAssertionError(tags, missing, snapshotRegisteredTags());\n}\n\n// ─── Internals ───────────────────────────────────────────────────────────────\n\nfunction resolveBackend(backend: BackendOption): ElementLoaderBackend {\n\tif (isDirectBackend(backend)) return backend;\n\tif (\"kind\" in backend) {\n\t\tif (backend.kind === \"iife\") return createIifeBackend(backend);\n\t\tif (backend.kind === \"esm\") {\n\t\t\tconst backendKey = backendKeyOf(backend);\n\t\t\tconst override = resolvedBackendOverrides.get(backendKey);\n\t\t\tif (override) return override;\n\t\t\tconst existing = resolvedEsmBackends.get(backendKey);\n\t\t\tif (existing) return existing;\n\t\t\tconst created = createEsmBackend(backend);\n\t\t\tresolvedEsmBackends.set(backendKey, created);\n\t\t\treturn created;\n\t\t}\n\t}\n\tthrow new Error(\"ElementLoader: invalid backend option\");\n}\n\nfunction isDirectBackend(\n\tbackend: BackendOption,\n): backend is ElementLoaderBackend {\n\treturn (\n\t\ttypeof (backend as { load?: unknown }).load === \"function\" &&\n\t\t!(\"kind\" in backend)\n\t);\n}\n\nfunction resolveDoc(doc: Document | undefined): Document {\n\tif (doc) return doc;\n\tif (typeof document !== \"undefined\") return document;\n\tthrow new Error(\n\t\t\"ElementLoader: no Document available; pass options.doc explicitly\",\n\t);\n}\n\nfunction buildDedupKey(backend: BackendOption, elements: ElementMap): string {\n\tconst backendKey = backendKeyOf(backend);\n\tconst entries = Object.entries(elements).sort(([a], [b]) =>\n\t\ta.localeCompare(b),\n\t);\n\treturn `${backendKey}|${JSON.stringify(entries)}`;\n}\n\nconst backendIds = new WeakMap<ElementLoaderBackend, string>();\nlet nextBackendId = 0;\nconst functionIds = new WeakMap<Function, string>();\nlet nextFunctionId = 0;\nconst opaqueObjectIds = new WeakMap<object, string>();\nlet nextOpaqueObjectId = 0;\n\nfunction backendKeyOf(backend: BackendOption): string {\n\tif (isDirectBackend(backend)) {\n\t\tlet id = backendIds.get(backend);\n\t\tif (!id) {\n\t\t\tid = `b${++nextBackendId}`;\n\t\t\tbackendIds.set(backend, id);\n\t\t}\n\t\treturn `backend#${id}`;\n\t}\n\tif (\"kind\" in backend) {\n\t\tif (backend.kind === \"iife\") {\n\t\t\treturn `iife#${fingerprintValue({\n\t\t\t\tkind: \"iife\",\n\t\t\t\tbundleHost: backend.bundleHost,\n\t\t\t\tbundleType: backend.bundleType ?? \"\",\n\t\t\t\tneedsControllers: backend.needsControllers ?? true,\n\t\t\t\tbundleInfo: backend.bundleInfo ?? null,\n\t\t\t\tdebugEnabled: backend.debugEnabled ?? null,\n\t\t\t\tbundleRetry: backend.bundleRetry ?? null,\n\t\t\t\tonBundleRetryStatus: backend.onBundleRetryStatus ?? null,\n\t\t\t\ttrackPageActions: backend.trackPageActions ?? false,\n\t\t\t\tinstrumentationProvider: backend.instrumentationProvider ?? null,\n\t\t\t})}`;\n\t\t}\n\t\tif (backend.kind === \"esm\") {\n\t\t\treturn `esm#${fingerprintValue({\n\t\t\t\tkind: \"esm\",\n\t\t\t\tcdnBaseUrl: backend.cdnBaseUrl,\n\t\t\t\tcdnProvider: backend.cdnProvider ?? null,\n\t\t\t\tmoduleResolution: backend.moduleResolution ?? \"url\",\n\t\t\t\tview: backend.view ?? \"delivery\",\n\t\t\t\tviewConfig: backend.viewConfig ?? null,\n\t\t\t\tloadControllers: backend.loadControllers ?? true,\n\t\t\t\tdebugEnabled: backend.debugEnabled ?? null,\n\t\t\t\ttrackPageActions: backend.trackPageActions ?? false,\n\t\t\t\tinstrumentationProvider: backend.instrumentationProvider ?? null,\n\t\t\t})}`;\n\t\t}\n\t}\n\treturn \"unknown\";\n}\n\nfunction fingerprintValue(value: unknown): string {\n\treturn JSON.stringify(normalizeForFingerprint(value, new Map()));\n}\n\nfunction normalizeForFingerprint(\n\tvalue: unknown,\n\tseen: Map<object, string>,\n): unknown {\n\tif (value === null || value === undefined) return value;\n\tconst primitiveType = typeof value;\n\tif (\n\t\tprimitiveType === \"string\" ||\n\t\tprimitiveType === \"number\" ||\n\t\tprimitiveType === \"boolean\"\n\t) {\n\t\treturn value;\n\t}\n\tif (primitiveType === \"function\") {\n\t\treturn { __functionRef: getFunctionRefId(value as Function) };\n\t}\n\tif (primitiveType !== \"object\") {\n\t\treturn String(value);\n\t}\n\n\tconst objectValue = value as object;\n\tconst existing = seen.get(objectValue);\n\tif (existing) return { __cycleRef: existing };\n\tconst cycleRefId = `cycle#${seen.size + 1}`;\n\tseen.set(objectValue, cycleRefId);\n\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => normalizeForFingerprint(entry, seen));\n\t}\n\n\tif (!isPlainObject(value)) {\n\t\treturn { __objectRef: getOpaqueObjectRefId(objectValue) };\n\t}\n\n\tconst normalized: Record<string, unknown> = {};\n\tfor (const key of Object.keys(value).sort()) {\n\t\tnormalized[key] = normalizeForFingerprint(\n\t\t\t(value as Record<string, unknown>)[key],\n\t\t\tseen,\n\t\t);\n\t}\n\treturn normalized;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === Object.prototype || prototype === null;\n}\n\nfunction getFunctionRefId(fn: Function): string {\n\tlet id = functionIds.get(fn);\n\tif (!id) {\n\t\tid = `fn#${++nextFunctionId}`;\n\t\tfunctionIds.set(fn, id);\n\t}\n\treturn id;\n}\n\nfunction getOpaqueObjectRefId(value: object): string {\n\tlet id = opaqueObjectIds.get(value);\n\tif (!id) {\n\t\tid = `obj#${++nextOpaqueObjectId}`;\n\t\topaqueObjectIds.set(value, id);\n\t}\n\treturn id;\n}\n\nfunction allAlreadyRegistered(tags: ElementTag[]): boolean {\n\treturn tags.every((tag) => isRegistered(tag));\n}\n\nfunction isRegistered(tag: ElementTag): boolean {\n\tif (typeof customElements === \"undefined\") return false;\n\treturn customElements.get(tag) !== undefined;\n}\n\nasync function whenDefinedWithTimeout(\n\ttag: ElementTag,\n\ttimeoutMs: number,\n): Promise<void> {\n\tif (typeof customElements === \"undefined\") {\n\t\tthrow new Error(`no customElements to await ${tag}`);\n\t}\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\ttry {\n\t\treturn await Promise.race([\n\t\t\tcustomElements.whenDefined(tag).then(() => undefined),\n\t\t\tnew Promise<void>((_, reject) => {\n\t\t\t\ttimer = setTimeout(\n\t\t\t\t\t() => reject(new Error(`Timeout waiting for ${tag}`)),\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t);\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timer) clearTimeout(timer);\n\t}\n}\n\nfunction snapshotRegisteredTags(): ElementTag[] {\n\tif (typeof customElements === \"undefined\") return [];\n\t// Standard `CustomElementRegistry` does not expose iteration. Tests install\n\t// a scripted registry with a `__pieSnapshot` extension to make diagnostic\n\t// messages assertable. Production falls through to an empty list —\n\t// still strictly better than today's \"missing tags: X\" error which leaks\n\t// no registry state at all.\n\tconst reg = customElements as unknown as {\n\t\t__pieSnapshot?: () => ElementTag[];\n\t};\n\tif (typeof reg.__pieSnapshot === \"function\") {\n\t\ttry {\n\t\t\treturn reg.__pieSnapshot();\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\treturn [];\n}\n\nfunction extractAdapterReason(\n\terr: Error | undefined,\n\ttag: ElementTag,\n): RegistrationFailureReason | undefined {\n\tif (!err) return undefined;\n\tif (err instanceof AdapterFailure) return err.reasons.get(tag);\n\treturn { kind: \"backend-rejected\", tag, cause: err.message };\n}\n\n// ─── Test-only helpers ───────────────────────────────────────────────────────\n\n/**\n * Internal helpers for test harnesses. Not part of the public runtime API;\n * production code should never reach for these.\n *\n * @internal\n */\nexport const __testing = {\n\tresetDedupState(): void {\n\t\tinFlightRequests.clear();\n\t\tresolvedEsmBackends.clear();\n\t\tresolvedBackendOverrides.clear();\n\t},\n\tinFlightCount(): number {\n\t\treturn inFlightRequests.size;\n\t},\n\tdedupKeyFor(elements: ElementMap, backend: BackendOption): string {\n\t\treturn buildDedupKey(backend, elements);\n\t},\n\treplaceResolvedBackendForTesting(\n\t\tbackend: BackendOption,\n\t\tresolvedBackend: ElementLoaderBackend,\n\t): void {\n\t\tresolvedBackendOverrides.set(backendKeyOf(backend), resolvedBackend);\n\t},\n\trestoreResolvedBackendsForTesting(): void {\n\t\tresolvedEsmBackends.clear();\n\t\tresolvedBackendOverrides.clear();\n\t},\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"element-package-policy.js","sourceRoot":"","sources":["../../src/loaders/element-package-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import { valid as validSemver } from \"semver\";\n\nimport { parsePackageName } from \"../pie/utils.js\";\nimport type { ElementMap } from \"./ElementLoader.js\";\n\n/** Optional host policy for executable packages named by `config.elements`. */\nexport type ElementPackagePolicy = {\n\t/** Exact package names, or exact `name@version` specs, that may execute. */\n\tallowedPackages: readonly string[];\n\t/** Require exact semver without build metadata. Defaults to true. */\n\trequireExactVersions?: boolean;\n};\n\nexport class ElementPackagePolicyError extends Error {\n\toverride readonly name = \"ElementPackagePolicyError\";\n\n\tconstructor(\n\t\treadonly tagName: string,\n\t\treadonly packageSpec: string,\n\t\tmessage: string,\n\t) {\n\t\tsuper(message);\n\t}\n}\n\nfunction isExactSemver(version: string): boolean {\n\treturn validSemver(version) === version;\n}\n\nfunction parsePolicyPackageSpec(spec: string): {\n\tpackageName: string;\n\tpackagePath: string;\n\tversion: string;\n} {\n\tconst parsed = parsePackageName(spec);\n\treturn {\n\t\tpackageName: parsed.name,\n\t\tpackagePath: parsed.path ? `${parsed.name}/${parsed.path}` : parsed.name,\n\t\tversion: parsed.version,\n\t};\n}\n\n/**\n * Validate an element map only when a host explicitly supplies a policy.\n * Omitting the policy preserves the existing trusted-application behavior.\n */\nexport function assertElementPackagesAllowed(\n\telements: ElementMap,\n\tpolicy?: ElementPackagePolicy,\n): void {\n\tif (!policy) return;\n\tconst allowed = policy.allowedPackages\n\t\t.filter((entry): entry is string => typeof entry === \"string\")\n\t\t.map((entry) => entry.trim())\n\t\t.filter(Boolean);\n\n\tfor (const [tagName, rawSpec] of Object.entries(elements)) {\n\t\tconst packageSpec = String(rawSpec).trim();\n\t\tlet parsed: ReturnType<typeof parsePolicyPackageSpec>;\n\t\ttry {\n\t\t\tparsed = parsePolicyPackageSpec(packageSpec);\n\t\t} catch {\n\t\t\tthrow new ElementPackagePolicyError(\n\t\t\t\ttagName,\n\t\t\t\tpackageSpec,\n\t\t\t\t`Element package policy rejected invalid package spec \"${packageSpec}\" for ${tagName}.`,\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\t(policy.requireExactVersions ?? true) &&\n\t\t\t!isExactSemver(parsed.version)\n\t\t) {\n\t\t\tconst restriction = parsed.version.includes(\"+\")\n\t\t\t\t? \"does not allow semver build metadata because legacy IIFE bundle routes use + as a package separator\"\n\t\t\t\t: \"requires an exact version\";\n\t\t\tthrow new ElementPackagePolicyError(\n\t\t\t\ttagName,\n\t\t\t\tpackageSpec,\n\t\t\t\t`Element package policy ${restriction} for ${tagName}; received \"${packageSpec}\".`,\n\t\t\t);\n\t\t}\n\n\t\tconst permitted = allowed.some((entry) => {\n\t\t\tif (entry === packageSpec) return true;\n\t\t\ttry {\n\t\t\t\tconst allowedSpec = parsePolicyPackageSpec(entry);\n\t\t\t\treturn (\n\t\t\t\t\tallowedSpec.version.length === 0 &&\n\t\t\t\t\tallowedSpec.packagePath === parsed.packagePath\n\t\t\t\t);\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\n\t\tif (!permitted) {\n\t\t\tthrow new ElementPackagePolicyError(\n\t\t\t\ttagName,\n\t\t\t\tpackageSpec,\n\t\t\t\t`Element package policy does not allow \"${packageSpec}\" for ${tagName}.`,\n\t\t\t);\n\t\t}\n\t}\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"esm-adapter.js","sourceRoot":"","sources":["../../src/loaders/esm-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ESM backend adapter for the ElementLoader primitive.\n *\n * Loads PIE elements via dynamic `import()` from static browser ESM files on a\n * CDN, optionally resolving bare specifiers through an import map injected into\n * the host document. On any per-tag failure (module load, non-constructor\n * element class, define failure), throws `AdapterFailure` with a structured\n * `reasons` map.\n *\n * Like the IIFE adapter, this module does not gate its own promise on\n * `customElements.whenDefined`; the primitive performs that verification\n * uniformly. Here the adapter's job is narrowly to fetch, extract, and\n * call `customElements.define`.\n */\n\nimport { defineCustomElementSafely } from \"../pie/custom-element-define.js\";\nimport type { InstrumentationProvider } from \"../instrumentation/types.js\";\nimport { isInstrumentationProvider } from \"../instrumentation/provider-guards.js\";\nimport { pieRegistry } from \"../pie/registry.js\";\nimport { validateCustomElementTag } from \"../pie/tag-names.js\";\nimport { isCustomElementConstructor, Status } from \"../pie/types.js\";\nimport type { ElementMap } from \"./ElementLoader.js\";\nimport {\n\tAdapterFailure,\n\ttype BackendContext,\n\ttype ElementLoaderBackend,\n\ttype ElementTag,\n\ttype RegistrationFailureReason,\n} from \"./element-loader-types.js\";\n\n/** View configuration: how a PIE package's subpath maps to a tag suffix. */\nexport type ViewConfig = {\n\tsubpath: string;\n\ttagSuffix: string;\n\tfallback?: string;\n};\n\nexport const BUILT_IN_VIEWS: Record<string, ViewConfig> = {\n\tdelivery: { subpath: \"\", tagSuffix: \"\" },\n\tauthor: { subpath: \"/author\", tagSuffix: \"-config\", fallback: \"delivery\" },\n\tprint: { subpath: \"/print\", tagSuffix: \"-print\", fallback: \"delivery\" },\n};\n\nexport type BuiltInEsmCdnProviderName = \"jsdelivr\" | \"esm.sh\";\nexport type EsmCdnProviderName = BuiltInEsmCdnProviderName | (string & {});\n\nexport type EsmCdnProvider = {\n\tname: EsmCdnProviderName;\n\tpackageJsonUrl(packageVersion: string): string;\n\tbrowserViewUrl(packageVersion: string, view: string): string;\n\tbrowserControllerUrl(packageVersion: string): string;\n\tsharedDependencyUrl(\n\t\tdependencyName: string,\n\t\tversion: string,\n\t\tsubpath?: string,\n\t): string;\n};\n\nexport type EsmCdnProviderOption = EsmCdnProviderName | EsmCdnProvider;\n\nexport type EsmBackendConfig = {\n\tkind: \"esm\";\n\t/** Base URL for the ESM CDN (e.g., \"https://esm.sh\"). */\n\tcdnBaseUrl: string;\n\t/** CDN URL strategy. Defaults to jsDelivr, or is inferred from cdnBaseUrl when possible. */\n\tcdnProvider?: EsmCdnProviderOption;\n\t/** `\"url\"` loads via fully-qualified URLs; `\"import-map\"` uses bare specifiers. */\n\tmoduleResolution?: \"url\" | \"import-map\";\n\t/** View to load (`delivery`, `author`, `print`, or a custom name). */\n\tview?: string;\n\t/** Custom view configuration (overrides built-ins). */\n\tviewConfig?: ViewConfig;\n\t/** Whether to also load controller modules. */\n\tloadControllers?: boolean;\n\t/** Debug flag hook. */\n\tdebugEnabled?: () => boolean;\n\t/** Whether ESM dependency conflict/failure events should be instrumented. */\n\ttrackPageActions?: boolean;\n\t/** Instrumentation provider for ESM dependency conflict/failure events. */\n\tinstrumentationProvider?: InstrumentationProvider;\n};\n\ntype PackageMetadata = {\n\texports?: Record<string, unknown>;\n\tdependencies?: Record<string, string>;\n\toptionalDependencies?: Record<string, string>;\n\tpeerDependencies?: Record<string, string>;\n\tpie?: {\n\t\tbrowserSharedDependencies?: Record<string, string>;\n\t};\n};\n\n/** @internal */\nexport type EsmModuleImporter = (specifier: string) => Promise<unknown>;\n/** @internal */\nexport type EsmImportMapObserver = (json: string, doc: Document) => void;\n/** @internal */\nexport type EsmPackageMetadataLoader = (\n\tpackageVersion: string,\n\tpackageJsonUrl: string,\n) => Promise<PackageMetadata | null>;\n\n/**\n * Test-only seam exposed via `EsmBackend.__seams`. Lets contract tests\n * inject scripted import behaviour and observe import-map injection\n * without going through the network or the document. Not part of the\n * runtime API; production code must not touch this field.\n *\n * @internal\n */\nexport type EsmBackendTestSeams = {\n\treplaceImporter(fn: EsmModuleImporter): void;\n\tobserveImportMapInjection(cb: EsmImportMapObserver): void;\n\treplacePackageMetadataLoader(fn: EsmPackageMetadataLoader): void;\n\trestore(): void;\n};\n\nexport type EsmBackend = ElementLoaderBackend & {\n\t/** @internal Test-only seam — see {@link EsmBackendTestSeams}. */\n\treadonly __seams: EsmBackendTestSeams;\n};\n\nexport function createEsmBackend(config: EsmBackendConfig): EsmBackend {\n\tconst cdnBaseUrl = config.cdnBaseUrl.replace(/\\/+$/, \"\");\n\tconst cdnProvider = resolveCdnProvider(config.cdnProvider, cdnBaseUrl);\n\tconst moduleResolution = config.moduleResolution ?? \"url\";\n\tconst view = config.view ?? \"delivery\";\n\tconst loadControllers = config.loadControllers ?? true;\n\tconst viewConfig = resolveEsmViewConfig(view, config.viewConfig);\n\n\tconst injectedPackageVersions = new Set<string>();\n\tconst importMappedPackageVersions = new Map<string, string>();\n\tlet sharedDependencyVersions: Record<string, string> = {};\n\tlet importer: EsmModuleImporter = defaultImporter;\n\tlet packageMetadataLoader: EsmPackageMetadataLoader =\n\t\tdefaultPackageMetadataLoader;\n\tlet importMapObserver: EsmImportMapObserver | undefined;\n\n\tconst __seams: EsmBackendTestSeams = {\n\t\treplaceImporter(fn) {\n\t\t\timporter = fn;\n\t\t},\n\t\tobserveImportMapInjection(cb) {\n\t\t\timportMapObserver = cb;\n\t\t},\n\t\treplacePackageMetadataLoader(fn) {\n\t\t\tpackageMetadataLoader = fn;\n\t\t},\n\t\trestore() {\n\t\t\timporter = defaultImporter;\n\t\t\tpackageMetadataLoader = defaultPackageMetadataLoader;\n\t\t\timportMapObserver = undefined;\n\t\t\tinjectedPackageVersions.clear();\n\t\t\timportMappedPackageVersions.clear();\n\t\t\tsharedDependencyVersions = {};\n\t\t},\n\t};\n\n\tasync function load(\n\t\telements: ElementMap,\n\t\tcontext: BackendContext,\n\t): Promise<void> {\n\t\tif (!elements || Object.keys(elements).length === 0) return;\n\t\tif (moduleResolution === \"import-map\") {\n\t\t\tassertImportMapSupported();\n\t\t}\n\n\t\tconst newEntries: ElementMap = {};\n\t\tfor (const [tag, pkg] of Object.entries(elements)) {\n\t\t\tconst packageName = extractPackageName(pkg);\n\t\t\tif (moduleResolution === \"import-map\") {\n\t\t\t\tconst existingVersion = importMappedPackageVersions.get(packageName);\n\t\t\t\tif (existingVersion && existingVersion !== pkg) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Conflicting browser ESM package version for ${packageName}: ${existingVersion} is already mapped, but ${pkg} was requested`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!injectedPackageVersions.has(pkg)) {\n\t\t\t\tnewEntries[tag] = pkg;\n\t\t\t}\n\t\t}\n\t\tif (Object.keys(newEntries).length > 0) {\n\t\t\tlet importMapResult: BrowserImportMapBuildResult;\n\t\t\ttry {\n\t\t\t\timportMapResult = await buildImportMapJson(\n\t\t\t\t\tnewEntries,\n\t\t\t\t\tviewConfig,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t\tloadControllers,\n\t\t\t\t\tmoduleResolution === \"import-map\",\n\t\t\t\t\tpackageMetadataLoader,\n\t\t\t\t\tsharedDependencyVersions,\n\t\t\t\t\treportSharedDependencyConflict,\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\treportSharedDependencyError(err);\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tconst json = importMapResult.json;\n\t\t\tif (json) {\n\t\t\t\tassertImportMapSupported();\n\t\t\t\tinjectImportMap(json, context.doc);\n\t\t\t\timportMapObserver?.(json, context.doc);\n\t\t\t}\n\t\t\tsharedDependencyVersions = importMapResult.sharedDependencyVersions;\n\t\t\tfor (const pkg of Object.values(newEntries)) {\n\t\t\t\tinjectedPackageVersions.add(pkg);\n\t\t\t\tif (moduleResolution === \"import-map\") {\n\t\t\t\t\timportMappedPackageVersions.set(extractPackageName(pkg), pkg);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst reasons = new Map<ElementTag, RegistrationFailureReason>();\n\t\tconst registry = pieRegistry();\n\n\t\tawait Promise.all(\n\t\t\tObject.entries(elements).map(async ([tag, packageVersion]) => {\n\t\t\t\tconst packageName = extractPackageName(packageVersion);\n\t\t\t\tlet actualTag: string;\n\t\t\t\ttry {\n\t\t\t\t\tactualTag = validateCustomElementTag(\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\t`element tag for ${packageName}`,\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"define-failed\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst specifier = resolveElementSpecifier(\n\t\t\t\t\tpackageName,\n\t\t\t\t\tpackageVersion,\n\t\t\t\t\tviewConfig,\n\t\t\t\t\tmoduleResolution,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t\tview,\n\t\t\t\t);\n\n\t\t\t\tlet module: any;\n\t\t\t\ttry {\n\t\t\t\t\tmodule = await importer(specifier);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (viewConfig.fallback) {\n\t\t\t\t\t\tconst fallbackConfig =\n\t\t\t\t\t\t\tBUILT_IN_VIEWS[viewConfig.fallback] ?? BUILT_IN_VIEWS.delivery;\n\t\t\t\t\t\tconst fallbackSpecifier = resolveElementSpecifier(\n\t\t\t\t\t\t\tpackageName,\n\t\t\t\t\t\t\tpackageVersion,\n\t\t\t\t\t\t\tfallbackConfig,\n\t\t\t\t\t\t\tmoduleResolution,\n\t\t\t\t\t\t\tcdnProvider,\n\t\t\t\t\t\t\tviewConfig.fallback,\n\t\t\t\t\t\t);\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tmodule = await importer(fallbackSpecifier);\n\t\t\t\t\t\t} catch (fallbackErr) {\n\t\t\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\t\t\tkind: \"module-load-failed\",\n\t\t\t\t\t\t\t\ttag,\n\t\t\t\t\t\t\t\tspecifier: fallbackSpecifier,\n\t\t\t\t\t\t\t\tcause:\n\t\t\t\t\t\t\t\t\tfallbackErr instanceof Error\n\t\t\t\t\t\t\t\t\t\t? fallbackErr.message\n\t\t\t\t\t\t\t\t\t\t: String(fallbackErr),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\t\tkind: \"module-load-failed\",\n\t\t\t\t\t\t\ttag,\n\t\t\t\t\t\t\tspecifier,\n\t\t\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst ElementClass = pickElementClass(module, view);\n\t\t\t\tif (!ElementClass) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"no-element-class\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tpackageName,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!isCustomElementConstructor(ElementClass)) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"not-a-constructor\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tpackageName,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tdefineCustomElementSafely(\n\t\t\t\t\t\tactualTag,\n\t\t\t\t\t\tclass extends ElementClass {},\n\t\t\t\t\t\t`element tag for ${packageName}`,\n\t\t\t\t\t);\n\t\t\t\t} catch (err) {\n\t\t\t\t\treasons.set(tag, {\n\t\t\t\t\t\tkind: \"define-failed\",\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tcause: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet controller: any = null;\n\t\t\t\tif (loadControllers) {\n\t\t\t\t\tconst controllerSpecifier = resolveControllerSpecifier(\n\t\t\t\t\t\tpackageName,\n\t\t\t\t\t\tpackageVersion,\n\t\t\t\t\t\tmoduleResolution,\n\t\t\t\t\t\tcdnProvider,\n\t\t\t\t\t);\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst controllerModule: any = await importer(controllerSpecifier);\n\t\t\t\t\t\tcontroller = controllerModule?.default ?? controllerModule;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Controllers are best-effort; element registration is what the\n\t\t\t\t\t\t// primitive verifies.\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tregistry[actualTag] = {\n\t\t\t\t\tpackage: packageVersion,\n\t\t\t\t\tstatus: Status.loaded,\n\t\t\t\t\ttagName: actualTag,\n\t\t\t\t\telement: ElementClass,\n\t\t\t\t\tcontroller,\n\t\t\t\t\tconfig: null,\n\t\t\t\t\tbundleType: \"esm\" as unknown as import(\"../pie/types.js\").BundleType,\n\t\t\t\t};\n\t\t\t}),\n\t\t);\n\n\t\tif (reasons.size > 0) {\n\t\t\tthrow new AdapterFailure(reasons);\n\t\t}\n\t}\n\n\tfunction getInstrumentationProvider(): InstrumentationProvider | undefined {\n\t\tif (!config.trackPageActions) return undefined;\n\t\tconst provider = config.instrumentationProvider;\n\t\tif (!isInstrumentationProvider(provider)) return undefined;\n\t\tif (!provider.isReady()) return undefined;\n\t\treturn provider;\n\t}\n\n\tfunction reportSharedDependencyConflict(\n\t\tattributes: Record<string, unknown>,\n\t): void {\n\t\tif (typeof console !== \"undefined\" && console.warn) {\n\t\t\tconsole.warn(\n\t\t\t\t`[pie-esm] Shared dependency version conflict resolved for ${String(attributes.dependencyName)}`,\n\t\t\t\tattributes,\n\t\t\t);\n\t\t}\n\t\tconst provider = getInstrumentationProvider();\n\t\tif (!provider) return;\n\t\ttry {\n\t\t\tprovider.trackEvent(\"pie-esm-shared-dependency-conflict\", attributes);\n\t\t} catch {\n\t\t\t// Swallow: instrumentation must never break loading.\n\t\t}\n\t}\n\n\tfunction reportSharedDependencyError(error: unknown): void {\n\t\tconst err = error instanceof Error ? error : new Error(String(error));\n\t\tif (typeof console !== \"undefined\" && console.error) {\n\t\t\tconsole.error(\"[pie-esm] Shared dependency resolution failed\", err);\n\t\t}\n\t\tconst provider = getInstrumentationProvider();\n\t\tif (!provider) return;\n\t\ttry {\n\t\t\tprovider.trackError(err, {\n\t\t\t\tcomponent: \"esm-adapter\",\n\t\t\t\terrorType: \"EsmSharedDependencyError\",\n\t\t\t});\n\t\t} catch {\n\t\t\t// Swallow: instrumentation must never break loading.\n\t\t}\n\t}\n\n\treturn {\n\t\tload,\n\t\tget __seams() {\n\t\t\treturn __seams;\n\t\t},\n\t};\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nexport function mapEsmViewElements(\n\telements: ElementMap,\n\tview = \"delivery\",\n\tviewConfig?: ViewConfig,\n): ElementMap {\n\tconst resolvedViewConfig = resolveEsmViewConfig(view, viewConfig);\n\treturn Object.fromEntries(\n\t\tObject.entries(elements).map(([tag, packageVersion]) => [\n\t\t\t`${tag}${resolvedViewConfig.tagSuffix}`,\n\t\t\tpackageVersion,\n\t\t]),\n\t);\n}\n\nfunction defaultImporter(specifier: string): Promise<unknown> {\n\t// @vite-ignore — dynamic import resolved at runtime.\n\treturn import(/* @vite-ignore */ specifier);\n}\n\nasync function defaultPackageMetadataLoader(\n\tpackageVersion: string,\n\tpackageJsonUrl: string,\n): Promise<PackageMetadata | null> {\n\tconst browserFetch =\n\t\ttypeof window !== \"undefined\" &&\n\t\ttypeof (window as Window & { fetch?: typeof fetch }).fetch === \"function\"\n\t\t\t? (window as Window & { fetch: typeof fetch }).fetch.bind(window)\n\t\t\t: undefined;\n\tif (!browserFetch) {\n\t\treturn null;\n\t}\n\n\tconst response = await browserFetch(packageJsonUrl);\n\tif (!response.ok) {\n\t\treturn null;\n\t}\n\treturn (await response.json()) as PackageMetadata;\n}\n\nfunction resolveCdnProvider(\n\tprovider: EsmCdnProviderOption | undefined,\n\tcdnBaseUrl: string,\n): EsmCdnProvider {\n\tif (isEsmCdnProvider(provider)) return provider;\n\tconst resolvedProviderName =\n\t\tprovider ?? (cdnBaseUrl.includes(\"esm.sh\") ? \"esm.sh\" : \"jsdelivr\");\n\tif (resolvedProviderName === \"esm.sh\") {\n\t\treturn createEsmShProvider(cdnBaseUrl);\n\t}\n\treturn createJsDelivrProvider(cdnBaseUrl, resolvedProviderName);\n}\n\nfunction isEsmCdnProvider(value: unknown): value is EsmCdnProvider {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst candidate = value as Partial<Record<keyof EsmCdnProvider, unknown>>;\n\treturn (\n\t\ttypeof candidate.name === \"string\" &&\n\t\ttypeof candidate.packageJsonUrl === \"function\" &&\n\t\ttypeof candidate.browserViewUrl === \"function\" &&\n\t\ttypeof candidate.browserControllerUrl === \"function\" &&\n\t\ttypeof candidate.sharedDependencyUrl === \"function\"\n\t);\n}\n\nfunction createJsDelivrProvider(\n\tcdnBaseUrl: string,\n\tname: EsmCdnProviderName = \"jsdelivr\",\n): EsmCdnProvider {\n\treturn {\n\t\tname,\n\t\tpackageJsonUrl: (packageVersion) =>\n\t\t\t`${cdnBaseUrl}/${packageVersion}/package.json`,\n\t\tbrowserViewUrl: (packageVersion, view) =>\n\t\t\t`${cdnBaseUrl}/${packageVersion}/dist/browser/${view}/index.js`,\n\t\tbrowserControllerUrl: (packageVersion) =>\n\t\t\t`${cdnBaseUrl}/${packageVersion}/dist/browser/controller/index.js`,\n\t\tsharedDependencyUrl: (dependencyName, version, subpath) => {\n\t\t\tconst suffix = subpath ? `/${subpath}/+esm` : \"/+esm\";\n\t\t\treturn `${cdnBaseUrl}/${dependencyName}@${version}${suffix}`;\n\t\t},\n\t};\n}\n\nfunction createEsmShProvider(cdnBaseUrl: string): EsmCdnProvider {\n\tconst esmBaseUrl = cdnBaseUrl.replace(/\\/+$/, \"\");\n\tconst rawBaseUrl = toRawEsmShBaseUrl(esmBaseUrl);\n\treturn {\n\t\tname: \"esm.sh\",\n\t\tpackageJsonUrl: (packageVersion) =>\n\t\t\t`${rawBaseUrl}/${packageVersion}/package.json`,\n\t\tbrowserViewUrl: (packageVersion, view) =>\n\t\t\t`${rawBaseUrl}/${packageVersion}/dist/browser/${view}/index.js`,\n\t\tbrowserControllerUrl: (packageVersion) =>\n\t\t\t`${rawBaseUrl}/${packageVersion}/dist/browser/controller/index.js`,\n\t\tsharedDependencyUrl: (dependencyName, version, subpath) => {\n\t\t\tconst suffix = subpath ? `/${subpath}` : \"\";\n\t\t\treturn `${esmBaseUrl}/${dependencyName}@${version}${suffix}`;\n\t\t},\n\t};\n}\n\nfunction toRawEsmShBaseUrl(cdnBaseUrl: string): string {\n\ttry {\n\t\tconst url = new URL(cdnBaseUrl);\n\t\tif (url.hostname === \"raw.esm.sh\")\n\t\t\treturn url.toString().replace(/\\/+$/, \"\");\n\t\tif (url.hostname === \"esm.sh\") {\n\t\t\turl.hostname = \"raw.esm.sh\";\n\t\t\treturn url.toString().replace(/\\/+$/, \"\");\n\t\t}\n\t} catch {\n\t\t// Fall through to the public raw endpoint for non-URL test fixtures.\n\t}\n\treturn \"https://raw.esm.sh\";\n}\n\nfunction resolveEsmViewConfig(view: string, viewConfig?: ViewConfig): ViewConfig {\n\treturn viewConfig ?? BUILT_IN_VIEWS[view] ?? BUILT_IN_VIEWS.delivery;\n}\n\nfunction assertBrowserEsmExports(\n\tmetadata: PackageMetadata | null,\n\tpackageVersion: string,\n\tviewConfig: ViewConfig,\n\tloadControllers: boolean,\n\tviewName: string,\n): void {\n\tif (!metadata?.exports) return;\n\n\tconst requiredExports = new Set<string>([\n\t\t`./browser/${browserViewName(viewConfig, viewName)}`,\n\t]);\n\tif (viewConfig.fallback) {\n\t\tconst fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];\n\t\tif (fallbackConfig) {\n\t\t\trequiredExports.add(\n\t\t\t\t`./browser/${browserViewName(fallbackConfig, viewConfig.fallback)}`,\n\t\t\t);\n\t\t}\n\t}\n\tif (loadControllers) {\n\t\trequiredExports.add(\"./browser/controller\");\n\t}\n\n\tfor (const exportKey of requiredExports) {\n\t\tif (!(exportKey in metadata.exports)) {\n\t\t\tthrow new Error(\n\t\t\t\t`${packageVersion} does not publish browser ESM export ${exportKey}; use IIFE/preloaded mode or publish browser ESM artifacts first`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction extractPackageName(packageVersion: string): string {\n\tconst parts = packageVersion.split(\"@\");\n\treturn parts.length >= 3 ? `@${parts[1]}` : parts[0];\n}\n\nfunction cleanViewSubpath(subpath: string): string | null {\n\tconst cleanSubpath = subpath.replace(/^\\/+|\\/+$/g, \"\");\n\treturn cleanSubpath.length > 0 ? cleanSubpath : null;\n}\n\nfunction browserViewName(\n\tviewConfig: ViewConfig,\n\tviewName = \"delivery\",\n): string {\n\tconst subpathView = cleanViewSubpath(viewConfig.subpath);\n\treturn subpathView ?? viewName;\n}\n\nfunction resolveBrowserViewUrl(\n\tpackageVersion: string,\n\tviewConfig: ViewConfig,\n\tcdnProvider: EsmCdnProvider,\n\tviewName = \"delivery\",\n): string {\n\tconst view = browserViewName(viewConfig, viewName);\n\treturn cdnProvider.browserViewUrl(packageVersion, view);\n}\n\nfunction resolveBrowserControllerUrl(\n\tpackageVersion: string,\n\tcdnProvider: EsmCdnProvider,\n): string {\n\treturn cdnProvider.browserControllerUrl(packageVersion);\n}\n\nfunction resolveElementSpecifier(\n\tpackageName: string,\n\tpackageVersion: string,\n\tviewConfig: ViewConfig,\n\tmoduleResolution: \"url\" | \"import-map\",\n\tcdnProvider: EsmCdnProvider,\n\tviewName: string,\n): string {\n\tif (moduleResolution === \"import-map\") {\n\t\treturn viewConfig.subpath\n\t\t\t? `${packageName}${viewConfig.subpath}`\n\t\t\t: packageName;\n\t}\n\treturn resolveBrowserViewUrl(\n\t\tpackageVersion,\n\t\tviewConfig,\n\t\tcdnProvider,\n\t\tviewName,\n\t);\n}\n\nfunction resolveControllerSpecifier(\n\tpackageName: string,\n\tpackageVersion: string,\n\tmoduleResolution: \"url\" | \"import-map\",\n\tcdnProvider: EsmCdnProvider,\n): string {\n\tif (moduleResolution === \"import-map\") {\n\t\treturn `${packageName}/controller`;\n\t}\n\treturn resolveBrowserControllerUrl(packageVersion, cdnProvider);\n}\n\nfunction pickElementClass(module: any, view: string): unknown {\n\tif (!module || typeof module !== \"object\") return undefined;\n\tif (view === \"author\") {\n\t\treturn module.default ?? module.Configure ?? module.Element;\n\t}\n\tif (view === \"print\") {\n\t\treturn module.default ?? module.Print ?? module.Element;\n\t}\n\treturn module.default ?? module.Element;\n}\n\nconst SHARED_BROWSER_DEPENDENCIES = [\"react\", \"react-dom\"] as const;\n\nfunction declaredSharedDependencyVersion(\n\tmetadata: PackageMetadata | null,\n\tdependencyName: (typeof SHARED_BROWSER_DEPENDENCIES)[number],\n\tpackageVersion: string,\n): string | undefined {\n\tconst version = metadata?.pie?.browserSharedDependencies?.[dependencyName];\n\tif (!version) {\n\t\tthrow new Error(\n\t\t\t`${packageVersion} is missing required pie.browserSharedDependencies.${dependencyName}`,\n\t\t);\n\t}\n\tif (!isExactVersion(version)) {\n\t\tthrow new Error(\n\t\t\t`${packageVersion} pie.browserSharedDependencies.${dependencyName} must be an exact version; received \"${version}\"`,\n\t\t);\n\t}\n\treturn version;\n}\n\nfunction packageUsesSharedDependency(\n\tmetadata: PackageMetadata | null,\n\tdependencyName: (typeof SHARED_BROWSER_DEPENDENCIES)[number],\n): boolean {\n\treturn Boolean(\n\t\tmetadata?.pie?.browserSharedDependencies?.[dependencyName] ||\n\t\t\tmetadata?.peerDependencies?.[dependencyName] ||\n\t\t\tmetadata?.dependencies?.[dependencyName] ||\n\t\t\tmetadata?.optionalDependencies?.[dependencyName],\n\t);\n}\n\nfunction addSharedDependencyImports(\n\timports: Record<string, string>,\n\tselectedVersions: Record<string, string>,\n\tlockedVersions: Set<string>,\n\tdependencyName: (typeof SHARED_BROWSER_DEPENDENCIES)[number],\n\tversion: string | undefined,\n\tcdnProvider: EsmCdnProvider,\n\tpackageVersion: string,\n\tonConflict: (attributes: Record<string, unknown>) => void,\n): void {\n\tif (!version) {\n\t\treturn;\n\t}\n\n\tconst currentVersion = selectedVersions[dependencyName];\n\tlet resolvedVersion = version;\n\tif (currentVersion && currentVersion !== version) {\n\t\tresolvedVersion = resolveSharedDependencyVersion(\n\t\t\tdependencyName,\n\t\t\tcurrentVersion,\n\t\t\tversion,\n\t\t\tpackageVersion,\n\t\t\tlockedVersions.has(dependencyName),\n\t\t);\n\t\tonConflict({\n\t\t\tdependencyName,\n\t\t\texistingVersion: currentVersion,\n\t\t\trequestedVersion: version,\n\t\t\tresolvedVersion,\n\t\t\tpackageVersion,\n\t\t});\n\t}\n\tselectedVersions[dependencyName] = resolvedVersion;\n\n\timports[dependencyName] = cdnProvider.sharedDependencyUrl(\n\t\tdependencyName,\n\t\tresolvedVersion,\n\t);\n\tif (dependencyName === \"react\") {\n\t\timports[\"react/jsx-runtime\"] = cdnProvider.sharedDependencyUrl(\n\t\t\t\"react\",\n\t\t\tresolvedVersion,\n\t\t\t\"jsx-runtime\",\n\t\t);\n\t\timports[\"react/jsx-dev-runtime\"] = cdnProvider.sharedDependencyUrl(\n\t\t\t\"react\",\n\t\t\tresolvedVersion,\n\t\t\t\"jsx-dev-runtime\",\n\t\t);\n\t}\n\tif (dependencyName === \"react-dom\") {\n\t\timports[\"react-dom/client\"] = cdnProvider.sharedDependencyUrl(\n\t\t\t\"react-dom\",\n\t\t\tresolvedVersion,\n\t\t\t\"client\",\n\t\t);\n\t}\n}\n\nfunction isExactVersion(version: string): boolean {\n\treturn /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?$/.test(version);\n}\n\nfunction parseVersion(version: string): {\n\tmajor: number;\n\tminor: number;\n\tpatch: number;\n} {\n\tconst match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n\tif (!match) {\n\t\tthrow new Error(`Invalid shared browser dependency version \"${version}\"`);\n\t}\n\treturn {\n\t\tmajor: Number(match[1]),\n\t\tminor: Number(match[2]),\n\t\tpatch: Number(match[3]),\n\t};\n}\n\nfunction compareVersions(a: string, b: string): number {\n\tconst parsedA = parseVersion(a);\n\tconst parsedB = parseVersion(b);\n\tif (parsedA.major !== parsedB.major) return parsedA.major - parsedB.major;\n\tif (parsedA.minor !== parsedB.minor) return parsedA.minor - parsedB.minor;\n\treturn parsedA.patch - parsedB.patch;\n}\n\nfunction resolveSharedDependencyVersion(\n\tdependencyName: string,\n\tcurrentVersion: string,\n\trequestedVersion: string,\n\tpackageVersion: string,\n\tisLocked: boolean,\n): string {\n\tconst current = parseVersion(currentVersion);\n\tconst requested = parseVersion(requestedVersion);\n\tif (current.major !== requested.major) {\n\t\tthrow new Error(\n\t\t\t`Conflicting shared browser dependency ${dependencyName}: ${currentVersion} vs ${requestedVersion} from ${packageVersion}; different major versions cannot share one browser singleton`,\n\t\t);\n\t}\n\tif (isLocked && compareVersions(requestedVersion, currentVersion) > 0) {\n\t\tthrow new Error(\n\t\t\t`Conflicting shared browser dependency ${dependencyName}: ${currentVersion} is already selected, but ${packageVersion} requires higher version ${requestedVersion}; the browser singleton cannot be upgraded after import-map injection`,\n\t\t);\n\t}\n\treturn compareVersions(currentVersion, requestedVersion) >= 0\n\t\t? currentVersion\n\t\t: requestedVersion;\n}\n\ntype BrowserImportMapBuildResult = {\n\tjson: string | null;\n\tsharedDependencyVersions: Record<string, string>;\n};\n\nasync function buildImportMapJson(\n\telements: ElementMap,\n\tviewConfig: ViewConfig,\n\tcdnProvider: EsmCdnProvider,\n\tloadControllers: boolean,\n\tincludeElementImports: boolean,\n\tpackageMetadataLoader: EsmPackageMetadataLoader,\n\tcurrentSharedDependencyVersions: Record<string, string>,\n\tonConflict: (attributes: Record<string, unknown>) => void,\n): Promise<BrowserImportMapBuildResult> {\n\tconst imports: Record<string, string> = {};\n\tconst selectedVersions: Record<string, string> = {\n\t\t...currentSharedDependencyVersions,\n\t};\n\tconst lockedVersions = new Set(Object.keys(currentSharedDependencyVersions));\n\tfor (const [, pkg] of Object.entries(elements)) {\n\t\tconst packageName = extractPackageName(pkg);\n\t\tif (includeElementImports) {\n\t\t\timports[packageName] = resolveBrowserViewUrl(\n\t\t\t\tpkg,\n\t\t\t\tBUILT_IN_VIEWS.delivery,\n\t\t\t\tcdnProvider,\n\t\t\t\t\"delivery\",\n\t\t\t);\n\t\t\tif (viewConfig.subpath) {\n\t\t\t\timports[`${packageName}${viewConfig.subpath}`] = resolveBrowserViewUrl(\n\t\t\t\t\tpkg,\n\t\t\t\t\tviewConfig,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t\tcleanViewSubpath(viewConfig.subpath) ?? \"delivery\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (loadControllers) {\n\t\t\t\timports[`${packageName}/controller`] = resolveBrowserControllerUrl(\n\t\t\t\t\tpkg,\n\t\t\t\t\tcdnProvider,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (viewConfig.fallback) {\n\t\t\t\tconst fallbackConfig = BUILT_IN_VIEWS[viewConfig.fallback];\n\t\t\t\tif (fallbackConfig) {\n\t\t\t\t\tconst fallbackSpecifier = fallbackConfig.subpath\n\t\t\t\t\t\t? `${packageName}${fallbackConfig.subpath}`\n\t\t\t\t\t\t: packageName;\n\t\t\t\t\timports[fallbackSpecifier] = resolveBrowserViewUrl(\n\t\t\t\t\t\tpkg,\n\t\t\t\t\t\tfallbackConfig,\n\t\t\t\t\t\tcdnProvider,\n\t\t\t\t\t\tviewConfig.fallback,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst metadata = await packageMetadataLoader(\n\t\t\tpkg,\n\t\t\tcdnProvider.packageJsonUrl(pkg),\n\t\t);\n\t\tassertBrowserEsmExports(\n\t\t\tmetadata,\n\t\t\tpkg,\n\t\t\tviewConfig,\n\t\t\tloadControllers,\n\t\t\tcleanViewSubpath(viewConfig.subpath) ?? \"delivery\",\n\t\t);\n\t\tfor (const dependencyName of SHARED_BROWSER_DEPENDENCIES) {\n\t\t\tif (!packageUsesSharedDependency(metadata, dependencyName)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\taddSharedDependencyImports(\n\t\t\t\timports,\n\t\t\t\tselectedVersions,\n\t\t\t\tlockedVersions,\n\t\t\t\tdependencyName,\n\t\t\t\tdeclaredSharedDependencyVersion(metadata, dependencyName, pkg),\n\t\t\t\tcdnProvider,\n\t\t\t\tpkg,\n\t\t\t\tonConflict,\n\t\t\t);\n\t\t}\n\t}\n\tif (Object.keys(imports).length === 0) {\n\t\treturn { json: null, sharedDependencyVersions: selectedVersions };\n\t}\n\treturn {\n\t\tjson: JSON.stringify({ imports }, null, 2),\n\t\tsharedDependencyVersions: selectedVersions,\n\t};\n}\n\nfunction injectImportMap(json: string, doc: Document): void {\n\tconst script = doc.createElement(\"script\") as HTMLScriptElement;\n\tscript.type = \"importmap\";\n\tscript.textContent = json;\n\tdoc.head.appendChild(script);\n}\n\nfunction assertImportMapSupported(): void {\n\tconst htmlScriptElement = (\n\t\ttypeof HTMLScriptElement !== \"undefined\" ? HTMLScriptElement : undefined\n\t) as\n\t\t| (typeof HTMLScriptElement & {\n\t\t\t\tsupports?: (type: string) => boolean;\n\t\t })\n\t\t| undefined;\n\tconst supports =\n\t\ttypeof htmlScriptElement?.supports === \"function\" &&\n\t\thtmlScriptElement.supports(\"importmap\");\n\tif (!supports) {\n\t\tthrow new Error(\n\t\t\t'This browser does not support import maps. Use moduleResolution=\"url\" or switch to iife/preloaded strategy.',\n\t\t);\n\t}\n}\n"]}
@@ -1 +0,0 @@
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, parsePackageName } 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\n/**\n * The legacy IIFE bundle global is keyed by unversioned package name. Two\n * distinct specs for one package therefore cannot coexist in a single bundle:\n * one constructor would silently be reused for both requested versioned tags.\n */\nfunction findIifeElementMapConflict(elements: ElementMap): string | undefined {\n\tconst specsByPackageName = new Map<string, Set<string>>();\n\n\tfor (const packageSpecValue of Object.values(elements)) {\n\t\tconst packageSpec = String(packageSpecValue);\n\t\tconst packageName = parsePackageName(packageSpec).name;\n\t\tconst specs = specsByPackageName.get(packageName) ?? new Set<string>();\n\t\tspecs.add(packageSpec);\n\t\tspecsByPackageName.set(packageName, specs);\n\t}\n\n\tconst conflictingPackages = [...specsByPackageName.entries()]\n\t\t.filter(([, specs]) => specs.size > 1)\n\t\t.map(([packageName]) => packageName)\n\t\t.sort();\n\n\treturn conflictingPackages.length > 0\n\t\t? `IIFE bundles cannot load multiple package specs for: ${conflictingPackages.join(\", \")}`\n\t\t: undefined;\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 conflict = findIifeElementMapConflict(elements);\n\t\tif (conflict) {\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: \"backend-rejected\",\n\t\t\t\t\ttag,\n\t\t\t\t\tcause: conflict,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow new AdapterFailure(reasons);\n\t\t}\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"]}
@@ -1 +0,0 @@
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;AAEvD,OAAO,EACN,4BAA4B,EAC5B,yBAAyB,GACzB,MAAM,6BAA6B,CAAC;AAcrC,OAAO,EACN,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC","sourcesContent":["/**\n * PIE Element Loaders\n *\n * Deep `ElementLoader` primitive — the public entry point for registering\n * PIE custom elements at runtime. Exposes `ensureRegistered` (async) and\n * `assertRegistered` (sync) with a truthful promise contract: the returned\n * promise resolves iff every requested tag is actually in `customElements`.\n *\n * Backends (IIFE, ESM) are internal adapter modules; they implement the\n * `ElementLoaderBackend` interface and are wired via `{ backend: ... }`\n * options.\n *\n * @example\n * ```typescript\n * import {\n * ensureRegistered,\n * BundleType,\n * } from \"@pie-players/pie-players-shared/loaders\";\n *\n * await ensureRegistered(\n * { \"pie-multiple-choice\": \"@pie-element/multiple-choice@11.0.1\" },\n * {\n * backend: {\n * kind: \"iife\",\n * bundleHost: \"https://proxy.pie-api.com/bundles/\",\n * bundleType: BundleType.clientPlayer,\n * needsControllers: true,\n * },\n * },\n * );\n * ```\n */\n\nexport type { ElementMap } from \"./ElementLoader.js\";\nexport { aggregateElements } from \"./ElementLoader.js\";\nexport type { ElementPackagePolicy } from \"./element-package-policy.js\";\nexport {\n\tassertElementPackagesAllowed,\n\tElementPackagePolicyError,\n} from \"./element-package-policy.js\";\n\n// ElementLoader primitive — truthful-promise loader. The public entry point\n// for ensureRegistered / assertRegistered.\nexport type {\n\tBackendContext,\n\tBackendOption,\n\tElementLoaderBackend,\n\tElementTag,\n\tEnsureRegisteredOptions,\n\tEsmBackendConfig,\n\tIifeBackendConfig,\n\tRegistrationFailureReason,\n} from \"./element-loader.js\";\nexport {\n\tAdapterFailure,\n\tElementAssertionError,\n\tElementLoaderError,\n\tassertRegistered,\n\tensureRegistered,\n} from \"./element-loader.js\";\nexport type {\n\tBuiltInEsmCdnProviderName,\n\tEsmBackend,\n\tEsmCdnProvider,\n\tEsmCdnProviderName,\n\tEsmCdnProviderOption,\n\tViewConfig,\n} from \"./esm-adapter.js\";\nexport {\n\tBUILT_IN_VIEWS,\n\tcreateEsmBackend,\n\tmapEsmViewElements,\n} from \"./esm-adapter.js\";\nexport type {\n\tIifeBackend,\n\tIifeBundleRetryStatus,\n} from \"./iife-adapter.js\";\nexport { createIifeBackend, DEFAULT_BUNDLE_HOST } from \"./iife-adapter.js\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAChD,GAAG,OAAY,EACX,EAAE;IACN,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAClC,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACvB,IACC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC;gBACtB,GAAW,CAAC,GAAG,CAAC,KAAK,IAAI;gBACzB,GAAW,CAAC,GAAG,CAAC,KAAK,SAAS,EAC9B,CAAC;gBACD,GAAW,CAAC,GAAG,CAAC,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;YACvC,CAAC;QACF,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC,EAAE,EAAO,CAAC,CAAC;AACb,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,KAAQ,EAAK,EAAE;IAC3C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjD,4CAA4C;QAC5C,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,wCAAwC;QACxC,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAM,CAAC;IAClC,CAAC;IACD,uDAAuD;IACvD,MAAM,IAAI,GAAG,EAAO,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,KAAY,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAY,CAAC,GAAG,CAAC,GAAG,SAAS,CAAE,KAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC","sourcesContent":["/**\n * A problem using the spread operator merging objects is that undefined properties may override\n * defined properties, which is often NOT what you want (e.g. when providing default values). This\n * function merges objects, but ignores properties that are null or undefined.\n * @param objects The objects to merge.\n */\nexport const mergeObjectsIgnoringNullUndefined = <T extends object>(\n\t...objects: T[]\n): T => {\n\treturn objects.reduce((acc, obj) => {\n\t\tfor (const key in obj) {\n\t\t\tif (\n\t\t\t\tObject.hasOwn(obj, key) &&\n\t\t\t\t(obj as any)[key] !== null &&\n\t\t\t\t(obj as any)[key] !== undefined\n\t\t\t) {\n\t\t\t\t(acc as any)[key] = (obj as any)[key];\n\t\t\t}\n\t\t}\n\t\treturn acc;\n\t}, {} as T);\n};\n\n/**\n * Deep clone an object.\n */\nexport const cloneDeep = <T>(value: T): T => {\n\tif (value === null || typeof value !== \"object\") {\n\t\t// Primitive value (or null), just return it\n\t\treturn value;\n\t}\n\tif (Array.isArray(value)) {\n\t\t// Array: clone each element recursively\n\t\treturn value.map(cloneDeep) as T;\n\t}\n\t// Object: create a new object and clone its properties\n\tconst copy = {} as T;\n\tfor (const key in value as any) {\n\t\tif (Object.hasOwn(value, key)) {\n\t\t\t(copy as any)[key] = cloneDeep((value as any)[key]);\n\t\t}\n\t}\n\treturn copy;\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"asset-handler.js","sourceRoot":"","sources":["../../src/pie/asset-handler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Asset Handler Utilities\n *\n * Handles image and sound upload events for authoring mode.\n * Provides default DataURL-based implementation and event management.\n */\n\nimport {\n\tDeleteImageEvent,\n\tDeleteSoundEvent,\n\ttype ImageHandler,\n\tInsertImageEvent,\n\tInsertSoundEvent,\n\ttype SoundHandler,\n} from \"../types/index.js\";\nimport { createPieLogger, isGlobalDebugEnabled } from \"./logger.js\";\nimport type { AssetHandler } from \"./types.js\";\n\nconst logger = createPieLogger(\"asset-handler\", () => isGlobalDebugEnabled());\n\n/**\n * DataURL-based asset handler (default implementation)\n *\n * Converts uploaded files to base64 data URLs.\n * Suitable for demos and local development.\n */\nexport class DataURLAssetHandler implements AssetHandler {\n\tprivate cancelled = false;\n\tprivate fileReader: FileReader | null = null;\n\n\tconstructor(private onComplete: (src: string) => void) {}\n\n\tcancel(): void {\n\t\tthis.cancelled = true;\n\t\tif (this.fileReader) {\n\t\t\tthis.fileReader.abort();\n\t\t}\n\t\tlogger.debug(\"[DataURLAssetHandler] Upload cancelled\");\n\t}\n\n\tdone(err?: Error, src?: string): void {\n\t\tif (this.cancelled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (err) {\n\t\t\tlogger.error(\"[DataURLAssetHandler] Error during upload:\", err);\n\t\t\t// Optionally notify user of error\n\t\t\treturn;\n\t\t}\n\n\t\tif (src) {\n\t\t\tlogger.debug(\n\t\t\t\t\"[DataURLAssetHandler] Upload complete, src:\",\n\t\t\t\tsrc.substring(0, 50) + \"...\",\n\t\t\t);\n\t\t\tthis.onComplete(src);\n\t\t}\n\t}\n\n\tfileChosen(file: File): void {\n\t\tif (this.cancelled) {\n\t\t\treturn;\n\t\t}\n\n\t\tlogger.debug(\n\t\t\t\"[DataURLAssetHandler] File chosen:\",\n\t\t\tfile.name,\n\t\t\tfile.type,\n\t\t\tfile.size,\n\t\t);\n\n\t\tthis.fileReader = new FileReader();\n\n\t\tthis.fileReader.onload = (e) => {\n\t\t\tconst dataUrl = e.target?.result as string;\n\t\t\tlogger.debug(\"[DataURLAssetHandler] File converted to data URL\");\n\t\t\tthis.done(undefined, dataUrl);\n\t\t};\n\n\t\tthis.fileReader.onerror = () => {\n\t\t\tlogger.error(\"[DataURLAssetHandler] FileReader error\");\n\t\t\tthis.done(new Error(\"Failed to read file\"));\n\t\t};\n\n\t\tthis.fileReader.onprogress = (e) => {\n\t\t\tif (e.lengthComputable) {\n\t\t\t\tconst percent = (e.loaded / e.total) * 100;\n\t\t\t\tthis.progress(percent, e.loaded, e.total);\n\t\t\t}\n\t\t};\n\n\t\tthis.fileReader.readAsDataURL(file);\n\t}\n\n\tprogress(percent: number, bytes: number, total: number): void {\n\t\tlogger.debug(\n\t\t\t`[DataURLAssetHandler] Progress: ${percent.toFixed(1)}% (${bytes}/${total} bytes)`,\n\t\t);\n\t\t// Could dispatch custom event here for progress UI\n\t}\n}\n\ntype UploadHandlerLike = {\n\tcancel?: () => void;\n\tdone?: (err?: Error, src?: string) => void;\n\tprogress?: (percent: number, bytes: number, total: number) => void;\n\tfileChosen?: (file: File) => void;\n\tisPasted?: boolean;\n\tgetChosenFile?: () => File;\n};\n\nfunction toError(value: unknown, fallback: string): Error {\n\tif (value instanceof Error) {\n\t\treturn value;\n\t}\n\treturn new Error(String(value ?? fallback));\n}\n\nfunction createOnceCompletion(\n\thandler: UploadHandlerLike,\n\tdataURLHandler: DataURLAssetHandler,\n) {\n\tlet settled = false;\n\tconst originalDone = handler.done;\n\tconst originalCancel = handler.cancel;\n\n\tconst done = (err?: Error, src?: string) => {\n\t\tif (settled) {\n\t\t\treturn;\n\t\t}\n\t\tsettled = true;\n\t\tif (err) {\n\t\t\ttry {\n\t\t\t\toriginalCancel?.();\n\t\t\t} catch (cancelError) {\n\t\t\t\tlogger.error(\"[asset-handler] cancel callback failed:\", cancelError);\n\t\t\t}\n\t\t\tdataURLHandler.cancel();\n\t\t}\n\t\ttry {\n\t\t\toriginalDone?.(err, src);\n\t\t} catch (doneError) {\n\t\t\tlogger.error(\"[asset-handler] done callback failed:\", doneError);\n\t\t}\n\t};\n\n\tconst cancel = () => {\n\t\tif (settled) {\n\t\t\treturn;\n\t\t}\n\t\tsettled = true;\n\t\ttry {\n\t\t\toriginalCancel?.();\n\t\t} catch (cancelError) {\n\t\t\tlogger.error(\"[asset-handler] cancel callback failed:\", cancelError);\n\t\t}\n\t\tdataURLHandler.cancel();\n\t};\n\n\thandler.done = done;\n\thandler.cancel = cancel;\n\n\treturn {\n\t\tdone,\n\t\tcancel,\n\t\tisSettled: () => settled,\n\t};\n}\n\nfunction pickFileWithDialogLifecycle(\n\taccept: string,\n\tonCancel: () => void,\n): Promise<File | null> {\n\treturn new Promise((resolve) => {\n\t\tconst input = document.createElement(\"input\");\n\t\tinput.type = \"file\";\n\t\tinput.accept = accept;\n\n\t\tlet resolved = false;\n\t\tlet changeHandled = false;\n\t\tlet dialogOpened = false;\n\n\t\tconst cleanup = () => {\n\t\t\tinput.onchange = null;\n\t\t\twindow.removeEventListener(\"focus\", onFocus);\n\t\t\tinput.removeEventListener(\"cancel\", onCancelEvent as EventListener);\n\t\t};\n\n\t\tconst finalize = (file: File | null) => {\n\t\t\tif (resolved) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolved = true;\n\t\t\tcleanup();\n\t\t\tresolve(file);\n\t\t};\n\n\t\tconst onFocus = () => {\n\t\t\tif (!dialogOpened || changeHandled) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tdialogOpened = false;\n\t\t\twindow.setTimeout(() => {\n\t\t\t\tif (changeHandled || resolved) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst file = input.files?.[0] ?? null;\n\t\t\t\tif (!file) {\n\t\t\t\t\tonCancel();\n\t\t\t\t}\n\t\t\t\tfinalize(file);\n\t\t\t}, 300);\n\t\t};\n\n\t\tconst onCancelEvent = () => {\n\t\t\tonCancel();\n\t\t\tfinalize(null);\n\t\t};\n\n\t\tinput.onchange = () => {\n\t\t\tchangeHandled = true;\n\t\t\tdialogOpened = false;\n\t\t\tfinalize(input.files?.[0] ?? null);\n\t\t};\n\n\t\tinput.addEventListener(\"cancel\", onCancelEvent as EventListener);\n\t\twindow.addEventListener(\"focus\", onFocus);\n\t\tdialogOpened = true;\n\t\tinput.click();\n\t});\n}\n\nfunction getPastedFile(handler: UploadHandlerLike): File | null {\n\tif (!handler.isPasted || typeof handler.getChosenFile !== \"function\") {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn handler.getChosenFile() ?? null;\n\t} catch (error) {\n\t\tlogger.error(\"[asset-handler] Failed to read pasted file\", error);\n\t\treturn null;\n\t}\n}\n\n/**\n * Asset Event Manager\n *\n * Manages asset-related event listeners for configure elements.\n * Handles InsertImageEvent, DeleteImageEvent, InsertSoundEvent, DeleteSoundEvent.\n */\nexport class AssetEventManager {\n\tprivate listeners: Array<{ type: string; handler: EventListener }> = [];\n\n\tconstructor(\n\t\tprivate element: HTMLElement,\n\t\tprivate onInsertImage?: (handler: ImageHandler) => void,\n\t\tprivate onDeleteImage?: (src: string, done: (err?: Error) => void) => void,\n\t\tprivate onInsertSound?: (handler: SoundHandler) => void,\n\t\tprivate onDeleteSound?: (src: string, done: (err?: Error) => void) => void,\n\t) {}\n\n\t/**\n\t * Attach event listeners\n\t */\n\tattach(): void {\n\t\tlogger.debug(\"[AssetEventManager] Attaching event listeners\");\n\n\t\t// Insert Image Event\n\t\tif (this.onInsertImage) {\n\t\t\tconst insertImageHandler = (e: Event) => {\n\t\t\t\tconst event = e as InsertImageEvent;\n\t\t\t\tlogger.debug(\"[AssetEventManager] InsertImageEvent received\");\n\t\t\t\tthis.onInsertImage!(event.detail);\n\t\t\t};\n\t\t\tthis.element.addEventListener(InsertImageEvent.TYPE, insertImageHandler);\n\t\t\tthis.listeners.push({\n\t\t\t\ttype: InsertImageEvent.TYPE,\n\t\t\t\thandler: insertImageHandler,\n\t\t\t});\n\t\t}\n\n\t\t// Delete Image Event\n\t\tif (this.onDeleteImage) {\n\t\t\tconst deleteImageHandler = (e: Event) => {\n\t\t\t\tconst event = e as DeleteImageEvent;\n\t\t\t\tlogger.debug(\n\t\t\t\t\t\"[AssetEventManager] DeleteImageEvent received, src:\",\n\t\t\t\t\tevent.detail.src,\n\t\t\t\t);\n\t\t\t\tthis.onDeleteImage!(event.detail.src, event.detail.done);\n\t\t\t};\n\t\t\tthis.element.addEventListener(DeleteImageEvent.TYPE, deleteImageHandler);\n\t\t\tthis.listeners.push({\n\t\t\t\ttype: DeleteImageEvent.TYPE,\n\t\t\t\thandler: deleteImageHandler,\n\t\t\t});\n\t\t}\n\n\t\t// Insert Sound Event\n\t\tif (this.onInsertSound) {\n\t\t\tconst insertSoundHandler = (e: Event) => {\n\t\t\t\tconst event = e as InsertSoundEvent;\n\t\t\t\tlogger.debug(\"[AssetEventManager] InsertSoundEvent received\");\n\t\t\t\tthis.onInsertSound!(event.detail);\n\t\t\t};\n\t\t\tthis.element.addEventListener(InsertSoundEvent.TYPE, insertSoundHandler);\n\t\t\tthis.listeners.push({\n\t\t\t\ttype: InsertSoundEvent.TYPE,\n\t\t\t\thandler: insertSoundHandler,\n\t\t\t});\n\t\t}\n\n\t\t// Delete Sound Event\n\t\tif (this.onDeleteSound) {\n\t\t\tconst deleteSoundHandler = (e: Event) => {\n\t\t\t\tconst event = e as DeleteSoundEvent;\n\t\t\t\tlogger.debug(\n\t\t\t\t\t\"[AssetEventManager] DeleteSoundEvent received, src:\",\n\t\t\t\t\tevent.detail.src,\n\t\t\t\t);\n\t\t\t\tthis.onDeleteSound!(event.detail.src, event.detail.done);\n\t\t\t};\n\t\t\tthis.element.addEventListener(DeleteSoundEvent.TYPE, deleteSoundHandler);\n\t\t\tthis.listeners.push({\n\t\t\t\ttype: DeleteSoundEvent.TYPE,\n\t\t\t\thandler: deleteSoundHandler,\n\t\t\t});\n\t\t}\n\n\t\tlogger.debug(\n\t\t\t\"[AssetEventManager] Attached\",\n\t\t\tthis.listeners.length,\n\t\t\t\"event listeners\",\n\t\t);\n\t}\n\n\t/**\n\t * Detach event listeners (cleanup)\n\t */\n\tdetach(): void {\n\t\tlogger.debug(\"[AssetEventManager] Detaching event listeners\");\n\n\t\tthis.listeners.forEach(({ type, handler }) => {\n\t\t\tthis.element.removeEventListener(type, handler);\n\t\t});\n\n\t\tthis.listeners = [];\n\t\tlogger.debug(\"[AssetEventManager] All event listeners detached\");\n\t}\n}\n\n/**\n * Create default image insert handler using DataURL conversion\n */\nexport function createDefaultImageInsertHandler(\n\tonComplete: (src: string) => void,\n): (handler: ImageHandler) => void {\n\treturn (handler: ImageHandler) => {\n\t\tlogger.debug(\"[createDefaultImageInsertHandler] Creating DataURL handler\");\n\n\t\tlet completion: ReturnType<typeof createOnceCompletion> | null = null;\n\t\tconst dataURLHandler = new DataURLAssetHandler((src) => {\n\t\t\tonComplete(src);\n\t\t\tcompletion?.done(undefined, src);\n\t\t});\n\t\tcompletion = createOnceCompletion(handler, dataURLHandler);\n\t\tconst finishCancelled = () => {\n\t\t\tcompletion?.done(new Error(\"Image selection cancelled\"));\n\t\t};\n\n\t\tconst handleChosenFile = (file: File | null) => {\n\t\t\tif (!file) {\n\t\t\t\tfinishCancelled();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\thandler.fileChosen(file);\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\n\t\t\t\t\t\"[createDefaultImageInsertHandler] fileChosen failed\",\n\t\t\t\t\terror,\n\t\t\t\t);\n\t\t\t\tcompletion?.done(toError(error, \"Image fileChosen failed\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tdataURLHandler.fileChosen(file);\n\t\t\t} catch (error) {\n\t\t\t\tcompletion?.done(toError(error, \"Image upload failed\"));\n\t\t\t}\n\t\t};\n\n\t\tconst pastedFile = getPastedFile(handler);\n\t\tif (pastedFile) {\n\t\t\thandleChosenFile(pastedFile);\n\t\t\treturn;\n\t\t}\n\t\tif (handler.isPasted) {\n\t\t\tcompletion?.done(new Error(\"Pasted image is unavailable\"));\n\t\t\treturn;\n\t\t}\n\n\t\tvoid pickFileWithDialogLifecycle(\"image/*\", finishCancelled)\n\t\t\t.then((file) => {\n\t\t\t\tif (completion?.isSettled()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\thandleChosenFile(file);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tcompletion?.done(toError(error, \"Image selection failed\"));\n\t\t\t});\n\t};\n}\n\n/**\n * Create default sound insert handler using DataURL conversion\n */\nexport function createDefaultSoundInsertHandler(\n\tonComplete: (src: string) => void,\n): (handler: SoundHandler) => void {\n\treturn (handler: SoundHandler) => {\n\t\tlogger.debug(\"[createDefaultSoundInsertHandler] Creating DataURL handler\");\n\n\t\tlet completion: ReturnType<typeof createOnceCompletion> | null = null;\n\t\tconst dataURLHandler = new DataURLAssetHandler((src) => {\n\t\t\tonComplete(src);\n\t\t\tcompletion?.done(undefined, src);\n\t\t});\n\t\tconst handlerLike = handler as unknown as UploadHandlerLike;\n\t\tcompletion = createOnceCompletion(handlerLike, dataURLHandler);\n\t\tconst finishCancelled = () => {\n\t\t\tcompletion?.done(new Error(\"Sound selection cancelled\"));\n\t\t};\n\n\t\tconst handleChosenFile = (file: File | null) => {\n\t\t\tif (!file) {\n\t\t\t\tfinishCancelled();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Some handlers expose fileChosen as function, while others store file directly.\n\t\t\tconst maybeFileChosen = (handlerLike as any).fileChosen;\n\t\t\tif (typeof maybeFileChosen === \"function\") {\n\t\t\t\ttry {\n\t\t\t\t\tmaybeFileChosen(file);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"[createDefaultSoundInsertHandler] fileChosen failed\",\n\t\t\t\t\t\terror,\n\t\t\t\t\t);\n\t\t\t\t\tcompletion?.done(toError(error, \"Sound fileChosen failed\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tdataURLHandler.fileChosen(file);\n\t\t\t} catch (error) {\n\t\t\t\tcompletion?.done(toError(error, \"Sound upload failed\"));\n\t\t\t}\n\t\t};\n\n\t\tconst pastedFile = getPastedFile(handlerLike);\n\t\tif (pastedFile) {\n\t\t\thandleChosenFile(pastedFile);\n\t\t\treturn;\n\t\t}\n\t\tif (handlerLike.isPasted) {\n\t\t\tcompletion?.done(new Error(\"Pasted sound is unavailable\"));\n\t\t\treturn;\n\t\t}\n\n\t\tvoid pickFileWithDialogLifecycle(\"audio/*\", finishCancelled)\n\t\t\t.then((file) => {\n\t\t\t\tif (completion?.isSettled()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\thandleChosenFile(file);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tcompletion?.done(toError(error, \"Sound selection failed\"));\n\t\t\t});\n\t};\n}\n\n/**\n * Create default image delete handler (no-op for DataURL)\n */\nexport function createDefaultImageDeleteHandler(): (\n\tsrc: string,\n\tdone: (err?: Error) => void,\n) => void {\n\treturn (src: string, done: (err?: Error) => void) => {\n\t\tlogger.debug(\n\t\t\t\"[createDefaultImageDeleteHandler] Delete requested for:\",\n\t\t\tsrc.substring(0, 50),\n\t\t);\n\t\t// For DataURL, no server-side deletion needed\n\t\tdone(); // Success\n\t};\n}\n\n/**\n * Create default sound delete handler (no-op for DataURL)\n */\nexport function createDefaultSoundDeleteHandler(): (\n\tsrc: string,\n\tdone: (err?: Error) => void,\n) => void {\n\treturn (src: string, done: (err?: Error) => void) => {\n\t\tlogger.debug(\n\t\t\t\"[createDefaultSoundDeleteHandler] Delete requested for:\",\n\t\t\tsrc.substring(0, 50),\n\t\t);\n\t\t// For DataURL, no server-side deletion needed\n\t\tdone(); // Success\n\t};\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"authoring-tag.js","sourceRoot":"","sources":["../../src/pie/authoring-tag.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAC9C,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE9C;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAC1C,MAAc,EACd,QAAgC;IAEhC,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,IAAI,MAAM,CAC1B,UAAU,YAAY,CAAC,UAAU,CAAC,uBAAuB,EACzD,GAAG,CACH,CAAC;QACF,OAAO,MAAM,CAAC,OAAO,CACpB,QAAQ,EACR,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE,CAAC,GAAG,OAAO,GAAG,UAAU,SAAS,CAC7D,CAAC;IACH,CAAC,EAAE,MAAM,CAAC,CAAC;AACZ,CAAC","sourcesContent":["const escapeRegExp = (value: string): string =>\n\tvalue.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\n/**\n * Rewrite exact authored custom-element tags to their authoring-mode variants.\n * Tag names are escaped because valid custom-element names may contain regexp\n * metacharacters such as dots.\n */\nexport function transformMarkupForAuthoring(\n\tmarkup: string,\n\telements: Record<string, string>,\n): string {\n\treturn Object.keys(elements).reduce((result, elementTag) => {\n\t\tconst exactTag = new RegExp(\n\t\t\t`(<\\\\/?)${escapeRegExp(elementTag)}(?=[\\\\t\\\\n\\\\f\\\\r />])`,\n\t\t\t\"g\",\n\t\t);\n\t\treturn result.replace(\n\t\t\texactTag,\n\t\t\t(_match, opening: string) => `${opening}${elementTag}-config`,\n\t\t);\n\t}, markup);\n}\n"]}
@@ -1 +0,0 @@
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"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-context.js","sourceRoot":"","sources":["../../src/pie/component-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,8DAA8D;AAC9D,MAAM,gBAAgB,GAAuB,EAAE,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAyB;IAChE,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE/B,OAAO,GAAG,EAAE;QACX,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YAChB,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;IACF,CAAC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B;IACzC,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC;QACjC,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,IAAI,CAAC;AACT,CAAC","sourcesContent":["/**\n * Component context stack for PIE mini-players.\n *\n * Used to attribute resource load failures (fonts/images/etc.) to the currently\n * active mini-player component.\n */\n\nexport type ComponentContext = {\n\tcomponentName: string;\n\telementType?: string;\n\titemId?: string;\n\ttimestamp: number;\n};\n\n// Track active components (stack-based for nested components)\nconst activeComponents: ComponentContext[] = [];\n\n/**\n * Register a component as active (call when component mounts).\n * Returns a cleanup function to call when the component unmounts.\n */\nexport function registerActiveComponent(context: ComponentContext): () => void {\n\tactiveComponents.push(context);\n\n\treturn () => {\n\t\tconst index = activeComponents.indexOf(context);\n\t\tif (index > -1) {\n\t\t\tactiveComponents.splice(index, 1);\n\t\t}\n\t};\n}\n\n/**\n * Get the current active component context (top of the stack).\n */\nexport function getCurrentComponentContext(): ComponentContext | null {\n\treturn activeComponents.length > 0\n\t\t? activeComponents[activeComponents.length - 1]\n\t\t: null;\n}\n"]}
@@ -1 +0,0 @@
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\";\nimport {\n\tparseVersionedTagName,\n\ttoPackageVersionedTag,\n} from \"./versioned-tag.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][a-zA-Z0-9._-]*)(?=[\\t\\n\\f\\r />])/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\ttoPackageVersionedTag(tagName, 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 because a\n * CustomElementRegistry definition cannot be removed, updated, or replaced. A\n * distinct versioned tag gives each loaded constructor its own effective runtime\n * namespace, allowing several versions of one PIE element to coexist. The same\n * transformation must be applied to the runtime markup and model references.\n */\nexport const makeUniqueTags = <T extends ConfigContainerEntity>(\n\tcontainer: T,\n): T => {\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 = toPackageVersionedTag(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\t// Transform exact opening/closing tags only. Element names may contain\n\t// regexp-significant characters, and prefix tags (pie-foo/pie-foo-bar)\n\t// are separate authored-content contracts.\n\tconst escapeRegExp = (value: string): string =>\n\t\tvalue.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\tconst replaceMarkupTag = (\n\t\tmarkup: string,\n\t\toriginalName: string,\n\t\tversionedName: string,\n\t): string => {\n\t\tconst exactTag = new RegExp(\n\t\t\t`(<\\\\/?)${escapeRegExp(originalName)}(?=[\\\\t\\\\n\\\\f\\\\r />])`,\n\t\t\t\"g\",\n\t\t);\n\t\treturn markup.replace(\n\t\t\texactTag,\n\t\t\t(_match, opening: string) => `${opening}${versionedName}`,\n\t\t);\n\t};\n\n\tconst markup = Object.entries(elementMappings).reduce(\n\t\t(currentMarkup, [originalName, { versionedName }]) =>\n\t\t\toriginalName !== versionedName\n\t\t\t\t? replaceMarkupTag(currentMarkup, originalName, 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// pie-item contract compatibility: makeUniqueTags historically repaired an\n\t\t// unversioned model reference when the element map contained a versioned tag.\n\t\t// Preserve only the unambiguous case; never guess between multiple versions.\n\t\tconst baseNameMatches = Object.entries(elementMappings).filter(([key]) => {\n\t\t\tconst { baseName, existingEncodedVersion } = parseVersionedTagName(key);\n\t\t\treturn (\n\t\t\t\texistingEncodedVersion !== undefined && baseName === originalElement\n\t\t\t);\n\t\t});\n\t\tif (baseNameMatches.length === 1) {\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// Invalid or ambiguous undeclared model references stay untouched here;\n\t\t// validation owns the error.\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 +0,0 @@
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 +0,0 @@
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"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"custom-element-define.js","sourceRoot":"","sources":["../../src/pie/custom-element-define.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAS1D,MAAM,sBAAsB,GAAG,CAAC,KAAc,EAAW,EAAE;IAC1D,IAAI,OAAO,YAAY,KAAK,WAAW,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAC1E,OAAO,CACN,KAAK,CAAC,IAAI,KAAK,mBAAmB;YAClC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,iBAAiB,CAC7C,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GACd,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK;QAC7D,CAAC,CAAC,MAAM,CAAE,KAA4B,CAAC,IAAI,CAAC;QAC5C,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,SAAS,KAAK,mBAAmB,CAAC;AAC1C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACxC,OAAe,EACf,kBAA4C,EAC5C,OAAO,GAAG,oBAAoB,EACX,EAAE;IACrB,MAAM,YAAY,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChE,IAAI,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC;QACJ,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;QACxD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,KAAK,CAAC;QACb,CAAC;QAED,IAAI,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAC7D,CAAC;QAED,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC,CAAC","sourcesContent":["import { validateCustomElementTag } from \"./tag-names.js\";\n\nexport type SafeDefineStatus = \"already-defined\" | \"defined\";\n\nexport type SafeDefineResult = {\n\tstatus: SafeDefineStatus;\n\ttagName: string;\n};\n\nconst isDuplicateDefineError = (error: unknown): boolean => {\n\tif (typeof DOMException !== \"undefined\" && error instanceof DOMException) {\n\t\treturn (\n\t\t\terror.name === \"NotSupportedError\" ||\n\t\t\terror.code === DOMException.NOT_SUPPORTED_ERR\n\t\t);\n\t}\n\n\tconst maybeName =\n\t\ttypeof error === \"object\" && error !== null && \"name\" in error\n\t\t\t? String((error as { name?: unknown }).name)\n\t\t\t: \"\";\n\treturn maybeName === \"NotSupportedError\";\n};\n\nexport const defineCustomElementSafely = (\n\ttagName: string,\n\telementConstructor: CustomElementConstructor,\n\tcontext = \"custom element tag\",\n): SafeDefineResult => {\n\tconst validTagName = validateCustomElementTag(tagName, context);\n\tif (customElements.get(validTagName)) {\n\t\treturn { status: \"already-defined\", tagName: validTagName };\n\t}\n\n\ttry {\n\t\tcustomElements.define(validTagName, elementConstructor);\n\t\treturn { status: \"defined\", tagName: validTagName };\n\t} catch (error) {\n\t\tif (!isDuplicateDefineError(error)) {\n\t\t\tthrow error;\n\t\t}\n\n\t\tif (customElements.get(validTagName)) {\n\t\t\treturn { status: \"already-defined\", tagName: validTagName };\n\t\t}\n\n\t\tthrow error;\n\t}\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pie/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,SAAS;AACT,OAAO,EACN,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,yBAAyB,GACzB,MAAM,aAAa,CAAC;AACrB,2EAA2E;AAC3E,qEAAqE;AACrE,iBAAiB;AACjB,OAAO,EACN,8BAA8B,EAC9B,oBAAoB,EACpB,aAAa,EACb,uBAAuB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,EAC7B,uBAAuB,GACvB,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EACN,uBAAuB,EACvB,UAAU,EACV,eAAe,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AAErF,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,qEAAqE;AACrE,yDAAyD;AACzD,mEAAmE;AACnE,OAAO,EACN,MAAM,EACN,gBAAgB,EAChB,YAAY,GACZ,MAAM,aAAa,CAAC;AAQrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAKxD,OAAO,EACN,oCAAoC,EACpC,iCAAiC,EACjC,iCAAiC,GACjC,MAAM,gCAAgC,CAAC;AAIxC,OAAO,EACN,cAAc,EACd,6BAA6B,GAC7B,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACN,gBAAgB,EAChB,0BAA0B,GAC1B,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EACN,wBAAwB,EACxB,gCAAgC,GAChC,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAOpE,OAAO,EACN,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,mBAAmB,GACnB,MAAM,yBAAyB,CAAC;AACjC,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,UAAU;AACV,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAW/D,OAAO,EACN,UAAU,EACV,wBAAwB,EACxB,0BAA0B;AAC1B,0BAA0B;AAC1B,cAAc,EACd,sBAAsB,EACtB,MAAM,GACN,MAAM,YAAY,CAAC;AACpB,qBAAqB;AACrB,OAAO,EACN,yBAAyB,GAGzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACN,gBAAgB,EAChB,SAAS,EACT,wBAAwB,EACxB,eAAe,GACf,MAAM,gBAAgB,CAAC;AAExB,UAAU;AACV,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,GACvB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACN,wBAAwB,EACxB,qBAAqB,EACrB,wCAAwC,EACxC,kBAAkB,EAClB,0BAA0B,EAC1B,mCAAmC,EACnC,4BAA4B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,QAAQ;AACR,OAAO,EACN,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,gBAAgB,GAChB,MAAM,YAAY,CAAC","sourcesContent":["/**\n * PIE Utilities Index\n *\n * Barrel export for public PIE runtime utilities.\n * Public consumers should import from this aggregate. The only supported\n * deep `pie/*` subpath is `pie/tag-names` for tag helper reuse.\n *\n * - `pie` - PIE runtime utilities, interfaces, and helpers\n * - `pie/tag-names` - Custom element tag naming helpers\n */\n\n// Config\nexport {\n\tassertPieConfigContract,\n\taddMarkupForPackage,\n\taddRubricIfNeeded,\n\telementForPackage,\n\tmakeUniqueTags,\n\tmodelsForPackage,\n\tvalidatePieConfigContract,\n} from \"./config.js\";\n// Loaders — the deep `ElementLoader` primitive (async `ensureRegistered` /\n// sync `assertRegistered`) lives under `pie-players-shared/loaders`.\n// Initialization\nexport {\n\tinitializePiesFromLoadedBundle,\n\tloadBundleFromString,\n\tloadPieModule,\n\tloadPieModuleFromString,\n} from \"./initialization.js\";\nexport {\n\tcreateAuthoringAssetEventManager,\n\tinitializeAuthoringConfigures,\n\tresolveConfigureConfiguration,\n\tvalidateAuthoringModels,\n} from \"./authoring.js\";\nexport type {\n\tAuthoringMediaHandlers,\n\tAuthoringValidationResult,\n\tInitializedConfigureModel,\n} from \"./authoring.js\";\nexport {\n\tinitializeMathRendering,\n\trenderMath,\n\tsetMathRenderer,\n} from \"./math-rendering.js\";\nexport { attachInstrumentationEventBridge } from \"./instrumentation-event-bridge.js\";\nexport type { AttachInstrumentationEventBridgeArgs } from \"./instrumentation-event-bridge.js\";\nexport { resolveInstrumentationProvider } from \"./instrumentation-provider-resolution.js\";\n// Canonical stage vocabulary (M6). Both `<pie-section-player-*>` and\n// `<pie-assessment-toolkit>` share this primitive so the\n// `pie-stage-change` event family stays coherent across CE shapes.\nexport {\n\tSTAGES,\n\tapplicableStages,\n\tstageOrdinal,\n} from \"./stages.js\";\nexport type {\n\tLoadingCompleteDetail,\n\tStage,\n\tStageChangeDetail,\n\tStageSourceCe,\n\tStageStatus,\n} from \"./stages.js\";\nexport { createStageTracker } from \"./stage-tracker.js\";\nexport type {\n\tCreateStageTrackerOptions,\n\tStageTracker,\n} from \"./stage-tracker.js\";\nexport {\n\tASSESSMENT_INSTRUMENTATION_EVENT_MAP,\n\tSECTION_INSTRUMENTATION_EVENT_MAP,\n\tTOOLKIT_INSTRUMENTATION_EVENT_MAP,\n} from \"./instrumentation-event-map.js\";\nexport type { InstrumentationEventMapping } from \"./instrumentation-event-map.js\";\n// Item controller\nexport type { ItemControllerOptions } from \"./item-controller.js\";\nexport {\n\tItemController,\n\tnormalizeItemSessionContainer,\n} from \"./item-controller.js\";\nexport type {\n\tItemSessionContainer as CanonicalItemSessionContainer,\n\tItemSessionUpdateIntent,\n\tNormalizedItemSessionChange,\n} from \"./item-session-contract.js\";\nexport {\n\thasResponseValue,\n\tnormalizeItemSessionChange,\n} from \"./item-session-contract.js\";\nexport type {\n\tItemSessionContainer,\n\tItemSessionStorageStrategy,\n} from \"./item-controller-storage.js\";\nexport {\n\tMemoryItemSessionStorage,\n\tSessionStorageItemSessionStorage,\n} from \"./item-controller-storage.js\";\n// Logging\nexport type { PieLogger } from \"./logger.js\";\nexport { createPieLogger, isGlobalDebugEnabled } from \"./logger.js\";\n// Player bootstrap helpers (used by inline/preloaded players)\nexport type {\n\tItemData,\n\tPiePlayerConfig,\n\tPiePlayerElements,\n} from \"./player-initializer.js\";\nexport {\n\tbuildApiParams,\n\tbuildEventListenersMap,\n\tensurePiePlayerLoaded,\n\textractPassageMarkup,\n\tfetchItemData,\n\tinitializePiePlayer,\n} from \"./player-initializer.js\";\n// Registry\nexport { pieRegistry } from \"./registry.js\";\n// Scoring\nexport { findPieController, scorePieItem } from \"./scoring.js\";\n// Types and interfaces\nexport type {\n\tEntry,\n\tEventListeners,\n\tEventListenersMap,\n\tLoadPieElementsOptions,\n\tPieElement,\n\tPieRegistry,\n\tUpdatePieElementOptions,\n} from \"./types.js\";\nexport {\n\tBundleType,\n\tdefaultPieElementOptions,\n\tisCustomElementConstructor,\n\t// Type guards (functions)\n\tisPieAvailable,\n\tisPieRegistryAvailable,\n\tStatus,\n} from \"./types.js\";\n// Tag naming helpers\nexport {\n\tdefineCustomElementSafely,\n\ttype SafeDefineResult,\n\ttype SafeDefineStatus,\n} from \"./custom-element-define.js\";\nexport {\n\ttoPrintHashedTag,\n\ttoViewTag,\n\tvalidateCustomElementTag,\n\tVIEW_TAG_SUFFIX,\n} from \"./tag-names.js\";\nexport type { PieViewMode } from \"./tag-names.js\";\n// Updates\nexport {\n\tupdatePieElement,\n\tupdatePieElements,\n\tupdatePieElementWithRef,\n} from \"./updates.js\";\n// URL / element override helpers\nexport type { ElementOverrides } from \"./overrides.js\";\nexport {\n\taddOrUpdateOverrideInUrl,\n\tapplyElementOverrides,\n\tapplyElementVersionOverridesPreserveTags,\n\textractPackageInfo,\n\tformatElementOverrideParam,\n\tparseElementOverridesFromCurrentUrl,\n\tparseElementOverridesFromUrl,\n} from \"./overrides.js\";\n// Utils\nexport {\n\tfindOrAddSession,\n\tgetPackageWithoutVersion,\n\tgetPieElementBundlesUrl,\n\tparsePackageName,\n} from \"./utils.js\";\n"]}