@vobs/runtime 1.3.6 → 1.4.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/debug.ts","../src/fragment.ts","../src/ops.ts","../src/hmr.ts","../src/ref.ts","../src/bind.ts","../src/dynamic.ts","../src/template.ts","../src/error.ts","../src/boundary.ts","../src/error-boundary.ts","../src/async-boundary.ts","../src/profiler.ts"],"sourcesContent":["export type { VobsRenderer } from './renderer'\nexport {\n getRuntimeDebugContext,\n getRuntimeDebugHooks,\n invokeRuntimeDebug,\n pushRuntimeDebugContext,\n runWithRuntimeDebugContext,\n setRuntimeDebugHooks,\n describeDebugNode\n} from './debug'\nexport type {\n RuntimeDebugContext,\n RuntimeDebugEnvironment,\n RuntimeDebugHooks,\n RuntimeDomMutation,\n RuntimeDomMutationOperation,\n RuntimeErrorEvent,\n RuntimeHydrationMismatch\n} from './debug'\nexport { createFragment, isVobsFragment } from './fragment'\nexport type { FragmentFactory, VobsFragment, VobsNode } from './fragment'\nexport {\n setRenderer,\n getRenderer,\n createText,\n createElement,\n createComment,\n insertBefore,\n removeChild,\n setTextContent,\n setProperty,\n setAttribute,\n spreadProps,\n setStaticProps,\n addEventListener,\n removeEventListener,\n clear,\n createComponent,\n createBlock,\n disposeNodeOwner\n} from './ops'\nexport { bindText, bindAttribute, bindProperty } from './bind'\nexport type { ValueSource } from './bind'\nexport { ref, setRef } from './ref'\nexport type { Ref, RefTarget } from './ref'\nexport { insertDynamic, insertDynamicValue, insertList, normalizeDynamicChild } from './dynamic'\nexport type { DynamicChild, NodeFactory } from './dynamic'\nexport { createTemplate, cloneTemplate } from './template'\nexport type { VobsLocatedError, VobsSourceLocation } from './ops'\nexport {\n VobsError,\n createVobsError,\n formatVobsError,\n isVobsError,\n normalizeVobsError\n} from './error'\nexport type {\n FormatVobsErrorOptions,\n VobsErrorDefaults,\n VobsErrorLayer,\n VobsErrorLocation,\n VobsErrorOptions,\n VobsErrorSeverity\n} from './error'\nexport {\n createHmrStateStore,\n disposeHmrModule,\n hmrStateRef,\n markHmrInstanceMounted,\n registerHmrInstance,\n resolveComponent,\n updateHmrModule\n} from './hmr'\nexport type { HmrComponent, HmrInstance, HmrStateStore } from './hmr'\nexport { insertErrorBoundary } from './error-boundary'\nexport { ErrorBoundary } from './error-boundary'\nexport type { ErrorBoundaryFallback, ErrorBoundaryOptions, ErrorBoundaryProps } from './error-boundary'\nexport { insertBoundary } from './boundary'\nexport type { BoundaryFallback, BoundaryOptions, BoundaryRetry } from './boundary'\nexport { insertAsyncBoundary, AsyncBoundary } from './async-boundary'\nexport type { AsyncBoundaryFallback, AsyncBoundaryOptions, AsyncBoundaryProps, AsyncBoundaryView } from './async-boundary'\nexport { insertProfiler, Profiler } from './profiler'\nexport type { ProfilerOptions, ProfilerProps, ProfilerRenderInfo } from './profiler'\n","import type { Owner } from '@vobs/reactivity'\n\nexport type RuntimeDebugEnvironment = 'client' | 'server'\n\n/**\n * Lightweight context copied onto debug events created synchronously inside a\n * Router loader, Effect or SSR render. It is intentionally optional so the\n * runtime remains useful without DevTools.\n */\nexport interface RuntimeDebugContext {\n readonly environment?: RuntimeDebugEnvironment\n readonly sessionId?: string\n readonly route?: string\n readonly navigationId?: number\n readonly dataRequestId?: number\n readonly updateId?: string\n readonly effectId?: string\n readonly source?: string\n}\n\nexport interface RuntimeHydrationMismatch {\n readonly kind: 'missing-node' | 'extra-node' | 'position' | 'content'\n readonly expected: string\n readonly actual: string\n readonly path: string\n readonly message: string\n}\n\nexport type RuntimeDomMutationOperation = 'text' | 'property' | 'attribute' | 'insert' | 'remove'\n\nexport interface RuntimeDomMutation {\n readonly operation: RuntimeDomMutationOperation\n readonly target: string\n readonly parent?: string\n readonly key?: string\n readonly previousValue?: unknown\n readonly nextValue?: unknown\n}\n\nexport interface RuntimeErrorEvent {\n readonly error: unknown\n readonly owner: Owner\n readonly phase: 'event' | 'boundary'\n readonly handled: boolean\n readonly recovery: 'propagated' | 'handled' | 'fallback' | 'retrying' | 'recovered'\n}\n\nexport interface RuntimeDebugHooks {\n domMutation?(mutation: RuntimeDomMutation): void\n error?(event: RuntimeErrorEvent): void\n hydrationMismatch?(event: RuntimeHydrationMismatch): void\n}\n\nlet activeRuntimeDebugHooks: RuntimeDebugHooks | null = null\nlet activeRuntimeDebugContext: RuntimeDebugContext | null = null\n\nexport function setRuntimeDebugHooks(hooks: RuntimeDebugHooks | null): RuntimeDebugHooks | null {\n const previous = activeRuntimeDebugHooks\n activeRuntimeDebugHooks = hooks\n return previous\n}\n\nexport function getRuntimeDebugHooks(): RuntimeDebugHooks | null {\n return activeRuntimeDebugHooks\n}\n\nexport function getRuntimeDebugContext(): RuntimeDebugContext | null {\n return activeRuntimeDebugContext\n}\n\n/** Run a synchronous operation with trace context, preserving async renders. */\nexport function runWithRuntimeDebugContext<T>(context: RuntimeDebugContext, task: () => T): T {\n const previous = activeRuntimeDebugContext\n const next = { ...previous, ...context }\n activeRuntimeDebugContext = next\n let result: T\n try {\n result = task()\n } catch (error) {\n activeRuntimeDebugContext = previous\n throw error\n }\n if (isPromiseLike(result)) {\n return Promise.resolve(result).finally(() => {\n if (activeRuntimeDebugContext === next) activeRuntimeDebugContext = previous\n }) as T\n }\n activeRuntimeDebugContext = previous\n return result\n}\n\n/** Keep a context active across callback boundaries such as Effect execution. */\nexport function pushRuntimeDebugContext(context: RuntimeDebugContext): () => void {\n const previous = activeRuntimeDebugContext\n activeRuntimeDebugContext = { ...previous, ...context }\n let restored = false\n return () => {\n if (restored) return\n restored = true\n activeRuntimeDebugContext = previous\n }\n}\n\nexport function invokeRuntimeDebug<K extends keyof RuntimeDebugHooks>(\n name: K,\n ...args: Parameters<NonNullable<RuntimeDebugHooks[K]>>\n): void {\n const callback = activeRuntimeDebugHooks?.[name] as ((...values: unknown[]) => void) | undefined\n if (!callback) return\n try {\n callback(...args)\n } catch {\n // Debug tooling must never change runtime behavior.\n }\n}\n\nexport function readDebugValue(read: () => unknown): unknown {\n try {\n return read()\n } catch {\n return '[Uninspectable]'\n }\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return Boolean(value) && (typeof value === 'object' || typeof value === 'function')\n && typeof (value as { then?: unknown }).then === 'function'\n}\n\nexport function describeDebugNode(node: unknown): string {\n if (!node || typeof node !== 'object') return 'node'\n const value = node as {\n readonly nodeName?: unknown\n readonly tagName?: unknown\n readonly id?: unknown\n readonly className?: unknown\n }\n const name = typeof value.tagName === 'string'\n ? value.tagName.toLowerCase()\n : typeof value.nodeName === 'string' ? value.nodeName.toLowerCase() : 'node'\n const id = typeof value.id === 'string' && value.id ? `#${value.id}` : ''\n const className = typeof value.className === 'string' && value.className\n ? `.${value.className.trim().split(/\\s+/).filter(Boolean).join('.')}`\n : ''\n return `${name}${id}${className}`\n}\n","import { getCurrentOwner } from '@vobs/reactivity'\nimport { createComment, getRenderer } from './ops'\n\nexport interface VobsFragment {\n readonly kind: 'vobs-fragment'\n readonly start: Node\n readonly end: Node\n readonly mount: (parent: Node, anchor: Node | null) => void\n readonly unmount: (parent: Node) => void\n}\n\nexport type VobsNode = Node | VobsFragment\nexport type FragmentFactory = (parent: Node, anchor: Node) => void\n\nexport function createFragment(factory: FragmentFactory): VobsFragment {\n const start = createComment('vobs:fragment:start')\n const end = createComment('vobs:fragment:end')\n let parent: Node | null = null\n let initialized = false\n const owner = getCurrentOwner()\n\n const fragment: VobsFragment = {\n kind: 'vobs-fragment',\n start,\n end,\n mount(nextParent, anchor): void {\n if (parent && parent !== nextParent) {\n throw new Error('Vobs Fragment: 不能跨父节点移动 Fragment')\n }\n\n if (initialized) {\n moveRange(nextParent, start, end, anchor)\n return\n }\n\n const renderer = getRenderer()\n renderer.insertBefore(nextParent, start, anchor)\n renderer.insertBefore(nextParent, end, anchor)\n parent = nextParent\n initialized = true\n if (owner) owner.run(() => factory(nextParent, end))\n else factory(nextParent, end)\n },\n unmount(nextParent): void {\n if (!initialized || parent !== nextParent) {\n throw new Error('Vobs Fragment: Fragment 不属于指定父节点')\n }\n const renderer = getRenderer()\n let current = renderer.nextSibling(start)\n while (current && current !== end) {\n const next = renderer.nextSibling(current)\n renderer.removeChild(nextParent, current)\n current = next\n }\n renderer.removeChild(nextParent, start)\n renderer.removeChild(nextParent, end)\n parent = null\n initialized = false\n }\n }\n return fragment\n}\n\nexport function isVobsFragment(value: unknown): value is VobsFragment {\n return Boolean(value) && typeof value === 'object' && (value as VobsFragment).kind === 'vobs-fragment'\n}\n\nfunction moveRange(parent: Node, start: Node, end: Node, anchor: Node | null): void {\n const renderer = getRenderer()\n const nodes: Node[] = [start]\n let current = renderer.nextSibling(start)\n while (current) {\n nodes.push(current)\n if (current === end) break\n current = renderer.nextSibling(current)\n }\n if (nodes[nodes.length - 1] !== end) {\n throw new Error('Vobs Fragment: 找不到结束锚点')\n }\n for (const node of nodes) renderer.insertBefore(parent, node, anchor)\n}\n","// 编译产物调用的基础操作\n\nimport { createOwner, getCurrentOwner, setOwnerDebugName, untrack, type Owner } from '@vobs/reactivity'\nimport { isVobsFragment, type VobsNode } from './fragment'\nimport { describeDebugNode, getRuntimeDebugHooks, invokeRuntimeDebug, readDebugValue } from './debug'\nimport {\n associateHmrInstance,\n markHmrInstanceMounted,\n registerHmrInstance,\n type HmrInstance\n} from './hmr'\nimport type { VobsRenderer } from './renderer'\nimport { setRef } from './ref'\n\ntype RuntimeRenderer = VobsRenderer<Node, Text, Element, Comment>\n\nlet currentRenderer: RuntimeRenderer | null = null\nconst nodeOwners = new WeakMap<object, Owner>()\ninterface EventBinding {\n readonly handler: EventListener\n readonly owner: Owner | null\n readonly original: EventListener\n}\nconst eventBindings = new WeakMap<object, Map<string, EventBinding>>()\n\nexport function setRenderer<\n NodeType,\n TextNode extends NodeType,\n ElementNode extends NodeType,\n CommentNode extends NodeType\n>(renderer: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>): void {\n // 编译产物仍使用 DOM 节点声明;实际宿主类型由应用提供的渲染器决定。\n currentRenderer = renderer as unknown as RuntimeRenderer\n}\n\nexport function getRenderer(): RuntimeRenderer {\n if (!currentRenderer) {\n throw new Error('渲染器未初始化')\n }\n return currentRenderer\n}\n\nexport function createText(content: string): Text {\n return getRenderer().createText(content)\n}\n\nexport function createElement(tag: string): Element {\n return getRenderer().createElement(tag)\n}\n\nexport function createComment(content: string): Comment {\n return getRenderer().createComment(content)\n}\n\nexport function insertBefore(\n parent: Node,\n child: VobsNode,\n anchor: VobsNode | null\n): void {\n if (isVobsFragment(child)) {\n child.mount(parent, isVobsFragment(anchor) ? anchor.start : anchor)\n return\n }\n getRenderer().insertBefore(parent, child, isVobsFragment(anchor) ? anchor.start : anchor)\n markHmrInstanceMounted(child, parent)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'insert',\n target: describeDebugNode(child),\n parent: describeDebugNode(parent)\n })\n }\n}\n\nexport function removeChild(\n parent: Node,\n child: VobsNode\n): void {\n disposeNodeOwner(child)\n if (isVobsFragment(child)) {\n child.unmount(parent)\n return\n }\n getRenderer().removeChild(parent, child)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'remove',\n target: describeDebugNode(child),\n parent: describeDebugNode(parent)\n })\n }\n}\n\nexport function setTextContent(\n node: Text,\n content: string\n): void {\n const previousValue = getRuntimeDebugHooks()\n ? readDebugValue(() => node.textContent)\n : undefined\n getRenderer().setTextContent(node, content)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'text',\n target: describeDebugNode(node),\n previousValue,\n nextValue: content\n })\n }\n}\n\nexport function setProperty(\n node: Element,\n key: string,\n value: unknown\n): void {\n const previousValue = getRuntimeDebugHooks()\n ? readDebugValue(() => Reflect.get(node, key))\n : undefined\n getRenderer().setProperty(node, key, value)\n if (key === 'value' && (node as { tagName?: unknown }).tagName === 'SELECT') {\n scheduleSelectValueSync(node, value)\n }\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'property',\n target: describeDebugNode(node),\n key,\n previousValue,\n nextValue: value\n })\n }\n}\n\nconst pendingSelectValues = new WeakMap<Element, unknown>()\nconst selectSyncScheduled = new WeakSet<Element>()\n\n/**\n * `<select value>` 在 option 子节点存在前赋值不生效(HTML 规范:select 的 value\n * 由已存在的 option 决定)。编译产物先设置属性、后插入子节点,静态写法必然丢初始值\n * (消费方此前只能用 ref + queueMicrotask 规避)。\n * 这里对 select 的 value 赋值统一延迟到微任务重放一次:静态子节点在同一同步任务内\n * 插入完毕,重放即命中。动态(insertList/insertDynamic)插入的 option 晚于该微任务时,\n * 由 value 的绑定 effect 在后续信号更新中正常覆盖。\n */\nfunction scheduleSelectValueSync(node: Element, value: unknown): void {\n pendingSelectValues.set(node, value)\n if (selectSyncScheduled.has(node)) return\n selectSyncScheduled.add(node)\n queueMicrotask(() => {\n selectSyncScheduled.delete(node)\n if (!pendingSelectValues.has(node)) return\n const pending = pendingSelectValues.get(node)\n pendingSelectValues.delete(node)\n getRenderer().setProperty(node, 'value', pending)\n })\n}\n\nexport function setAttribute(\n node: Element,\n key: string,\n value: string\n): void {\n const previousValue = getRuntimeDebugHooks()\n ? readDebugValue(() => typeof node.getAttribute === 'function' ? node.getAttribute(key) : undefined)\n : undefined\n getRenderer().setAttribute(node, key, value)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'attribute',\n target: describeDebugNode(node),\n key,\n previousValue,\n nextValue: value\n })\n }\n}\n\nexport function spreadProps(node: Element, props: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(props)) {\n if (key === 'key' || value === null || value === undefined) continue\n if (key === 'ref') {\n setRef(node, value)\n continue\n }\n if (key.startsWith('on') && typeof value === 'function') addEventListener(node, key.slice(2).toLowerCase(), value as EventListener)\n // property 键的 false 有语义(如 disabled={false} 必须清除),不能跳过;\n // attribute 键的 false 表示“不设置”,与 HTML 语义一致。\n else if (isPropertyKey(key)) setProperty(node, key, value)\n else if (value === false) continue\n else setAttribute(node, key === 'className' ? 'class' : key, key === 'style' && isStyleObject(value) ? formatStyle(value) : String(value))\n }\n}\n\n/** Apply compile-time host properties in one renderer pass. */\nexport function setStaticProps(node: Element, props: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(props)) {\n if (key === 'key' || key === 'ref' || key.startsWith('on')) continue\n if (value === null || value === undefined) continue\n if (isPropertyKey(key)) setProperty(node, key, value)\n else if (value === false) continue\n else setAttribute(node, key === 'className' ? 'class' : key, key === 'style' && isStyleObject(value) ? formatStyle(value) : String(value))\n }\n}\n\nfunction isPropertyKey(key: string): boolean {\n return key === 'value' || key === 'checked' || key === 'selected' || key === 'disabled'\n || key === 'multiple' || key === 'readOnly' || key === 'required'\n || key === 'autofocus' || key === 'hidden' || key === 'tabIndex'\n}\n\nfunction isStyleObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction formatStyle(value: Record<string, unknown>): string {\n return Object.entries(value).filter(([, entry]) => entry !== null && entry !== undefined && entry !== false)\n .map(([key, entry]) => `${key.replace(/[A-Z]/gu, match => `-${match.toLowerCase()}`)}:${String(entry)}`).join(';')\n}\n\nexport function addEventListener(\n node: Element,\n event: string,\n handler: EventListener\n): void {\n const renderer = getRenderer()\n const owner = getCurrentOwner()\n let bindings = eventBindings.get(node)\n if (!bindings) {\n bindings = new Map()\n eventBindings.set(node, bindings)\n }\n const previous = bindings.get(event)\n if (previous && previous.original === handler && previous.owner === owner) return\n if (previous) renderer.removeEventListener(node, event, previous.handler)\n const listener = owner ? (reason: Event) => {\n // Owner 已销毁说明节点所属子树已被卸载/替换,事件来自游离 DOM,直接忽略。\n // 否则 owner.run 会抛\"已销毁的 Owner\",在事件流里制造无意义的错误噪音。\n if (owner.disposed) return\n try {\n owner.run(() => handler(reason))\n } catch (error) {\n const handled = owner.handleError(error)\n invokeRuntimeDebug('error', {\n error,\n owner,\n phase: 'event',\n handled,\n recovery: handled ? 'handled' : 'propagated'\n })\n if (!handled) throw error\n }\n } : handler\n const binding: EventBinding = { handler: listener, owner, original: handler }\n bindings.set(event, binding)\n renderer.addEventListener(node, event, listener)\n owner?.onDispose(() => {\n if (bindings?.get(event) !== binding) return\n bindings.delete(event)\n renderer.removeEventListener(node, event, listener)\n })\n}\n\nexport function removeEventListener(\n node: Element,\n event: string,\n handler: EventListener\n): void {\n const renderer = getRenderer()\n const binding = eventBindings.get(node)?.get(event)\n renderer.removeEventListener(node, event, binding?.handler ?? handler)\n eventBindings.get(node)?.delete(event)\n}\n\nexport function clear(container: Node): void {\n getRenderer().clear(container)\n}\n\ntype VobsComponent = (...args: any[]) => VobsNode\n\ntype ComponentProps<Component extends VobsComponent> = Component extends (\n props: infer Props\n) => VobsNode\n ? NonNullable<Props> extends object ? NonNullable<Props> : Record<string, never>\n : Record<string, never>\n\nexport function createComponent<Component extends VobsComponent>(\n component: Component,\n props: ComponentProps<Component>,\n source?: VobsSourceLocation\n): VobsNode {\n const owner = createOwner()\n const componentName = (component as typeof component & { displayName?: string }).displayName\n || component.name\n || 'anonymous'\n setOwnerDebugName(owner, source\n ? `${componentName} (${source.file}:${source.line}:${source.column})`\n : componentName)\n owner.onError(reason => {\n attachSourceLocation(reason, source)\n attachComponentContext(reason, componentName, owner.id)\n throw reason\n })\n let node: VobsNode\n try {\n // 组件渲染必须 untrack:组件是 run-once 的,其渲染发生在某次 effect 求值\n // (insertDynamic/insertBoundary 的渲染工厂、路由挂载)内时,若不切断追踪,\n // 组件体内读取的信号会被收集为祖先 effect 的依赖——一次无关编辑就会触发\n // 整棵子树销毁重建(输入框被换掉、焦点丢失、事件监听随旧树一起被清理)。\n // 结构性响应只属于条件工厂与绑定 effect,组件本体渲染一次即止。\n node = owner.run(() => untrack(() => component(props)))\n } catch (error) {\n owner.dispose()\n attachSourceLocation(error, source)\n attachComponentContext(error, componentName, owner.id)\n throw error\n }\n associateNodeOwner(node, owner)\n const hmrKey = (component as typeof component & { hmrKey?: string }).hmrKey\n if (hmrKey) {\n const instance: HmrInstance = {\n node,\n parent: null,\n refresh(): void {\n const previous = instance.node\n const next = owner.run(() => untrack(() => component(props)))\n if (instance.parent && !isVobsFragment(previous) && !isVobsFragment(next)) {\n getRenderer().insertBefore(instance.parent, next, previous)\n getRenderer().removeChild(instance.parent, previous)\n }\n nodeOwners.delete(previous as object)\n nodeOwners.set(next as object, owner)\n associateHmrInstance(next, instance)\n instance.node = next\n }\n }\n associateHmrInstance(node, instance)\n const separator = hmrKey.lastIndexOf(':')\n const moduleId = separator < 0 ? hmrKey : hmrKey.slice(0, separator)\n const cleanup = registerHmrInstance(moduleId, instance)\n owner.onDispose(cleanup)\n }\n return node\n}\n\nexport interface VobsSourceLocation {\n readonly file: string\n readonly line: number\n readonly column: number\n}\n\nexport interface VobsLocatedError extends Error {\n readonly vobsSource?: VobsSourceLocation\n readonly vobsComponent?: string\n readonly vobsOwnerId?: string\n}\n\nfunction attachSourceLocation(reason: unknown, source: VobsSourceLocation | undefined): void {\n if (!source || (!reason || (typeof reason !== 'object' && typeof reason !== 'function'))) return\n const error = reason as VobsLocatedError\n if (error.vobsSource) return\n try {\n Object.defineProperty(error, 'vobsSource', {\n configurable: true,\n enumerable: false,\n value: source,\n writable: false\n })\n } catch {\n // Frozen third-party errors still propagate with their original details.\n }\n}\n\nfunction attachComponentContext(reason: unknown, component: string, ownerId: string): void {\n if (!reason || (typeof reason !== 'object' && typeof reason !== 'function')) return\n const error = reason as VobsLocatedError\n try {\n if (!error.vobsComponent) Object.defineProperty(error, 'vobsComponent', { configurable: true, enumerable: false, value: component, writable: false })\n if (!error.vobsOwnerId) Object.defineProperty(error, 'vobsOwnerId', { configurable: true, enumerable: false, value: ownerId, writable: false })\n } catch {\n // Frozen third-party errors still propagate with their original details.\n }\n}\n\nexport function createBlock(factory: () => VobsNode | null | undefined | false): VobsNode | null {\n const owner = createOwner()\n setOwnerDebugName(owner, 'dynamic')\n let node: VobsNode | null | undefined | false\n try {\n node = owner.run(factory)\n } catch (error) {\n owner.dispose()\n throw error\n }\n if (!node) {\n owner.dispose()\n return null\n }\n associateNodeOwner(node, owner)\n return node\n}\n\nexport function associateNodeOwner(node: VobsNode, owner: Owner): void {\n nodeOwners.set(node, owner)\n}\n\nexport function disposeNodeOwner(node: VobsNode): void {\n const owner = nodeOwners.get(node)\n if (!owner) return\n nodeOwners.delete(node)\n owner.dispose()\n}\n","import type { VobsNode } from './fragment'\n\nexport type HmrComponent<Props extends object = Record<string, unknown>> =\n (props: Props) => VobsNode\n\nexport interface HmrStateStore {\n get<T>(key: string, initial: T | (() => T)): T\n set<T>(key: string, value: T): void\n has(key: string): boolean\n delete(key: string): void\n clear(): void\n}\n\nexport interface HmrInstance {\n node: VobsNode\n parent: Node | null\n refresh(): void\n}\n\ninterface HmrModuleState {\n readonly components: Map<string, HmrComponent>\n readonly state: Map<string, unknown>\n readonly instances: Set<HmrInstance>\n}\n\ninterface HmrGlobal {\n modules: Map<string, HmrModuleState>\n /** 编译器生成的 hmrStateRef 注册表:键为 `${moduleId}#${声明名}`,值跨模块重执行保活。 */\n states: Map<string, unknown>\n}\n\nconst globalTarget = globalThis as typeof globalThis & { __VOBS_HMR__?: HmrGlobal }\nconst hmrGlobal = globalTarget.__VOBS_HMR__ ?? { modules: new Map<string, HmrModuleState>(), states: new Map<string, unknown>() }\nglobalTarget.__VOBS_HMR__ = hmrGlobal\n\nexport function resolveComponent<Props extends object>(\n component: HmrComponent<Props>,\n moduleId: string,\n exportName: string\n): HmrComponent<Props> {\n const module = getModule(moduleId)\n const existing = module.components.get(exportName)\n if (existing) return existing as HmrComponent<Props>\n\n const proxy = ((props: Props) => {\n const current = (proxy as HmrComponent<Props> & { current: HmrComponent<Props> }).current\n return current(props)\n }) as HmrComponent<Props> & { current: HmrComponent<Props> }\n proxy.current = component\n Object.defineProperties(proxy, {\n displayName: { configurable: true, value: component.name || exportName },\n hmrKey: { configurable: false, value: `${moduleId}:${exportName}` }\n })\n module.components.set(exportName, proxy as HmrComponent)\n return proxy\n}\n\nexport function updateHmrModule(_moduleId: string, nextModule: Record<string, unknown>): void {\n const modules = [...hmrGlobal.modules.values()]\n for (const module of modules) {\n let changed = false\n for (const [name, proxy] of module.components) {\n const next = nextModule[name]\n if (typeof next !== 'function') continue\n const hmrProxy = proxy as HmrComponent & { current: HmrComponent; displayName?: string }\n hmrProxy.current = next as HmrComponent\n Object.defineProperty(hmrProxy, 'displayName', { configurable: true, value: next.name || name })\n changed = true\n }\n if (!changed) continue\n for (const instance of module.instances) {\n try {\n instance.refresh()\n } catch {\n // HMR failures remain application errors on the next normal render.\n }\n }\n }\n}\n\nexport function disposeHmrModule(_moduleId: string): void {\n // State and component proxies intentionally survive module disposal.\n}\n\nexport function createHmrStateStore(moduleId: string): HmrStateStore {\n const state = getModule(moduleId).state\n return {\n get<T>(key: string, initial: T | (() => T)): T {\n if (!state.has(key)) state.set(key, typeof initial === 'function' ? (initial as () => T)() : initial)\n return state.get(key) as T\n },\n set<T>(key: string, value: T): void {\n state.set(key, value)\n },\n has: key => state.has(key),\n delete: key => { state.delete(key) },\n clear: () => { state.clear() }\n }\n}\n\n/**\n * 编译器为模块顶层 state() 声明生成的取值入口。键为 `${moduleId}#${声明名}`,\n * 与手动 store 键空间隔离。模块热更新重执行时复用既有信号实例:旧导入方持有的\n * 实例与新模块实例共享同一份状态,消除\"两份模块、两份状态\"导致的编辑不生效/页面半边失灵。\n */\nexport function hmrStateRef<T>(key: string, create: () => T): T {\n const states = hmrGlobal.states\n if (states.has(key)) return states.get(key) as T\n const value = create()\n states.set(key, value)\n return value\n}\n\nexport function registerHmrInstance(moduleId: string, instance: HmrInstance): () => void {\n const instances = getModule(moduleId).instances\n instances.add(instance)\n return () => instances.delete(instance)\n}\n\nexport function markHmrInstanceMounted(node: VobsNode, parent: Node): void {\n const instance = hmrInstances.get(node as object)\n if (instance) instance.parent = parent\n}\n\nfunction getModule(moduleId: string): HmrModuleState {\n let module = hmrGlobal.modules.get(moduleId)\n if (!module) {\n module = { components: new Map(), state: new Map(), instances: new Set() }\n hmrGlobal.modules.set(moduleId, module)\n }\n return module\n}\n\nconst hmrInstances = new WeakMap<object, HmrInstance>()\n\nexport function associateHmrInstance(node: VobsNode, instance: HmrInstance): void {\n hmrInstances.set(node as object, instance)\n}\n","import { getCurrentOwner } from '@vobs/reactivity'\n\n/** A mutable reference populated when a host node is mounted. */\nexport interface Ref<T extends object = Node> {\n current: T | null\n}\n\nexport type RefTarget<T extends object = Node> = Ref<T> | ((value: T | null) => void)\n\nexport function ref<T extends object = Node>(initialValue: T | null = null): Ref<T> {\n return { current: initialValue }\n}\n\n/** Bind a host node to an object or callback ref and clear it with its Owner. */\nexport function setRef<T extends object>(node: T, target: unknown): void {\n if (!isRefTarget<T>(target)) return\n // SSR's serializable nodes are never exposed as live refs. Custom renderers\n // may use arbitrary host objects, so only exclude the known SSR shape.\n if (isSSRNode(node)) return\n const owner = getCurrentOwner()\n assignRef(target, node)\n owner?.onDispose(() => {\n // Do not clear a ref that has since been reassigned to another node.\n if (isObjectRef(target) && target.current !== node) return\n assignRef(target, null)\n })\n}\n\nfunction isSSRNode(value: object): boolean {\n const type = (value as { type?: unknown }).type\n return (type === 'element' || type === 'text' || type === 'comment')\n && !('nodeType' in value)\n}\n\nfunction isObjectRef<T extends object>(value: unknown): value is Ref<T> {\n return Boolean(value && typeof value === 'object' && 'current' in value)\n}\n\nfunction isRefTarget<T extends object>(value: unknown): value is RefTarget<T> {\n return isObjectRef<T>(value) || typeof value === 'function'\n}\n\nfunction assignRef<T extends object>(target: RefTarget<T>, value: T | null): void {\n try {\n if (typeof target === 'function') target(value)\n else target.current = value\n } catch {\n // Ref callbacks are user code; never make mounting fail because of them.\n }\n}\n","// 动态绑定:将 Signal 绑定到 DOM 节点\r\n\r\nimport { effect } from '@vobs/reactivity'\nimport type { Signal } from '@vobs/reactivity'\nimport { setAttribute, setProperty, setTextContent } from './ops'\n\nexport type ValueSource<T> = Signal<T> | (() => T)\n\nfunction readSource<T>(source: ValueSource<T>): T {\n return typeof source === 'function' ? source() : source.value\n}\n\r\nexport function bindText(\n node: Text,\n source: ValueSource<unknown>\n): void {\n effect(() => {\n const value = readSource(source)\n setTextContent(node, value === null || value === undefined || typeof value === 'boolean' ? '' : String(value))\n })\n}\n\r\nexport function bindAttribute(\n node: Element,\r\n key: string,\r\n source: ValueSource<unknown>\n): void {\n effect(() => {\n const value = readSource(source)\n setAttribute(node, key, key === 'style' && value && typeof value === 'object' && !Array.isArray(value)\n ? Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== null && entry !== undefined && entry !== false)\n .map(([name, entry]) => `${name.replace(/[A-Z]/gu, match => `-${match.toLowerCase()}`)}:${String(entry)}`)\n .join(';')\n : String(value))\n })\n}\n\nexport function bindProperty(\n node: Element,\n key: string,\n source: ValueSource<unknown>\n): void {\n effect(() => {\n setProperty(node, key, readSource(source))\n })\n}\n","import { createOwner, effect, state, type Owner, type Signal } from '@vobs/reactivity'\nimport {\n associateNodeOwner,\n createBlock,\n createComment,\n createText,\n insertBefore,\n removeChild\n} from './ops'\nimport { createFragment, isVobsFragment, type VobsNode } from './fragment'\n\nexport type NodeFactory = () => VobsNode | null | undefined | false\nexport type DynamicChild = VobsNode | string | number | boolean | null | undefined | readonly DynamicChild[]\n\ninterface ListEntry<T> {\n key: unknown\n node: VobsNode\n owner: Owner\n viewOwner: Owner\n item: Signal<T>\n /** 最近一次赋值的原始 item:供比较与刷新使用,避免在列表 effect 内读取 item 信号造成自依赖。 */\n value: T\n index: number\n}\n\nexport function insertDynamic(parent: Node, anchor: Node | null, factory: NodeFactory): void {\n const marker = createComment('vobs:dynamic')\n insertBefore(parent, marker, anchor)\n let current: VobsNode | null = null\n\n effect(() => {\n const next = createBlock(factory)\n if (next === current) return\n\n if (current) removeChild(parent, current)\n current = next\n if (current) insertBefore(parent, current, marker)\n })\n}\n\n/**\n * Inserts any Vobs child value. This is the escape hatch for JSX expressions\n * that return a node, an array of nodes, text, or an empty conditional value.\n */\nexport function insertDynamicValue(\n parent: Node,\n anchor: Node | null,\n factory: () => DynamicChild\n): void {\n const marker = createComment('vobs:value')\n insertBefore(parent, marker, anchor)\n let current: VobsNode | null = null\n let scope: Owner | null = null\n\n effect(() => {\n // 每轮求值使用独立 scope Owner:factory 求值与挂载期间创建的组件 Owner 全部挂在它下面。\n // 数组/节点被替换时整体 dispose 旧 scope,避免被丢弃子树的 effect 继续订阅信号(幽灵更新与内存泄漏)。\n const nextScope = createOwner()\n const next = nextScope.run(() => normalizeDynamicChild(factory()))\n if (next === current) {\n nextScope.dispose()\n return\n }\n if (current) removeChild(parent, current)\n scope?.dispose()\n scope = nextScope\n current = next\n if (current) insertBefore(parent, current, marker)\n })\n}\n\n/** Convert a JSX child value to a host node without creating a wrapper element. */\nexport function normalizeDynamicChild(value: DynamicChild): VobsNode | null {\n if (value === null || value === undefined || typeof value === 'boolean') return null\n if (typeof value === 'string' || typeof value === 'number') return createText(String(value))\n if (isVobsFragment(value) || isHostNode(value)) return value as VobsNode\n if (Array.isArray(value)) {\n const children = value\n if (children.length === 0) return null\n return createFragment((parent, anchor) => {\n for (const child of children) {\n const node = normalizeDynamicChild(child)\n if (node) insertBefore(parent, node, anchor)\n }\n })\n }\n return null\n}\n\nfunction isHostNode(value: unknown): value is Node {\n return Boolean(value && typeof value === 'object'\n && ('nodeType' in value || ((value as { type?: unknown }).type === 'element'\n || (value as { type?: unknown }).type === 'text'\n || (value as { type?: unknown }).type === 'comment')))\n}\n\nexport function insertList<T>(\n parent: Node,\n anchor: Node | null,\n source: () => readonly T[],\n renderItem: (item: T, index: number) => VobsNode,\n keyOf?: (item: T, index: number) => unknown\n): void {\n const marker = createComment('vobs:list')\n insertBefore(parent, marker, anchor)\n let entries: Array<ListEntry<T>> = []\n const tracksIndex = renderItem.length >= 2\n\n effect(() => {\n const items = source()\n\n // key 只计算一次:keyed 判定与调和共用,避免 keyOf 每轮被调用两遍。\n let keys: unknown[] | null = null\n if (keyOf) {\n keys = new Array(items.length)\n let allKeyed = items.length > 0\n for (let index = 0; index < items.length; index++) {\n const key = keyOf(items[index], index)\n if (key == null) {\n allKeyed = false\n break\n }\n keys[index] = key\n }\n if (!allKeyed) keys = null\n }\n\n const nextEntries = keys\n ? reconcileKeyed(items, keys, entries, renderItem)\n : reconcileIndexed(items, entries, renderItem)\n\n // tracksIndex 时 index 参与渲染,位置变化的行必须整体重建,新节点不在 DOM 中,\n // 重排阶段强制插入;否则只同步记录的位置,节点保持原样交给重排阶段移动。\n const refreshed = tracksIndex ? new Set<ListEntry<T>>() : null\n for (let index = 0; index < nextEntries.length; index++) {\n const entry = nextEntries[index]\n if (tracksIndex) {\n if (entry.index !== index) {\n refreshListEntry(parent, entry, index, renderItem)\n refreshed!.add(entry)\n }\n } else {\n entry.index = index\n }\n }\n\n const retained = new Set(nextEntries)\n for (const entry of entries) {\n if (!retained.has(entry)) disposeEntry(parent, entry)\n }\n\n reorderListEntries(parent, marker, entries, nextEntries, refreshed)\n entries = nextEntries\n })\n}\n\n/**\n * 按 nextEntries 顺序整理 DOM,但只移动必须移动的节点。\n */\nfunction reorderListEntries<T>(\n parent: Node,\n marker: Node,\n previous: readonly ListEntry<T>[],\n nextEntries: readonly ListEntry<T>[],\n forceInsert: Set<ListEntry<T>> | null\n): void {\n const count = nextEntries.length\n if (count === 0) return\n\n // 首次挂载(旧列表为空):全部是新节点,倒序直插即可,跳过 Map/LIS 构建。\n if (previous.length === 0) {\n let reference: VobsNode = marker\n for (let index = count - 1; index >= 0; index--) {\n const node = nextEntries[index].node\n insertBefore(parent, node, reference)\n reference = node\n }\n return\n }\n\n const oldIndexOf = new Map<ListEntry<T>, number>()\n for (let index = 0; index < previous.length; index++) oldIndexOf.set(previous[index], index)\n\n // seq[i] = 条目在旧序中的位置;新条目、重建条目与强制插入条目为 -1。\n const seq: number[] = new Array(count)\n for (let index = 0; index < count; index++) {\n const entry = nextEntries[index]\n seq[index] = forceInsert?.has(entry) ? -1 : oldIndexOf.get(entry) ?? -1\n }\n\n const keep = computeKeptByLis(seq)\n\n let reference: VobsNode = marker\n for (let index = count - 1; index >= 0; index--) {\n const node = nextEntries[index].node\n if (keep[index]) {\n reference = node\n continue\n }\n insertBefore(parent, node, reference)\n reference = node\n }\n}\n\n/**\n * 严格递增子序列(LIS)成员标记,O(n log n)。\n * 负值(新节点)不参与 LIS,永远视为需要移动。\n */\nfunction computeKeptByLis(seq: readonly number[]): boolean[] {\n const count = seq.length\n const keep = new Array<boolean>(count).fill(false)\n const tailsIndex: number[] = []\n const tailsValue: number[] = []\n const prev = new Array<number>(count).fill(-1)\n\n for (let i = 0; i < count; i++) {\n const value = seq[i]\n if (value < 0) continue\n let lo = 0\n let hi = tailsValue.length\n while (lo < hi) {\n const mid = (lo + hi) >> 1\n if (tailsValue[mid] < value) lo = mid + 1\n else hi = mid\n }\n if (lo === tailsValue.length) {\n tailsValue.push(value)\n tailsIndex.push(i)\n } else {\n tailsValue[lo] = value\n tailsIndex[lo] = i\n }\n prev[i] = lo > 0 ? tailsIndex[lo - 1] : -1\n }\n\n let cursor = tailsIndex.length > 0 ? tailsIndex[tailsIndex.length - 1] : -1\n while (cursor >= 0) {\n keep[cursor] = true\n cursor = prev[cursor]\n }\n return keep\n}\n\nfunction reconcileKeyed<T>(\n items: readonly T[],\n keys: readonly unknown[],\n entries: Array<ListEntry<T>>,\n renderItem: (item: T, index: number) => VobsNode\n): Array<ListEntry<T>> {\n const previous = new Map(entries.map(entry => [entry.key, entry]))\n const seen = new Set<unknown>()\n const nextEntries: Array<ListEntry<T>> = []\n\n for (let index = 0; index < items.length; index++) {\n const item = items[index]\n const key = keys[index]\n if (seen.has(key)) {\n console.warn(`Vobs: 检测到重复的列表 key: ${String(key)}`)\n }\n seen.add(key)\n const entry = previous.get(key)\n if (entry) {\n previous.delete(key)\n if (isPrimitiveItem(item) && !Object.is(entry.value, item)) {\n // 原始类型项在编译产物中被静态捕获,无法通过 item 信号刷新视图:值变化时必须重建行。\n nextEntries.push(createListEntry(item, index, key, renderItem))\n continue\n }\n entry.item.value = item\n entry.value = item\n nextEntries.push(entry)\n continue\n }\n nextEntries.push(createListEntry(item, index, key, renderItem))\n }\n\n return nextEntries\n}\n\nfunction reconcileIndexed<T>(\n items: readonly T[],\n entries: Array<ListEntry<T>>,\n renderItem: (item: T, index: number) => VobsNode\n): Array<ListEntry<T>> {\n const nextEntries: Array<ListEntry<T>> = []\n for (let index = 0; index < items.length; index++) {\n const item = items[index]\n const entry = entries[index]\n if (entry && isPrimitiveItem(item) && !Object.is(entry.value, item)) {\n // 原始类型项被编译产物静态捕获,值变化时必须重建行;旧行由主循环统一 dispose。\n nextEntries.push(createListEntry(item, index, index, renderItem))\n continue\n }\n if (entry) {\n entry.item.value = item\n entry.value = item\n nextEntries.push(entry)\n continue\n }\n nextEntries.push(createListEntry(item, index, index, renderItem))\n }\n return nextEntries\n}\n\n/** 原始类型(含 function)无法被 Proxy 响应化,只能整行重建。 */\nfunction isPrimitiveItem(item: unknown): boolean {\n return item === null || typeof item !== 'object'\n}\n\nfunction createListEntry<T>(\n item: T,\n index: number,\n key: unknown,\n renderItem: (item: T, index: number) => VobsNode\n): ListEntry<T> {\n const owner = createOwner()\n let itemSignal!: Signal<T>\n let viewOwner!: Owner\n let node!: VobsNode\n owner.run(() => {\n itemSignal = state(item)\n viewOwner = createOwner()\n node = viewOwner.run(() => renderItem(toReactiveItem(itemSignal, item), index))\n })\n associateNodeOwner(node, viewOwner)\n return { key, node, owner, viewOwner, item: itemSignal, value: item, index }\n}\n\nfunction refreshListEntry<T>(\n parent: Node,\n entry: ListEntry<T>,\n index: number,\n renderItem: (item: T, index: number) => VobsNode\n): void {\n removeChild(parent, entry.node)\n entry.index = index\n const previousView = entry.viewOwner\n entry.owner.run(() => {\n entry.viewOwner = createOwner()\n entry.node = entry.viewOwner.run(() => renderItem(\n toReactiveItem(entry.item, entry.value),\n index\n ))\n })\n // 旧视图的 effect 仍订阅着 item 信号,必须 dispose,否则会写已脱离的 DOM(幽灵更新)。\n previousView.dispose()\n associateNodeOwner(entry.node, entry.viewOwner)\n}\n\nfunction toReactiveItem<T>(item: Signal<T>, initialValue: T): T {\n if (typeof initialValue !== 'object' || initialValue === null) {\n return initialValue\n }\n\n // 代理目标使用创建时的原始对象:避免在列表 effect 内读取 item 信号造成自依赖;\n // 属性读取始终转发到 item.value,在行内绑定 effect 中被正常追踪。\n return new Proxy(initialValue as object, {\n get(_target, property, receiver) {\n return Reflect.get(item.value as object, property, receiver)\n },\n has(_target, property) {\n return property in (item.value as object)\n },\n ownKeys() {\n return Reflect.ownKeys(item.value as object)\n },\n getOwnPropertyDescriptor(_target, property) {\n return Object.getOwnPropertyDescriptor(item.value as object, property)\n }\n }) as T\n}\n\nfunction disposeEntry(parent: Node, entry: ListEntry<unknown>): void {\n removeChild(parent, entry.node)\n entry.owner.dispose()\n}\n","// 编译器静态模板提升的运行时支撑:\n// 编译期把完全静态的 JSX 子树序列化为 HTML 字符串,模块加载时解析一次,\n// 运行时通过 cloneNode 复制,替代逐个 createElement + setStaticProps + insertBefore。\n// 仅适用于 DOM 渲染器(模板本质是 HTML),自定义渲染器场景由编译产物不使用该优化兜底。\n\nconst templateCache = new Map<string, HTMLTemplateElement>()\n\n/** Parse a static template once; called at module load for each hoisted template. */\nexport function createTemplate(html: string): HTMLTemplateElement {\n let template = templateCache.get(html)\n if (!template) {\n template = document.createElement('template')\n template.innerHTML = html\n templateCache.set(html, template)\n }\n return template\n}\n\n/** Clone a hoisted template for one mount; the compiled HTML always has a single root element. */\nexport function cloneTemplate(template: HTMLTemplateElement): Node {\n const root = template.content.firstElementChild\n if (!root) throw new Error('Vobs: 静态模板缺少根元素,请检查编译产物')\n return root.cloneNode(true)\n}\n","/** Shared error protocol used by the runtime, compiler and DevTools. */\nexport type VobsErrorSeverity = 'error' | 'warning' | 'info'\nexport type VobsErrorLayer =\n | 'compiler'\n | 'runtime'\n | 'constraint'\n | 'permission'\n | 'ssr'\n | 'http'\n | 'resource'\n\nexport interface VobsErrorLocation {\n readonly file: string\n readonly line: number\n readonly column: number\n}\n\nexport interface VobsErrorOptions {\n readonly code: string\n readonly message: string\n readonly severity?: VobsErrorSeverity\n readonly layer?: VobsErrorLayer\n readonly cause?: unknown\n readonly fix?: string\n readonly location?: VobsErrorLocation\n readonly trace?: readonly string[]\n readonly example?: string\n readonly docs?: string\n readonly codeFrame?: string\n}\n\nexport interface VobsErrorDefaults {\n readonly code?: string\n readonly severity?: VobsErrorSeverity\n readonly layer?: VobsErrorLayer\n readonly fix?: string\n}\n\n/** A framework error with stable machine-readable metadata. */\nexport class VobsError extends Error {\n readonly code: string\n readonly severity: VobsErrorSeverity\n readonly layer: VobsErrorLayer\n readonly cause?: unknown\n readonly fix?: string\n readonly location?: VobsErrorLocation\n readonly trace?: readonly string[]\n readonly example?: string\n readonly docs?: string\n readonly codeFrame?: string\n\n constructor(options: VobsErrorOptions) {\n super(options.message)\n this.name = 'VobsError'\n this.code = options.code\n this.severity = options.severity ?? 'error'\n this.layer = options.layer ?? 'runtime'\n this.cause = options.cause\n this.fix = options.fix\n this.location = options.location\n this.trace = options.trace\n this.example = options.example\n this.docs = options.docs\n this.codeFrame = options.codeFrame\n }\n}\n\nexport function createVobsError(options: VobsErrorOptions): VobsError {\n return new VobsError(options)\n}\n\nexport function isVobsError(value: unknown): value is VobsError {\n return value instanceof VobsError\n || Boolean(value && typeof value === 'object'\n && typeof (value as { code?: unknown }).code === 'string'\n && typeof (value as { message?: unknown }).message === 'string'\n && typeof (value as { layer?: unknown }).layer === 'string')\n}\n\n/** Convert thrown strings and third-party errors without losing their message. */\nexport function normalizeVobsError(value: unknown, defaults: VobsErrorDefaults = {}): VobsError {\n if (value instanceof VobsError) return value\n if (value instanceof Error) {\n // Preserve the original Error identity so boundaries and DevTools can\n // correlate event/effect phases without creating duplicate diagnostics.\n const metadata = value as Error & {\n readonly vobsCode?: unknown\n readonly vobsHint?: unknown\n readonly vobsSource?: unknown\n }\n const code = defaults.code ?? (typeof metadata.vobsCode === 'string' ? metadata.vobsCode : undefined)\n if (code) defineErrorMetadata(value, 'code', code)\n defineErrorMetadata(value, 'severity', defaults.severity ?? 'error')\n defineErrorMetadata(value, 'layer', defaults.layer ?? 'runtime')\n const fix = defaults.fix ?? (typeof metadata.vobsHint === 'string' ? metadata.vobsHint : undefined)\n if (fix) defineErrorMetadata(value, 'fix', fix)\n const source = metadata.vobsSource\n if (source && typeof source === 'object'\n && typeof (source as { file?: unknown }).file === 'string'\n && typeof (source as { line?: unknown }).line === 'number'\n && typeof (source as { column?: unknown }).column === 'number') {\n defineErrorMetadata(value, 'location', source)\n }\n return value as VobsError\n }\n if (isVobsError(value)) {\n const candidate = value as VobsErrorOptions & { severity?: VobsErrorSeverity; layer?: VobsErrorLayer }\n return new VobsError({\n code: candidate.code,\n message: candidate.message,\n severity: candidate.severity ?? defaults.severity,\n layer: candidate.layer ?? defaults.layer,\n cause: candidate.cause,\n fix: candidate.fix ?? defaults.fix,\n location: candidate.location,\n trace: candidate.trace,\n example: candidate.example,\n docs: candidate.docs,\n codeFrame: candidate.codeFrame\n })\n }\n const message = String(value)\n return new VobsError({\n code: defaults.code ?? 'VOBS_UNKNOWN',\n message,\n severity: defaults.severity ?? 'error',\n layer: defaults.layer ?? 'runtime',\n cause: undefined,\n fix: defaults.fix\n })\n}\n\nfunction defineErrorMetadata(target: Error, key: string, value: unknown): void {\n if (key in target) return\n try {\n Object.defineProperty(target, key, { configurable: true, enumerable: false, value, writable: true })\n } catch {\n // Frozen third-party errors still retain their original message and stack.\n }\n}\n\nexport interface FormatVobsErrorOptions {\n readonly environment?: 'development' | 'production'\n readonly includeStack?: boolean\n}\n\n/** Format a concise, actionable message for terminals and dev overlays. */\nexport function formatVobsError(\n value: unknown,\n options: FormatVobsErrorOptions = {}\n): string {\n const error = normalizeVobsError(value)\n const code = error.code || 'VOBS_UNKNOWN'\n const severity = error.severity || 'error'\n if (options.environment === 'production') return `[Vobs ${code}] ${error.message}`\n\n const lines = [`[Vobs ${capitalize(severity)}] ${error.message}`, `Code: ${code}`]\n if (error.location) lines.push(`Location: ${error.location.file}:${error.location.line}:${error.location.column}`)\n if (error.codeFrame) lines.push('', error.codeFrame)\n if (error.cause !== undefined) lines.push(`Cause: ${formatCause(error.cause)}`)\n if (error.trace?.length) lines.push('', `Trace: ${error.trace.join(' → ')}`)\n if (error.fix) lines.push('', `Fix: ${error.fix}`)\n if (error.example) lines.push('', `Example:\\n${error.example}`)\n if (error.docs) lines.push(`Docs: ${error.docs}`)\n if (options.includeStack && error.stack) lines.push('', error.stack)\n return lines.join('\\n')\n}\n\nfunction formatCause(value: unknown): string {\n return value instanceof Error ? `${value.name}: ${value.message}` : String(value)\n}\n\nfunction capitalize(value: string): string {\n return value.slice(0, 1).toUpperCase() + value.slice(1)\n}\n","import { createOwner, state } from '@vobs/reactivity'\nimport { invokeRuntimeDebug } from './debug'\nimport { insertDynamic, type NodeFactory } from './dynamic'\nimport { normalizeVobsError } from './error'\n\nexport type BoundaryRetry = () => void | Promise<unknown>\nexport type BoundaryFallback = (error: Error, retry: BoundaryRetry) => ReturnType<NodeFactory>\n\nexport interface BoundaryOptions {\n children: NodeFactory\n fallback: BoundaryFallback\n onRetry?: () => void | Promise<unknown>\n resetKey?: () => unknown\n}\n\n/**\n * Shared no-wrapper boundary protocol. The boundary owns its reactive error\n * state and child branch, so replacing the branch also disposes its Owner.\n */\nexport function insertBoundary(\n parent: Node,\n anchor: Node | null,\n options: BoundaryOptions\n): void {\n const boundary = createOwner()\n boundary.run(() => {\n const error = state<Error | null>(null)\n let fallbackActive = false\n let lastError: Error | null = null\n let initialized = false\n let previousKey: unknown\n\n boundary.onError(reason => {\n if (fallbackActive) throw reason\n const normalized = normalizeVobsError(reason, {\n code: 'VOBS_R001',\n layer: 'runtime',\n fix: '检查组件渲染逻辑,或在边界 fallback 中提供恢复操作。'\n })\n lastError = normalized\n invokeRuntimeDebug('error', {\n error: normalized,\n owner: boundary,\n phase: 'boundary',\n handled: true,\n recovery: 'fallback'\n })\n error.value = normalized\n })\n\n const retry = (): void | Promise<unknown> => {\n if (error.value) {\n invokeRuntimeDebug('error', {\n error: error.value,\n owner: boundary,\n phase: 'boundary',\n handled: true,\n recovery: 'retrying'\n })\n }\n error.value = null\n return options.onRetry?.()\n }\n\n insertDynamic(parent, anchor, () => {\n const nextKey = options.resetKey?.()\n if (!initialized || !Object.is(previousKey, nextKey)) {\n initialized = true\n previousKey = nextKey\n if (error.value) error.value = null\n }\n\n const currentError = error.value\n if (!currentError) {\n if (fallbackActive && lastError) {\n invokeRuntimeDebug('error', {\n error: lastError,\n owner: boundary,\n phase: 'boundary',\n handled: true,\n recovery: 'recovered'\n })\n lastError = null\n }\n fallbackActive = false\n return options.children()\n }\n\n fallbackActive = true\n return options.fallback(currentError, retry)\n })\n })\n}\n","import { createFragment, type VobsNode } from './fragment'\nimport { insertBoundary, type BoundaryRetry } from './boundary'\nimport type { NodeFactory } from './dynamic'\n\nexport type ErrorBoundaryFallback = (\n error: Error,\n retry: BoundaryRetry\n) => ReturnType<NodeFactory>\n\n/**\n * 子节点双形态:JSX 属性经编译器编译为惰性 getter(工厂),手写对象字面量可直接传节点。\n */\nexport type ErrorBoundaryChildren = NodeFactory | VobsNode\n\nexport interface ErrorBoundaryOptions {\n children: ErrorBoundaryChildren\n fallback: ErrorBoundaryFallback\n}\n\nexport interface ErrorBoundaryProps {\n children: ErrorBoundaryChildren\n fallback: ErrorBoundaryFallback\n}\n\n/** Normalize child sources to the lazy factory shape insertBoundary expects. */\nfunction resolveBoundaryChildren(children: ErrorBoundaryChildren): NodeFactory {\n return typeof children === 'function' ? children : () => children\n}\n\n/**\n * Inserts an error boundary without adding a wrapper node. It captures errors\n * from its child render branch and child-owned effects, then renders fallback.\n */\nexport function insertErrorBoundary(\n parent: Node,\n anchor: Node | null,\n options: ErrorBoundaryOptions\n): void {\n insertBoundary(parent, anchor, { ...options, children: resolveBoundaryChildren(options.children) })\n}\n\n/** Component-shaped API backed by the same no-wrapper host instruction. */\nexport function ErrorBoundary(props: ErrorBoundaryProps): VobsNode {\n return createFragment((parent, anchor) => insertErrorBoundary(parent, anchor, props))\n}\n","import { createOwner, state } from '@vobs/reactivity'\nimport { insertDynamic, type NodeFactory } from './dynamic'\nimport { createFragment, type VobsNode } from './fragment'\n\nexport type AsyncBoundaryView = ReturnType<NodeFactory> | NodeFactory\nexport type AsyncBoundaryFallback = (error: Error, retry: () => void) => ReturnType<NodeFactory>\nexport interface AsyncBoundaryOptions<T> {\n promise: PromiseLike<T> | (() => PromiseLike<T>)\n children: (value: T) => ReturnType<NodeFactory>\n loading?: AsyncBoundaryView\n fallback?: AsyncBoundaryFallback\n resetKey?: () => unknown\n}\nexport interface AsyncBoundaryProps<T> extends AsyncBoundaryOptions<T> {}\n\nexport function insertAsyncBoundary<T>(parent: Node, anchor: Node | null, options: AsyncBoundaryOptions<T>): void {\n const boundary = createOwner()\n boundary.run(() => {\n const loading = state(true)\n const data = state<T | undefined>(undefined)\n const resolved = state(false)\n const error = state<Error | null>(null)\n let token = 0\n let previousKey: unknown\n let initialized = false\n let fallbackActive = false\n boundary.onError(reason => {\n if (fallbackActive) throw reason\n error.value = normalizeError(reason)\n loading.value = false\n })\n\n const start = (): void => {\n const current = ++token\n loading.value = true\n error.value = null\n data.value = undefined\n resolved.value = false\n let promise: PromiseLike<T>\n try {\n promise = typeof options.promise === 'function' ? options.promise() : options.promise\n } catch (reason) {\n if (current === token) {\n loading.value = false\n error.value = normalizeError(reason)\n }\n return\n }\n Promise.resolve(promise).then(value => {\n if (current !== token || boundary.disposed) return\n data.value = value\n resolved.value = true\n loading.value = false\n }, reason => {\n if (current !== token || boundary.disposed) return\n error.value = normalizeError(reason)\n loading.value = false\n })\n }\n\n const retry = (): void => start()\n start()\n insertDynamic(parent, anchor, () => {\n const key = options.resetKey?.()\n if (!initialized) {\n initialized = true\n previousKey = key\n } else if (!Object.is(previousKey, key)) {\n previousKey = key\n start()\n }\n if (loading.value) {\n fallbackActive = false\n return resolveView(options.loading)\n }\n if (error.value) {\n fallbackActive = true\n return options.fallback?.(error.value, retry) ?? null\n }\n fallbackActive = false\n return resolved.value ? options.children(data.value as T) : resolveView(options.loading)\n })\n })\n}\n\nexport function AsyncBoundary<T>(props: AsyncBoundaryProps<T>): VobsNode {\n return createFragment((parent, anchor) => insertAsyncBoundary(parent, anchor, props))\n}\n\nfunction resolveView(view: AsyncBoundaryView | undefined): ReturnType<NodeFactory> {\n if (!view) return null\n return typeof view === 'function' ? view() : view\n}\n\nfunction normalizeError(reason: unknown): Error {\n return reason instanceof Error ? reason : new Error(String(reason))\n}\n","import { createFragment } from './fragment'\nimport { insertDynamic, type NodeFactory } from './dynamic'\nimport type { VobsNode } from './fragment'\nimport { createOwner } from '@vobs/reactivity'\n\nexport interface ProfilerRenderInfo {\n readonly id: string\n readonly phase: 'mount' | 'update'\n readonly duration: number\n readonly timestamp: number\n}\nexport interface ProfilerOptions {\n id: string\n children: NodeFactory\n onRender?: (info: ProfilerRenderInfo) => void\n}\nexport interface ProfilerProps extends ProfilerOptions {}\n\nexport function insertProfiler(parent: Node, anchor: Node | null, options: ProfilerOptions): void {\n const profiler = createOwner()\n let mounted = false\n profiler.run(() => {\n insertDynamic(parent, anchor, () => {\n const started = now()\n const value = options.children()\n const info: ProfilerRenderInfo = {\n id: options.id,\n phase: mounted ? 'update' : 'mount',\n duration: Math.max(0, now() - started),\n timestamp: Date.now()\n }\n mounted = true\n try { options.onRender?.(info) } catch { /* profiler callbacks are isolated */ }\n return value\n })\n })\n}\n\nexport function Profiler(props: ProfilerProps): VobsNode {\n return createFragment((parent, anchor) => insertProfiler(parent, anchor, props))\n}\n\nfunction now(): number {\n return typeof performance !== 'undefined' && typeof performance.now === 'function' ? performance.now() : Date.now()\n}\n"],"mappings":"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","names":["import_reactivity","import_reactivity","module","state","import_reactivity","import_reactivity","reference","import_reactivity","import_reactivity","import_reactivity"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/debug.ts","../src/fragment.ts","../src/ops.ts","../src/hmr.ts","../src/ref.ts","../src/bind.ts","../src/dynamic.ts","../src/template.ts","../src/error.ts","../src/boundary.ts","../src/error-boundary.ts","../src/async-boundary.ts","../src/profiler.ts"],"sourcesContent":["export type { VobsRenderer } from './renderer'\nexport {\n getRuntimeDebugContext,\n getRuntimeDebugHooks,\n invokeRuntimeDebug,\n pushRuntimeDebugContext,\n runWithRuntimeDebugContext,\n setRuntimeDebugHooks,\n describeDebugNode\n} from './debug'\nexport type {\n RuntimeDebugContext,\n RuntimeDebugEnvironment,\n RuntimeDebugHooks,\n RuntimeDomMutation,\n RuntimeDomMutationOperation,\n RuntimeErrorEvent,\n RuntimeHydrationMismatch\n} from './debug'\nexport { createFragment, isVobsFragment } from './fragment'\nexport type { FragmentFactory, VobsFragment, VobsNode } from './fragment'\nexport {\n setRenderer,\n getRenderer,\n createText,\n createElement,\n createComment,\n insertBefore,\n removeChild,\n setTextContent,\n setProperty,\n setAttribute,\n spreadProps,\n setStaticProps,\n addEventListener,\n removeEventListener,\n clear,\n createComponent,\n createBlock,\n disposeNodeOwner\n} from './ops'\nexport { bindText, bindAttribute, bindProperty } from './bind'\nexport type { ValueSource } from './bind'\nexport { ref, setRef } from './ref'\nexport type { Ref, RefTarget } from './ref'\nexport { insertDynamic, insertDynamicValue, insertList, normalizeDynamicChild } from './dynamic'\nexport type { DynamicChild, NodeFactory } from './dynamic'\nexport { createTemplate, cloneTemplate } from './template'\nexport type { VobsLocatedError, VobsSourceLocation } from './ops'\nexport {\n VobsError,\n createVobsError,\n formatVobsError,\n isVobsError,\n normalizeVobsError\n} from './error'\nexport type {\n FormatVobsErrorOptions,\n VobsErrorDefaults,\n VobsErrorLayer,\n VobsErrorLocation,\n VobsErrorOptions,\n VobsErrorSeverity\n} from './error'\nexport {\n createHmrStateStore,\n disposeHmrModule,\n hmrStateRef,\n markHmrInstanceMounted,\n registerHmrInstance,\n resolveComponent,\n updateHmrModule\n} from './hmr'\nexport type { HmrComponent, HmrInstance, HmrStateStore } from './hmr'\nexport { insertErrorBoundary } from './error-boundary'\nexport { ErrorBoundary } from './error-boundary'\nexport type { ErrorBoundaryFallback, ErrorBoundaryOptions, ErrorBoundaryProps } from './error-boundary'\nexport { insertBoundary } from './boundary'\nexport type { BoundaryFallback, BoundaryOptions, BoundaryRetry } from './boundary'\nexport { insertAsyncBoundary, AsyncBoundary } from './async-boundary'\nexport type { AsyncBoundaryFallback, AsyncBoundaryOptions, AsyncBoundaryProps, AsyncBoundaryView } from './async-boundary'\nexport { insertProfiler, Profiler } from './profiler'\nexport type { ProfilerOptions, ProfilerProps, ProfilerRenderInfo } from './profiler'\n","import type { Owner } from '@vobs/reactivity'\n\nexport type RuntimeDebugEnvironment = 'client' | 'server'\n\n/**\n * Lightweight context copied onto debug events created synchronously inside a\n * Router loader, Effect or SSR render. It is intentionally optional so the\n * runtime remains useful without DevTools.\n */\nexport interface RuntimeDebugContext {\n readonly environment?: RuntimeDebugEnvironment\n readonly sessionId?: string\n readonly route?: string\n readonly navigationId?: number\n readonly dataRequestId?: number\n readonly updateId?: string\n readonly effectId?: string\n readonly source?: string\n}\n\nexport interface RuntimeHydrationMismatch {\n readonly kind: 'missing-node' | 'extra-node' | 'position' | 'content'\n readonly expected: string\n readonly actual: string\n readonly path: string\n readonly message: string\n}\n\nexport type RuntimeDomMutationOperation = 'text' | 'property' | 'attribute' | 'insert' | 'remove'\n\nexport interface RuntimeDomMutation {\n readonly operation: RuntimeDomMutationOperation\n readonly target: string\n readonly parent?: string\n readonly key?: string\n readonly previousValue?: unknown\n readonly nextValue?: unknown\n}\n\nexport interface RuntimeErrorEvent {\n readonly error: unknown\n readonly owner: Owner\n readonly phase: 'event' | 'boundary'\n readonly handled: boolean\n readonly recovery: 'propagated' | 'handled' | 'fallback' | 'retrying' | 'recovered'\n}\n\nexport interface RuntimeDebugHooks {\n domMutation?(mutation: RuntimeDomMutation): void\n error?(event: RuntimeErrorEvent): void\n hydrationMismatch?(event: RuntimeHydrationMismatch): void\n}\n\nlet activeRuntimeDebugHooks: RuntimeDebugHooks | null = null\nlet activeRuntimeDebugContext: RuntimeDebugContext | null = null\n\nexport function setRuntimeDebugHooks(hooks: RuntimeDebugHooks | null): RuntimeDebugHooks | null {\n const previous = activeRuntimeDebugHooks\n activeRuntimeDebugHooks = hooks\n return previous\n}\n\nexport function getRuntimeDebugHooks(): RuntimeDebugHooks | null {\n return activeRuntimeDebugHooks\n}\n\nexport function getRuntimeDebugContext(): RuntimeDebugContext | null {\n return activeRuntimeDebugContext\n}\n\n/** Run a synchronous operation with trace context, preserving async renders. */\nexport function runWithRuntimeDebugContext<T>(context: RuntimeDebugContext, task: () => T): T {\n const previous = activeRuntimeDebugContext\n const next = { ...previous, ...context }\n activeRuntimeDebugContext = next\n let result: T\n try {\n result = task()\n } catch (error) {\n activeRuntimeDebugContext = previous\n throw error\n }\n if (isPromiseLike(result)) {\n return Promise.resolve(result).finally(() => {\n if (activeRuntimeDebugContext === next) activeRuntimeDebugContext = previous\n }) as T\n }\n activeRuntimeDebugContext = previous\n return result\n}\n\n/** Keep a context active across callback boundaries such as Effect execution. */\nexport function pushRuntimeDebugContext(context: RuntimeDebugContext): () => void {\n const previous = activeRuntimeDebugContext\n activeRuntimeDebugContext = { ...previous, ...context }\n let restored = false\n return () => {\n if (restored) return\n restored = true\n activeRuntimeDebugContext = previous\n }\n}\n\nexport function invokeRuntimeDebug<K extends keyof RuntimeDebugHooks>(\n name: K,\n ...args: Parameters<NonNullable<RuntimeDebugHooks[K]>>\n): void {\n const callback = activeRuntimeDebugHooks?.[name] as ((...values: unknown[]) => void) | undefined\n if (!callback) return\n try {\n callback(...args)\n } catch {\n // Debug tooling must never change runtime behavior.\n }\n}\n\nexport function readDebugValue(read: () => unknown): unknown {\n try {\n return read()\n } catch {\n return '[Uninspectable]'\n }\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return Boolean(value) && (typeof value === 'object' || typeof value === 'function')\n && typeof (value as { then?: unknown }).then === 'function'\n}\n\nexport function describeDebugNode(node: unknown): string {\n if (!node || typeof node !== 'object') return 'node'\n const value = node as {\n readonly nodeName?: unknown\n readonly tagName?: unknown\n readonly id?: unknown\n readonly className?: unknown\n }\n const name = typeof value.tagName === 'string'\n ? value.tagName.toLowerCase()\n : typeof value.nodeName === 'string' ? value.nodeName.toLowerCase() : 'node'\n const id = typeof value.id === 'string' && value.id ? `#${value.id}` : ''\n const className = typeof value.className === 'string' && value.className\n ? `.${value.className.trim().split(/\\s+/).filter(Boolean).join('.')}`\n : ''\n return `${name}${id}${className}`\n}\n","import { getCurrentOwner } from '@vobs/reactivity'\nimport { createComment, getRenderer } from './ops'\n\nexport interface VobsFragment {\n readonly kind: 'vobs-fragment'\n readonly start: Node\n readonly end: Node\n readonly mount: (parent: Node, anchor: Node | null) => void\n readonly unmount: (parent: Node) => void\n}\n\nexport type VobsNode = Node | VobsFragment\nexport type FragmentFactory = (parent: Node, anchor: Node) => void\n\nexport function createFragment(factory: FragmentFactory): VobsFragment {\n const start = createComment('vobs:fragment:start')\n const end = createComment('vobs:fragment:end')\n let parent: Node | null = null\n let initialized = false\n const owner = getCurrentOwner()\n\n const fragment: VobsFragment = {\n kind: 'vobs-fragment',\n start,\n end,\n mount(nextParent, anchor): void {\n if (parent && parent !== nextParent) {\n throw new Error('Vobs Fragment: 不能跨父节点移动 Fragment')\n }\n\n if (initialized) {\n moveRange(nextParent, start, end, anchor)\n return\n }\n\n const renderer = getRenderer()\n renderer.insertBefore(nextParent, start, anchor)\n renderer.insertBefore(nextParent, end, anchor)\n parent = nextParent\n initialized = true\n if (owner) owner.run(() => factory(nextParent, end))\n else factory(nextParent, end)\n },\n unmount(nextParent): void {\n if (!initialized || parent !== nextParent) {\n throw new Error('Vobs Fragment: Fragment 不属于指定父节点')\n }\n const renderer = getRenderer()\n let current = renderer.nextSibling(start)\n while (current && current !== end) {\n const next = renderer.nextSibling(current)\n renderer.removeChild(nextParent, current)\n current = next\n }\n renderer.removeChild(nextParent, start)\n renderer.removeChild(nextParent, end)\n parent = null\n initialized = false\n }\n }\n return fragment\n}\n\nexport function isVobsFragment(value: unknown): value is VobsFragment {\n return Boolean(value) && typeof value === 'object' && (value as VobsFragment).kind === 'vobs-fragment'\n}\n\nfunction moveRange(parent: Node, start: Node, end: Node, anchor: Node | null): void {\n const renderer = getRenderer()\n const nodes: Node[] = [start]\n let current = renderer.nextSibling(start)\n while (current) {\n nodes.push(current)\n if (current === end) break\n current = renderer.nextSibling(current)\n }\n if (nodes[nodes.length - 1] !== end) {\n throw new Error('Vobs Fragment: 找不到结束锚点')\n }\n for (const node of nodes) renderer.insertBefore(parent, node, anchor)\n}\n","// 编译产物调用的基础操作\n\nimport { createOwner, getCurrentOwner, setOwnerDebugName, untrack, type Owner } from '@vobs/reactivity'\nimport { isVobsFragment, type VobsNode } from './fragment'\nimport { describeDebugNode, getRuntimeDebugHooks, invokeRuntimeDebug, readDebugValue } from './debug'\nimport {\n associateHmrInstance,\n markHmrInstanceMounted,\n registerHmrInstance,\n type HmrInstance\n} from './hmr'\nimport type { VobsRenderer } from './renderer'\nimport { setRef } from './ref'\n\ntype RuntimeRenderer = VobsRenderer<Node, Text, Element, Comment>\n\nlet currentRenderer: RuntimeRenderer | null = null\nconst nodeOwners = new WeakMap<object, Owner>()\ninterface EventBinding {\n readonly handler: EventListener\n readonly owner: Owner | null\n readonly original: EventListener\n}\nconst eventBindings = new WeakMap<object, Map<string, EventBinding>>()\n\nexport function setRenderer<\n NodeType,\n TextNode extends NodeType,\n ElementNode extends NodeType,\n CommentNode extends NodeType\n>(renderer: VobsRenderer<NodeType, TextNode, ElementNode, CommentNode>): void {\n // 编译产物仍使用 DOM 节点声明;实际宿主类型由应用提供的渲染器决定。\n currentRenderer = renderer as unknown as RuntimeRenderer\n}\n\nexport function getRenderer(): RuntimeRenderer {\n if (!currentRenderer) {\n throw new Error('渲染器未初始化')\n }\n return currentRenderer\n}\n\nexport function createText(content: string): Text {\n return getRenderer().createText(content)\n}\n\nexport function createElement(tag: string): Element {\n return getRenderer().createElement(tag)\n}\n\nexport function createComment(content: string): Comment {\n return getRenderer().createComment(content)\n}\n\nexport function insertBefore(\n parent: Node,\n child: VobsNode,\n anchor: VobsNode | null\n): void {\n if (isVobsFragment(child)) {\n child.mount(parent, isVobsFragment(anchor) ? anchor.start : anchor)\n markHmrInstanceMounted(child, parent)\n return\n }\n getRenderer().insertBefore(parent, child, isVobsFragment(anchor) ? anchor.start : anchor)\n markHmrInstanceMounted(child, parent)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'insert',\n target: describeDebugNode(child),\n parent: describeDebugNode(parent)\n })\n }\n}\n\nexport function removeChild(\n parent: Node,\n child: VobsNode\n): void {\n disposeNodeOwner(child)\n if (isVobsFragment(child)) {\n child.unmount(parent)\n return\n }\n getRenderer().removeChild(parent, child)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'remove',\n target: describeDebugNode(child),\n parent: describeDebugNode(parent)\n })\n }\n}\n\nexport function setTextContent(\n node: Text,\n content: string\n): void {\n const previousValue = getRuntimeDebugHooks()\n ? readDebugValue(() => node.textContent)\n : undefined\n getRenderer().setTextContent(node, content)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'text',\n target: describeDebugNode(node),\n previousValue,\n nextValue: content\n })\n }\n}\n\nexport function setProperty(\n node: Element,\n key: string,\n value: unknown\n): void {\n const previousValue = getRuntimeDebugHooks()\n ? readDebugValue(() => Reflect.get(node, key))\n : undefined\n getRenderer().setProperty(node, key, value)\n if (key === 'value' && (node as { tagName?: unknown }).tagName === 'SELECT') {\n scheduleSelectValueSync(node, value)\n }\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'property',\n target: describeDebugNode(node),\n key,\n previousValue,\n nextValue: value\n })\n }\n}\n\nconst pendingSelectValues = new WeakMap<Element, unknown>()\nconst selectSyncScheduled = new WeakSet<Element>()\n\n/**\n * `<select value>` 在 option 子节点存在前赋值不生效(HTML 规范:select 的 value\n * 由已存在的 option 决定)。编译产物先设置属性、后插入子节点,静态写法必然丢初始值\n * (消费方此前只能用 ref + queueMicrotask 规避)。\n * 这里对 select 的 value 赋值统一延迟到微任务重放一次:静态子节点在同一同步任务内\n * 插入完毕,重放即命中。动态(insertList/insertDynamic)插入的 option 晚于该微任务时,\n * 由 value 的绑定 effect 在后续信号更新中正常覆盖。\n */\nfunction scheduleSelectValueSync(node: Element, value: unknown): void {\n pendingSelectValues.set(node, value)\n if (selectSyncScheduled.has(node)) return\n selectSyncScheduled.add(node)\n queueMicrotask(() => {\n selectSyncScheduled.delete(node)\n if (!pendingSelectValues.has(node)) return\n const pending = pendingSelectValues.get(node)\n pendingSelectValues.delete(node)\n getRenderer().setProperty(node, 'value', pending)\n })\n}\n\nexport function setAttribute(\n node: Element,\n key: string,\n value: string\n): void {\n const previousValue = getRuntimeDebugHooks()\n ? readDebugValue(() => typeof node.getAttribute === 'function' ? node.getAttribute(key) : undefined)\n : undefined\n getRenderer().setAttribute(node, key, value)\n if (getRuntimeDebugHooks()) {\n invokeRuntimeDebug('domMutation', {\n operation: 'attribute',\n target: describeDebugNode(node),\n key,\n previousValue,\n nextValue: value\n })\n }\n}\n\nexport function spreadProps(node: Element, props: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(props)) {\n if (key === 'key' || value === null || value === undefined) continue\n if (key === 'ref') {\n setRef(node, value)\n continue\n }\n if (key.startsWith('on') && typeof value === 'function') addEventListener(node, key.slice(2).toLowerCase(), value as EventListener)\n // property 键的 false 有语义(如 disabled={false} 必须清除),不能跳过;\n // attribute 键的 false 表示“不设置”,与 HTML 语义一致。\n else if (isPropertyKey(key)) setProperty(node, key, value)\n else if (value === false) continue\n else setAttribute(node, key === 'className' ? 'class' : key, key === 'style' && isStyleObject(value) ? formatStyle(value) : String(value))\n }\n}\n\n/** Apply compile-time host properties in one renderer pass. */\nexport function setStaticProps(node: Element, props: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(props)) {\n if (key === 'key' || key === 'ref' || key.startsWith('on')) continue\n if (value === null || value === undefined) continue\n if (isPropertyKey(key)) setProperty(node, key, value)\n else if (value === false) continue\n else setAttribute(node, key === 'className' ? 'class' : key, key === 'style' && isStyleObject(value) ? formatStyle(value) : String(value))\n }\n}\n\nfunction isPropertyKey(key: string): boolean {\n return key === 'value' || key === 'checked' || key === 'selected' || key === 'disabled'\n || key === 'multiple' || key === 'readOnly' || key === 'required'\n || key === 'autofocus' || key === 'hidden' || key === 'tabIndex'\n}\n\nfunction isStyleObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction formatStyle(value: Record<string, unknown>): string {\n return Object.entries(value).filter(([, entry]) => entry !== null && entry !== undefined && entry !== false)\n .map(([key, entry]) => `${key.replace(/[A-Z]/gu, match => `-${match.toLowerCase()}`)}:${String(entry)}`).join(';')\n}\n\nexport function addEventListener(\n node: Element,\n event: string,\n handler: EventListener\n): void {\n const renderer = getRenderer()\n const owner = getCurrentOwner()\n let bindings = eventBindings.get(node)\n if (!bindings) {\n bindings = new Map()\n eventBindings.set(node, bindings)\n }\n const previous = bindings.get(event)\n if (previous && previous.original === handler && previous.owner === owner) return\n if (previous) renderer.removeEventListener(node, event, previous.handler)\n const listener = owner ? (reason: Event) => {\n // Owner 已销毁说明节点所属子树已被卸载/替换,事件来自游离 DOM,直接忽略。\n // 否则 owner.run 会抛\"已销毁的 Owner\",在事件流里制造无意义的错误噪音。\n if (owner.disposed) return\n try {\n owner.run(() => handler(reason))\n } catch (error) {\n const handled = owner.handleError(error)\n invokeRuntimeDebug('error', {\n error,\n owner,\n phase: 'event',\n handled,\n recovery: handled ? 'handled' : 'propagated'\n })\n if (!handled) throw error\n }\n } : handler\n const binding: EventBinding = { handler: listener, owner, original: handler }\n bindings.set(event, binding)\n renderer.addEventListener(node, event, listener)\n owner?.onDispose(() => {\n if (bindings?.get(event) !== binding) return\n bindings.delete(event)\n renderer.removeEventListener(node, event, listener)\n })\n}\n\nexport function removeEventListener(\n node: Element,\n event: string,\n handler: EventListener\n): void {\n const renderer = getRenderer()\n const binding = eventBindings.get(node)?.get(event)\n renderer.removeEventListener(node, event, binding?.handler ?? handler)\n eventBindings.get(node)?.delete(event)\n}\n\nexport function clear(container: Node): void {\n getRenderer().clear(container)\n}\n\ntype VobsComponent = (...args: any[]) => VobsNode\n\ntype ComponentProps<Component extends VobsComponent> = Component extends (\n props: infer Props\n) => VobsNode\n ? NonNullable<Props> extends object ? NonNullable<Props> : Record<string, never>\n : Record<string, never>\n\nexport function createComponent<Component extends VobsComponent>(\n component: Component,\n props: ComponentProps<Component>,\n source?: VobsSourceLocation\n): VobsNode {\n const owner = createOwner()\n const componentName = (component as typeof component & { displayName?: string }).displayName\n || component.name\n || 'anonymous'\n setOwnerDebugName(owner, source\n ? `${componentName} (${source.file}:${source.line}:${source.column})`\n : componentName)\n owner.onError(reason => {\n attachSourceLocation(reason, source)\n attachComponentContext(reason, componentName, owner.id)\n throw reason\n })\n // HMR 注册先于渲染作用域标记:注册清理必须跨热更新保活,不能被\n // disposeSince 当作上一轮渲染的清理释放掉。\n const hmrKey = (component as typeof component & { hmrKey?: string }).hmrKey\n let instance: HmrInstance | null = null\n if (hmrKey) {\n const separator = hmrKey.lastIndexOf(':')\n const moduleId = separator < 0 ? hmrKey : hmrKey.slice(0, separator)\n instance = { node: null as unknown as VobsNode, parent: null, refresh: () => refreshInstance() }\n const cleanup = registerHmrInstance(moduleId, instance)\n owner.onDispose(cleanup)\n }\n // 渲染作用域:组件 Owner 只承载 HMR 注册与错误处理,每轮渲染注册的 effect、\n // onDispose(含 portal 清理)与嵌套组件 Owner 都归属该轮作用域。HMR refresh\n // 重渲染前释放上一轮作用域,旧实例的 effect 不再订阅信号、portal 节点不再\n // 残留在 body 中每轮热更新叠加;组件 Owner 与 HMR 注册保活。\n const renderScope = owner.mark()\n let node: VobsNode\n try {\n // 组件渲染必须 untrack:组件是 run-once 的,其渲染发生在某次 effect 求值\n // (insertDynamic/insertBoundary 的渲染工厂、路由挂载)内时,若不切断追踪,\n // 组件体内读取的信号会被收集为祖先 effect 的依赖——一次无关编辑就会触发\n // 整棵子树销毁重建(输入框被换掉、焦点丢失、事件监听随旧树一起被清理)。\n // 结构性响应只属于条件工厂与绑定 effect,组件本体渲染一次即止。\n node = owner.run(() => untrack(() => component(props)))\n } catch (error) {\n owner.dispose()\n attachSourceLocation(error, source)\n attachComponentContext(error, componentName, owner.id)\n throw error\n }\n associateNodeOwner(node, owner)\n if (instance) {\n instance.node = node\n associateHmrInstance(node, instance)\n }\n function refreshInstance(): void {\n // 组件已随旧渲染树一起卸载(如父级在同一次热更新中先完成刷新),\n // 无法也无需再刷新。\n if (owner.disposed) return\n const previous = instance!.node\n owner.disposeSince(renderScope)\n const next = owner.run(() => untrack(() => component(props)))\n const parent = instance!.parent\n if (parent) {\n // 先插入新树再卸载旧树:替换锚点始终取自仍在文档中的旧树,\n // fragment 与普通节点两种形态任意组合都能正确定位插入点。\n const anchor = isVobsFragment(previous) ? previous.start : previous\n if (isVobsFragment(next)) next.mount(parent, anchor)\n else getRenderer().insertBefore(parent, next, anchor)\n if (isVobsFragment(previous)) previous.unmount(parent)\n else getRenderer().removeChild(parent, previous)\n }\n nodeOwners.delete(previous as object)\n nodeOwners.set(next as object, owner)\n associateHmrInstance(next, instance!)\n instance!.node = next\n }\n return node\n}\n\nexport interface VobsSourceLocation {\n readonly file: string\n readonly line: number\n readonly column: number\n}\n\nexport interface VobsLocatedError extends Error {\n readonly vobsSource?: VobsSourceLocation\n readonly vobsComponent?: string\n readonly vobsOwnerId?: string\n}\n\nfunction attachSourceLocation(reason: unknown, source: VobsSourceLocation | undefined): void {\n if (!source || (!reason || (typeof reason !== 'object' && typeof reason !== 'function'))) return\n const error = reason as VobsLocatedError\n if (error.vobsSource) return\n try {\n Object.defineProperty(error, 'vobsSource', {\n configurable: true,\n enumerable: false,\n value: source,\n writable: false\n })\n } catch {\n // Frozen third-party errors still propagate with their original details.\n }\n}\n\nfunction attachComponentContext(reason: unknown, component: string, ownerId: string): void {\n if (!reason || (typeof reason !== 'object' && typeof reason !== 'function')) return\n const error = reason as VobsLocatedError\n try {\n if (!error.vobsComponent) Object.defineProperty(error, 'vobsComponent', { configurable: true, enumerable: false, value: component, writable: false })\n if (!error.vobsOwnerId) Object.defineProperty(error, 'vobsOwnerId', { configurable: true, enumerable: false, value: ownerId, writable: false })\n } catch {\n // Frozen third-party errors still propagate with their original details.\n }\n}\n\nexport function createBlock(factory: () => VobsNode | null | undefined | false): VobsNode | null {\n const owner = createOwner()\n setOwnerDebugName(owner, 'dynamic')\n let node: VobsNode | null | undefined | false\n try {\n node = owner.run(factory)\n } catch (error) {\n owner.dispose()\n throw error\n }\n if (!node) {\n owner.dispose()\n return null\n }\n associateNodeOwner(node, owner)\n return node\n}\n\nexport function associateNodeOwner(node: VobsNode, owner: Owner): void {\n nodeOwners.set(node, owner)\n}\n\nexport function disposeNodeOwner(node: VobsNode): void {\n const owner = nodeOwners.get(node)\n if (!owner) return\n nodeOwners.delete(node)\n owner.dispose()\n}\n","import type { VobsNode } from './fragment'\n\nexport type HmrComponent<Props extends object = Record<string, unknown>> =\n (props: Props) => VobsNode\n\nexport interface HmrStateStore {\n get<T>(key: string, initial: T | (() => T)): T\n set<T>(key: string, value: T): void\n has(key: string): boolean\n delete(key: string): void\n clear(): void\n}\n\nexport interface HmrInstance {\n node: VobsNode\n parent: Node | null\n refresh(): void\n}\n\ninterface HmrModuleState {\n readonly components: Map<string, HmrComponent>\n readonly state: Map<string, unknown>\n readonly instances: Set<HmrInstance>\n}\n\ninterface HmrGlobal {\n modules: Map<string, HmrModuleState>\n /** 编译器生成的 hmrStateRef 注册表:键为 `${moduleId}#${声明名}`,值跨模块重执行保活。 */\n states: Map<string, unknown>\n}\n\nconst globalTarget = globalThis as typeof globalThis & { __VOBS_HMR__?: HmrGlobal }\nconst hmrGlobal = globalTarget.__VOBS_HMR__ ?? { modules: new Map<string, HmrModuleState>(), states: new Map<string, unknown>() }\nglobalTarget.__VOBS_HMR__ = hmrGlobal\n\nexport function resolveComponent<Props extends object>(\n component: HmrComponent<Props>,\n moduleId: string,\n exportName: string\n): HmrComponent<Props> {\n const module = getModule(moduleId)\n const existing = module.components.get(exportName)\n if (existing) return existing as HmrComponent<Props>\n\n const proxy = ((props: Props) => {\n const current = (proxy as HmrComponent<Props> & { current: HmrComponent<Props> }).current\n return current(props)\n }) as HmrComponent<Props> & { current: HmrComponent<Props> }\n proxy.current = component\n Object.defineProperties(proxy, {\n displayName: { configurable: true, value: component.name || exportName },\n hmrKey: { configurable: false, value: `${moduleId}:${exportName}` }\n })\n module.components.set(exportName, proxy as HmrComponent)\n return proxy\n}\n\nexport function updateHmrModule(moduleId: string, nextModule: Record<string, unknown>): void {\n const module = hmrGlobal.modules.get(moduleId)\n if (!module) return\n let changed = false\n for (const [name, proxy] of module.components) {\n const next = nextModule[name]\n if (typeof next !== 'function') continue\n const hmrProxy = proxy as HmrComponent & { current: HmrComponent; displayName?: string }\n hmrProxy.current = next as HmrComponent\n Object.defineProperty(hmrProxy, 'displayName', { configurable: true, value: next.name || name })\n changed = true\n }\n if (!changed) return\n // 快照后正序遍历:实例在自身渲染开始前注册,祖先必然先于后代入列——\n // 祖先先刷新会 dispose 上一轮渲染作用域,其树内旧后代实例的 refresh\n // 命中已销毁守卫被跳过,避免同一组件在一次热更新中重渲染两次。\n // 同时 refresh 重渲染以新代码创建的全新实例不在快照中,天然不会再刷新。\n const instances = [...module.instances]\n for (const instance of instances) {\n try {\n instance.refresh()\n } catch {\n // HMR failures remain application errors on the next normal render.\n }\n }\n}\n\nexport function disposeHmrModule(_moduleId: string): void {\n // State and component proxies intentionally survive module disposal.\n}\n\nexport function createHmrStateStore(moduleId: string): HmrStateStore {\n const state = getModule(moduleId).state\n return {\n get<T>(key: string, initial: T | (() => T)): T {\n if (!state.has(key)) state.set(key, typeof initial === 'function' ? (initial as () => T)() : initial)\n return state.get(key) as T\n },\n set<T>(key: string, value: T): void {\n state.set(key, value)\n },\n has: key => state.has(key),\n delete: key => { state.delete(key) },\n clear: () => { state.clear() }\n }\n}\n\n/**\n * 编译器为模块顶层 state() 声明生成的取值入口。键为 `${moduleId}#${声明名}`,\n * 与手动 store 键空间隔离。模块热更新重执行时复用既有信号实例:旧导入方持有的\n * 实例与新模块实例共享同一份状态,消除\"两份模块、两份状态\"导致的编辑不生效/页面半边失灵。\n */\nexport function hmrStateRef<T>(key: string, create: () => T): T {\n const states = hmrGlobal.states\n if (states.has(key)) return states.get(key) as T\n const value = create()\n states.set(key, value)\n return value\n}\n\nexport function registerHmrInstance(moduleId: string, instance: HmrInstance): () => void {\n const instances = getModule(moduleId).instances\n instances.add(instance)\n return () => instances.delete(instance)\n}\n\nexport function markHmrInstanceMounted(node: VobsNode, parent: Node): void {\n const instance = hmrInstances.get(node as object)\n if (instance) instance.parent = parent\n}\n\nfunction getModule(moduleId: string): HmrModuleState {\n let module = hmrGlobal.modules.get(moduleId)\n if (!module) {\n module = { components: new Map(), state: new Map(), instances: new Set() }\n hmrGlobal.modules.set(moduleId, module)\n }\n return module\n}\n\nconst hmrInstances = new WeakMap<object, HmrInstance>()\n\nexport function associateHmrInstance(node: VobsNode, instance: HmrInstance): void {\n hmrInstances.set(node as object, instance)\n}\n","import { getCurrentOwner } from '@vobs/reactivity'\n\n/** A mutable reference populated when a host node is mounted. */\nexport interface Ref<T extends object = Node> {\n current: T | null\n}\n\nexport type RefTarget<T extends object = Node> = Ref<T> | ((value: T | null) => void)\n\nexport function ref<T extends object = Node>(initialValue: T | null = null): Ref<T> {\n return { current: initialValue }\n}\n\n/** Bind a host node to an object or callback ref and clear it with its Owner. */\nexport function setRef<T extends object>(node: T, target: unknown): void {\n if (!isRefTarget<T>(target)) return\n // SSR's serializable nodes are never exposed as live refs. Custom renderers\n // may use arbitrary host objects, so only exclude the known SSR shape.\n if (isSSRNode(node)) return\n const owner = getCurrentOwner()\n assignRef(target, node)\n owner?.onDispose(() => {\n // Do not clear a ref that has since been reassigned to another node.\n if (isObjectRef(target) && target.current !== node) return\n assignRef(target, null)\n })\n}\n\nfunction isSSRNode(value: object): boolean {\n const type = (value as { type?: unknown }).type\n return (type === 'element' || type === 'text' || type === 'comment')\n && !('nodeType' in value)\n}\n\nfunction isObjectRef<T extends object>(value: unknown): value is Ref<T> {\n return Boolean(value && typeof value === 'object' && 'current' in value)\n}\n\nfunction isRefTarget<T extends object>(value: unknown): value is RefTarget<T> {\n return isObjectRef<T>(value) || typeof value === 'function'\n}\n\nfunction assignRef<T extends object>(target: RefTarget<T>, value: T | null): void {\n try {\n if (typeof target === 'function') target(value)\n else target.current = value\n } catch {\n // Ref callbacks are user code; never make mounting fail because of them.\n }\n}\n","// 动态绑定:将 Signal 绑定到 DOM 节点\r\n\r\nimport { effect } from '@vobs/reactivity'\nimport type { Signal } from '@vobs/reactivity'\nimport { setAttribute, setProperty, setTextContent } from './ops'\n\nexport type ValueSource<T> = Signal<T> | (() => T)\n\nfunction readSource<T>(source: ValueSource<T>): T {\n return typeof source === 'function' ? source() : source.value\n}\n\r\nexport function bindText(\n node: Text,\n source: ValueSource<unknown>\n): void {\n effect(() => {\n const value = readSource(source)\n setTextContent(node, value === null || value === undefined || typeof value === 'boolean' ? '' : String(value))\n })\n}\n\r\nexport function bindAttribute(\n node: Element,\r\n key: string,\r\n source: ValueSource<unknown>\n): void {\n effect(() => {\n const value = readSource(source)\n setAttribute(node, key, key === 'style' && value && typeof value === 'object' && !Array.isArray(value)\n ? Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== null && entry !== undefined && entry !== false)\n .map(([name, entry]) => `${name.replace(/[A-Z]/gu, match => `-${match.toLowerCase()}`)}:${String(entry)}`)\n .join(';')\n : String(value))\n })\n}\n\nexport function bindProperty(\n node: Element,\n key: string,\n source: ValueSource<unknown>\n): void {\n effect(() => {\n setProperty(node, key, readSource(source))\n })\n}\n","import { createOwner, effect, state, type Owner, type Signal } from '@vobs/reactivity'\nimport {\n associateNodeOwner,\n createBlock,\n createComment,\n createText,\n insertBefore,\n removeChild\n} from './ops'\nimport { createFragment, isVobsFragment, type VobsNode } from './fragment'\n\nexport type NodeFactory = () => VobsNode | null | undefined | false\nexport type DynamicChild = VobsNode | string | number | boolean | null | undefined | readonly DynamicChild[]\n\ninterface ListEntry<T> {\n key: unknown\n node: VobsNode\n owner: Owner\n viewOwner: Owner\n item: Signal<T>\n /** 最近一次赋值的原始 item:供比较与刷新使用,避免在列表 effect 内读取 item 信号造成自依赖。 */\n value: T\n index: number\n}\n\nexport function insertDynamic(parent: Node, anchor: Node | null, factory: NodeFactory): void {\n const marker = createComment('vobs:dynamic')\n insertBefore(parent, marker, anchor)\n let current: VobsNode | null = null\n\n effect(() => {\n const next = createBlock(factory)\n if (next === current) return\n\n if (current) removeChild(parent, current)\n current = next\n if (current) insertBefore(parent, current, marker)\n })\n}\n\n/**\n * Inserts any Vobs child value. This is the escape hatch for JSX expressions\n * that return a node, an array of nodes, text, or an empty conditional value.\n */\nexport function insertDynamicValue(\n parent: Node,\n anchor: Node | null,\n factory: () => DynamicChild\n): void {\n const marker = createComment('vobs:value')\n insertBefore(parent, marker, anchor)\n let current: VobsNode | null = null\n let scope: Owner | null = null\n\n effect(() => {\n // 每轮求值使用独立 scope Owner:factory 求值与挂载期间创建的组件 Owner 全部挂在它下面。\n // 数组/节点被替换时整体 dispose 旧 scope,避免被丢弃子树的 effect 继续订阅信号(幽灵更新与内存泄漏)。\n const nextScope = createOwner()\n const next = nextScope.run(() => normalizeDynamicChild(factory()))\n if (next === current) {\n nextScope.dispose()\n return\n }\n if (current) removeChild(parent, current)\n scope?.dispose()\n scope = nextScope\n current = next\n if (current) insertBefore(parent, current, marker)\n })\n}\n\n/** Convert a JSX child value to a host node without creating a wrapper element. */\nexport function normalizeDynamicChild(value: DynamicChild): VobsNode | null {\n if (value === null || value === undefined || typeof value === 'boolean') return null\n if (typeof value === 'string' || typeof value === 'number') return createText(String(value))\n if (isVobsFragment(value) || isHostNode(value)) return value as VobsNode\n if (Array.isArray(value)) {\n const children = value\n if (children.length === 0) return null\n return createFragment((parent, anchor) => {\n for (const child of children) {\n const node = normalizeDynamicChild(child)\n if (node) insertBefore(parent, node, anchor)\n }\n })\n }\n return null\n}\n\nfunction isHostNode(value: unknown): value is Node {\n return Boolean(value && typeof value === 'object'\n && ('nodeType' in value || ((value as { type?: unknown }).type === 'element'\n || (value as { type?: unknown }).type === 'text'\n || (value as { type?: unknown }).type === 'comment')))\n}\n\nexport function insertList<T>(\n parent: Node,\n anchor: Node | null,\n source: () => readonly T[],\n renderItem: (item: T, index: number) => VobsNode,\n keyOf?: (item: T, index: number) => unknown\n): void {\n const marker = createComment('vobs:list')\n insertBefore(parent, marker, anchor)\n let entries: Array<ListEntry<T>> = []\n const tracksIndex = renderItem.length >= 2\n\n effect(() => {\n const items = source()\n\n // key 只计算一次:keyed 判定与调和共用,避免 keyOf 每轮被调用两遍。\n let keys: unknown[] | null = null\n if (keyOf) {\n keys = new Array(items.length)\n let allKeyed = items.length > 0\n for (let index = 0; index < items.length; index++) {\n const key = keyOf(items[index], index)\n if (key == null) {\n allKeyed = false\n break\n }\n keys[index] = key\n }\n if (!allKeyed) keys = null\n }\n\n const nextEntries = keys\n ? reconcileKeyed(items, keys, entries, renderItem)\n : reconcileIndexed(items, entries, renderItem)\n\n // tracksIndex 时 index 参与渲染,位置变化的行必须整体重建,新节点不在 DOM 中,\n // 重排阶段强制插入;否则只同步记录的位置,节点保持原样交给重排阶段移动。\n const refreshed = tracksIndex ? new Set<ListEntry<T>>() : null\n for (let index = 0; index < nextEntries.length; index++) {\n const entry = nextEntries[index]\n if (tracksIndex) {\n if (entry.index !== index) {\n refreshListEntry(parent, entry, index, renderItem)\n refreshed!.add(entry)\n }\n } else {\n entry.index = index\n }\n }\n\n const retained = new Set(nextEntries)\n for (const entry of entries) {\n if (!retained.has(entry)) disposeEntry(parent, entry)\n }\n\n reorderListEntries(parent, marker, entries, nextEntries, refreshed)\n entries = nextEntries\n })\n}\n\n/**\n * 按 nextEntries 顺序整理 DOM,但只移动必须移动的节点。\n */\nfunction reorderListEntries<T>(\n parent: Node,\n marker: Node,\n previous: readonly ListEntry<T>[],\n nextEntries: readonly ListEntry<T>[],\n forceInsert: Set<ListEntry<T>> | null\n): void {\n const count = nextEntries.length\n if (count === 0) return\n\n // 首次挂载(旧列表为空):全部是新节点,倒序直插即可,跳过 Map/LIS 构建。\n if (previous.length === 0) {\n let reference: VobsNode = marker\n for (let index = count - 1; index >= 0; index--) {\n const node = nextEntries[index].node\n insertBefore(parent, node, reference)\n reference = node\n }\n return\n }\n\n const oldIndexOf = new Map<ListEntry<T>, number>()\n for (let index = 0; index < previous.length; index++) oldIndexOf.set(previous[index], index)\n\n // seq[i] = 条目在旧序中的位置;新条目、重建条目与强制插入条目为 -1。\n const seq: number[] = new Array(count)\n for (let index = 0; index < count; index++) {\n const entry = nextEntries[index]\n seq[index] = forceInsert?.has(entry) ? -1 : oldIndexOf.get(entry) ?? -1\n }\n\n const keep = computeKeptByLis(seq)\n\n let reference: VobsNode = marker\n for (let index = count - 1; index >= 0; index--) {\n const node = nextEntries[index].node\n if (keep[index]) {\n reference = node\n continue\n }\n insertBefore(parent, node, reference)\n reference = node\n }\n}\n\n/**\n * 严格递增子序列(LIS)成员标记,O(n log n)。\n * 负值(新节点)不参与 LIS,永远视为需要移动。\n */\nfunction computeKeptByLis(seq: readonly number[]): boolean[] {\n const count = seq.length\n const keep = new Array<boolean>(count).fill(false)\n const tailsIndex: number[] = []\n const tailsValue: number[] = []\n const prev = new Array<number>(count).fill(-1)\n\n for (let i = 0; i < count; i++) {\n const value = seq[i]\n if (value < 0) continue\n let lo = 0\n let hi = tailsValue.length\n while (lo < hi) {\n const mid = (lo + hi) >> 1\n if (tailsValue[mid] < value) lo = mid + 1\n else hi = mid\n }\n if (lo === tailsValue.length) {\n tailsValue.push(value)\n tailsIndex.push(i)\n } else {\n tailsValue[lo] = value\n tailsIndex[lo] = i\n }\n prev[i] = lo > 0 ? tailsIndex[lo - 1] : -1\n }\n\n let cursor = tailsIndex.length > 0 ? tailsIndex[tailsIndex.length - 1] : -1\n while (cursor >= 0) {\n keep[cursor] = true\n cursor = prev[cursor]\n }\n return keep\n}\n\nfunction reconcileKeyed<T>(\n items: readonly T[],\n keys: readonly unknown[],\n entries: Array<ListEntry<T>>,\n renderItem: (item: T, index: number) => VobsNode\n): Array<ListEntry<T>> {\n const previous = new Map(entries.map(entry => [entry.key, entry]))\n const seen = new Set<unknown>()\n const nextEntries: Array<ListEntry<T>> = []\n\n for (let index = 0; index < items.length; index++) {\n const item = items[index]\n const key = keys[index]\n if (seen.has(key)) {\n console.warn(`Vobs: 检测到重复的列表 key: ${String(key)}`)\n }\n seen.add(key)\n const entry = previous.get(key)\n if (entry) {\n previous.delete(key)\n if (isPrimitiveItem(item) && !Object.is(entry.value, item)) {\n // 原始类型项在编译产物中被静态捕获,无法通过 item 信号刷新视图:值变化时必须重建行。\n nextEntries.push(createListEntry(item, index, key, renderItem))\n continue\n }\n entry.item.value = item\n entry.value = item\n nextEntries.push(entry)\n continue\n }\n nextEntries.push(createListEntry(item, index, key, renderItem))\n }\n\n return nextEntries\n}\n\nfunction reconcileIndexed<T>(\n items: readonly T[],\n entries: Array<ListEntry<T>>,\n renderItem: (item: T, index: number) => VobsNode\n): Array<ListEntry<T>> {\n const nextEntries: Array<ListEntry<T>> = []\n for (let index = 0; index < items.length; index++) {\n const item = items[index]\n const entry = entries[index]\n if (entry && isPrimitiveItem(item) && !Object.is(entry.value, item)) {\n // 原始类型项被编译产物静态捕获,值变化时必须重建行;旧行由主循环统一 dispose。\n nextEntries.push(createListEntry(item, index, index, renderItem))\n continue\n }\n if (entry) {\n entry.item.value = item\n entry.value = item\n nextEntries.push(entry)\n continue\n }\n nextEntries.push(createListEntry(item, index, index, renderItem))\n }\n return nextEntries\n}\n\n/** 原始类型(含 function)无法被 Proxy 响应化,只能整行重建。 */\nfunction isPrimitiveItem(item: unknown): boolean {\n return item === null || typeof item !== 'object'\n}\n\nfunction createListEntry<T>(\n item: T,\n index: number,\n key: unknown,\n renderItem: (item: T, index: number) => VobsNode\n): ListEntry<T> {\n const owner = createOwner()\n let itemSignal!: Signal<T>\n let viewOwner!: Owner\n let node!: VobsNode\n owner.run(() => {\n itemSignal = state(item)\n viewOwner = createOwner()\n node = viewOwner.run(() => renderItem(toReactiveItem(itemSignal, item), index))\n })\n associateNodeOwner(node, viewOwner)\n return { key, node, owner, viewOwner, item: itemSignal, value: item, index }\n}\n\nfunction refreshListEntry<T>(\n parent: Node,\n entry: ListEntry<T>,\n index: number,\n renderItem: (item: T, index: number) => VobsNode\n): void {\n removeChild(parent, entry.node)\n entry.index = index\n const previousView = entry.viewOwner\n entry.owner.run(() => {\n entry.viewOwner = createOwner()\n entry.node = entry.viewOwner.run(() => renderItem(\n toReactiveItem(entry.item, entry.value),\n index\n ))\n })\n // 旧视图的 effect 仍订阅着 item 信号,必须 dispose,否则会写已脱离的 DOM(幽灵更新)。\n previousView.dispose()\n associateNodeOwner(entry.node, entry.viewOwner)\n}\n\nfunction toReactiveItem<T>(item: Signal<T>, initialValue: T): T {\n if (typeof initialValue !== 'object' || initialValue === null) {\n return initialValue\n }\n\n // 代理目标使用创建时的原始对象:避免在列表 effect 内读取 item 信号造成自依赖;\n // 属性读取始终转发到 item.value,在行内绑定 effect 中被正常追踪。\n return new Proxy(initialValue as object, {\n get(_target, property, receiver) {\n return Reflect.get(item.value as object, property, receiver)\n },\n has(_target, property) {\n return property in (item.value as object)\n },\n ownKeys() {\n return Reflect.ownKeys(item.value as object)\n },\n getOwnPropertyDescriptor(_target, property) {\n return Object.getOwnPropertyDescriptor(item.value as object, property)\n }\n }) as T\n}\n\nfunction disposeEntry(parent: Node, entry: ListEntry<unknown>): void {\n removeChild(parent, entry.node)\n entry.owner.dispose()\n}\n","// 编译器静态模板提升的运行时支撑:\n// 编译期把完全静态的 JSX 子树序列化为 HTML 字符串,模块加载时解析一次,\n// 运行时通过 cloneNode 复制,替代逐个 createElement + setStaticProps + insertBefore。\n// 仅适用于 DOM 渲染器(模板本质是 HTML),自定义渲染器场景由编译产物不使用该优化兜底。\n\nconst templateCache = new Map<string, HTMLTemplateElement>()\n\n/** Parse a static template once; called at module load for each hoisted template. */\nexport function createTemplate(html: string): HTMLTemplateElement {\n let template = templateCache.get(html)\n if (!template) {\n template = document.createElement('template')\n template.innerHTML = html\n templateCache.set(html, template)\n }\n return template\n}\n\n/** Clone a hoisted template for one mount; the compiled HTML always has a single root element. */\nexport function cloneTemplate(template: HTMLTemplateElement): Node {\n const root = template.content.firstElementChild\n if (!root) throw new Error('Vobs: 静态模板缺少根元素,请检查编译产物')\n return root.cloneNode(true)\n}\n","/** Shared error protocol used by the runtime, compiler and DevTools. */\nexport type VobsErrorSeverity = 'error' | 'warning' | 'info'\nexport type VobsErrorLayer =\n | 'compiler'\n | 'runtime'\n | 'constraint'\n | 'permission'\n | 'ssr'\n | 'http'\n | 'resource'\n\nexport interface VobsErrorLocation {\n readonly file: string\n readonly line: number\n readonly column: number\n}\n\nexport interface VobsErrorOptions {\n readonly code: string\n readonly message: string\n readonly severity?: VobsErrorSeverity\n readonly layer?: VobsErrorLayer\n readonly cause?: unknown\n readonly fix?: string\n readonly location?: VobsErrorLocation\n readonly trace?: readonly string[]\n readonly example?: string\n readonly docs?: string\n readonly codeFrame?: string\n}\n\nexport interface VobsErrorDefaults {\n readonly code?: string\n readonly severity?: VobsErrorSeverity\n readonly layer?: VobsErrorLayer\n readonly fix?: string\n}\n\n/** A framework error with stable machine-readable metadata. */\nexport class VobsError extends Error {\n readonly code: string\n readonly severity: VobsErrorSeverity\n readonly layer: VobsErrorLayer\n readonly cause?: unknown\n readonly fix?: string\n readonly location?: VobsErrorLocation\n readonly trace?: readonly string[]\n readonly example?: string\n readonly docs?: string\n readonly codeFrame?: string\n\n constructor(options: VobsErrorOptions) {\n super(options.message)\n this.name = 'VobsError'\n this.code = options.code\n this.severity = options.severity ?? 'error'\n this.layer = options.layer ?? 'runtime'\n this.cause = options.cause\n this.fix = options.fix\n this.location = options.location\n this.trace = options.trace\n this.example = options.example\n this.docs = options.docs\n this.codeFrame = options.codeFrame\n }\n}\n\nexport function createVobsError(options: VobsErrorOptions): VobsError {\n return new VobsError(options)\n}\n\nexport function isVobsError(value: unknown): value is VobsError {\n return value instanceof VobsError\n || Boolean(value && typeof value === 'object'\n && typeof (value as { code?: unknown }).code === 'string'\n && typeof (value as { message?: unknown }).message === 'string'\n && typeof (value as { layer?: unknown }).layer === 'string')\n}\n\n/** Convert thrown strings and third-party errors without losing their message. */\nexport function normalizeVobsError(value: unknown, defaults: VobsErrorDefaults = {}): VobsError {\n if (value instanceof VobsError) return value\n if (value instanceof Error) {\n // Preserve the original Error identity so boundaries and DevTools can\n // correlate event/effect phases without creating duplicate diagnostics.\n const metadata = value as Error & {\n readonly vobsCode?: unknown\n readonly vobsHint?: unknown\n readonly vobsSource?: unknown\n }\n const code = defaults.code ?? (typeof metadata.vobsCode === 'string' ? metadata.vobsCode : undefined)\n if (code) defineErrorMetadata(value, 'code', code)\n defineErrorMetadata(value, 'severity', defaults.severity ?? 'error')\n defineErrorMetadata(value, 'layer', defaults.layer ?? 'runtime')\n const fix = defaults.fix ?? (typeof metadata.vobsHint === 'string' ? metadata.vobsHint : undefined)\n if (fix) defineErrorMetadata(value, 'fix', fix)\n const source = metadata.vobsSource\n if (source && typeof source === 'object'\n && typeof (source as { file?: unknown }).file === 'string'\n && typeof (source as { line?: unknown }).line === 'number'\n && typeof (source as { column?: unknown }).column === 'number') {\n defineErrorMetadata(value, 'location', source)\n }\n return value as VobsError\n }\n if (isVobsError(value)) {\n const candidate = value as VobsErrorOptions & { severity?: VobsErrorSeverity; layer?: VobsErrorLayer }\n return new VobsError({\n code: candidate.code,\n message: candidate.message,\n severity: candidate.severity ?? defaults.severity,\n layer: candidate.layer ?? defaults.layer,\n cause: candidate.cause,\n fix: candidate.fix ?? defaults.fix,\n location: candidate.location,\n trace: candidate.trace,\n example: candidate.example,\n docs: candidate.docs,\n codeFrame: candidate.codeFrame\n })\n }\n const message = String(value)\n return new VobsError({\n code: defaults.code ?? 'VOBS_UNKNOWN',\n message,\n severity: defaults.severity ?? 'error',\n layer: defaults.layer ?? 'runtime',\n cause: undefined,\n fix: defaults.fix\n })\n}\n\nfunction defineErrorMetadata(target: Error, key: string, value: unknown): void {\n if (key in target) return\n try {\n Object.defineProperty(target, key, { configurable: true, enumerable: false, value, writable: true })\n } catch {\n // Frozen third-party errors still retain their original message and stack.\n }\n}\n\nexport interface FormatVobsErrorOptions {\n readonly environment?: 'development' | 'production'\n readonly includeStack?: boolean\n}\n\n/** Format a concise, actionable message for terminals and dev overlays. */\nexport function formatVobsError(\n value: unknown,\n options: FormatVobsErrorOptions = {}\n): string {\n const error = normalizeVobsError(value)\n const code = error.code || 'VOBS_UNKNOWN'\n const severity = error.severity || 'error'\n if (options.environment === 'production') return `[Vobs ${code}] ${error.message}`\n\n const lines = [`[Vobs ${capitalize(severity)}] ${error.message}`, `Code: ${code}`]\n if (error.location) lines.push(`Location: ${error.location.file}:${error.location.line}:${error.location.column}`)\n if (error.codeFrame) lines.push('', error.codeFrame)\n if (error.cause !== undefined) lines.push(`Cause: ${formatCause(error.cause)}`)\n if (error.trace?.length) lines.push('', `Trace: ${error.trace.join(' → ')}`)\n if (error.fix) lines.push('', `Fix: ${error.fix}`)\n if (error.example) lines.push('', `Example:\\n${error.example}`)\n if (error.docs) lines.push(`Docs: ${error.docs}`)\n if (options.includeStack && error.stack) lines.push('', error.stack)\n return lines.join('\\n')\n}\n\nfunction formatCause(value: unknown): string {\n return value instanceof Error ? `${value.name}: ${value.message}` : String(value)\n}\n\nfunction capitalize(value: string): string {\n return value.slice(0, 1).toUpperCase() + value.slice(1)\n}\n","import { createOwner, state } from '@vobs/reactivity'\nimport { invokeRuntimeDebug } from './debug'\nimport { insertDynamic, type NodeFactory } from './dynamic'\nimport { normalizeVobsError } from './error'\n\nexport type BoundaryRetry = () => void | Promise<unknown>\nexport type BoundaryFallback = (error: Error, retry: BoundaryRetry) => ReturnType<NodeFactory>\n\nexport interface BoundaryOptions {\n children: NodeFactory\n fallback: BoundaryFallback\n onRetry?: () => void | Promise<unknown>\n resetKey?: () => unknown\n}\n\n/**\n * Shared no-wrapper boundary protocol. The boundary owns its reactive error\n * state and child branch, so replacing the branch also disposes its Owner.\n */\nexport function insertBoundary(\n parent: Node,\n anchor: Node | null,\n options: BoundaryOptions\n): void {\n const boundary = createOwner()\n boundary.run(() => {\n const error = state<Error | null>(null)\n let fallbackActive = false\n let lastError: Error | null = null\n let initialized = false\n let previousKey: unknown\n\n boundary.onError(reason => {\n if (fallbackActive) throw reason\n const normalized = normalizeVobsError(reason, {\n code: 'VOBS_R001',\n layer: 'runtime',\n fix: '检查组件渲染逻辑,或在边界 fallback 中提供恢复操作。'\n })\n lastError = normalized\n invokeRuntimeDebug('error', {\n error: normalized,\n owner: boundary,\n phase: 'boundary',\n handled: true,\n recovery: 'fallback'\n })\n error.value = normalized\n })\n\n const retry = (): void | Promise<unknown> => {\n if (error.value) {\n invokeRuntimeDebug('error', {\n error: error.value,\n owner: boundary,\n phase: 'boundary',\n handled: true,\n recovery: 'retrying'\n })\n }\n error.value = null\n return options.onRetry?.()\n }\n\n insertDynamic(parent, anchor, () => {\n const nextKey = options.resetKey?.()\n if (!initialized || !Object.is(previousKey, nextKey)) {\n initialized = true\n previousKey = nextKey\n if (error.value) error.value = null\n }\n\n const currentError = error.value\n if (!currentError) {\n if (fallbackActive && lastError) {\n invokeRuntimeDebug('error', {\n error: lastError,\n owner: boundary,\n phase: 'boundary',\n handled: true,\n recovery: 'recovered'\n })\n lastError = null\n }\n fallbackActive = false\n return options.children()\n }\n\n fallbackActive = true\n return options.fallback(currentError, retry)\n })\n })\n}\n","import { createFragment, type VobsNode } from './fragment'\nimport { insertBoundary, type BoundaryRetry } from './boundary'\nimport type { NodeFactory } from './dynamic'\n\nexport type ErrorBoundaryFallback = (\n error: Error,\n retry: BoundaryRetry\n) => ReturnType<NodeFactory>\n\n/**\n * 子节点双形态:JSX 属性经编译器编译为惰性 getter(工厂),手写对象字面量可直接传节点。\n */\nexport type ErrorBoundaryChildren = NodeFactory | VobsNode\n\nexport interface ErrorBoundaryOptions {\n children: ErrorBoundaryChildren\n fallback: ErrorBoundaryFallback\n}\n\nexport interface ErrorBoundaryProps {\n children: ErrorBoundaryChildren\n fallback: ErrorBoundaryFallback\n}\n\n/** Normalize child sources to the lazy factory shape insertBoundary expects. */\nfunction resolveBoundaryChildren(children: ErrorBoundaryChildren): NodeFactory {\n return typeof children === 'function' ? children : () => children\n}\n\n/**\n * Inserts an error boundary without adding a wrapper node. It captures errors\n * from its child render branch and child-owned effects, then renders fallback.\n */\nexport function insertErrorBoundary(\n parent: Node,\n anchor: Node | null,\n options: ErrorBoundaryOptions\n): void {\n insertBoundary(parent, anchor, { ...options, children: resolveBoundaryChildren(options.children) })\n}\n\n/** Component-shaped API backed by the same no-wrapper host instruction. */\nexport function ErrorBoundary(props: ErrorBoundaryProps): VobsNode {\n return createFragment((parent, anchor) => insertErrorBoundary(parent, anchor, props))\n}\n","import { createOwner, state } from '@vobs/reactivity'\nimport { insertDynamic, type NodeFactory } from './dynamic'\nimport { createFragment, type VobsNode } from './fragment'\n\nexport type AsyncBoundaryView = ReturnType<NodeFactory> | NodeFactory\nexport type AsyncBoundaryFallback = (error: Error, retry: () => void) => ReturnType<NodeFactory>\nexport interface AsyncBoundaryOptions<T> {\n promise: PromiseLike<T> | (() => PromiseLike<T>)\n children: (value: T) => ReturnType<NodeFactory>\n loading?: AsyncBoundaryView\n fallback?: AsyncBoundaryFallback\n resetKey?: () => unknown\n}\nexport interface AsyncBoundaryProps<T> extends AsyncBoundaryOptions<T> {}\n\nexport function insertAsyncBoundary<T>(parent: Node, anchor: Node | null, options: AsyncBoundaryOptions<T>): void {\n const boundary = createOwner()\n boundary.run(() => {\n const loading = state(true)\n const data = state<T | undefined>(undefined)\n const resolved = state(false)\n const error = state<Error | null>(null)\n let token = 0\n let previousKey: unknown\n let initialized = false\n let fallbackActive = false\n boundary.onError(reason => {\n if (fallbackActive) throw reason\n error.value = normalizeError(reason)\n loading.value = false\n })\n\n const start = (): void => {\n const current = ++token\n loading.value = true\n error.value = null\n data.value = undefined\n resolved.value = false\n let promise: PromiseLike<T>\n try {\n promise = typeof options.promise === 'function' ? options.promise() : options.promise\n } catch (reason) {\n if (current === token) {\n loading.value = false\n error.value = normalizeError(reason)\n }\n return\n }\n Promise.resolve(promise).then(value => {\n if (current !== token || boundary.disposed) return\n data.value = value\n resolved.value = true\n loading.value = false\n }, reason => {\n if (current !== token || boundary.disposed) return\n error.value = normalizeError(reason)\n loading.value = false\n })\n }\n\n const retry = (): void => start()\n start()\n insertDynamic(parent, anchor, () => {\n const key = options.resetKey?.()\n if (!initialized) {\n initialized = true\n previousKey = key\n } else if (!Object.is(previousKey, key)) {\n previousKey = key\n start()\n }\n if (loading.value) {\n fallbackActive = false\n return resolveView(options.loading)\n }\n if (error.value) {\n fallbackActive = true\n return options.fallback?.(error.value, retry) ?? null\n }\n fallbackActive = false\n return resolved.value ? options.children(data.value as T) : resolveView(options.loading)\n })\n })\n}\n\nexport function AsyncBoundary<T>(props: AsyncBoundaryProps<T>): VobsNode {\n return createFragment((parent, anchor) => insertAsyncBoundary(parent, anchor, props))\n}\n\nfunction resolveView(view: AsyncBoundaryView | undefined): ReturnType<NodeFactory> {\n if (!view) return null\n return typeof view === 'function' ? view() : view\n}\n\nfunction normalizeError(reason: unknown): Error {\n return reason instanceof Error ? reason : new Error(String(reason))\n}\n","import { createFragment } from './fragment'\nimport { insertDynamic, type NodeFactory } from './dynamic'\nimport type { VobsNode } from './fragment'\nimport { createOwner } from '@vobs/reactivity'\n\nexport interface ProfilerRenderInfo {\n readonly id: string\n readonly phase: 'mount' | 'update'\n readonly duration: number\n readonly timestamp: number\n}\nexport interface ProfilerOptions {\n id: string\n children: NodeFactory\n onRender?: (info: ProfilerRenderInfo) => void\n}\nexport interface ProfilerProps extends ProfilerOptions {}\n\nexport function insertProfiler(parent: Node, anchor: Node | null, options: ProfilerOptions): void {\n const profiler = createOwner()\n let mounted = false\n profiler.run(() => {\n insertDynamic(parent, anchor, () => {\n const started = now()\n const value = options.children()\n const info: ProfilerRenderInfo = {\n id: options.id,\n phase: mounted ? 'update' : 'mount',\n duration: Math.max(0, now() - started),\n timestamp: Date.now()\n }\n mounted = true\n try { options.onRender?.(info) } catch { /* profiler callbacks are isolated */ }\n return value\n })\n })\n}\n\nexport function Profiler(props: ProfilerProps): VobsNode {\n return createFragment((parent, anchor) => insertProfiler(parent, anchor, props))\n}\n\nfunction now(): number {\n return typeof performance !== 'undefined' && typeof performance.now === 'function' ? performance.now() : Date.now()\n}\n"],"mappings":"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","names":["import_reactivity","import_reactivity","module","state","import_reactivity","import_reactivity","reference","import_reactivity","import_reactivity","import_reactivity"]}
package/dist/index.js CHANGED
@@ -107,24 +107,24 @@ function resolveComponent(component, moduleId, exportName) {
107
107
  return proxy;
108
108
  }
109
109
  __name(resolveComponent, "resolveComponent");
110
- function updateHmrModule(_moduleId, nextModule) {
111
- const modules = [...hmrGlobal.modules.values()];
112
- for (const module of modules) {
113
- let changed = false;
114
- for (const [name, proxy] of module.components) {
115
- const next = nextModule[name];
116
- if (typeof next !== "function") continue;
117
- const hmrProxy = proxy;
118
- hmrProxy.current = next;
119
- Object.defineProperty(hmrProxy, "displayName", { configurable: true, value: next.name || name });
120
- changed = true;
121
- }
122
- if (!changed) continue;
123
- for (const instance of module.instances) {
124
- try {
125
- instance.refresh();
126
- } catch {
127
- }
110
+ function updateHmrModule(moduleId, nextModule) {
111
+ const module = hmrGlobal.modules.get(moduleId);
112
+ if (!module) return;
113
+ let changed = false;
114
+ for (const [name, proxy] of module.components) {
115
+ const next = nextModule[name];
116
+ if (typeof next !== "function") continue;
117
+ const hmrProxy = proxy;
118
+ hmrProxy.current = next;
119
+ Object.defineProperty(hmrProxy, "displayName", { configurable: true, value: next.name || name });
120
+ changed = true;
121
+ }
122
+ if (!changed) return;
123
+ const instances = [...module.instances];
124
+ for (const instance of instances) {
125
+ try {
126
+ instance.refresh();
127
+ } catch {
128
128
  }
129
129
  }
130
130
  }
@@ -255,6 +255,7 @@ __name(createComment, "createComment");
255
255
  function insertBefore(parent, child, anchor) {
256
256
  if (isVobsFragment(child)) {
257
257
  child.mount(parent, isVobsFragment(anchor) ? anchor.start : anchor);
258
+ markHmrInstanceMounted(child, parent);
258
259
  return;
259
260
  }
260
261
  getRenderer().insertBefore(parent, child, isVobsFragment(anchor) ? anchor.start : anchor);
@@ -436,6 +437,16 @@ function createComponent(component, props, source) {
436
437
  attachComponentContext(reason, componentName, owner.id);
437
438
  throw reason;
438
439
  });
440
+ const hmrKey = component.hmrKey;
441
+ let instance = null;
442
+ if (hmrKey) {
443
+ const separator = hmrKey.lastIndexOf(":");
444
+ const moduleId = separator < 0 ? hmrKey : hmrKey.slice(0, separator);
445
+ instance = { node: null, parent: null, refresh: /* @__PURE__ */ __name(() => refreshInstance(), "refresh") };
446
+ const cleanup = registerHmrInstance(moduleId, instance);
447
+ owner.onDispose(cleanup);
448
+ }
449
+ const renderScope = owner.mark();
439
450
  let node;
440
451
  try {
441
452
  node = owner.run(() => untrack(() => component(props)));
@@ -446,30 +457,29 @@ function createComponent(component, props, source) {
446
457
  throw error;
447
458
  }
448
459
  associateNodeOwner(node, owner);
449
- const hmrKey = component.hmrKey;
450
- if (hmrKey) {
451
- const instance = {
452
- node,
453
- parent: null,
454
- refresh() {
455
- const previous = instance.node;
456
- const next = owner.run(() => untrack(() => component(props)));
457
- if (instance.parent && !isVobsFragment(previous) && !isVobsFragment(next)) {
458
- getRenderer().insertBefore(instance.parent, next, previous);
459
- getRenderer().removeChild(instance.parent, previous);
460
- }
461
- nodeOwners.delete(previous);
462
- nodeOwners.set(next, owner);
463
- associateHmrInstance(next, instance);
464
- instance.node = next;
465
- }
466
- };
460
+ if (instance) {
461
+ instance.node = node;
467
462
  associateHmrInstance(node, instance);
468
- const separator = hmrKey.lastIndexOf(":");
469
- const moduleId = separator < 0 ? hmrKey : hmrKey.slice(0, separator);
470
- const cleanup = registerHmrInstance(moduleId, instance);
471
- owner.onDispose(cleanup);
472
463
  }
464
+ function refreshInstance() {
465
+ if (owner.disposed) return;
466
+ const previous = instance.node;
467
+ owner.disposeSince(renderScope);
468
+ const next = owner.run(() => untrack(() => component(props)));
469
+ const parent = instance.parent;
470
+ if (parent) {
471
+ const anchor = isVobsFragment(previous) ? previous.start : previous;
472
+ if (isVobsFragment(next)) next.mount(parent, anchor);
473
+ else getRenderer().insertBefore(parent, next, anchor);
474
+ if (isVobsFragment(previous)) previous.unmount(parent);
475
+ else getRenderer().removeChild(parent, previous);
476
+ }
477
+ nodeOwners.delete(previous);
478
+ nodeOwners.set(next, owner);
479
+ associateHmrInstance(next, instance);
480
+ instance.node = next;
481
+ }
482
+ __name(refreshInstance, "refreshInstance");
473
483
  return node;
474
484
  }
475
485
  __name(createComponent, "createComponent");