eclipsa 0.1.4 → 0.1.6

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 (45) hide show
  1. package/{action-CgM3EJUS.mjs → action-DqgkV3zb.mjs} +1584 -996
  2. package/action-DqgkV3zb.mjs.map +1 -0
  3. package/{client-COjBNTyt.mjs → client-DKPmN-wJ.mjs} +126 -40
  4. package/client-DKPmN-wJ.mjs.map +1 -0
  5. package/{component-D_nEtZ69.d.mts → component-yvTtnI00.d.mts} +2 -2
  6. package/core/client/mod.d.mts +2 -2
  7. package/core/client/mod.mjs +3 -3
  8. package/core/dev-client/mod.d.mts +1 -1
  9. package/core/dev-client/mod.mjs +10 -5
  10. package/core/dev-client/mod.mjs.map +1 -1
  11. package/core/internal.d.mts +2 -2
  12. package/core/internal.mjs +2 -2
  13. package/core/prod-client/mod.d.mts +3 -3
  14. package/core/prod-client/mod.mjs +4 -4
  15. package/{internal-Csbm0Qnv.d.mts → internal-CHYAJznU.d.mts} +116 -72
  16. package/jsx/jsx-dev-runtime.d.mts +8 -2
  17. package/jsx/jsx-dev-runtime.mjs +2 -2
  18. package/jsx/jsx-runtime.d.mts +1 -1
  19. package/jsx/mod.d.mts +1 -1
  20. package/jsx/mod.mjs +1 -1
  21. package/{jsx-dev-runtime-CY60yQJY.mjs → jsx-dev-runtime-DpbWQ4Q0.mjs} +8 -3
  22. package/jsx-dev-runtime-DpbWQ4Q0.mjs.map +1 -0
  23. package/{mod-DLb8ple9.d.mts → mod-aLmFvMYF.d.mts} +4 -4
  24. package/mod.d.mts +20 -38
  25. package/mod.mjs +19 -145
  26. package/mod.mjs.map +1 -1
  27. package/package.json +6 -2
  28. package/{signal-B7AfIKrr.d.mts → signal-CosyYdtA.d.mts} +1 -1
  29. package/{signal-CJtquEfo.mjs → signal-DBzloBrN.mjs} +2 -2
  30. package/{signal-CJtquEfo.mjs.map → signal-DBzloBrN.mjs.map} +1 -1
  31. package/ssr-CRg57Wn2.mjs +157 -0
  32. package/ssr-CRg57Wn2.mjs.map +1 -0
  33. package/ssr-D8F-DtCv.d.mts +37 -0
  34. package/{types-BCEY9lGp.d.mts → types-Cu9gFlEY.d.mts} +6 -2
  35. package/{types-DKpefD_u.d.mts → types-DDeNM8UH.d.mts} +1 -1
  36. package/vite/build/runtime.d.mts +4 -0
  37. package/vite/build/runtime.mjs +4 -0
  38. package/vite/mod.mjs +272 -50
  39. package/vite/mod.mjs.map +1 -1
  40. package/web-utils/mod.d.mts +1 -1
  41. package/web-utils/mod.mjs +2 -2
  42. package/action-CgM3EJUS.mjs.map +0 -1
  43. package/client-COjBNTyt.mjs.map +0 -1
  44. package/jsx-dev-runtime-CY60yQJY.mjs.map +0 -1
  45. /package/{jsx-runtime-BFDPoxFn.d.mts → jsx-runtime-QIK6ADiK.d.mts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-DqgkV3zb.mjs","names":["composeMiddlewares","createHandleSignal","ACTION_FORM_ATTR","restorePendingFocus","readAsyncSignalSnapshot","writeAsyncSignalSnapshot","readGlobalAsyncSignalSnapshot","ACTION_FORM_ATTR"],"sources":["../core/no-serialize.ts","../core/shared.ts","../core/serialize.ts","../core/hooks.ts","../core/suspense.ts","../core/context.ts","../core/metadata.ts","../core/router-shared.ts","../core/loader.ts","../core/internal.ts","../core/runtime/constants.ts","../core/runtime/dom.ts","../core/runtime/globals.ts","../core/runtime/routes.ts","../core/runtime/ssr.ts","../core/runtime/markers.ts","../core/runtime/serialization.ts","../core/runtime.ts","../core/action.ts"],"sourcesContent":["const noSerializeValues = new WeakSet<object>()\n\nconst canNoSerialize = (value: unknown): value is object | Function =>\n (typeof value === 'object' && value !== null) || typeof value === 'function'\n\nexport type NoSerialize<T> = T & {\n readonly __eclipsa_no_serialize__?: true\n}\n\nexport const noSerialize = <T extends object | Function | undefined>(value: T): T => {\n if (canNoSerialize(value)) {\n noSerializeValues.add(value as object)\n }\n return value\n}\n\nexport const isNoSerialize = (value: unknown): boolean =>\n canNoSerialize(value) && noSerializeValues.has(value as object)\n","export const IS_BROWSER = typeof window !== 'undefined' && typeof document !== 'undefined'\n\nexport const IS_SSR = !IS_BROWSER\n\nexport const isPlainObject = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== 'object') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n","import { isNoSerialize } from './no-serialize.ts'\nimport { isPlainObject } from './shared.ts'\n\nexport interface SerializedUndefined {\n __eclipsa_type: 'undefined'\n}\n\nexport interface SerializedObject {\n __eclipsa_type: 'object'\n entries: [string, SerializedValue][]\n}\n\nexport interface SerializedMap {\n __eclipsa_type: 'map'\n entries: [SerializedValue, SerializedValue][]\n}\n\nexport interface SerializedSet {\n __eclipsa_type: 'set'\n entries: SerializedValue[]\n}\n\nexport interface SerializedReference {\n __eclipsa_type: 'ref'\n data?: SerializedValue\n kind: string\n token: string\n}\n\nexport type SerializedValue =\n | SerializedUndefined\n | SerializedObject\n | SerializedMap\n | SerializedSet\n | SerializedReference\n | null\n | boolean\n | number\n | string\n | SerializedValue[]\n\nexport interface SerializeValueOptions {\n maxDepth?: number\n maxEntries?: number\n serializeReference?: (value: unknown) => SerializedReference | null\n}\n\nexport interface DeserializeValueOptions {\n deserializeReference?: (value: SerializedReference) => unknown\n maxDepth?: number\n maxEntries?: number\n}\n\nconst DEFAULT_MAX_DEPTH = 64\nconst DEFAULT_MAX_ENTRIES = 10_000\n\nconst RESERVED_KEYS = new Set(['__proto__', 'constructor', 'prototype'])\n\nconst getSerializedObjectTag = (value: object) => Object.prototype.toString.call(value)\n\nconst getSerializedConstructorName = (value: object) => {\n const constructor = value.constructor\n if (typeof constructor !== 'function') {\n return null\n }\n const name = constructor.name\n return typeof name === 'string' && name.length > 0 ? name : null\n}\n\nconst createUnsupportedObjectError = (value: object) => {\n const tag = getSerializedObjectTag(value)\n const constructorName = getSerializedConstructorName(value)\n const constructorLabel =\n constructorName && constructorName !== 'Object' && constructorName !== 'Array'\n ? ` (constructor: ${constructorName})`\n : ''\n\n return new TypeError(\n `Unsupported object ${tag}${constructorLabel}. ` +\n 'Only primitives, plain objects, arrays, Map, Set, undefined, and registered references can be serialized. ' +\n 'For runtime-only values, wrap them with noSerialize() or avoid capturing them in resumable props, state, or callbacks.',\n )\n}\n\nconst assertSafeEntryBudget = (count: number, maxEntries: number) => {\n if (count > maxEntries) {\n throw new RangeError(`Serialized value exceeds the maximum entry budget of ${maxEntries}.`)\n }\n}\n\nconst assertSafeDepth = (depth: number, maxDepth: number) => {\n if (depth > maxDepth) {\n throw new RangeError(`Serialized value exceeds the maximum depth of ${maxDepth}.`)\n }\n}\n\nconst assertSafeObject = (value: Record<string, unknown>) => {\n const descriptors = Object.getOwnPropertyDescriptors(value)\n const symbolKeys = Object.getOwnPropertySymbols(value)\n if (symbolKeys.length > 0) {\n throw new TypeError('Objects with symbol keys cannot be serialized.')\n }\n for (const [key, descriptor] of Object.entries(descriptors)) {\n if ('get' in descriptor || 'set' in descriptor) {\n throw new TypeError(`Objects with accessors cannot be serialized (${key}).`)\n }\n }\n}\n\nconst defineDecodedProperty = (target: Record<string, unknown>, key: string, value: unknown) => {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true,\n })\n}\n\nconst assertReferenceShape = (value: SerializedReference) => {\n const keys = Object.keys(value).sort()\n const allowedKeys =\n value.data === undefined\n ? ['__eclipsa_type', 'kind', 'token']\n : ['__eclipsa_type', 'data', 'kind', 'token']\n if (keys.length !== allowedKeys.length || keys.some((key, index) => key !== allowedKeys[index])) {\n throw new TypeError('Malformed serialized reference.')\n }\n if (typeof value.kind !== 'string' || value.kind.length === 0) {\n throw new TypeError('Serialized references require a non-empty kind.')\n }\n if (typeof value.token !== 'string' || value.token.length === 0) {\n throw new TypeError('Serialized references require a non-empty token.')\n }\n}\n\nconst serializeUnknown = (\n value: unknown,\n state: {\n entryCount: number\n maxDepth: number\n maxEntries: number\n serializeReference?: (value: unknown) => SerializedReference | null\n },\n stack: Set<object>,\n depth: number,\n): SerializedValue => {\n assertSafeDepth(depth, state.maxDepth)\n\n if (isNoSerialize(value)) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'undefined',\n }\n }\n\n const reference = state.serializeReference?.(value) ?? null\n if (reference) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return reference\n }\n\n if (value === undefined) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'undefined',\n }\n }\n if (value === null || typeof value === 'string' || typeof value === 'boolean') {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value\n }\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw new TypeError('Non-finite numbers cannot be serialized.')\n }\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value\n }\n if (typeof value === 'function') {\n throw new TypeError('Functions cannot be serialized.')\n }\n if (typeof value === 'symbol') {\n throw new TypeError('Symbols cannot be serialized.')\n }\n if (typeof value !== 'object') {\n throw new TypeError(`Unsupported primitive ${typeof value}.`)\n }\n if (value instanceof Promise) {\n throw new TypeError('Promises cannot be serialized.')\n }\n if (value instanceof WeakMap || value instanceof WeakSet) {\n throw new TypeError('Weak collections cannot be serialized.')\n }\n if (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof URL ||\n value instanceof Error ||\n value instanceof ArrayBuffer ||\n ArrayBuffer.isView(value)\n ) {\n throw createUnsupportedObjectError(value)\n }\n if (stack.has(value)) {\n throw new TypeError('Circular values cannot be serialized.')\n }\n\n stack.add(value)\n try {\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n if (!(index in value)) {\n throw new TypeError('Sparse arrays cannot be serialized.')\n }\n }\n state.entryCount += value.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value.map((entry) => serializeUnknown(entry, state, stack, depth + 1))\n }\n if (value instanceof Map) {\n state.entryCount += value.size * 2 + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n const entries: [SerializedValue, SerializedValue][] = []\n for (const [key, entry] of value.entries()) {\n entries.push([\n serializeUnknown(key, state, stack, depth + 1),\n serializeUnknown(entry, state, stack, depth + 1),\n ])\n }\n return {\n __eclipsa_type: 'map',\n entries,\n }\n }\n if (value instanceof Set) {\n state.entryCount += value.size + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'set',\n entries: [...value].map((entry) => serializeUnknown(entry, state, stack, depth + 1)),\n }\n }\n if (isPlainObject(value)) {\n assertSafeObject(value)\n const descriptors = Object.entries(value)\n state.entryCount += descriptors.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return {\n __eclipsa_type: 'object',\n entries: descriptors.map(([key, entry]) => [\n key,\n serializeUnknown(entry, state, stack, depth + 1),\n ]),\n }\n }\n\n throw createUnsupportedObjectError(value)\n } finally {\n stack.delete(value)\n }\n}\n\nconst deserializeUnknown = (\n value: SerializedValue,\n state: {\n deserializeReference?: (value: SerializedReference) => unknown\n entryCount: number\n maxDepth: number\n maxEntries: number\n },\n depth: number,\n): unknown => {\n assertSafeDepth(depth, state.maxDepth)\n\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number'\n ) {\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value\n }\n if (Array.isArray(value)) {\n state.entryCount += value.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return value.map((entry) => deserializeUnknown(entry, state, depth + 1))\n }\n if (!value || typeof value !== 'object' || typeof value.__eclipsa_type !== 'string') {\n throw new TypeError('Malformed serialized value.')\n }\n\n switch (value.__eclipsa_type) {\n case 'undefined':\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return undefined\n case 'object': {\n const keys = Object.keys(value).sort()\n if (keys.length !== 2 || keys[0] !== '__eclipsa_type' || keys[1] !== 'entries') {\n throw new TypeError('Malformed serialized object.')\n }\n if (!Array.isArray(value.entries)) {\n throw new TypeError('Serialized object entries must be an array.')\n }\n state.entryCount += value.entries.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n const result: Record<string, unknown> = Object.create(null)\n for (const entry of value.entries) {\n if (!Array.isArray(entry) || entry.length !== 2 || typeof entry[0] !== 'string') {\n throw new TypeError('Malformed serialized object entry.')\n }\n const [key, child] = entry\n if (RESERVED_KEYS.has(key)) {\n defineDecodedProperty(result, key, deserializeUnknown(child, state, depth + 1))\n continue\n }\n defineDecodedProperty(result, key, deserializeUnknown(child, state, depth + 1))\n }\n return result\n }\n case 'map': {\n const keys = Object.keys(value).sort()\n if (keys.length !== 2 || keys[0] !== '__eclipsa_type' || keys[1] !== 'entries') {\n throw new TypeError('Malformed serialized map.')\n }\n if (!Array.isArray(value.entries)) {\n throw new TypeError('Serialized map entries must be an array.')\n }\n state.entryCount += value.entries.length * 2 + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n const result = new Map<unknown, unknown>()\n for (const entry of value.entries) {\n if (!Array.isArray(entry) || entry.length !== 2) {\n throw new TypeError('Malformed serialized map entry.')\n }\n result.set(\n deserializeUnknown(entry[0], state, depth + 1),\n deserializeUnknown(entry[1], state, depth + 1),\n )\n }\n return result\n }\n case 'set': {\n const keys = Object.keys(value).sort()\n if (keys.length !== 2 || keys[0] !== '__eclipsa_type' || keys[1] !== 'entries') {\n throw new TypeError('Malformed serialized set.')\n }\n if (!Array.isArray(value.entries)) {\n throw new TypeError('Serialized set entries must be an array.')\n }\n state.entryCount += value.entries.length + 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n return new Set(value.entries.map((entry) => deserializeUnknown(entry, state, depth + 1)))\n }\n case 'ref':\n assertReferenceShape(value)\n state.entryCount += 1\n assertSafeEntryBudget(state.entryCount, state.maxEntries)\n if (!state.deserializeReference) {\n throw new TypeError(`Cannot deserialize reference kind \"${value.kind}\" in this context.`)\n }\n return state.deserializeReference(value)\n default:\n throw new TypeError(\n `Unknown serialized value type \"${(value as { __eclipsa_type: string }).__eclipsa_type}\".`,\n )\n }\n}\n\nexport const serializeValue = (value: unknown, options?: SerializeValueOptions): SerializedValue =>\n serializeUnknown(\n value,\n {\n entryCount: 0,\n maxDepth: options?.maxDepth ?? DEFAULT_MAX_DEPTH,\n maxEntries: options?.maxEntries ?? DEFAULT_MAX_ENTRIES,\n serializeReference: options?.serializeReference,\n },\n new Set<object>(),\n 0,\n )\n\nexport const deserializeValue = (\n value: SerializedValue,\n options?: DeserializeValueOptions,\n): unknown =>\n deserializeUnknown(\n value,\n {\n deserializeReference: options?.deserializeReference,\n entryCount: 0,\n maxDepth: options?.maxDepth ?? DEFAULT_MAX_DEPTH,\n maxEntries: options?.maxEntries ?? DEFAULT_MAX_ENTRIES,\n },\n 0,\n )\n\nexport const escapeJSONScriptText = (json: string) =>\n json\n .replaceAll('<', '\\\\u003C')\n .replaceAll('>', '\\\\u003E')\n .replaceAll('&', '\\\\u0026')\n .replaceAll('\\u2028', '\\\\u2028')\n .replaceAll('\\u2029', '\\\\u2029')\n\nexport const escapeInlineScriptText = (script: string) =>\n script\n .replaceAll('<', '\\\\u003C')\n .replaceAll('&', '\\\\u0026')\n .replaceAll('\\u2028', '\\\\u2028')\n .replaceAll('\\u2029', '\\\\u2029')\n\nexport const serializeJSONScriptContent = (value: unknown, options?: SerializeValueOptions) =>\n escapeJSONScriptText(JSON.stringify(serializeValue(value, options)))\n\nexport const parseSerializedJSON = (json: string): SerializedValue => {\n const parsed = JSON.parse(json) as unknown\n return parsed as SerializedValue\n}\n","import type { Context } from 'hono'\nimport type { Env } from 'hono/types'\nimport type { AsyncLocalStorage } from 'node:async_hooks'\nimport {\n deserializeValue,\n serializeValue,\n type DeserializeValueOptions,\n type SerializedReference,\n type SerializedValue,\n type SerializeValueOptions,\n} from './serialize.ts'\nimport { IS_BROWSER, isPlainObject } from './shared.ts'\n\nexport type { DeserializeValueOptions, SerializeValueOptions, SerializedReference, SerializedValue }\n\nexport const APP_HOOKS_ELEMENT_ID = 'eclipsa-app-hooks'\n\nexport interface AppVariables {}\n\nexport interface PublicErrorShape {\n message: string\n [key: string]: unknown\n}\n\nexport interface PublicError extends PublicErrorShape {}\n\nexport interface AppHooksManifest {\n client: string | null\n}\n\nexport type RequestFetch = typeof fetch\n\nexport type BaseAppVariables = AppVariables & {\n fetch: RequestFetch\n}\n\nexport interface AppEnv extends Env {\n Variables: BaseAppVariables\n}\n\ntype EnvVariables<E extends Env> = E extends {\n Variables: infer Variables\n}\n ? Variables\n : {}\n\nexport type WithAppEnv<E extends Env = Env> = Omit<E, 'Variables'> & {\n Variables: EnvVariables<E> & BaseAppVariables\n}\n\nexport type AppContext<E extends Env = Env> = Context<WithAppEnv<E>>\n\nexport interface HandleResolveOptions {\n pathname?: string\n}\n\nexport type HandleResolve<E extends Env = Env> = (\n context?: AppContext<E>,\n options?: HandleResolveOptions,\n) => Promise<Response>\n\nexport type Handle<E extends Env = Env> = (\n context: AppContext<E>,\n resolve: HandleResolve<E>,\n) => Response | Promise<Response>\n\nexport type HandleFetch<E extends Env = Env> = (\n context: AppContext<E>,\n request: Request,\n fetch: RequestFetch,\n) => Response | Promise<Response>\n\nexport interface HandleErrorInput<E extends Env = Env> {\n context: AppContext<E>\n error: unknown\n event: 'action' | 'handle' | 'loader' | 'middleware' | 'page' | 'server' | 'transport'\n}\n\nexport type HandleError<E extends Env = Env> = (\n input: HandleErrorInput<E>,\n) => PublicError | void | Promise<PublicError | void>\n\nexport type Reroute = (input: { request: Request | null; url: URL }) => string | URL | void\n\nexport interface TransportHook {\n decode: (value: unknown) => unknown\n encode: (value: unknown) => unknown\n}\n\nexport type Transport = Record<string, TransportHook>\n\nexport type ServerInit = () => void | Promise<void>\n\nexport interface ServerHooksModule<E extends Env = Env> {\n handle?: Handle<E>\n handleError?: HandleError<E>\n handleFetch?: HandleFetch<E>\n init?: ServerInit\n}\n\nexport interface AppHooksModule {\n reroute?: Reroute\n transport?: Transport\n}\n\nexport interface ResolvedHooks<E extends Env = Env> {\n app: AppHooksModule\n server: ServerHooksModule<E>\n}\n\nconst PUBLIC_ERROR_KEY = Symbol.for('eclipsa.public-error')\n\ntype RequestContextStore = {\n context: AppContext<any>\n handleError?: HandleError<any>\n transport?: Transport\n}\n\nlet requestContextStorage: AsyncLocalStorage<RequestContextStore> | null = null\n\nlet clientHooks: AppHooksModule = {}\n\ntype AsyncLocalStorageConstructor = new <T>() => AsyncLocalStorage<T>\n\nconst getAsyncLocalStorageConstructor = (): AsyncLocalStorageConstructor | null => {\n if (IS_BROWSER || typeof process === 'undefined') {\n return null\n }\n const asyncHooks = (\n process as typeof process & {\n getBuiltinModule?: (id: string) => unknown\n }\n ).getBuiltinModule?.('node:async_hooks') as\n | {\n AsyncLocalStorage?: AsyncLocalStorageConstructor\n }\n | undefined\n return typeof asyncHooks?.AsyncLocalStorage === 'function' ? asyncHooks.AsyncLocalStorage : null\n}\n\nconst getRequestContextStorage = () => {\n const AsyncLocalStorageCtor = getAsyncLocalStorageConstructor()\n if (!AsyncLocalStorageCtor) {\n return null\n }\n requestContextStorage ??= new AsyncLocalStorageCtor<RequestContextStore>()\n return requestContextStorage\n}\n\nconst normalizePublicError = (value: unknown): PublicError => {\n if (value && typeof value === 'object') {\n const message = (value as { message?: unknown }).message\n if (typeof message === 'string' && message.length > 0) {\n return value as PublicError\n }\n }\n if (value instanceof Error) {\n return {\n message: value.message || 'Internal Server Error',\n name: value.name,\n }\n }\n return {\n message: 'Internal Server Error',\n }\n}\n\nconst getActiveTransport = () =>\n getRequestContextStorage()?.getStore()?.transport ?? clientHooks.transport\n\nconst serializeTransportReference = (\n value: unknown,\n transport: Transport,\n): SerializedReference | null => {\n for (const [key, hook] of Object.entries(transport)) {\n const encoded = hook.encode(value)\n if (encoded === undefined) {\n continue\n }\n return {\n __eclipsa_type: 'ref',\n data: serializeValue(encoded),\n kind: 'transport',\n token: key,\n }\n }\n return null\n}\n\nconst deserializeTransportReference = (reference: SerializedReference, transport: Transport) => {\n const hook = transport[reference.token]\n if (!hook) {\n throw new TypeError(`Unknown transport \"${reference.token}\".`)\n }\n return hook.decode(reference.data === undefined ? undefined : deserializeValue(reference.data))\n}\n\nexport const serializePublicValue = (\n value: unknown,\n options?: SerializeValueOptions,\n): SerializedValue =>\n serializeValue(value, {\n ...options,\n serializeReference(candidate) {\n const resolved = options?.serializeReference?.(candidate) ?? null\n if (resolved) {\n return resolved\n }\n const transport = getActiveTransport()\n return transport ? serializeTransportReference(candidate, transport) : null\n },\n })\n\nexport const deserializePublicValue = (\n value: SerializedValue,\n options?: DeserializeValueOptions,\n): unknown =>\n deserializeValue(value, {\n ...options,\n deserializeReference(reference) {\n const resolved = options?.deserializeReference?.(reference)\n if (resolved !== undefined) {\n return resolved\n }\n const transport = getActiveTransport()\n if (reference.kind === 'transport' && transport) {\n return deserializeTransportReference(reference, transport)\n }\n if (reference.kind === 'transport') {\n throw new TypeError(`Unknown transport \"${reference.token}\".`)\n }\n if (!options?.deserializeReference) {\n throw new TypeError(\n `Cannot deserialize reference kind \"${reference.kind}\" in this context.`,\n )\n }\n return options.deserializeReference(reference)\n },\n })\n\nexport const withServerRequestContext = <T>(\n context: AppContext<any>,\n hooks: {\n handleError?: HandleError<any>\n transport?: Transport\n },\n fn: () => T,\n) => {\n const storage = getRequestContextStorage()\n if (!storage) {\n return fn()\n }\n return storage.run(\n {\n context,\n handleError: hooks.handleError,\n transport: hooks.transport,\n },\n fn,\n )\n}\n\nexport const getCurrentServerRequestContext = () =>\n getRequestContextStorage()?.getStore()?.context ?? null\n\nexport const transformCurrentPublicError = async (\n error: unknown,\n event: HandleErrorInput<any>['event'],\n) => {\n const store = getRequestContextStorage()?.getStore()\n const publicError = store\n ? await runHandleError(\n {\n handleError: store.handleError,\n },\n {\n context: store.context,\n error,\n event,\n },\n )\n : toPublicError(error)\n return markPublicError(error, publicError)\n}\n\nexport const createRequestFetch = (\n context: AppContext<any>,\n handleFetch?: HandleFetch<any>,\n): RequestFetch => {\n const baseFetch: RequestFetch = ((input: Request | URL | string, init?: RequestInit) => {\n const request = input instanceof Request ? input : new Request(input, init)\n return fetch(request)\n }) as RequestFetch\n\n if (!handleFetch) {\n return baseFetch\n }\n\n return (async (input: Request | URL | string, init?: RequestInit) => {\n const request = input instanceof Request ? input : new Request(input, init)\n return handleFetch(context, request, baseFetch)\n }) as RequestFetch\n}\n\nexport const attachRequestFetch = <E extends Env>(\n context: AppContext<E>,\n fetchImpl: RequestFetch,\n) => {\n context.set('fetch' as never, fetchImpl as never)\n}\n\nexport const resolveReroute = (\n reroute: Reroute | undefined,\n request: Request | null,\n pathname: string,\n baseUrl: string,\n) => {\n if (!reroute) {\n return pathname\n }\n const url = new URL(pathname, baseUrl)\n const resolved = reroute({ request, url })\n if (!resolved) {\n return pathname\n }\n const nextUrl = resolved instanceof URL ? resolved : new URL(String(resolved), url)\n return nextUrl.pathname\n}\n\nexport const toPublicError = (error: unknown): PublicError =>\n error &&\n typeof error === 'object' &&\n (error as Record<PropertyKey, unknown>)[PUBLIC_ERROR_KEY] &&\n isPlainObject((error as Record<PropertyKey, unknown>)[PUBLIC_ERROR_KEY])\n ? ((error as Record<PropertyKey, unknown>)[PUBLIC_ERROR_KEY] as PublicError)\n : normalizePublicError(error)\n\nexport const markPublicError = <T>(error: T, publicError: PublicError): T => {\n if (!error || (typeof error !== 'object' && typeof error !== 'function')) {\n return error\n }\n Object.defineProperty(error as Record<PropertyKey, unknown>, PUBLIC_ERROR_KEY, {\n configurable: true,\n enumerable: false,\n value: publicError,\n writable: true,\n })\n return error\n}\n\nexport const runHandleError = async (\n hooks: {\n handleError?: HandleError<any>\n },\n input: HandleErrorInput<any>,\n) => {\n const transformed = await hooks.handleError?.(input)\n return transformed ? normalizePublicError(transformed) : toPublicError(input.error)\n}\n\nexport const registerClientHooks = (hooks: AppHooksModule) => {\n clientHooks = hooks\n}\n\nexport const getClientHooks = () => clientHooks\n\nexport const resetClientHooks = () => {\n clientHooks = {}\n}\n","import type { JSX } from '../jsx/types.ts'\n\nconst PENDING_SIGNAL_ERROR_KEY = Symbol.for('eclipsa.pending-signal-error')\nconst SUSPENSE_TYPE_KEY = Symbol.for('eclipsa.suspense-type')\n\nexport interface SuspenseProps {\n children?: JSX.Element | JSX.Element[] | (() => JSX.Element | JSX.Element[])\n fallback?: JSX.Element | JSX.Element[]\n}\n\nexport interface PendingSignalError {\n [PENDING_SIGNAL_ERROR_KEY]: true\n promise: Promise<unknown>\n}\n\nexport const Suspense = ((props: SuspenseProps): JSX.Element =>\n (props.children ?? null) as JSX.Element) as ((props: SuspenseProps) => JSX.Element) & {\n [SUSPENSE_TYPE_KEY]?: true\n}\n\nObject.defineProperty(Suspense, SUSPENSE_TYPE_KEY, {\n configurable: true,\n enumerable: false,\n value: true,\n writable: false,\n})\n\nexport const createPendingSignalError = (promise: Promise<unknown>): PendingSignalError => ({\n [PENDING_SIGNAL_ERROR_KEY]: true,\n promise,\n})\n\nexport const isPendingSignalError = (value: unknown): value is PendingSignalError =>\n !!value &&\n typeof value === 'object' &&\n (value as PendingSignalError)[PENDING_SIGNAL_ERROR_KEY] === true\n\nexport const isSuspenseType = (value: unknown): value is typeof Suspense =>\n !!value && typeof value === 'function' && (value as typeof Suspense)[SUSPENSE_TYPE_KEY] === true\n","import type { JSX } from '../jsx/types.ts'\nimport type { Component } from './component.ts'\nimport {\n getRuntimeContextValue,\n hasActiveRuntimeComponent,\n type RuntimeContextToken,\n} from './runtime.ts'\n\nconst CONTEXT_PROVIDER_META_KEY = Symbol.for('eclipsa.context-provider-meta')\nconst CONTEXT_TOKEN_KEY = Symbol.for('eclipsa.context-token')\nconst CONTEXT_REGISTRY_KEY = Symbol.for('eclipsa.context-registry')\nconst CONTEXT_NEXT_ID_KEY = Symbol.for('eclipsa.context-next-id')\n\ninterface ContextProviderMeta<T = unknown> {\n id: string\n token: RuntimeContextToken<T>\n}\n\ninterface RuntimeContextState<T> {\n defaultValue: T | undefined\n hasDefault: boolean\n id: string\n token: RuntimeContextToken<T>\n}\n\ninterface RuntimeContext<T> extends Context<T> {\n [CONTEXT_TOKEN_KEY]: RuntimeContextState<T>\n}\n\ninterface ContextProviderComponent<T> extends Component<ContextProviderProps<T>> {\n [CONTEXT_PROVIDER_META_KEY]?: ContextProviderMeta<T>\n}\n\nexport interface ContextProviderProps<T> {\n children?: JSX.Element | JSX.Element[]\n value: T\n}\n\nexport interface Context<T> {\n Provider: Component<ContextProviderProps<T>>\n}\n\ninterface SerializedContextDescriptor<T = unknown> {\n defaultValue: T | undefined\n hasDefault: boolean\n id: string\n}\n\nconst getContextRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n let registry = globalRecord[CONTEXT_REGISTRY_KEY] as Map<string, Context<unknown>> | undefined\n if (!registry) {\n registry = new Map()\n globalRecord[CONTEXT_REGISTRY_KEY] = registry\n }\n return registry\n}\n\nconst allocateContextId = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const nextId = ((globalRecord[CONTEXT_NEXT_ID_KEY] as number | undefined) ?? 0) + 1\n globalRecord[CONTEXT_NEXT_ID_KEY] = nextId\n return `ctx${nextId}`\n}\n\nconst getContextStateMaybe = <T>(context: unknown): RuntimeContextState<T> | null =>\n context &&\n (typeof context === 'object' || typeof context === 'function') &&\n CONTEXT_TOKEN_KEY in (context as Record<PropertyKey, unknown>)\n ? ((context as RuntimeContext<T>)[CONTEXT_TOKEN_KEY] ?? null)\n : null\n\nconst getContextState = <T>(context: Context<T>): RuntimeContextState<T> => {\n const state = getContextStateMaybe<T>(context)\n if (!state) {\n throw new TypeError('useContext() expects a context created by createContext().')\n }\n return state\n}\n\nexport const getContextProviderMeta = (value: unknown): ContextProviderMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[CONTEXT_PROVIDER_META_KEY] as\n | ContextProviderMeta\n | undefined) ?? null\n )\n}\n\nconst registerContext = <T>(id: string, context: Context<T>) => {\n getContextRegistry().set(id, context as Context<unknown>)\n}\n\nconst createContextWithId = <T>(\n id: string,\n hasDefault: boolean,\n defaultValue: T | undefined,\n): Context<T> => {\n const token = Symbol.for(`eclipsa.context:${id}`) as RuntimeContextToken<T>\n const Provider = ((props: ContextProviderProps<T>) =>\n props.children) as ContextProviderComponent<T>\n\n Object.defineProperty(Provider, CONTEXT_PROVIDER_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n token,\n } satisfies ContextProviderMeta<T>,\n writable: false,\n })\n\n const context = {\n Provider,\n } as RuntimeContext<T>\n\n Object.defineProperty(context, CONTEXT_TOKEN_KEY, {\n configurable: false,\n enumerable: false,\n value: {\n defaultValue,\n hasDefault,\n id,\n token,\n } satisfies RuntimeContextState<T>,\n writable: false,\n })\n\n registerContext(id, context)\n return context\n}\n\nexport const createContext = <T>(...args: [defaultValue?: T]): Context<T> =>\n createContextWithId(allocateContextId(), args.length > 0, args[0])\n\nexport const getRuntimeContextReference = (value: unknown) => {\n const state = getContextStateMaybe(value)\n if (state) {\n return {\n defaultValue: state.defaultValue,\n hasDefault: state.hasDefault,\n id: state.id,\n kind: 'context' as const,\n }\n }\n\n const providerMeta = getContextProviderMeta(value)\n if (!providerMeta) {\n return null\n }\n\n const context = getContextRegistry().get(providerMeta.id)\n const contextState = context ? getContextState(context) : null\n return {\n defaultValue: contextState?.defaultValue,\n hasDefault: contextState?.hasDefault ?? false,\n id: providerMeta.id,\n kind: 'context-provider' as const,\n }\n}\n\nconst materializeContextWithDescriptor = <T>({\n defaultValue,\n hasDefault,\n id,\n}: SerializedContextDescriptor<T>): Context<T> => {\n const existing = getContextRegistry().get(id) as Context<T> | undefined\n if (existing) {\n return existing\n }\n return createContextWithId(id, hasDefault, defaultValue)\n}\n\nexport const materializeRuntimeContext = <T>(descriptor: SerializedContextDescriptor<T>) =>\n materializeContextWithDescriptor(descriptor)\n\nexport const materializeRuntimeContextProvider = <T>(descriptor: SerializedContextDescriptor<T>) =>\n materializeContextWithDescriptor(descriptor).Provider\n\nexport const useContext = <T>(context: Context<T>): T => {\n if (!hasActiveRuntimeComponent()) {\n throw new Error('useContext() can only be used while rendering a component.')\n }\n\n const state = getContextState(context)\n const resolved = getRuntimeContextValue(state.token)\n if (!resolved.found) {\n if (state.hasDefault) {\n return state.defaultValue as T\n }\n throw new Error('useContext() could not find a matching context provider.')\n }\n\n return resolved.value as T\n}\n","import { jsxDEV } from '../jsx/jsx-dev-runtime.ts'\nimport type { JSX } from '../jsx/jsx-runtime.ts'\nimport type { RouteParams } from './router-shared.ts'\n\nexport const ROUTE_METADATA_HEAD_ATTR = 'data-e-metadata'\n\nexport interface MetadataContext {\n params: RouteParams\n url: URL\n}\n\nexport interface OpenGraphMetadata {\n description?: string\n images?: string[]\n title?: string\n type?: string\n url?: string\n}\n\nexport interface TwitterMetadata {\n card?: string\n description?: string\n images?: string[]\n title?: string\n}\n\nexport interface RouteMetadata {\n canonical?: string\n description?: string\n openGraph?: OpenGraphMetadata\n title?: string\n twitter?: TwitterMetadata\n}\n\nexport type RouteMetadataValue = RouteMetadata | null | undefined\nexport type RouteMetadataResolver = (ctx: MetadataContext) => RouteMetadataValue\nexport type RouteMetadataExport = RouteMetadataValue | RouteMetadataResolver\n\nconst mergeDefined = <T extends object>(parent: T | undefined, child: T | undefined) => {\n if (!parent) {\n return child\n }\n if (!child) {\n return parent\n }\n return Object.fromEntries(\n [...new Set([...Object.keys(parent), ...Object.keys(child)])].flatMap((key) => {\n const value = (child as Record<string, unknown>)[key]\n return value === undefined\n ? [[key, (parent as Record<string, unknown>)[key]]]\n : [[key, value]]\n }),\n ) as T\n}\n\nconst mergeRouteMetadata = (parent: RouteMetadata | null, child: RouteMetadata | null) => {\n if (!parent) {\n return child\n }\n if (!child) {\n return parent\n }\n\n return {\n canonical: child.canonical ?? parent.canonical,\n description: child.description ?? parent.description,\n openGraph: mergeDefined(parent.openGraph, child.openGraph),\n title: child.title ?? parent.title,\n twitter: mergeDefined(parent.twitter, child.twitter),\n } satisfies RouteMetadata\n}\n\nexport const resolveRouteMetadata = (\n value: RouteMetadataExport,\n ctx: MetadataContext,\n): RouteMetadata | null => {\n if (!value) {\n return null\n }\n const resolved = typeof value === 'function' ? value(ctx) : value\n return resolved ?? null\n}\n\nexport const composeRouteMetadata = (\n values: RouteMetadataExport[],\n ctx: MetadataContext,\n): RouteMetadata | null =>\n values.reduce<RouteMetadata | null>(\n (current, value) => mergeRouteMetadata(current, resolveRouteMetadata(value, ctx)),\n null,\n )\n\nexport const renderRouteMetadataHead = (metadata: RouteMetadata | null): JSX.Element[] => {\n if (!metadata) {\n return []\n }\n\n const elements: JSX.Element[] = []\n\n if (metadata.title) {\n elements.push(\n jsxDEV(\n 'title',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n children: metadata.title,\n },\n null,\n true,\n {},\n ),\n )\n }\n\n if (metadata.description) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.description,\n name: 'description',\n },\n null,\n true,\n {},\n ),\n )\n }\n\n if (metadata.canonical) {\n elements.push(\n jsxDEV(\n 'link',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n href: metadata.canonical,\n rel: 'canonical',\n },\n null,\n true,\n {},\n ),\n )\n }\n\n if (metadata.openGraph?.title) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.title,\n property: 'og:title',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.openGraph?.description) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.description,\n property: 'og:description',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.openGraph?.type) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.type,\n property: 'og:type',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.openGraph?.url) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.openGraph.url,\n property: 'og:url',\n },\n null,\n true,\n {},\n ),\n )\n }\n for (const image of metadata.openGraph?.images ?? []) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: image,\n property: 'og:image',\n },\n image,\n true,\n {},\n ),\n )\n }\n\n if (metadata.twitter?.card) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.twitter.card,\n name: 'twitter:card',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.twitter?.title) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.twitter.title,\n name: 'twitter:title',\n },\n null,\n true,\n {},\n ),\n )\n }\n if (metadata.twitter?.description) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: metadata.twitter.description,\n name: 'twitter:description',\n },\n null,\n true,\n {},\n ),\n )\n }\n for (const image of metadata.twitter?.images ?? []) {\n elements.push(\n jsxDEV(\n 'meta',\n {\n [ROUTE_METADATA_HEAD_ATTR]: '',\n content: image,\n name: 'twitter:image',\n },\n image,\n true,\n {},\n ),\n )\n }\n\n return elements\n}\n","export const ROUTE_LINK_ATTR = 'data-e-link'\nexport const ROUTE_DATA_ENDPOINT = '/__eclipsa/route-data'\nexport const ROUTE_DATA_REQUEST_HEADER = 'x-eclipsa-route-data'\nexport const ROUTE_MANIFEST_ELEMENT_ID = 'eclipsa-route-manifest'\nexport const ROUTE_PREFETCH_ATTR = 'data-e-link-prefetch'\nexport const ROUTE_PREFLIGHT_ENDPOINT = '/__eclipsa/route-preflight'\nexport const ROUTE_PREFLIGHT_REQUEST_HEADER = 'x-eclipsa-route-preflight'\nexport const ROUTE_RPC_URL_HEADER = 'x-eclipsa-route-url'\nexport const ROUTE_REPLACE_ATTR = 'data-e-link-replace'\n\nexport interface NavigateOptions {\n replace?: boolean\n}\n\nexport interface Navigate {\n (href: string, options?: NavigateOptions): Promise<void>\n readonly isNavigating: boolean\n}\n\nexport type LinkPrefetchMode = 'focus' | 'hover' | 'intent' | 'none'\n\nexport interface RouteLocation {\n readonly hash: string\n readonly href: string\n readonly pathname: string\n readonly search: string\n}\n\nexport type RouteParams = Record<string, string | string[] | undefined>\n\nexport interface StaticPath {\n params: RouteParams\n}\n\nexport type GetStaticPaths = () => StaticPath[] | Promise<StaticPath[]>\n\nexport interface RoutePathSegment {\n kind: 'static' | 'required' | 'optional' | 'rest'\n value: string\n}\n\nexport interface RouteModuleManifest {\n error: string | null\n hasMiddleware: boolean\n layouts: string[]\n loading: string | null\n notFound: string | null\n page: string | null\n routePath: string\n segments: RoutePathSegment[]\n server: string | null\n}\n\nexport type RouteManifest = RouteModuleManifest[]\n","import type { Env, MiddlewareHandler, Next } from 'hono/types'\nimport {\n type AppContext,\n deserializePublicValue,\n serializePublicValue,\n transformCurrentPublicError,\n type WithAppEnv,\n} from './hooks.ts'\nimport { type SerializedValue } from './serialize.ts'\nimport { registerLoaderHook, setLoaderHandleMeta, setLoaderHookMeta } from './internal.ts'\nimport {\n createDetachedRuntimeSignal,\n getRuntimeContainer,\n type RuntimeContainer,\n} from './runtime.ts'\nimport { ROUTE_RPC_URL_HEADER } from './router-shared.ts'\n\nconst LOADER_REGISTRY_KEY = Symbol.for('eclipsa.loader-registry')\nconst LOADER_CONTENT_TYPE = 'application/eclipsa-loader+json'\nconst SSR_PENDING_LOADER_ERROR = Symbol.for('eclipsa.ssr-pending-loader-error')\nconst SSR_PENDING_LOADER_IDS_KEY = Symbol.for('eclipsa.ssr-pending-loader-ids')\n\ntype MiddlewareEnv<T> = T extends {\n readonly __eclipsa_loader_env__?: infer MiddlewareEnv\n}\n ? Exclude<MiddlewareEnv, undefined> extends Env\n ? WithAppEnv<Exclude<MiddlewareEnv, undefined>>\n : {}\n : T extends MiddlewareHandler<infer MiddlewareEnv, any, any>\n ? WithAppEnv<MiddlewareEnv>\n : WithAppEnv<Env>\n\ntype LoaderEnv<Middlewares extends readonly LoaderMiddleware<any>[]> =\n Middlewares extends readonly [infer Head, ...infer Tail]\n ? Tail extends readonly LoaderMiddleware<any>[]\n ? MiddlewareEnv<Head> & LoaderEnv<Tail>\n : MiddlewareEnv<Head>\n : WithAppEnv<Env>\n\nexport interface LoaderHandle<Output> {\n readonly data: Output | undefined\n readonly error: unknown\n readonly isLoading: boolean\n load: () => Promise<Output>\n}\n\nexport interface LoaderMiddleware<E extends Env = Env> extends MiddlewareHandler<E> {\n readonly __eclipsa_loader_env__?: E\n}\n\nexport type LoaderHandler<E extends Env = Env, Output = unknown> = (\n c: AppContext<E>,\n) => Output | Promise<Output>\n\ntype LoaderUse<\n _Middlewares extends readonly LoaderMiddleware<any>[],\n Output,\n> = () => LoaderHandle<Output>\n\nexport interface LoaderFactory {\n <Output>(handler: LoaderHandler<{}, Output>): LoaderUse<[], Output>\n <M1 extends LoaderMiddleware<any>, Output>(\n middleware1: M1,\n handler: LoaderHandler<LoaderEnv<[M1]>, Output>,\n ): LoaderUse<[M1], Output>\n <M1 extends LoaderMiddleware<any>, M2 extends LoaderMiddleware<any>, Output>(\n middleware1: M1,\n middleware2: M2,\n handler: LoaderHandler<LoaderEnv<[M1, M2]>, Output>,\n ): LoaderUse<[M1, M2], Output>\n <\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n Output,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3]>, Output>,\n ): LoaderUse<[M1, M2, M3], Output>\n <\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n Output,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4]>, Output>,\n ): LoaderUse<[M1, M2, M3, M4], Output>\n <\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n M5 extends LoaderMiddleware<any>,\n Output,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n middleware5: M5,\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4, M5]>, Output>,\n ): LoaderUse<[M1, M2, M3, M4, M5], Output>\n}\n\ninterface RegisteredLoader {\n handler: LoaderHandler<any, unknown>\n id: string\n middlewares: LoaderMiddleware<any>[]\n}\n\ninterface LoaderJsonSuccess {\n ok: true\n value: SerializedValue\n}\n\ninterface LoaderJsonFailure {\n error: SerializedValue\n ok: false\n}\n\nconst ensurePendingSsrLoaderIds = (container: RuntimeContainer) => {\n const record = container as RuntimeContainer & {\n [SSR_PENDING_LOADER_IDS_KEY]?: Set<string>\n }\n const existing = record[SSR_PENDING_LOADER_IDS_KEY]\n if (existing instanceof Set) {\n return existing\n }\n const created = new Set<string>()\n record[SSR_PENDING_LOADER_IDS_KEY] = created\n return created\n}\n\nexport const markPendingSsrLoader = (container: RuntimeContainer, id: string) => {\n ensurePendingSsrLoaderIds(container).add(id)\n}\n\nexport const consumePendingSsrLoaderIds = (container: RuntimeContainer) => {\n const ids = [...ensurePendingSsrLoaderIds(container)]\n ensurePendingSsrLoaderIds(container).clear()\n return ids\n}\n\nexport const isPendingSsrLoaderError = (error: unknown) => error === SSR_PENDING_LOADER_ERROR\n\nconst getLoaderRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[LOADER_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, RegisteredLoader>\n }\n const created = new Map<string, RegisteredLoader>()\n globalRecord[LOADER_REGISTRY_KEY] = created\n return created\n}\n\nconst composeMiddlewares = async (\n c: AppContext<any>,\n middlewares: LoaderMiddleware<any>[],\n handler: LoaderHandler<any, unknown>,\n): Promise<Response | unknown> => {\n let index = -1\n const dispatch = async (nextIndex: number): Promise<Response | unknown> => {\n if (nextIndex <= index) {\n throw new Error('Loader middleware called next() multiple times.')\n }\n index = nextIndex\n const middleware = middlewares[nextIndex]\n if (!middleware) {\n return handler(c)\n }\n let nextResult: Response | unknown = undefined\n const result = await middleware(c, (async () => {\n nextResult = await dispatch(nextIndex + 1)\n }) as Next)\n if (result !== undefined) {\n return result\n }\n return nextResult\n }\n return dispatch(0)\n}\n\nconst toSerializedLoaderError = (error: unknown): SerializedValue => {\n if (error instanceof Error) {\n return serializePublicValue({\n message: error.message,\n name: error.name,\n })\n }\n try {\n return serializePublicValue(error)\n } catch {\n return serializePublicValue({\n message: 'Loader failed.',\n })\n }\n}\n\nconst normalizeLoaderValue = (value: unknown) => {\n if (value instanceof Response) {\n throw new TypeError('loader() handlers and middlewares must resolve to data, not Response.')\n }\n if (typeof ReadableStream !== 'undefined' && value instanceof ReadableStream) {\n throw new TypeError('loader() does not support ReadableStream results.')\n }\n if (value && typeof value === 'object' && Symbol.asyncIterator in value) {\n throw new TypeError('loader() does not support async iterable results.')\n }\n return value\n}\n\nconst updateLoaderSnapshot = (\n container: RuntimeContainer | null,\n id: string,\n snapshot: {\n data: unknown\n error: unknown\n loaded: boolean\n },\n) => {\n container?.loaderStates.set(id, snapshot)\n}\n\nconst createHandleSignal = <T>(\n container: RuntimeContainer | null,\n id: string,\n key: string,\n initialValue: T,\n) => {\n if (!container) {\n throw new Error('Loader handles require an active runtime container.')\n }\n return {\n detached: false,\n signal: createDetachedRuntimeSignal(container, `$loader:${id}:${key}`, initialValue),\n }\n}\n\nconst parseJsonLoaderResponse = async (response: Response) => {\n const body = (await response.json()) as LoaderJsonFailure | LoaderJsonSuccess\n if (!body || typeof body !== 'object' || typeof body.ok !== 'boolean') {\n throw new TypeError('Malformed loader response.')\n }\n if (!body.ok) {\n throw deserializePublicValue(body.error)\n }\n return deserializePublicValue(body.value)\n}\n\nconst invokeLoader = async (id: string) => {\n const currentRouteUrl = typeof window !== 'undefined' ? window.location.href : null\n const response = await fetch(`/__eclipsa/loader/${encodeURIComponent(id)}`, {\n headers: {\n accept: LOADER_CONTENT_TYPE,\n ...(currentRouteUrl ? { [ROUTE_RPC_URL_HEADER]: currentRouteUrl } : {}),\n },\n method: 'GET',\n })\n return parseJsonLoaderResponse(response)\n}\n\nconst resolveLoader = async (id: string, c: AppContext<any>) => {\n const loader = getLoaderRegistry().get(id)\n if (!loader) {\n throw new Error(`Unknown loader ${id}.`)\n }\n return normalizeLoaderValue(await composeMiddlewares(c, loader.middlewares, loader.handler))\n}\n\nexport const loader: LoaderFactory = (() => {\n throw new Error('loader() must be compiled by the Eclipsa analyzer before it can run.')\n}) as LoaderFactory\n\nexport function registerLoader<Output>(\n id: string,\n middlewares: readonly [],\n handler: LoaderHandler<{}, Output>,\n): void\nexport function registerLoader<M1 extends LoaderMiddleware<any>, Output>(\n id: string,\n middlewares: readonly [M1],\n handler: LoaderHandler<LoaderEnv<[M1]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2],\n handler: LoaderHandler<LoaderEnv<[M1, M2]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3],\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4],\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4]>, Output>,\n): void\nexport function registerLoader<\n M1 extends LoaderMiddleware<any>,\n M2 extends LoaderMiddleware<any>,\n M3 extends LoaderMiddleware<any>,\n M4 extends LoaderMiddleware<any>,\n M5 extends LoaderMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4, M5],\n handler: LoaderHandler<LoaderEnv<[M1, M2, M3, M4, M5]>, Output>,\n): void\nexport function registerLoader(\n id: string,\n middlewares: readonly LoaderMiddleware<any>[],\n handler: LoaderHandler<any, unknown>,\n) {\n getLoaderRegistry().set(id, {\n handler,\n id,\n middlewares: [...middlewares] as LoaderMiddleware<any>[],\n })\n}\n\nexport const hasLoader = (id: string) => getLoaderRegistry().has(id)\n\nexport const executeLoader = async (id: string, c: AppContext<any>) => {\n try {\n return new Response(\n JSON.stringify({\n ok: true,\n value: serializePublicValue(await resolveLoader(id, c)),\n } satisfies LoaderJsonSuccess),\n {\n headers: {\n 'content-type': LOADER_CONTENT_TYPE,\n },\n },\n )\n } catch (error) {\n const publicError = await transformCurrentPublicError(error, 'loader')\n return new Response(\n JSON.stringify({\n error: toSerializedLoaderError(publicError),\n ok: false,\n } satisfies LoaderJsonFailure),\n {\n headers: {\n 'content-type': LOADER_CONTENT_TYPE,\n },\n status: error instanceof Error && error.message.startsWith('Unknown loader ') ? 404 : 500,\n },\n )\n }\n}\n\nexport const primeLoaderState = async (\n container: RuntimeContainer,\n id: string,\n c: AppContext<any>,\n) => {\n const value = await resolveLoader(id, c)\n updateLoaderSnapshot(container, id, {\n data: value,\n error: undefined,\n loaded: true,\n })\n return value\n}\n\nexport const resolvePendingLoaders = async (container: RuntimeContainer, c: AppContext<any>) => {\n const pendingIds = consumePendingSsrLoaderIds(container)\n if (pendingIds.length === 0) {\n return false\n }\n await Promise.all(pendingIds.map((id) => primeLoaderState(container, id, c)))\n return true\n}\n\nexport const __eclipsaLoader = <const Middlewares extends readonly LoaderMiddleware<any>[], Output>(\n id: string,\n middlewares: readonly [...Middlewares],\n handler: LoaderHandler<LoaderEnv<Middlewares>, Output>,\n) => {\n if (typeof window === 'undefined') {\n getLoaderRegistry().set(id, {\n handler: handler as LoaderHandler<any, unknown>,\n id,\n middlewares: [...middlewares] as LoaderMiddleware<any>[],\n })\n }\n\n const useLoaderHandle = registerLoaderHook(\n id,\n setLoaderHookMeta(() => {\n const container = getRuntimeContainer()\n const existing = container?.loaders.get(id)\n if (existing) {\n return existing as LoaderHandle<Output>\n }\n\n const initialState = container?.loaderStates.get(id)\n if (typeof window === 'undefined' && !initialState?.loaded) {\n if (!container) {\n throw new Error(`loader(\"${id}\") was used during SSR before it was preloaded.`)\n }\n markPendingSsrLoader(container, id)\n throw SSR_PENDING_LOADER_ERROR\n }\n\n const loadingState = createHandleSignal(container, id, 'loading', false)\n const dataState = createHandleSignal<Output | undefined>(\n container,\n id,\n 'data',\n initialState?.loaded ? (initialState.data as Output) : undefined,\n )\n const errorState = createHandleSignal(container, id, 'error', initialState?.error)\n const isDetached = loadingState.detached || dataState.detached || errorState.detached\n const isLoading = loadingState.signal\n const data = dataState.signal\n const error = errorState.signal\n let loaded = initialState?.loaded ?? false\n let inFlight: Promise<Output> | null = null\n let autoRequested = false\n\n const syncSnapshot = () => {\n updateLoaderSnapshot(container ?? null, id, {\n data: data.value,\n error: error.value,\n loaded,\n })\n }\n\n const load = async () => {\n if (inFlight) {\n return inFlight\n }\n isLoading.value = true\n error.value = undefined\n syncSnapshot()\n inFlight = (async () => {\n try {\n const value = (await invokeLoader(id)) as Output\n data.value = value\n loaded = true\n return value\n } catch (caught) {\n error.value = caught\n throw caught\n } finally {\n isLoading.value = false\n syncSnapshot()\n inFlight = null\n }\n })()\n return inFlight\n }\n\n const loaderHandle = setLoaderHandleMeta(\n {\n get data() {\n return data.value\n },\n get error() {\n return error.value\n },\n get isLoading() {\n return isLoading.value\n },\n load,\n } satisfies LoaderHandle<Output>,\n id,\n )\n container?.loaders.set(id, loaderHandle)\n syncSnapshot()\n\n if (typeof window !== 'undefined' && !isDetached && !loaded && !autoRequested) {\n autoRequested = true\n queueMicrotask(() => {\n void load().catch(() => {})\n })\n }\n\n return loaderHandle\n }, id),\n ) as () => LoaderHandle<Output>\n\n return useLoaderHandle\n}\n","import type { Component, EURL } from './component.ts'\nimport type { Navigate } from './router-shared.ts'\n\nexport { __eclipsaAction } from './action.ts'\nexport { __eclipsaLoader } from './loader.ts'\nexport { getRuntimeComponentId } from './runtime.ts'\n\nconst COMPONENT_META_KEY = Symbol.for('eclipsa.component-meta')\nconst EXTERNAL_COMPONENT_META_KEY = Symbol.for('eclipsa.external-component-meta')\nconst LAZY_META_KEY = Symbol.for('eclipsa.lazy-meta')\nconst NAVIGATE_META_KEY = Symbol.for('eclipsa.navigate-meta')\nconst SIGNAL_META_KEY = Symbol.for('eclipsa.signal-meta')\nconst ACTION_HOOK_META_KEY = Symbol.for('eclipsa.action-hook-meta')\nconst ACTION_HANDLE_META_KEY = Symbol.for('eclipsa.action-handle-meta')\nconst LOADER_HOOK_META_KEY = Symbol.for('eclipsa.loader-hook-meta')\nconst LOADER_HANDLE_META_KEY = Symbol.for('eclipsa.loader-handle-meta')\nconst WATCH_META_KEY = Symbol.for('eclipsa.watch-meta')\nconst ACTION_HOOK_REGISTRY_KEY = Symbol.for('eclipsa.action-hook-registry')\nconst LOADER_HOOK_REGISTRY_KEY = Symbol.for('eclipsa.loader-hook-registry')\n\nexport interface ComponentMeta {\n captures: () => unknown[]\n external?: ExternalComponentDescriptor\n optimizedRoot?: boolean\n projectionSlots?: Record<string, number>\n symbol: string\n}\n\nexport interface ComponentOptions {\n external?: ExternalComponentDescriptor\n optimizedRoot?: boolean\n}\n\nexport interface ExternalComponentDescriptor {\n kind: 'react' | 'vue'\n slots: string[]\n}\n\nexport interface ExternalComponentMeta extends ExternalComponentDescriptor {\n hydrate(host: HTMLElement, props: Record<string, unknown>): unknown | Promise<unknown>\n renderToString(props: Record<string, unknown>): Promise<string> | string\n unmount(instance: unknown): void | Promise<void>\n update(\n instance: unknown,\n host: HTMLElement,\n props: Record<string, unknown>,\n ): unknown | Promise<unknown>\n}\n\nexport interface LazyMeta {\n captures: () => unknown[]\n eventName?: string\n symbol: string\n}\n\nexport interface WatchMeta {\n captures: () => unknown[]\n symbol: string\n}\n\nexport interface SignalMeta<T = unknown> {\n get(): T\n id: string\n set(value: T): void\n}\n\nexport interface NavigateMeta {\n readonly kind: 'navigate'\n}\n\nexport interface ActionHandleMeta {\n readonly id: string\n readonly kind: 'action'\n}\n\nexport interface ActionHookMeta {\n readonly id: string\n readonly kind: 'action-hook'\n}\n\nexport interface LoaderHandleMeta {\n readonly id: string\n readonly kind: 'loader'\n}\n\nexport interface LoaderHookMeta {\n readonly id: string\n readonly kind: 'loader-hook'\n}\n\nexport interface EventDescriptor {\n captures: () => unknown[]\n eventName?: string\n symbol: string\n}\n\nexport interface LazyReference<\n T extends (...args: any[]) => unknown = (...args: any[]) => unknown,\n> extends Function {\n (...args: Parameters<T>): ReturnType<T>\n [LAZY_META_KEY]?: LazyMeta\n}\n\nexport interface WatchReference<\n T extends (...args: any[]) => unknown = (...args: any[]) => unknown,\n> extends Function {\n (...args: Parameters<T>): ReturnType<T>\n [WATCH_META_KEY]?: WatchMeta\n}\n\nexport interface ExternalComponentReference<T = unknown> extends Function {\n (...args: any[]): T\n [EXTERNAL_COMPONENT_META_KEY]?: ExternalComponentMeta\n}\n\nexport const __eclipsaComponent = <T>(\n component: Component<T>,\n symbol: string,\n captures: () => unknown[],\n projectionSlots?: Record<string, number>,\n options?: ComponentOptions,\n): Component<T> => {\n Object.defineProperty(component, COMPONENT_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n symbol,\n captures,\n ...(options?.external ? { external: options.external } : {}),\n ...(options?.optimizedRoot ? { optimizedRoot: true } : {}),\n ...(projectionSlots ? { projectionSlots } : {}),\n } satisfies ComponentMeta,\n writable: true,\n })\n return component\n}\n\nexport const __eclipsaLazy = <T extends (...args: any[]) => unknown>(\n symbol: string,\n fn: T,\n captures: () => unknown[],\n): EURL<T> => {\n const wrapped = ((...args: Parameters<T>) => fn(...args)) as LazyReference<T>\n Object.defineProperty(wrapped, LAZY_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n symbol,\n captures,\n } satisfies LazyMeta,\n writable: true,\n })\n return wrapped as EURL<T>\n}\n\nexport const __eclipsaWatch = <T extends (...args: any[]) => unknown>(\n symbol: string,\n fn: T,\n captures: () => unknown[],\n): T => {\n const wrapped = ((...args: Parameters<T>) => fn(...args)) as WatchReference<T>\n Object.defineProperty(wrapped, WATCH_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n symbol,\n captures,\n } satisfies WatchMeta,\n writable: true,\n })\n return wrapped as T\n}\n\nexport const __eclipsaEvent = (\n eventName: string,\n symbol: string,\n captures: () => unknown[],\n): EventDescriptor => ({\n eventName,\n symbol,\n captures,\n})\n\nexport const getComponentMeta = (value: unknown): ComponentMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[COMPONENT_META_KEY] as\n | ComponentMeta\n | undefined) ?? null\n )\n}\n\nexport const getLazyMeta = (value: unknown): LazyMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[LAZY_META_KEY] as LazyMeta | undefined) ??\n null\n )\n}\n\nexport const setExternalComponentMeta = <T extends Component<any>>(\n target: T,\n meta: ExternalComponentMeta,\n): T => {\n Object.defineProperty(target, EXTERNAL_COMPONENT_META_KEY, {\n configurable: true,\n enumerable: false,\n value: meta,\n writable: true,\n })\n return target\n}\n\nexport const getExternalComponentMeta = (value: unknown): ExternalComponentMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[EXTERNAL_COMPONENT_META_KEY] as\n | ExternalComponentMeta\n | undefined) ?? null\n )\n}\n\nexport const setNavigateMeta = <T extends Navigate>(target: T): T => {\n Object.defineProperty(target, NAVIGATE_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n kind: 'navigate',\n } satisfies NavigateMeta,\n writable: true,\n })\n return target\n}\n\nexport const getNavigateMeta = (value: unknown): NavigateMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[NAVIGATE_META_KEY] as\n | NavigateMeta\n | undefined) ?? null\n )\n}\n\nexport const setActionHookMeta = <T extends Function>(target: T, id: string): T => {\n Object.defineProperty(target, ACTION_HOOK_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'action-hook',\n } satisfies ActionHookMeta,\n writable: true,\n })\n return target\n}\n\nexport const getActionHookMeta = (value: unknown): ActionHookMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[ACTION_HOOK_META_KEY] as\n | ActionHookMeta\n | undefined) ?? null\n )\n}\n\nexport const setActionHandleMeta = <T extends object>(target: T, id: string): T => {\n Object.defineProperty(target, ACTION_HANDLE_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'action',\n } satisfies ActionHandleMeta,\n writable: true,\n })\n return target\n}\n\nexport const getActionHandleMeta = (value: unknown): ActionHandleMeta | null => {\n if (!value || typeof value !== 'object') {\n return null\n }\n return (\n ((value as Record<PropertyKey, unknown>)[ACTION_HANDLE_META_KEY] as\n | ActionHandleMeta\n | undefined) ?? null\n )\n}\n\nexport const setLoaderHookMeta = <T extends Function>(target: T, id: string): T => {\n Object.defineProperty(target, LOADER_HOOK_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'loader-hook',\n } satisfies LoaderHookMeta,\n writable: true,\n })\n return target\n}\n\nexport const getLoaderHookMeta = (value: unknown): LoaderHookMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[LOADER_HOOK_META_KEY] as\n | LoaderHookMeta\n | undefined) ?? null\n )\n}\n\nexport const setLoaderHandleMeta = <T extends object>(target: T, id: string): T => {\n Object.defineProperty(target, LOADER_HANDLE_META_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n id,\n kind: 'loader',\n } satisfies LoaderHandleMeta,\n writable: true,\n })\n return target\n}\n\nexport const getLoaderHandleMeta = (value: unknown): LoaderHandleMeta | null => {\n if (!value || typeof value !== 'object') {\n return null\n }\n return (\n ((value as Record<PropertyKey, unknown>)[LOADER_HANDLE_META_KEY] as\n | LoaderHandleMeta\n | undefined) ?? null\n )\n}\n\nconst getActionHookRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[ACTION_HOOK_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, Function>\n }\n const created = new Map<string, Function>()\n globalRecord[ACTION_HOOK_REGISTRY_KEY] = created\n return created\n}\n\nexport const registerActionHook = <T extends Function>(id: string, hook: T): T => {\n getActionHookRegistry().set(id, hook)\n return hook\n}\n\nexport const getRegisteredActionHook = <T extends Function>(id: string): T | null =>\n (getActionHookRegistry().get(id) as T | undefined) ?? null\n\nexport const getRegisteredActionHookIds = () => [...getActionHookRegistry().keys()]\n\nconst getLoaderHookRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[LOADER_HOOK_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, Function>\n }\n const created = new Map<string, Function>()\n globalRecord[LOADER_HOOK_REGISTRY_KEY] = created\n return created\n}\n\nexport const registerLoaderHook = <T extends Function>(id: string, hook: T): T => {\n getLoaderHookRegistry().set(id, hook)\n return hook\n}\n\nexport const getRegisteredLoaderHook = <T extends Function>(id: string): T | null =>\n (getLoaderHookRegistry().get(id) as T | undefined) ?? null\n\nexport const getRegisteredLoaderHookIds = () => [...getLoaderHookRegistry().keys()]\n\nexport const getWatchMeta = (value: unknown): WatchMeta | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[WATCH_META_KEY] as WatchMeta | undefined) ??\n null\n )\n}\n\nexport const getEventMeta = (value: unknown): EventDescriptor | LazyMeta | null => {\n if (value && typeof value === 'object') {\n const descriptor = value as EventDescriptor\n if (typeof descriptor.symbol === 'string' && typeof descriptor.captures === 'function') {\n return descriptor\n }\n }\n return getLazyMeta(value)\n}\n\nexport const setSignalMeta = <T>(target: { value: T }, meta: SignalMeta<T>): { value: T } => {\n Object.defineProperty(target, SIGNAL_META_KEY, {\n configurable: true,\n enumerable: false,\n value: meta,\n writable: true,\n })\n return target\n}\n\nexport const getSignalMeta = <T>(value: unknown): SignalMeta<T> | null => {\n if (!value || typeof value !== 'object') {\n return null\n }\n return (\n ((value as Record<PropertyKey, unknown>)[SIGNAL_META_KEY] as SignalMeta<T> | undefined) ?? null\n )\n}\n","import type { ExternalComponentDescriptor } from '../internal.ts'\n\nexport const CONTAINER_STACK_KEY = Symbol.for('eclipsa.container-stack')\nexport const CONTEXT_VALUE_STACK_KEY = Symbol.for('eclipsa.context-value-stack')\nexport const FRAME_STACK_KEY = Symbol.for('eclipsa.frame-stack')\nexport const DIRTY_FLUSH_PROMISE_KEY = Symbol.for('eclipsa.dirty-flush-promise')\nexport const ASYNC_SIGNAL_SNAPSHOT_CACHE_KEY = Symbol.for('eclipsa.async-signal-snapshot-cache')\nexport const STANDALONE_SIGNAL_ID_KEY = Symbol.for('eclipsa.standalone-signal-id')\nexport const ACTION_FORM_ATTR = 'data-e-action-form'\nexport const ROUTER_EVENT_STATE_KEY = Symbol.for('eclipsa.router-event-state')\nexport const ROUTER_CURRENT_PATH_SIGNAL_ID = '$router:path'\nexport const ROUTER_CURRENT_URL_SIGNAL_ID = '$router:url'\nexport const ROUTER_IS_NAVIGATING_SIGNAL_ID = '$router:isNavigating'\nexport const ROUTER_LINK_BOUND_KEY = Symbol.for('eclipsa.router-link-bound')\nexport const ROUTER_LINK_PREFETCH_BOUND_KEY = Symbol.for('eclipsa.router-link-prefetch-bound')\nexport const ROUTE_NOT_FOUND_KEY = Symbol.for('eclipsa.route-not-found')\nexport const ROUTE_PARAMS_PROP = '__eclipsa_route_params'\nexport const ROUTE_ERROR_PROP = '__eclipsa_route_error'\nexport const ROUTE_SLOT_ROUTE_KEY = Symbol.for('eclipsa.route-slot-route')\nexport const RESUME_CONTAINERS_KEY = Symbol.for('eclipsa.resume-containers')\nexport const RESUME_STATE_ELEMENT_ID = 'eclipsa-resume'\nexport const RESUME_FINAL_STATE_ELEMENT_ID = 'eclipsa-resume-final'\nexport const SCOPED_STYLE_ATTR = 'data-e-scope'\nexport const ROOT_COMPONENT_ID = '$root'\nexport const SUSPENSE_COMPONENT_SYMBOL = '$suspense'\nexport const ROUTE_SLOT_TYPE = 'route-slot'\nexport const PROJECTION_SLOT_TYPE = 'projection-slot'\nexport const CONTAINER_ID_KEY = Symbol.for('eclipsa.runtime-container-id')\nexport const RENDER_COMPONENT_TYPE_KEY = Symbol.for('eclipsa.render-component-type')\nexport const RENDER_REFERENCE_KIND = 'render'\nexport const REF_SIGNAL_ATTR = 'data-e-ref'\nexport const STREAM_STATE_KEY = '__eclipsa_stream'\nexport const PENDING_RESUME_LINK_KEY = '__eclipsa_pending_route_link'\nexport const BIND_VALUE_PROP = 'bind:value'\nexport const BIND_CHECKED_PROP = 'bind:checked'\nexport const BIND_VALUE_ATTR = 'data-e-bind-value'\nexport const BIND_CHECKED_ATTR = 'data-e-bind-checked'\nexport const CLIENT_INSERT_OWNER_SYMBOL = '$client-insert-root'\nexport const CLIENT_INSERT_OWNER_ID_PREFIX = '$insert:'\nexport const EXTERNAL_ROOT_ATTR = 'data-e-external-root'\nexport const EXTERNAL_ROOT_COMPONENT_ATTR = 'data-e-external-component'\nexport const EXTERNAL_ROOT_KIND_ATTR = 'data-e-external-kind'\nexport const getExternalSlotTag = (_kind: ExternalComponentDescriptor['kind']) => 'e-slot-host'\nexport const DOM_TEXT_NODE = 3\nexport const DOM_COMMENT_NODE = 8\nexport const DOM_SHOW_COMMENT = 0x80\n","type DomConstructorName =\n | 'Element'\n | 'HTMLElement'\n | 'HTMLInputElement'\n | 'HTMLSelectElement'\n | 'HTMLTextAreaElement'\n | 'HTMLAnchorElement'\n | 'HTMLFormElement'\n\nexport interface FocusSnapshot {\n path: number[]\n selectionDirection?: 'backward' | 'forward' | 'none' | null\n selectionEnd?: number | null\n selectionStart?: number | null\n}\n\nexport interface PendingFocusRestore {\n snapshot: FocusSnapshot\n}\n\nconst managedElementAttributes = new WeakMap<Element, Set<string>>()\nconst insertMarkerNodeCounts = new WeakMap<Comment, number>()\n\nconst getDomContexts = (value: unknown): Array<Window | typeof globalThis> => {\n const contexts: Array<Window | typeof globalThis> = []\n if (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n return contexts\n }\n if ('ownerDocument' in value) {\n const ownerDocument = (value as { ownerDocument?: Document | null }).ownerDocument\n if (ownerDocument?.defaultView) {\n contexts.push(ownerDocument.defaultView)\n }\n }\n if ('defaultView' in value) {\n const defaultView = (value as { defaultView?: Window | null }).defaultView\n if (defaultView) {\n contexts.push(defaultView)\n }\n }\n contexts.push(globalThis)\n return contexts\n}\n\nconst isDomInstance = <T>(value: unknown, name: DomConstructorName): value is T => {\n for (const context of getDomContexts(value)) {\n const ctor = (context as Record<DomConstructorName, unknown>)[name]\n if (typeof ctor === 'function' && value instanceof ctor) {\n return true\n }\n }\n return false\n}\n\nexport const hasOwnerDocument = (\n value: unknown,\n): value is ParentNode & { ownerDocument: Document } =>\n !!value &&\n (typeof value === 'object' || typeof value === 'function') &&\n 'ownerDocument' in value &&\n !!(value as { ownerDocument?: Document | null }).ownerDocument\n\nexport const isElementNode = (value: unknown): value is Element =>\n isDomInstance<Element>(value, 'Element') || isDomInstance<HTMLElement>(value, 'HTMLElement')\n\nexport const isHTMLElementNode = (value: unknown): value is HTMLElement =>\n isDomInstance<HTMLElement>(value, 'HTMLElement')\n\nexport const isHTMLInputElementNode = (value: unknown): value is HTMLInputElement =>\n isDomInstance<HTMLInputElement>(value, 'HTMLInputElement')\n\nexport const isHTMLSelectElementNode = (value: unknown): value is HTMLSelectElement =>\n isDomInstance<HTMLSelectElement>(value, 'HTMLSelectElement')\n\nexport const isHTMLTextAreaElementNode = (value: unknown): value is HTMLTextAreaElement =>\n isDomInstance<HTMLTextAreaElement>(value, 'HTMLTextAreaElement')\n\nexport const isTextEntryElement = (\n value: unknown,\n): value is HTMLInputElement | HTMLTextAreaElement =>\n isHTMLInputElementNode(value) || isHTMLTextAreaElementNode(value)\n\nexport const isHTMLAnchorElementNode = (value: unknown): value is HTMLAnchorElement =>\n isDomInstance<HTMLAnchorElement>(value, 'HTMLAnchorElement')\n\nexport const isHTMLFormElementNode = (value: unknown): value is HTMLFormElement =>\n isDomInstance<HTMLFormElement>(value, 'HTMLFormElement')\n\nexport const listNodeChildren = (\n node: { childNodes?: Iterable<Node> | ArrayLike<Node> } | null | undefined,\n) => Array.from((node?.childNodes ?? []) as Iterable<Node> | ArrayLike<Node>)\n\nconst getElementAttributeNames = (element: Element): string[] => {\n const withGetAttributeNames = element as Element & { getAttributeNames?: () => string[] }\n if (typeof withGetAttributeNames.getAttributeNames === 'function') {\n return withGetAttributeNames.getAttributeNames.call(element)\n }\n\n const attributes = (\n element as Element & {\n attributes?: Map<string, string> | ArrayLike<Attr | { name?: string }>\n }\n ).attributes\n if (attributes instanceof Map) {\n return [...attributes.keys()]\n }\n if (attributes && typeof attributes.length === 'number') {\n const names: string[] = []\n for (let index = 0; index < attributes.length; index += 1) {\n const attribute = attributes[index]\n if (attribute && typeof attribute === 'object' && 'name' in attribute) {\n const name = attribute.name\n if (typeof name === 'string') {\n names.push(name)\n }\n }\n }\n return names\n }\n\n return []\n}\n\nconst hasElementAttribute = (element: Element, name: string): boolean | null => {\n const withHasAttribute = element as Element & { hasAttribute?: (name: string) => boolean }\n if (typeof withHasAttribute.hasAttribute === 'function') {\n return withHasAttribute.hasAttribute.call(element, name)\n }\n\n const withGetAttribute = element as Element & { getAttribute?: (name: string) => string | null }\n if (typeof withGetAttribute.getAttribute === 'function') {\n return withGetAttribute.getAttribute.call(element, name) !== null\n }\n\n const attributes = (element as Element & { attributes?: Map<string, string> }).attributes\n if (attributes instanceof Map) {\n return attributes.has(name)\n }\n\n return null\n}\n\nconst cloneManagedAttributeSnapshot = (element: Element) =>\n new Set(getElementAttributeNames(element))\n\nexport const replaceManagedAttributeSnapshot = (element: Element, names: Iterable<string>) => {\n managedElementAttributes.set(element, new Set(names))\n}\n\nexport const getManagedAttributeSnapshot = (element: Element) =>\n managedElementAttributes.get(element) ?? null\n\nexport const syncManagedAttributeSnapshot = (element: Element, name: string) => {\n const snapshot = getManagedAttributeSnapshot(element) ?? new Set<string>()\n const hasAttribute = hasElementAttribute(element, name)\n if (hasAttribute === true) {\n snapshot.add(name)\n } else if (hasAttribute === false) {\n snapshot.delete(name)\n } else {\n snapshot.add(name)\n }\n replaceManagedAttributeSnapshot(element, snapshot)\n}\n\nexport const rememberManagedAttributesForNode = (node: Node | null | undefined) => {\n if (!node) {\n return\n }\n\n const visit = (current: Node) => {\n if (isElementNode(current)) {\n replaceManagedAttributeSnapshot(current, cloneManagedAttributeSnapshot(current))\n }\n for (const child of listNodeChildren(current)) {\n visit(child)\n }\n }\n\n visit(node)\n}\n\nexport const rememberManagedAttributesForNodes = (nodes: Iterable<Node>) => {\n for (const node of nodes) {\n rememberManagedAttributesForNode(node)\n }\n}\n\nexport const rememberInsertMarkerRange = (\n marker: Node | null | undefined,\n nodes: Iterable<Node>,\n) => {\n if (!(typeof Comment !== 'undefined' ? marker instanceof Comment : marker?.nodeType === 8)) {\n return\n }\n\n let count = 0\n for (const _node of nodes) {\n count += 1\n }\n insertMarkerNodeCounts.set(marker as Comment, count)\n}\n\nexport const getRememberedInsertMarkerNodeCount = (marker: Comment | null | undefined) =>\n marker ? (insertMarkerNodeCounts.get(marker) ?? 0) : 0\n\nexport const setRememberedInsertMarkerNodeCount = (marker: Comment, count: number) => {\n insertMarkerNodeCounts.set(marker, count)\n}\n\nexport const getBoundaryChildren = (start: Comment, end: Comment) => {\n const nodes: Node[] = []\n let cursor = start.nextSibling\n while (cursor && cursor !== end) {\n nodes.push(cursor)\n cursor = cursor.nextSibling\n }\n return nodes\n}\n\nconst getNodePath = (root: Node, target: Node): number[] | null => {\n if (root === target) {\n return []\n }\n\n const path: number[] = []\n let cursor: Node | null = target\n while (cursor && cursor !== root) {\n const parent: Node | null = cursor.parentNode\n if (!parent) {\n return null\n }\n const index = Array.prototype.indexOf.call(parent.childNodes, cursor)\n if (index < 0) {\n return null\n }\n path.unshift(index)\n cursor = parent\n }\n\n return cursor === root ? path : null\n}\n\nconst getNodeByPath = (root: Node, path: number[]) => {\n let cursor: Node | null = root\n for (const index of path) {\n const childNodes: NodeListOf<ChildNode> | Node[] | undefined = cursor\n ? ((cursor.childNodes as NodeListOf<ChildNode>) ?? undefined)\n : undefined\n cursor =\n (childNodes &&\n ('item' in childNodes\n ? (childNodes.item(index) as Node | null)\n : ((childNodes as unknown as Node[])[index] ?? null))) ??\n null\n if (!cursor) {\n return null\n }\n }\n return cursor\n}\n\nconst getElementPath = (root: Element, target: Element): number[] | null => {\n if (root === target) {\n return []\n }\n\n const path: number[] = []\n let cursor: Element | null = target\n while (cursor && cursor !== root) {\n const parent: HTMLElement | null = cursor.parentElement\n if (!parent) {\n return null\n }\n const index = Array.prototype.indexOf.call(parent.children, cursor)\n if (index < 0) {\n return null\n }\n path.unshift(index)\n cursor = parent\n }\n\n return cursor === root ? path : null\n}\n\nconst getElementByPath = (root: Element, path: number[]) => {\n let cursor: Element | null = root\n for (const index of path) {\n const children: HTMLCollection | Element[] | undefined = cursor\n ? ((cursor.children as HTMLCollection) ?? undefined)\n : undefined\n cursor =\n (children &&\n ('item' in children\n ? (children.item(index) as Element | null)\n : ((children as unknown as Element[])[index] ?? null))) ??\n null\n if (!cursor) {\n return null\n }\n }\n return cursor\n}\n\nconst restoreFocusTarget = (doc: Document, nextActive: HTMLElement, snapshot: FocusSnapshot) => {\n const restore = () => {\n if (!nextActive.isConnected) {\n return false\n }\n nextActive.focus({ preventScroll: true })\n if (\n isTextEntryElement(nextActive) &&\n snapshot.selectionStart !== null &&\n snapshot.selectionStart !== undefined\n ) {\n nextActive.setSelectionRange(\n snapshot.selectionStart,\n snapshot.selectionEnd ?? snapshot.selectionStart,\n snapshot.selectionDirection ?? undefined,\n )\n }\n return doc.activeElement === nextActive\n }\n\n if (restore()) {\n return\n }\n\n const win = doc.defaultView\n if (!win) {\n return\n }\n\n let remainingAttempts = 3\n const retry = () => {\n if (remainingAttempts <= 0) {\n return\n }\n remainingAttempts--\n const run = () => {\n if (restore()) {\n return\n }\n retry()\n }\n\n if (typeof win.requestAnimationFrame === 'function') {\n win.requestAnimationFrame(() => run())\n return\n }\n win.setTimeout(run, 16)\n }\n\n retry()\n}\n\nexport const captureBoundaryFocus = (\n doc: Document,\n start: Comment,\n end: Comment,\n): FocusSnapshot | null => {\n const activeElement = doc.activeElement\n if (!isHTMLElementNode(activeElement)) {\n return null\n }\n\n const topLevelNodes = getBoundaryChildren(start, end)\n for (let index = 0; index < topLevelNodes.length; index += 1) {\n const candidate = topLevelNodes[index]\n if (\n candidate !== activeElement &&\n (!isElementNode(candidate) || !candidate.contains(activeElement))\n ) {\n continue\n }\n\n const innerPath = getNodePath(candidate, activeElement)\n if (!innerPath) {\n continue\n }\n\n return {\n path: [index, ...innerPath],\n selectionDirection: isTextEntryElement(activeElement)\n ? activeElement.selectionDirection\n : null,\n selectionEnd: isTextEntryElement(activeElement) ? activeElement.selectionEnd : null,\n selectionStart: isTextEntryElement(activeElement) ? activeElement.selectionStart : null,\n }\n }\n\n return null\n}\n\nexport const restoreBoundaryFocus = (\n doc: Document,\n start: Comment,\n end: Comment,\n snapshot: FocusSnapshot | null,\n) => {\n if (!snapshot) {\n return\n }\n\n const [topLevelIndex, ...innerPath] = snapshot.path\n const root = getBoundaryChildren(start, end)[topLevelIndex]\n if (!root) {\n return\n }\n\n const nextActive = innerPath.length > 0 ? getNodeByPath(root, innerPath) : root\n if (!isHTMLElementNode(nextActive)) {\n return\n }\n\n restoreFocusTarget(doc, nextActive, snapshot)\n}\n\nexport const captureDocumentFocus = (\n doc: Document,\n focusSource?: EventTarget | null,\n): FocusSnapshot | null => {\n const candidate = isHTMLElementNode(focusSource)\n ? focusSource\n : isHTMLElementNode(doc.activeElement)\n ? doc.activeElement\n : null\n if (!candidate) {\n return null\n }\n\n const path = getElementPath(doc.body, candidate)\n if (!path) {\n return null\n }\n\n return {\n path,\n selectionDirection: isTextEntryElement(candidate) ? candidate.selectionDirection : null,\n selectionEnd: isTextEntryElement(candidate) ? candidate.selectionEnd : null,\n selectionStart: isTextEntryElement(candidate) ? candidate.selectionStart : null,\n }\n}\n\nexport const shouldSkipPendingFocusRestore = (doc: Document, pending: PendingFocusRestore) => {\n const activeElement = doc.activeElement\n if (!isHTMLElementNode(activeElement)) {\n return false\n }\n if (\n activeElement === doc.body ||\n !activeElement.isConnected ||\n !doc.body.contains(activeElement)\n ) {\n return false\n }\n\n const activePath = getElementPath(doc.body, activeElement)\n if (!activePath) {\n return false\n }\n\n if (activePath.length !== pending.snapshot.path.length) {\n return true\n }\n\n return activePath.some((index, position) => index !== pending.snapshot.path[position])\n}\n\nexport const restorePendingFocus = (doc: Document, pending: PendingFocusRestore | null) => {\n if (!pending) {\n return\n }\n if (shouldSkipPendingFocusRestore(doc, pending)) {\n return\n }\n\n const nextActive = getElementByPath(doc.body, pending.snapshot.path)\n if (!isHTMLElementNode(nextActive)) {\n return\n }\n\n restoreFocusTarget(doc, nextActive, pending.snapshot)\n}\n","import {\n ASYNC_SIGNAL_SNAPSHOT_CACHE_KEY,\n CONTAINER_STACK_KEY,\n CONTEXT_VALUE_STACK_KEY,\n FRAME_STACK_KEY,\n RESUME_CONTAINERS_KEY,\n} from './constants.ts'\nimport type { RenderFrame, RuntimeContainer, RuntimeContextValue } from './types.ts'\n\nexport const getContainerStack = (): RuntimeContainer[] => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[CONTAINER_STACK_KEY]\n if (Array.isArray(existing)) {\n return existing as RuntimeContainer[]\n }\n const created: RuntimeContainer[] = []\n globalRecord[CONTAINER_STACK_KEY] = created\n return created\n}\n\nexport const getContextValueStack = (): RuntimeContextValue[] => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[CONTEXT_VALUE_STACK_KEY]\n if (Array.isArray(existing)) {\n return existing as RuntimeContextValue[]\n }\n const created: RuntimeContextValue[] = []\n globalRecord[CONTEXT_VALUE_STACK_KEY] = created\n return created\n}\n\nexport const getFrameStack = (): RenderFrame[] => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[FRAME_STACK_KEY]\n if (Array.isArray(existing)) {\n return existing as RenderFrame[]\n }\n const created: RenderFrame[] = []\n globalRecord[FRAME_STACK_KEY] = created\n return created\n}\n\nexport const getResumeContainers = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[RESUME_CONTAINERS_KEY]\n if (existing instanceof Set) {\n return existing as Set<RuntimeContainer>\n }\n const created = new Set<RuntimeContainer>()\n globalRecord[RESUME_CONTAINERS_KEY] = created\n return created\n}\n\nexport const getCurrentContainer = (): RuntimeContainer | null => {\n const stack = getContainerStack()\n return stack.length > 0 ? stack[stack.length - 1]! : null\n}\n\nconst getAsyncSignalSnapshotCache = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[ASYNC_SIGNAL_SNAPSHOT_CACHE_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, unknown>\n }\n const created = new Map<string, unknown>()\n globalRecord[ASYNC_SIGNAL_SNAPSHOT_CACHE_KEY] = created\n return created\n}\n\nexport const readAsyncSignalSnapshot = (id: string, container: RuntimeContainer | null) =>\n container?.asyncSignalStates.get(id) ??\n container?.asyncSignalSnapshotCache.get(id) ??\n getAsyncSignalSnapshotCache().get(id)\n\nexport const writeAsyncSignalSnapshot = (\n id: string,\n value: unknown,\n container: RuntimeContainer | null,\n) => {\n container?.asyncSignalStates.set(id, value)\n container?.asyncSignalSnapshotCache.set(id, value)\n if (!container) {\n getAsyncSignalSnapshotCache().set(id, value)\n }\n}\n\nexport const clearAsyncSignalSnapshot = (id: string, container: RuntimeContainer | null) => {\n container?.asyncSignalStates.delete(id)\n container?.asyncSignalSnapshotCache.delete(id)\n if (!container) {\n getAsyncSignalSnapshotCache().delete(id)\n }\n}\n","import type { JSX } from '../../jsx/types.ts'\nimport { jsxDEV } from '../../jsx/jsx-dev-runtime.ts'\nimport type {\n RouteLocation,\n RouteManifest,\n RouteModuleManifest,\n RouteParams,\n} from '../router-shared.ts'\nimport {\n ROUTE_ERROR_PROP,\n ROUTE_PARAMS_PROP,\n ROUTE_SLOT_ROUTE_KEY,\n ROUTE_SLOT_TYPE,\n} from './constants.ts'\nimport type {\n LoadedRoute,\n RouteDataResponse,\n RouteSlotCarrier,\n RouterState,\n RuntimeContainer,\n} from './types.ts'\n\nexport const normalizeRoutePath = (pathname: string) => {\n const normalizedPath = pathname.trim() || '/'\n const withLeadingSlash = normalizedPath.startsWith('/') ? normalizedPath : `/${normalizedPath}`\n if (withLeadingSlash.length > 1 && withLeadingSlash.endsWith('/')) {\n return withLeadingSlash.slice(0, -1)\n }\n return withLeadingSlash\n}\n\nexport const parseLocationHref = (href: string) => new URL(href, 'http://localhost')\n\nexport const createStandaloneLocation = (): RouteLocation => ({\n get hash() {\n return typeof window === 'undefined' ? '' : window.location.hash\n },\n get href() {\n return typeof window === 'undefined' ? '/' : window.location.href\n },\n get pathname() {\n return typeof window === 'undefined' ? '/' : normalizeRoutePath(window.location.pathname)\n },\n get search() {\n return typeof window === 'undefined' ? '' : window.location.search\n },\n})\n\nexport const createRouterLocation = (router: RouterState): RouteLocation => ({\n get hash() {\n return parseLocationHref(router.currentUrl.value).hash\n },\n get href() {\n return router.currentUrl.value\n },\n get pathname() {\n return normalizeRoutePath(parseLocationHref(router.currentUrl.value).pathname)\n },\n get search() {\n return parseLocationHref(router.currentUrl.value).search\n },\n})\n\nexport const EMPTY_ROUTE_PARAMS = Object.freeze({}) as RouteParams\nexport const ROUTE_DOCUMENT_FALLBACK = Object.freeze({\n document: true,\n ok: false,\n} as const)\n\nconst splitRoutePath = (pathname: string) => normalizeRoutePath(pathname).split('/').filter(Boolean)\n\nconst matchRouteSegments = (\n segments: RouteModuleManifest['segments'],\n pathnameSegments: string[],\n routeIndex = 0,\n pathIndex = 0,\n params: RouteParams = {},\n): RouteParams | null => {\n if (routeIndex >= segments.length) {\n return pathIndex >= pathnameSegments.length ? params : null\n }\n\n const segment = segments[routeIndex]!\n switch (segment.kind) {\n case 'static':\n if (pathnameSegments[pathIndex] !== segment.value) {\n return null\n }\n return matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex + 1, params)\n case 'required':\n if (pathIndex >= pathnameSegments.length) {\n return null\n }\n return matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex + 1, {\n ...params,\n [segment.value]: pathnameSegments[pathIndex],\n })\n case 'optional': {\n const consumed =\n pathIndex < pathnameSegments.length\n ? matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex + 1, {\n ...params,\n [segment.value]: pathnameSegments[pathIndex],\n })\n : null\n if (consumed) {\n return consumed\n }\n return matchRouteSegments(segments, pathnameSegments, routeIndex + 1, pathIndex, {\n ...params,\n [segment.value]: undefined,\n })\n }\n case 'rest': {\n const rest = pathnameSegments.slice(pathIndex)\n if (rest.length === 0) {\n return null\n }\n return matchRouteSegments(\n segments,\n pathnameSegments,\n segments.length,\n pathnameSegments.length,\n {\n ...params,\n [segment.value]: rest,\n },\n )\n }\n }\n}\n\nexport const matchRouteManifest = (manifest: RouteManifest, pathname: string) => {\n const normalizedPath = normalizeRoutePath(pathname)\n const pathnameSegments = splitRoutePath(normalizedPath)\n for (const entry of manifest) {\n const params = matchRouteSegments(entry.segments, pathnameSegments)\n if (params) {\n return {\n entry,\n params,\n pathname: normalizedPath,\n }\n }\n }\n return null\n}\n\nexport const scoreSpecialManifestEntry = (entry: RouteModuleManifest, pathname: string) => {\n const pathSegments = splitRoutePath(pathname)\n let score = 0\n for (let index = 0; index < entry.segments.length && index < pathSegments.length; index += 1) {\n const segment = entry.segments[index]!\n const pathnameSegment = pathSegments[index]\n if (segment.kind === 'static') {\n if (segment.value !== pathnameSegment) {\n break\n }\n score += 10\n continue\n }\n score += segment.kind === 'rest' ? 1 : 2\n if (segment.kind === 'rest') {\n break\n }\n }\n return score\n}\n\nexport const findSpecialManifestEntry = (\n manifest: RouteManifest,\n pathname: string,\n kind: 'error' | 'notFound',\n) => {\n const matched = matchRouteManifest(manifest, pathname)\n if (matched?.entry[kind]) {\n return matched\n }\n\n let best: ReturnType<typeof matchRouteManifest> = null\n let bestScore = -1\n for (const entry of manifest) {\n if (!entry[kind]) {\n continue\n }\n const score = scoreSpecialManifestEntry(entry, pathname)\n if (score > bestScore) {\n best = {\n entry,\n params: EMPTY_ROUTE_PARAMS,\n pathname: normalizeRoutePath(pathname),\n }\n bestScore = score\n }\n }\n\n return best\n}\n\nexport const resolvePageRouteMatch = (manifest: RouteManifest, pathname: string) => {\n const matched = matchRouteManifest(manifest, pathname)\n return matched?.entry.page ? matched : null\n}\n\nexport const resolveNotFoundRouteMatch = (manifest: RouteManifest, pathname: string) => {\n const matched = findSpecialManifestEntry(manifest, pathname, 'notFound')\n return matched?.entry.notFound ? matched : null\n}\n\nexport const resolveRoutableMatch = (\n manifest: RouteManifest,\n pathname: string,\n): {\n kind: 'page' | 'not-found'\n matched: NonNullable<ReturnType<typeof matchRouteManifest>>\n} | null => {\n const matched = matchRouteManifest(manifest, pathname)\n if (matched?.entry.page) {\n return {\n kind: 'page',\n matched,\n }\n }\n\n if (matched) {\n return null\n }\n\n const notFoundMatch = resolveNotFoundRouteMatch(manifest, pathname)\n if (!notFoundMatch) {\n return null\n }\n\n return {\n kind: 'not-found',\n matched: notFoundMatch,\n }\n}\n\nexport const resolveCurrentRouteManifestEntry = (router: RouterState) => {\n const currentPath = normalizeRoutePath(router.currentPath.value)\n const matched = matchRouteManifest(router.manifest, currentPath)\n if (matched?.entry.page) {\n return matched.entry\n }\n return findSpecialManifestEntry(router.manifest, currentPath, 'notFound')?.entry ?? null\n}\n\nexport const getRouteModuleUrl = (\n entry: RouteModuleManifest,\n variant: 'page' | 'loading' | 'error' | 'not-found' = 'page',\n) =>\n variant === 'page'\n ? entry.page\n : variant === 'loading'\n ? entry.loading\n : variant === 'error'\n ? entry.error\n : entry.notFound\n\nexport const isRouteDataSuccess = (\n body: RouteDataResponse,\n): body is Extract<RouteDataResponse, { ok: true }> =>\n body.ok === true &&\n typeof body.finalHref === 'string' &&\n typeof body.finalPathname === 'string' &&\n (body.kind === 'page' || body.kind === 'not-found') &&\n !!body.loaders &&\n typeof body.loaders === 'object'\n\nexport const isRouteSlot = (value: unknown): value is RouteSlotCarrier =>\n typeof value === 'object' &&\n value !== null &&\n '__eclipsa_type' in value &&\n (value as { __eclipsa_type?: unknown }).__eclipsa_type === ROUTE_SLOT_TYPE\n\nexport const createRouteSlot = (route: LoadedRoute, startLayoutIndex: number): RouteSlotCarrier => {\n const slot: RouteSlotCarrier = {\n __eclipsa_type: ROUTE_SLOT_TYPE,\n pathname: route.pathname,\n startLayoutIndex,\n }\n Object.defineProperty(slot, ROUTE_SLOT_ROUTE_KEY, {\n configurable: true,\n enumerable: false,\n value: route,\n writable: true,\n })\n return slot\n}\n\nexport const resolveRouteSlot = (container: RuntimeContainer | null, slot: RouteSlotCarrier) => {\n const route =\n slot[ROUTE_SLOT_ROUTE_KEY] ??\n container?.router?.loadedRoutes.get(routeCacheKey(slot.pathname, 'page'))\n if (!route) {\n return null\n }\n return createRouteElement(route, slot.startLayoutIndex)\n}\n\nconst defineHiddenRouteProp = (\n props: Record<string, unknown>,\n key: typeof ROUTE_PARAMS_PROP | typeof ROUTE_ERROR_PROP,\n value: unknown,\n) => {\n Object.defineProperty(props, key, {\n configurable: true,\n enumerable: false,\n value,\n writable: true,\n })\n}\n\nconst createRouteRenderProps = (route: LoadedRoute, props: Record<string, unknown>) => {\n const nextProps = {\n ...props,\n }\n defineHiddenRouteProp(nextProps, ROUTE_PARAMS_PROP, route.params)\n defineHiddenRouteProp(nextProps, ROUTE_ERROR_PROP, route.error)\n return nextProps\n}\n\nexport const createRouteElement = (route: LoadedRoute, startLayoutIndex = 0) => {\n if (startLayoutIndex >= route.layouts.length) {\n return jsxDEV(\n route.page.renderer as unknown as JSX.Type,\n createRouteRenderProps(route, {}),\n null,\n false,\n {},\n )\n }\n\n let children: unknown = null\n for (let index = route.layouts.length - 1; index >= startLayoutIndex; index -= 1) {\n const layout = route.layouts[index]!\n children = jsxDEV(\n layout.renderer as unknown as JSX.Type,\n createRouteRenderProps(route, {\n children: createRouteSlot(route, index + 1),\n }),\n null,\n false,\n {},\n )\n }\n return children\n}\n\nexport const routeCacheKey = (\n pathname: string,\n variant: 'page' | 'loading' | 'error' | 'not-found' = 'page',\n) => `${normalizeRoutePath(pathname)}::${variant}`\n\nexport const routePrefetchKey = (url: URL) => `${normalizeRoutePath(url.pathname)}${url.search}`\n\nexport const isLoaderSignalId = (id: string) => id.startsWith('$loader:')\n","import { isSSRAttrValue, isSSRRawValue, isSSRTemplate } from '../../jsx/jsx-dev-runtime.ts'\nimport type { JSX } from '../../jsx/types.ts'\n\ninterface SSRRendererDependencies {\n getCurrentContainer: () => unknown\n isProjectionSlot: (value: unknown) => boolean\n isRouteSlot: (value: unknown) => boolean\n renderProjectionSlotToString: (value: unknown) => string\n renderStringNode: (value: JSX.Element) => string\n resolveRouteSlot: (container: unknown, slot: unknown) => unknown\n}\n\nconst EVENT_PROP_REGEX = /^on([A-Z].+)$/\nconst DANGEROUSLY_SET_INNER_HTML_PROP = 'dangerouslySetInnerHTML'\nconst TEXT_ESCAPE_REGEX = /[&<>]/\nconst ATTR_ESCAPE_REGEX = /[&<>'\"]/\n\nconst escapeString = (value: string, mode: 'text' | 'attr') => {\n const escapePattern = mode === 'attr' ? ATTR_ESCAPE_REGEX : TEXT_ESCAPE_REGEX\n const firstMatch = value.search(escapePattern)\n if (firstMatch < 0) {\n return value\n }\n\n let output = ''\n let lastIndex = 0\n for (let index = firstMatch; index < value.length; index += 1) {\n let escaped: string | null = null\n switch (value.charCodeAt(index)) {\n case 34:\n escaped = mode === 'attr' ? '&quot;' : null\n break\n case 38:\n escaped = '&amp;'\n break\n case 39:\n escaped = mode === 'attr' ? '&#39;' : null\n break\n case 60:\n escaped = '&lt;'\n break\n case 62:\n escaped = '&gt;'\n break\n }\n if (!escaped) {\n continue\n }\n output += value.slice(lastIndex, index)\n output += escaped\n lastIndex = index + 1\n }\n return output + value.slice(lastIndex)\n}\n\nexport const escapeText = (value: string) => escapeString(value, 'text')\nexport const escapeAttr = (value: string) => escapeString(value, 'attr')\n\nexport const resolveDangerouslySetInnerHTML = (value: unknown) =>\n value === false || value === undefined || value === null ? null : String(value)\n\nexport const toEventName = (propName: string) => {\n const matched = propName.match(EVENT_PROP_REGEX)\n if (!matched) {\n return null\n }\n const [first, ...rest] = matched[1]\n return `${first.toLowerCase()}${rest.join('')}`\n}\n\nexport const isDangerouslySetInnerHTMLProp = (propName: string) =>\n propName === DANGEROUSLY_SET_INNER_HTML_PROP\n\nexport const createSSRRenderer = ({\n getCurrentContainer,\n isProjectionSlot,\n isRouteSlot,\n renderProjectionSlotToString,\n renderStringNode,\n resolveRouteSlot,\n}: SSRRendererDependencies) => {\n const renderSSRAttr = (name: string, value: unknown) => {\n if (name === 'key') {\n return ''\n }\n if (value === false || value === undefined || value === null) {\n return ''\n }\n if (value === true) {\n return ` ${name}`\n }\n return ` ${name}=\"${escapeAttr(String(value))}\"`\n }\n\n const renderSSRTemplateNode = (template: JSX.SSRTemplate) => {\n let output = template.strings[0] ?? ''\n for (let index = 0; index < template.values.length; index += 1) {\n const value = template.values[index]\n output += isSSRAttrValue(value)\n ? renderSSRAttr(value.name, value.value)\n : renderSSRValue(value)\n output += template.strings[index + 1] ?? ''\n }\n return output\n }\n\n const renderStringArray = (values: readonly (JSX.Element | JSX.Element[])[]) => {\n let output = ''\n for (let index = 0; index < values.length; index += 1) {\n const value = values[index]\n if (Array.isArray(value)) {\n output += renderStringArray(value)\n continue\n }\n if (value === false || value === null || value === undefined) {\n continue\n }\n if (typeof value === 'string') {\n output += escapeText(value)\n continue\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n output += escapeText(String(value))\n continue\n }\n if (isSSRRawValue(value)) {\n output += value.value\n continue\n }\n if (isSSRTemplate(value)) {\n output += renderSSRTemplateNode(value)\n continue\n }\n if (isProjectionSlot(value)) {\n output += renderProjectionSlotToString(value)\n continue\n }\n if (isRouteSlot(value)) {\n const routeElement = resolveRouteSlot(getCurrentContainer(), value)\n if (routeElement) {\n output += renderStringNode(routeElement as JSX.Element)\n }\n continue\n }\n output += renderStringNode(value as JSX.Element)\n }\n return output\n }\n\n const renderSSRValue = (value: unknown): string => {\n if (value === false || value === null || value === undefined) {\n return ''\n }\n if (Array.isArray(value)) {\n return renderStringArray(value as readonly (JSX.Element | JSX.Element[])[])\n }\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return escapeText(String(value))\n }\n if (isSSRRawValue(value)) {\n return value.value\n }\n if (isSSRTemplate(value)) {\n return renderSSRTemplateNode(value)\n }\n if (isProjectionSlot(value)) {\n return renderProjectionSlotToString(value)\n }\n if (isRouteSlot(value)) {\n const routeElement = resolveRouteSlot(getCurrentContainer(), value)\n return routeElement ? renderStringNode(routeElement as JSX.Element) : ''\n }\n return renderStringNode(value as JSX.Element)\n }\n\n const renderSSRMap = <T>(\n value:\n | readonly T[]\n | {\n map: (callback: (item: T, index: number) => string) => {\n join: (separator: string) => string\n }\n },\n renderItem: (item: T, index: number) => string,\n ): string => {\n if (Array.isArray(value)) {\n let output = ''\n for (let index = 0; index < value.length; index += 1) {\n if (!(index in value)) {\n continue\n }\n output += renderItem(value[index] as T, index)\n }\n return output\n }\n return value.map(renderItem).join('')\n }\n\n return {\n renderSSRAttr,\n renderSSRValue,\n renderSSRMap,\n }\n}\n","export type MarkerKind = 'start' | 'end'\n\nexport interface ComponentBoundaryMarker {\n id: string\n kind: MarkerKind\n}\n\nexport interface ProjectionSlotMarker {\n componentId: string\n key: string\n kind: MarkerKind\n name: string\n occurrence: number\n}\n\nexport interface KeyedRangeMarker {\n scope: string\n key: string\n kind: MarkerKind\n}\n\nexport interface InsertMarker {\n key: string\n}\n\nexport const COMPONENT_BOUNDARY_PROPS_CHANGED = Symbol.for(\n 'eclipsa.component-boundary-props-changed',\n)\nexport const COMPONENT_BOUNDARY_SYMBOL_CHANGED = Symbol.for(\n 'eclipsa.component-boundary-symbol-changed',\n)\nexport const INSERT_MARKER_PREFIX = 'ec:i:'\n\ntype ComponentBoundaryComment = Comment & {\n [COMPONENT_BOUNDARY_PROPS_CHANGED]?: boolean\n [COMPONENT_BOUNDARY_SYMBOL_CHANGED]?: boolean\n}\n\nconst COMPONENT_BOUNDARY_MARKER_REGEX = /^ec:c:(.+):(start|end)$/\nconst KEYED_RANGE_MARKER_REGEX = /^ec:k:([^:]+):([^:]+):(start|end)$/\nconst PROJECTION_SLOT_MARKER_REGEX = /^ec:s:([^:]+):([^:]+):(\\d+):(start|end)$/\nconst INSERT_MARKER_REGEX = /^ec:i:(.+)$/\n\nconst encodeProjectionSlotName = (value: string) => encodeURIComponent(value)\nconst decodeProjectionSlotName = (value: string) => decodeURIComponent(value)\nconst encodeKeyedRangeToken = (value: string | number | symbol) => encodeURIComponent(String(value))\nconst decodeKeyedRangeToken = (value: string) => {\n try {\n return decodeURIComponent(value)\n } catch {\n return value\n }\n}\n\nexport const createComponentBoundaryMarker = (componentId: string, kind: MarkerKind) =>\n `ec:c:${componentId}:${kind}`\n\nexport const createComponentBoundaryHtmlComment = (componentId: string, kind: MarkerKind) =>\n `<!--${createComponentBoundaryMarker(componentId, kind)}-->`\n\nexport const setComponentBoundaryChangeFlags = (\n start: Comment,\n options?: {\n propsChanged?: boolean\n symbolChanged?: boolean\n },\n) => {\n ;(start as ComponentBoundaryComment)[COMPONENT_BOUNDARY_PROPS_CHANGED] =\n options?.propsChanged === true\n ;(start as ComponentBoundaryComment)[COMPONENT_BOUNDARY_SYMBOL_CHANGED] =\n options?.symbolChanged === true\n}\n\nexport const didComponentBoundaryPropsChange = (start: Comment) =>\n Boolean((start as ComponentBoundaryComment)[COMPONENT_BOUNDARY_PROPS_CHANGED])\n\nexport const didComponentBoundarySymbolChange = (start: Comment) =>\n Boolean((start as ComponentBoundaryComment)[COMPONENT_BOUNDARY_SYMBOL_CHANGED])\n\nexport const didComponentBoundaryChange = (start: Comment) =>\n didComponentBoundaryPropsChange(start) || didComponentBoundarySymbolChange(start)\n\nexport const createComponentBoundaryPair = (\n doc: Document,\n componentId: string,\n options?: {\n propsChanged?: boolean\n symbolChanged?: boolean\n },\n) => {\n const start = doc.createComment(createComponentBoundaryMarker(componentId, 'start'))\n const end = doc.createComment(createComponentBoundaryMarker(componentId, 'end'))\n setComponentBoundaryChangeFlags(start, options)\n return {\n end,\n start,\n }\n}\n\nexport const createProjectionSlotRangeKey = (\n componentId: string,\n name: string,\n occurrence: number,\n) => `${componentId}:${encodeProjectionSlotName(name)}:${occurrence}`\n\nexport const createProjectionSlotMarker = (\n componentId: string,\n name: string,\n occurrence: number,\n kind: MarkerKind,\n) => `ec:s:${createProjectionSlotRangeKey(componentId, name, occurrence)}:${kind}`\n\nexport const createKeyedRangeMarker = (\n scope: string,\n value: string | number | symbol,\n kind: MarkerKind,\n) => `ec:k:${encodeKeyedRangeToken(scope)}:${encodeKeyedRangeToken(value)}:${kind}`\n\nexport const createInsertMarker = (key: string | number) => `${INSERT_MARKER_PREFIX}${key}`\n\nexport const parseComponentBoundaryMarker = (value: string): ComponentBoundaryMarker | null => {\n const matched = value.match(COMPONENT_BOUNDARY_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n id: matched[1],\n kind: matched[2] as MarkerKind,\n }\n}\n\nexport const parseProjectionSlotMarker = (value: string): ProjectionSlotMarker | null => {\n const matched = value.match(PROJECTION_SLOT_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n componentId: matched[1],\n key: createProjectionSlotRangeKey(\n matched[1],\n decodeProjectionSlotName(matched[2]),\n Number(matched[3]),\n ),\n kind: matched[4] as MarkerKind,\n name: decodeProjectionSlotName(matched[2]),\n occurrence: Number(matched[3]),\n }\n}\n\nexport const parseKeyedRangeMarker = (value: string): KeyedRangeMarker | null => {\n const matched = value.match(KEYED_RANGE_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n scope: decodeKeyedRangeToken(matched[1]),\n key: decodeKeyedRangeToken(matched[2]),\n kind: matched[3] as MarkerKind,\n }\n}\n\nexport const parseInsertMarker = (value: string): InsertMarker | null => {\n const matched = value.match(INSERT_MARKER_REGEX)\n if (!matched) {\n return null\n }\n return {\n key: matched[1],\n }\n}\n","import type { Component } from '../component.ts'\nimport {\n deserializePublicValue,\n serializePublicValue,\n type SerializedReference,\n type SerializedValue,\n} from '../hooks.ts'\nimport {\n getRuntimeContextReference,\n materializeRuntimeContext,\n materializeRuntimeContextProvider,\n} from '../context.ts'\nimport {\n __eclipsaComponent,\n getActionHandleMeta,\n getActionHookMeta,\n getComponentMeta,\n getLazyMeta,\n getLoaderHandleMeta,\n getLoaderHookMeta,\n getNavigateMeta,\n getRegisteredActionHook,\n getRegisteredLoaderHook,\n getSignalMeta,\n} from '../internal.ts'\nimport {\n PROJECTION_SLOT_TYPE,\n RENDER_COMPONENT_TYPE_KEY,\n RENDER_REFERENCE_KIND,\n ROUTE_SLOT_TYPE,\n} from './constants.ts'\nimport type {\n ProjectionSlotValue,\n RenderComponentTypeRef,\n RenderObject,\n RuntimeContainer,\n RuntimeSymbolModule,\n RouteSlotValue,\n} from './types.ts'\n\ninterface RuntimeSerializationDependencies {\n createProjectionSlot: (\n componentId: string,\n name: string,\n occurrence: number,\n source: unknown,\n ) => ProjectionSlotValue\n ensureRouterState: (container: RuntimeContainer) => {\n navigate: unknown\n }\n ensureRuntimeElementId: (container: RuntimeContainer, element: Element) => string\n evaluateProps: (props: Record<string, unknown>) => Record<string, unknown>\n findRuntimeElement: (container: RuntimeContainer, id: string) => Element | null\n getResolvedRuntimeSymbols: (container: RuntimeContainer) => Map<string, RuntimeSymbolModule>\n isPlainObject: (value: unknown) => value is Record<string, unknown>\n isProjectionSlot: (value: unknown) => value is ProjectionSlotValue\n isRenderObject: (value: unknown) => value is RenderObject\n isRouteSlot: (value: unknown) => value is RouteSlotValue\n loadSymbol: (container: RuntimeContainer, symbol: string) => Promise<unknown>\n materializeScope: (container: RuntimeContainer, scopeId: string) => unknown[]\n materializeSymbolReference: (\n container: RuntimeContainer,\n symbol: string,\n scopeId: string,\n ) => unknown\n registerScope: (container: RuntimeContainer, values: unknown[]) => string\n registerSerializedScope: (container: RuntimeContainer, values: SerializedValue[]) => string\n resolveRenderable: (value: unknown) => unknown\n}\n\nexport const createRuntimeSerialization = ({\n createProjectionSlot,\n ensureRouterState,\n ensureRuntimeElementId,\n evaluateProps,\n findRuntimeElement,\n getResolvedRuntimeSymbols,\n isPlainObject,\n isProjectionSlot,\n isRenderObject,\n isRouteSlot,\n loadSymbol,\n materializeScope,\n materializeSymbolReference,\n registerScope,\n registerSerializedScope,\n resolveRenderable,\n}: RuntimeSerializationDependencies) => {\n const getRenderComponentTypeRef = (value: unknown): RenderComponentTypeRef | null => {\n if (typeof value !== 'function') {\n return null\n }\n return (\n ((value as unknown as Record<PropertyKey, unknown>)[RENDER_COMPONENT_TYPE_KEY] as\n | RenderComponentTypeRef\n | undefined) ?? null\n )\n }\n\n const createMaterializedRenderComponentType = (\n container: RuntimeContainer,\n symbol: string,\n scopeId: string,\n ) => {\n const component = __eclipsaComponent(\n ((props: unknown) => {\n const module = getResolvedRuntimeSymbols(container).get(symbol)\n if (!module) {\n throw new Error(`Missing preloaded render component symbol ${symbol}.`)\n }\n return module.default(materializeScope(container, scopeId), props)\n }) as Component,\n symbol,\n () => materializeScope(container, scopeId),\n )\n Object.defineProperty(component, RENDER_COMPONENT_TYPE_KEY, {\n configurable: true,\n enumerable: false,\n value: {\n scopeId,\n symbol,\n } satisfies RenderComponentTypeRef,\n writable: true,\n })\n return component\n }\n\n const serializeRenderObjectReference = (\n container: RuntimeContainer,\n value: RenderObject,\n ): SerializedReference => {\n if (typeof value.type === 'function' && !getComponentMeta(value.type)) {\n const resolved = resolveRenderable(value.type(value.props))\n if (!isRenderObject(resolved)) {\n throw new TypeError('Only resumable component render objects can be serialized.')\n }\n return serializeRenderObjectReference(container, resolved)\n }\n\n const evaluatedProps = evaluateProps(value.props)\n const key = value.key ?? null\n const isStatic = value.isStatic === true\n const metadata = value.metadata ?? null\n\n if (typeof value.type === 'string') {\n return {\n __eclipsa_type: 'ref',\n data: [\n 'element',\n value.type,\n null,\n serializeRuntimeValue(container, evaluatedProps),\n serializeRuntimeValue(container, key),\n isStatic,\n serializeRuntimeValue(container, metadata),\n ],\n kind: RENDER_REFERENCE_KIND,\n token: 'jsx',\n }\n }\n\n const meta = getComponentMeta(value.type)\n if (!meta) {\n throw new TypeError('Only resumable component render objects can be serialized.')\n }\n\n return {\n __eclipsa_type: 'ref',\n data: [\n 'component',\n meta.symbol,\n registerScope(container, meta.captures()),\n serializeRuntimeValue(container, evaluatedProps),\n serializeRuntimeValue(container, key),\n isStatic,\n serializeRuntimeValue(container, metadata),\n ],\n kind: RENDER_REFERENCE_KIND,\n token: 'jsx',\n }\n }\n\n const deserializeRenderObjectReference = (\n container: RuntimeContainer,\n data: SerializedValue | undefined,\n ): RenderObject => {\n if (!Array.isArray(data) || data.length !== 7) {\n throw new TypeError('Render references require a seven-part payload.')\n }\n\n const [variant, typeValue, scopeValue, propsValue, keyValue, isStaticValue, metadataValue] =\n data\n if (variant !== 'element' && variant !== 'component') {\n throw new TypeError(`Unsupported render reference variant \"${String(variant)}\".`)\n }\n if (\n typeof isStaticValue !== 'boolean' &&\n isStaticValue !== null &&\n isStaticValue !== undefined\n ) {\n throw new TypeError('Render references require a boolean static flag.')\n }\n const isStatic = isStaticValue === true\n\n const props = deserializeRuntimeValue(container, propsValue as SerializedValue)\n const key = deserializeRuntimeValue(container, keyValue as SerializedValue)\n const metadata = deserializeRuntimeValue(container, metadataValue as SerializedValue)\n\n if (!props || typeof props !== 'object') {\n throw new TypeError('Render references require object props.')\n }\n\n if (variant === 'element') {\n if (typeof typeValue !== 'string') {\n throw new TypeError('Element render references require a string tag name.')\n }\n return {\n isStatic,\n key: (key ?? undefined) as RenderObject['key'],\n metadata: (metadata ?? undefined) as RenderObject['metadata'],\n props: props as Record<string, unknown>,\n type: typeValue,\n }\n }\n\n if (typeof typeValue !== 'string' || typeof scopeValue !== 'string') {\n throw new TypeError('Component render references require a symbol id and scope id.')\n }\n\n return {\n isStatic,\n key: (key ?? undefined) as RenderObject['key'],\n metadata: (metadata ?? undefined) as RenderObject['metadata'],\n props: props as Record<string, unknown>,\n type: createMaterializedRenderComponentType(container, typeValue, scopeValue),\n }\n }\n\n const preloadResumableValue = async (\n container: RuntimeContainer,\n value: unknown,\n seen = new Set<unknown>(),\n ): Promise<void> => {\n if (value === null || value === undefined || value === false) {\n return\n }\n if (seen.has(value)) {\n return\n }\n if (typeof value === 'function') {\n const renderComponentRef = getRenderComponentTypeRef(value)\n if (!renderComponentRef) {\n return\n }\n seen.add(value)\n await loadSymbol(container, renderComponentRef.symbol)\n for (const capturedValue of materializeScope(container, renderComponentRef.scopeId)) {\n await preloadResumableValue(container, capturedValue, seen)\n }\n return\n }\n if (Array.isArray(value)) {\n seen.add(value)\n for (const entry of value) {\n await preloadResumableValue(container, entry, seen)\n }\n return\n }\n if (typeof Node !== 'undefined' && value instanceof Node) {\n return\n }\n if (isProjectionSlot(value)) {\n return\n }\n if (isRenderObject(value)) {\n seen.add(value)\n await preloadResumableValue(container, value.type, seen)\n await preloadResumableValue(container, evaluateProps(value.props), seen)\n return\n }\n if (!isPlainObject(value)) {\n return\n }\n\n seen.add(value)\n for (const entry of Object.values(value)) {\n await preloadResumableValue(container, entry, seen)\n }\n }\n\n const serializeRuntimeValue = (container: RuntimeContainer, value: unknown): SerializedValue =>\n serializePublicValue(value, {\n serializeReference(candidate) {\n const signalMeta = getSignalMeta(candidate)\n if (signalMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'signal',\n token: signalMeta.id,\n }\n }\n if (getNavigateMeta(candidate)) {\n return {\n __eclipsa_type: 'ref',\n kind: 'navigate',\n token: 'navigate',\n }\n }\n const actionMeta = getActionHandleMeta(candidate)\n if (actionMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'action',\n token: actionMeta.id,\n }\n }\n const actionHookMeta = getActionHookMeta(candidate)\n if (actionHookMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'action-hook',\n token: actionHookMeta.id,\n }\n }\n const loaderMeta = getLoaderHandleMeta(candidate)\n if (loaderMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'loader',\n token: loaderMeta.id,\n }\n }\n const loaderHookMeta = getLoaderHookMeta(candidate)\n if (loaderHookMeta) {\n return {\n __eclipsa_type: 'ref',\n kind: 'loader-hook',\n token: loaderHookMeta.id,\n }\n }\n const contextReference = getRuntimeContextReference(candidate)\n if (contextReference) {\n return {\n __eclipsa_type: 'ref',\n data: serializeRuntimeValue(container, {\n defaultValue: contextReference.defaultValue,\n hasDefault: contextReference.hasDefault,\n }),\n kind: contextReference.kind,\n token: contextReference.id,\n }\n }\n if (isRouteSlot(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data: serializePublicValue(candidate.startLayoutIndex),\n kind: 'route-slot',\n token: candidate.pathname,\n }\n }\n if (isProjectionSlot(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data: serializeRuntimeValue(container, candidate.source),\n kind: PROJECTION_SLOT_TYPE,\n token: JSON.stringify([candidate.componentId, candidate.name, candidate.occurrence]),\n }\n }\n if (isRenderObject(candidate)) {\n return serializeRenderObjectReference(container, candidate)\n }\n const lazyMeta = getLazyMeta(candidate)\n if (lazyMeta) {\n return {\n __eclipsa_type: 'ref',\n data: lazyMeta.captures().map((entry) => serializeRuntimeValue(container, entry)),\n kind: 'symbol',\n token: lazyMeta.symbol,\n }\n }\n if (typeof Element !== 'undefined' && candidate instanceof Element) {\n return {\n __eclipsa_type: 'ref',\n kind: 'dom',\n token: ensureRuntimeElementId(container, candidate),\n }\n }\n return null\n },\n })\n\n const deserializeRuntimeValue = (container: RuntimeContainer, value: SerializedValue): unknown =>\n deserializePublicValue(value, {\n deserializeReference(reference) {\n if (reference.kind === 'navigate') {\n return ensureRouterState(container).navigate\n }\n if (reference.kind === 'action') {\n const action = container.actions.get(reference.token)\n if (!action) {\n throw new Error(`Missing action handle ${reference.token}.`)\n }\n return action\n }\n if (reference.kind === 'action-hook') {\n const actionHook = getRegisteredActionHook(reference.token)\n if (!actionHook) {\n throw new Error(`Missing action hook ${reference.token}.`)\n }\n return actionHook\n }\n if (reference.kind === 'loader') {\n const loader = container.loaders.get(reference.token)\n if (!loader) {\n throw new Error(`Missing loader handle ${reference.token}.`)\n }\n return loader\n }\n if (reference.kind === 'loader-hook') {\n const loaderHook = getRegisteredLoaderHook(reference.token)\n if (!loaderHook) {\n throw new Error(`Missing loader hook ${reference.token}.`)\n }\n return loaderHook\n }\n if (reference.kind === 'context' || reference.kind === 'context-provider') {\n const decoded =\n reference.data === undefined\n ? null\n : (deserializeRuntimeValue(container, reference.data as SerializedValue) as {\n defaultValue?: unknown\n hasDefault?: unknown\n } | null)\n const hasDefault = decoded?.hasDefault === true\n const defaultValue = hasDefault ? decoded?.defaultValue : undefined\n const descriptor = {\n defaultValue,\n hasDefault,\n id: reference.token,\n }\n return reference.kind === 'context'\n ? materializeRuntimeContext(descriptor)\n : materializeRuntimeContextProvider(descriptor)\n }\n if (reference.kind === 'route-slot') {\n const startLayoutIndex =\n reference.data === undefined ? 0 : deserializePublicValue(reference.data)\n if (typeof startLayoutIndex !== 'number' || !Number.isInteger(startLayoutIndex)) {\n throw new TypeError('Route slot references require an integer start layout index.')\n }\n return {\n __eclipsa_type: ROUTE_SLOT_TYPE,\n pathname: reference.token,\n startLayoutIndex,\n } satisfies RouteSlotValue\n }\n if (reference.kind === PROJECTION_SLOT_TYPE) {\n let componentId = ''\n let name = ''\n let occurrence = 0\n try {\n const parsed = JSON.parse(reference.token)\n if (\n !Array.isArray(parsed) ||\n parsed.length !== 3 ||\n typeof parsed[0] !== 'string' ||\n typeof parsed[1] !== 'string' ||\n typeof parsed[2] !== 'number'\n ) {\n throw new Error('invalid projection slot token')\n }\n componentId = parsed[0]\n name = parsed[1]\n occurrence = parsed[2]\n } catch {\n throw new TypeError(\n 'Projection slot references require a component id, name, and occurrence.',\n )\n }\n return createProjectionSlot(\n componentId,\n name,\n occurrence,\n deserializeRuntimeValue(container, reference.data as SerializedValue),\n )\n }\n if (reference.kind === 'signal') {\n const record = container.signals.get(reference.token)\n if (!record) {\n throw new Error(`Missing signal ${reference.token}.`)\n }\n return record.handle\n }\n if (reference.kind === 'symbol') {\n if (!reference.data || !Array.isArray(reference.data)) {\n throw new TypeError('Symbol references require an encoded scope array.')\n }\n const scopeId = registerSerializedScope(container, reference.data)\n return materializeSymbolReference(container, reference.token, scopeId)\n }\n if (reference.kind === RENDER_REFERENCE_KIND) {\n return deserializeRenderObjectReference(container, reference.data)\n }\n if (reference.kind === 'dom') {\n const element = findRuntimeElement(container, reference.token)\n if (!element) {\n throw new Error(`Missing DOM reference ${reference.token}.`)\n }\n return element\n }\n throw new TypeError(`Unsupported runtime reference kind \"${reference.kind}\".`)\n },\n })\n\n return {\n deserializeRuntimeValue,\n preloadResumableValue,\n serializeRuntimeValue,\n }\n}\n","import type { JSX } from '../jsx/types.ts'\nimport { FRAGMENT } from '../jsx/shared.ts'\nimport { isSSRRawValue, isSSRTemplate } from '../jsx/jsx-dev-runtime.ts'\nimport { isPendingSignalError, isSuspenseType, type SuspenseProps } from './suspense.ts'\nimport type { ResumeHmrUpdatePayload } from './resume-hmr.ts'\nimport { deserializePublicValue, serializePublicValue, type SerializedValue } from './hooks.ts'\nimport { escapeJSONScriptText } from './serialize.ts'\nimport type { Component } from './component.ts'\nimport type { Insertable } from './client/types.ts'\nimport { getContextProviderMeta } from './context.ts'\nimport {\n ROUTE_METADATA_HEAD_ATTR,\n composeRouteMetadata,\n type RouteMetadataExport,\n} from './metadata.ts'\nimport {\n getComponentMeta,\n getExternalComponentMeta,\n getEventMeta,\n getRegisteredActionHookIds,\n getRegisteredActionHook,\n getRegisteredLoaderHookIds,\n getRegisteredLoaderHook,\n getLazyMeta,\n getSignalMeta,\n getWatchMeta,\n setNavigateMeta,\n setSignalMeta,\n type ComponentMeta,\n type ExternalComponentDescriptor,\n type ExternalComponentMeta,\n type EventDescriptor,\n type LazyMeta,\n type SignalMeta,\n} from './internal.ts'\nimport {\n ROUTE_DATA_ENDPOINT,\n ROUTE_LINK_ATTR,\n ROUTE_PREFETCH_ATTR,\n ROUTE_PREFLIGHT_REQUEST_HEADER,\n ROUTE_REPLACE_ATTR,\n type LinkPrefetchMode,\n type Navigate,\n type NavigateOptions,\n type RouteManifest,\n type RouteLocation,\n type RouteModuleManifest,\n type RouteParams,\n} from './router-shared.ts'\nimport {\n ACTION_FORM_ATTR,\n BIND_CHECKED_ATTR,\n BIND_CHECKED_PROP,\n BIND_VALUE_ATTR,\n BIND_VALUE_PROP,\n CLIENT_INSERT_OWNER_ID_PREFIX,\n CLIENT_INSERT_OWNER_SYMBOL,\n CONTAINER_ID_KEY,\n DIRTY_FLUSH_PROMISE_KEY,\n DOM_COMMENT_NODE,\n DOM_SHOW_COMMENT,\n DOM_TEXT_NODE,\n EXTERNAL_ROOT_ATTR,\n EXTERNAL_ROOT_COMPONENT_ATTR,\n EXTERNAL_ROOT_KIND_ATTR,\n PENDING_RESUME_LINK_KEY,\n PROJECTION_SLOT_TYPE,\n REF_SIGNAL_ATTR,\n RESUME_FINAL_STATE_ELEMENT_ID,\n RESUME_STATE_ELEMENT_ID,\n ROOT_COMPONENT_ID,\n ROUTE_ERROR_PROP,\n ROUTE_NOT_FOUND_KEY,\n ROUTE_PARAMS_PROP,\n ROUTER_CURRENT_PATH_SIGNAL_ID,\n ROUTER_CURRENT_URL_SIGNAL_ID,\n ROUTER_EVENT_STATE_KEY,\n ROUTER_IS_NAVIGATING_SIGNAL_ID,\n ROUTER_LINK_BOUND_KEY,\n ROUTER_LINK_PREFETCH_BOUND_KEY,\n SCOPED_STYLE_ATTR,\n STANDALONE_SIGNAL_ID_KEY,\n STREAM_STATE_KEY,\n SUSPENSE_COMPONENT_SYMBOL,\n getExternalSlotTag,\n} from './runtime/constants.ts'\nimport {\n captureBoundaryFocus,\n captureDocumentFocus,\n getBoundaryChildren,\n getManagedAttributeSnapshot,\n getRememberedInsertMarkerNodeCount,\n hasOwnerDocument,\n isElementNode,\n isHTMLElementNode,\n isHTMLAnchorElementNode,\n isHTMLFormElementNode,\n isHTMLInputElementNode,\n isHTMLSelectElementNode,\n isHTMLTextAreaElementNode,\n listNodeChildren,\n rememberInsertMarkerRange,\n rememberManagedAttributesForNode,\n rememberManagedAttributesForNodes,\n replaceManagedAttributeSnapshot,\n restoreBoundaryFocus,\n restorePendingFocus as restorePendingFocusInDocument,\n setRememberedInsertMarkerNodeCount,\n syncManagedAttributeSnapshot,\n type PendingFocusRestore,\n} from './runtime/dom.ts'\nimport {\n clearAsyncSignalSnapshot as clearGlobalAsyncSignalSnapshot,\n getContainerStack,\n getContextValueStack,\n getCurrentContainer,\n getFrameStack,\n getResumeContainers,\n readAsyncSignalSnapshot as readGlobalAsyncSignalSnapshot,\n writeAsyncSignalSnapshot as writeGlobalAsyncSignalSnapshot,\n} from './runtime/globals.ts'\nimport {\n EMPTY_ROUTE_PARAMS,\n ROUTE_DOCUMENT_FALLBACK,\n createRouteElement,\n createRouterLocation,\n createStandaloneLocation,\n findSpecialManifestEntry,\n getRouteModuleUrl,\n isRouteDataSuccess,\n isLoaderSignalId,\n isRouteSlot,\n matchRouteManifest,\n normalizeRoutePath,\n parseLocationHref,\n resolveCurrentRouteManifestEntry,\n resolveNotFoundRouteMatch,\n resolvePageRouteMatch,\n resolveRoutableMatch,\n resolveRouteSlot,\n routeCacheKey,\n routePrefetchKey,\n} from './runtime/routes.ts'\nimport {\n createSSRRenderer,\n escapeAttr,\n escapeText,\n isDangerouslySetInnerHTMLProp,\n resolveDangerouslySetInnerHTML,\n toEventName,\n} from './runtime/ssr.ts'\nimport {\n createComponentBoundaryHtmlComment,\n createComponentBoundaryPair,\n createKeyedRangeMarker,\n createProjectionSlotRangeKey,\n createProjectionSlotMarker,\n didComponentBoundaryChange,\n didComponentBoundaryPropsChange,\n didComponentBoundarySymbolChange,\n parseComponentBoundaryMarker,\n parseInsertMarker,\n parseKeyedRangeMarker,\n parseProjectionSlotMarker,\n} from './runtime/markers.ts'\nimport { createRuntimeSerialization } from './runtime/serialization.ts'\nimport type {\n ClientInsertOwner,\n ComponentState,\n CleanupSlot,\n EffectOptions,\n ForValue,\n LoadedRoute,\n LoadedRouteModule,\n LoaderSnapshot,\n NavigationMode,\n PendingLinkNavigation,\n PendingResumeLinkNavigation,\n ProjectionSlotValue,\n ReactiveEffect,\n RenderFrame,\n RenderObject,\n ResumeActionPayload,\n ResumeComponentPayload,\n ResumeLoaderPayload,\n ResumePayload,\n ResumeVisiblePayload,\n ResumeWatchPayload,\n RouteDataResponse,\n RoutePrefetchResult,\n RoutePreflightResult,\n RouteRenderer,\n RouteSlotCarrier,\n RouterEventState,\n RouterState,\n RuntimeContainer,\n RuntimeContextToken,\n RuntimeSymbolModule,\n ScopedStyleEntry,\n ShowValue,\n SignalRecord,\n StreamedSuspenseChunk,\n StreamState,\n VisibleState,\n WatchDependency,\n WatchState,\n} from './runtime/types.ts'\nimport { isPlainObject } from './shared.ts'\n\nexport {\n RESUME_STATE_ELEMENT_ID,\n RESUME_FINAL_STATE_ELEMENT_ID,\n SCOPED_STYLE_ATTR,\n} from './runtime/constants.ts'\nexport {\n getRememberedInsertMarkerNodeCount,\n rememberInsertMarkerRange,\n rememberManagedAttributesForNode,\n rememberManagedAttributesForNodes,\n syncManagedAttributeSnapshot,\n} from './runtime/dom.ts'\nexport type {\n ClientInsertOwner,\n ResumeComponentPayload,\n ResumeLoaderPayload,\n ResumePayload,\n RuntimeContainer,\n RuntimeContextToken,\n} from './runtime/types.ts'\n\nconst isMissingGeneratedScopeReferenceError = (error: unknown): error is ReferenceError =>\n error instanceof ReferenceError && /\\b__scope\\b/.test(error.message)\n\nconst toRuntimeError = (error: unknown) =>\n error instanceof Error ? error : new Error(typeof error === 'string' ? error : String(error))\n\nconst areShallowEqualRenderProps = (\n previous: Record<string, unknown> | null,\n next: Record<string, unknown> | null,\n) => {\n if (previous === next) {\n return true\n }\n if (!previous || !next) {\n return !previous && !next\n }\n\n const previousKeys = Object.keys(previous)\n const nextKeys = Object.keys(next)\n if (previousKeys.length !== nextKeys.length) {\n return false\n }\n\n for (const key of previousKeys) {\n if (!Object.hasOwn(next, key) || !Object.is(previous[key], next[key])) {\n return false\n }\n }\n\n for (const hiddenKey of [ROUTE_PARAMS_PROP, ROUTE_ERROR_PROP] as const) {\n const previousHas = Object.hasOwn(previous, hiddenKey)\n const nextHas = Object.hasOwn(next, hiddenKey)\n if (previousHas !== nextHas) {\n return false\n }\n if (previousHas && !Object.is(previous[hiddenKey], next[hiddenKey])) {\n return false\n }\n }\n\n return true\n}\n\nconst wrapGeneratedScopeReferenceError = (\n error: unknown,\n context: {\n componentId?: string\n phase: string\n symbolId?: string\n },\n) => {\n const baseError = toRuntimeError(error)\n if (!isMissingGeneratedScopeReferenceError(baseError)) {\n return baseError\n }\n\n const location = [\n context.componentId ? `component \"${context.componentId}\"` : null,\n context.symbolId ? `symbol \"${context.symbolId}\"` : null,\n ]\n .filter(Boolean)\n .join(', ')\n\n const wrapped = new Error(\n `Eclipsa runtime failed while ${context.phase}${location ? ` ${location}` : ''}. The generated resumable symbol referenced \"__scope\" outside its valid scope. This usually means a same-file helper was transformed incorrectly during symbol compilation. Inline that helper into the component as a workaround. Original error: ${baseError.message}`,\n { cause: baseError },\n )\n wrapped.name = 'EclipsaRuntimeError'\n return wrapped\n}\n\nconst resolvedRuntimeSymbols = new WeakMap<RuntimeContainer, Map<string, RuntimeSymbolModule>>()\n\nconst getResolvedRuntimeSymbols = (container: RuntimeContainer) => {\n const existing = resolvedRuntimeSymbols.get(container)\n if (existing) {\n return existing\n }\n const created = new Map<string, RuntimeSymbolModule>()\n resolvedRuntimeSymbols.set(container, created)\n return created\n}\n\nexport const invalidateRuntimeSymbolCaches = (\n container: RuntimeContainer,\n symbolIds: Iterable<string>,\n) => {\n const resolved = getResolvedRuntimeSymbols(container)\n for (const symbolId of symbolIds) {\n container.imports.delete(symbolId)\n resolved.delete(symbolId)\n }\n}\n\nconst withResumeHmrTimestamp = (url: string, timestamp: number) => {\n const parsed = new URL(url, 'http://localhost')\n parsed.searchParams.set('t', timestamp.toString())\n return `${parsed.pathname}${parsed.search}${parsed.hash}`\n}\n\nconst canBustRuntimeSymbolUrl = (url: string) => parseSymbolIdFromUrl(url) !== null\n\nexport const bustRuntimeSymbolUrls = (\n container: RuntimeContainer,\n symbolIds: Iterable<string>,\n timestamp: number,\n) => {\n for (const symbolId of symbolIds) {\n const current = container.symbols.get(symbolId)\n if (!current || !canBustRuntimeSymbolUrl(current)) {\n continue\n }\n container.symbols.set(symbolId, withResumeHmrTimestamp(current, timestamp))\n }\n}\n\nconst isRenderObject = (value: unknown): value is RenderObject =>\n typeof value === 'object' && value !== null && 'type' in value && 'props' in value\n\nexport const readAsyncSignalSnapshot = (\n id: string,\n container: RuntimeContainer | null = getCurrentContainer(),\n) => readGlobalAsyncSignalSnapshot(id, container)\n\nexport const writeAsyncSignalSnapshot = (\n id: string,\n value: unknown,\n container: RuntimeContainer | null = getCurrentContainer(),\n) => {\n writeGlobalAsyncSignalSnapshot(id, value, container)\n}\n\nexport const clearAsyncSignalSnapshot = (\n id: string,\n container: RuntimeContainer | null = getCurrentContainer(),\n) => {\n clearGlobalAsyncSignalSnapshot(id, container)\n}\n\nconst getCurrentFrame = (): RenderFrame | null => {\n const stack = getFrameStack()\n return stack.length > 0 ? stack[stack.length - 1] : null\n}\n\nexport const shouldReconnectDetachedInsertMarkers = (container: RuntimeContainer | null) => {\n const frame = getCurrentFrame()\n if (!container || !frame || frame.container !== container) {\n return true\n }\n return frame.projectionState.reuseExistingDom\n}\n\nconst hasScopedStyles = (frame: RenderFrame | null) => !!frame && frame.scopedStyles.length > 0\n\nconst getScopedStyleRootSelector = (scopeId: string) =>\n `[${SCOPED_STYLE_ATTR}=\"${escapeAttr(scopeId)}\"]`\n\nconst wrapScopedStyleCss = (scopeId: string, cssText: string) =>\n `@scope (${getScopedStyleRootSelector(scopeId)}) {\\n${cssText}\\n}`\n\nconst renderScopedStyleString = (scopeId: string, style: ScopedStyleEntry) => {\n const attrParts = Object.entries(style.attributes)\n .filter(([, value]) => value !== false && value !== undefined && value !== null)\n .map(([name, value]) => (value === true ? name : `${name}=\"${escapeAttr(String(value))}\"`))\n const attrs = attrParts.length > 0 ? ` ${attrParts.join(' ')}` : ''\n return `<style${attrs}>${escapeText(wrapScopedStyleCss(scopeId, style.cssText))}</style>`\n}\n\nconst renderScopedStyleNode = (\n container: RuntimeContainer,\n scopeId: string,\n style: ScopedStyleEntry,\n) => {\n const element = createElementNode(container.doc!, 'style')\n for (const [name, value] of Object.entries(style.attributes)) {\n if (value === false || value === undefined || value === null) {\n continue\n }\n if (value === true) {\n element.setAttribute(name, '')\n continue\n }\n element.setAttribute(name, String(value))\n }\n element.appendChild(container.doc!.createTextNode(wrapScopedStyleCss(scopeId, style.cssText)))\n return element\n}\n\nconst renderFrameScopedStylesToString = (frame: RenderFrame) =>\n frame.scopedStyles\n .map((style) => renderScopedStyleString(frame.component.scopeId, style))\n .join('')\n\nconst renderFrameScopedStylesToNodes = (frame: RenderFrame, container: RuntimeContainer) =>\n frame.scopedStyles.map((style) =>\n renderScopedStyleNode(container, frame.component.scopeId, style),\n )\n\nexport const registerRuntimeScopedStyle = (\n cssText: string,\n attributes: Record<string, unknown> = {},\n): void => {\n const frame = getCurrentFrame()\n if (!frame || frame.component.id === ROOT_COMPONENT_ID) {\n throw new Error('useStyleScoped() can only be used while rendering a component.')\n }\n\n if (cssText.length === 0) {\n return\n }\n\n const existing = frame.scopedStyles.find(\n (entry) =>\n entry.cssText === cssText && JSON.stringify(entry.attributes) === JSON.stringify(attributes),\n )\n if (existing) {\n return\n }\n\n frame.scopedStyles.push({\n attributes: { ...attributes },\n cssText,\n })\n}\n\nlet currentEffect: ReactiveEffect | null = null\nlet currentCleanupSlot: CleanupSlot | null = null\n\nconst withoutTrackedEffect = <T>(fn: () => T): T => {\n const previous = currentEffect\n currentEffect = null\n try {\n return fn()\n } finally {\n currentEffect = previous\n }\n}\n\nconst createCleanupSlot = (): CleanupSlot => ({\n callbacks: [],\n})\n\nconst withCleanupSlot = <T>(slot: CleanupSlot, fn: () => T): T => {\n const previous = currentCleanupSlot\n currentCleanupSlot = slot\n try {\n return fn()\n } finally {\n currentCleanupSlot = previous\n }\n}\n\nconst disposeCleanupSlot = (slot: CleanupSlot | null | undefined) => {\n if (!slot || slot.callbacks.length === 0) {\n return\n }\n\n const callbacks = [...slot.callbacks].reverse()\n slot.callbacks.length = 0\n let firstError: unknown = null\n const previous = currentCleanupSlot\n currentCleanupSlot = null\n\n try {\n for (const callback of callbacks) {\n try {\n withoutTrackedEffect(callback)\n } catch (error) {\n firstError ??= error\n }\n }\n } finally {\n currentCleanupSlot = previous\n }\n\n if (firstError) {\n throw firstError\n }\n}\n\nconst resetComponentRenderEffects = (component: ComponentState) => {\n disposeCleanupSlot(component.renderEffectCleanupSlot)\n component.renderEffectCleanupSlot = createCleanupSlot()\n}\n\nconst syncEffectOnlyLocalSignalPreference = (component: ComponentState) => {\n component.prefersEffectOnlyLocalSignalWrites = component.optimizedRoot === true\n}\n\nconst clearEffectSignals = (effect: ReactiveEffect) => {\n for (const signal of effect.signals) {\n signal.effects.delete(effect)\n }\n effect.signals.clear()\n}\n\nconst collectTrackedDependencies = (effect: ReactiveEffect, fn: () => void) => {\n clearEffectSignals(effect)\n currentEffect = effect\n try {\n fn()\n } finally {\n currentEffect = null\n }\n}\n\nconst runWithoutDependencyTracking = <T>(fn: () => T): T => {\n const previousEffect = currentEffect\n currentEffect = null\n try {\n return fn()\n } finally {\n currentEffect = previousEffect\n }\n}\n\nconst trackWatchDependencies = (dependencies: WatchDependency[], errorLabel = 'useWatch') => {\n for (const dependency of dependencies) {\n if (typeof dependency === 'function') {\n dependency()\n continue\n }\n const signalMeta = getSignalMeta(dependency)\n if (!signalMeta) {\n throw new TypeError(`${errorLabel} dependencies must be signals or getter functions.`)\n }\n void dependency.value\n }\n}\n\nconst runWatchCallback = (\n effect: ReactiveEffect,\n cleanupSlot: CleanupSlot,\n fn: () => void,\n dependencies?: WatchDependency[],\n) => {\n disposeCleanupSlot(cleanupSlot)\n if (!dependencies) {\n collectTrackedDependencies(effect, () => {\n withCleanupSlot(cleanupSlot, fn)\n })\n return\n }\n collectTrackedDependencies(effect, () => {\n trackWatchDependencies(dependencies)\n })\n withCleanupSlot(cleanupSlot, fn)\n}\n\nconst createLocalWatchRunner =\n (\n effect: ReactiveEffect,\n cleanupSlot: CleanupSlot,\n fn: () => void,\n dependencies?: WatchDependency[],\n ) =>\n () => {\n runWatchCallback(effect, cleanupSlot, fn, dependencies)\n }\n\nconst isProjectionSlot = (value: unknown): value is ProjectionSlotValue =>\n isPlainObject(value) && value.__eclipsa_type === PROJECTION_SLOT_TYPE\n\nconst createProjectionSlot = (\n componentId: string,\n name: string,\n occurrence: number,\n source: unknown,\n): ProjectionSlotValue => ({\n __eclipsa_type: PROJECTION_SLOT_TYPE,\n componentId,\n name,\n occurrence,\n source,\n})\n\nlet runtimeSerialization: ReturnType<typeof createRuntimeSerialization> | null = null\n\nconst getRuntimeSerialization = () => {\n runtimeSerialization ??= createRuntimeSerialization({\n createProjectionSlot,\n ensureRouterState,\n ensureRuntimeElementId,\n evaluateProps,\n findRuntimeElement,\n getResolvedRuntimeSymbols,\n isPlainObject,\n isProjectionSlot,\n isRenderObject,\n isRouteSlot,\n loadSymbol,\n materializeScope,\n materializeSymbolReference,\n registerScope,\n registerSerializedScope,\n resolveRenderable: (value) => resolveRenderable(value as JSX.Element),\n })\n return runtimeSerialization\n}\n\nconst preloadResumableValue = (\n container: RuntimeContainer,\n value: unknown,\n seen = new Set<unknown>(),\n) => getRuntimeSerialization().preloadResumableValue(container, value, seen)\n\nconst serializeRuntimeValue = (container: RuntimeContainer, value: unknown): SerializedValue =>\n getRuntimeSerialization().serializeRuntimeValue(container, value)\n\nconst deserializeRuntimeValue = (container: RuntimeContainer, value: SerializedValue): unknown =>\n getRuntimeSerialization().deserializeRuntimeValue(container, value)\n\nconst findNextNumericId = (ids: Iterable<string>, prefix: string) => {\n let nextId = 0\n for (const id of ids) {\n if (!id.startsWith(prefix)) {\n continue\n }\n const suffix = id.slice(prefix.length)\n if (!/^\\d+$/.test(suffix)) {\n continue\n }\n nextId = Math.max(nextId, Number(suffix) + 1)\n }\n return nextId\n}\n\nconst getRefSignalId = (value: unknown) => getSignalMeta(value)?.id ?? null\n\nconst getBindableSignalId = (value: unknown) => getSignalMeta(value)?.id ?? null\n\nexport const syncRuntimeRefMarker = (element: Element, value: unknown) => {\n const signalId = getRefSignalId(value)\n if (signalId) {\n element.setAttribute(REF_SIGNAL_ATTR, signalId)\n syncManagedAttributeSnapshot(element, REF_SIGNAL_ATTR)\n return\n }\n element.removeAttribute(REF_SIGNAL_ATTR)\n syncManagedAttributeSnapshot(element, REF_SIGNAL_ATTR)\n}\n\nconst readBindableSignalValue = (value: unknown) => {\n if (!value || (typeof value !== 'object' && typeof value !== 'function') || !('value' in value)) {\n return undefined\n }\n return (value as { value: unknown }).value\n}\n\nexport const assignRuntimeRef = (\n value: unknown,\n element: Element,\n container: RuntimeContainer | null = getCurrentContainer(),\n) => {\n const signalMeta = getSignalMeta<Element | undefined>(value)\n if (!signalMeta) {\n return false\n }\n\n const record = container?.signals.get(signalMeta.id)\n if (record) {\n writeSignalValue(container, record, element)\n return true\n }\n\n signalMeta.set(element)\n return true\n}\n\nexport const restoreSignalRefs = (container: RuntimeContainer, root: ParentNode) => {\n const assignElement = (element: Element) => {\n const signalId = element.getAttribute(REF_SIGNAL_ATTR)\n if (!signalId) {\n return\n }\n const record = container.signals.get(signalId)\n if (!record) {\n return\n }\n writeSignalValue(container, record, element)\n }\n\n if (isElementNode(root) && root.getAttribute(REF_SIGNAL_ATTR)) {\n assignElement(root)\n }\n\n const visitDescendants = (node: ParentNode) => {\n for (const child of listNodeChildren(node)) {\n if (!isElementNode(child)) {\n continue\n }\n if (child.getAttribute(REF_SIGNAL_ATTR)) {\n assignElement(child)\n }\n visitDescendants(child)\n }\n }\n\n visitDescendants(root)\n}\n\nconst evaluateProps = (props: Record<string, unknown>): Record<string, unknown> => {\n const result: Record<string, unknown> = {}\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(props))) {\n if (descriptor.get) {\n result[key] = descriptor.get.call(props)\n } else {\n result[key] = descriptor.value\n }\n }\n return result\n}\n\nconst hasProjectionSlotValue = (props: Record<string, unknown>, name: string) =>\n Object.prototype.hasOwnProperty.call(props, name)\n\nconst shouldRenderProjectionSlotValue = (value: unknown): boolean => {\n if (value === null || value === undefined || value === false) {\n return false\n }\n if (isProjectionSlot(value)) {\n return false\n }\n if (Array.isArray(value)) {\n return value.some((entry) => shouldRenderProjectionSlotValue(entry))\n }\n if (typeof value === 'function') {\n return true\n }\n return typeof value === 'object'\n}\n\nconst shouldPreserveProjectionSlotDom = (value: unknown): boolean => {\n if (value === null || value === undefined || value === false) {\n return false\n }\n if (isProjectionSlot(value) || isRouteSlot(value)) {\n return false\n }\n if (Array.isArray(value)) {\n return value.some((entry) => shouldPreserveProjectionSlotDom(entry))\n }\n if (typeof value === 'function') {\n return true\n }\n return typeof value === 'object'\n}\n\nconst getComponentProjectionSlotProps = (component: ComponentState) => {\n if (component.rawProps && typeof component.rawProps === 'object') {\n return component.rawProps\n }\n return component.props && typeof component.props === 'object'\n ? (component.props as Record<string, unknown>)\n : null\n}\n\nconst hasDynamicProjectionSlotDom = (component: ComponentState) => {\n if (!component.projectionSlots || Object.keys(component.projectionSlots).length === 0) {\n return false\n }\n\n const props = getComponentProjectionSlotProps(component)\n if (!props) {\n return false\n }\n\n return Object.keys(component.projectionSlots).some(\n (name) => hasProjectionSlotValue(props, name) && shouldPreserveProjectionSlotDom(props[name]),\n )\n}\n\nconst createRenderProps = (\n componentId: string,\n meta: ComponentMeta,\n props: Record<string, unknown>,\n): Record<string, unknown> => {\n const nextProps = Object.create(null) as Record<string, unknown>\n Object.defineProperties(nextProps, Object.getOwnPropertyDescriptors(props))\n\n if (!meta.projectionSlots || Object.keys(meta.projectionSlots).length === 0) {\n return nextProps\n }\n\n const counters = new Map<string, number>()\n\n for (const [name, totalOccurrences] of Object.entries(meta.projectionSlots)) {\n Object.defineProperty(nextProps, name, {\n configurable: true,\n enumerable: true,\n get() {\n if (!hasProjectionSlotValue(props, name)) {\n return undefined\n }\n const value = props[name]\n if (!shouldRenderProjectionSlotValue(value)) {\n return value\n }\n const current = counters.get(name) ?? 0\n counters.set(name, current + 1)\n const occurrence = totalOccurrences > 0 ? current % totalOccurrences : current\n return createProjectionSlot(componentId, name, occurrence, value)\n },\n })\n }\n\n return nextProps\n}\n\nconst preloadComponentProps = async (\n container: RuntimeContainer,\n meta: ComponentMeta,\n props: unknown,\n) => {\n if (!props || typeof props !== 'object') {\n await preloadResumableValue(container, props)\n return\n }\n\n if (!meta.projectionSlots) {\n await preloadResumableValue(container, props)\n return\n }\n\n const projectionNames = new Set(Object.keys(meta.projectionSlots))\n const entries: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(props as Record<string, unknown>)) {\n if (projectionNames.has(key)) {\n await preloadResumableValue(container, value)\n continue\n }\n entries[key] = value\n }\n await preloadResumableValue(container, entries)\n}\n\nconst createContainer = (\n symbols: Record<string, string>,\n doc?: Document,\n asyncSignalSnapshotCache?: Map<string, unknown>,\n externalRenderCache?: RuntimeContainer['externalRenderCache'],\n): RuntimeContainer => ({\n actions: new Map(),\n actionStates: new Map(),\n asyncSignalStates: new Map(),\n asyncSignalSnapshotCache: asyncSignalSnapshotCache ?? new Map(),\n atoms: new WeakMap(),\n components: new Map(),\n dirty: new Set(),\n dirtyFlushQueued: false,\n doc,\n eventDispatchPromise: null,\n externalRenderCache: externalRenderCache ?? new Map(),\n id: `rt${((globalThis as Record<PropertyKey, unknown>)[CONTAINER_ID_KEY] =\n (((globalThis as Record<PropertyKey, unknown>)[CONTAINER_ID_KEY] as number | undefined) ?? 0) +\n 1)}`,\n imports: new Map(),\n interactivePrefetchCheckQueued: false,\n loaderStates: new Map(),\n loaders: new Map(),\n nextAtomId: 0,\n nextComponentId: 0,\n nextElementId: 0,\n nextScopeId: 0,\n nextSignalId: 0,\n pendingSuspensePromises: new Set(),\n resumeReadyPromise: null,\n rootChildCursor: 0,\n rootElement: doc?.body,\n router: null,\n scopes: new Map(),\n signals: new Map(),\n symbols: new Map(Object.entries(symbols)),\n visibilityCheckQueued: false,\n visibilityListenersCleanup: null,\n visibles: new Map(),\n watches: new Map(),\n})\n\nexport const registerResumeContainer = (container: RuntimeContainer) => {\n const containers = getResumeContainers()\n containers.add(container)\n return () => {\n containers.delete(container)\n }\n}\n\nconst createSignalHandle = <T>(record: SignalRecord<T>, container: RuntimeContainer | null) => {\n const handle = {} as { value: T }\n Object.defineProperty(handle, 'value', {\n configurable: true,\n enumerable: true,\n get() {\n recordSignalRead(record)\n return record.value\n },\n set(value: T) {\n writeSignalValue(container, record, value)\n },\n })\n setSignalMeta(handle, {\n get: () => record.value,\n id: record.id,\n set: (value) => {\n writeSignalValue(container, record, value)\n },\n } satisfies SignalMeta<T>)\n return handle\n}\n\nconst isPrimitiveSignalValue = (value: unknown) =>\n value === null || (typeof value !== 'object' && typeof value !== 'function')\n\nconst didSignalValueChange = (previous: unknown, next: unknown) => {\n if (isPrimitiveSignalValue(previous) && isPrimitiveSignalValue(next)) {\n return !Object.is(previous, next)\n }\n\n return previous !== next\n}\n\nconst writeSignalValue = <T>(\n container: RuntimeContainer | null,\n record: SignalRecord<T>,\n nextValue: T,\n) => {\n if (!didSignalValueChange(record.value, nextValue)) {\n return false\n }\n\n record.value = nextValue\n notifySignalWrite(container, record)\n return true\n}\n\nconst ensureSignalRecord = <T>(\n container: RuntimeContainer | null,\n id: string,\n initialValue: T,\n): SignalRecord<T> => {\n if (!container) {\n const record = {\n effects: new Set<ReactiveEffect>(),\n handle: undefined as unknown as { value: T },\n id,\n subscribers: new Set<string>(),\n value: initialValue,\n } satisfies SignalRecord<T>\n record.handle = createSignalHandle(record, null)\n return record\n }\n const existing = container.signals.get(id)\n if (existing) {\n return existing as SignalRecord<T>\n }\n const record: SignalRecord<T> = {\n effects: new Set(),\n handle: undefined as unknown as { value: T },\n id,\n subscribers: new Set(),\n value: initialValue,\n }\n record.handle = createSignalHandle(record, container)\n container.signals.set(id, record as SignalRecord)\n return record\n}\n\nconst isRouterSignalId = (id: string) =>\n id === ROUTER_CURRENT_PATH_SIGNAL_ID ||\n id === ROUTER_CURRENT_URL_SIGNAL_ID ||\n id === ROUTER_IS_NAVIGATING_SIGNAL_ID\n\nconst isAtomSignalId = (id: string) => id.startsWith('a')\n\nconst createStandaloneNavigate = (): Navigate => {\n const navigate = (async (href: string, options?: NavigateOptions) => {\n if (typeof window === 'undefined') {\n return\n }\n const url = new URL(href, window.location.href)\n if (options?.replace) {\n window.location.replace(url.href)\n return\n }\n window.location.assign(url.href)\n }) as Navigate\n\n Object.defineProperty(navigate, 'isNavigating', {\n configurable: true,\n enumerable: true,\n get() {\n return false\n },\n })\n\n return setNavigateMeta(navigate)\n}\n\nexport const primeLocationState = (container: RuntimeContainer, href: string | URL) => {\n writeRouterLocation(ensureRouterState(container), href)\n}\n\nconst recordSignalRead = (record: SignalRecord) => {\n if (currentEffect) {\n currentEffect.signals.add(record)\n record.effects.add(currentEffect)\n return\n }\n const frame = getCurrentFrame()\n if (!frame) {\n return\n }\n record.subscribers.add(frame.component.id)\n}\n\nconst notifySignalWrite = (container: RuntimeContainer | null, record: SignalRecord) => {\n for (const effect of Array.from(record.effects)) {\n effect.fn()\n }\n if (!container) {\n return\n }\n for (const componentId of record.subscribers) {\n const component = container.components.get(componentId)\n if (!component?.start || !component.end) {\n continue\n }\n if (\n component.prefersEffectOnlyLocalSignalWrites &&\n component.signalIds.includes(record.id) &&\n record.effects.size > 0 &&\n !record.subscribers.has(component.id)\n ) {\n continue\n }\n const hasProjectionSlotDom = hasDynamicProjectionSlotDom(component)\n const nextActivateMode = hasProjectionSlotDom ? 'replace' : 'patch'\n component.active = false\n if (component.activateModeOnFlush !== 'replace') {\n component.activateModeOnFlush = nextActivateMode\n }\n component.reuseExistingDomOnActivate = !hasProjectionSlotDom\n component.reuseProjectionSlotDomOnActivate = !hasProjectionSlotDom\n container.dirty.add(component.id)\n }\n scheduleDirtyFlush(container)\n}\n\nconst canFlushDirtyComponents = (container: RuntimeContainer) =>\n [...container.dirty].every((componentId) => {\n const component = container.components.get(componentId)\n return (\n !!component &&\n (container.imports.has(component.symbol) || container.symbols.has(component.symbol))\n )\n })\n\nconst scheduleDirtyFlush = (container: RuntimeContainer) => {\n if (\n container.dirty.size === 0 ||\n container.dirtyFlushQueued ||\n !canFlushDirtyComponents(container)\n ) {\n return\n }\n\n container.dirtyFlushQueued = true\n queueMicrotask(() => {\n const flushWhenReady = async () => {\n try {\n const pendingEvent = container.eventDispatchPromise\n if (pendingEvent) {\n await pendingEvent.catch(() => {})\n }\n } finally {\n container.dirtyFlushQueued = false\n }\n\n if (container.dirty.size === 0) {\n return\n }\n void flushDirtyComponents(container)\n }\n\n void flushWhenReady()\n })\n}\n\nconst writeRouterLocation = (router: RouterState, href: string | URL) => {\n const url = href instanceof URL ? href : parseLocationHref(href)\n const nextPath = normalizeRoutePath(url.pathname)\n if (router.currentPath.value !== nextPath) {\n router.currentPath.value = nextPath\n }\n if (router.currentUrl.value !== url.href) {\n router.currentUrl.value = url.href\n }\n}\n\nconst syncRouterLocationSilently = (container: RuntimeContainer, href: string | URL) => {\n const url = href instanceof URL ? href : parseLocationHref(href)\n const nextPath = normalizeRoutePath(url.pathname)\n ensureSignalRecord(container, ROUTER_CURRENT_PATH_SIGNAL_ID, nextPath).value = nextPath\n ensureSignalRecord(container, ROUTER_CURRENT_URL_SIGNAL_ID, url.href).value = url.href\n ensureSignalRecord(container, ROUTER_IS_NAVIGATING_SIGNAL_ID, false).value = false\n}\n\nconst ensureRouterState = (container: RuntimeContainer, manifest?: RouteManifest) => {\n if (container.router) {\n if (manifest) {\n container.router.manifest = [...manifest]\n }\n return container.router\n }\n\n const currentPath = ensureSignalRecord(\n container,\n ROUTER_CURRENT_PATH_SIGNAL_ID,\n normalizeRoutePath(container.doc?.location.pathname ?? '/'),\n ).handle as { value: string }\n const currentUrl = ensureSignalRecord(\n container,\n ROUTER_CURRENT_URL_SIGNAL_ID,\n container.doc?.location.href ?? currentPath.value,\n ).handle as { value: string }\n const isNavigating = ensureSignalRecord(container, ROUTER_IS_NAVIGATING_SIGNAL_ID, false)\n .handle as { value: boolean }\n\n const router: RouterState = {\n currentPath,\n currentRoute: null,\n currentUrl,\n defaultTitle: container.doc?.title ?? '',\n isNavigating,\n loadedRoutes: new Map(),\n location: undefined as unknown as RouteLocation,\n manifest: [],\n navigate: undefined as unknown as Navigate,\n prefetchedLoaders: new Map(),\n routeModuleBusts: new Map(),\n routePrefetches: new Map(),\n sequence: 0,\n }\n\n container.router = router\n router.location = createRouterLocation(router)\n router.navigate = setNavigateMeta((async (href: string, options?: NavigateOptions) => {\n await navigateContainer(container, href, {\n mode: options?.replace ? 'replace' : 'push',\n })\n }) as Navigate)\n\n Object.defineProperty(router.navigate, 'isNavigating', {\n configurable: true,\n enumerable: true,\n get() {\n return ensureRouterState(container).isNavigating.value\n },\n })\n\n if (manifest) {\n router.manifest = [...manifest]\n }\n\n return router\n}\n\nconst pushContainer = <T>(container: RuntimeContainer, fn: () => T): T => {\n const stack = getContainerStack()\n stack.push(container)\n try {\n return fn()\n } finally {\n stack.pop()\n }\n}\n\nexport const withRuntimeContainer = pushContainer\n\nconst withRuntimeContextValue = <T>(token: RuntimeContextToken, value: unknown, fn: () => T): T => {\n const stack = getContextValueStack()\n stack.push({\n token,\n value,\n })\n try {\n return fn()\n } finally {\n stack.pop()\n }\n}\n\nconst pushFrame = <T>(frame: RenderFrame, fn: () => T): T => {\n const stack = getFrameStack()\n stack.push(frame)\n try {\n return fn()\n } finally {\n stack.pop()\n }\n}\n\nconst allocateScopeId = (container: RuntimeContainer) => `sc${container.nextScopeId++}`\n\nexport const ensureRuntimeElementId = (container: RuntimeContainer, element: Element) => {\n const existingId = element.getAttribute('data-eid')\n if (existingId) {\n return existingId\n }\n const nextId = `e${container.nextElementId++}`\n element.setAttribute('data-eid', nextId)\n return nextId\n}\n\nexport const findRuntimeElement = (\n container: RuntimeContainer,\n elementId: string,\n): Element | null => {\n const root = container.rootElement ?? container.doc?.body\n if (!root) {\n return null\n }\n if (root.getAttribute('data-eid') === elementId) {\n return root\n }\n return root.querySelector(`[data-eid=\"${elementId}\"]`)\n}\n\nconst registerScope = (container: RuntimeContainer, values: unknown[]): string => {\n const id = allocateScopeId(container)\n container.scopes.set(\n id,\n values.map((value) => serializeRuntimeValue(container, value)),\n )\n return id\n}\n\nconst registerSerializedScope = (container: RuntimeContainer, values: SerializedValue[]) => {\n const id = allocateScopeId(container)\n container.scopes.set(id, [...values])\n return id\n}\n\nconst materializeSymbolReference = (\n container: RuntimeContainer,\n symbolId: string,\n scopeId: string,\n) => {\n const fn = (...args: unknown[]) => {\n void loadSymbol(container, symbolId).then((module) =>\n module.default(materializeScope(container, scopeId), ...args),\n )\n }\n Object.defineProperty(fn, 'name', {\n configurable: true,\n value: `eclipsa$${symbolId}`,\n })\n return fn\n}\n\nconst materializeScope = (container: RuntimeContainer, scopeId: string): unknown[] => {\n const slots = container.scopes.get(scopeId)\n if (!slots) {\n throw new Error(`Missing scope ${scopeId}.`)\n }\n return slots.map((slot) => deserializeRuntimeValue(container, slot))\n}\n\nconst createFrame = (\n container: RuntimeContainer,\n component: ComponentState,\n mode: RenderFrame['mode'],\n options?: {\n effectCleanupSlot?: CleanupSlot\n reuseExistingDom?: boolean\n reuseProjectionSlotDom?: boolean\n },\n): RenderFrame => ({\n childCursor: 0,\n component,\n container,\n effectCleanupSlot: options?.effectCleanupSlot ?? component.renderEffectCleanupSlot,\n insertCursor: 0,\n keyedRangeCursor: 0,\n keyedRangeScopeStack: [],\n mountCallbacks: [],\n mode,\n projectionState: {\n counters: new Map(),\n reuseExistingDom: options?.reuseExistingDom ?? false,\n reuseProjectionSlotDom: options?.reuseProjectionSlotDom ?? false,\n },\n scopedStyles: [],\n signalCursor: 0,\n visibleCursor: 0,\n visitedDescendants: new Set(),\n watchCursor: 0,\n})\n\nconst createComponentId = (\n container: RuntimeContainer,\n parentId: string | null,\n childIndex: number,\n) => {\n if (!parentId || parentId === ROOT_COMPONENT_ID) {\n return `c${childIndex}`\n }\n return `${parentId}.${childIndex}`\n}\n\nconst getOrCreateComponentState = (\n container: RuntimeContainer,\n id: string,\n symbol: string,\n parentId: string | null,\n): ComponentState => {\n const existing = container.components.get(id)\n if (existing) {\n existing.parentId = parentId\n existing.symbol = symbol\n return existing\n }\n const component: ComponentState = {\n active: false,\n didMount: false,\n external: undefined,\n externalSlotHtml: null,\n externalSlotDom: null,\n externalInstance: undefined,\n externalMeta: null,\n id,\n mountCleanupSlots: [],\n optimizedRoot: false,\n parentId,\n prefersEffectOnlyLocalSignalWrites: false,\n props: {},\n projectionSlots: null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n reuseExistingDomOnActivate: true,\n reuseProjectionSlotDomOnActivate: false,\n scopeId: registerScope(container, []),\n signalIds: [],\n symbol,\n suspensePromise: null,\n visibleCount: 0,\n watchCount: 0,\n }\n container.components.set(id, component)\n return component\n}\n\nconst resetComponentForSymbolChange = (\n container: RuntimeContainer,\n component: ComponentState,\n meta: ComponentMeta,\n) => {\n disposeComponentMountCleanups(component)\n disposeCleanupSlot(component.renderEffectCleanupSlot)\n component.renderEffectCleanupSlot = createCleanupSlot()\n component.didMount = false\n component.external = meta.external\n component.externalSlotHtml = null\n component.externalSlotDom = null\n component.optimizedRoot = meta.optimizedRoot === true\n component.prefersEffectOnlyLocalSignalWrites = false\n component.projectionSlots = meta.projectionSlots ?? null\n component.rawProps = null\n component.externalInstance = undefined\n component.externalMeta = null\n component.scopeId = registerScope(container, meta.captures())\n component.signalIds = []\n component.suspensePromise = null\n pruneComponentVisibles(container, component, 0)\n pruneComponentWatches(container, component, 0)\n}\n\nconst createWatchId = (componentId: string, watchIndex: number) => `${componentId}:w${watchIndex}`\nconst createVisibleId = (componentId: string, visibleIndex: number) =>\n `${componentId}:v${visibleIndex}`\n\nconst getOrCreateWatchState = (\n container: RuntimeContainer,\n id: string,\n componentId: string,\n): WatchState => {\n const existing = container.watches.get(id)\n if (existing) {\n existing.componentId = componentId\n return existing\n }\n const effect: ReactiveEffect = {\n fn() {},\n signals: new Set(),\n }\n const watch: WatchState = {\n cleanupSlot: createCleanupSlot(),\n componentId,\n effect,\n id,\n mode: 'dynamic',\n pending: null,\n resumed: false,\n run: null,\n scopeId: registerScope(container, []),\n symbol: '',\n track: null,\n }\n effect.fn = () => {\n if (watch.run) {\n watch.run()\n return\n }\n if (!container.doc) {\n return\n }\n const scheduled = (watch.pending ?? Promise.resolve()).then(async () => {\n disposeCleanupSlot(watch.cleanupSlot)\n const module = await loadSymbol(container, watch.symbol)\n const scope = materializeScope(container, watch.scopeId)\n await withClientContainer(container, () => {\n if (watch.mode === 'dynamic') {\n collectTrackedDependencies(effect, () => {\n withCleanupSlot(watch.cleanupSlot, () => {\n module.default(scope)\n })\n })\n return\n }\n collectTrackedDependencies(effect, () => {\n module.default(scope, 'track')\n })\n withCleanupSlot(watch.cleanupSlot, () => {\n module.default(scope, 'run')\n })\n })\n await flushDirtyComponents(container)\n })\n const queued = scheduled.finally(() => {\n if (watch.pending === queued) {\n watch.pending = null\n }\n })\n watch.pending = queued\n }\n container.watches.set(id, watch)\n return watch\n}\n\nconst getOrCreateVisibleState = (\n container: RuntimeContainer,\n id: string,\n componentId: string,\n): VisibleState => {\n const existing = container.visibles.get(id)\n if (existing) {\n existing.componentId = componentId\n return existing\n }\n\n const visible: VisibleState = {\n cleanupSlot: createCleanupSlot(),\n componentId,\n done: false,\n id,\n pending: null,\n run: null,\n scopeId: registerScope(container, []),\n symbol: '',\n }\n container.visibles.set(id, visible)\n return visible\n}\n\nconst clearComponentSubscriptions = (container: RuntimeContainer, componentId: string) => {\n for (const record of container.signals.values()) {\n record.subscribers.delete(componentId)\n }\n}\n\nconst disposeExternalComponentInstance = (component: ComponentState) => {\n if (!component.externalMeta || component.externalInstance === undefined) {\n component.externalInstance = undefined\n component.externalMeta = null\n return\n }\n\n void component.externalMeta.unmount(component.externalInstance)\n component.externalInstance = undefined\n component.externalMeta = null\n}\n\nconst disposeComponentMountCleanups = (component: ComponentState) => {\n disposeExternalComponentInstance(component)\n disposeCleanupSlot(component.renderEffectCleanupSlot)\n component.renderEffectCleanupSlot = createCleanupSlot()\n const cleanupSlots = [...component.mountCleanupSlots].reverse()\n component.mountCleanupSlots = []\n for (const cleanupSlot of cleanupSlots) {\n disposeCleanupSlot(cleanupSlot)\n }\n}\n\nconst removeWatchState = (container: RuntimeContainer, watchId: string) => {\n const watch = container.watches.get(watchId)\n if (!watch) {\n return\n }\n disposeCleanupSlot(watch.cleanupSlot)\n clearEffectSignals(watch.effect)\n container.watches.delete(watchId)\n}\n\nconst removeVisibleState = (container: RuntimeContainer, visibleId: string) => {\n const visible = container.visibles.get(visibleId)\n if (visible) {\n disposeCleanupSlot(visible.cleanupSlot)\n }\n container.visibles.delete(visibleId)\n}\n\nconst resetVisibleState = (visible: VisibleState) => {\n disposeCleanupSlot(visible.cleanupSlot)\n visible.cleanupSlot = createCleanupSlot()\n visible.done = false\n visible.pending = null\n}\n\nconst resetComponentVisibleStates = (container: RuntimeContainer, componentId: string) => {\n const targetIds = new Set<string>([componentId, ...collectDescendantIds(container, componentId)])\n\n for (const visible of container.visibles.values()) {\n if (!targetIds.has(visible.componentId)) {\n continue\n }\n resetVisibleState(visible)\n }\n}\n\nconst pruneComponentWatches = (\n container: RuntimeContainer,\n component: ComponentState,\n nextCount: number,\n) => {\n for (let index = nextCount; index < component.watchCount; index++) {\n removeWatchState(container, createWatchId(component.id, index))\n }\n component.watchCount = nextCount\n}\n\nconst pruneComponentVisibles = (\n container: RuntimeContainer,\n component: ComponentState,\n nextCount: number,\n) => {\n for (let index = nextCount; index < component.visibleCount; index++) {\n removeVisibleState(container, createVisibleId(component.id, index))\n }\n component.visibleCount = nextCount\n}\n\nconst isDescendantOf = (parentId: string, candidateId: string) =>\n candidateId.startsWith(`${parentId}.`)\n\nconst collectDescendantIds = (container: RuntimeContainer, componentId: string) =>\n [...container.components.keys()].filter((candidate) => isDescendantOf(componentId, candidate))\n\nconst expandComponentIdsToDescendants = (\n container: RuntimeContainer,\n componentIds: Iterable<string>,\n) => {\n const expanded = new Set<string>()\n\n for (const componentId of componentIds) {\n if (expanded.has(componentId)) {\n continue\n }\n expanded.add(componentId)\n for (const descendantId of collectDescendantIds(container, componentId)) {\n expanded.add(descendantId)\n }\n }\n\n return expanded\n}\n\nconst pruneRemovedComponents = (\n container: RuntimeContainer,\n componentId: string,\n keep: Set<string>,\n) => {\n for (const descendantId of collectDescendantIds(container, componentId)) {\n if (keep.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n const descendant = container.components.get(descendantId)\n if (descendant) {\n disposeComponentMountCleanups(descendant)\n pruneComponentVisibles(container, descendant, 0)\n pruneComponentWatches(container, descendant, 0)\n }\n container.components.delete(descendantId)\n }\n}\n\nconst scheduleMicrotask = (fn: () => void) => {\n if (typeof queueMicrotask === 'function') {\n queueMicrotask(fn)\n return\n }\n Promise.resolve().then(fn)\n}\n\nconst scheduleInteractivePrefetchCheck = (container: RuntimeContainer) => {\n if (\n container.interactivePrefetchCheckQueued ||\n !container.doc ||\n typeof container.doc.querySelectorAll !== 'function'\n ) {\n return\n }\n\n container.interactivePrefetchCheckQueued = true\n scheduleMicrotask(() => {\n container.interactivePrefetchCheckQueued = false\n const doc = container.doc\n if (!doc || typeof doc.querySelectorAll !== 'function') {\n return\n }\n\n for (const element of doc.querySelectorAll(INTERACTIVE_PREFETCH_SELECTOR)) {\n if (!isElementNode(element)) {\n continue\n }\n prefetchElementSymbols(container, element, INTERACTIVE_PREFETCH_EVENT_NAMES)\n }\n })\n}\n\nconst scheduleVisibleCallbacksCheck = (container: RuntimeContainer) => {\n scheduleInteractivePrefetchCheck(container)\n if (container.visibilityCheckQueued || container.visibles.size === 0 || !container.doc) {\n return\n }\n\n ensureVisibilityListeners(container)\n container.visibilityCheckQueued = true\n const run = () => {\n container.visibilityCheckQueued = false\n void flushVisibleCallbacks(container)\n }\n\n const view = container.doc.defaultView\n if (view && typeof view.requestAnimationFrame === 'function') {\n view.requestAnimationFrame(() => run())\n return\n }\n\n scheduleMicrotask(run)\n}\n\nconst rectIntersectsViewport = (\n view: { innerHeight?: number; innerWidth?: number },\n rect: { bottom: number; left: number; right: number; top: number },\n) => {\n const viewportHeight = view.innerHeight ?? 0\n const viewportWidth = view.innerWidth ?? 0\n return rect.bottom > 0 && rect.right > 0 && rect.top < viewportHeight && rect.left < viewportWidth\n}\n\nconst isBoundaryVisible = (doc: Document, start: Comment, end: Comment) => {\n const view = doc.defaultView\n if (typeof doc.createRange !== 'function' || !view) {\n return false\n }\n\n const range = doc.createRange()\n range.setStartAfter(start)\n range.setEndBefore(end)\n\n const rects = range.getClientRects()\n if (rects.length === 0) {\n return rectIntersectsViewport(view, range.getBoundingClientRect())\n }\n\n for (let index = 0; index < rects.length; index++) {\n const rect = rects[index]\n if (rectIntersectsViewport(view, rect)) {\n return true\n }\n }\n return false\n}\n\nconst runVisibleCallback = async (container: RuntimeContainer, visible: VisibleState) => {\n if (visible.done) {\n return\n }\n\n visible.done = true\n const pending = Promise.resolve()\n .then(async () => {\n if (visible.run) {\n await withClientContainer(container, async () => {\n await withCleanupSlot(visible.cleanupSlot, () => visible.run?.())\n })\n } else {\n const module = await loadSymbol(container, visible.symbol)\n await withClientContainer(container, async () => {\n await withCleanupSlot(visible.cleanupSlot, () =>\n module.default(materializeScope(container, visible.scopeId)),\n )\n })\n }\n await flushDirtyComponents(container)\n scheduleVisibleCallbacksCheck(container)\n })\n .finally(() => {\n if (visible.pending === pending) {\n visible.pending = null\n }\n })\n\n visible.pending = pending\n await pending\n}\n\nconst flushVisibleCallbacks = async (container: RuntimeContainer) => {\n if (!container.doc || container.visibles.size === 0) {\n return\n }\n\n for (const visible of Array.from(container.visibles.values())) {\n if (visible.done || visible.pending) {\n continue\n }\n\n const component = container.components.get(visible.componentId)\n if (!component?.start || !component.end) {\n continue\n }\n\n if (!isBoundaryVisible(container.doc, component.start, component.end)) {\n continue\n }\n\n await runVisibleCallback(container, visible)\n }\n}\n\nconst ensureVisibilityListeners = (container: RuntimeContainer) => {\n if (container.visibilityListenersCleanup || !container.doc) {\n return\n }\n\n const doc = container.doc\n const onVisibilityChange = () => {\n scheduleVisibleCallbacksCheck(container)\n }\n\n doc.addEventListener('scroll', onVisibilityChange, true)\n doc.defaultView?.addEventListener('resize', onVisibilityChange)\n\n container.visibilityListenersCleanup = () => {\n doc.removeEventListener('scroll', onVisibilityChange, true)\n doc.defaultView?.removeEventListener('resize', onVisibilityChange)\n container.visibilityListenersCleanup = null\n }\n}\n\nconst scheduleMountCallbacks = (\n container: RuntimeContainer,\n component: ComponentState,\n callbacks: Array<() => void>,\n) => {\n if (component.didMount || callbacks.length === 0) {\n return\n }\n component.didMount = true\n scheduleMicrotask(() => {\n void withClientContainer(container, () => {\n for (const callback of callbacks) {\n const cleanupSlot = createCleanupSlot()\n component.mountCleanupSlots.push(cleanupSlot)\n withCleanupSlot(cleanupSlot, callback)\n }\n })\n .then(() => flushDirtyComponents(container))\n .then(() => {\n scheduleVisibleCallbacksCheck(container)\n })\n })\n}\n\nconst scheduleExternalComponentMount = (\n container: RuntimeContainer,\n component: ComponentState,\n external: ExternalComponentMeta,\n props: Record<string, unknown>,\n) => {\n if (component.didMount) {\n return\n }\n component.didMount = true\n scheduleMicrotask(() => {\n const host = getExternalRoot(component)\n if (!host) {\n return\n }\n void withClientContainer(container, async () => {\n syncExternalProjectionSlotDom(container, component, props, host)\n await syncExternalComponentInstance(component, external, props, host)\n syncExternalProjectionSlotDom(container, component, props, host)\n rebindExternalHost(container, host)\n scheduleExternalHostRebind(container, host)\n await flushDirtyComponents(container)\n scheduleVisibleCallbacksCheck(container)\n })\n })\n}\n\nconst rebindExternalHost = (container: RuntimeContainer, host: HTMLElement) => {\n if (!host.parentNode || !('querySelectorAll' in host.parentNode)) {\n return\n }\n bindComponentBoundaries(container, host.parentNode as ParentNode)\n restoreSignalRefs(container, host.parentNode as ParentNode)\n bindRouterLinks(container, host.parentNode as ParentNode)\n}\n\nconst scheduleExternalHostRebind = (container: RuntimeContainer, host: HTMLElement) => {\n const schedule =\n container.doc?.defaultView?.setTimeout?.bind(container.doc.defaultView) ??\n (typeof setTimeout === 'function' ? setTimeout : null)\n if (!schedule) {\n return\n }\n for (const delay of [0, 16, 100]) {\n schedule(() => {\n if (!host.isConnected) {\n return\n }\n rebindExternalHost(container, host)\n }, delay)\n }\n}\n\nconst collectProjectionSlotRanges = (roots: Node[]) => {\n const starts = new Map<string, Comment>()\n const ranges = new Map<string, { end: Comment; start: Comment }>()\n\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const commentNode = node as Comment\n const marker = parseProjectionSlotMarker(commentNode.data)\n if (marker) {\n if (marker.kind === 'start') {\n starts.set(marker.key, commentNode)\n } else {\n const startNode = starts.get(marker.key)\n if (startNode) {\n ranges.set(marker.key, { end: commentNode, start: startNode })\n }\n }\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ranges\n}\n\nconst collectComponentBoundaryIds = (roots: Node[]) => {\n const ids = new Set<string>()\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const marker = parseComponentBoundaryMarker((node as Comment).data)\n if (marker) {\n ids.add(marker.id)\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ids\n}\n\nconst collectComponentBoundaryRanges = (roots: Node[]) => {\n const starts = new Map<string, Comment>()\n const ranges = new Map<string, { end: Comment; start: Comment }>()\n\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const commentNode = node as Comment\n const marker = parseComponentBoundaryMarker(commentNode.data)\n if (marker) {\n if (marker.kind === 'start') {\n starts.set(marker.id, commentNode)\n } else {\n const startNode = starts.get(marker.id)\n if (startNode) {\n ranges.set(marker.id, { end: commentNode, start: startNode })\n }\n }\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ranges\n}\n\nconst createKeyedRangeIdentity = (scope: string, key: string) => JSON.stringify([scope, key])\n\nconst collectKeyedRangeRanges = (roots: Node[]) => {\n const starts = new Map<string, Comment>()\n const ranges = new Map<string, { end: Comment; start: Comment }>()\n\n const visit = (node: Node) => {\n if (typeof Comment !== 'undefined' ? node instanceof Comment : (node as Node).nodeType === 8) {\n const commentNode = node as Comment\n const marker = parseKeyedRangeMarker(commentNode.data)\n if (marker) {\n const identity = createKeyedRangeIdentity(marker.scope, marker.key)\n if (marker.kind === 'start') {\n starts.set(identity, commentNode)\n } else {\n const startNode = starts.get(identity)\n if (startNode) {\n ranges.set(identity, { end: commentNode, start: startNode })\n }\n }\n }\n }\n for (const child of Array.from((node.childNodes ?? []) as unknown as Iterable<Node>)) {\n visit(child)\n }\n }\n\n for (const root of roots) {\n visit(root)\n }\n\n return ranges\n}\n\nconst collectBoundaryRangeNodes = (start: Comment, end: Comment) => {\n const nodes: Node[] = [start]\n let cursor: Node | null = start.nextSibling\n while (cursor) {\n nodes.push(cursor)\n if (cursor === end) {\n return nodes\n }\n cursor = cursor.nextSibling\n }\n return []\n}\n\nconst canReuseNodeAsIs = (current: Node, next: Node): boolean => {\n if (current.nodeType !== next.nodeType) {\n return false\n }\n\n if (current.nodeType === DOM_TEXT_NODE && next.nodeType === DOM_TEXT_NODE) {\n return current.textContent === next.textContent\n }\n\n if (\n (typeof Comment !== 'undefined'\n ? current instanceof Comment\n : current.nodeType === DOM_COMMENT_NODE) &&\n (typeof Comment !== 'undefined' ? next instanceof Comment : next.nodeType === DOM_COMMENT_NODE)\n ) {\n const currentComment = current as Comment\n const nextComment = next as Comment\n const currentBoundary = parseComponentBoundaryMarker(currentComment.data)\n const nextBoundary = parseComponentBoundaryMarker(nextComment.data)\n if (currentBoundary || nextBoundary) {\n if (!currentBoundary || !nextBoundary) {\n return false\n }\n if (currentBoundary.id !== nextBoundary.id || currentBoundary.kind !== nextBoundary.kind) {\n return false\n }\n return nextBoundary.kind !== 'start' || !didComponentBoundaryChange(nextComment)\n }\n return currentComment.data === nextComment.data\n }\n\n if (!isElementNode(current) || !isElementNode(next) || current.tagName !== next.tagName) {\n return false\n }\n\n const currentNames = current.getAttributeNames()\n const nextNames = next.getAttributeNames()\n if (currentNames.length !== nextNames.length) {\n return false\n }\n for (const name of currentNames) {\n if (current.getAttribute(name) !== next.getAttribute(name)) {\n return false\n }\n }\n if (\n isHTMLInputElementNode(current) &&\n isHTMLInputElementNode(next) &&\n current.checked !== next.checked\n ) {\n return false\n }\n if ('value' in current && 'value' in next && current.value !== next.value) {\n return false\n }\n\n const currentChildren = Array.from(current.childNodes)\n const nextChildren = Array.from(next.childNodes)\n if (currentChildren.length !== nextChildren.length) {\n return false\n }\n for (let index = 0; index < currentChildren.length; index += 1) {\n if (!canReuseNodeAsIs(currentChildren[index]!, nextChildren[index]!)) {\n return false\n }\n }\n return true\n}\n\nconst canReuseNodeSequenceAsIs = (currentNodes: Node[], nextNodes: Node[]) => {\n if (currentNodes.length !== nextNodes.length) {\n return false\n }\n for (let index = 0; index < currentNodes.length; index += 1) {\n if (!canReuseNodeAsIs(currentNodes[index]!, nextNodes[index]!)) {\n return false\n }\n }\n return true\n}\n\nconst preserveComponentBoundaryContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const currentRanges = collectComponentBoundaryRanges(currentRoots)\n const nextRanges = collectComponentBoundaryRanges(nextRoots)\n const preservedComponentIds = new Set<string>()\n\n for (const [id, nextRange] of nextRanges) {\n if (didComponentBoundaryChange(nextRange.start)) {\n continue\n }\n const currentRange = currentRanges.get(id)\n if (!currentRange) {\n continue\n }\n\n const movedRoots = collectBoundaryRangeNodes(currentRange.start, currentRange.end)\n if (movedRoots.length === 0) {\n continue\n }\n\n const replacementParent = nextRange.start.parentNode\n if (!replacementParent) {\n continue\n }\n\n for (const node of movedRoots) {\n replacementParent.insertBefore(node, nextRange.start)\n }\n\n let cursor: Node | null = nextRange.start\n while (cursor) {\n const nextSibling: Node | null = cursor.nextSibling\n if (typeof (cursor as Node & { remove?: () => void }).remove === 'function') {\n ;(cursor as Node & { remove: () => void }).remove()\n } else {\n cursor.parentNode?.removeChild(cursor)\n }\n if (cursor === nextRange.end) {\n break\n }\n cursor = nextSibling\n }\n\n preservedComponentIds.add(id)\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n return preservedComponentIds\n}\n\nconst preserveProjectionSlotContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const currentRanges = collectProjectionSlotRanges(currentRoots)\n const nextRanges = collectProjectionSlotRanges(nextRoots)\n const preservedComponentIds = new Set<string>()\n\n const isPlaceholderProjectionBody = (nodes: Node[]) => {\n if (nodes.length === 0) {\n return true\n }\n\n for (let index = 0; index < nodes.length; index += 1) {\n const node = nodes[index]!\n const token = getPatchOpaqueRangeToken(node, 'start')\n if (!token) {\n return false\n }\n\n let endIndex = index + 1\n while (endIndex < nodes.length) {\n const endToken = getPatchOpaqueRangeToken(nodes[endIndex]!, 'end')\n if (endToken && endToken.rangeKind === token.rangeKind && endToken.token === token.token) {\n break\n }\n endIndex += 1\n }\n\n if (endIndex >= nodes.length || endIndex !== index + 1) {\n return false\n }\n\n index = endIndex\n }\n\n return true\n }\n\n for (const [key, nextRange] of nextRanges) {\n const currentRange = currentRanges.get(key)\n if (!currentRange) {\n continue\n }\n\n const nextBodyNodes = getBoundaryChildren(nextRange.start, nextRange.end)\n if (!isPlaceholderProjectionBody(nextBodyNodes)) {\n continue\n }\n\n const movedRoots: Node[] = []\n let cursor = currentRange.start.nextSibling\n while (cursor && cursor !== currentRange.end) {\n const nextSibling = cursor.nextSibling\n movedRoots.push(cursor)\n cursor = nextSibling\n }\n\n if (movedRoots.length === 0) {\n continue\n }\n\n let nextBodyCursor = nextRange.start.nextSibling\n while (nextBodyCursor && nextBodyCursor !== nextRange.end) {\n const nextSibling = nextBodyCursor.nextSibling\n if (typeof (nextBodyCursor as Node & { remove?: () => void }).remove === 'function') {\n ;(nextBodyCursor as Node & { remove: () => void }).remove()\n } else {\n nextBodyCursor.parentNode?.removeChild(nextBodyCursor)\n }\n nextBodyCursor = nextSibling\n }\n\n for (const node of movedRoots) {\n nextRange.end.parentNode?.insertBefore(node, nextRange.end)\n }\n\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n return preservedComponentIds\n}\n\nconst preserveKeyedRangeContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const preservedComponentIds = new Set<string>()\n const currentRanges = collectKeyedRangeRanges(currentRoots)\n const nextRanges = collectKeyedRangeRanges(nextRoots)\n\n for (const [key, nextRange] of nextRanges) {\n const currentRange = currentRanges.get(key)\n if (!currentRange) {\n continue\n }\n\n const currentBodyRoots = getBoundaryChildren(currentRange.start, currentRange.end)\n const nextBodyRoots = getBoundaryChildren(nextRange.start, nextRange.end)\n if (canReuseNodeSequenceAsIs(currentBodyRoots, nextBodyRoots)) {\n const movedRoots = collectBoundaryRangeNodes(currentRange.start, currentRange.end)\n if (movedRoots.length === 0) {\n continue\n }\n\n const replacementParent = nextRange.start.parentNode\n if (!replacementParent) {\n continue\n }\n\n for (const node of movedRoots) {\n replacementParent.insertBefore(node, nextRange.start)\n }\n\n let cursor: Node | null = nextRange.start\n while (cursor) {\n const nextSibling: Node | null = cursor.nextSibling\n if (typeof (cursor as Node & { remove?: () => void }).remove === 'function') {\n ;(cursor as Node & { remove: () => void }).remove()\n } else {\n cursor.parentNode?.removeChild(cursor)\n }\n if (cursor === nextRange.end) {\n break\n }\n cursor = nextSibling\n }\n\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n continue\n }\n\n if (currentBodyRoots.length === 0 && nextBodyRoots.length === 0) {\n continue\n }\n\n for (const componentId of preserveReusableContentInRoots(currentBodyRoots, nextBodyRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n return preservedComponentIds\n}\n\nconst canMatchReusableRoot = (current: Node, next: Node) => {\n if (current.nodeType !== next.nodeType) {\n return false\n }\n\n if (\n (typeof Comment !== 'undefined' ? current instanceof Comment : current.nodeType === 8) &&\n (typeof Comment !== 'undefined' ? next instanceof Comment : next.nodeType === 8)\n ) {\n return (current as Comment).data === (next as Comment).data\n }\n\n if (current.nodeType === DOM_TEXT_NODE && next.nodeType === DOM_TEXT_NODE) {\n return true\n }\n\n return isElementNode(current) && isElementNode(next) && current.tagName === next.tagName\n}\n\nconst preserveExternalRootContents = (current: Node, next: Node) => {\n if (!isElementNode(current) || !isElementNode(next)) {\n return null\n }\n if (\n current.getAttribute(EXTERNAL_ROOT_ATTR) !== 'true' ||\n next.getAttribute(EXTERNAL_ROOT_ATTR) !== 'true'\n ) {\n return null\n }\n if (next.childNodes.length > 0) {\n return new Set<string>()\n }\n\n const movedRoots = [...current.childNodes]\n for (const node of movedRoots) {\n next.appendChild(node)\n }\n return collectComponentBoundaryIds(movedRoots)\n}\n\nconst preserveInsertMarkerContentsInRoots = (currentRoots: Node[], nextRoots: Node[]) => {\n const preservedComponentIds = new Set<string>()\n\n const preserveLists = (currentChildren: Node[], nextChildren: Node[]) => {\n let currentIndex = 0\n\n for (const nextChild of nextChildren) {\n const nextInsertMarker = (\n typeof Comment !== 'undefined' ? nextChild instanceof Comment : nextChild.nodeType === 8\n )\n ? parseInsertMarker((nextChild as Comment).data)\n : null\n if (nextInsertMarker) {\n let markerIndex = -1\n for (let index = currentIndex; index < currentChildren.length; index += 1) {\n const currentChild = currentChildren[index]!\n if (\n !(typeof Comment !== 'undefined'\n ? currentChild instanceof Comment\n : currentChild.nodeType === 8)\n ) {\n continue\n }\n const currentInsertMarker = parseInsertMarker((currentChild as Comment).data)\n if (currentInsertMarker?.key === nextInsertMarker.key) {\n markerIndex = index\n break\n }\n }\n if (markerIndex < 0) {\n continue\n }\n\n const currentMarker = currentChildren[markerIndex]! as Comment\n const explicitCount = getRememberedInsertMarkerNodeCount(currentMarker)\n if (explicitCount === undefined) {\n currentIndex = markerIndex + 1\n continue\n }\n const ownedStartIndex =\n explicitCount >= 0 && markerIndex - explicitCount >= currentIndex\n ? markerIndex - explicitCount\n : currentIndex\n const movedRoots = currentChildren.slice(ownedStartIndex, markerIndex)\n if (collectComponentBoundaryIds(movedRoots).size > 0) {\n currentIndex = markerIndex + 1\n continue\n }\n\n for (const node of movedRoots) {\n nextChild.parentNode?.insertBefore(node, nextChild)\n }\n setRememberedInsertMarkerNodeCount(nextChild as Comment, movedRoots.length)\n\n for (const componentId of collectComponentBoundaryIds(movedRoots)) {\n preservedComponentIds.add(componentId)\n }\n\n currentIndex = markerIndex + 1\n continue\n }\n\n let matchedIndex = -1\n for (let index = currentIndex; index < currentChildren.length; index += 1) {\n if (canMatchReusableRoot(currentChildren[index]!, nextChild)) {\n matchedIndex = index\n break\n }\n }\n if (matchedIndex < 0) {\n continue\n }\n\n const currentChild = currentChildren[matchedIndex]!\n if (isElementNode(currentChild) && isElementNode(nextChild)) {\n const preservedExternalRootIds = preserveExternalRootContents(currentChild, nextChild)\n if (preservedExternalRootIds) {\n for (const componentId of preservedExternalRootIds) {\n preservedComponentIds.add(componentId)\n }\n currentIndex = matchedIndex + 1\n continue\n }\n preserveLists(Array.from(currentChild.childNodes), Array.from(nextChild.childNodes))\n }\n currentIndex = matchedIndex + 1\n }\n }\n\n preserveLists(currentRoots, nextRoots)\n\n return preservedComponentIds\n}\n\nexport const preserveReusableContentInRoots = (\n currentRoots: Node[],\n nextRoots: Node[],\n options?: {\n preserveProjectionSlots?: boolean\n },\n) => {\n const preservedComponentIds = new Set<string>()\n\n // Preserve keyed range bodies before nested component boundaries so keyed list reuse\n // happens within the right render scope before standalone boundary preservation runs.\n for (const componentId of preserveKeyedRangeContentsInRoots(currentRoots, nextRoots)) {\n preservedComponentIds.add(componentId)\n }\n\n for (const componentId of preserveComponentBoundaryContentsInRoots(currentRoots, nextRoots)) {\n preservedComponentIds.add(componentId)\n }\n\n if (options?.preserveProjectionSlots ?? true) {\n for (const componentId of preserveProjectionSlotContentsInRoots(currentRoots, nextRoots)) {\n preservedComponentIds.add(componentId)\n }\n }\n\n for (const componentId of preserveInsertMarkerContentsInRoots(currentRoots, nextRoots)) {\n preservedComponentIds.add(componentId)\n }\n\n return preservedComponentIds\n}\n\nconst replaceProjectionSlotContents = (start: Comment, end: Comment, nodes: Node[]) => {\n let cursor = start.nextSibling\n while (cursor && cursor !== end) {\n const next = cursor.nextSibling\n cursor.remove()\n cursor = next\n }\n for (const node of nodes) {\n end.parentNode?.insertBefore(node, end)\n }\n rememberManagedAttributesForNodes(nodes)\n}\n\nconst replaceBoundaryContents = (\n start: Comment,\n end: Comment,\n nodes: Node[],\n options?: {\n preserveProjectionSlots?: boolean\n },\n) => {\n const preservedComponentIds = preserveReusableContentInRoots(\n getBoundaryChildren(start, end),\n nodes,\n {\n preserveProjectionSlots: options?.preserveProjectionSlots ?? true,\n },\n )\n let cursor = start.nextSibling\n while (cursor && cursor !== end) {\n const next = cursor.nextSibling\n cursor.remove()\n cursor = next\n }\n for (const node of nodes) {\n end.parentNode?.insertBefore(node, end)\n }\n rememberManagedAttributesForNodes(nodes)\n\n return preservedComponentIds\n}\n\nexport const syncManagedElementAttributes = (current: Element, next: Element) => {\n const nextNames = new Set(next.getAttributeNames())\n const previousNames = getManagedAttributeSnapshot(current) ?? new Set<string>()\n\n for (const name of previousNames) {\n if (!nextNames.has(name)) {\n current.removeAttribute(name)\n }\n }\n\n for (const name of nextNames) {\n const nextValue = next.getAttribute(name)\n if (nextValue !== null && current.getAttribute(name) !== nextValue) {\n current.setAttribute(name, nextValue)\n }\n }\n\n replaceManagedAttributeSnapshot(current, nextNames)\n\n if (isHTMLInputElementNode(current) && isHTMLInputElementNode(next)) {\n if (current.checked !== next.checked) {\n current.checked = next.checked\n }\n }\n if ('value' in current && 'value' in next && current.value !== next.value) {\n if (current.value !== next.value) {\n current.value = next.value\n }\n }\n}\n\nexport const tryPatchElementShellInPlace = (current: Element, next: Element) => {\n if (current.tagName !== next.tagName) {\n return false\n }\n\n syncManagedElementAttributes(current, next)\n preserveReusableContentInRoots(Array.from(current.childNodes), Array.from(next.childNodes))\n while (current.firstChild) {\n current.firstChild.remove()\n }\n while (next.firstChild) {\n current.appendChild(next.firstChild)\n }\n rememberManagedAttributesForNodes(Array.from(current.childNodes))\n return true\n}\n\nconst collectInsertRangeOwnedNodes = (marker: Comment, ownedNodeCount: number) => {\n if (!marker.parentNode || ownedNodeCount === 0) {\n return [] as Node[]\n }\n\n const nodes: Node[] = []\n let cursor: Node | null = marker.previousSibling\n while (cursor && nodes.length < ownedNodeCount) {\n nodes.unshift(cursor)\n cursor = cursor.previousSibling\n }\n\n return nodes.length === ownedNodeCount ? nodes : []\n}\n\nconst replaceInsertRangeOwnedNodes = (\n currentMarker: Comment,\n currentOwnedNodes: Node[],\n nextOwnedNodes: Node[],\n) => {\n const parent = currentMarker.parentNode\n if (!parent) {\n return false\n }\n\n preserveReusableContentInRoots(currentOwnedNodes, nextOwnedNodes)\n\n for (const node of currentOwnedNodes) {\n if (typeof (node as Node & { remove?: () => void }).remove === 'function') {\n ;(node as Node & { remove: () => void }).remove()\n continue\n }\n node.parentNode?.removeChild(node)\n }\n for (const node of nextOwnedNodes) {\n parent.insertBefore(node, currentMarker)\n }\n\n rememberManagedAttributesForNodes(parent.childNodes)\n setRememberedInsertMarkerNodeCount(currentMarker, nextOwnedNodes.length)\n return true\n}\n\ntype PatchSequenceUnit =\n | { kind: 'node'; node: Node; nodeCount: number }\n | {\n bodyNodes: Node[]\n end: Comment\n kind: 'opaque-range'\n nodeCount: number\n rangeKind: 'component-boundary' | 'keyed' | 'projection-slot'\n start: Comment\n token: string\n }\n | {\n kind: 'insert-range'\n marker: Comment\n nodeCount: number\n token: string\n }\n\nconst getPatchOpaqueRangeToken = (node: Node, kind: 'start' | 'end') => {\n if (!(typeof Comment !== 'undefined' ? node instanceof Comment : node.nodeType === 8)) {\n return null\n }\n\n const comment = node as Comment\n const boundary = parseComponentBoundaryMarker(comment.data)\n if (boundary?.kind === kind) {\n return {\n rangeKind: 'component-boundary' as const,\n token: `component-boundary:${boundary.id}`,\n }\n }\n\n const projectionSlot = parseProjectionSlotMarker(comment.data)\n if (projectionSlot?.kind === kind) {\n return {\n rangeKind: 'projection-slot' as const,\n token: `projection-slot:${projectionSlot.key}`,\n }\n }\n\n const keyedRange = parseKeyedRangeMarker(comment.data)\n if (keyedRange?.kind === kind) {\n return {\n rangeKind: 'keyed' as const,\n token: `keyed:${createKeyedRangeIdentity(keyedRange.scope, keyedRange.key)}`,\n }\n }\n\n return null\n}\n\nconst collectPatchSequenceUnits = (nodes: Node[]): PatchSequenceUnit[] | null => {\n const units: PatchSequenceUnit[] = []\n\n for (let index = 0; index < nodes.length; index += 1) {\n const node = nodes[index]!\n const token = getPatchOpaqueRangeToken(node, 'start')\n if (!token) {\n const insertMarker =\n (typeof Comment !== 'undefined' ? node instanceof Comment : node.nodeType === 8) &&\n parseInsertMarker((node as Comment).data)\n if (!insertMarker) {\n units.push({ kind: 'node', node, nodeCount: 1 })\n continue\n }\n\n const ownedNodeCount = getRememberedInsertMarkerNodeCount(node as Comment)\n let remaining = ownedNodeCount\n while (remaining > 0) {\n const previous = units[units.length - 1]\n if (!previous || previous.nodeCount > remaining) {\n return null\n }\n remaining -= previous.nodeCount\n units.pop()\n }\n\n units.push({\n kind: 'insert-range',\n marker: node as Comment,\n nodeCount: ownedNodeCount + 1,\n token: `insert:${insertMarker.key}`,\n })\n continue\n }\n\n let endIndex = index + 1\n while (endIndex < nodes.length) {\n const endToken = getPatchOpaqueRangeToken(nodes[endIndex]!, 'end')\n if (endToken && endToken.rangeKind === token.rangeKind && endToken.token === token.token) {\n break\n }\n endIndex += 1\n }\n if (endIndex >= nodes.length) {\n units.push({ kind: 'node', node, nodeCount: 1 })\n continue\n }\n\n units.push({\n bodyNodes: nodes.slice(index + 1, endIndex),\n end: nodes[endIndex]! as Comment,\n kind: 'opaque-range',\n nodeCount: endIndex - index + 1,\n rangeKind: token.rangeKind,\n start: node as Comment,\n token: token.token,\n })\n index = endIndex\n }\n\n return units\n}\n\nconst hasStructuredPatchUnits = (nodes: Node[]) => {\n const units = collectPatchSequenceUnits(nodes)\n if (!units) {\n return true\n }\n return units.some((unit) => unit.kind !== 'node')\n}\n\nexport const tryPatchNodeSequenceInPlace = (currentNodes: Node[], nextNodes: Node[]) => {\n const currentUnits = collectPatchSequenceUnits(currentNodes)\n const nextUnits = collectPatchSequenceUnits(nextNodes)\n if (!currentUnits || !nextUnits || currentUnits.length !== nextUnits.length) {\n return false\n }\n\n for (let index = 0; index < currentUnits.length; index += 1) {\n const currentUnit = currentUnits[index]!\n const nextUnit = nextUnits[index]!\n if (currentUnit.kind !== nextUnit.kind) {\n return false\n }\n if (currentUnit.kind === 'insert-range' && nextUnit.kind === 'insert-range') {\n const currentOwnedNodes = collectInsertRangeOwnedNodes(\n currentUnit.marker,\n currentUnit.nodeCount - 1,\n )\n const nextOwnedNodes = collectInsertRangeOwnedNodes(nextUnit.marker, nextUnit.nodeCount - 1)\n if (\n currentUnit.token !== nextUnit.token &&\n (hasStructuredPatchUnits(currentOwnedNodes) || hasStructuredPatchUnits(nextOwnedNodes))\n ) {\n return false\n }\n if (\n currentOwnedNodes.length > 0 ||\n nextOwnedNodes.length > 0 ||\n currentUnit.nodeCount !== nextUnit.nodeCount\n ) {\n if (!tryPatchNodeSequenceInPlace(currentOwnedNodes, nextOwnedNodes)) {\n if (\n !replaceInsertRangeOwnedNodes(currentUnit.marker, currentOwnedNodes, nextOwnedNodes)\n ) {\n return false\n }\n } else {\n setRememberedInsertMarkerNodeCount(currentUnit.marker, nextOwnedNodes.length)\n }\n }\n continue\n }\n if (currentUnit.kind === 'opaque-range' && nextUnit.kind === 'opaque-range') {\n if (currentUnit.token !== nextUnit.token || currentUnit.rangeKind !== nextUnit.rangeKind) {\n return false\n }\n if (currentUnit.rangeKind === 'component-boundary') {\n if (didComponentBoundarySymbolChange(nextUnit.start)) {\n return false\n }\n if (didComponentBoundaryPropsChange(nextUnit.start)) {\n const nextRangeNodes = nextUnit.bodyNodes\n if (\n !tryPatchBoundaryContentsInPlace(currentUnit.start, currentUnit.end, nextRangeNodes)\n ) {\n replaceBoundaryContents(currentUnit.start, currentUnit.end, nextRangeNodes)\n }\n }\n } else if (currentUnit.rangeKind === 'keyed') {\n const nextRangeNodes = nextUnit.bodyNodes\n if (!tryPatchNodeSequenceInPlace(currentUnit.bodyNodes, nextRangeNodes)) {\n replaceBoundaryContents(currentUnit.start, currentUnit.end, nextRangeNodes)\n }\n }\n continue\n }\n if (currentUnit.kind !== 'node' || nextUnit.kind !== 'node') {\n return false\n }\n if (!patchNodeInPlace(currentUnit.node, nextUnit.node)) {\n return false\n }\n }\n\n return true\n}\n\nconst patchNodeInPlace = (current: Node, next: Node): boolean => {\n if (current.nodeType !== next.nodeType) {\n return false\n }\n\n if (current.nodeType === DOM_TEXT_NODE && next.nodeType === DOM_TEXT_NODE) {\n if (current.textContent !== next.textContent) {\n current.textContent = next.textContent\n }\n return true\n }\n\n if (current.nodeType === DOM_COMMENT_NODE && next.nodeType === DOM_COMMENT_NODE) {\n const currentComment = current as Comment\n const nextComment = next as Comment\n const currentIsProjectionSlot = !!parseProjectionSlotMarker(currentComment.data)\n const nextIsProjectionSlot = !!parseProjectionSlotMarker(nextComment.data)\n const currentIsBoundaryMarker = !!parseComponentBoundaryMarker(currentComment.data)\n const nextIsBoundaryMarker = !!parseComponentBoundaryMarker(nextComment.data)\n const currentIsInsertMarker = !!parseInsertMarker(currentComment.data)\n const nextIsInsertMarker = !!parseInsertMarker(nextComment.data)\n if (\n currentIsProjectionSlot ||\n nextIsProjectionSlot ||\n currentIsBoundaryMarker ||\n nextIsBoundaryMarker ||\n currentIsInsertMarker ||\n nextIsInsertMarker\n ) {\n return currentComment.data === nextComment.data\n }\n if (currentComment.data !== nextComment.data) {\n currentComment.data = nextComment.data\n }\n return true\n }\n\n if (!isElementNode(current) || !isElementNode(next) || current.tagName !== next.tagName) {\n return false\n }\n\n if (tryPatchNodeSequenceInPlace(Array.from(current.childNodes), Array.from(next.childNodes))) {\n syncManagedElementAttributes(current, next)\n return true\n }\n\n return tryPatchElementShellInPlace(current, next)\n}\n\nexport const tryPatchBoundaryContentsInPlace = (\n start: Comment,\n end: Comment,\n nextNodes: Node[],\n) => {\n const currentNodes = getBoundaryChildren(start, end)\n return tryPatchNodeSequenceInPlace(currentNodes, nextNodes)\n}\n\nconst collectMountedBoundaryDescendants = (component: ComponentState) =>\n component.start && component.end\n ? collectComponentBoundaryIds(getBoundaryChildren(component.start, component.end))\n : new Set<string>()\n\nconst collectMountedDescendantComponentIds = (\n container: RuntimeContainer,\n component: ComponentState,\n) => expandComponentIdsToDescendants(container, collectMountedBoundaryDescendants(component))\n\nconst collectProjectionSlotComponentIds = (roots: Node[]) => {\n const preserved = new Set<string>()\n for (const range of collectProjectionSlotRanges(roots).values()) {\n for (const componentId of collectComponentBoundaryIds(\n getBoundaryChildren(range.start, range.end),\n )) {\n preserved.add(componentId)\n }\n }\n return preserved\n}\n\nconst collectPreservedProjectionSlotComponentIds = (\n container: RuntimeContainer,\n start: Comment,\n end: Comment,\n) =>\n expandComponentIdsToDescendants(\n container,\n collectProjectionSlotComponentIds(getBoundaryChildren(start, end)),\n )\n\nconst capturePendingFocusRestore = (\n container: RuntimeContainer,\n focusSource?: EventTarget | null,\n): PendingFocusRestore | null => {\n if (!container.doc) {\n return null\n }\n\n const snapshot = captureDocumentFocus(container.doc, focusSource)\n if (!snapshot) {\n return null\n }\n return {\n snapshot,\n }\n}\n\nconst restorePendingFocus = (container: RuntimeContainer, pending: PendingFocusRestore | null) => {\n if (!pending || !container.doc) {\n return\n }\n restorePendingFocusInDocument(container.doc, pending)\n}\n\nlet ssrRenderer: ReturnType<typeof createSSRRenderer> | null = null\n\nconst getSSRRenderer = () => {\n ssrRenderer ??= createSSRRenderer({\n getCurrentContainer,\n isProjectionSlot: (value) => isProjectionSlot(value),\n isRouteSlot: (value) => isRouteSlot(value),\n renderProjectionSlotToString: (value) =>\n renderProjectionSlotToString(value as ProjectionSlotValue),\n renderStringNode,\n resolveRouteSlot: (container, slot) =>\n resolveRouteSlot(container as RuntimeContainer | null, slot as RouteSlotCarrier),\n })\n return ssrRenderer\n}\n\nexport const renderSSRAttr = (name: string, value: unknown) =>\n getSSRRenderer().renderSSRAttr(name, value)\n\nexport const renderSSRValue = (value: unknown): string => getSSRRenderer().renderSSRValue(value)\n\nexport const renderSSRMap = <T>(\n value:\n | readonly T[]\n | {\n map: (callback: (item: T, index: number) => string) => {\n join: (separator: string) => string\n }\n },\n renderItem: (item: T, index: number) => string,\n): string => getSSRRenderer().renderSSRMap(value, renderItem)\n\nconst renderStringArray = (values: readonly (JSX.Element | JSX.Element[])[]) =>\n withActiveKeyedRangeScope(allocateKeyedRangeScope(), () => renderSSRValue(values))\n\nconst renderSSRTemplateNode = (template: JSX.SSRTemplate) => renderSSRValue(template)\n\nconst resolveRenderable = (value: JSX.Element): JSX.Element => {\n let current = value\n while (\n typeof current === 'function' &&\n !getLazyMeta(current) &&\n !getComponentMeta(current) &&\n !getContextProviderMeta(current)\n ) {\n current = current()\n }\n return current\n}\n\nconst nextComponentPosition = (container: RuntimeContainer) => {\n const frame = getCurrentFrame()\n if (!frame) {\n return {\n childIndex: container.rootChildCursor++,\n parentId: ROOT_COMPONENT_ID,\n }\n }\n return {\n childIndex: frame.childCursor++,\n parentId: frame.component.id,\n }\n}\n\nconst registerEventBinding = (\n container: RuntimeContainer,\n descriptor: EventDescriptor | LazyMeta,\n): string => {\n const scopeId = registerScope(container, descriptor.captures())\n return `${descriptor.symbol}:${scopeId}`\n}\n\nconst getRuntimeEventDescriptor = (value: unknown): EventDescriptor | LazyMeta | null =>\n getEventMeta(value) ?? getLazyMeta(value)\n\nconst isForValue = (value: unknown): value is ForValue =>\n !!value && typeof value === 'object' && (value as ForValue).__e_for === true\n\nconst isShowValue = (value: unknown): value is ShowValue =>\n !!value && typeof value === 'object' && (value as ShowValue).__e_show === true\n\nexport const bindRuntimeEvent = (element: Element, eventName: string, value: unknown): boolean => {\n const descriptor = getRuntimeEventDescriptor(value)\n if (!descriptor) {\n return false\n }\n\n const container = getCurrentContainer()\n if (!container) {\n return false\n }\n\n element.setAttribute('data-eid', `e${container.nextElementId++}`)\n element.setAttribute(`data-e-on${eventName}`, registerEventBinding(container, descriptor))\n syncManagedAttributeSnapshot(element, 'data-eid')\n syncManagedAttributeSnapshot(element, `data-e-on${eventName}`)\n return true\n}\n\nconst renderProjectionSlotToString = (slot: ProjectionSlotValue) => {\n const frame = getCurrentFrame()\n const start = createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'start')\n const end = createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'end')\n if (frame?.component.id === slot.componentId && frame.projectionState.reuseExistingDom) {\n return `<!--${start}--><!--${end}-->`\n }\n return `<!--${start}-->${renderStringNode(slot.source as JSX.Element)}<!--${end}-->`\n}\n\nlet unscopedKeyedRangeScopeCounter = 0\n\nconst allocateKeyedRangeScope = () => {\n const frame = getCurrentFrame()\n if (!frame) {\n return `global:${unscopedKeyedRangeScopeCounter++}`\n }\n return `${frame.component.id}:k${frame.keyedRangeCursor++}`\n}\n\nconst withActiveKeyedRangeScope = <T>(scope: string, render: () => T): T => {\n const frame = getCurrentFrame()\n if (!frame) {\n return render()\n }\n frame.keyedRangeScopeStack.push(scope)\n try {\n return render()\n } finally {\n frame.keyedRangeScopeStack.pop()\n }\n}\n\nconst resolveKeyedRangeScope = () => {\n const frame = getCurrentFrame()\n const activeScope =\n frame && frame.keyedRangeScopeStack.length > 0\n ? frame.keyedRangeScopeStack[frame.keyedRangeScopeStack.length - 1]\n : null\n return activeScope ?? allocateKeyedRangeScope()\n}\n\nconst wrapStringWithKeyedRange = (value: string, scope: string, key: string | number | symbol) => {\n const start = createKeyedRangeMarker(scope, key, 'start')\n const end = createKeyedRangeMarker(scope, key, 'end')\n return `<!--${start}-->${value}<!--${end}-->`\n}\n\nconst resolveForItemKey = <T>(\n value: ForValue<T>,\n item: T,\n index: number,\n): string | number | symbol =>\n value.key\n ? value.key(item, index)\n : typeof item === 'string' || typeof item === 'number' || typeof item === 'symbol'\n ? item\n : index\n\nconst stripForChildRootKey = (value: JSX.Element): JSX.Element => {\n const resolved = resolveRenderable(value)\n if (!isRenderObject(resolved) || resolved.key === null || resolved.key === undefined) {\n return resolved\n }\n return {\n ...resolved,\n key: undefined,\n }\n}\n\nconst resolveShowBranch = <T>(value: ShowValue<T>): JSX.Element => {\n const branch = !value.when ? (value.fallback ?? null) : value.children\n return typeof branch === 'function'\n ? (branch as (nextValue: T) => JSX.Element)(value.when)\n : branch\n}\n\nconst renderForValueToString = <T>(value: ForValue<T>): string => {\n if (value.arr.length === 0) {\n return renderStringNode((value.fallback ?? null) as JSX.Element)\n }\n\n const scope = allocateKeyedRangeScope()\n let output = ''\n for (let index = 0; index < value.arr.length; index += 1) {\n const item = value.arr[index]!\n output += wrapStringWithKeyedRange(\n renderStringNode(stripForChildRootKey(value.fn(item, index))),\n scope,\n resolveForItemKey(value, item, index),\n )\n }\n return output\n}\n\nconst renderProjectionSlotToNodes = (slot: ProjectionSlotValue, container: RuntimeContainer) => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n const frame = getCurrentFrame()\n\n const start = container.doc.createComment(\n createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'start'),\n )\n const end = container.doc.createComment(\n createProjectionSlotMarker(slot.componentId, slot.name, slot.occurrence, 'end'),\n )\n if (frame?.component.id === slot.componentId && frame.projectionState.reuseExistingDom) {\n return [start, end]\n }\n return [start, ...renderClientInsertable(slot.source, container), end]\n}\n\nconst createExternalRootHtml = (componentId: string, kind: string, body: string) =>\n `<e-island-root ${EXTERNAL_ROOT_ATTR}=\"true\" ${EXTERNAL_ROOT_COMPONENT_ATTR}=\"${escapeAttr(\n componentId,\n )}\" ${EXTERNAL_ROOT_KIND_ATTR}=\"${escapeAttr(kind)}\">${body}</e-island-root>`\n\nconst createExternalRootNode = (\n container: RuntimeContainer,\n componentId: string,\n kind: string,\n body?: string,\n) => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n const host = container.doc.createElement('e-island-root')\n host.setAttribute(EXTERNAL_ROOT_ATTR, 'true')\n host.setAttribute(EXTERNAL_ROOT_COMPONENT_ATTR, componentId)\n host.setAttribute(EXTERNAL_ROOT_KIND_ATTR, kind)\n if (body) {\n host.innerHTML = body\n }\n return host\n}\n\nconst getExternalRoot = (component: ComponentState) => {\n if (!component.start || !component.end) {\n return null\n }\n let cursor = component.start.nextSibling\n while (cursor && cursor !== component.end) {\n if (isElementNode(cursor) && cursor.getAttribute(EXTERNAL_ROOT_ATTR) === 'true') {\n return cursor as HTMLElement\n }\n cursor = cursor.nextSibling\n }\n return null\n}\n\nconst findExternalSlotHost = (\n host: HTMLElement,\n kind: ExternalComponentDescriptor['kind'],\n name: string,\n) => {\n if (typeof host.querySelectorAll !== 'function') {\n return host.querySelector?.(`${getExternalSlotTag(kind)}[data-e-slot=\"${name}\"]`) ?? null\n }\n const matches = [\n ...host.querySelectorAll<HTMLElement>(`${getExternalSlotTag(kind)}[data-e-slot=\"${name}\"]`),\n ]\n if (matches.length === 0) {\n return null\n }\n for (let index = matches.length - 1; index >= 0; index -= 1) {\n const candidate = matches[index]!\n if (candidate.childNodes.length > 0 || (candidate.innerHTML ?? '') !== '') {\n return candidate\n }\n }\n return matches[0]!\n}\n\nconst captureExternalSlotDom = (component: ComponentState) => {\n if (!component.external) {\n return null\n }\n const host = getExternalRoot(component)\n if (!host || typeof host.querySelector !== 'function') {\n return null\n }\n const captured = new Map<string, Node[]>()\n for (const name of component.external.slots) {\n const slotHost = findExternalSlotHost(host, component.external.kind, name)\n captured.set(name, slotHost ? [...slotHost.childNodes] : [])\n }\n return captured\n}\n\nconst captureExternalSlotHtml = (component: ComponentState) => {\n if (!component.external) {\n return null\n }\n const host = getExternalRoot(component)\n if (!host || typeof host.querySelector !== 'function') {\n return null\n }\n const captured = new Map<string, string>()\n for (const name of component.external.slots) {\n const slotHost = findExternalSlotHost(host, component.external.kind, name)\n captured.set(name, slotHost?.innerHTML ?? '')\n }\n return captured\n}\n\nconst createExternalProjectionSlotOwnerId = (\n componentId: string,\n name: string,\n occurrence: number,\n) => `${componentId}.$slot:${encodeURIComponent(name)}:${occurrence}`\n\nconst renderExternalProjectionSlotNodes = (\n container: RuntimeContainer,\n component: ComponentState,\n name: string,\n occurrence: number,\n source: unknown,\n) => {\n const ownerId = createExternalProjectionSlotOwnerId(component.id, name, occurrence)\n const nodes = renderClientInsertableForOwner(source as Insertable, container, {\n childIndex: 0,\n componentId: ownerId,\n keyedRangeCursor: 0,\n projectionCounters: [],\n })\n return { nodes, ownerId }\n}\n\nconst syncExternalProjectionSlotDom = (\n container: RuntimeContainer,\n component: ComponentState,\n props: Record<string, unknown>,\n host: HTMLElement,\n) => {\n if (!component.external || !component.projectionSlots) {\n return false\n }\n\n const oldDescendants = collectDescendantIds(container, component.id)\n const slotRanges = collectProjectionSlotRanges([host])\n const keptSlotOwners = new Set<string>()\n let changed = false\n\n for (const [name, totalOccurrences] of Object.entries(component.projectionSlots)) {\n for (let occurrence = 0; occurrence < totalOccurrences; occurrence += 1) {\n const rangeKey = createProjectionSlotRangeKey(component.id, name, occurrence)\n const range = slotRanges.get(rangeKey)\n const hasValue = hasProjectionSlotValue(props, name)\n\n if (!hasValue) {\n if (!range) {\n continue\n }\n if (!tryPatchBoundaryContentsInPlace(range.start, range.end, [])) {\n replaceProjectionSlotContents(range.start, range.end, [])\n }\n changed = true\n continue\n }\n\n const slotHost =\n range || occurrence > 0 ? null : findExternalSlotHost(host, component.external.kind, name)\n if (!range && !slotHost) {\n continue\n }\n\n const { nodes, ownerId } = renderExternalProjectionSlotNodes(\n container,\n component,\n name,\n occurrence,\n props[name],\n )\n keptSlotOwners.add(ownerId)\n\n if (range) {\n if (!tryPatchBoundaryContentsInPlace(range.start, range.end, nodes)) {\n replaceProjectionSlotContents(range.start, range.end, nodes)\n }\n changed = true\n continue\n }\n if (!slotHost) {\n continue\n }\n\n while (slotHost.firstChild) {\n slotHost.firstChild.remove()\n }\n\n const start = container.doc!.createComment(\n createProjectionSlotMarker(component.id, name, occurrence, 'start'),\n )\n const end = container.doc!.createComment(\n createProjectionSlotMarker(component.id, name, occurrence, 'end'),\n )\n\n slotHost.appendChild(start)\n for (const node of nodes) {\n slotHost.appendChild(node)\n }\n slotHost.appendChild(end)\n rememberManagedAttributesForNodes([start, ...nodes, end])\n slotRanges.set(rangeKey, { end, start })\n changed = true\n }\n }\n\n if (!changed) {\n return false\n }\n\n bindComponentBoundaries(container, host)\n restoreSignalRefs(container, host)\n bindRouterLinks(container, host)\n\n const keptDescendants = expandComponentIdsToDescendants(container, [\n ...collectComponentBoundaryIds([host]),\n ...keptSlotOwners,\n ])\n pruneRemovedComponents(container, component.id, keptDescendants)\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n\n component.externalSlotDom = captureExternalSlotDom(component)\n component.externalSlotHtml = captureExternalSlotHtml(component)\n return true\n}\n\nconst restoreExternalSlotDom = (component: ComponentState, host: HTMLElement) => {\n if (\n !component.external ||\n !component.externalSlotDom ||\n typeof host.querySelector !== 'function'\n ) {\n return\n }\n for (const [name, nodes] of component.externalSlotDom) {\n const slotHost = findExternalSlotHost(host, component.external.kind, name)\n if (!slotHost || slotHost.childNodes.length > 0 || nodes.length === 0) {\n continue\n }\n for (const node of nodes) {\n slotHost.appendChild(node)\n }\n }\n}\n\nconst escapeRegExp = (value: string) => value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\nconst renderExternalSlotContentToString = (\n componentId: string,\n name: string,\n occurrence: number,\n source: unknown,\n) => {\n if (source === null || source === undefined || source === false) {\n return ''\n }\n return renderProjectionSlotToString(createProjectionSlot(componentId, name, occurrence, source))\n}\n\nconst injectExternalSlotHtml = (\n componentId: string,\n kind: ExternalComponentDescriptor['kind'],\n projectionSlots: Record<string, number> | null,\n props: Record<string, unknown>,\n html: string,\n) => {\n if (!projectionSlots) {\n return html\n }\n\n const slotTag = getExternalSlotTag(kind)\n let nextHtml = html\n for (const [name, totalOccurrences] of Object.entries(projectionSlots)) {\n if (!hasProjectionSlotValue(props, name)) {\n continue\n }\n const pattern = new RegExp(\n `<${slotTag}([^>]*?)data-e-slot=([\"'])${escapeRegExp(name)}\\\\2([^>]*)>([\\\\s\\\\S]*?)</${slotTag}>`,\n )\n for (let occurrence = 0; occurrence < totalOccurrences; occurrence += 1) {\n const slotHtml = renderExternalSlotContentToString(componentId, name, occurrence, props[name])\n nextHtml = nextHtml.replace(\n pattern,\n `<${slotTag}$1data-e-slot=\"${name}\"$3>${slotHtml}</${slotTag}>`,\n )\n }\n }\n\n return nextHtml\n}\n\nconst renderExternalComponentHtml = (\n container: RuntimeContainer,\n componentId: string,\n external: ExternalComponentMeta,\n props: Record<string, unknown>,\n projectionSlots: Record<string, number> | null,\n) => {\n const cacheKey = `${componentId}:${external.kind}`\n const cached = container.externalRenderCache.get(cacheKey)\n if (cached?.status === 'resolved') {\n return injectExternalSlotHtml(\n componentId,\n external.kind,\n projectionSlots,\n props,\n cached.html ?? '',\n )\n }\n if (cached?.status === 'rejected') {\n throw cached.error\n }\n if (cached?.status === 'pending') {\n if (cached.pending) {\n container.pendingSuspensePromises.add(cached.pending)\n }\n return ''\n }\n\n const result = external.renderToString(props)\n if (typeof result === 'string') {\n container.externalRenderCache.set(cacheKey, {\n html: result,\n status: 'resolved',\n })\n return injectExternalSlotHtml(componentId, external.kind, projectionSlots, props, result)\n }\n\n const pending = Promise.resolve(result).then(\n (resolved) => {\n container.externalRenderCache.set(cacheKey, {\n html: resolved,\n status: 'resolved',\n })\n return resolved\n },\n (error) => {\n container.externalRenderCache.set(cacheKey, {\n error,\n status: 'rejected',\n })\n throw error\n },\n )\n container.externalRenderCache.set(cacheKey, {\n pending,\n status: 'pending',\n })\n container.pendingSuspensePromises.add(pending)\n return ''\n}\n\nconst syncExternalComponentInstance = async (\n component: ComponentState,\n external: ExternalComponentMeta,\n props: Record<string, unknown>,\n host: HTMLElement,\n) => {\n if (component.externalInstance === undefined) {\n component.externalMeta = external\n component.externalInstance = await external.hydrate(host, props)\n return\n }\n\n component.externalMeta = external\n component.externalInstance = await external.update(component.externalInstance, host, props)\n}\n\nconst renderContextProviderToString = (\n token: RuntimeContextToken,\n props: Record<string, unknown>,\n) =>\n withRuntimeContextValue(token, props.value, () =>\n renderStringNode((props.children ?? null) as JSX.Element | JSX.Element[]),\n )\n\nconst renderContextProviderToNodes = (\n token: RuntimeContextToken,\n props: Record<string, unknown>,\n container: RuntimeContainer,\n) =>\n withRuntimeContextValue(token, props.value, () =>\n renderClientNodes((props.children ?? null) as JSX.Element | JSX.Element[], container),\n )\n\nconst renderStringNode = (inputElementLike: JSX.Element | JSX.Element[]): string => {\n if (Array.isArray(inputElementLike)) {\n return renderStringArray(inputElementLike)\n }\n\n const resolved = resolveRenderable(inputElementLike as JSX.Element)\n if (resolved === false || resolved === null || resolved === undefined) {\n return ''\n }\n if (Array.isArray(resolved)) {\n return renderStringNode(resolved)\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return escapeText(String(resolved))\n }\n if (isSSRRawValue(resolved)) {\n return resolved.value\n }\n if (isShowValue(resolved)) {\n return renderStringNode(resolveShowBranch(resolved))\n }\n if (isForValue(resolved)) {\n return renderForValueToString(resolved)\n }\n if (isSSRTemplate(resolved)) {\n return renderSSRTemplateNode(resolved)\n }\n if (isProjectionSlot(resolved)) {\n return renderProjectionSlotToString(resolved)\n }\n if (isRouteSlot(resolved)) {\n const routeElement = resolveRouteSlot(getCurrentContainer(), resolved)\n return routeElement ? renderStringNode(routeElement as JSX.Element) : ''\n }\n if (!isRenderObject(resolved)) {\n return ''\n }\n\n if (isSuspenseType(resolved.type)) {\n const rendered = renderSuspenseComponentToString(resolved.props as SuspenseProps)\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolveKeyedRangeScope(), resolved.key)\n }\n\n if (typeof resolved.type === 'function') {\n const providerMeta = getContextProviderMeta(resolved.type)\n if (providerMeta) {\n return renderContextProviderToString(providerMeta.token, evaluateProps(resolved.props))\n }\n\n const container = getCurrentContainer()\n const componentFn = resolved.type as Component\n const meta = getComponentMeta(componentFn)\n if (!meta || !container) {\n const rendered = renderStringNode(componentFn(resolved.props))\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolveKeyedRangeScope(), resolved.key)\n }\n\n const evaluatedProps = evaluateProps(resolved.props)\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const component = getOrCreateComponentState(\n container,\n componentId,\n meta.symbol,\n position.parentId,\n )\n component.scopeId = registerScope(container, meta.captures())\n component.external = meta.external\n component.optimizedRoot = meta.optimizedRoot === true\n component.props = evaluatedProps\n component.projectionSlots = meta.projectionSlots ?? null\n component.rawProps = resolved.props\n\n const externalMeta = getExternalComponentMeta(componentFn)\n if (externalMeta) {\n const externalBody = renderExternalComponentHtml(\n container,\n componentId,\n externalMeta,\n evaluatedProps,\n component.projectionSlots,\n )\n const host = createExternalRootHtml(componentId, externalMeta.kind, externalBody)\n const rendered = `${createComponentBoundaryHtmlComment(componentId, 'start')}${host}${createComponentBoundaryHtmlComment(componentId, 'end')}`\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolveKeyedRangeScope(), resolved.key)\n }\n\n const frame = createFrame(container, component, 'ssr')\n clearComponentSubscriptions(container, component.id)\n const renderProps = createRenderProps(componentId, meta, resolved.props)\n\n const body = pushFrame(frame, () => renderStringNode(componentFn(renderProps)))\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const rendered = `${createComponentBoundaryHtmlComment(componentId, 'start')}${renderFrameScopedStylesToString(frame)}${body}${createComponentBoundaryHtmlComment(componentId, 'end')}`\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolveKeyedRangeScope(), resolved.key)\n }\n\n const attrParts: string[] = []\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n let hasInnerHTML = false\n let innerHTML: string | null = null\n\n if (frame && hasScopedStyles(frame) && resolved.type !== 'style') {\n attrParts.push(`${SCOPED_STYLE_ATTR}=\"${escapeAttr(frame.component.scopeId)}\"`)\n }\n\n for (const name in resolved.props) {\n if (!Object.hasOwn(resolved.props, name)) {\n continue\n }\n if (name === 'children') {\n continue\n }\n if (name === 'key') {\n continue\n }\n\n const eventName = toEventName(name)\n const value = resolved.props[name]\n\n if (name === BIND_VALUE_PROP) {\n const signalId = getBindableSignalId(value)\n if (!signalId) {\n continue\n }\n attrParts.push(`${BIND_VALUE_ATTR}=\"${escapeAttr(signalId)}\"`)\n const currentValue = readBindableSignalValue(value)\n if (currentValue !== undefined && currentValue !== null) {\n attrParts.push(`value=\"${escapeAttr(String(currentValue))}\"`)\n }\n continue\n }\n\n if (name === BIND_CHECKED_PROP) {\n const signalId = getBindableSignalId(value)\n if (!signalId) {\n continue\n }\n attrParts.push(`${BIND_CHECKED_ATTR}=\"${escapeAttr(signalId)}\"`)\n if (readBindableSignalValue(value)) {\n attrParts.push('checked')\n }\n continue\n }\n\n if (eventName) {\n const eventMeta = getRuntimeEventDescriptor(value)\n if (!eventMeta || !container) {\n continue\n }\n attrParts.push(`data-eid=\"e${container.nextElementId++}\"`)\n attrParts.push(\n `data-e-on${eventName}=\"${escapeAttr(registerEventBinding(container, eventMeta))}\"`,\n )\n continue\n }\n\n if (name === 'ref') {\n const signalId = getRefSignalId(value)\n if (signalId) {\n attrParts.push(`${REF_SIGNAL_ATTR}=\"${escapeAttr(signalId)}\"`)\n }\n continue\n }\n\n if (isDangerouslySetInnerHTMLProp(name)) {\n hasInnerHTML = true\n innerHTML = resolveDangerouslySetInnerHTML(value)\n continue\n }\n\n if (value === false || value === undefined || value === null) {\n continue\n }\n\n if (resolved.type === 'body' && name === 'data-e-resume') {\n continue\n }\n\n if (value === true) {\n attrParts.push(name)\n continue\n }\n\n attrParts.push(`${name}=\"${escapeAttr(String(value))}\"`)\n }\n\n if (resolved.type === 'body' && container) {\n attrParts.push('data-e-resume=\"paused\"')\n }\n\n let childrenText = innerHTML ?? ''\n if (!hasInnerHTML) {\n childrenText += renderStringNode(resolved.props.children as JSX.Element | JSX.Element[])\n }\n\n const rendered =\n resolved.type === FRAGMENT\n ? childrenText\n : `<${resolved.type}${attrParts.length > 0 ? ` ${attrParts.join(' ')}` : ''}>${childrenText}</${\n resolved.type\n }>`\n return resolved.key === null || resolved.key === undefined\n ? rendered\n : wrapStringWithKeyedRange(rendered, resolveKeyedRangeScope(), resolved.key)\n}\n\nconst createElementNode = (doc: Document, tagName: string) => doc.createElement(tagName)\n\nconst renderComponentToNodes = (\n componentFn: Component,\n props: Record<string, unknown>,\n container: RuntimeContainer,\n mode: RenderFrame['mode'],\n rawProps?: Record<string, unknown>,\n): Node[] => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n const meta = getComponentMeta(componentFn)\n if (!meta) {\n return renderClientNodes(componentFn((rawProps ?? props) as Record<string, unknown>), container)\n }\n\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const existing = container.components.get(componentId)\n const symbolChanged = !!existing && existing.symbol !== meta.symbol\n const component = getOrCreateComponentState(\n container,\n componentId,\n meta.symbol,\n position.parentId,\n )\n const wasActive = component.active\n const previousRenderProps =\n ((component.rawProps ?? component.props) as Record<string, unknown> | null) ?? null\n component.active = mode === 'client'\n if (!existing || symbolChanged) {\n resetComponentForSymbolChange(container, component, meta)\n }\n component.external = meta.external\n component.optimizedRoot = meta.optimizedRoot === true\n component.props = props\n component.rawProps = rawProps ?? null\n component.projectionSlots = meta.projectionSlots ?? null\n const externalMeta = getExternalComponentMeta(componentFn)\n const parentFrame = getCurrentFrame()\n const shouldReuseProjectionSlotDom = parentFrame?.projectionState.reuseProjectionSlotDom ?? false\n const previousStart = component.start\n const previousEnd = component.end\n const propsChanged =\n symbolChanged ||\n !areShallowEqualRenderProps(\n previousRenderProps,\n ((rawProps ?? props) as Record<string, unknown> | null) ?? null,\n )\n const boundaryContentsChanged = propsChanged || (!wasActive && !!previousStart && !!previousEnd)\n if (mode === 'client' && externalMeta && previousStart && previousEnd && !symbolChanged) {\n const { end, start } = createComponentBoundaryPair(container.doc, componentId)\n\n const host = getExternalRoot(component)\n if (wasActive && host && propsChanged) {\n void withClientContainer(container, async () => {\n syncExternalProjectionSlotDom(container, component, props, host)\n await syncExternalComponentInstance(component, externalMeta, props, host)\n syncExternalProjectionSlotDom(container, component, props, host)\n rebindExternalHost(container, host)\n scheduleExternalHostRebind(container, host)\n })\n }\n\n if (parentFrame) {\n for (const descendantId of expandComponentIdsToDescendants(container, [componentId])) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n\n return [start, end]\n }\n if (mode === 'client' && wasActive && previousStart && previousEnd && !boundaryContentsChanged) {\n const { end, start } = createComponentBoundaryPair(container.doc, componentId)\n\n if (parentFrame) {\n for (const descendantId of expandComponentIdsToDescendants(container, [componentId])) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n\n return [start, end]\n }\n if (externalMeta) {\n const { end, start } = createComponentBoundaryPair(container.doc, componentId, {\n propsChanged: true,\n symbolChanged,\n })\n if (!previousStart || !previousEnd) {\n component.start = start\n component.end = end\n }\n\n const host = createExternalRootNode(container, componentId, externalMeta.kind)\n if (parentFrame) {\n parentFrame.visitedDescendants.add(componentId)\n }\n if (mode === 'client') {\n scheduleExternalComponentMount(container, component, externalMeta, props)\n }\n return [start, host, end]\n }\n const speculativeEffectCleanupSlot =\n !previousStart || !previousEnd ? null : boundaryContentsChanged ? null : createCleanupSlot()\n if (!speculativeEffectCleanupSlot) {\n resetComponentRenderEffects(component)\n }\n const frame = createFrame(container, component, mode, {\n effectCleanupSlot: speculativeEffectCleanupSlot ?? component.renderEffectCleanupSlot,\n reuseExistingDom: shouldReuseProjectionSlotDom,\n reuseProjectionSlotDom: shouldReuseProjectionSlotDom,\n })\n clearComponentSubscriptions(container, componentId)\n const oldDescendants = collectDescendantIds(container, componentId)\n const { end, start } = createComponentBoundaryPair(container.doc, componentId, {\n propsChanged: boundaryContentsChanged,\n symbolChanged,\n })\n if (!previousStart || !previousEnd) {\n component.start = start\n component.end = end\n }\n const renderProps = createRenderProps(componentId, meta, rawProps ?? props)\n let rendered: Node[]\n try {\n rendered = pushFrame(frame, () => toMountedNodes(componentFn(renderProps), container))\n } catch (error) {\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n if (isPendingSignalError(error) && parentFrame) {\n parentFrame.visitedDescendants.add(componentId)\n for (const descendantId of frame.visitedDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n throw error\n }\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const preservedDescendants =\n frame.projectionState.reuseExistingDom && previousStart && previousEnd\n ? collectPreservedProjectionSlotComponentIds(container, previousStart, previousEnd)\n : new Set<string>()\n const keptDescendants = new Set([\n ...frame.visitedDescendants,\n ...preservedDescendants,\n ...collectMountedDescendantComponentIds(container, component),\n ])\n pruneRemovedComponents(container, componentId, keptDescendants)\n\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n\n if (parentFrame) {\n parentFrame.visitedDescendants.add(componentId)\n for (const descendantId of keptDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n\n scheduleMountCallbacks(container, component, frame.mountCallbacks)\n scheduleVisibleCallbacksCheck(container)\n syncEffectOnlyLocalSignalPreference(component)\n\n return [start, ...renderFrameScopedStylesToNodes(frame, container), ...rendered, end]\n}\n\nconst wrapNodesWithKeyedRange = (\n doc: Document,\n nodes: Node[],\n scope: string,\n key: string | number | symbol,\n): Node[] => [\n doc.createComment(createKeyedRangeMarker(scope, key, 'start')),\n ...nodes,\n doc.createComment(createKeyedRangeMarker(scope, key, 'end')),\n]\n\nconst renderForValueToNodes = <T>(value: ForValue<T>, container: RuntimeContainer): Node[] => {\n if (value.arr.length === 0) {\n return renderClientNodes((value.fallback ?? null) as JSX.Element, container)\n }\n\n const scope = allocateKeyedRangeScope()\n const nodes: Node[] = []\n for (let index = 0; index < value.arr.length; index += 1) {\n const item = value.arr[index]!\n nodes.push(\n ...wrapNodesWithKeyedRange(\n container.doc!,\n renderClientNodes(stripForChildRootKey(value.fn(item, index)), container),\n scope,\n resolveForItemKey(value, item, index),\n ),\n )\n }\n return nodes\n}\n\nconst applyElementProp = (\n element: HTMLElement,\n name: string,\n value: unknown,\n container: RuntimeContainer,\n) => {\n if (name === BIND_VALUE_PROP) {\n const signalId = getBindableSignalId(value)\n if (signalId) {\n element.setAttribute(BIND_VALUE_ATTR, signalId)\n }\n if ('value' in element) {\n ;(element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value = String(\n readBindableSignalValue(value) ?? '',\n )\n }\n return\n }\n\n if (name === BIND_CHECKED_PROP) {\n const signalId = getBindableSignalId(value)\n if (signalId) {\n element.setAttribute(BIND_CHECKED_ATTR, signalId)\n }\n if (isHTMLInputElementNode(element)) {\n element.checked = Boolean(readBindableSignalValue(value))\n }\n return\n }\n\n const eventName = toEventName(name)\n if (eventName) {\n const eventMeta = getRuntimeEventDescriptor(value)\n if (!eventMeta) {\n return\n }\n element.setAttribute('data-eid', `e${container.nextElementId++}`)\n element.setAttribute(`data-e-on${eventName}`, registerEventBinding(container, eventMeta))\n return\n }\n\n if (name === 'ref') {\n syncRuntimeRefMarker(element, value)\n assignRuntimeRef(value, element, container)\n return\n }\n\n if (isDangerouslySetInnerHTMLProp(name)) {\n const html = resolveDangerouslySetInnerHTML(value)\n if (html !== null) {\n element.innerHTML = html\n }\n return\n }\n\n if (value === false || value === undefined || value === null) {\n return\n }\n\n if (name === 'class') {\n element.className = String(value)\n return\n }\n\n if (name === 'style' && isPlainObject(value)) {\n element.setAttribute(\n 'style',\n Object.entries(value)\n .map(([styleName, styleValue]) => `${styleName}: ${styleValue}`)\n .join('; '),\n )\n return\n }\n\n if (name === 'value' && 'value' in element) {\n ;(element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value = String(value)\n }\n if (name === 'checked' && isHTMLInputElementNode(element)) {\n element.checked = Boolean(value)\n }\n\n if (value === true) {\n element.setAttribute(name, '')\n return\n }\n\n element.setAttribute(name, String(value))\n}\n\nexport const renderClientNodes = (\n inputElementLike: JSX.Element | JSX.Element[],\n container: RuntimeContainer,\n): Node[] => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n if (Array.isArray(inputElementLike)) {\n return withActiveKeyedRangeScope(allocateKeyedRangeScope(), () =>\n inputElementLike.flatMap((entry) => renderClientNodes(entry, container)),\n )\n }\n\n const resolved = resolveRenderable(inputElementLike as JSX.Element)\n if (resolved === false || resolved === null || resolved === undefined) {\n return []\n }\n if (Array.isArray(resolved)) {\n return renderClientNodes(resolved, container)\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return [container.doc.createTextNode(String(resolved))]\n }\n if (isShowValue(resolved)) {\n return renderClientNodes(resolveShowBranch(resolved), container)\n }\n if (isForValue(resolved)) {\n return renderForValueToNodes(resolved, container)\n }\n if (typeof Node !== 'undefined' && resolved instanceof Node) {\n rememberManagedAttributesForNode(resolved)\n return [resolved]\n }\n if (isProjectionSlot(resolved)) {\n return renderProjectionSlotToNodes(resolved, container)\n }\n if (isRouteSlot(resolved)) {\n const routeElement = resolveRouteSlot(container, resolved)\n return routeElement ? renderClientNodes(routeElement as JSX.Element, container) : []\n }\n if (!isRenderObject(resolved)) {\n return []\n }\n\n let nodes: Node[]\n\n if (isSuspenseType(resolved.type)) {\n nodes = renderSuspenseComponentToNodes(resolved.props as SuspenseProps, container, 'client')\n } else if (typeof resolved.type === 'function') {\n const providerMeta = getContextProviderMeta(resolved.type)\n if (providerMeta) {\n nodes = renderContextProviderToNodes(\n providerMeta.token,\n evaluateProps(resolved.props),\n container,\n )\n } else {\n const componentFn = resolved.type as Component\n if (getComponentMeta(resolved.type)) {\n nodes = withoutTrackedEffect(() =>\n renderComponentToNodes(\n componentFn,\n evaluateProps(resolved.props),\n container,\n 'client',\n resolved.props,\n ),\n )\n } else {\n nodes = renderComponentToNodes(\n componentFn,\n resolved.props as Record<string, unknown>,\n container,\n 'client',\n resolved.props,\n )\n }\n }\n } else if (resolved.type === FRAGMENT) {\n nodes = renderClientNodes(resolved.props.children as JSX.Element | JSX.Element[], container)\n } else {\n const element = createElementNode(container.doc, resolved.type)\n const frame = getCurrentFrame()\n if (frame && hasScopedStyles(frame) && resolved.type !== 'style') {\n element.setAttribute(SCOPED_STYLE_ATTR, frame.component.scopeId)\n }\n let hasInnerHTML = false\n for (const [name, descriptor] of Object.entries(\n Object.getOwnPropertyDescriptors(resolved.props),\n ) as [string, PropertyDescriptor][]) {\n if (name === 'children') {\n continue\n }\n const value = descriptor.get ? descriptor.get.call(resolved.props) : descriptor.value\n if (resolved.type === 'body' && name === 'data-e-resume') {\n continue\n }\n if (isDangerouslySetInnerHTMLProp(name)) {\n hasInnerHTML = true\n }\n applyElementProp(element, name, value, container)\n }\n\n if (hasInnerHTML) {\n rememberManagedAttributesForNode(element)\n nodes = [element]\n } else {\n const childNodes = renderClientNodes(\n resolved.props.children as JSX.Element | JSX.Element[],\n container,\n )\n for (const child of childNodes) {\n element.appendChild(child)\n }\n\n rememberManagedAttributesForNode(element)\n nodes = [element]\n }\n }\n\n return resolved.key === null || resolved.key === undefined\n ? nodes\n : wrapNodesWithKeyedRange(container.doc, nodes, resolveKeyedRangeScope(), resolved.key)\n}\n\nconst scanComponentBoundaries = (\n root: ParentNode & { ownerDocument: Document },\n): Map<string, { end?: Comment; start?: Comment }> => {\n const walker = root.ownerDocument.createTreeWalker(root, DOM_SHOW_COMMENT)\n const boundaries = new Map<string, { end?: Comment; start?: Comment }>()\n\n while (walker.nextNode()) {\n const node = walker.currentNode\n const isCommentNode =\n node.nodeType === DOM_COMMENT_NODE ||\n (typeof Comment !== 'undefined' && node instanceof Comment)\n if (!isCommentNode) {\n continue\n }\n const marker = parseComponentBoundaryMarker((node as Comment).data)\n if (!marker) {\n continue\n }\n const boundary = boundaries.get(marker.id) ?? {}\n if (marker.kind === 'start') {\n boundary.start = node as Comment\n } else {\n boundary.end = node as Comment\n }\n boundaries.set(marker.id, boundary)\n }\n\n return boundaries\n}\n\nconst loadSymbol = async (\n container: RuntimeContainer,\n symbolId: string,\n): Promise<RuntimeSymbolModule> => {\n const resolved = getResolvedRuntimeSymbols(container).get(symbolId)\n if (resolved) {\n return resolved\n }\n const existing = container.imports.get(symbolId)\n if (existing) {\n const module = await existing\n getResolvedRuntimeSymbols(container).set(symbolId, module)\n return module\n }\n\n const url = container.symbols.get(symbolId)\n if (!url) {\n throw new Error(`Missing symbol URL for ${symbolId}.`)\n }\n\n const loaded = (import(/* @vite-ignore */ url) as Promise<RuntimeSymbolModule>).then((module) => {\n getResolvedRuntimeSymbols(container).set(symbolId, module)\n return module\n })\n container.imports.set(symbolId, loaded)\n return loaded\n}\n\nconst toMountedNodes = (value: unknown, container: RuntimeContainer): Node[] => {\n if (!container.doc) {\n throw new Error('Client rendering requires a document.')\n }\n\n let resolved = value\n while (typeof resolved === 'function') {\n resolved = resolved()\n }\n\n if (Array.isArray(resolved)) {\n return withActiveKeyedRangeScope(allocateKeyedRangeScope(), () =>\n resolved.flatMap((entry) => toMountedNodes(entry, container)),\n )\n }\n if (resolved === null || resolved === undefined || resolved === false) {\n return [container.doc.createComment('eclipsa-empty')]\n }\n if (typeof Node !== 'undefined' && resolved instanceof Node) {\n return [resolved]\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return [container.doc.createTextNode(String(resolved))]\n }\n return renderClientNodes(resolved as JSX.Element | JSX.Element[], container)\n}\n\nexport const getRuntimeContainer = () => getCurrentContainer()\n\nexport const captureClientInsertOwner = (\n container: RuntimeContainer | null,\n siteKey?: string | null,\n): ClientInsertOwner | null => {\n const frame = getCurrentFrame()\n if (!container || !frame || frame.container !== container) {\n return null\n }\n\n const ownerComponentId =\n typeof siteKey === 'string' && siteKey !== ''\n ? `${frame.component.id}.$i${siteKey}`\n : `${frame.component.id}.$i${frame.insertCursor++}`\n getOrCreateComponentState(\n container,\n ownerComponentId,\n CLIENT_INSERT_OWNER_SYMBOL,\n frame.component.id,\n )\n frame.visitedDescendants.add(ownerComponentId)\n return {\n childIndex: 0,\n componentId: ownerComponentId,\n keyedRangeCursor: frame.keyedRangeCursor,\n projectionCounters: [...frame.projectionState.counters.entries()],\n }\n}\n\nexport const createDetachedClientInsertOwner = (container: RuntimeContainer): ClientInsertOwner => {\n const componentId = `${CLIENT_INSERT_OWNER_ID_PREFIX}${container.nextComponentId++}`\n getOrCreateComponentState(container, componentId, CLIENT_INSERT_OWNER_SYMBOL, ROOT_COMPONENT_ID)\n return {\n childIndex: 0,\n componentId,\n keyedRangeCursor: 0,\n projectionCounters: [],\n }\n}\n\nconst inferClientInsertOwnerParentId = (componentId: string) => {\n if (componentId.startsWith(CLIENT_INSERT_OWNER_ID_PREFIX)) {\n return ROOT_COMPONENT_ID\n }\n\n const lastDotIndex = componentId.lastIndexOf('.')\n if (lastDotIndex < 0) {\n return ROOT_COMPONENT_ID\n }\n\n return componentId.slice(0, lastDotIndex)\n}\n\nexport const renderClientInsertableForOwner = (\n value: Insertable,\n container: RuntimeContainer,\n owner: ClientInsertOwner | null,\n) => {\n if (!owner) {\n return renderClientInsertable(value, container)\n }\n\n const component =\n container.components.get(owner.componentId) ??\n getOrCreateComponentState(\n container,\n owner.componentId,\n CLIENT_INSERT_OWNER_SYMBOL,\n inferClientInsertOwnerParentId(owner.componentId),\n )\n\n const parentFrame = getCurrentFrame()\n const oldDescendants = collectDescendantIds(container, owner.componentId)\n const frame = createFrame(container, component, 'client', {\n reuseExistingDom: false,\n reuseProjectionSlotDom: false,\n })\n frame.childCursor = owner.childIndex\n frame.keyedRangeCursor = owner.keyedRangeCursor\n frame.projectionState.counters = new Map(owner.projectionCounters)\n const nodes = pushContainer(container, () =>\n pushFrame(frame, () => renderClientInsertable(value, container)),\n )\n const keptDescendants = expandComponentIdsToDescendants(container, [\n ...frame.visitedDescendants,\n ...collectComponentBoundaryIds(nodes),\n ])\n pruneRemovedComponents(container, owner.componentId, keptDescendants)\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n if (parentFrame && parentFrame !== frame) {\n parentFrame.visitedDescendants.add(owner.componentId)\n for (const descendantId of keptDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n }\n return nodes\n}\n\nexport const serializeContainerValue = (\n container: RuntimeContainer | null,\n value: unknown,\n): SerializedValue =>\n container ? serializeRuntimeValue(container, value) : serializePublicValue(value)\n\nexport const deserializeContainerValue = (\n container: RuntimeContainer | null,\n value: SerializedValue,\n): unknown =>\n container ? deserializeRuntimeValue(container, value) : deserializePublicValue(value)\n\nexport const renderClientInsertable = (\n value: unknown,\n container: RuntimeContainer | null = getCurrentContainer(),\n): Node[] => {\n const doc = container?.doc ?? (typeof document !== 'undefined' ? document : null)\n if (!doc) {\n return []\n }\n if (Array.isArray(value)) {\n return withActiveKeyedRangeScope(allocateKeyedRangeScope(), () =>\n value.flatMap((entry) => renderClientInsertable(entry, container)),\n )\n }\n\n let resolved = value\n while (typeof resolved === 'function') {\n resolved = resolved()\n }\n\n if (resolved === null || resolved === undefined || resolved === false) {\n return [doc.createComment('eclipsa-empty')]\n }\n if (typeof Node !== 'undefined' && resolved instanceof Node) {\n rememberManagedAttributesForNode(resolved)\n return [resolved]\n }\n if (\n typeof resolved === 'string' ||\n typeof resolved === 'number' ||\n typeof resolved === 'boolean'\n ) {\n return [doc.createTextNode(String(resolved))]\n }\n if (isShowValue(resolved)) {\n return renderClientInsertable(resolveShowBranch(resolved), container)\n }\n if (isForValue(resolved)) {\n return container\n ? renderForValueToNodes(resolved, container)\n : resolved.arr.flatMap((item, index) =>\n renderClientInsertable(resolved.fn(item, index), container),\n )\n }\n if (isProjectionSlot(resolved)) {\n return container\n ? renderProjectionSlotToNodes(resolved, container)\n : renderClientInsertable(resolved.source, container)\n }\n if (isRouteSlot(resolved)) {\n const routeElement = resolveRouteSlot(container, resolved)\n return routeElement\n ? renderClientInsertable(routeElement, container)\n : [doc.createComment('eclipsa-empty')]\n }\n if (container) {\n return renderClientNodes(resolved as JSX.Element | JSX.Element[], container)\n }\n return [doc.createTextNode(String(resolved))]\n}\n\nconst resetContainerForRouteRender = (container: RuntimeContainer) => {\n for (const component of container.components.values()) {\n disposeComponentMountCleanups(component)\n pruneComponentVisibles(container, component, 0)\n pruneComponentWatches(container, component, 0)\n }\n\n for (const watch of container.watches.values()) {\n clearEffectSignals(watch.effect)\n }\n\n container.components.clear()\n container.dirty.clear()\n container.nextElementId = 0\n container.nextScopeId = 0\n container.nextSignalId = 0\n container.rootChildCursor = 0\n container.scopes.clear()\n container.visibles.clear()\n container.watches.clear()\n\n for (const [id, record] of Array.from(container.signals.entries())) {\n for (const effect of Array.from(record.effects)) {\n clearEffectSignals(effect)\n }\n record.effects.clear()\n record.subscribers.clear()\n if (!isRouterSignalId(id) && !isAtomSignalId(id)) {\n container.signals.delete(id)\n }\n }\n}\n\nconst trackSuspenseBoundaryPromise = (\n container: RuntimeContainer,\n componentId: string,\n promise: Promise<unknown>,\n) => {\n const component = container.components.get(componentId)\n if (!component) {\n return\n }\n component.suspensePromise = promise\n promise.finally(() => {\n const current = container.components.get(componentId)\n if (!current || current.suspensePromise !== promise) {\n return\n }\n current.suspensePromise = null\n current.active = false\n container.dirty.add(componentId)\n void flushDirtyComponents(container)\n })\n}\n\nconst renderSuspenseContentToString = (\n props: SuspenseProps,\n container: RuntimeContainer,\n componentId: string,\n) => {\n try {\n const rendered =\n typeof props.children === 'function' ? props.children() : (props.children ?? null)\n return renderStringNode(rendered as JSX.Element | JSX.Element[])\n } catch (error) {\n if (!isPendingSignalError(error)) {\n throw error\n }\n const component = container.components.get(componentId)\n if (component) {\n component.suspensePromise = error.promise\n }\n return renderStringNode((props.fallback ?? null) as JSX.Element | JSX.Element[])\n }\n}\n\nexport const collectPendingSuspenseBoundaryIds = (container: RuntimeContainer) =>\n [...container.components.values()]\n .filter(\n (component) => component.symbol === SUSPENSE_COMPONENT_SYMBOL && !!component.suspensePromise,\n )\n .map((component) => component.id)\n .sort((left, right) => left.split('.').length - right.split('.').length)\n\nexport const renderResolvedSuspenseBoundaryToString = (\n container: RuntimeContainer,\n componentId: string,\n) => {\n const component = container.components.get(componentId)\n if (!component || component.symbol !== SUSPENSE_COMPONENT_SYMBOL) {\n throw new Error(`Missing suspense boundary ${componentId}.`)\n }\n\n pruneRemovedComponents(container, componentId, new Set())\n clearComponentSubscriptions(container, component.id)\n component.suspensePromise = null\n const frame = createFrame(container, component, 'ssr')\n return pushContainer(container, () =>\n pushFrame(frame, () =>\n renderSuspenseContentToString(component.props as SuspenseProps, container, componentId),\n ),\n )\n}\n\nconst renderSuspenseContentToNodes = (\n props: SuspenseProps,\n container: RuntimeContainer,\n componentId: string,\n) => {\n try {\n const rendered =\n typeof props.children === 'function' ? props.children() : (props.children ?? null)\n return toMountedNodes(rendered as JSX.Element | JSX.Element[], container)\n } catch (error) {\n if (!isPendingSignalError(error)) {\n throw error\n }\n trackSuspenseBoundaryPromise(container, componentId, error.promise)\n const fallback = props.fallback ?? null\n return toMountedNodes(fallback as JSX.Element | JSX.Element[], container)\n }\n}\n\nconst renderSuspenseComponentToString = (props: SuspenseProps) => {\n const container = getCurrentContainer()\n if (!container) {\n return renderStringNode((props.children ?? null) as JSX.Element | JSX.Element[])\n }\n const parentFrame = getCurrentFrame()\n if (!parentFrame) {\n return renderSuspenseContentToString(props, container, ROOT_COMPONENT_ID)\n }\n\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const component = getOrCreateComponentState(\n container,\n componentId,\n SUSPENSE_COMPONENT_SYMBOL,\n position.parentId,\n )\n component.props = {\n children: props.children,\n fallback: props.fallback,\n }\n component.projectionSlots = null\n const frame = createFrame(container, component, 'ssr')\n clearComponentSubscriptions(container, component.id)\n const body = pushFrame(frame, () =>\n renderSuspenseContentToString(component.props as SuspenseProps, container, componentId),\n )\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n return `${createComponentBoundaryHtmlComment(componentId, 'start')}${body}${createComponentBoundaryHtmlComment(componentId, 'end')}`\n}\n\nconst renderSuspenseComponentToNodes = (\n props: SuspenseProps,\n container: RuntimeContainer,\n mode: RenderFrame['mode'],\n) => {\n const parentFrame = getCurrentFrame()\n if (!parentFrame) {\n return renderSuspenseContentToNodes(props, container, ROOT_COMPONENT_ID)\n }\n\n const position = nextComponentPosition(container)\n const componentId = createComponentId(container, position.parentId, position.childIndex)\n const component = getOrCreateComponentState(\n container,\n componentId,\n SUSPENSE_COMPONENT_SYMBOL,\n position.parentId,\n )\n component.props = {\n children: props.children,\n fallback: props.fallback,\n }\n component.projectionSlots = null\n component.active = true\n component.start = undefined\n component.end = undefined\n\n const frame = createFrame(container, component, mode)\n clearComponentSubscriptions(container, component.id)\n const bodyNodes = pushFrame(frame, () =>\n renderSuspenseContentToNodes(component.props as SuspenseProps, container, componentId),\n )\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n parentFrame.visitedDescendants.add(componentId)\n for (const descendantId of frame.visitedDescendants) {\n parentFrame.visitedDescendants.add(descendantId)\n }\n scheduleMountCallbacks(container, component, frame.mountCallbacks)\n scheduleVisibleCallbacksCheck(container)\n\n if (!container.doc) {\n return bodyNodes\n }\n const { end, start } = createComponentBoundaryPair(container.doc, componentId)\n if (!component.start || !component.end) {\n component.start = start\n component.end = end\n }\n return [start, ...bodyNodes, end]\n}\n\nconst renderRouteIntoRoot = (container: RuntimeContainer, Page: RouteRenderer) => {\n if (!container.doc || !container.rootElement) {\n throw new Error('Client route rendering requires a document root.')\n }\n\n resetContainerForRouteRender(container)\n const nodes = pushContainer(container, () => toMountedNodes(Page({}), container))\n\n const root = container.rootElement\n while (root.firstChild) {\n root.firstChild.remove()\n }\n for (const node of nodes) {\n root.appendChild(node)\n }\n rememberManagedAttributesForNode(root)\n restoreSignalRefs(container, root)\n bindRouterLinks(container, root)\n scheduleVisibleCallbacksCheck(container)\n}\n\nconst getRouteModuleImportUrl = (router: RouterState, url: string) => {\n const token = router.routeModuleBusts.get(url)\n if (token == null) {\n return url\n }\n\n const baseUrl = typeof window === 'undefined' ? 'http://localhost' : window.location.href\n const nextUrl = new URL(url, baseUrl)\n nextUrl.searchParams.set('t', token.toString())\n if (/^[a-z]+:\\/\\//i.test(url)) {\n return nextUrl.href\n }\n return `${nextUrl.pathname}${nextUrl.search}${nextUrl.hash}`\n}\n\nconst loadRouteModule = async (router: RouterState, url: string): Promise<LoadedRouteModule> => {\n const module = (await import(/* @vite-ignore */ getRouteModuleImportUrl(router, url))) as {\n default?: RouteRenderer\n metadata?: RouteMetadataExport\n }\n if (typeof module.default !== 'function') {\n throw new TypeError(`Route module ${url} does not export a default component.`)\n }\n\n return {\n metadata: module.metadata ?? null,\n renderer: module.default,\n symbol: getComponentMeta(module.default)?.symbol ?? null,\n url,\n }\n}\n\nconst createManagedHeadElement = (doc: Document, tagName: 'link' | 'meta') => {\n const element = doc.createElement(tagName)\n element.setAttribute(ROUTE_METADATA_HEAD_ATTR, '')\n return element\n}\n\nconst applyRouteMetadata = (doc: Document, route: LoadedRoute, url: URL, defaultTitle: string) => {\n for (const element of doc.head.querySelectorAll(`[${ROUTE_METADATA_HEAD_ATTR}]`)) {\n element.remove()\n }\n\n const metadata = composeRouteMetadata(\n [...route.layouts.map((layout) => layout.metadata ?? null), route.page.metadata ?? null],\n {\n params: route.params,\n url,\n },\n )\n\n doc.title = metadata?.title ?? defaultTitle\n\n const appendMeta = (name: string, content: string, attr: 'name' | 'property') => {\n const meta = createManagedHeadElement(doc, 'meta')\n meta.setAttribute(attr, name)\n meta.setAttribute('content', content)\n doc.head.appendChild(meta)\n }\n\n if (metadata?.description) {\n appendMeta('description', metadata.description, 'name')\n }\n if (metadata?.canonical) {\n const link = createManagedHeadElement(doc, 'link')\n link.setAttribute('href', metadata.canonical)\n link.setAttribute('rel', 'canonical')\n doc.head.appendChild(link)\n }\n if (metadata?.openGraph?.title) {\n appendMeta('og:title', metadata.openGraph.title, 'property')\n }\n if (metadata?.openGraph?.description) {\n appendMeta('og:description', metadata.openGraph.description, 'property')\n }\n if (metadata?.openGraph?.type) {\n appendMeta('og:type', metadata.openGraph.type, 'property')\n }\n if (metadata?.openGraph?.url) {\n appendMeta('og:url', metadata.openGraph.url, 'property')\n }\n for (const image of metadata?.openGraph?.images ?? []) {\n appendMeta('og:image', image, 'property')\n }\n if (metadata?.twitter?.card) {\n appendMeta('twitter:card', metadata.twitter.card, 'name')\n }\n if (metadata?.twitter?.title) {\n appendMeta('twitter:title', metadata.twitter.title, 'name')\n }\n if (metadata?.twitter?.description) {\n appendMeta('twitter:description', metadata.twitter.description, 'name')\n }\n for (const image of metadata?.twitter?.images ?? []) {\n appendMeta('twitter:image', image, 'name')\n }\n}\n\nconst loadResolvedRoute = async (\n container: RuntimeContainer,\n matched: {\n entry: RouteModuleManifest\n params: RouteParams\n pathname: string\n },\n variant: 'page' | 'loading' | 'error' | 'not-found' = 'page',\n) => {\n const router = ensureRouterState(container)\n const normalizedPath = normalizeRoutePath(matched.pathname)\n const cacheKey = routeCacheKey(normalizedPath, variant)\n const existing = router.loadedRoutes.get(cacheKey)\n if (existing) {\n return existing\n }\n\n const moduleUrl = getRouteModuleUrl(matched.entry, variant)\n if (!moduleUrl) {\n return null\n }\n\n const [page, ...layouts] = await Promise.all([\n loadRouteModule(router, moduleUrl),\n ...matched.entry.layouts.map((layoutUrl) => loadRouteModule(router, layoutUrl)),\n ])\n let route!: LoadedRoute\n route = {\n entry: matched.entry,\n error: undefined,\n layouts,\n params: matched.params,\n pathname: normalizedPath,\n page,\n render: () => createRouteElement(route),\n }\n\n router.loadedRoutes.set(cacheKey, route)\n return route\n}\n\nconst loadResolvedRouteFromSpecial = async (\n container: RuntimeContainer,\n pathname: string,\n kind: 'error' | 'notFound',\n) => {\n const manifest = ensureRouterState(container).manifest\n const matched =\n kind === 'notFound'\n ? resolveNotFoundRouteMatch(manifest, pathname)\n : findSpecialManifestEntry(manifest, pathname, kind)\n if (!matched) {\n return null\n }\n return loadResolvedRoute(container, matched, kind === 'error' ? 'error' : 'not-found')\n}\n\nconst loadRouteComponent = async (container: RuntimeContainer, pathname: string) => {\n const matched = resolvePageRouteMatch(ensureRouterState(container).manifest, pathname)\n if (!matched) {\n return null\n }\n return loadResolvedRoute(container, matched, 'page')\n}\n\nconst findRouteComponentChain = (\n container: RuntimeContainer,\n symbols: string[],\n parentId: string | null = null,\n): string[] | null => {\n if (symbols.length === 0) {\n return []\n }\n\n const [symbol, ...rest] = symbols\n const candidates = [...container.components.values()]\n .filter((component) => {\n if (\n !component.start ||\n !component.end ||\n !component.start.parentNode ||\n !component.end.parentNode ||\n component.symbol !== symbol\n ) {\n return false\n }\n if (parentId === null) {\n return true\n }\n return isDescendantOf(parentId, component.id)\n })\n .sort((left, right) => left.id.split('.').length - right.id.split('.').length)\n\n for (const candidate of candidates) {\n const remainder = findRouteComponentChain(container, rest, candidate.id)\n if (!remainder) {\n continue\n }\n return [candidate.id, ...remainder]\n }\n\n return null\n}\n\nconst collectSharedLayoutBoundaryIds = (container: RuntimeContainer, route: LoadedRoute) => {\n if (route.layouts.length === 0 || route.layouts.some((layout) => !layout.symbol)) {\n return null\n }\n\n const symbols = route.layouts.map((layout) => layout.symbol as string)\n if (route.page.symbol) {\n const chain = findRouteComponentChain(container, [...symbols, route.page.symbol])\n if (chain) {\n return chain.slice(0, route.layouts.length)\n }\n }\n\n return findRouteComponentChain(container, symbols)\n}\n\nconst getComponentIdDepth = (componentId: string) => componentId.split('.').length\n\nconst parseDirectChildIndex = (parentId: string, childId: string) => {\n if (!childId.startsWith(`${parentId}.`)) {\n return null\n }\n const remainder = childId.slice(parentId.length + 1)\n if (remainder.length === 0 || remainder.includes('.')) {\n return null\n }\n const parsed = Number(remainder)\n return Number.isInteger(parsed) ? parsed : null\n}\n\ntype SharedLayoutRouteRoot =\n | {\n childIndex: number\n kind: 'direct'\n rootId: string\n }\n | {\n kind: 'owner'\n ownerId: string\n rootId: string\n }\n\nconst resolveSharedLayoutRouteRoot = (\n container: RuntimeContainer,\n boundaryId: string,\n slotRange: { start: Comment; end: Comment },\n): SharedLayoutRouteRoot | null => {\n const candidateIds = [\n ...collectComponentBoundaryIds(getBoundaryChildren(slotRange.start, slotRange.end)),\n ].sort((left, right) => getComponentIdDepth(left) - getComponentIdDepth(right))\n\n for (const candidateId of candidateIds) {\n const childIndex = parseDirectChildIndex(boundaryId, candidateId)\n if (childIndex !== null) {\n return {\n childIndex,\n kind: 'direct',\n rootId: candidateId,\n }\n }\n }\n\n for (const candidateId of candidateIds) {\n const component = container.components.get(candidateId)\n if (!component?.parentId) {\n continue\n }\n const owner = container.components.get(component.parentId)\n if (!owner || owner.symbol !== CLIENT_INSERT_OWNER_SYMBOL || owner.parentId !== boundaryId) {\n continue\n }\n return {\n kind: 'owner',\n ownerId: owner.id,\n rootId: candidateId,\n }\n }\n\n return null\n}\n\nconst renderRouteSubtreeForProjectionSlot = (\n container: RuntimeContainer,\n boundary: ComponentState,\n childIndex: number,\n source: unknown,\n) => {\n const frame = createFrame(container, boundary, 'client', {\n reuseExistingDom: false,\n reuseProjectionSlotDom: false,\n })\n frame.childCursor = childIndex\n const nodes = pushContainer(container, () =>\n pushFrame(frame, () => renderClientInsertable(source, container)),\n )\n return {\n nodes,\n visitedDescendants: frame.visitedDescendants,\n }\n}\n\nconst renderRouteSubtreeForProjectionSlotOwner = (\n container: RuntimeContainer,\n ownerId: string,\n source: unknown,\n) => {\n const nodes = renderClientInsertableForOwner(source as Insertable, container, {\n childIndex: 0,\n componentId: ownerId,\n keyedRangeCursor: 0,\n projectionCounters: [],\n })\n return {\n nodes,\n visitedDescendants: expandComponentIdsToDescendants(container, [ownerId]),\n }\n}\n\nconst clearSharedLayoutDescendantDirtyStates = (\n container: RuntimeContainer,\n boundaryId: string,\n excludedRootId: string | null,\n) => {\n for (const componentId of Array.from(container.dirty)) {\n if (!isDescendantOf(boundaryId, componentId)) {\n continue\n }\n if (\n excludedRootId &&\n (componentId === excludedRootId || isDescendantOf(excludedRootId, componentId))\n ) {\n continue\n }\n container.dirty.delete(componentId)\n const component = container.components.get(componentId)\n if (!component) {\n continue\n }\n component.activateModeOnFlush = undefined\n component.reuseExistingDomOnActivate = true\n component.reuseProjectionSlotDomOnActivate = false\n }\n}\n\nconst deactivateComponentSubtree = (container: RuntimeContainer, rootId: string) => {\n const root = container.components.get(rootId)\n if (root) {\n root.active = false\n }\n for (const componentId of collectDescendantIds(container, rootId)) {\n const component = container.components.get(componentId)\n if (component) {\n component.active = false\n }\n }\n}\n\nconst withUpdatedComponentChildren = (props: Record<string, unknown> | null, children: unknown) => {\n const next = {}\n if (props) {\n Object.defineProperties(next, Object.getOwnPropertyDescriptors(props))\n }\n Object.defineProperty(next, 'children', {\n configurable: true,\n enumerable: true,\n value: children,\n writable: true,\n })\n return next as Record<string, unknown>\n}\n\nconst countSharedLayouts = (current: LoadedRoute | null, next: LoadedRoute) => {\n if (!current) {\n return 0\n }\n\n let count = 0\n const limit = Math.min(current.layouts.length, next.layouts.length)\n while (count < limit && current.layouts[count]!.url === next.layouts[count]!.url) {\n count += 1\n }\n return count\n}\n\nconst updateSharedLayoutBoundary = async (\n container: RuntimeContainer,\n current: LoadedRoute,\n next: LoadedRoute,\n sharedLayoutCount: number,\n) => {\n if (sharedLayoutCount <= 0) {\n return false\n }\n\n const boundaryIds = collectSharedLayoutBoundaryIds(container, current)\n if (!boundaryIds || boundaryIds.length < sharedLayoutCount) {\n return false\n }\n\n const boundaryId = boundaryIds[sharedLayoutCount - 1]!\n const boundary = container.components.get(boundaryId)\n if (!boundary?.start || !boundary.end) {\n return false\n }\n\n const nextChildren = createRouteElement(next, sharedLayoutCount)\n const rerenderSharedLayoutBoundary = async () => {\n const focusSnapshot = captureBoundaryFocus(container.doc!, boundary.start!, boundary.end!)\n const boundaryProps =\n boundary.props && typeof boundary.props === 'object'\n ? (boundary.props as Record<string, unknown>)\n : null\n const boundaryRawProps =\n boundary.rawProps && typeof boundary.rawProps === 'object' ? boundary.rawProps : boundaryProps\n boundary.props = withUpdatedComponentChildren(boundaryProps, nextChildren)\n boundary.rawProps = withUpdatedComponentChildren(boundaryRawProps, nextChildren)\n boundary.active = false\n boundary.activateModeOnFlush = 'replace'\n boundary.reuseExistingDomOnActivate = false\n boundary.reuseProjectionSlotDomOnActivate = false\n container.dirty.add(boundaryId)\n if (boundary.start?.parentNode && 'querySelectorAll' in boundary.start.parentNode) {\n bindRouterLinks(container, boundary.start.parentNode as ParentNode)\n }\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n if (boundary.start && boundary.end) {\n restoreBoundaryFocus(container.doc!, boundary.start, boundary.end, focusSnapshot)\n }\n return true\n }\n\n if ((boundary.projectionSlots?.children ?? 0) !== 1) {\n return rerenderSharedLayoutBoundary()\n }\n\n const slotRanges = collectProjectionSlotRanges(getBoundaryChildren(boundary.start, boundary.end))\n const slotRange = slotRanges.get(createProjectionSlotRangeKey(boundaryId, 'children', 0))\n if (!slotRange) {\n return rerenderSharedLayoutBoundary()\n }\n const routeRoot = resolveSharedLayoutRouteRoot(container, boundaryId, slotRange)\n if (!routeRoot) {\n return rerenderSharedLayoutBoundary()\n }\n if (routeRoot.kind === 'owner') {\n deactivateComponentSubtree(container, routeRoot.rootId)\n const focusSnapshot = captureBoundaryFocus(container.doc!, slotRange.start, slotRange.end)\n const { nodes } = renderRouteSubtreeForProjectionSlotOwner(\n container,\n routeRoot.ownerId,\n nextChildren,\n )\n replaceProjectionSlotContents(slotRange.start, slotRange.end, nodes)\n restoreBoundaryFocus(container.doc!, slotRange.start, slotRange.end, focusSnapshot)\n const boundaryProps =\n boundary.props && typeof boundary.props === 'object'\n ? (boundary.props as Record<string, unknown>)\n : null\n const boundaryRawProps =\n boundary.rawProps && typeof boundary.rawProps === 'object' ? boundary.rawProps : boundaryProps\n boundary.props = withUpdatedComponentChildren(boundaryProps, nextChildren)\n boundary.rawProps = withUpdatedComponentChildren(boundaryRawProps, nextChildren)\n container.dirty.delete(boundaryId)\n clearSharedLayoutDescendantDirtyStates(container, boundaryId, routeRoot.ownerId)\n boundary.active = false\n boundary.activateModeOnFlush = 'patch'\n boundary.reuseExistingDomOnActivate = true\n boundary.reuseProjectionSlotDomOnActivate = true\n container.dirty.add(boundaryId)\n if (boundary.start.parentNode && 'querySelectorAll' in boundary.start.parentNode) {\n bindRouterLinks(container, boundary.start.parentNode as ParentNode)\n }\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n return true\n }\n\n const currentRouteRoot = container.components.get(routeRoot.rootId) ?? null\n const needsFullBoundaryRerender =\n (currentRouteRoot?.watchCount ?? 0) > 0 || (currentRouteRoot?.visibleCount ?? 0) > 0\n\n if (needsFullBoundaryRerender) {\n deactivateComponentSubtree(container, routeRoot.rootId)\n return rerenderSharedLayoutBoundary()\n }\n\n boundary.props = {\n children: nextChildren,\n }\n deactivateComponentSubtree(container, routeRoot.rootId)\n const focusSnapshot = captureBoundaryFocus(container.doc!, slotRange.start, slotRange.end)\n const { nodes, visitedDescendants } = renderRouteSubtreeForProjectionSlot(\n container,\n boundary,\n routeRoot.childIndex,\n nextChildren,\n )\n replaceProjectionSlotContents(slotRange.start, slotRange.end, nodes)\n restoreBoundaryFocus(container.doc!, slotRange.start, slotRange.end, focusSnapshot)\n pruneRemovedComponents(container, routeRoot.rootId, visitedDescendants)\n boundary.active = false\n boundary.activateModeOnFlush = 'patch'\n boundary.reuseExistingDomOnActivate = true\n boundary.reuseProjectionSlotDomOnActivate = true\n container.dirty.add(boundaryId)\n if (boundary.start.parentNode && 'querySelectorAll' in boundary.start.parentNode) {\n bindRouterLinks(container, boundary.start.parentNode as ParentNode)\n }\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n return true\n}\n\nconst commitBrowserNavigation = (doc: Document, url: URL, mode: NavigationMode) => {\n if (!doc.defaultView || mode === 'pop') {\n return\n }\n if (mode === 'replace') {\n doc.defaultView.history.replaceState(null, '', url.href)\n return\n }\n doc.defaultView.history.pushState(null, '', url.href)\n}\n\nconst fallbackDocumentNavigation = (doc: Document, url: URL, mode: NavigationMode) => {\n if (!doc.defaultView) {\n return\n }\n if (mode === 'replace') {\n doc.defaultView.location.replace(url.href)\n return\n }\n if (mode === 'pop') {\n doc.defaultView.location.assign(url.href)\n return\n }\n doc.defaultView.location.assign(url.href)\n}\n\nconst cachePrefetchedLoaders = (\n container: RuntimeContainer,\n url: URL,\n loaders: Record<string, ResumeLoaderPayload>,\n) => {\n const router = ensureRouterState(container)\n const snapshots = new Map<string, LoaderSnapshot>()\n for (const [id, loaderPayload] of Object.entries(loaders)) {\n snapshots.set(id, {\n data: deserializeRuntimeValue(container, loaderPayload.data),\n error: deserializeRuntimeValue(container, loaderPayload.error),\n loaded: loaderPayload.loaded,\n })\n }\n router.prefetchedLoaders.set(routePrefetchKey(url), snapshots)\n}\n\nconst applyPrefetchedLoaders = (container: RuntimeContainer, url: URL) => {\n const router = ensureRouterState(container)\n const prefetchedLoaders = router.prefetchedLoaders.get(routePrefetchKey(url))\n if (!prefetchedLoaders) {\n return\n }\n for (const [id, snapshot] of prefetchedLoaders) {\n container.loaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n}\n\nconst extractScriptTextById = (html: string, id: string) => {\n const scriptPattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script>/gi\n const idPattern = /\\bid\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/i\n\n for (const match of html.matchAll(scriptPattern)) {\n const attrs = match[1] ?? ''\n const idMatch = attrs.match(idPattern)\n if (!idMatch) {\n continue\n }\n if ((idMatch[1] ?? idMatch[2]) === id) {\n return match[2] ?? ''\n }\n }\n\n return null\n}\n\nconst parseRouteDataFromHtml = (\n container: RuntimeContainer,\n requestUrl: URL,\n response: {\n url?: string\n },\n html: string,\n): RouteDataResponse => {\n const finalUrl = new URL(response.url || requestUrl.href, requestUrl.href)\n if (finalUrl.origin !== requestUrl.origin) {\n return {\n location: finalUrl.href,\n ok: false,\n }\n }\n\n const payloadText =\n extractScriptTextById(html, RESUME_FINAL_STATE_ELEMENT_ID) ??\n extractScriptTextById(html, RESUME_STATE_ELEMENT_ID)\n if (!payloadText) {\n return ROUTE_DOCUMENT_FALLBACK\n }\n\n let payload: ResumePayload\n try {\n payload = JSON.parse(payloadText) as ResumePayload\n } catch {\n return ROUTE_DOCUMENT_FALLBACK\n }\n\n const finalPathname = normalizeRoutePath(finalUrl.pathname)\n const router = ensureRouterState(container)\n const resolvedMatch = resolveRoutableMatch(router.manifest, finalPathname)\n if (!resolvedMatch) {\n return ROUTE_DOCUMENT_FALLBACK\n }\n\n return {\n finalHref: finalUrl.href,\n finalPathname,\n kind: resolvedMatch.kind,\n loaders: payload.loaders ?? {},\n ok: true,\n }\n}\n\nconst requestRouteData = async (\n container: RuntimeContainer,\n href: string,\n): Promise<RouteDataResponse> => {\n const baseUrl = typeof window === 'undefined' ? 'http://localhost' : window.location.href\n const requestUrl = new URL(href, baseUrl)\n\n try {\n const endpointUrl = new URL(ROUTE_DATA_ENDPOINT, requestUrl)\n endpointUrl.searchParams.set('href', requestUrl.href)\n const response = await fetch(endpointUrl.href)\n if (response.status >= 200 && response.status < 300) {\n const body = (await response.json()) as RouteDataResponse\n if (!body || typeof body !== 'object' || typeof body.ok !== 'boolean') {\n return ROUTE_DOCUMENT_FALLBACK\n }\n if (isRouteDataSuccess(body)) {\n return body\n }\n if ('location' in body && typeof body.location === 'string') {\n return body\n }\n }\n } catch {}\n\n try {\n const response = await fetch(requestUrl.href)\n const html = await response.text()\n return parseRouteDataFromHtml(container, requestUrl, response, html)\n } catch {}\n\n return ROUTE_DOCUMENT_FALLBACK\n}\n\nconst resetRouteLoaderState = (container: RuntimeContainer) => {\n container.loaders.clear()\n container.loaderStates.clear()\n\n for (const [id, record] of Array.from(container.signals.entries())) {\n if (!isLoaderSignalId(id)) {\n continue\n }\n for (const effect of Array.from(record.effects)) {\n clearEffectSignals(effect)\n }\n record.effects.clear()\n record.subscribers.clear()\n container.signals.delete(id)\n }\n}\n\nconst requestRoutePreflight = async (href: string): Promise<RoutePreflightResult> => {\n try {\n const requestUrl = new URL(\n href,\n typeof window === 'undefined' ? 'http://localhost' : window.location.href,\n )\n const response = await fetch(requestUrl.href, {\n headers: {\n [ROUTE_PREFLIGHT_REQUEST_HEADER]: '1',\n },\n })\n if (response.status < 200 || response.status >= 300) {\n return ROUTE_DOCUMENT_FALLBACK\n }\n const finalUrl = new URL(response.url || requestUrl.href, requestUrl.href)\n if (\n finalUrl.origin !== requestUrl.origin ||\n finalUrl.pathname !== requestUrl.pathname ||\n finalUrl.search !== requestUrl.search\n ) {\n return {\n location: finalUrl.href,\n ok: false,\n }\n }\n return {\n ok: true,\n }\n } catch {\n return ROUTE_DOCUMENT_FALLBACK\n }\n}\n\nconst prefetchResolvedRouteModules = async (\n container: RuntimeContainer,\n pathname: string,\n finalUrl: URL,\n) => {\n const router = ensureRouterState(container)\n const resolvedMatch = resolveRoutableMatch(router.manifest, pathname)\n if (resolvedMatch) {\n await loadResolvedRoute(container, resolvedMatch.matched, resolvedMatch.kind)\n }\n if (finalUrl.pathname !== pathname) {\n const redirectedPath = normalizeRoutePath(finalUrl.pathname)\n const redirectedMatch = resolveRoutableMatch(router.manifest, redirectedPath)\n if (redirectedMatch) {\n await loadResolvedRoute(container, redirectedMatch.matched, redirectedMatch.kind)\n }\n }\n}\n\nconst renderCurrentRoute = (container: RuntimeContainer, route: LoadedRoute) => {\n renderRouteIntoRoot(container, route.render)\n ensureRouterState(container).currentRoute = route\n}\n\nconst applyCurrentRouteMetadata = (container: RuntimeContainer, route: LoadedRoute, url: URL) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n const router = ensureRouterState(container)\n applyRouteMetadata(doc, route, url, router.defaultTitle)\n}\n\nconst commitRouteNavigation = (\n container: RuntimeContainer,\n route: LoadedRoute,\n url: URL,\n mode: NavigationMode,\n options?: {\n writeLocation?: boolean\n },\n) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n const router = ensureRouterState(container)\n applyCurrentRouteMetadata(container, route, url)\n commitBrowserNavigation(doc, url, mode)\n if (options?.writeLocation !== false) {\n writeRouterLocation(router, url)\n }\n}\n\nconst renderAndCommitRouteNavigation = (\n container: RuntimeContainer,\n route: LoadedRoute,\n url: URL,\n mode: NavigationMode,\n options?: {\n resetLoaders?: boolean\n },\n) => {\n if (options?.resetLoaders) {\n resetRouteLoaderState(container)\n }\n renderCurrentRoute(container, route)\n commitRouteNavigation(container, route, url, mode)\n}\n\nconst handleFailedRouteRequest = async (\n container: RuntimeContainer,\n doc: Document,\n url: URL,\n mode: NavigationMode,\n redirectDepth: number,\n result: Extract<RoutePrefetchResult | RoutePreflightResult, { ok: false }>,\n) => {\n if (!('location' in result)) {\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n\n const redirectUrl = new URL(result.location, doc.location.href)\n if (redirectDepth >= 8 || redirectUrl.origin !== doc.location.origin) {\n fallbackDocumentNavigation(doc, redirectUrl, mode)\n return\n }\n\n await navigateContainer(container, redirectUrl.href, {\n mode,\n redirectDepth: redirectDepth + 1,\n })\n}\n\nconst prefetchRoute = async (container: RuntimeContainer, href: string) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n\n const requestUrl = new URL(href, doc.location.href)\n if (requestUrl.origin !== doc.location.origin) {\n return\n }\n const key = routePrefetchKey(requestUrl)\n const router = ensureRouterState(container)\n const existing = router.routePrefetches.get(key)\n if (existing) {\n await existing\n return\n }\n\n const pathname = normalizeRoutePath(requestUrl.pathname)\n const routeTarget = resolveRoutableMatch(router.manifest, pathname)\n if (!routeTarget) {\n return\n }\n\n const prefetchPromise = (async () => {\n try {\n const result = await requestRouteData(container, requestUrl.href)\n if (!result.ok) {\n return result\n }\n\n const finalUrl = new URL(result.finalHref, requestUrl.href)\n if (finalUrl.origin !== requestUrl.origin) {\n return ROUTE_DOCUMENT_FALLBACK satisfies RoutePrefetchResult\n }\n\n await prefetchResolvedRouteModules(container, result.finalPathname, finalUrl)\n cachePrefetchedLoaders(container, finalUrl, result.loaders)\n return result\n } catch {\n return ROUTE_DOCUMENT_FALLBACK satisfies RoutePrefetchResult\n }\n })()\n\n router.routePrefetches.set(key, prefetchPromise)\n await prefetchPromise\n}\n\nconst navigateContainer = async (\n container: RuntimeContainer,\n href: string,\n options?: {\n force?: boolean\n redirectDepth?: number\n mode?: NavigationMode\n },\n) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n\n await waitForPendingDirtyFlush()\n\n const mode = options?.mode ?? 'push'\n const force = options?.force ?? false\n const redirectDepth = options?.redirectDepth ?? 0\n const url = new URL(href, doc.location.href)\n if (url.origin !== doc.location.origin) {\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n const pathname = normalizeRoutePath(url.pathname)\n const router = ensureRouterState(container)\n const matched = matchRouteManifest(router.manifest, pathname)\n const routeTarget = resolveRoutableMatch(router.manifest, pathname)\n\n const currentRouteUrl = new URL(router.currentUrl.value, doc.location.href)\n const currentHref = `${currentRouteUrl.pathname}${currentRouteUrl.search}${currentRouteUrl.hash}`\n const nextHref = `${url.pathname}${url.search}${url.hash}`\n if (!force && nextHref === currentHref) {\n return\n }\n\n const prefetchKey = routePrefetchKey(url)\n let pendingPrefetch = router.routePrefetches.get(prefetchKey)\n if (!pendingPrefetch && routeTarget) {\n await prefetchRoute(container, url.href)\n pendingPrefetch = router.routePrefetches.get(prefetchKey)\n }\n const prefetched = pendingPrefetch ? await pendingPrefetch : null\n if (prefetched && !prefetched.ok) {\n await handleFailedRouteRequest(container, doc, url, mode, redirectDepth, prefetched)\n return\n }\n\n const shouldPreflight = !!routeTarget?.matched.entry.hasMiddleware\n if (shouldPreflight && !prefetched) {\n const preflight = await requestRoutePreflight(url.href)\n if (!preflight.ok) {\n await handleFailedRouteRequest(container, doc, url, mode, redirectDepth, preflight)\n return\n }\n }\n\n if (!matched || !matched.entry.page) {\n const notFoundRoute = !matched\n ? await loadResolvedRouteFromSpecial(container, pathname, 'notFound')\n : null\n if (notFoundRoute) {\n renderAndCommitRouteNavigation(container, notFoundRoute, url, mode, {\n resetLoaders: true,\n })\n return\n }\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n\n if (!force && pathname === router.currentPath.value) {\n if (nextHref !== currentHref) {\n commitBrowserNavigation(doc, url, mode)\n writeRouterLocation(router, url)\n }\n return\n }\n\n resetRouteLoaderState(container)\n applyPrefetchedLoaders(\n container,\n prefetched?.ok ? new URL(prefetched.finalHref, doc.location.href) : url,\n )\n const sequence = ++router.sequence\n router.isNavigating.value = true\n\n try {\n const nextRoutePromise = loadResolvedRoute(container, matched)\n if (matched.entry.loading) {\n let settled = false\n nextRoutePromise.finally(() => {\n settled = true\n })\n await Promise.resolve()\n if (!settled) {\n const loadingRoute = await loadResolvedRoute(container, matched, 'loading')\n if (loadingRoute) {\n renderCurrentRoute(container, loadingRoute)\n }\n }\n }\n const [currentRoute, nextRoute] = await Promise.all([\n router.currentRoute\n ? Promise.resolve(router.currentRoute)\n : loadRouteComponent(container, router.currentPath.value),\n nextRoutePromise,\n ])\n if (!nextRoute) {\n fallbackDocumentNavigation(doc, url, mode)\n return\n }\n if (sequence !== router.sequence) {\n return\n }\n\n router.currentRoute = nextRoute\n writeRouterLocation(router, url)\n\n const sharedLayoutCount = countSharedLayouts(currentRoute, nextRoute)\n const reusedLayout =\n currentRoute && sharedLayoutCount > 0\n ? await updateSharedLayoutBoundary(container, currentRoute, nextRoute, sharedLayoutCount)\n : false\n\n if (!reusedLayout) {\n renderCurrentRoute(container, nextRoute)\n }\n\n commitRouteNavigation(container, nextRoute, url, mode, {\n writeLocation: false,\n })\n } catch (error) {\n if (sequence === router.sequence) {\n const fallbackRoute = isRouteNotFoundError(error)\n ? await loadResolvedRouteFromSpecial(container, pathname, 'notFound')\n : await loadResolvedRoute(container, matched, 'error')\n if (fallbackRoute) {\n renderAndCommitRouteNavigation(container, fallbackRoute, url, mode)\n return\n }\n fallbackDocumentNavigation(doc, url, mode)\n }\n } finally {\n if (sequence === router.sequence) {\n router.isNavigating.value = false\n }\n }\n}\n\nexport const refreshRouteContainer = async (container: RuntimeContainer) => {\n const doc = container.doc\n if (!doc) {\n return false\n }\n const url = new URL(doc.location.href)\n const router = ensureRouterState(container)\n const key = routePrefetchKey(url)\n router.prefetchedLoaders.delete(key)\n router.routePrefetches.delete(key)\n await prefetchRoute(container, url.href)\n await navigateContainer(container, url.href, {\n force: true,\n mode: 'replace',\n })\n return true\n}\n\nconst routeEntryReferencesModuleUrl = (entry: RouteModuleManifest, fileUrl: string) =>\n entry.page === fileUrl ||\n entry.loading === fileUrl ||\n entry.error === fileUrl ||\n entry.notFound === fileUrl ||\n entry.layouts.includes(fileUrl)\n\nconst routeReferencesModuleUrl = (route: LoadedRoute, fileUrl: string) =>\n route.page.url === fileUrl ||\n route.layouts.some((layout) => layout.url === fileUrl) ||\n routeEntryReferencesModuleUrl(route.entry, fileUrl)\n\nexport const invalidateRouteModulesForHmr = (\n container: RuntimeContainer,\n fileUrl: string,\n bustToken = Date.now(),\n) => {\n const router = container.router\n if (!router) {\n return false\n }\n\n let invalidated = false\n for (const [cacheKey, route] of Array.from(router.loadedRoutes.entries())) {\n if (!routeReferencesModuleUrl(route, fileUrl)) {\n continue\n }\n router.loadedRoutes.delete(cacheKey)\n invalidated = true\n }\n\n if (router.currentRoute && routeReferencesModuleUrl(router.currentRoute, fileUrl)) {\n router.currentRoute = null\n invalidated = true\n }\n\n const currentEntry = resolveCurrentRouteManifestEntry(router)\n if (currentEntry && routeEntryReferencesModuleUrl(currentEntry, fileUrl)) {\n invalidated = true\n }\n\n if (!invalidated) {\n return false\n }\n\n router.routeModuleBusts.set(fileUrl, bustToken)\n\n if (container.doc) {\n const currentUrl = new URL(container.doc.location.href)\n const currentKey = routePrefetchKey(currentUrl)\n router.prefetchedLoaders.delete(currentKey)\n router.routePrefetches.delete(currentKey)\n }\n\n return true\n}\n\nexport const refreshRouteContainerForHmr = async (\n container: RuntimeContainer,\n fileUrl: string,\n bustToken = Date.now(),\n) => {\n const doc = container.doc\n if (!doc || !invalidateRouteModulesForHmr(container, fileUrl, bustToken)) {\n return false\n }\n\n const router = ensureRouterState(container)\n const pathname = normalizeRoutePath(router.currentPath.value)\n\n try {\n const nextRoute =\n (await loadRouteComponent(container, pathname)) ??\n (await loadResolvedRouteFromSpecial(container, pathname, 'notFound'))\n if (!nextRoute) {\n await refreshRouteContainer(container)\n return true\n }\n\n renderCurrentRoute(container, nextRoute)\n applyCurrentRouteMetadata(container, nextRoute, new URL(doc.location.href))\n return true\n } catch {\n await refreshRouteContainer(container)\n return true\n }\n}\n\nexport const refreshRegisteredRouteContainers = async () => {\n for (const container of getResumeContainers()) {\n await refreshRouteContainer(container)\n }\n}\n\nconst activateComponent = async (container: RuntimeContainer, componentId: string) => {\n const component = container.components.get(componentId)\n if (!component?.start || !component.end || component.active) {\n return false\n }\n const activateSymbol = component.symbol\n const activateMode = component.activateModeOnFlush ?? 'replace'\n component.activateModeOnFlush = undefined\n\n if (component.symbol === SUSPENSE_COMPONENT_SYMBOL) {\n clearComponentSubscriptions(container, componentId)\n const oldDescendants = collectDescendantIds(container, componentId)\n const suspenseSpeculativeEffectCleanupSlot = component.reuseProjectionSlotDomOnActivate\n ? createCleanupSlot()\n : null\n if (!suspenseSpeculativeEffectCleanupSlot) {\n resetComponentRenderEffects(component)\n }\n const frame = createFrame(container, component, 'client', {\n effectCleanupSlot: suspenseSpeculativeEffectCleanupSlot ?? component.renderEffectCleanupSlot,\n reuseExistingDom: component.reuseExistingDomOnActivate ?? true,\n reuseProjectionSlotDom: component.reuseProjectionSlotDomOnActivate ?? false,\n })\n component.reuseExistingDomOnActivate = true\n component.reuseProjectionSlotDomOnActivate = false\n const parentRoot = component.start.parentNode\n const focusSnapshot = captureBoundaryFocus(container.doc!, component.start, component.end)\n let nodes: Node[]\n try {\n nodes = pushContainer(container, () =>\n pushFrame(frame, () =>\n renderSuspenseContentToNodes(component.props as SuspenseProps, container, componentId),\n ),\n )\n } catch (error) {\n disposeCleanupSlot(suspenseSpeculativeEffectCleanupSlot)\n throw error\n }\n disposeCleanupSlot(suspenseSpeculativeEffectCleanupSlot)\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const patched =\n activateMode === 'patch' &&\n tryPatchBoundaryContentsInPlace(component.start, component.end, nodes)\n const preservedDescendants = expandComponentIdsToDescendants(\n container,\n patched\n ? frame.projectionState.reuseExistingDom\n ? collectPreservedProjectionSlotComponentIds(container, component.start, component.end)\n : new Set<string>()\n : replaceBoundaryContents(component.start, component.end, nodes, {\n preserveProjectionSlots: frame.projectionState.reuseExistingDom,\n }),\n )\n restoreBoundaryFocus(container.doc!, component.start, component.end, focusSnapshot)\n if (parentRoot) {\n bindComponentBoundaries(container, parentRoot)\n restoreSignalRefs(container, parentRoot)\n }\n component.active = true\n const keptDescendants = new Set([\n ...frame.visitedDescendants,\n ...preservedDescendants,\n ...collectMountedDescendantComponentIds(container, component),\n ])\n pruneRemovedComponents(container, componentId, keptDescendants)\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n syncEffectOnlyLocalSignalPreference(component)\n return patched\n }\n\n clearComponentSubscriptions(container, componentId)\n const oldDescendants = collectDescendantIds(container, componentId)\n const scope = materializeScope(container, component.scopeId)\n await preloadResumableValue(container, scope)\n const module = await loadSymbol(container, activateSymbol)\n const rawProps =\n component.rawProps && typeof component.rawProps === 'object' ? component.rawProps : null\n if (rawProps) {\n component.props = evaluateProps(rawProps)\n }\n const externalMeta = getExternalComponentMeta(module.default)\n if (externalMeta && component.props && typeof component.props === 'object') {\n component.external = {\n kind: externalMeta.kind,\n slots: [...externalMeta.slots],\n }\n const focusSnapshot = captureBoundaryFocus(container.doc!, component.start, component.end)\n let host = getExternalRoot(component)\n if (!host) {\n replaceBoundaryContents(component.start, component.end, [\n createExternalRootNode(container, component.id, externalMeta.kind),\n ])\n host = getExternalRoot(component)\n }\n if (!host) {\n throw new Error(`Missing external root host for component ${component.id}.`)\n }\n host.setAttribute('data-e-external-snapshot', component.id)\n ;(\n globalThis as typeof globalThis & {\n __eclipsaExternalSlotSnapshotMap?: Map<\n HTMLElement,\n {\n dom: Map<string, Node[]> | null | undefined\n html: Map<string, string> | null | undefined\n }\n >\n }\n ).__eclipsaExternalSlotSnapshotMap ??= new Map()\n ;(\n globalThis as typeof globalThis & {\n __eclipsaExternalSlotSnapshotMap?: Map<\n HTMLElement,\n {\n dom: Map<string, Node[]> | null | undefined\n html: Map<string, string> | null | undefined\n }\n >\n }\n ).__eclipsaExternalSlotSnapshotMap!.set(host, {\n dom: component.externalSlotDom,\n html: component.externalSlotHtml,\n })\n restoreExternalSlotDom(component, host)\n await withClientContainer(container, async () => {\n await syncExternalComponentInstance(\n component,\n externalMeta,\n component.props as Record<string, unknown>,\n host!,\n )\n })\n rebindExternalHost(container, host)\n scheduleExternalHostRebind(container, host)\n restoreBoundaryFocus(container.doc!, component.start, component.end, focusSnapshot)\n component.active = true\n scheduleVisibleCallbacksCheck(container)\n return false\n }\n await preloadComponentProps(\n container,\n {\n captures: () => [],\n projectionSlots: component.projectionSlots ?? undefined,\n symbol: component.symbol,\n },\n component.props,\n )\n const speculativeEffectCleanupSlot = component.reuseProjectionSlotDomOnActivate\n ? createCleanupSlot()\n : null\n if (!speculativeEffectCleanupSlot) {\n resetComponentRenderEffects(component)\n }\n const frame = createFrame(container, component, 'client', {\n effectCleanupSlot: speculativeEffectCleanupSlot ?? component.renderEffectCleanupSlot,\n reuseExistingDom: component.reuseExistingDomOnActivate ?? true,\n reuseProjectionSlotDom: component.reuseProjectionSlotDomOnActivate ?? false,\n })\n component.reuseExistingDomOnActivate = true\n component.reuseProjectionSlotDomOnActivate = false\n const parentRoot = component.start.parentNode\n const focusSnapshot = captureBoundaryFocus(container.doc!, component.start, component.end)\n let nodes: Node[]\n try {\n nodes = pushContainer(container, () =>\n pushFrame(frame, () => {\n const renderProps = rawProps\n ? createRenderProps(\n component.id,\n {\n captures: () => [],\n projectionSlots: component.projectionSlots ?? undefined,\n symbol: activateSymbol,\n },\n rawProps,\n )\n : component.props && typeof component.props === 'object'\n ? createRenderProps(\n component.id,\n {\n captures: () => [],\n projectionSlots: component.projectionSlots ?? undefined,\n symbol: activateSymbol,\n },\n component.props as Record<string, unknown>,\n )\n : component.props\n const rendered = module.default(scope, renderProps)\n return toMountedNodes(rendered, container)\n }),\n )\n } catch (error) {\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n throw wrapGeneratedScopeReferenceError(error, {\n componentId,\n phase: 'rerendering',\n symbolId: activateSymbol,\n })\n }\n disposeCleanupSlot(speculativeEffectCleanupSlot)\n pruneComponentVisibles(container, component, frame.visibleCursor)\n pruneComponentWatches(container, component, frame.watchCursor)\n const patched =\n activateMode === 'patch' &&\n tryPatchBoundaryContentsInPlace(component.start, component.end, nodes)\n const preservedDescendants = expandComponentIdsToDescendants(\n container,\n patched\n ? frame.projectionState.reuseExistingDom\n ? collectPreservedProjectionSlotComponentIds(container, component.start, component.end)\n : new Set<string>()\n : replaceBoundaryContents(component.start, component.end, nodes, {\n preserveProjectionSlots: frame.projectionState.reuseExistingDom,\n }),\n )\n if (component.start.parentNode && 'querySelectorAll' in component.start.parentNode) {\n bindRouterLinks(container, component.start.parentNode as ParentNode)\n }\n restoreBoundaryFocus(container.doc!, component.start, component.end, focusSnapshot)\n if (parentRoot) {\n bindComponentBoundaries(container, parentRoot)\n restoreSignalRefs(container, parentRoot)\n }\n\n component.active = true\n\n const keptDescendants = new Set([\n ...frame.visitedDescendants,\n ...preservedDescendants,\n ...collectMountedDescendantComponentIds(container, component),\n ])\n pruneRemovedComponents(container, componentId, keptDescendants)\n\n for (const descendantId of oldDescendants) {\n if (keptDescendants.has(descendantId)) {\n continue\n }\n clearComponentSubscriptions(container, descendantId)\n }\n scheduleMountCallbacks(container, component, frame.mountCallbacks)\n scheduleVisibleCallbacksCheck(container)\n syncEffectOnlyLocalSignalPreference(component)\n return patched\n}\n\nconst sortDirtyComponents = (ids: Iterable<string>) =>\n [...ids].sort((a, b) => a.split('.').length - b.split('.').length)\n\nconst parseSymbolIdFromUrl = (url: string) => {\n const parsed = new URL(url, 'http://localhost')\n return parsed.searchParams.get('eclipsa-symbol')\n}\n\nexport const resolveResumeHmrBoundarySymbols = (payload: ResumeHmrUpdatePayload) => {\n const symbolIds = new Set([...payload.rerenderComponentSymbols, ...payload.rerenderOwnerSymbols])\n\n for (const symbolId of symbolIds) {\n const replacementUrl = payload.symbolUrlReplacements[symbolId]\n if (!replacementUrl) {\n continue\n }\n const replacementSymbolId = parseSymbolIdFromUrl(replacementUrl)\n if (replacementSymbolId) {\n symbolIds.add(replacementSymbolId)\n }\n }\n\n return [...symbolIds]\n}\n\nconst findNearestMountedBoundary = (container: RuntimeContainer, componentId: string) => {\n let currentId: string | null = componentId\n while (currentId && currentId !== ROOT_COMPONENT_ID) {\n const component = container.components.get(currentId)\n if (!component) {\n return null\n }\n if (component.start && component.end) {\n return component.id\n }\n currentId = component.parentId\n }\n return null\n}\n\nexport const collectResumeHmrBoundaryIds = (\n container: RuntimeContainer,\n symbolIds: Iterable<string>,\n) => {\n const targetSymbols = new Set(symbolIds)\n const pendingBoundaries = new Set<string>()\n\n for (const component of container.components.values()) {\n if (!targetSymbols.has(component.symbol)) {\n continue\n }\n const boundaryId = findNearestMountedBoundary(container, component.id)\n if (!boundaryId) {\n if (component.active) {\n return null\n }\n continue\n }\n pendingBoundaries.add(boundaryId)\n }\n\n const result: string[] = []\n for (const boundaryId of sortDirtyComponents(pendingBoundaries)) {\n if (\n result.some((parentId) => boundaryId === parentId || isDescendantOf(parentId, boundaryId))\n ) {\n continue\n }\n result.push(boundaryId)\n }\n return result\n}\n\nexport const applyResumeHmrSymbolReplacements = (\n container: RuntimeContainer,\n replacements: Record<string, string>,\n) => {\n for (const [oldSymbolId, url] of Object.entries(replacements)) {\n const currentUrl = container.symbols.get(oldSymbolId)\n const affectedIds = new Set<string>([oldSymbolId])\n\n if (currentUrl) {\n for (const [candidateId, candidateUrl] of container.symbols.entries()) {\n if (candidateUrl === currentUrl) {\n affectedIds.add(candidateId)\n }\n }\n }\n\n for (const affectedId of affectedIds) {\n container.symbols.set(affectedId, url)\n }\n invalidateRuntimeSymbolCaches(container, affectedIds)\n\n const nextSymbolId = parseSymbolIdFromUrl(url)\n if (!nextSymbolId) {\n continue\n }\n\n for (const component of container.components.values()) {\n if (affectedIds.has(component.symbol)) {\n component.symbol = nextSymbolId\n }\n }\n\n for (const watch of container.watches.values()) {\n if (affectedIds.has(watch.symbol)) {\n watch.symbol = nextSymbolId\n }\n }\n\n for (const visible of container.visibles.values()) {\n if (affectedIds.has(visible.symbol)) {\n visible.symbol = nextSymbolId\n }\n }\n\n container.symbols.set(nextSymbolId, url)\n invalidateRuntimeSymbolCaches(container, [nextSymbolId])\n }\n}\n\nexport const markResumeHmrBoundaryDirty = (container: RuntimeContainer, boundaryId: string) => {\n const component = container.components.get(boundaryId)\n if (!component) {\n return false\n }\n resetComponentVisibleStates(container, boundaryId)\n component.active = false\n component.activateModeOnFlush = 'replace'\n component.reuseExistingDomOnActivate = false\n component.reuseProjectionSlotDomOnActivate = false\n container.dirty.add(boundaryId)\n return true\n}\n\nexport const applyResumeHmrUpdate = async (\n container: RuntimeContainer,\n payload: ResumeHmrUpdatePayload,\n) => {\n if (payload.fullReload) {\n return 'reload' as const\n }\n\n const rerenderSymbolIds = resolveResumeHmrBoundarySymbols(payload)\n const boundaryIds = collectResumeHmrBoundaryIds(container, rerenderSymbolIds)\n if (boundaryIds === null || (rerenderSymbolIds.length > 0 && boundaryIds.length === 0)) {\n return 'reload' as const\n }\n\n applyResumeHmrSymbolReplacements(container, payload.symbolUrlReplacements)\n const invalidatedSymbolIds = rerenderSymbolIds.filter((symbolId) => {\n if (Object.hasOwn(payload.symbolUrlReplacements, symbolId)) {\n return true\n }\n const currentUrl = container.symbols.get(symbolId)\n return !!currentUrl && canBustRuntimeSymbolUrl(currentUrl)\n })\n bustRuntimeSymbolUrls(container, invalidatedSymbolIds, Date.now())\n invalidateRuntimeSymbolCaches(container, invalidatedSymbolIds)\n\n for (const boundaryId of boundaryIds) {\n markResumeHmrBoundaryDirty(container, boundaryId)\n }\n\n if (container.dirty.size > 0) {\n await flushDirtyComponents(container)\n }\n\n return 'updated' as const\n}\n\nexport const applyResumeHmrUpdateToRegisteredContainers = async (\n payload: ResumeHmrUpdatePayload,\n) => {\n const routeRefreshBustToken = Date.now()\n let handled = false\n for (const container of getResumeContainers()) {\n const refreshed = await refreshRouteContainerForHmr(\n container,\n payload.fileUrl,\n routeRefreshBustToken,\n )\n if (refreshed) {\n handled = true\n continue\n }\n const result = await applyResumeHmrUpdate(container, payload)\n if (result === 'updated') {\n handled = true\n }\n }\n\n return handled ? ('updated' as const) : ('reload' as const)\n}\n\nexport const flushDirtyComponents = async (container: RuntimeContainer) => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n while (true) {\n const existing = globalRecord[DIRTY_FLUSH_PROMISE_KEY]\n if (existing instanceof Promise) {\n await existing\n if (container.dirty.size === 0) {\n return\n }\n continue\n }\n\n if (container.dirty.size === 0) {\n return\n }\n\n const pendingFocus = capturePendingFocusRestore(container, container.doc?.activeElement)\n\n const flushing = (async () => {\n while (container.dirty.size > 0) {\n const batch = sortDirtyComponents(container.dirty)\n container.dirty.clear()\n const patchedAncestors = new Set<string>()\n const rerendered = new Set<string>()\n for (const componentId of batch) {\n const rerenderedParent = [...rerendered].find(\n (parentId) => componentId === parentId || isDescendantOf(parentId, componentId),\n )\n if (rerenderedParent) {\n const component = container.components.get(componentId)\n if (\n patchedAncestors.has(rerenderedParent) &&\n component?.start?.parentNode &&\n component.end?.parentNode\n ) {\n component.active = false\n container.dirty.add(componentId)\n }\n continue\n }\n const component = container.components.get(componentId)\n if (component?.active) {\n continue\n }\n const preservesProjectionSlotDom =\n (component?.activateModeOnFlush ?? 'replace') === 'patch' &&\n (component?.reuseProjectionSlotDomOnActivate ?? false)\n const patched = await activateComponent(container, componentId)\n rerendered.add(componentId)\n if (preservesProjectionSlotDom && patched) {\n patchedAncestors.add(componentId)\n }\n }\n }\n })()\n\n globalRecord[DIRTY_FLUSH_PROMISE_KEY] = flushing\n try {\n await flushing\n } finally {\n if (globalRecord[DIRTY_FLUSH_PROMISE_KEY] === flushing) {\n delete globalRecord[DIRTY_FLUSH_PROMISE_KEY]\n }\n }\n\n restorePendingFocus(container, pendingFocus)\n\n if (container.dirty.size === 0) {\n return\n }\n }\n}\n\nconst waitForPendingDirtyFlush = async () => {\n const existing = (globalThis as Record<PropertyKey, unknown>)[DIRTY_FLUSH_PROMISE_KEY]\n if (existing instanceof Promise) {\n await existing\n }\n}\n\nexport const beginSSRContainer = <T>(\n symbols: Record<string, string>,\n render: () => T,\n): {\n container: RuntimeContainer\n result: T\n} => {\n const container = createContainer(symbols)\n const rootComponent: ComponentState = {\n active: false,\n didMount: false,\n id: ROOT_COMPONENT_ID,\n mountCleanupSlots: [],\n parentId: null,\n props: {},\n projectionSlots: null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n scopeId: registerScope(container, []),\n signalIds: [],\n symbol: ROOT_COMPONENT_ID,\n suspensePromise: null,\n visibleCount: 0,\n watchCount: 0,\n }\n\n const rootFrame = createFrame(container, rootComponent, 'ssr')\n const result = pushContainer(container, () => pushFrame(rootFrame, render))\n return {\n container,\n result,\n }\n}\n\nexport const beginAsyncSSRContainer = async <T>(\n symbols: Record<string, string>,\n render: () => T,\n prepare?: (container: RuntimeContainer) => void | Promise<void>,\n options?: {\n asyncSignalSnapshotCache?: Map<string, unknown>\n externalRenderCache?: RuntimeContainer['externalRenderCache']\n },\n): Promise<{\n container: RuntimeContainer\n result: T\n}> => {\n const container = createContainer(\n symbols,\n undefined,\n options?.asyncSignalSnapshotCache,\n options?.externalRenderCache,\n )\n const rootComponent: ComponentState = {\n active: false,\n didMount: false,\n id: ROOT_COMPONENT_ID,\n mountCleanupSlots: [],\n parentId: null,\n props: {},\n projectionSlots: null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n scopeId: registerScope(container, []),\n signalIds: [],\n symbol: ROOT_COMPONENT_ID,\n suspensePromise: null,\n visibleCount: 0,\n watchCount: 0,\n }\n\n const rootFrame = createFrame(container, rootComponent, 'ssr')\n await prepare?.(container)\n const result = pushContainer(container, () => pushFrame(rootFrame, render))\n return {\n container,\n result,\n }\n}\n\nconst createResumePayload = (\n container: RuntimeContainer,\n componentIds?: Iterable<string>,\n): ResumePayload => {\n const keepComponents = componentIds ? new Set(componentIds) : null\n const componentEntries = [...container.components.entries()].filter(\n ([id]) => !keepComponents || keepComponents.has(id),\n )\n const keepSignals = new Set(componentEntries.flatMap(([, component]) => component.signalIds))\n if (keepComponents) {\n for (const [id, record] of container.signals.entries()) {\n if ([...record.subscribers].some((componentId) => keepComponents.has(componentId))) {\n keepSignals.add(id)\n }\n }\n }\n\n return {\n actions: Object.fromEntries(\n [...container.actionStates.entries()].map(([id, action]) => [\n id,\n {\n error: serializeRuntimeValue(container, action.error),\n input: serializeRuntimeValue(container, action.input),\n result: serializeRuntimeValue(container, action.result),\n } satisfies ResumeActionPayload,\n ]),\n ),\n components: Object.fromEntries(\n componentEntries.map(([id, component]) => [\n id,\n {\n ...(component.external\n ? {\n external: {\n kind: component.external.kind,\n slots: [...component.external.slots],\n },\n }\n : {}),\n ...(component.optimizedRoot ? { optimizedRoot: true } : {}),\n props: serializeRuntimeValue(container, component.props),\n ...(component.projectionSlots\n ? { projectionSlots: { ...component.projectionSlots } }\n : {}),\n scope: component.scopeId,\n signalIds: [...component.signalIds],\n symbol: component.symbol,\n visibleCount: component.visibleCount,\n watchCount: component.watchCount,\n } satisfies ResumeComponentPayload,\n ]),\n ),\n loaders: Object.fromEntries(\n [...container.loaderStates.entries()].map(([id, loader]) => [\n id,\n {\n data: serializeRuntimeValue(container, loader.data),\n error: serializeRuntimeValue(container, loader.error),\n loaded: loader.loaded,\n } satisfies ResumeLoaderPayload,\n ]),\n ),\n scopes: Object.fromEntries(container.scopes.entries()),\n signals: Object.fromEntries(\n [...container.signals.entries()]\n .filter(([id]) => !keepComponents || keepSignals.has(id))\n .map(([id, record]) => [id, serializeRuntimeValue(container, record.value)]),\n ),\n subscriptions: Object.fromEntries(\n [...container.signals.entries()]\n .filter(([id]) => !keepComponents || keepSignals.has(id))\n .map(([id, record]) => [\n id,\n [...record.subscribers].filter(\n (componentId) => !keepComponents || keepComponents.has(componentId),\n ),\n ]),\n ),\n symbols: Object.fromEntries(container.symbols.entries()),\n visibles: Object.fromEntries(\n [...container.visibles.entries()]\n .filter(([, visible]) => !keepComponents || keepComponents.has(visible.componentId))\n .map(([id, visible]) => [\n id,\n {\n componentId: visible.componentId,\n scope: visible.scopeId,\n symbol: visible.symbol,\n } satisfies ResumeVisiblePayload,\n ]),\n ),\n watches: Object.fromEntries(\n [...container.watches.entries()]\n .filter(([, watch]) => !keepComponents || keepComponents.has(watch.componentId))\n .map(([id, watch]) => [\n id,\n {\n componentId: watch.componentId,\n mode: watch.mode,\n scope: watch.scopeId,\n signals: [...watch.effect.signals].map((signal) => signal.id),\n symbol: watch.symbol,\n } satisfies ResumeWatchPayload,\n ]),\n ),\n }\n}\n\nexport const toResumePayload = (container: RuntimeContainer): ResumePayload =>\n createResumePayload(container)\n\nexport const toResumePayloadSubset = (\n container: RuntimeContainer,\n componentIds: Iterable<string>,\n): ResumePayload => createResumePayload(container, componentIds)\n\nconst bindComponentBoundaries = (container: RuntimeContainer, root: ParentNode) => {\n if (!hasOwnerDocument(root)) {\n return\n }\n for (const [id, boundary] of scanComponentBoundaries(root)) {\n const component = container.components.get(id)\n if (!component) {\n continue\n }\n component.start = boundary.start\n component.end = boundary.end\n }\n}\n\nexport const mergeResumePayload = (container: RuntimeContainer, payload: ResumePayload) => {\n for (const [id, actionPayload] of Object.entries(payload.actions ?? {})) {\n container.actionStates.set(id, {\n error: deserializeRuntimeValue(container, actionPayload.error),\n input: deserializeRuntimeValue(container, actionPayload.input),\n result: deserializeRuntimeValue(container, actionPayload.result),\n })\n }\n\n for (const [id, encodedValue] of Object.entries(payload.signals)) {\n const decodedValue = deserializeRuntimeValue(container, encodedValue)\n const record = ensureSignalRecord(container, id, decodedValue)\n record.value = decodedValue\n }\n\n for (const [id, loaderPayload] of Object.entries(payload.loaders ?? {})) {\n container.loaderStates.set(id, {\n data: deserializeRuntimeValue(container, loaderPayload.data),\n error: deserializeRuntimeValue(container, loaderPayload.error),\n loaded: loaderPayload.loaded,\n })\n }\n\n for (const [id, slots] of Object.entries(payload.scopes)) {\n container.scopes.set(id, slots)\n }\n container.nextScopeId = findNextNumericId(container.scopes.keys(), 'sc')\n\n for (const [id, componentPayload] of Object.entries(payload.components)) {\n container.components.set(id, {\n active: false,\n didMount: false,\n external: componentPayload.external\n ? {\n kind: componentPayload.external.kind,\n slots: [...componentPayload.external.slots],\n }\n : undefined,\n externalInstance: undefined,\n externalMeta: null,\n id,\n mountCleanupSlots: [],\n optimizedRoot: componentPayload.optimizedRoot === true,\n parentId: id.includes('.') ? id.slice(0, id.lastIndexOf('.')) : ROOT_COMPONENT_ID,\n prefersEffectOnlyLocalSignalWrites: false,\n props: deserializeRuntimeValue(container, componentPayload.props),\n projectionSlots: componentPayload.projectionSlots\n ? { ...componentPayload.projectionSlots }\n : null,\n rawProps: null,\n renderEffectCleanupSlot: createCleanupSlot(),\n scopeId: componentPayload.scope,\n signalIds: [...componentPayload.signalIds],\n symbol: componentPayload.symbol,\n suspensePromise: null,\n visibleCount: componentPayload.visibleCount ?? 0,\n watchCount: componentPayload.watchCount,\n })\n }\n\n for (const [signalId, subscribers] of Object.entries(payload.subscriptions)) {\n const record = container.signals.get(signalId)\n if (!record) {\n continue\n }\n record.subscribers = new Set(subscribers)\n }\n container.nextSignalId = findNextNumericId(container.signals.keys(), 's')\n container.nextAtomId = findNextNumericId(container.signals.keys(), 'a')\n\n for (const [id, watchPayload] of Object.entries(payload.watches)) {\n const watch = getOrCreateWatchState(container, id, watchPayload.componentId)\n watch.mode = watchPayload.mode\n watch.scopeId = watchPayload.scope\n watch.symbol = watchPayload.symbol\n watch.resumed = true\n watch.track = null\n watch.run = null\n clearEffectSignals(watch.effect)\n for (const signalId of watchPayload.signals) {\n const record = container.signals.get(signalId)\n if (!record) {\n continue\n }\n watch.effect.signals.add(record)\n record.effects.add(watch.effect)\n }\n }\n\n for (const [id, visiblePayload] of Object.entries(payload.visibles ?? {})) {\n const visible = getOrCreateVisibleState(container, id, visiblePayload.componentId)\n visible.done = false\n visible.pending = null\n visible.run = null\n visible.scopeId = visiblePayload.scope\n visible.symbol = visiblePayload.symbol\n }\n}\n\nconst pruneStreamedBoundaryDescendants = (\n container: RuntimeContainer,\n boundaryId: string,\n payload: ResumePayload,\n) => {\n const keep = new Set(\n Object.keys(payload.components).filter((candidate) => isDescendantOf(boundaryId, candidate)),\n )\n pruneRemovedComponents(container, boundaryId, keep)\n}\n\nconst applyStreamedSuspenseBoundary = (\n container: RuntimeContainer,\n chunk: StreamedSuspenseChunk,\n) => {\n const doc = container.doc\n if (!doc) {\n return\n }\n const component = container.components.get(chunk.boundaryId)\n if (!component?.start || !component.end) {\n return\n }\n const template = doc.getElementById(chunk.templateId)\n const payloadScript = doc.getElementById(chunk.payloadScriptId)\n if (!(template instanceof HTMLTemplateElement) || !payloadScript?.textContent) {\n return\n }\n\n const payload = JSON.parse(payloadScript.textContent) as ResumePayload\n const focusSnapshot = captureBoundaryFocus(doc, component.start, component.end)\n const fragment = template.content.cloneNode(true) as DocumentFragment\n const nodes = [...fragment.childNodes]\n replaceBoundaryContents(component.start, component.end, nodes)\n pruneStreamedBoundaryDescendants(container, chunk.boundaryId, payload)\n mergeResumePayload(container, payload)\n component.suspensePromise = null\n\n const parentRoot = component.start.parentNode\n if (parentRoot) {\n bindComponentBoundaries(container, parentRoot)\n restoreSignalRefs(container, parentRoot)\n if ('querySelectorAll' in parentRoot) {\n bindRouterLinks(container, parentRoot)\n }\n }\n\n restoreBoundaryFocus(doc, component.start, component.end, focusSnapshot)\n scheduleVisibleCallbacksCheck(container)\n template.remove()\n payloadScript.remove()\n}\n\nconst getStreamState = (): StreamState => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[STREAM_STATE_KEY]\n if (existing && typeof existing === 'object' && 'enqueue' in existing && 'pending' in existing) {\n return existing as StreamState\n }\n const created: StreamState = {\n enqueue(chunk) {\n created.pending.push(chunk)\n void created.process?.()\n },\n pending: [],\n processing: null,\n }\n globalRecord[STREAM_STATE_KEY] = created\n return created\n}\n\nexport const getStreamingResumeBootstrapScriptContent = () =>\n `(()=>{const streamKey=\"${STREAM_STATE_KEY}\";const stream=window[streamKey]??={pending:[]};stream.enqueue=stream.enqueue??function(chunk){this.pending.push(chunk);if(this.process){void this.process();}};const navKey=\"${PENDING_RESUME_LINK_KEY}\";document.addEventListener(\"click\",(event)=>{if(document.body?.getAttribute(\"data-e-resume\")!==\"paused\")return;if(event.defaultPrevented||event.button!==0||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return;let element=event.target instanceof Element?event.target:event.target instanceof Node?event.target.parentElement:null;while(element&&!(element instanceof HTMLAnchorElement)){element=element.parentElement;}if(!element||!element.hasAttribute(\"${ROUTE_LINK_ATTR}\")||element.hasAttribute(\"download\"))return;if(element.target&&element.target!==\"_self\")return;const href=element.getAttribute(\"href\");if(!href)return;const url=new URL(href,window.location.href);if(url.origin!==window.location.origin)return;event.preventDefault();window[navKey]={href:url.href,replace:element.getAttribute(\"${ROUTE_REPLACE_ATTR}\")===\"true\"};},{capture:true});})();`\n\nconst takePendingResumeLinkNavigation = (): PendingResumeLinkNavigation | null => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const pending = globalRecord[PENDING_RESUME_LINK_KEY]\n if (\n !pending ||\n typeof pending !== 'object' ||\n typeof (pending as { href?: unknown }).href !== 'string'\n ) {\n return null\n }\n delete globalRecord[PENDING_RESUME_LINK_KEY]\n return {\n href: (pending as { href: string }).href,\n replace: (pending as { replace?: unknown }).replace === true,\n }\n}\n\nconst installStreamedSuspenseController = (container: RuntimeContainer) => {\n const state = getStreamState()\n state.process = async () => {\n if (state.processing) {\n await state.processing\n return\n }\n state.processing = (async () => {\n while (state.pending.length > 0) {\n const chunk = state.pending.shift()\n if (!chunk) {\n continue\n }\n applyStreamedSuspenseBoundary(container, chunk)\n }\n })()\n try {\n await state.processing\n } finally {\n state.processing = null\n }\n }\n if (state.pending.length > 0) {\n void state.process()\n }\n}\n\nexport const createResumeContainer = (\n source: Document | HTMLElement,\n payload: ResumePayload,\n options?: {\n routeManifest?: RouteManifest\n },\n) => {\n const doc = source instanceof Document ? source : source.ownerDocument\n const root = source instanceof Document ? doc.body : source\n const container = createContainer(payload.symbols, doc)\n container.rootElement = root as HTMLElement\n ensureRouterState(container, options?.routeManifest)\n\n mergeResumePayload(container, payload)\n rememberManagedAttributesForNode(root as HTMLElement)\n bindComponentBoundaries(container, root as HTMLElement)\n for (const component of container.components.values()) {\n component.externalSlotHtml = captureExternalSlotHtml(component)\n component.externalSlotDom = captureExternalSlotDom(component)\n }\n ;(\n globalThis as typeof globalThis & {\n __eclipsaExternalSlotSnapshotStore?: Record<\n string,\n {\n dom: Map<string, Node[]> | null | undefined\n html: Map<string, string> | null | undefined\n }\n >\n }\n ).__eclipsaExternalSlotSnapshotStore = Object.fromEntries(\n [...container.components.values()]\n .filter(\n (component) =>\n !!component.external && (component.externalSlotDom || component.externalSlotHtml),\n )\n .map((component) => [\n component.id,\n {\n dom: component.externalSlotDom,\n html: component.externalSlotHtml,\n },\n ]),\n )\n restoreSignalRefs(container, root as HTMLElement)\n\n restoreRegisteredRpcHandles(container)\n\n ensureRouterState(container)\n syncRouterLocationSilently(container, doc.location.href)\n scheduleVisibleCallbacksCheck(container)\n\n return container\n}\n\nconst canRestoreResumedLocalSignalEffects = (\n container: RuntimeContainer,\n component: ComponentState,\n) =>\n !!component.start &&\n !!component.end &&\n !component.active &&\n !component.external &&\n component.signalIds.length > 0 &&\n (component.symbol === SUSPENSE_COMPONENT_SYMBOL ||\n container.imports.has(component.symbol) ||\n container.symbols.has(component.symbol))\n\nexport const restoreResumedLocalSignalEffects = async (container: RuntimeContainer) => {\n let queued = false\n const restoredIds: string[] = []\n\n for (const componentId of sortDirtyComponents(\n [...container.components.values()]\n .filter((component) => canRestoreResumedLocalSignalEffects(container, component))\n .map((component) => component.id),\n )) {\n const component = container.components.get(componentId)\n if (!component || component.active) {\n continue\n }\n component.active = false\n component.activateModeOnFlush = 'replace'\n component.reuseExistingDomOnActivate = false\n component.reuseProjectionSlotDomOnActivate = false\n container.dirty.add(component.id)\n restoredIds.push(component.id)\n queued = true\n }\n\n if (queued) {\n await flushDirtyComponents(container)\n }\n\n for (const componentId of restoredIds) {\n const component = container.components.get(componentId)\n if (!component?.active) {\n continue\n }\n syncEffectOnlyLocalSignalPreference(component)\n }\n}\n\nexport const restoreResumedExternalComponents = async (container: RuntimeContainer) => {\n const externalComponents = sortDirtyComponents(\n [...container.components.values()]\n .filter(\n (component) =>\n !!component.external &&\n !!component.start &&\n !!component.end &&\n !component.active &&\n !component.didMount &&\n container.symbols.has(component.symbol),\n )\n .map((component) => component.id),\n )\n\n for (const componentId of externalComponents) {\n await activateComponent(container, componentId)\n }\n}\n\nexport const restoreRegisteredRpcHandles = (container: RuntimeContainer) => {\n const hadWindow = 'window' in globalThis && globalThis.window !== undefined\n const injectedWindow =\n !hadWindow && container.doc?.defaultView\n ? (container.doc.defaultView as Window & typeof globalThis)\n : null\n\n if (injectedWindow) {\n ;(globalThis as { window?: Window & typeof globalThis }).window = injectedWindow\n }\n\n try {\n withRuntimeContainer(container, () => {\n for (const id of getRegisteredActionHookIds()) {\n getRegisteredActionHook<() => unknown>(id)?.()\n }\n for (const id of getRegisteredLoaderHookIds()) {\n getRegisteredLoaderHook<() => unknown>(id)?.()\n }\n })\n } finally {\n if (injectedWindow) {\n delete (globalThis as { window?: Window & typeof globalThis }).window\n }\n }\n}\n\nexport const primeRouteModules = async (container: RuntimeContainer) => {\n const router = ensureRouterState(container)\n const currentRoute = await loadRouteComponent(container, router.currentPath.value)\n if (currentRoute) {\n router.currentRoute = currentRoute\n if (container.doc) {\n applyCurrentRouteMetadata(container, currentRoute, new URL(container.doc.location.href))\n }\n }\n}\n\nconst getRouterEventState = (event: Event): RouterEventState => {\n const eventRecord = event as Event & {\n [ROUTER_EVENT_STATE_KEY]?: RouterEventState\n preventDefault: () => void\n }\n const existing = eventRecord[ROUTER_EVENT_STATE_KEY]\n if (existing) {\n return existing\n }\n\n const originalPreventDefault = event.preventDefault.bind(event)\n const state: RouterEventState = {\n originalPreventDefault,\n routerPrevented: false,\n userPrevented: false,\n }\n\n eventRecord.preventDefault = () => {\n if (state.routerPrevented) {\n state.userPrevented = true\n }\n originalPreventDefault()\n }\n eventRecord[ROUTER_EVENT_STATE_KEY] = state\n return state\n}\n\nconst findInteractiveTarget = (target: EventTarget | null, eventName: string): Element | null => {\n let element = isElementNode(target)\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n while (element) {\n if (element.hasAttribute(`data-e-on${eventName}`)) {\n return element\n }\n element = element.parentElement\n }\n return null\n}\n\nconst INTERACTIVE_PREFETCH_EVENT_NAMES = [\n 'click',\n 'input',\n 'change',\n 'submit',\n 'keydown',\n 'compositionstart',\n 'compositionend',\n] as const\nconst INTERACTIVE_PREFETCH_SELECTOR = INTERACTIVE_PREFETCH_EVENT_NAMES.map(\n (eventName) => `[data-e-on${eventName}]`,\n).join(', ')\n\nconst prefetchElementSymbols = (\n container: RuntimeContainer,\n element: Element,\n eventNames: readonly string[],\n) => {\n for (const eventName of eventNames) {\n const binding = element.getAttribute(`data-e-on${eventName}`)\n if (!binding) {\n continue\n }\n const { symbolId } = parseBinding(binding)\n void loadSymbol(container, symbolId).catch(() => {})\n }\n}\n\nconst prefetchInteractiveTargetSymbols = (\n container: RuntimeContainer,\n target: EventTarget | null,\n eventNames: readonly string[],\n) => {\n let element = isElementNode(target)\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n\n while (element) {\n prefetchElementSymbols(container, element, eventNames)\n element = element.parentElement\n }\n}\n\nconst getPendingLinkNavigationForLink = (\n container: RuntimeContainer,\n event: Event,\n link: HTMLAnchorElement,\n): PendingLinkNavigation | null => {\n if (!(event instanceof MouseEvent)) {\n return null\n }\n if (event.defaultPrevented) {\n return null\n }\n if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) {\n return null\n }\n if (link.hasAttribute('download')) {\n return null\n }\n if (link.target && link.target !== '_self') {\n return null\n }\n\n const href = link.getAttribute('href')\n if (!href || !container.doc) {\n return null\n }\n\n const url = new URL(href, container.doc.location.href)\n const pathname = normalizeRoutePath(url.pathname)\n if (url.origin !== container.doc.location.origin) {\n return null\n }\n const matched = matchRouteManifest(ensureRouterState(container).manifest, pathname)\n if (!matched?.entry.page) {\n return null\n }\n\n const state = getRouterEventState(event)\n state.routerPrevented = true\n state.originalPreventDefault()\n\n return {\n href: url.href,\n replace: link.getAttribute(ROUTE_REPLACE_ATTR) === 'true',\n state,\n }\n}\n\nconst getLinkPrefetchMode = (link: HTMLAnchorElement): LinkPrefetchMode => {\n const value = link.getAttribute(ROUTE_PREFETCH_ATTR)\n if (value === 'hover' || value === 'focus' || value === 'intent' || value === 'none') {\n return value\n }\n return 'intent'\n}\n\nconst findRouteLinkTarget = (target: EventTarget | null) => {\n let element = isElementNode(target)\n ? target\n : target instanceof Node\n ? target.parentElement\n : null\n\n while (element) {\n if (isHTMLAnchorElementNode(element) && element.hasAttribute(ROUTE_LINK_ATTR)) {\n return element\n }\n element = element.parentElement\n }\n\n return null\n}\n\nconst bindRouterLinkPrefetch = (container: RuntimeContainer, link: HTMLAnchorElement) => {\n const boundLink = link as HTMLAnchorElement & {\n [ROUTER_LINK_PREFETCH_BOUND_KEY]?: true\n }\n if (boundLink[ROUTER_LINK_PREFETCH_BOUND_KEY]) {\n return\n }\n\n boundLink[ROUTER_LINK_PREFETCH_BOUND_KEY] = true\n const mode = getLinkPrefetchMode(link)\n if (mode === 'none') {\n return\n }\n\n const runPrefetch = () => {\n const href = link.getAttribute('href')\n if (!href) {\n return\n }\n void prefetchRoute(container, href)\n }\n\n const runPointerIntentPrefetch = (event: Event) => {\n if (event instanceof MouseEvent && event.button !== 0) {\n return\n }\n runPrefetch()\n }\n\n if (mode === 'hover' || mode === 'intent') {\n link.addEventListener('mouseenter', runPrefetch)\n }\n if (mode === 'focus' || mode === 'intent') {\n link.addEventListener('focus', runPrefetch)\n }\n if (mode === 'intent') {\n link.addEventListener('pointerdown', runPointerIntentPrefetch)\n }\n}\n\nconst bindRouterLink = (container: RuntimeContainer, link: HTMLAnchorElement) => {\n const boundLink = link as HTMLAnchorElement & {\n [ROUTER_LINK_BOUND_KEY]?: true\n }\n if (boundLink[ROUTER_LINK_BOUND_KEY]) {\n return\n }\n\n boundLink[ROUTER_LINK_BOUND_KEY] = true\n link.addEventListener('click', (event) => {\n const pendingLink = getPendingLinkNavigationForLink(container, event, link)\n if (!pendingLink || pendingLink.state.userPrevented) {\n return\n }\n void navigateContainer(container, pendingLink.href, {\n mode: pendingLink.replace ? 'replace' : 'push',\n })\n })\n}\n\nconst bindRouterLinks = (container: RuntimeContainer, root: ParentNode) => {\n const links = root.querySelectorAll(`a[${ROUTE_LINK_ATTR}]`)\n for (const link of links) {\n if (!isHTMLAnchorElementNode(link)) {\n continue\n }\n bindRouterLinkPrefetch(container, link)\n bindRouterLink(container, link)\n }\n}\n\nexport const installResumeLinkListeners = (container: RuntimeContainer) => {\n if (!container.doc) {\n return\n }\n bindRouterLinks(container, container.doc)\n const onRouteClick = (event: Event) => {\n const link = findRouteLinkTarget(event.target)\n if (!link) {\n return\n }\n const pendingLink = getPendingLinkNavigationForLink(container, event, link)\n if (!pendingLink || pendingLink.state.userPrevented) {\n return\n }\n void navigateContainer(container, pendingLink.href, {\n mode: pendingLink.replace ? 'replace' : 'push',\n })\n }\n container.doc.addEventListener('click', onRouteClick)\n const pending = takePendingResumeLinkNavigation()\n if (pending) {\n void navigateContainer(container, pending.href, {\n mode: pending.replace ? 'replace' : 'push',\n })\n }\n return () => {\n container.doc?.removeEventListener('click', onRouteClick)\n }\n}\n\nconst parseBinding = (value: string): { scopeId: string; symbolId: string } => {\n const separatorIndex = value.indexOf(':')\n if (separatorIndex < 0) {\n throw new Error(`Invalid binding ${value}.`)\n }\n return {\n symbolId: value.slice(0, separatorIndex),\n scopeId: value.slice(separatorIndex + 1),\n }\n}\n\nconst withClientContainer = async <T>(container: RuntimeContainer, fn: () => Promise<T> | T) =>\n pushContainer(container, () => Promise.resolve(fn()))\n\nexport const createDelegatedEvent = (event: Event, currentTarget: Element) =>\n new Proxy(event, {\n get(target, property) {\n if (property === 'currentTarget') {\n return currentTarget\n }\n const value = Reflect.get(target, property, target)\n return typeof value === 'function' ? value.bind(target) : value\n },\n }) as Event\n\nconst readBoundElementValue = (\n element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n currentValue: unknown,\n) => {\n if (\n isHTMLInputElementNode(element) &&\n typeof currentValue === 'number' &&\n (element.type === 'number' || element.type === 'range') &&\n !Number.isNaN(element.valueAsNumber)\n ) {\n return element.valueAsNumber\n }\n\n return element.value\n}\n\nexport const syncBoundElementSignal = (container: RuntimeContainer, target: EventTarget | null) => {\n if (\n !isHTMLInputElementNode(target) &&\n !isHTMLSelectElementNode(target) &&\n !isHTMLTextAreaElementNode(target)\n ) {\n return false\n }\n\n let didSync = false\n const valueSignalId = target.getAttribute(BIND_VALUE_ATTR)\n if (valueSignalId) {\n const record = container.signals.get(valueSignalId)\n if (record) {\n const nextValue = readBoundElementValue(target, record.value)\n writeSignalValue(container, record, nextValue)\n didSync = true\n }\n }\n\n if (isHTMLInputElementNode(target)) {\n const checkedSignalId = target.getAttribute(BIND_CHECKED_ATTR)\n if (checkedSignalId) {\n const record = container.signals.get(checkedSignalId)\n if (record) {\n const nextChecked = target.checked\n writeSignalValue(container, record, nextChecked)\n didSync = true\n }\n }\n }\n\n return didSync\n}\n\nexport const createClientLazyListener = (\n descriptor: EventDescriptor | LazyMeta,\n currentTarget: Element,\n) => {\n const container = getCurrentContainer()\n if (!container) {\n return null\n }\n\n return async (event: Event) => {\n const module = await loadSymbol(container, descriptor.symbol)\n try {\n await withClientContainer(container, async () => {\n await module.default(descriptor.captures(), createDelegatedEvent(event, currentTarget))\n })\n } catch (error) {\n throw wrapGeneratedScopeReferenceError(error, {\n phase: 'running a lazy event handler for',\n symbolId: descriptor.symbol,\n })\n }\n await flushDirtyComponents(container)\n }\n}\n\nexport const dispatchResumeEvent = async (container: RuntimeContainer, event: Event) => {\n const interactiveTarget = findInteractiveTarget(event.target, event.type)\n if (!interactiveTarget) {\n return\n }\n\n const binding = interactiveTarget.getAttribute(`data-e-on${event.type}`)\n if (!binding) {\n return\n }\n const pendingFocus = capturePendingFocusRestore(container, event.target)\n\n const { scopeId, symbolId } = parseBinding(binding)\n const module =\n getResolvedRuntimeSymbols(container).get(symbolId) ?? (await loadSymbol(container, symbolId))\n const scope = materializeScope(container, scopeId)\n try {\n await withClientContainer(container, async () => {\n await module.default(scope, createDelegatedEvent(event, interactiveTarget))\n })\n } catch (error) {\n throw wrapGeneratedScopeReferenceError(error, {\n phase: 'running a resumable event handler for',\n symbolId,\n })\n }\n await flushDirtyComponents(container)\n restorePendingFocus(container, pendingFocus)\n}\n\nexport const dispatchDocumentEvent = async (container: RuntimeContainer, event: Event) => {\n if (container.resumeReadyPromise) {\n await container.resumeReadyPromise\n }\n const didSyncBoundSignal =\n (event.type === 'input' || event.type === 'change') &&\n syncBoundElementSignal(container, event.target)\n const pendingFocus = didSyncBoundSignal\n ? capturePendingFocusRestore(container, event.target)\n : null\n await dispatchResumeEvent(container, event)\n if (didSyncBoundSignal) {\n await flushDirtyComponents(container)\n restorePendingFocus(container, pendingFocus)\n }\n if (event.type === 'submit' && !event.defaultPrevented && isHTMLFormElementNode(event.target)) {\n const actionId = event.target.getAttribute(ACTION_FORM_ATTR)\n if (actionId) {\n const handle = container.actions.get(actionId) as\n | {\n action: (input?: unknown) => Promise<unknown>\n }\n | undefined\n if (handle) {\n event.preventDefault()\n const submitter =\n typeof SubmitEvent !== 'undefined' && event instanceof SubmitEvent\n ? (event.submitter ?? undefined)\n : undefined\n const formData = isHTMLElementNode(submitter)\n ? new FormData(event.target, submitter)\n : new FormData(event.target)\n await handle.action(formData)\n await flushDirtyComponents(container)\n }\n }\n }\n}\n\nconst enqueueDocumentEvent = (container: RuntimeContainer, event: Event) => {\n if (!container.eventDispatchPromise) {\n const running = dispatchDocumentEvent(container, event)\n const tracked = running.finally(() => {\n if (container.eventDispatchPromise === tracked) {\n container.eventDispatchPromise = null\n }\n })\n container.eventDispatchPromise = tracked\n return tracked\n }\n\n const previous = container.eventDispatchPromise ?? Promise.resolve()\n const queued = previous\n .catch(() => {})\n .then(async () => {\n await dispatchDocumentEvent(container, event)\n })\n container.eventDispatchPromise = queued.finally(() => {\n if (container.eventDispatchPromise === queued) {\n container.eventDispatchPromise = null\n }\n })\n return container.eventDispatchPromise\n}\n\nexport const installResumeListeners = (container: RuntimeContainer) => {\n const doc = container.doc\n if (!doc) {\n return () => {}\n }\n const cleanupRouteLinks = installResumeLinkListeners(container)\n installStreamedSuspenseController(container)\n ensureVisibilityListeners(container)\n scheduleVisibleCallbacksCheck(container)\n const listeners = [\n 'cancel',\n 'click',\n 'input',\n 'change',\n 'submit',\n 'keydown',\n 'compositionstart',\n 'compositionend',\n ] as const\n const onEvent = (event: Event) => {\n void enqueueDocumentEvent(container, event)\n }\n const onIntent = (event: Event) => {\n if (event.type === 'pointerdown') {\n prefetchInteractiveTargetSymbols(container, event.target, ['click', 'submit'])\n return\n }\n prefetchInteractiveTargetSymbols(container, event.target, INTERACTIVE_PREFETCH_EVENT_NAMES)\n }\n const onPopState = () => {\n void navigateContainer(container, doc.location.href, {\n mode: 'pop',\n })\n }\n\n for (const eventName of listeners) {\n doc.addEventListener(eventName, onEvent, true)\n }\n doc.addEventListener('pointerdown', onIntent, true)\n doc.addEventListener('focusin', onIntent, true)\n doc.defaultView?.addEventListener('popstate', onPopState)\n\n return () => {\n for (const eventName of listeners) {\n doc.removeEventListener(eventName, onEvent, true)\n }\n doc.removeEventListener('pointerdown', onIntent, true)\n doc.removeEventListener('focusin', onIntent, true)\n doc.defaultView?.removeEventListener('popstate', onPopState)\n cleanupRouteLinks?.()\n container.visibilityListenersCleanup?.()\n }\n}\n\nexport const renderString = (inputElementLike: JSX.Element | JSX.Element[]) =>\n renderStringNode(inputElementLike)\n\nexport const hasActiveRuntimeComponent = () => {\n const frame = getCurrentFrame()\n return !!frame && frame.component.id !== ROOT_COMPONENT_ID\n}\n\nexport const getRuntimeContextValue = (\n token: RuntimeContextToken,\n): {\n found: boolean\n value: unknown\n} => {\n const stack = getContextValueStack()\n for (let index = stack.length - 1; index >= 0; index -= 1) {\n const entry = stack[index]\n if (entry?.token === token) {\n return {\n found: true,\n value: entry.value,\n }\n }\n }\n return {\n found: false,\n value: undefined,\n }\n}\n\nexport const createStandaloneRuntimeSignal = <T>(fallback: T): { value: T } => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const nextId = ((globalRecord[STANDALONE_SIGNAL_ID_KEY] as number | undefined) ?? 0) + 1\n globalRecord[STANDALONE_SIGNAL_ID_KEY] = nextId\n return ensureSignalRecord(null, `$standalone:${nextId}`, fallback).handle\n}\n\nexport const useRuntimeSignal = <T>(fallback: T): { value: T } => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID) {\n throw new Error('useSignal() can only be used while rendering a component.')\n }\n\n const signalIndex = frame.signalCursor++\n const existingId = frame.component.signalIds[signalIndex]\n const signalId = existingId ?? `s${container.nextSignalId++}`\n if (!existingId) {\n frame.component.signalIds.push(signalId)\n }\n return ensureSignalRecord(container, signalId, fallback).handle\n}\n\nexport const useRuntimeAtom = <T>(atom: object, fallback: T): { value: T } => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID) {\n throw new Error('useAtom() can only be used while rendering a component.')\n }\n\n const signalIndex = frame.signalCursor++\n const existingId = frame.component.signalIds[signalIndex]\n const mappedId = container.atoms.get(atom)\n const signalId = existingId ?? mappedId ?? `a${container.nextAtomId++}`\n if (!existingId) {\n frame.component.signalIds.push(signalId)\n }\n if (mappedId !== signalId) {\n container.atoms.set(atom, signalId)\n }\n return ensureSignalRecord(container, signalId, fallback).handle\n}\n\nexport const createDetachedRuntimeSignal = <T>(\n container: RuntimeContainer,\n id: string,\n fallback: T,\n): { value: T } => ensureSignalRecord(container, id, fallback).handle\n\nexport const getRuntimeComponentId = () => getCurrentFrame()?.component.id ?? null\nexport const getRuntimeSignalId = (value: unknown) => getSignalMeta(value)?.id ?? null\n\nexport const useRuntimeNavigate = (): Navigate => {\n const container = getCurrentContainer()\n if (!container) {\n return createStandaloneNavigate()\n }\n return ensureRouterState(container).navigate\n}\n\nexport const useRuntimeLocation = (): RouteLocation => {\n const container = getCurrentContainer()\n if (!container) {\n return createStandaloneLocation()\n }\n return ensureRouterState(container).location\n}\n\nexport const useRuntimeRouteParams = (): RouteParams => {\n const frame = getCurrentFrame()\n if (frame?.component.props && typeof frame.component.props === 'object') {\n const candidate = (frame.component.props as Record<string, unknown>)[ROUTE_PARAMS_PROP]\n if (candidate && typeof candidate === 'object') {\n return candidate as RouteParams\n }\n }\n const container = getCurrentContainer()\n return container?.router?.currentRoute?.params ?? EMPTY_ROUTE_PARAMS\n}\n\nexport const useRuntimeRouteError = (): unknown => {\n const frame = getCurrentFrame()\n if (frame?.component.props && typeof frame.component.props === 'object') {\n const candidate = (frame.component.props as Record<string, unknown>)[ROUTE_ERROR_PROP]\n if (candidate !== undefined) {\n return candidate\n }\n }\n return getCurrentContainer()?.router?.currentRoute?.error\n}\n\nexport const notFound = (): never => {\n throw {\n __eclipsa_not_found__: true,\n [ROUTE_NOT_FOUND_KEY]: true,\n }\n}\n\nexport const isRouteNotFoundError = (error: unknown) =>\n !!error &&\n typeof error === 'object' &&\n ((error as { __eclipsa_not_found__?: boolean }).__eclipsa_not_found__ === true ||\n (error as Record<PropertyKey, unknown>)[ROUTE_NOT_FOUND_KEY] === true)\n\nexport const createEffect = (fn: () => void, options?: EffectOptions) => {\n const frame = getCurrentFrame()\n const effect: ReactiveEffect = {\n fn() {\n const dependencies = options?.dependencies\n if (!dependencies) {\n collectTrackedDependencies(effect, fn)\n return\n }\n\n collectTrackedDependencies(effect, () => {\n trackWatchDependencies(dependencies, options?.errorLabel)\n })\n\n if (options?.untracked) {\n runWithoutDependencyTracking(fn)\n return\n }\n\n fn()\n },\n signals: new Set(),\n }\n\n if (frame && frame.mode === 'client' && frame.component.id !== ROOT_COMPONENT_ID) {\n frame.effectCleanupSlot.callbacks.push(() => {\n clearEffectSignals(effect)\n })\n }\n\n effect.fn()\n}\n\nexport const createOnCleanup = (fn: () => void) => {\n if (!currentCleanupSlot) {\n throw new Error(\n 'onCleanup() can only be used while running onMount(), onVisible(), or useWatch() callbacks.',\n )\n }\n currentCleanupSlot.callbacks.push(fn)\n}\n\nexport const createOnMount = (fn: () => void) => {\n const frame = getCurrentFrame()\n if (!frame || frame.component.id === ROOT_COMPONENT_ID || frame.mode !== 'client') {\n return\n }\n frame.mountCallbacks.push(fn)\n}\n\nexport const createOnVisible = (fn: () => void) => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n const lazyMeta = getLazyMeta(fn)\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID) {\n return\n }\n\n if (!lazyMeta && frame.mode === 'ssr') {\n return\n }\n\n const visibleIndex = frame.visibleCursor++\n const visibleId = createVisibleId(frame.component.id, visibleIndex)\n const visible = getOrCreateVisibleState(container, visibleId, frame.component.id)\n visible.scopeId = lazyMeta\n ? registerScope(container, lazyMeta.captures())\n : registerScope(container, [])\n visible.symbol = lazyMeta?.symbol ?? ''\n visible.run = lazyMeta ? null : fn\n\n scheduleVisibleCallbacksCheck(container)\n}\n\nexport const createWatch = (fn: () => void, dependencies?: WatchDependency[]) => {\n const container = getCurrentContainer()\n const frame = getCurrentFrame()\n const watchMeta = getWatchMeta(fn)\n\n if (!container || !frame || frame.component.id === ROOT_COMPONENT_ID || !watchMeta) {\n const cleanupSlot = createCleanupSlot()\n const effect: ReactiveEffect = {\n fn() {\n createLocalWatchRunner(effect, cleanupSlot, fn, dependencies)()\n },\n signals: new Set(),\n }\n effect.fn()\n return\n }\n\n const watchIndex = frame.watchCursor++\n const watchId = createWatchId(frame.component.id, watchIndex)\n const watch = getOrCreateWatchState(container, watchId, frame.component.id)\n watch.mode = dependencies ? 'explicit' : 'dynamic'\n watch.scopeId = registerScope(container, watchMeta.captures())\n watch.symbol = watchMeta.symbol\n watch.track = dependencies ? () => trackWatchDependencies(dependencies) : null\n watch.run = createLocalWatchRunner(watch.effect, watch.cleanupSlot, fn, dependencies)\n if (frame.mode === 'client' && watch.resumed) {\n watch.resumed = false\n if (dependencies) {\n collectTrackedDependencies(watch.effect, () => {\n trackWatchDependencies(dependencies)\n })\n }\n return\n }\n watch.resumed = false\n watch.effect.fn()\n}\n\nexport const getResumePayloadScriptContent = (payload: ResumePayload) =>\n escapeJSONScriptText(JSON.stringify(payload))\n","import type { JSX } from '../jsx/types.ts'\nimport type { Env, MiddlewareHandler, Next } from 'hono/types'\nimport {\n type AppContext,\n deserializePublicValue,\n getCurrentServerRequestContext,\n serializePublicValue,\n type SerializedReference,\n type SerializedValue,\n transformCurrentPublicError,\n type WithAppEnv,\n} from './hooks.ts'\nimport {\n createDetachedRuntimeSignal,\n ensureRuntimeElementId,\n findRuntimeElement,\n flushDirtyComponents,\n getRuntimeContainer,\n getRuntimeSignalId,\n type RuntimeContainer,\n} from './runtime.ts'\nimport { registerActionHook, setActionHandleMeta, setActionHookMeta } from './internal.ts'\nimport { ROUTE_RPC_URL_HEADER } from './router-shared.ts'\n\nconst ACTION_REGISTRY_KEY = Symbol.for('eclipsa.action-registry')\nexport const ACTION_CONTENT_TYPE = 'application/eclipsa-action+json'\nconst ACTION_STREAM_CONTENT_TYPE = 'application/eclipsa-action-stream+json'\nexport const ACTION_FORM_ATTR = 'data-e-action-form'\nexport const ACTION_FORM_FIELD = '__e_action'\nconst ACTION_INPUT_CACHE_KEY = Symbol.for('eclipsa.action-input-cache')\n\ndeclare const ACTION_REF_BRAND: unique symbol\ndeclare const ACTION_INPUT_TYPE: unique symbol\n\nexport interface StandardSchemaIssue {\n message: string\n path?: ReadonlyArray<PropertyKey | { readonly key: PropertyKey }>\n}\n\nexport type StandardSchemaResult<T> =\n | {\n issues: readonly StandardSchemaIssue[]\n }\n | {\n issues?: undefined\n value: T\n }\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly '~standard': {\n readonly validate: (\n value: unknown,\n options?: { readonly libraryOptions?: Record<string, unknown> },\n ) => StandardSchemaResult<Output> | Promise<StandardSchemaResult<Output>>\n readonly types?:\n | {\n readonly input: Input\n readonly output: Output\n }\n | undefined\n readonly vendor: string\n readonly version: 1\n }\n}\n\nexport type InferStandardSchemaInput<Schema extends StandardSchemaV1<any, any>> = NonNullable<\n Schema['~standard']['types']\n>['input']\n\nexport type InferStandardSchemaOutput<Schema extends StandardSchemaV1<any, any>> = NonNullable<\n Schema['~standard']['types']\n>['output']\n\nexport interface OpaqueSignalRef {\n readonly [ACTION_REF_BRAND]?: 'signal'\n readonly containerId: string | null\n readonly kind: 'signal-ref'\n readonly token: string\n}\n\nexport interface OpaqueDomRef {\n readonly [ACTION_REF_BRAND]?: 'dom'\n readonly containerId: string | null\n readonly kind: 'dom-ref'\n readonly token: string\n}\n\nexport type ActionOpaqueRef = OpaqueSignalRef | OpaqueDomRef\n\ntype MiddlewareEnv<T> = T extends {\n readonly __eclipsa_action_env__?: infer MiddlewareEnv\n}\n ? Exclude<MiddlewareEnv, undefined> extends Env\n ? WithAppEnv<Exclude<MiddlewareEnv, undefined>>\n : {}\n : T extends MiddlewareHandler<infer MiddlewareEnv, any, any>\n ? WithAppEnv<MiddlewareEnv>\n : WithAppEnv<Env>\n\ntype ActionEnv<Middlewares extends readonly ActionMiddleware<any>[]> =\n Middlewares extends readonly [infer Head, ...infer Tail]\n ? Tail extends readonly ActionMiddleware<any>[]\n ? MiddlewareEnv<Head> & ActionEnv<Tail>\n : MiddlewareEnv<Head>\n : WithAppEnv<Env>\ntype MiddlewareActionInput<T> = T extends {\n readonly [ACTION_INPUT_TYPE]?: infer Input\n}\n ? Exclude<Input, undefined>\n : never\n\ntype ActionInput<Middlewares extends readonly ActionMiddleware<any>[]> = [\n MiddlewareActionInput<Middlewares[number]>,\n] extends [never]\n ? unknown\n : MiddlewareActionInput<Middlewares[number]>\n\ntype ResolvedActionOutput<Output> = Awaited<Output>\n\ntype ActionStreamYield<Output> =\n ResolvedActionOutput<Output> extends AsyncIterable<infer Value>\n ? Value\n : ResolvedActionOutput<Output> extends ReadableStream<infer Value>\n ? Value\n : ResolvedActionOutput<Output>\n\ntype ActionInvokeResult<Output> =\n ResolvedActionOutput<Output> extends AsyncIterable<infer Value>\n ? AsyncGenerator<Value, void, void>\n : Promise<ResolvedActionOutput<Output>>\n\ntype ActionInvoker<Input, Result> = unknown extends Input\n ? (input?: Input | FormData) => Result\n : undefined extends Input\n ? (input?: Input | FormData) => Result\n : (input: Input | FormData) => Result\n\nexport interface ActionSubmission<Input, Output> {\n readonly error: unknown\n readonly input: Input\n readonly result: Output | undefined\n}\n\nexport interface ActionFormProps extends Record<string, unknown> {\n children?: JSX.Element | JSX.Element[]\n}\n\nexport interface ActionHandle<Input, Output, InvokeResult = Promise<Output>> {\n Form: (props: ActionFormProps) => JSX.Element\n action: ActionInvoker<Input, InvokeResult>\n readonly error: unknown\n readonly formActionId: string\n readonly isPending: boolean\n readonly lastSubmission: ActionSubmission<Input, Output> | undefined\n readonly result: Output | undefined\n}\n\nexport interface ActionMiddleware<E extends Env = Env> extends MiddlewareHandler<E> {\n readonly __eclipsa_action_env__?: E\n}\nexport interface ActionValidatorMiddleware<Input, Output> extends ActionMiddleware<{\n Variables: {\n input: Output\n }\n}> {\n readonly [ACTION_INPUT_TYPE]?: Input\n}\nexport type ActionHandler<E extends Env = Env, Output = unknown> = (\n c: AppContext<E>,\n) => Output | Promise<Output>\n\ntype ActionHandlerOutput<Handler extends (...args: any[]) => unknown> = Awaited<ReturnType<Handler>>\n\ntype ActionUse<\n Middlewares extends readonly ActionMiddleware<any>[],\n Handler extends ActionHandler<any, any>,\n> = () => ActionHandle<\n ActionInput<Middlewares>,\n ActionStreamYield<ActionHandlerOutput<Handler>>,\n ActionInvokeResult<ActionHandlerOutput<Handler>>\n>\n\nexport interface ActionFactory {\n <Handler extends ActionHandler<{}, any>>(handler: Handler): ActionUse<[], Handler>\n <M1 extends ActionMiddleware<any>, Handler extends ActionHandler<ActionEnv<[M1]>, any>>(\n middleware1: M1,\n handler: Handler,\n ): ActionUse<[M1], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n handler: Handler,\n ): ActionUse<[M1, M2], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2, M3]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n handler: Handler,\n ): ActionUse<[M1, M2, M3], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2, M3, M4]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n handler: Handler,\n ): ActionUse<[M1, M2, M3, M4], Handler>\n <\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n M5 extends ActionMiddleware<any>,\n Handler extends ActionHandler<ActionEnv<[M1, M2, M3, M4, M5]>, any>,\n >(\n middleware1: M1,\n middleware2: M2,\n middleware3: M3,\n middleware4: M4,\n middleware5: M5,\n handler: Handler,\n ): ActionUse<[M1, M2, M3, M4, M5], Handler>\n}\n\ninterface RegisteredAction {\n handler: ActionHandler<any, unknown>\n id: string\n middlewares: ActionMiddleware<any>[]\n}\n\ninterface ActionJsonSuccess {\n ok: true\n value: SerializedValue\n}\n\ninterface ActionJsonFailure {\n error: SerializedValue\n ok: false\n}\n\ninterface ActionStateSnapshot {\n error: unknown\n input: unknown\n result: unknown\n}\n\ninterface ActionExecutionValue {\n input: unknown\n kind: 'value'\n value: unknown\n}\n\ninterface ActionExecutionResponse {\n input: unknown\n kind: 'response'\n response: Response\n}\n\ntype ActionExecutionResult = ActionExecutionResponse | ActionExecutionValue\n\ninterface StreamChunkFrame {\n type: 'chunk'\n value: SerializedValue\n}\n\ninterface StreamDoneFrame {\n type: 'done'\n}\n\ninterface StreamErrorFrame {\n error: SerializedValue\n type: 'error'\n}\n\ntype ActionStreamFrame = StreamChunkFrame | StreamDoneFrame | StreamErrorFrame\n\nconst getActionRegistry = () => {\n const globalRecord = globalThis as Record<PropertyKey, unknown>\n const existing = globalRecord[ACTION_REGISTRY_KEY]\n if (existing instanceof Map) {\n return existing as Map<string, RegisteredAction>\n }\n const created = new Map<string, RegisteredAction>()\n globalRecord[ACTION_REGISTRY_KEY] = created\n return created\n}\n\nconst isFormDataValue = (value: unknown): value is FormData =>\n typeof FormData !== 'undefined' && value instanceof FormData\n\nconst formDataToInputObject = (value: FormData) => {\n const result: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {}\n for (const [key, entry] of value.entries()) {\n const existing = result[key]\n if (existing === undefined) {\n result[key] = entry\n continue\n }\n result[key] = Array.isArray(existing) ? [...existing, entry] : [existing, entry]\n }\n return result\n}\n\nconst normalizeFormSubmissionInput = (value: unknown) => {\n if (!isFormDataValue(value)) {\n return value\n }\n const normalized = formDataToInputObject(value)\n return Object.fromEntries(\n Object.entries(normalized).flatMap(([key, entry]) => {\n if (key === ACTION_FORM_FIELD) {\n return []\n }\n if (Array.isArray(entry)) {\n const values = entry\n .filter((candidate): candidate is string => typeof candidate === 'string')\n .map((candidate) => candidate)\n return values.length > 0 ? [[key, values.length === 1 ? values[0] : values]] : []\n }\n return typeof entry === 'string' ? [[key, entry]] : []\n }),\n )\n}\n\nconst getActionInputCache = (c: AppContext<any>) => {\n const record = c as AppContext<any> & {\n [ACTION_INPUT_CACHE_KEY]?: Promise<unknown>\n }\n if (!record[ACTION_INPUT_CACHE_KEY]) {\n record[ACTION_INPUT_CACHE_KEY] = (async () => {\n const contentType = c.req.header('content-type') ?? ''\n if (contentType.startsWith(ACTION_CONTENT_TYPE)) {\n let parsedBody: unknown\n try {\n parsedBody = await c.req.json()\n } catch {\n throw new TypeError('Action input must be valid JSON.')\n }\n if (!parsedBody || typeof parsedBody !== 'object' || !('input' in parsedBody)) {\n throw new TypeError('Action request body must contain an input field.')\n }\n return deserializeActionServerValue((parsedBody as { input: SerializedValue }).input)\n }\n if (\n contentType.startsWith('application/x-www-form-urlencoded') ||\n contentType.startsWith('multipart/form-data')\n ) {\n return c.req.formData()\n }\n return undefined\n })()\n }\n return record[ACTION_INPUT_CACHE_KEY]!\n}\n\nconst createActionRefScope = (container: RuntimeContainer | null) =>\n container ? serializePublicValue({ container: container.id }) : undefined\n\nconst readActionRefContainerId = (reference: SerializedReference) => {\n if (!reference.data) {\n return null\n }\n const decoded = deserializePublicValue(reference.data)\n if (!decoded || typeof decoded !== 'object') {\n return null\n }\n const containerId = (decoded as Record<string, unknown>).container\n return typeof containerId === 'string' ? containerId : null\n}\n\nconst serializeActionClientValue = (container: RuntimeContainer | null, value: unknown) =>\n serializePublicValue(value, {\n serializeReference(candidate) {\n const signalId = getRuntimeSignalId(candidate)\n if (signalId) {\n return {\n __eclipsa_type: 'ref',\n data: createActionRefScope(container),\n kind: 'signal',\n token: signalId,\n }\n }\n if (container && typeof Element !== 'undefined' && candidate instanceof Element) {\n return {\n __eclipsa_type: 'ref',\n data: createActionRefScope(container),\n kind: 'dom',\n token: ensureRuntimeElementId(container, candidate),\n }\n }\n return null\n },\n })\n\nconst deserializeActionServerValue = (value: SerializedValue) =>\n deserializePublicValue(value, {\n deserializeReference(reference) {\n const containerId = readActionRefContainerId(reference)\n if (reference.kind === 'signal') {\n return {\n containerId,\n kind: 'signal-ref',\n token: reference.token,\n } satisfies OpaqueSignalRef\n }\n if (reference.kind === 'dom') {\n return {\n containerId,\n kind: 'dom-ref',\n token: reference.token,\n } satisfies OpaqueDomRef\n }\n throw new TypeError(`Unsupported action input reference kind \"${reference.kind}\".`)\n },\n })\n\nconst deserializeActionClientValue = (container: RuntimeContainer | null, value: SerializedValue) =>\n deserializePublicValue(value, {\n deserializeReference(reference) {\n if (!container) {\n throw new TypeError('Action references require an active runtime container.')\n }\n const containerId = readActionRefContainerId(reference)\n if (containerId !== container.id) {\n throw new TypeError('Action reference does not belong to the active runtime container.')\n }\n if (reference.kind === 'signal') {\n const signal = container.signals.get(reference.token)\n if (!signal) {\n throw new Error(`Missing action signal ${reference.token}.`)\n }\n return signal.handle\n }\n if (reference.kind === 'dom') {\n const element = findRuntimeElement(container, reference.token)\n if (!element) {\n throw new Error(`Missing action DOM ref ${reference.token}.`)\n }\n return element\n }\n throw new TypeError(`Unsupported action output reference kind \"${reference.kind}\".`)\n },\n })\n\nconst isOpaqueSignalRef = (value: unknown): value is OpaqueSignalRef =>\n !!value &&\n typeof value === 'object' &&\n (value as Record<string, unknown>).kind === 'signal-ref' &&\n typeof (value as Record<string, unknown>).token === 'string'\n\nconst isOpaqueDomRef = (value: unknown): value is OpaqueDomRef =>\n !!value &&\n typeof value === 'object' &&\n (value as Record<string, unknown>).kind === 'dom-ref' &&\n typeof (value as Record<string, unknown>).token === 'string'\n\nconst serializeActionServerValue = (value: unknown) =>\n serializePublicValue(value, {\n serializeReference(candidate) {\n if (isOpaqueSignalRef(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data:\n candidate.containerId === null\n ? undefined\n : serializePublicValue({\n container: candidate.containerId,\n }),\n kind: 'signal',\n token: candidate.token,\n }\n }\n if (isOpaqueDomRef(candidate)) {\n return {\n __eclipsa_type: 'ref',\n data:\n candidate.containerId === null\n ? undefined\n : serializePublicValue({\n container: candidate.containerId,\n }),\n kind: 'dom',\n token: candidate.token,\n }\n }\n return null\n },\n })\n\nconst isReadableStreamValue = (value: unknown): value is ReadableStream<unknown> =>\n typeof ReadableStream !== 'undefined' && value instanceof ReadableStream\n\nconst isAsyncGeneratorValue = (\n value: unknown,\n): value is AsyncGenerator<unknown, unknown, unknown> | AsyncIterable<unknown> =>\n !!value && typeof value === 'object' && Symbol.asyncIterator in value\n\nconst isAsyncGeneratorFunctionValue = (\n value: unknown,\n): value is (...args: any[]) => AsyncGenerator<unknown, unknown, unknown> =>\n typeof value === 'function' &&\n Object.prototype.toString.call(value) === '[object AsyncGeneratorFunction]'\n\nconst toSerializedActionError = (error: unknown): SerializedValue => {\n if (error instanceof Error) {\n return serializeActionServerValue({\n message: error.message,\n name: error.name,\n })\n }\n try {\n return serializeActionServerValue(error)\n } catch {\n return serializeActionServerValue({\n message: 'Action failed.',\n })\n }\n}\n\nconst toAsyncIterable = async function* (\n value: ReadableStream<unknown> | AsyncIterable<unknown>,\n): AsyncGenerator<unknown, void, void> {\n if (isReadableStreamValue(value)) {\n const reader = value.getReader()\n try {\n while (true) {\n const next = await reader.read()\n if (next.done) {\n return\n }\n yield next.value\n }\n } finally {\n reader.releaseLock()\n }\n }\n yield* value\n}\n\nconst encodeStreamFrame = (frame: ActionStreamFrame) =>\n `${JSON.stringify(frame)}\n`\n\nconst streamActionValue = (\n value: ReadableStream<unknown> | AsyncIterable<unknown>,\n serializeChunk: (value: unknown) => SerializedValue,\n) => {\n const encoder = new TextEncoder()\n\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n try {\n for await (const chunk of toAsyncIterable(value)) {\n controller.enqueue(\n encoder.encode(\n encodeStreamFrame({\n type: 'chunk',\n value: serializeChunk(chunk),\n }),\n ),\n )\n }\n controller.enqueue(\n encoder.encode(\n encodeStreamFrame({\n type: 'done',\n }),\n ),\n )\n } catch (error) {\n controller.enqueue(\n encoder.encode(\n encodeStreamFrame({\n error: toSerializedActionError(error),\n type: 'error',\n }),\n ),\n )\n } finally {\n controller.close()\n }\n },\n })\n}\n\nconst parseJsonActionResponse = async (response: Response, container: RuntimeContainer | null) => {\n const body = (await response.json()) as ActionJsonFailure | ActionJsonSuccess\n if (!body || typeof body !== 'object' || typeof body.ok !== 'boolean') {\n throw new TypeError('Malformed action response.')\n }\n if (!body.ok) {\n throw deserializeActionClientValue(container, body.error)\n }\n return deserializeActionClientValue(container, body.value)\n}\n\nconst iterateStreamFrames = async function* (\n body: ReadableStream<Uint8Array>,\n): AsyncGenerator<ActionStreamFrame, void, void> {\n const reader = body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n\n try {\n while (true) {\n const next = await reader.read()\n if (next.done) {\n break\n }\n buffer += decoder.decode(next.value, { stream: true })\n while (true) {\n const newlineIndex = buffer.indexOf('\\n')\n if (newlineIndex < 0) {\n break\n }\n const line = buffer.slice(0, newlineIndex).trim()\n buffer = buffer.slice(newlineIndex + 1)\n if (!line) {\n continue\n }\n yield JSON.parse(line) as ActionStreamFrame\n }\n }\n const trailing = buffer.trim()\n if (trailing) {\n yield JSON.parse(trailing) as ActionStreamFrame\n }\n } finally {\n reader.releaseLock()\n }\n}\n\nconst toClientStream = (response: Response, container: RuntimeContainer | null) => {\n if (!response.body) {\n throw new TypeError('Missing action stream body.')\n }\n return new ReadableStream<unknown>({\n async start(controller) {\n try {\n for await (const frame of iterateStreamFrames(response.body!)) {\n if (frame.type === 'chunk') {\n controller.enqueue(deserializeActionClientValue(container, frame.value))\n continue\n }\n if (frame.type === 'done') {\n controller.close()\n return\n }\n controller.error(deserializeActionClientValue(container, frame.error))\n return\n }\n controller.close()\n } catch (error) {\n controller.error(error)\n }\n },\n })\n}\n\nconst toClientAsyncGenerator = async function* (\n response: Response,\n container: RuntimeContainer | null,\n) {\n if (!response.body) {\n throw new TypeError('Missing action stream body.')\n }\n for await (const frame of iterateStreamFrames(response.body)) {\n if (frame.type === 'chunk') {\n yield deserializeActionClientValue(container, frame.value)\n continue\n }\n if (frame.type === 'done') {\n return\n }\n throw deserializeActionClientValue(container, frame.error)\n }\n}\n\nconst invokeAction = async (id: string, input: unknown, container: RuntimeContainer | null) => {\n const isFormSubmission = isFormDataValue(input)\n const actionPath = `/__eclipsa/action/${encodeURIComponent(id)}`\n const requestContext = typeof window === 'undefined' ? getCurrentServerRequestContext() : null\n const currentRouteUrl =\n typeof window !== 'undefined'\n ? window.location.href\n : (requestContext?.req.header(ROUTE_RPC_URL_HEADER) ?? requestContext?.req.raw.url ?? null)\n const requestUrl = requestContext\n ? new URL(actionPath, requestContext.req.raw.url).href\n : actionPath\n const fetchImpl =\n requestContext && typeof requestContext.var.fetch === 'function'\n ? requestContext.var.fetch\n : fetch\n const response = await fetchImpl(requestUrl, {\n body: isFormSubmission\n ? input\n : JSON.stringify({\n input: serializeActionClientValue(container, input),\n }),\n headers: {\n accept: `${ACTION_STREAM_CONTENT_TYPE}, ${ACTION_CONTENT_TYPE}`,\n ...(currentRouteUrl ? { [ROUTE_RPC_URL_HEADER]: currentRouteUrl } : {}),\n ...(isFormSubmission ? {} : { 'content-type': ACTION_CONTENT_TYPE }),\n },\n method: 'POST',\n })\n const contentType = response.headers.get('content-type') ?? ''\n const streamKind = response.headers.get('x-eclipsa-stream-kind')\n if (contentType.startsWith(ACTION_STREAM_CONTENT_TYPE)) {\n if (streamKind === 'async-generator') {\n return toClientAsyncGenerator(response, container)\n }\n return toClientStream(response, container)\n }\n return parseJsonActionResponse(response, container)\n}\n\nconst composeMiddlewares = async (\n c: AppContext<any>,\n middlewares: ActionMiddleware<any>[],\n handler: ActionHandler<any, unknown>,\n): Promise<Response | unknown> => {\n let index = -1\n const dispatch = async (nextIndex: number): Promise<Response | unknown> => {\n if (nextIndex <= index) {\n throw new Error('Action middleware called next() multiple times.')\n }\n index = nextIndex\n const middleware = middlewares[nextIndex]\n if (!middleware) {\n return handler(c)\n }\n let nextResult: Response | unknown = undefined\n const result = await middleware(c, (async () => {\n nextResult = await dispatch(nextIndex + 1)\n }) as Next)\n if (result !== undefined) {\n return result\n }\n return nextResult\n }\n return dispatch(0)\n}\n\nconst toActionResponse = (value: unknown): Response => {\n if (value instanceof Response) {\n return value\n }\n if (isReadableStreamValue(value)) {\n return new Response(\n streamActionValue(value, (entry) => serializeActionServerValue(entry)),\n {\n headers: {\n 'content-type': ACTION_STREAM_CONTENT_TYPE,\n 'x-eclipsa-stream-kind': 'readable-stream',\n },\n },\n )\n }\n if (isAsyncGeneratorValue(value)) {\n return new Response(\n streamActionValue(value, (entry) => serializeActionServerValue(entry)),\n {\n headers: {\n 'content-type': ACTION_STREAM_CONTENT_TYPE,\n 'x-eclipsa-stream-kind': 'async-generator',\n },\n },\n )\n }\n return new Response(\n JSON.stringify({\n ok: true,\n value: serializeActionServerValue(value),\n } satisfies ActionJsonSuccess),\n {\n headers: {\n 'content-type': ACTION_CONTENT_TYPE,\n },\n },\n )\n}\n\nconst createHandleSignal = <T>(\n container: RuntimeContainer | null,\n id: string,\n key: string,\n initialValue: T,\n) => {\n if (!container) {\n throw new Error('Action handles require an active runtime container.')\n }\n return createDetachedRuntimeSignal(container, `$action:${id}:${key}`, initialValue)\n}\n\nconst readActionSubmissionInput = async (c: AppContext<any>) => {\n const cached = await getActionInputCache(c)\n const actionVars = c.var as Record<string, unknown>\n return normalizeFormSubmissionInput(actionVars.__e_action_raw_input ?? cached)\n}\n\nexport const getNormalizedActionInput = (c: AppContext<any>) => readActionSubmissionInput(c)\n\nexport const getActionFormSubmissionId = async (c: AppContext<any>) => {\n const input = await getActionInputCache(c)\n if (!isFormDataValue(input)) {\n return null\n }\n const actionId = input.get(ACTION_FORM_FIELD)\n return typeof actionId === 'string' && actionId ? actionId : null\n}\n\nexport const executeActionSubmission = async (\n id: string,\n c: AppContext<any>,\n): Promise<ActionExecutionResult> => {\n const action = getActionRegistry().get(id)\n if (!action) {\n throw new Error(`Unknown action ${id}.`)\n }\n const input = await readActionSubmissionInput(c)\n const result = await composeMiddlewares(c, action.middlewares, action.handler)\n if (result instanceof Response) {\n return {\n input,\n kind: 'response',\n response: result,\n }\n }\n return {\n input,\n kind: 'value',\n value: result,\n }\n}\n\nexport const primeActionState = (\n container: RuntimeContainer,\n id: string,\n snapshot: ActionStateSnapshot,\n) => {\n container.actionStates.set(id, {\n error: snapshot.error,\n input: snapshot.input,\n result: snapshot.result,\n })\n}\n\nconst appendClientChildren = (parent: Element, value: unknown) => {\n let resolved = value\n while (typeof resolved === 'function') {\n resolved = resolved()\n }\n\n if (Array.isArray(resolved)) {\n for (const entry of resolved) {\n appendClientChildren(parent, entry)\n }\n return\n }\n if (resolved === null || resolved === undefined || resolved === false) {\n return\n }\n if (resolved instanceof Node) {\n parent.appendChild(resolved)\n return\n }\n\n parent.appendChild(document.createTextNode(String(resolved)))\n}\n\nconst createActionFormNode = (id: string, props: ActionFormProps) => {\n const form = document.createElement('form')\n form.setAttribute(ACTION_FORM_ATTR, id)\n form.setAttribute('method', 'post')\n\n const hiddenInput = document.createElement('input')\n hiddenInput.name = ACTION_FORM_FIELD\n hiddenInput.type = 'hidden'\n hiddenInput.value = id\n form.appendChild(hiddenInput)\n\n for (const [name, value] of Object.entries(props)) {\n if (\n name === 'children' ||\n name === 'action' ||\n name === 'method' ||\n value === false ||\n value === undefined ||\n value === null\n ) {\n continue\n }\n if (name === 'class') {\n form.className = String(value)\n continue\n }\n if (name === 'style' && value && typeof value === 'object') {\n form.setAttribute(\n 'style',\n Object.entries(value as Record<string, unknown>)\n .map(([styleName, styleValue]) => `${styleName}: ${styleValue}`)\n .join('; '),\n )\n continue\n }\n if (value === true) {\n form.setAttribute(name, '')\n continue\n }\n form.setAttribute(name, String(value))\n }\n\n appendClientChildren(form, props.children)\n return form\n}\n\nexport const action: ActionFactory = (() => {\n throw new Error('action() must be compiled by the Eclipsa analyzer before it can run.')\n}) as ActionFactory\n\nexport const validator = <Schema extends StandardSchemaV1<any, any>>(\n schema: Schema,\n): ActionValidatorMiddleware<\n InferStandardSchemaInput<Schema>,\n InferStandardSchemaOutput<Schema>\n> => {\n const middleware = async (c: any, next: any) => {\n let parsedBody: unknown\n try {\n parsedBody = await getActionInputCache(c)\n } catch (error) {\n return c.json(\n {\n error: serializePublicValue({\n issues: [\n {\n message:\n error instanceof Error && error.message\n ? error.message\n : 'Action input could not be parsed.',\n },\n ],\n }),\n ok: false,\n } satisfies ActionJsonFailure,\n 400,\n )\n }\n const rawInput = normalizeFormSubmissionInput(parsedBody)\n const validated = await schema['~standard'].validate(rawInput)\n if ('issues' in validated) {\n return c.json(\n {\n error: serializePublicValue({\n issues: validated.issues,\n }),\n ok: false,\n } satisfies ActionJsonFailure,\n 400,\n )\n }\n c.set('__e_action_raw_input', rawInput)\n c.set('input', validated.value as InferStandardSchemaOutput<Schema>)\n await next()\n }\n return middleware as ActionValidatorMiddleware<\n InferStandardSchemaInput<Schema>,\n InferStandardSchemaOutput<Schema>\n >\n}\n\nexport function registerAction<Output>(\n id: string,\n middlewares: readonly [],\n handler: ActionHandler<{}, Output>,\n): void\nexport function registerAction<M1 extends ActionMiddleware<any>, Output>(\n id: string,\n middlewares: readonly [M1],\n handler: ActionHandler<ActionEnv<[M1]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2],\n handler: ActionHandler<ActionEnv<[M1, M2]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3],\n handler: ActionHandler<ActionEnv<[M1, M2, M3]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4],\n handler: ActionHandler<ActionEnv<[M1, M2, M3, M4]>, Output>,\n): void\nexport function registerAction<\n M1 extends ActionMiddleware<any>,\n M2 extends ActionMiddleware<any>,\n M3 extends ActionMiddleware<any>,\n M4 extends ActionMiddleware<any>,\n M5 extends ActionMiddleware<any>,\n Output,\n>(\n id: string,\n middlewares: readonly [M1, M2, M3, M4, M5],\n handler: ActionHandler<ActionEnv<[M1, M2, M3, M4, M5]>, Output>,\n): void\nexport function registerAction(\n id: string,\n middlewares: readonly ActionMiddleware<any>[],\n handler: ActionHandler<any, unknown>,\n) {\n getActionRegistry().set(id, {\n handler,\n id,\n middlewares: [...middlewares] as ActionMiddleware<any>[],\n })\n}\n\nexport const hasAction = (id: string) => getActionRegistry().has(id)\n\nexport const executeAction = async (id: string, c: AppContext<any>) => {\n try {\n const result = await executeActionSubmission(id, c)\n return result.kind === 'response' ? result.response : toActionResponse(result.value)\n } catch (error) {\n const publicError = await transformCurrentPublicError(error, 'action')\n return new Response(\n JSON.stringify({\n error: toSerializedActionError(publicError),\n ok: false,\n } satisfies ActionJsonFailure),\n {\n headers: {\n 'content-type': ACTION_CONTENT_TYPE,\n },\n status: 500,\n },\n )\n }\n}\n\nexport const __eclipsaAction = <\n const Middlewares extends readonly ActionMiddleware<any>[],\n Handler extends ActionHandler<ActionEnv<Middlewares>, any>,\n>(\n id: string,\n middlewares: readonly [...Middlewares],\n handler: Handler,\n): ActionUse<Middlewares, Handler> => {\n type Output = ActionHandlerOutput<Handler>\n\n if (typeof window === 'undefined') {\n getActionRegistry().set(id, {\n handler: handler as ActionHandler<any, unknown>,\n id,\n middlewares: [...middlewares] as ActionMiddleware<any>[],\n })\n }\n\n const useActionHandle = registerActionHook(\n id,\n setActionHookMeta(() => {\n const container = getRuntimeContainer()\n const existing = container?.actions.get(id)\n if (existing) {\n return existing as ReturnType<ActionUse<Middlewares, Handler>>\n }\n\n const initialState = container?.actionStates.get(id)\n const pending = createHandleSignal(container, id, 'pending', false)\n const result = createHandleSignal<ActionStreamYield<Output> | undefined>(\n container,\n id,\n 'result',\n initialState?.result as ActionStreamYield<Output> | undefined,\n )\n const error = createHandleSignal<unknown>(container, id, 'error', initialState?.error)\n const lastSubmission = createHandleSignal<\n ActionSubmission<ActionInput<Middlewares>, ActionStreamYield<Output>> | undefined\n >(\n container,\n id,\n 'last-submission',\n initialState\n ? ({\n error: initialState.error,\n input: initialState.input as ActionInput<Middlewares>,\n result: initialState.result as ActionStreamYield<Output> | undefined,\n } satisfies ActionSubmission<ActionInput<Middlewares>, ActionStreamYield<Output>>)\n : undefined,\n )\n\n const syncSnapshot = () => {\n if (!container) {\n return\n }\n const submission = lastSubmission.value\n if (!submission) {\n container.actionStates.delete(id)\n return\n }\n container.actionStates.set(id, {\n error: submission.error,\n input: submission.input,\n result: submission.result,\n })\n }\n\n const flushHandleUpdates = async () => {\n if (!container) {\n return\n }\n await flushDirtyComponents(container)\n }\n\n const applySubmissionChunk = async (\n input: ActionInput<Middlewares>,\n value: ActionStreamYield<Output>,\n ) => {\n result.value = value\n lastSubmission.value = {\n error: undefined,\n input,\n result: value,\n }\n syncSnapshot()\n await flushHandleUpdates()\n }\n\n const applySubmissionError = async (input: ActionInput<Middlewares>, caught: unknown) => {\n error.value = caught\n lastSubmission.value = {\n error: caught,\n input,\n result: result.value,\n }\n syncSnapshot()\n await flushHandleUpdates()\n }\n\n const finalizeSubmission = async () => {\n pending.value = false\n await flushHandleUpdates()\n }\n\n const invoke = (input: ActionInput<Middlewares> | FormData) => {\n pending.value = true\n error.value = undefined\n const normalizedInput = normalizeFormSubmissionInput(input) as ActionInput<Middlewares>\n const request = invokeAction(id, input, container)\n\n if (isAsyncGeneratorFunctionValue(handler)) {\n return (async function* () {\n try {\n const value = await request\n if (isAsyncGeneratorValue(value)) {\n for await (const chunk of value) {\n const resolved = chunk as ActionStreamYield<Output>\n await applySubmissionChunk(normalizedInput, resolved)\n yield resolved\n }\n return\n }\n const resolved = value as ActionStreamYield<Output>\n await applySubmissionChunk(normalizedInput, resolved)\n yield resolved\n } catch (caught) {\n await applySubmissionError(normalizedInput, caught)\n throw caught\n } finally {\n await finalizeSubmission()\n }\n })() as ActionInvokeResult<Output>\n }\n\n return request\n .then(async (value) => {\n const resolved = value as ActionStreamYield<Output>\n await applySubmissionChunk(normalizedInput, resolved)\n return value as ResolvedActionOutput<Output>\n })\n .catch(async (caught) => {\n await applySubmissionError(normalizedInput, caught)\n throw caught\n })\n .finally(finalizeSubmission) as ActionInvokeResult<Output>\n }\n\n const Form = (props: ActionFormProps) => {\n const body =\n typeof document !== 'undefined'\n ? (createActionFormNode(id, props) as unknown as JSX.Element)\n : (() => {\n const nextProps: Record<string, unknown> = {\n ...props,\n [ACTION_FORM_ATTR]: id,\n method: 'post',\n children: [\n {\n isStatic: true,\n props: {\n name: ACTION_FORM_FIELD,\n type: 'hidden',\n value: id,\n },\n type: 'input',\n },\n props.children,\n ],\n }\n delete nextProps.action\n delete nextProps.method\n return {\n isStatic: true,\n props: nextProps,\n type: 'form',\n } satisfies JSX.Element\n })()\n\n return body\n }\n const actionHandle = setActionHandleMeta(\n {\n Form,\n action: invoke as ActionInvoker<ActionInput<Middlewares>, ActionInvokeResult<Output>>,\n get error() {\n return error.value\n },\n get formActionId() {\n return id\n },\n get isPending() {\n return pending.value\n },\n get lastSubmission() {\n return lastSubmission.value\n },\n get result() {\n return result.value\n },\n } satisfies ActionHandle<\n ActionInput<Middlewares>,\n ActionStreamYield<Output>,\n ActionInvokeResult<Output>\n >,\n id,\n )\n container?.actions.set(id, actionHandle)\n syncSnapshot()\n return actionHandle\n }, id),\n ) as ActionUse<Middlewares, Handler>\n\n return useActionHandle\n}\n"],"mappings":"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"}