olova 2.0.64 → 2.0.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -5
- package/README.md +42 -42
- package/dist/compiler.d.ts +76 -1
- package/dist/compiler.js +13204 -629
- package/dist/compiler.js.map +1 -1
- package/dist/core.d.ts +2 -2
- package/dist/core.js +400 -38
- package/dist/core.js.map +1 -1
- package/dist/global.d.ts +1 -1
- package/dist/global.js +54 -8
- package/dist/global.js.map +1 -1
- package/dist/index.js +13178 -639
- package/dist/index.js.map +1 -1
- package/dist/runtime.d.ts +8 -3
- package/dist/runtime.js +512 -32
- package/dist/runtime.js.map +1 -1
- package/dist/{signals-core-BdfWh1Yt.d.ts → signals-core-BWZ5zXK5.d.ts} +6 -5
- package/dist/vite.js +13178 -639
- package/dist/vite.js.map +1 -1
- package/package.json +83 -83
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../core/signals-core.ts","../runtime/component.ts","../runtime/global.ts"],"names":["preactSignal","preactEffect","preactComputed"],"mappings":"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","file":"core.js","sourcesContent":["import {\n batch,\n computed as preactComputed,\n effect as preactEffect,\n Signal as PreactSignal,\n signal as preactSignal,\n untracked,\n} from \"@preact/signals-core\";\n\nexport type EffectMode = \"queued\" | \"sync\";\nexport type EffectCleanup = void | (() => void);\nexport type EffectCallback = () => EffectCleanup;\n\ntype ObjectValue = Record<PropertyKey, unknown>;\ntype PreactSignalLike<T> = PreactSignal<T> & { _notify?: () => void };\ntype HmrStateSnapshot = {\n key?: string;\n value: unknown;\n};\ntype HmrCaptureFrame = {\n created: Array<{ key?: string; signal: Signal<unknown> }>;\n restoredValues?: HmrStateSnapshot[];\n restoredByKey?: Map<string, unknown>;\n restoredUnkeyed: unknown[];\n cursor: number;\n};\n\nconst rawToProxy = new WeakMap<object, object>();\nconst proxyToRaw = new WeakMap<object, object>();\nconst proxyOwner = new WeakMap<object, Signal<unknown>>();\nconst hmrCaptureStack: HmrCaptureFrame[] = [];\n\nfunction isObject(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction unwrapValue<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n return (proxyToRaw.get(value) ?? value) as T;\n}\n\nfunction notifyPreactSignal<T>(source: PreactSignalLike<T>): void {\n if (typeof source._notify === \"function\") {\n source._notify();\n return;\n }\n\n batch(() => {\n source.value = source.value;\n });\n}\n\nexport class Signal<T> {\n private readonly source: PreactSignalLike<T>;\n private readonly version: PreactSignal<number>;\n private proxy: T | null = null;\n\n constructor(\n initial: T,\n source?: PreactSignalLike<T>,\n version?: PreactSignal<number>,\n ) {\n this.source = source ?? (preactSignal(initial) as PreactSignalLike<T>);\n this.version = version ?? preactSignal(0);\n }\n\n get value(): T {\n this.version.value;\n return this.getReactiveValue(this.source.value);\n }\n\n set value(next: T) {\n const resolvedNext = unwrapValue(next);\n if (Object.is(this.source.peek(), resolvedNext)) {\n return;\n }\n\n this.proxy = null;\n this.source.value = resolvedNext;\n }\n\n peek(): T {\n return this.source.peek();\n }\n\n notify(): void {\n this.version.value = this.version.peek() + 1;\n }\n\n subscribe(fn: (value: T) => void): () => void {\n return this.source.subscribe(fn);\n }\n\n valueOf(): T {\n return this.value;\n }\n\n toString(): string {\n return String(this.value);\n }\n\n toJSON(): T {\n return this.peek();\n }\n\n private getReactiveValue(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n if (this.proxy && proxyToRaw.get(this.proxy as object) === value) {\n return this.proxy;\n }\n\n this.proxy = this.wrapObject(value) as T;\n return this.proxy;\n }\n\n private wrapObject(value: object): object {\n const existing = rawToProxy.get(value);\n if (existing) {\n return existing;\n }\n\n const proxy = new Proxy(value as ObjectValue, {\n get: (target, key, receiver) => {\n const result = Reflect.get(target, key, receiver);\n return isObject(result) ? this.wrapNested(result) : result;\n },\n set: (target, key, next, receiver) => {\n const resolvedNext = unwrapValue(next);\n const previous = Reflect.get(target, key, receiver);\n const changed = Reflect.set(target, key, resolvedNext, receiver);\n\n if (changed && !Object.is(previous, resolvedNext)) {\n this.notify();\n }\n\n return changed;\n },\n deleteProperty: (target, key) => {\n const hadKey = Reflect.has(target, key);\n const changed = Reflect.deleteProperty(target, key);\n\n if (hadKey && changed) {\n this.notify();\n }\n\n return changed;\n },\n });\n\n rawToProxy.set(value, proxy);\n proxyToRaw.set(proxy, value);\n proxyOwner.set(proxy, this as Signal<unknown>);\n return proxy;\n }\n\n private wrapNested(value: object): object {\n const owner = proxyOwner.get(value);\n if (owner === this) {\n return value;\n }\n\n return this.wrapObject(value);\n }\n}\n\nexport type SignalState<T> = Signal<T>;\n\nexport function state<T>(initial: T, hmrKey?: string): Signal<T> {\n const frame = hmrCaptureStack[hmrCaptureStack.length - 1];\n let nextInitial = initial;\n\n if (frame) {\n if (hmrKey && frame.restoredByKey?.has(hmrKey)) {\n nextInitial = frame.restoredByKey.get(hmrKey) as T;\n } else if (frame.cursor < frame.restoredUnkeyed.length) {\n nextInitial = frame.restoredUnkeyed[frame.cursor] as T;\n }\n }\n\n const signal = new Signal(nextInitial);\n\n if (frame) {\n frame.created.push({ key: hmrKey, signal: signal as Signal<unknown> });\n if (!hmrKey || !frame.restoredByKey?.has(hmrKey)) {\n frame.cursor += 1;\n }\n }\n\n return signal;\n}\n\nexport function effect(\n fn: EffectCallback,\n options?: { mode?: EffectMode },\n): () => void {\n const stop = preactEffect(() => fn());\n return () => stop();\n}\n\nexport function computed<T>(getter: () => T): Signal<T> {\n const version = preactSignal(0);\n const source = preactComputed(() => getter()) as PreactSignalLike<T>;\n preactEffect(() => {\n getter();\n version.value = version.peek() + 1;\n });\n return new Signal(untracked(() => source.value), source, version);\n}\n\nexport const derived = computed;\n\nexport function beginHmrStateCapture(restoredValues?: HmrStateSnapshot[]): void {\n const restoredByKey = new Map<string, unknown>();\n const restoredUnkeyed: unknown[] = [];\n\n for (const entry of restoredValues ?? []) {\n if (entry.key) {\n restoredByKey.set(entry.key, entry.value);\n continue;\n }\n\n restoredUnkeyed.push(entry.value);\n }\n\n hmrCaptureStack.push({\n created: [],\n restoredValues,\n restoredByKey,\n restoredUnkeyed,\n cursor: 0,\n });\n}\n\nexport function endHmrStateCapture(): Array<{ key?: string; signal: Signal<unknown> }> {\n const frame = hmrCaptureStack.pop();\n return frame?.created ?? [];\n}\n","import {\r\n beginHmrStateCapture,\r\n effect,\r\n endHmrStateCapture,\r\n type Signal,\r\n} from \"../core/signals-core\";\r\n\r\nexport type OlovaProps = Record<string, unknown>;\r\ntype ContextMap = Map<unknown, unknown>;\r\nexport type DangerousHtml = {\r\n __dangerousHtml: true;\r\n value: string;\r\n};\r\n\r\nexport type OlovaSlots = Record<string, () => CompiledDescriptor>;\r\n\r\ntype TextBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype HtmlBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype AttrBinding = {\r\n id: string;\r\n attr: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype EventBinding = {\r\n id: string;\r\n event: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype SlotBinding = {\r\n id: string;\r\n name: string;\r\n};\r\n\r\ntype ComponentBinding = {\r\n id: string;\r\n getComponent: () => OlovaComponent;\r\n getProps: () => OlovaProps;\r\n getSlots?: () => OlovaSlots;\r\n};\r\n\r\ntype IfBinding = {\r\n id: string;\r\n get: () => unknown;\r\n trueBranch: () => CompiledDescriptor;\r\n falseBranch?: () => CompiledDescriptor;\r\n};\r\n\r\nexport type CompiledDescriptor = {\r\n template?: string;\r\n textBindings: TextBinding[];\r\n htmlBindings: HtmlBinding[];\r\n attrBindings: AttrBinding[];\r\n eventBindings: EventBinding[];\r\n slotBindings: SlotBinding[];\r\n componentBindings: ComponentBinding[];\r\n ifBindings?: IfBinding[];\r\n build?: () => { fragment: DocumentFragment; nodes: Record<string, Node> };\r\n};\r\n\r\nexport type SetupFn = (\r\n props: OlovaProps,\r\n slots: OlovaSlots,\r\n) => CompiledDescriptor;\r\n\r\nexport interface OlovaComponent {\r\n setup: SetupFn;\r\n __hmrId?: string;\r\n __hmrInstances?: Set<MountedInstance>;\r\n}\r\n\r\nconst EMPTY_SLOTS: OlovaSlots = Object.freeze({}) as OlovaSlots;\r\nlet currentSetupContext: ContextMap | null = null;\r\n\r\ntype MountTarget = HTMLElement | Range;\r\n\r\ntype MountedInstance = {\r\n component: OlovaComponent;\r\n target: MountTarget;\r\n props: OlovaProps;\r\n slots: OlovaSlots;\r\n parentContext?: ContextMap;\r\n disposeDescriptor: () => void;\r\n hmrSignals: Array<{ key?: string; signal: Signal<unknown> }>;\r\n};\r\n\r\nfunction requireSetupContext(apiName: string): ContextMap {\r\n if (!currentSetupContext) {\r\n throw new Error(\r\n `[olova] ${apiName}() can only be used during component setup.`,\r\n );\r\n }\r\n\r\n return currentSetupContext;\r\n}\r\n\r\nfunction toText(value: unknown): string {\n if (value === null || value === undefined || value === false || value === true) {\n return \"\";\n }\n if (Array.isArray(value)) {\n return value.map(toText).join(\"\");\n }\n return String(value);\r\n}\r\n\r\nfunction normalizeClassValue(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n const parts = value\r\n .map((item) => normalizeClassValue(item))\r\n .filter((item): item is string => !!item);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n if (typeof value === \"object\") {\r\n const parts = Object.entries(value as Record<string, unknown>)\r\n .filter(([, enabled]) => !!enabled)\r\n .map(([name]) => name);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nfunction toAttr(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n if (value === true) {\r\n return \"true\";\r\n }\r\n return String(value);\r\n}\r\n\r\nfunction escapeHtml(value: string): string {\r\n return value\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\");\r\n}\r\n\r\nfunction isDangerousHtml(value: unknown): value is DangerousHtml {\r\n return !!(\r\n value &&\r\n typeof value === \"object\" &&\r\n \"__dangerousHtml\" in value &&\r\n (value as DangerousHtml).__dangerousHtml === true\r\n );\r\n}\r\n\r\nfunction sanitizeHtml(html: string): string {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = html;\r\n\r\n const blockedElements = new Set([\"script\", \"iframe\", \"object\", \"embed\"]);\r\n const walker = document.createTreeWalker(template.content, NodeFilter.SHOW_ELEMENT);\r\n let current = walker.nextNode() as Element | null;\r\n\r\n while (current) {\r\n const element = current;\r\n current = walker.nextNode() as Element | null;\r\n\r\n if (blockedElements.has(element.tagName.toLowerCase())) {\r\n element.remove();\r\n continue;\r\n }\r\n\r\n for (const attr of Array.from(element.attributes)) {\r\n const attrName = attr.name.toLowerCase();\r\n const attrValue = attr.value.trim().toLowerCase();\r\n if (attrName.startsWith(\"on\")) {\r\n element.removeAttribute(attr.name);\r\n continue;\r\n }\r\n\r\n if (\r\n (attrName === \"href\" || attrName === \"src\" || attrName === \"xlink:href\") &&\r\n attrValue.startsWith(\"javascript:\")\r\n ) {\r\n element.removeAttribute(attr.name);\r\n }\r\n }\r\n }\r\n\r\n return template.innerHTML;\r\n}\r\n\r\nfunction toHtml(value: unknown): string {\n if (value === null || value === undefined || value === false || value === true) {\n return \"\";\n }\n if (Array.isArray(value)) {\n return value.map(toHtml).join(\"\");\n }\n if (isDangerousHtml(value)) {\r\n return value.value;\r\n }\r\n return sanitizeHtml(String(value));\r\n}\r\n\r\nfunction shallowEqual(a?: OlovaProps, b?: OlovaProps): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction shallowEqualSlots(a?: OlovaSlots, b?: OlovaSlots): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction insertFragmentIntoRange(\r\n range: Range,\r\n fragment: DocumentFragment,\r\n): void {\r\n const nodes = Array.from(fragment.childNodes);\r\n range.deleteContents();\r\n\r\n if (nodes.length === 0) {\r\n return;\r\n }\r\n\r\n range.insertNode(fragment);\r\n const first = nodes[0];\r\n const last = nodes[nodes.length - 1];\r\n range.setStartBefore(first);\r\n range.setEndAfter(last);\r\n}\r\n\r\nfunction bindJsxEventsInRange(range: Range): () => void {\n const root =\r\n range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE\r\n ? range.commonAncestorContainer\r\n : range.commonAncestorContainer.parentNode;\r\n\r\n if (!root) {\r\n return () => {};\r\n }\r\n\r\n const globalObj = globalThis as typeof globalThis & {\r\n __olovaJsxHandlers?: Map<string, unknown>;\r\n };\r\n const handlers = globalObj.__olovaJsxHandlers;\n if (!handlers) {\n return () => {};\n }\n\n const listeners: Array<() => void> = [];\n const handlerIds = new Set<string>();\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n let current = walker.currentNode as Element | null;\n\r\n while (current) {\r\n let intersects = false;\r\n try {\r\n intersects = range.intersectsNode(current);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (intersects) {\r\n const element = current;\r\n for (const attr of Array.from(current.attributes)) {\r\n if (!attr.name.startsWith(\"data-o-jsx-\")) {\r\n continue;\r\n }\r\n\r\n const eventName = attr.name.slice(\"data-o-jsx-\".length);\n const handlerId = attr.value;\n handlerIds.add(handlerId);\n const listener: EventListener = (event) => {\n const handler = handlers.get(handlerId);\n if (typeof handler === \"function\") {\n handler(event);\n }\n };\r\n\r\n element.addEventListener(eventName, listener);\r\n element.removeAttribute(`on${eventName}`);\r\n listeners.push(() => element.removeEventListener(eventName, listener));\r\n }\r\n }\r\n\r\n current = walker.nextNode() as Element | null;\r\n }\r\n\r\n return () => {\n for (const cleanup of listeners) {\n cleanup();\n }\n\n for (const handlerId of handlerIds) {\n handlers.delete(handlerId);\n }\n };\n}\n\r\nfunction replaceTokenWithTextNode(root: Node, token: string): Text | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const remainder = textNode.splitText(index);\r\n const after = remainder.splitText(token.length);\r\n const parent = remainder.parentNode;\r\n if (!parent) {\r\n return null;\r\n }\r\n\r\n const dynamic = document.createTextNode(\"\");\r\n parent.insertBefore(dynamic, after);\r\n parent.removeChild(remainder);\r\n return dynamic;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtToken(root: Node, token: string): Range | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtTokenWithinRange(\r\n hostRange: Range,\r\n token: string,\r\n): Range | null {\r\n const root = hostRange.commonAncestorContainer;\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index < 0) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n let intersects = false;\r\n try {\r\n intersects = hostRange.intersectsNode(textNode);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (!intersects) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction resolveTokenRange(\r\n target: HTMLElement | Range,\r\n token: string,\r\n): Range | null {\r\n return target instanceof HTMLElement\r\n ? createRangeAtToken(target, token)\r\n : createRangeAtTokenWithinRange(target, token);\r\n}\r\n\r\nfunction mountDescriptor(\r\n descriptor: CompiledDescriptor,\r\n target: HTMLElement | Range,\r\n slots: OlovaSlots,\r\n context: ContextMap,\r\n): () => void {\r\n let fragment: DocumentFragment;\r\n let nodes: Record<string, Node> | null = null;\r\n\r\n if (descriptor.build) {\r\n const buildResult = descriptor.build();\r\n fragment = buildResult.fragment;\r\n nodes = buildResult.nodes;\r\n } else {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = descriptor.template ? descriptor.template.trim() : \"\";\r\n fragment = template.content;\r\n }\r\n\r\n const cleanups: Array<() => void> = [];\r\n\r\n for (const binding of descriptor.textBindings) {\r\n const token = `__O_TEXT_${binding.id}__`;\r\n const textNode =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as Text)\r\n : replaceTokenWithTextNode(fragment, token);\r\n if (!textNode) {\r\n continue;\r\n }\r\n\r\n const stop = effect(() => {\r\n textNode.data = toText(binding.get());\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n\r\n for (const binding of descriptor.attrBindings) {\r\n const token = `__O_ATTR_${binding.id}__`;\r\n const elements =\r\n nodes && nodes[binding.id]\r\n ? [nodes[binding.id] as HTMLElement]\r\n : Array.from(fragment.querySelectorAll<HTMLElement>(\"*\")).filter(\r\n (element) => element.getAttribute(binding.attr) === token,\r\n );\r\n\r\n for (const element of elements) {\r\n const stop = effect(() => {\r\n const next =\r\n binding.attr === \"class\"\r\n ? normalizeClassValue(binding.get())\r\n : toAttr(binding.get());\r\n if (next === null) {\r\n element.removeAttribute(binding.attr);\r\n return;\r\n }\r\n\r\n element.setAttribute(binding.attr, next);\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n }\r\n\r\n for (const binding of descriptor.eventBindings) {\r\n const selector = `[data-o-on-${binding.event}=\"${binding.id}\"]`;\r\n const element =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as HTMLElement)\r\n : fragment.querySelector<HTMLElement>(selector);\r\n if (!element) {\r\n continue;\r\n }\r\n\r\n if (!nodes) element.removeAttribute(`data-o-on-${binding.event}`);\r\n\r\n let currentHandler: unknown;\r\n const stop = effect(() => {\r\n currentHandler = binding.get();\r\n });\r\n\r\n const listener: EventListener = (event) => {\r\n if (typeof currentHandler === \"function\") {\r\n currentHandler(event);\r\n }\r\n };\r\n\r\n element.addEventListener(binding.event, listener);\r\n\r\n cleanups.push(() => {\r\n stop();\r\n element.removeEventListener(binding.event, listener);\r\n });\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren(fragment);\r\n } else {\r\n insertFragmentIntoRange(target, fragment);\r\n }\r\n\r\n for (const binding of descriptor.htmlBindings) {\r\n const token = `__O_HTML_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let lastHtml = \"__OLOVA_INIT__\";\r\n let cleanupJsxEvents = () => {};\r\n const stop = effect(() => {\r\n const nextHtml = toHtml(binding.get());\r\n if (nextHtml === lastHtml) {\r\n return;\r\n }\r\n\r\n lastHtml = nextHtml;\r\n cleanupJsxEvents();\r\n const htmlTemplate = document.createElement(\"template\");\r\n htmlTemplate.innerHTML = nextHtml;\r\n insertFragmentIntoRange(range, htmlTemplate.content);\r\n cleanupJsxEvents = bindJsxEventsInRange(range);\r\n });\r\n\r\n cleanups.push(() => {\r\n cleanupJsxEvents();\r\n stop();\r\n });\r\n }\r\n\r\n for (const binding of descriptor.slotBindings) {\r\n const token = `__O_SLOT_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n const slotFactory = slots[binding.name];\r\n if (!slotFactory) {\r\n range.deleteContents();\r\n continue;\r\n }\r\n\r\n const slotDescriptor = slotFactory();\r\n const disposeSlot = mountDescriptor(slotDescriptor, range, slots, context);\r\n cleanups.push(disposeSlot);\r\n }\r\n\r\n for (const binding of descriptor.componentBindings) {\r\n const token = `__O_COMP_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeChild = () => {};\r\n let lastComponent: OlovaComponent | null = null;\r\n let lastProps: OlovaProps | undefined;\r\n let lastSlots: OlovaSlots | undefined;\r\n\r\n const stop = effect(() => {\r\n const nextComponent = binding.getComponent();\r\n const nextProps = binding.getProps();\r\n const nextSlots = binding.getSlots ? binding.getSlots() : EMPTY_SLOTS;\r\n\r\n if (\r\n lastComponent === nextComponent &&\r\n shallowEqual(lastProps, nextProps) &&\r\n shallowEqualSlots(lastSlots, nextSlots)\r\n ) {\r\n return;\r\n }\r\n\r\n disposeChild();\r\n disposeChild = mount(nextComponent, range, nextProps, nextSlots, context);\r\n lastComponent = nextComponent;\r\n lastProps = { ...nextProps };\r\n lastSlots = nextSlots;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeChild();\r\n });\r\n }\r\n\r\n if (descriptor.ifBindings) {\r\n for (const binding of descriptor.ifBindings) {\r\n const token = `__O_IF_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeBranch = () => {};\r\n let lastCondition: boolean | undefined = undefined;\r\n\r\n const stop = effect(() => {\r\n const condition = !!binding.get();\r\n if (condition === lastCondition) {\r\n return;\r\n }\r\n\r\n disposeBranch();\r\n \r\n if (condition) {\r\n const branchDescriptor = binding.trueBranch();\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else if (binding.falseBranch) {\r\n const branchDescriptor = binding.falseBranch();\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else {\r\n range.deleteContents();\r\n disposeBranch = () => {};\r\n }\r\n\r\n lastCondition = condition;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeBranch();\r\n });\r\n }\r\n }\r\n\r\n return () => {\r\n for (const cleanup of cleanups) {\r\n cleanup();\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren();\r\n return;\r\n }\r\n\r\n target.deleteContents();\r\n };\r\n}\r\n\r\nfunction registerMountedInstance(instance: MountedInstance): void {\r\n const instances =\r\n instance.component.__hmrInstances ?? (instance.component.__hmrInstances = new Set());\r\n instances.add(instance);\r\n}\r\n\r\nfunction unregisterMountedInstance(instance: MountedInstance): void {\r\n instance.component.__hmrInstances?.delete(instance);\r\n}\r\n\r\nfunction renderMountedInstance(\r\n instance: MountedInstance,\r\n restoredValues?: Array<{ key?: string; value: unknown }>,\r\n): void {\r\n const context = new Map(instance.parentContext ?? []);\r\n const previousContext = currentSetupContext;\r\n currentSetupContext = context;\r\n beginHmrStateCapture(restoredValues);\r\n\r\n try {\r\n const descriptor = instance.component.setup(instance.props, instance.slots);\r\n instance.disposeDescriptor = mountDescriptor(\r\n descriptor,\r\n instance.target,\r\n instance.slots,\r\n context,\r\n );\r\n instance.hmrSignals = endHmrStateCapture();\r\n } catch (error) {\r\n endHmrStateCapture();\r\n throw error;\r\n } finally {\r\n currentSetupContext = previousContext;\r\n }\r\n}\r\n\r\nfunction collectHmrSignalValues(\r\n instance: MountedInstance,\r\n): Array<{ key?: string; value: unknown }> {\r\n return instance.hmrSignals.map(({ key, signal }) => ({\r\n key,\r\n value: signal.peek(),\r\n }));\r\n}\r\n\r\nexport function replaceComponent(\r\n current: OlovaComponent,\r\n next: OlovaComponent,\r\n): void {\r\n const instances = current.__hmrInstances;\r\n\r\n if (!instances || instances.size === 0) {\r\n current.setup = next.setup;\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n return;\r\n }\r\n\r\n const snapshots = Array.from(instances, (instance) => ({\r\n instance,\r\n restoredValues: collectHmrSignalValues(instance),\r\n }));\r\n\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n\r\n try {\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = next;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n } catch (error) {\r\n next.__hmrInstances = undefined;\r\n current.__hmrInstances = instances;\r\n\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = current;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n\r\n console.error(\"[olova] HMR update failed. Restored previous component.\", error);\r\n return;\r\n }\r\n}\r\n\r\nexport function defineComponent(setup: SetupFn, hmrId?: string): OlovaComponent {\r\n return { setup, __hmrId: hmrId };\r\n}\r\n\r\nexport function dangerouslySetHtml(value: unknown): DangerousHtml {\r\n return {\r\n __dangerousHtml: true,\r\n value: toText(value),\r\n };\r\n}\r\n\r\nexport function setContext<T>(key: unknown, value: T): T {\r\n const context = requireSetupContext(\"setContext\");\r\n context.set(key, value);\r\n return value;\r\n}\r\n\r\nexport function getContext<T>(key: unknown): T {\r\n const context = requireSetupContext(\"getContext\");\r\n return context.get(key) as T;\r\n}\r\n\r\nexport function hasContext(key: unknown): boolean {\r\n const context = requireSetupContext(\"hasContext\");\r\n return context.has(key);\r\n}\r\n\r\nexport function mount(\r\n component: OlovaComponent,\r\n target: HTMLElement | Range,\r\n props: OlovaProps = {},\r\n slots: OlovaSlots = EMPTY_SLOTS,\r\n parentContext?: ContextMap,\r\n): () => void {\r\n const instance: MountedInstance = {\r\n component,\r\n target,\r\n props,\r\n slots,\r\n parentContext,\r\n disposeDescriptor: () => {},\r\n hmrSignals: [],\r\n };\r\n\r\n registerMountedInstance(instance);\r\n renderMountedInstance(instance);\r\n\r\n return () => {\r\n unregisterMountedInstance(instance);\r\n instance.disposeDescriptor();\r\n };\r\n}\r\n\r\nexport function createApp(root: OlovaComponent): {\r\n mount(target: string | HTMLElement): () => void;\r\n} {\r\n return {\r\n mount(target) {\r\n const element =\r\n typeof target === \"string\"\r\n ? (document.querySelector(target) as HTMLElement | null)\r\n : target;\r\n\r\n if (!element) {\r\n throw new Error(`Target not found: ${String(target)}`);\r\n }\r\n\r\n return mount(root, element);\r\n },\r\n };\r\n}\r\n","import { effect, state } from \"../core/signals-core\";\r\nimport type { SignalState } from \"../core/signals-core\";\r\n\r\ntype AnyState = SignalState<unknown>;\r\ntype PersistTarget = \"localStorage\";\r\ntype GlobalStateOptions = {\r\n persist?: PersistTarget;\r\n};\r\n\r\nconst globalStates = new Map<string, AnyState>();\r\nconst persistCleanups = new Map<string, () => void>();\r\nconst persistTargets = new Map<string, PersistTarget>();\r\n\r\nfunction storageKey(name: string): string {\r\n return `olova:global:${name}`;\r\n}\r\n\r\nfunction getStorage(target: PersistTarget): Storage | null {\r\n if (typeof window === \"undefined\") {\r\n return null;\r\n }\r\n\r\n if (target === \"localStorage\") {\r\n return window.localStorage;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction readPersisted(name: string, target: PersistTarget): unknown {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n const raw = storage.getItem(storageKey(name));\r\n if (raw == null) {\r\n return undefined;\r\n }\r\n return JSON.parse(raw);\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction setupPersistence(name: string, stateRef: AnyState, target: PersistTarget) {\r\n const currentTarget = persistTargets.get(name);\r\n if (currentTarget === target && persistCleanups.has(name)) {\r\n return;\r\n }\r\n\r\n const previousCleanup = persistCleanups.get(name);\r\n if (previousCleanup) {\r\n previousCleanup();\r\n }\r\n\r\n persistTargets.set(name, target);\r\n\r\n const stop = effect(() => {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return;\r\n }\r\n\r\n try {\r\n storage.setItem(storageKey(name), JSON.stringify(stateRef.value));\r\n } catch {\r\n // Ignore storage quota/serialization errors.\r\n }\r\n });\r\n\r\n persistCleanups.set(name, stop);\r\n}\r\n\r\nfunction ensureState(\r\n name: string,\r\n initial?: unknown,\r\n options?: GlobalStateOptions,\r\n): AnyState {\r\n const existing = globalStates.get(name);\r\n if (existing) {\r\n if (existing.value === undefined && initial !== undefined) {\r\n existing.value = initial;\r\n }\r\n\r\n if (options?.persist) {\r\n if (existing.value === undefined) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n existing.value = persisted;\r\n }\r\n }\r\n setupPersistence(name, existing, options.persist);\r\n }\r\n\r\n return existing;\r\n }\r\n\r\n let resolvedInitial = initial;\r\n if (options?.persist) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n resolvedInitial = persisted;\r\n }\r\n }\r\n\r\n const created = state(resolvedInitial) as AnyState;\r\n globalStates.set(name, created);\r\n\r\n if (options?.persist) {\r\n setupPersistence(name, created, options.persist);\r\n }\r\n\r\n return created;\r\n}\r\n\r\nexport const global = {\r\n state(name: string, initial?: unknown, options?: GlobalStateOptions) {\r\n return ensureState(name, initial, options);\r\n },\r\n get(name: string) {\r\n return ensureState(name);\r\n },\r\n has(name: string) {\r\n return globalStates.has(name);\r\n },\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../core/signals-core.ts","../runtime/component.ts","../runtime/global.ts"],"names":["preactSignal","preactEffect","preactComputed"],"mappings":"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","file":"core.js","sourcesContent":["import {\r\n batch,\r\n computed as preactComputed,\r\n effect as preactEffect,\r\n Signal as PreactSignal,\r\n signal as preactSignal,\r\n untracked,\r\n} from \"@preact/signals-core\";\r\n\r\nexport type EffectCleanup = void | (() => void);\r\nexport type EffectCallback = () => EffectCleanup;\r\nexport type RuntimeErrorHandler = (error: unknown) => void;\r\n\r\ntype ObjectValue = Record<PropertyKey, unknown>;\r\ntype PreactSignalLike<T> = PreactSignal<T> & { _notify?: () => void };\r\ntype HmrStateSnapshot = {\r\n key?: string;\r\n value: unknown;\r\n};\r\ntype HmrCaptureFrame = {\r\n created: Array<{ key?: string; signal: Signal<unknown> }>;\r\n restoredValues?: HmrStateSnapshot[];\r\n restoredByKey?: Map<string, unknown>;\r\n restoredUnkeyed: unknown[];\r\n cursor: number;\r\n};\r\n\r\nconst rawToProxyByOwner = new WeakMap<object, WeakMap<Signal<unknown>, object>>();\r\nconst proxyToRaw = new WeakMap<object, object>();\r\nconst proxyOwner = new WeakMap<object, Signal<unknown>>();\r\nconst hmrCaptureStack: HmrCaptureFrame[] = [];\r\nconst runtimeErrorHandlerStack: RuntimeErrorHandler[] = [];\r\n\r\nfunction isObject(value: unknown): value is object {\r\n return typeof value === \"object\" && value !== null;\r\n}\r\n\r\nfunction unwrapValue<T>(value: T): T {\r\n if (!isObject(value)) {\r\n return value;\r\n }\r\n\r\n return (proxyToRaw.get(value) ?? value) as T;\r\n}\r\n\r\nfunction notifyPreactSignal<T>(source: PreactSignalLike<T>): void {\r\n if (typeof source._notify === \"function\") {\r\n source._notify();\r\n return;\r\n }\r\n\r\n batch(() => {\r\n source.value = source.value;\r\n });\r\n}\r\n\r\nexport class Signal<T> {\r\n private readonly source: PreactSignalLike<T>;\r\n private readonly version: PreactSignal<number>;\r\n private proxy: T | null = null;\r\n\r\n constructor(\r\n initial: T,\r\n source?: PreactSignalLike<T>,\r\n version?: PreactSignal<number>,\r\n ) {\r\n this.source = source ?? (preactSignal(initial) as PreactSignalLike<T>);\r\n this.version = version ?? preactSignal(0);\r\n }\r\n\r\n get value(): T {\r\n this.version.value;\r\n return this.getReactiveValue(this.source.value);\r\n }\r\n\r\n set value(next: T) {\r\n const resolvedNext = unwrapValue(next);\r\n if (Object.is(this.source.peek(), resolvedNext)) {\r\n return;\r\n }\r\n\r\n this.proxy = null;\r\n this.source.value = resolvedNext;\r\n }\r\n\r\n peek(): T {\r\n return this.source.peek();\r\n }\r\n\r\n notify(): void {\r\n this.version.value = this.version.peek() + 1;\r\n }\r\n\r\n peekVersion(): number {\r\n return this.version.peek();\r\n }\r\n\r\n subscribe(fn: (value: T) => void): () => void {\r\n return this.source.subscribe(fn);\r\n }\r\n\r\n valueOf(): T {\r\n return this.value;\r\n }\r\n\r\n toString(): string {\r\n return String(this.value);\r\n }\r\n\r\n toJSON(): T {\r\n return this.peek();\r\n }\r\n\r\n private getReactiveValue(value: T): T {\r\n if (!isObject(value)) {\r\n return value;\r\n }\r\n\r\n if (this.proxy && proxyToRaw.get(this.proxy as object) === value) {\r\n return this.proxy;\r\n }\r\n\r\n this.proxy = this.wrapObject(value) as T;\r\n return this.proxy;\r\n }\r\n\r\n private wrapObject(value: object): object {\r\n const ownedProxyMap = rawToProxyByOwner.get(value);\r\n const existing = ownedProxyMap?.get(this as Signal<unknown>);\r\n if (existing) {\r\n return existing;\r\n }\r\n\r\n const proxy = new Proxy(value as ObjectValue, {\r\n get: (target, key, receiver) => {\r\n const result = Reflect.get(target, key, receiver);\r\n return isObject(result) ? this.wrapNested(result) : result;\r\n },\r\n set: (target, key, next, receiver) => {\r\n const resolvedNext = unwrapValue(next);\r\n const previous = Reflect.get(target, key, receiver);\r\n const changed = Reflect.set(target, key, resolvedNext, receiver);\r\n\r\n if (changed && !Object.is(previous, resolvedNext)) {\r\n this.notify();\r\n }\r\n\r\n return changed;\r\n },\r\n deleteProperty: (target, key) => {\r\n const hadKey = Reflect.has(target, key);\r\n const changed = Reflect.deleteProperty(target, key);\r\n\r\n if (hadKey && changed) {\r\n this.notify();\r\n }\r\n\r\n return changed;\r\n },\r\n });\r\n\r\n const nextOwnedProxyMap = ownedProxyMap ?? new WeakMap<Signal<unknown>, object>();\r\n nextOwnedProxyMap.set(this as Signal<unknown>, proxy);\r\n if (!ownedProxyMap) {\r\n rawToProxyByOwner.set(value, nextOwnedProxyMap);\r\n }\r\n proxyToRaw.set(proxy, value);\r\n proxyOwner.set(proxy, this as Signal<unknown>);\r\n return proxy;\r\n }\r\n\r\n private wrapNested(value: object): object {\r\n const owner = proxyOwner.get(value);\r\n if (owner === this) {\r\n return value;\r\n }\r\n\r\n return this.wrapObject(value);\r\n }\r\n}\r\n\r\nexport type SignalState<T> = Signal<T>;\r\n\r\nexport function state<T>(initial: T, hmrKey?: string): Signal<T> {\r\n const frame = hmrCaptureStack[hmrCaptureStack.length - 1];\r\n let nextInitial = initial;\r\n\r\n if (frame) {\r\n if (hmrKey && frame.restoredByKey?.has(hmrKey)) {\r\n nextInitial = frame.restoredByKey.get(hmrKey) as T;\r\n } else if (frame.cursor < frame.restoredUnkeyed.length) {\r\n nextInitial = frame.restoredUnkeyed[frame.cursor] as T;\r\n }\r\n }\r\n\r\n const signal = new Signal(nextInitial);\r\n\r\n if (frame) {\r\n frame.created.push({ key: hmrKey, signal: signal as Signal<unknown> });\r\n if (!hmrKey || !frame.restoredByKey?.has(hmrKey)) {\r\n frame.cursor += 1;\r\n }\r\n }\r\n\r\n return signal;\r\n}\r\n\r\nexport function getReactiveProxyVersion(value: unknown): number | null {\r\n if (!isObject(value)) {\r\n return null;\r\n }\r\n\r\n const owner = proxyOwner.get(value);\r\n return owner ? owner.peekVersion() : null;\r\n}\r\n\r\nfunction reportRuntimeError(error: unknown, handler?: RuntimeErrorHandler | null): never | void {\r\n if (handler) {\r\n handler(error);\r\n return;\r\n }\r\n\r\n throw error;\r\n}\r\n\r\nexport function withRuntimeErrorHandler<T>(\r\n handler: RuntimeErrorHandler | null | undefined,\r\n fn: () => T,\r\n): T {\r\n if (!handler) {\r\n return fn();\r\n }\r\n\r\n runtimeErrorHandlerStack.push(handler);\r\n try {\r\n return fn();\r\n } finally {\r\n runtimeErrorHandlerStack.pop();\r\n }\r\n}\r\n\r\nexport function effect(fn: EffectCallback): () => void {\r\n const handler = runtimeErrorHandlerStack[runtimeErrorHandlerStack.length - 1] ?? null;\r\n const stop = preactEffect(() =>\r\n withRuntimeErrorHandler(handler, () => {\r\n try {\r\n const cleanup = fn();\r\n if (typeof cleanup !== \"function\") {\r\n return;\r\n }\r\n\r\n return () =>\r\n withRuntimeErrorHandler(handler, () => {\r\n try {\r\n cleanup();\r\n } catch (error) {\r\n reportRuntimeError(error, handler);\r\n }\r\n });\r\n } catch (error) {\r\n reportRuntimeError(error, handler);\r\n }\r\n }),\r\n );\r\n return () => stop();\r\n}\r\n\r\nexport function computed<T>(getter: () => T): Signal<T> {\r\n const version = preactSignal(0);\r\n const source = preactComputed(() => getter()) as PreactSignalLike<T>;\r\n preactEffect(() => {\r\n source.value;\r\n version.value = version.peek() + 1;\r\n });\r\n return new Signal(untracked(() => source.value), source, version);\r\n}\r\n\r\nexport const derived = computed;\r\n\r\nexport function beginHmrStateCapture(restoredValues?: HmrStateSnapshot[]): void {\r\n const restoredByKey = new Map<string, unknown>();\r\n const restoredUnkeyed: unknown[] = [];\r\n\r\n for (const entry of restoredValues ?? []) {\r\n if (entry.key) {\r\n restoredByKey.set(entry.key, entry.value);\r\n continue;\r\n }\r\n\r\n restoredUnkeyed.push(entry.value);\r\n }\r\n\r\n hmrCaptureStack.push({\r\n created: [],\r\n restoredValues,\r\n restoredByKey,\r\n restoredUnkeyed,\r\n cursor: 0,\r\n });\r\n}\r\n\r\nexport function endHmrStateCapture(): Array<{ key?: string; signal: Signal<unknown> }> {\r\n const frame = hmrCaptureStack.pop();\r\n return frame?.created ?? [];\r\n}\r\n","import {\r\n beginHmrStateCapture,\r\n effect,\r\n endHmrStateCapture,\r\n getReactiveProxyVersion,\r\n state,\r\n type Signal,\r\n withRuntimeErrorHandler,\r\n} from \"../core/signals-core\";\r\n\r\nexport type OlovaProps = Record<string, unknown>;\r\ntype ContextMap = Map<unknown, unknown>;\r\nexport type DangerousHtml = {\r\n __dangerousHtml: true;\r\n value: string;\r\n};\r\n\r\nexport type OlovaSlots = Record<string, () => CompiledDescriptor>;\r\n\r\ntype TextBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype HtmlBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype AttrBinding = {\r\n id: string;\r\n attr: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype EventBinding = {\r\n id: string;\r\n event: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype SlotBinding = {\r\n id: string;\r\n name: string;\r\n};\r\n\r\ntype ComponentBinding = {\r\n id: string;\r\n getComponent: () => OlovaComponent;\r\n getProps: () => OlovaProps;\r\n getSlots?: () => OlovaSlots;\r\n};\r\n\r\ntype IfBinding = {\r\n id: string;\r\n get: () => unknown;\r\n trueBranch: () => CompiledDescriptor;\r\n falseBranch?: () => CompiledDescriptor;\r\n};\r\n\r\nexport type CompiledDescriptor = {\r\n template?: string;\r\n textBindings: TextBinding[];\r\n htmlBindings: HtmlBinding[];\r\n attrBindings: AttrBinding[];\r\n eventBindings: EventBinding[];\r\n slotBindings: SlotBinding[];\r\n componentBindings: ComponentBinding[];\r\n ifBindings?: IfBinding[];\r\n build?: () => { fragment: DocumentFragment; nodes: Record<string, Node> };\r\n};\r\n\r\nexport type SetupFn = (\r\n props: OlovaProps,\r\n slots: OlovaSlots,\r\n) => CompiledDescriptor | Promise<CompiledDescriptor>;\r\n\r\nexport interface OlovaComponent {\r\n setup: SetupFn;\r\n __hmrId?: string;\r\n __hmrInstances?: Set<MountedInstance>;\r\n}\r\n\r\nexport type ErrorBoundaryFallback =\r\n | OlovaComponent\r\n | ((error: Error) => CompiledDescriptor);\r\n\r\nconst EMPTY_SLOTS: OlovaSlots = Object.freeze({}) as OlovaSlots;\r\nlet currentSetupContext: ContextMap | null = null;\r\nlet currentLifecycleHooks: LifecycleHooks | null = null;\r\n\r\nconst ERROR_BOUNDARY = Symbol(\"olova.error-boundary\");\r\nconst SUSPENSE_BOUNDARY = Symbol(\"olova.suspense-boundary\");\r\n\r\ntype RuntimeErrorHandler = (error: unknown) => void;\r\ntype LifecycleHooks = {\r\n mount: Array<() => void | (() => void)>;\r\n cleanup: Array<() => void>;\r\n};\r\ntype SuspenseBoundaryController = {\r\n begin(): () => void;\r\n};\r\n\r\ntype ComparablePropEntry = {\r\n value: unknown;\r\n reactiveVersion: number | null;\r\n};\r\ntype ComparablePropsSnapshot = Record<string, ComparablePropEntry>;\r\n\r\ntype MountTarget = HTMLElement | Range;\r\n\r\ntype MountedInstance = {\r\n component: OlovaComponent;\r\n target: MountTarget;\r\n props: OlovaProps;\r\n slots: OlovaSlots;\r\n parentContext?: ContextMap;\r\n disposeDescriptor: () => void;\r\n hmrSignals: Array<{ key?: string; signal: Signal<unknown> }>;\r\n};\r\n\r\nfunction isPromiseLike<T>(value: T | Promise<T>): value is Promise<T> {\r\n return !!value && typeof value === \"object\" && \"then\" in value;\r\n}\r\n\r\nfunction emptyDescriptor(): CompiledDescriptor {\r\n return {\r\n template: \"\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n ifBindings: [],\r\n };\r\n}\r\n\r\nfunction toOlovaError(error: unknown, context: string): Error {\r\n if (error instanceof Error && error.message.startsWith(\"[olova]\")) {\r\n return error;\r\n }\r\n\r\n const original = error instanceof Error ? error : new Error(String(error));\r\n const wrapped = new Error(`[olova] ${context}: ${original.message}`);\r\n (wrapped as Error & { cause?: unknown }).cause = error;\r\n return wrapped;\r\n}\r\n\r\nfunction getBoundaryHandler(context?: ContextMap): RuntimeErrorHandler | null {\r\n return (context?.get(ERROR_BOUNDARY) as RuntimeErrorHandler | undefined) ?? null;\r\n}\r\n\r\nfunction handleRuntimeError(\r\n error: unknown,\r\n contextMessage: string,\r\n context?: ContextMap,\r\n): never | void {\r\n const normalized = toOlovaError(error, contextMessage);\r\n const boundaryHandler = getBoundaryHandler(context);\r\n if (boundaryHandler) {\r\n boundaryHandler(normalized);\r\n return;\r\n }\r\n\r\n throw normalized;\r\n}\r\n\r\nfunction runWithRuntimeErrorHandler<T>(\r\n context: ContextMap | undefined,\r\n action: string,\r\n fn: () => T,\r\n): T | undefined {\r\n try {\r\n return withRuntimeErrorHandler(getBoundaryHandler(context), fn);\r\n } catch (error) {\r\n return handleRuntimeError(error, action, context) as T;\r\n }\r\n}\r\n\r\nfunction requireSetupContext(apiName: string): ContextMap {\r\n if (!currentSetupContext) {\r\n throw new Error(\r\n `[olova] ${apiName}() can only be used during component setup.`,\r\n );\r\n }\r\n\r\n return currentSetupContext;\r\n}\r\n\r\nfunction toText(value: unknown): string {\r\n if (value === null || value === undefined || value === false || value === true) {\r\n return \"\";\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(toText).join(\"\");\r\n }\r\n return String(value);\r\n}\r\n\r\nfunction normalizeClassValue(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n const parts = value\r\n .map((item) => normalizeClassValue(item))\r\n .filter((item): item is string => !!item);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n if (typeof value === \"object\") {\r\n const parts = Object.entries(value as Record<string, unknown>)\r\n .filter(([, enabled]) => !!enabled)\r\n .map(([name]) => name);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nfunction toAttr(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n if (value === true) {\r\n return \"true\";\r\n }\r\n return String(value);\r\n}\r\n\r\nfunction escapeHtml(value: string): string {\r\n return value\r\n .replace(/&/g, \"&\")\r\n .replace(/</g, \"<\")\r\n .replace(/>/g, \">\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\");\r\n}\r\n\r\nfunction isDangerousHtml(value: unknown): value is DangerousHtml {\r\n return !!(\r\n value &&\r\n typeof value === \"object\" &&\r\n \"__dangerousHtml\" in value &&\r\n (value as DangerousHtml).__dangerousHtml === true\r\n );\r\n}\r\n\r\nfunction sanitizeHtml(html: string): string {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = html;\r\n\r\n const blockedElements = new Set([\"script\", \"iframe\", \"object\", \"embed\"]);\r\n const walker = document.createTreeWalker(template.content, NodeFilter.SHOW_ELEMENT);\r\n let current = walker.nextNode() as Element | null;\r\n\r\n while (current) {\r\n const element = current;\r\n current = walker.nextNode() as Element | null;\r\n\r\n if (blockedElements.has(element.tagName.toLowerCase())) {\r\n element.remove();\r\n continue;\r\n }\r\n\r\n for (const attr of Array.from(element.attributes)) {\r\n const attrName = attr.name.toLowerCase();\r\n const attrValue = attr.value.trim();\r\n if (attrName.startsWith(\"on\")) {\r\n element.removeAttribute(attr.name);\r\n continue;\r\n }\r\n\r\n if (\r\n (attrName === \"href\" || attrName === \"src\" || attrName === \"xlink:href\") &&\r\n !isSafeUrl(attrName, attrValue)\r\n ) {\r\n element.removeAttribute(attr.name);\r\n }\r\n }\r\n }\r\n\r\n return template.innerHTML;\r\n}\r\n\r\nfunction toHtml(value: unknown): string {\r\n if (value === null || value === undefined || value === false || value === true) {\r\n return \"\";\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(toHtml).join(\"\");\r\n }\r\n if (isDangerousHtml(value)) {\r\n return value.value;\r\n }\r\n return sanitizeHtml(String(value));\r\n}\r\n\r\nconst SAFE_URL_PROTOCOLS = new Set([\"http\", \"https\", \"mailto\", \"tel\"]);\r\nconst SAFE_IMAGE_DATA_URL_RE =\r\n /^data:image\\/(?:png|gif|jpe?g|webp|avif|bmp);(?:charset=[^;,]+;)?base64,[a-z0-9+/=\\s]+$/i;\r\n\r\nfunction isSafeUrl(attrName: string, value: string): boolean {\r\n const normalized = value.replace(/[\\u0000-\\u001F\\u007F\\s]+/g, \"\");\r\n if (!normalized) {\r\n return true;\r\n }\r\n\r\n if (\r\n normalized.startsWith(\"#\") ||\r\n normalized.startsWith(\"/\") ||\r\n normalized.startsWith(\"./\") ||\r\n normalized.startsWith(\"../\") ||\r\n normalized.startsWith(\"?\")\r\n ) {\r\n return true;\r\n }\r\n\r\n const match = normalized.match(/^([a-z0-9+.-]+):/i);\r\n if (!match) {\r\n return true;\r\n }\r\n\r\n const protocol = match[1].toLowerCase();\r\n if (SAFE_URL_PROTOCOLS.has(protocol)) {\r\n return true;\r\n }\r\n\r\n return protocol === \"data\" && attrName === \"src\" && SAFE_IMAGE_DATA_URL_RE.test(normalized);\r\n}\r\n\r\nfunction shallowEqual(a?: OlovaProps, b?: OlovaProps): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction shallowEqualSlots(a?: OlovaSlots, b?: OlovaSlots): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction createComparablePropsSnapshot(props: OlovaProps): ComparablePropsSnapshot {\r\n return Object.fromEntries(\r\n Object.entries(props).map(([key, value]) => [\r\n key,\r\n {\r\n value,\r\n reactiveVersion: getReactiveProxyVersion(value),\r\n },\r\n ]),\r\n );\r\n}\r\n\r\nfunction shallowComparablePropsEqual(\r\n snapshot: ComparablePropsSnapshot | undefined,\r\n props: OlovaProps | undefined,\r\n): boolean {\r\n if (!snapshot && !props) {\r\n return true;\r\n }\r\n\r\n if (!snapshot || !props) {\r\n return false;\r\n }\r\n\r\n const keys = Object.keys(snapshot);\r\n const propKeys = Object.keys(props);\r\n if (keys.length !== propKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of keys) {\r\n if (!(key in props)) {\r\n return false;\r\n }\r\n\r\n const entry = snapshot[key];\r\n const nextValue = props[key];\r\n if (!Object.is(entry.value, nextValue)) {\r\n return false;\r\n }\r\n\r\n if (entry.reactiveVersion !== getReactiveProxyVersion(nextValue)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n\r\nfunction insertFragmentIntoRange(\r\n range: Range,\r\n fragment: DocumentFragment,\r\n): void {\r\n const nodes = Array.from(fragment.childNodes);\r\n range.deleteContents();\r\n\r\n if (nodes.length === 0) {\r\n return;\r\n }\r\n\r\n range.insertNode(fragment);\r\n const first = nodes[0];\r\n const last = nodes[nodes.length - 1];\r\n range.setStartBefore(first);\r\n range.setEndAfter(last);\r\n}\r\n\r\nfunction bindJsxEventsInRange(range: Range): () => void {\r\n const root =\r\n range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE\r\n ? range.commonAncestorContainer\r\n : range.commonAncestorContainer.parentNode;\r\n\r\n if (!root) {\r\n return () => {};\r\n }\r\n\r\n const globalObj = globalThis as typeof globalThis & {\r\n __olovaJsxHandlers?: Map<string, unknown>;\r\n };\r\n const handlers = globalObj.__olovaJsxHandlers;\r\n if (!handlers) {\r\n return () => {};\r\n }\r\n\r\n const listeners: Array<() => void> = [];\r\n const handlerIds = new Set<string>();\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\r\n let current = walker.nextNode() as Element | null;\r\n\r\n while (current) {\r\n let intersects = false;\r\n try {\r\n intersects = range.intersectsNode(current);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (intersects) {\r\n const element = current;\r\n for (const attr of Array.from(current.attributes)) {\r\n if (!attr.name.startsWith(\"data-o-jsx-\")) {\r\n continue;\r\n }\r\n\r\n const eventName = attr.name.slice(\"data-o-jsx-\".length);\r\n const handlerId = attr.value;\r\n handlerIds.add(handlerId);\r\n const listener: EventListener = (event) => {\r\n const handler = handlers.get(handlerId);\r\n if (typeof handler === \"function\") {\r\n handler(event);\r\n }\r\n };\r\n\r\n element.addEventListener(eventName, listener);\r\n element.removeAttribute(`on${eventName}`);\r\n listeners.push(() => element.removeEventListener(eventName, listener));\r\n }\r\n }\r\n\r\n current = walker.nextNode() as Element | null;\r\n }\r\n\r\n return () => {\r\n for (const cleanup of listeners) {\r\n cleanup();\r\n }\r\n\r\n for (const handlerId of handlerIds) {\r\n handlers.delete(handlerId);\r\n }\r\n };\r\n}\r\n\r\nfunction replaceTokenWithTextNode(root: Node, token: string): Text | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const remainder = textNode.splitText(index);\r\n const after = remainder.splitText(token.length);\r\n const parent = remainder.parentNode;\r\n if (!parent) {\r\n return null;\r\n }\r\n\r\n const dynamic = document.createTextNode(\"\");\r\n parent.insertBefore(dynamic, after);\r\n parent.removeChild(remainder);\r\n return dynamic;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtToken(root: Node, token: string): Range | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtTokenWithinRange(\r\n hostRange: Range,\r\n token: string,\r\n): Range | null {\r\n const root = hostRange.commonAncestorContainer;\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index < 0) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n let intersects = false;\r\n try {\r\n intersects = hostRange.intersectsNode(textNode);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (!intersects) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction resolveTokenRange(\r\n target: HTMLElement | Range,\r\n token: string,\r\n): Range | null {\r\n return target instanceof HTMLElement\r\n ? createRangeAtToken(target, token)\r\n : createRangeAtTokenWithinRange(target, token);\r\n}\r\n\r\nfunction createLifecycleHooks(): LifecycleHooks {\r\n return {\r\n mount: [],\r\n cleanup: [],\r\n };\r\n}\r\n\r\nfunction flushLifecycleHooks(hooks: LifecycleHooks, context: ContextMap): () => void {\r\n for (const mountHook of hooks.mount) {\r\n const cleanup = runWithRuntimeErrorHandler(\r\n context,\r\n \"Failed to run onMount() callback\",\r\n mountHook,\r\n );\r\n if (typeof cleanup === \"function\") {\r\n hooks.cleanup.push(cleanup);\r\n }\r\n }\r\n\r\n return () => {\r\n for (let index = hooks.cleanup.length - 1; index >= 0; index -= 1) {\r\n runWithRuntimeErrorHandler(\r\n context,\r\n \"Failed to run cleanup callback\",\r\n hooks.cleanup[index],\r\n );\r\n }\r\n };\r\n}\r\n\r\nfunction createDescriptorEffect(context: ContextMap, fn: () => void | (() => void)): () => void {\r\n const stop = runWithRuntimeErrorHandler(\r\n context,\r\n \"Failed to create reactive binding\",\r\n () => effect(fn),\r\n );\r\n return typeof stop === \"function\" ? stop : () => {};\r\n}\r\n\r\nfunction mountDescriptor(\r\n descriptor: CompiledDescriptor,\r\n target: HTMLElement | Range,\r\n slots: OlovaSlots,\r\n context: ContextMap,\r\n): () => void {\r\n let fragment: DocumentFragment;\r\n let nodes: Record<string, Node> | null = null;\r\n\r\n if (descriptor.build) {\r\n const buildResult = descriptor.build();\r\n fragment = buildResult.fragment;\r\n nodes = buildResult.nodes;\r\n } else {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = descriptor.template ? descriptor.template.trim() : \"\";\r\n fragment = template.content;\r\n }\r\n\r\n const cleanups: Array<() => void> = [];\r\n\r\n for (const binding of descriptor.textBindings) {\r\n const token = `__O_TEXT_${binding.id}__`;\r\n const textNode =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as Text)\r\n : replaceTokenWithTextNode(fragment, token);\r\n if (!textNode) {\r\n continue;\r\n }\r\n\r\n const stop = createDescriptorEffect(context, () => {\r\n textNode.data = toText(binding.get());\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n\r\n for (const binding of descriptor.attrBindings) {\r\n const token = `__O_ATTR_${binding.id}__`;\r\n const elements =\r\n nodes && nodes[binding.id]\r\n ? [nodes[binding.id] as HTMLElement]\r\n : Array.from(fragment.querySelectorAll<HTMLElement>(\"*\")).filter(\r\n (element) => element.getAttribute(binding.attr) === token,\r\n );\r\n\r\n for (const element of elements) {\r\n const stop = createDescriptorEffect(context, () => {\r\n const next =\r\n binding.attr === \"class\"\r\n ? normalizeClassValue(binding.get())\r\n : toAttr(binding.get());\r\n if (next === null) {\r\n element.removeAttribute(binding.attr);\r\n return;\r\n }\r\n\r\n element.setAttribute(binding.attr, next);\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n }\r\n\r\n for (const binding of descriptor.eventBindings) {\r\n const selector = `[data-o-on-${binding.event}=\"${binding.id}\"]`;\r\n const element =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as HTMLElement)\r\n : fragment.querySelector<HTMLElement>(selector);\r\n if (!element) {\r\n continue;\r\n }\r\n\r\n if (!nodes) element.removeAttribute(`data-o-on-${binding.event}`);\r\n\r\n let currentHandler: unknown;\r\n const stop = createDescriptorEffect(context, () => {\r\n currentHandler = binding.get();\r\n });\r\n\r\n const listener: EventListener = (event) => {\r\n if (typeof currentHandler === \"function\") {\r\n currentHandler(event);\r\n }\r\n };\r\n\r\n element.addEventListener(binding.event, listener);\r\n\r\n cleanups.push(() => {\r\n stop();\r\n element.removeEventListener(binding.event, listener);\r\n });\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren(fragment);\r\n } else {\r\n insertFragmentIntoRange(target, fragment);\r\n }\r\n\r\n for (const binding of descriptor.htmlBindings) {\r\n const token = `__O_HTML_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let lastHtml = \"__OLOVA_INIT__\";\r\n let cleanupJsxEvents = () => {};\r\n const stop = createDescriptorEffect(context, () => {\r\n const nextHtml = toHtml(binding.get());\r\n if (nextHtml === lastHtml) {\r\n return;\r\n }\r\n\r\n lastHtml = nextHtml;\r\n cleanupJsxEvents();\r\n const htmlTemplate = document.createElement(\"template\");\r\n htmlTemplate.innerHTML = nextHtml;\r\n insertFragmentIntoRange(range, htmlTemplate.content);\r\n cleanupJsxEvents = bindJsxEventsInRange(range);\r\n });\r\n\r\n cleanups.push(() => {\r\n cleanupJsxEvents();\r\n stop();\r\n });\r\n }\r\n\r\n for (const binding of descriptor.slotBindings) {\r\n const token = `__O_SLOT_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n const slotFactory = slots[binding.name];\r\n if (!slotFactory) {\r\n range.deleteContents();\r\n continue;\r\n }\r\n\r\n const slotDescriptor = runWithRuntimeErrorHandler(\r\n context,\r\n `Failed to render slot \"${binding.name}\"`,\r\n slotFactory,\r\n );\r\n if (!slotDescriptor) {\r\n range.deleteContents();\r\n continue;\r\n }\r\n const disposeSlot = mountDescriptor(slotDescriptor, range, slots, context);\r\n cleanups.push(disposeSlot);\r\n }\r\n\r\n for (const binding of descriptor.componentBindings) {\r\n const token = `__O_COMP_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeChild = () => {};\r\n let lastComponent: OlovaComponent | null = null;\r\n let lastProps: ComparablePropsSnapshot | undefined;\r\n let lastSlots: OlovaSlots | undefined;\r\n\r\n const stop = createDescriptorEffect(context, () => {\r\n const nextComponent = binding.getComponent();\r\n const nextProps = binding.getProps();\r\n const nextSlots = binding.getSlots ? binding.getSlots() : EMPTY_SLOTS;\r\n\r\n if (\r\n lastComponent === nextComponent &&\r\n shallowComparablePropsEqual(lastProps, nextProps) &&\r\n shallowEqualSlots(lastSlots, nextSlots)\r\n ) {\r\n return;\r\n }\r\n\r\n disposeChild();\r\n disposeChild = mount(nextComponent, range, nextProps, nextSlots, context);\r\n lastComponent = nextComponent;\r\n lastProps = createComparablePropsSnapshot(nextProps);\r\n lastSlots = nextSlots;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeChild();\r\n });\r\n }\r\n\r\n if (descriptor.ifBindings) {\r\n for (const binding of descriptor.ifBindings) {\r\n const token = `__O_IF_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeBranch = () => {};\r\n let lastCondition: boolean | undefined = undefined;\r\n\r\n const stop = createDescriptorEffect(context, () => {\r\n const condition = !!binding.get();\r\n if (condition === lastCondition) {\r\n return;\r\n }\r\n\r\n disposeBranch();\r\n \r\n if (condition) {\r\n const branchDescriptor = runWithRuntimeErrorHandler(\r\n context,\r\n \"Failed to render conditional branch\",\r\n binding.trueBranch,\r\n );\r\n if (!branchDescriptor) {\r\n range.deleteContents();\r\n disposeBranch = () => {};\r\n lastCondition = condition;\r\n return;\r\n }\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else if (binding.falseBranch) {\r\n const branchDescriptor = runWithRuntimeErrorHandler(\r\n context,\r\n \"Failed to render conditional fallback branch\",\r\n binding.falseBranch,\r\n );\r\n if (!branchDescriptor) {\r\n range.deleteContents();\r\n disposeBranch = () => {};\r\n lastCondition = condition;\r\n return;\r\n }\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else {\r\n range.deleteContents();\r\n disposeBranch = () => {};\r\n }\r\n\r\n lastCondition = condition;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeBranch();\r\n });\r\n }\r\n }\r\n\r\n return () => {\r\n for (const cleanup of cleanups) {\r\n cleanup();\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren();\r\n return;\r\n }\r\n\r\n target.deleteContents();\r\n };\r\n}\r\n\r\nfunction registerMountedInstance(instance: MountedInstance): void {\r\n const instances =\r\n instance.component.__hmrInstances ?? (instance.component.__hmrInstances = new Set());\r\n instances.add(instance);\r\n}\r\n\r\nfunction unregisterMountedInstance(instance: MountedInstance): void {\r\n instance.component.__hmrInstances?.delete(instance);\r\n}\r\n\r\nfunction renderMountedInstance(\r\n instance: MountedInstance,\r\n restoredValues?: Array<{ key?: string; value: unknown }>,\r\n): void {\r\n const context = new Map(instance.parentContext ?? []);\r\n const previousContext = currentSetupContext;\r\n const previousLifecycleHooks = currentLifecycleHooks;\r\n const lifecycleHooks = createLifecycleHooks();\r\n currentSetupContext = context;\r\n currentLifecycleHooks = lifecycleHooks;\r\n beginHmrStateCapture(restoredValues);\r\n\r\n const finalizeRender = (descriptor: CompiledDescriptor) => {\r\n const disposeDescriptor = mountDescriptor(\r\n descriptor,\r\n instance.target,\r\n instance.slots,\r\n context,\r\n );\r\n const disposeLifecycle = flushLifecycleHooks(lifecycleHooks, context);\r\n instance.disposeDescriptor = () => {\r\n disposeLifecycle();\r\n disposeDescriptor();\r\n };\r\n };\r\n\r\n try {\r\n const descriptor = runWithRuntimeErrorHandler(\r\n context,\r\n \"Failed to render component setup\",\r\n () => instance.component.setup(instance.props, instance.slots),\r\n );\r\n if (!descriptor) {\r\n instance.disposeDescriptor = () => {};\r\n instance.hmrSignals = endHmrStateCapture();\r\n return;\r\n }\r\n if (isPromiseLike(descriptor)) {\r\n const suspenseBoundary = context.get(SUSPENSE_BOUNDARY) as\r\n | SuspenseBoundaryController\r\n | undefined;\r\n const settleSuspense = suspenseBoundary?.begin() ?? (() => {});\r\n let disposed = false;\r\n\r\n instance.disposeDescriptor = () => {\r\n disposed = true;\r\n settleSuspense();\r\n };\r\n instance.hmrSignals = endHmrStateCapture();\r\n\r\n descriptor\r\n .then((resolvedDescriptor) => {\r\n if (disposed) {\r\n return;\r\n }\r\n\r\n settleSuspense();\r\n finalizeRender(resolvedDescriptor);\r\n })\r\n .catch((error) => {\r\n settleSuspense();\r\n if (disposed) {\r\n return;\r\n }\r\n\r\n handleRuntimeError(error, \"Failed to resolve async component\", context);\r\n });\r\n return;\r\n }\r\n\r\n finalizeRender(descriptor);\r\n instance.hmrSignals = endHmrStateCapture();\r\n } catch (error) {\r\n endHmrStateCapture();\r\n throw error;\r\n } finally {\r\n currentSetupContext = previousContext;\r\n currentLifecycleHooks = previousLifecycleHooks;\r\n }\r\n}\r\n\r\nfunction collectHmrSignalValues(\r\n instance: MountedInstance,\r\n): Array<{ key?: string; value: unknown }> {\r\n return instance.hmrSignals.map(({ key, signal }) => ({\r\n key,\r\n value: signal.peek(),\r\n }));\r\n}\r\n\r\nexport function replaceComponent(\r\n current: OlovaComponent,\r\n next: OlovaComponent,\r\n): void {\r\n const instances = current.__hmrInstances;\r\n\r\n if (!instances || instances.size === 0) {\r\n current.setup = next.setup;\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n return;\r\n }\r\n\r\n const snapshots = Array.from(instances, (instance) => ({\r\n instance,\r\n restoredValues: collectHmrSignalValues(instance),\r\n }));\r\n\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n\r\n try {\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = next;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n } catch (error) {\r\n next.__hmrInstances = undefined;\r\n current.__hmrInstances = instances;\r\n\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = current;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n\r\n console.error(\"[olova] HMR update failed. Restored previous component.\", error);\r\n return;\r\n }\r\n}\r\n\r\nexport function defineComponent(setup: SetupFn, hmrId?: string): OlovaComponent {\r\n return { setup, __hmrId: hmrId };\r\n}\r\n\r\nfunction isOlovaComponent(value: ErrorBoundaryFallback): value is OlovaComponent {\r\n return typeof value === \"object\" && value !== null && \"setup\" in value;\r\n}\r\n\r\nexport function onMount(fn: () => void | (() => void)): void {\r\n if (!currentLifecycleHooks) {\r\n throw new Error(\"[olova] onMount() can only be used during component setup.\");\r\n }\r\n\r\n currentLifecycleHooks.mount.push(fn);\r\n}\r\n\r\nexport function onCleanup(fn: () => void): void {\r\n if (!currentLifecycleHooks) {\r\n throw new Error(\"[olova] onCleanup() can only be used during component setup.\");\r\n }\r\n\r\n currentLifecycleHooks.cleanup.push(fn);\r\n}\r\n\r\nexport function createErrorBoundary(\r\n component: OlovaComponent,\r\n fallback: ErrorBoundaryFallback,\r\n): OlovaComponent {\r\n return defineComponent((props, slots) => {\r\n const errorState = state<Error | null>(null);\r\n setContext(ERROR_BOUNDARY, (error: Error) => {\r\n errorState.value = error;\r\n });\r\n\r\n const renderFallback = (): CompiledDescriptor => {\r\n const error = errorState.value ?? new Error(\"[olova] Unknown boundary error.\");\r\n if (isOlovaComponent(fallback)) {\r\n return {\r\n template: \"__O_COMP_boundary_fallback__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"boundary_fallback\",\r\n getComponent: () => fallback,\r\n getProps: () => ({ error }),\r\n },\r\n ],\r\n ifBindings: [],\r\n };\r\n }\r\n\r\n return fallback(error);\r\n };\r\n\r\n return {\r\n template: \"__O_IF_boundary__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [],\r\n ifBindings: [\r\n {\r\n id: \"boundary\",\r\n get: () => errorState.value === null,\r\n trueBranch: () => ({\r\n template: \"__O_COMP_boundary_child__\",\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [],\r\n eventBindings: [],\r\n slotBindings: [],\r\n componentBindings: [\r\n {\r\n id: \"boundary_child\",\r\n getComponent: () => component,\r\n getProps: () => props,\r\n getSlots: () => slots,\r\n },\r\n ],\r\n ifBindings: [],\r\n }),\r\n falseBranch: renderFallback,\r\n },\r\n ],\r\n };\r\n }, component.__hmrId ? `${component.__hmrId}:boundary` : undefined);\r\n}\r\n\r\nexport const Suspense = defineComponent((_props, slots) => {\r\n const pending = state(0);\r\n\r\n setContext<SuspenseBoundaryController>(SUSPENSE_BOUNDARY, {\r\n begin() {\r\n pending.value += 1;\r\n let settled = false;\r\n\r\n return () => {\r\n if (settled) {\r\n return;\r\n }\r\n\r\n settled = true;\r\n pending.value = Math.max(0, pending.value - 1);\r\n };\r\n },\r\n });\r\n\r\n return {\r\n template:\r\n `<div style=\"__O_ATTR_default_style__\">__O_SLOT_default__</div>` +\r\n `<div style=\"__O_ATTR_fallback_style__\">__O_SLOT_fallback__</div>`,\r\n textBindings: [],\r\n htmlBindings: [],\r\n attrBindings: [\r\n {\r\n id: \"default_style\",\r\n attr: \"style\",\r\n get: () => (pending.value === 0 ? null : \"display:none\"),\r\n },\r\n {\r\n id: \"fallback_style\",\r\n attr: \"style\",\r\n get: () => (pending.value > 0 ? null : \"display:none\"),\r\n },\r\n ],\r\n eventBindings: [],\r\n slotBindings: [\r\n { id: \"default\", name: \"default\" },\r\n { id: \"fallback\", name: \"fallback\" },\r\n ],\r\n componentBindings: [],\r\n ifBindings: [],\r\n };\r\n});\r\n\r\nexport function dangerouslySetHtml(value: unknown): DangerousHtml {\r\n return {\r\n __dangerousHtml: true,\r\n value: toText(value),\r\n };\r\n}\r\n\r\nexport function setContext<T>(key: unknown, value: T): T {\r\n const context = requireSetupContext(\"setContext\");\r\n context.set(key, value);\r\n return value;\r\n}\r\n\r\nexport function getContext<T>(key: unknown): T {\r\n const context = requireSetupContext(\"getContext\");\r\n return context.get(key) as T;\r\n}\r\n\r\nexport function hasContext(key: unknown): boolean {\r\n const context = requireSetupContext(\"hasContext\");\r\n return context.has(key);\r\n}\r\n\r\nexport function mount(\r\n component: OlovaComponent,\r\n target: HTMLElement | Range,\r\n props: OlovaProps = {},\r\n slots: OlovaSlots = EMPTY_SLOTS,\r\n parentContext?: ContextMap,\r\n): () => void {\r\n const instance: MountedInstance = {\r\n component,\r\n target,\r\n props,\r\n slots,\r\n parentContext,\r\n disposeDescriptor: () => {},\r\n hmrSignals: [],\r\n };\r\n\r\n registerMountedInstance(instance);\r\n try {\r\n renderMountedInstance(instance);\r\n } catch (error) {\r\n unregisterMountedInstance(instance);\r\n throw toOlovaError(error, \"Failed to mount component\");\r\n }\r\n\r\n return () => {\r\n unregisterMountedInstance(instance);\r\n instance.disposeDescriptor();\r\n };\r\n}\r\n\r\nexport function createApp(root: OlovaComponent): {\r\n mount(target: string | HTMLElement): () => void;\r\n} {\r\n return {\r\n mount(target) {\r\n const element =\r\n typeof target === \"string\"\r\n ? (document.querySelector(target) as HTMLElement | null)\r\n : target;\r\n\r\n if (!element) {\r\n throw new Error(`[olova] Target not found: ${String(target)}`);\r\n }\r\n\r\n return mount(root, element);\r\n },\r\n };\r\n}\r\n","import { effect, state } from \"../core/signals-core\";\r\nimport type { SignalState } from \"../core/signals-core\";\r\n\r\ntype AnyState = SignalState<unknown>;\r\ntype PersistTarget = \"localStorage\";\r\ntype GlobalStateOptions = {\r\n persist?: PersistTarget;\r\n};\r\n\r\nconst globalStates = new Map<string, AnyState>();\r\nconst persistCleanups = new Map<string, () => void>();\r\nconst persistTargets = new Map<string, PersistTarget>();\r\n\r\nfunction storageKey(name: string): string {\r\n return `olova:global:${name}`;\r\n}\r\n\r\nfunction getStorage(target: PersistTarget): Storage | null {\r\n if (typeof window === \"undefined\") {\r\n return null;\r\n }\r\n\r\n if (target === \"localStorage\") {\r\n return window.localStorage;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction readPersisted(name: string, target: PersistTarget): unknown {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n const raw = storage.getItem(storageKey(name));\r\n if (raw == null) {\r\n return undefined;\r\n }\r\n return JSON.parse(raw);\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction setupPersistence(name: string, stateRef: AnyState, target: PersistTarget) {\r\n const currentTarget = persistTargets.get(name);\r\n if (currentTarget === target && persistCleanups.has(name)) {\r\n return;\r\n }\r\n\r\n const previousCleanup = persistCleanups.get(name);\r\n if (previousCleanup) {\r\n previousCleanup();\r\n }\r\n\r\n persistTargets.set(name, target);\r\n\r\n const stop = effect(() => {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return;\r\n }\r\n\r\n try {\r\n storage.setItem(storageKey(name), JSON.stringify(stateRef.value));\r\n } catch {\r\n // Ignore storage quota/serialization errors.\r\n }\r\n });\r\n\r\n persistCleanups.set(name, stop);\r\n}\r\n\r\nfunction ensureState(\r\n name: string,\r\n initial?: unknown,\r\n options?: GlobalStateOptions,\r\n): AnyState {\r\n const existing = globalStates.get(name);\r\n if (existing) {\r\n if (options?.persist) {\r\n if (existing.value === undefined) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n existing.value = persisted;\r\n }\r\n }\r\n setupPersistence(name, existing, options.persist);\r\n }\r\n\r\n if (existing.value === undefined && initial !== undefined) {\r\n existing.value = initial;\r\n }\r\n\r\n return existing;\r\n }\r\n\r\n let resolvedInitial = initial;\r\n if (options?.persist) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n resolvedInitial = persisted;\r\n }\r\n }\r\n\r\n const created = state(resolvedInitial) as AnyState;\r\n globalStates.set(name, created);\r\n\r\n if (options?.persist) {\r\n setupPersistence(name, created, options.persist);\r\n }\r\n\r\n return created;\r\n}\r\n\r\nexport const global = {\r\n state(name: string, initial?: unknown, options?: GlobalStateOptions) {\r\n return ensureState(name, initial, options);\r\n },\r\n get(name: string) {\r\n return ensureState(name);\r\n },\r\n has(name: string) {\r\n return globalStates.has(name);\r\n },\r\n};\r\n"]}
|
package/dist/global.d.ts
CHANGED
package/dist/global.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { effect as effect$1, signal } from '@preact/signals-core';
|
|
2
2
|
|
|
3
3
|
// core/signals-core.ts
|
|
4
|
-
var
|
|
4
|
+
var rawToProxyByOwner = /* @__PURE__ */ new WeakMap();
|
|
5
5
|
var proxyToRaw = /* @__PURE__ */ new WeakMap();
|
|
6
6
|
var proxyOwner = /* @__PURE__ */ new WeakMap();
|
|
7
7
|
var hmrCaptureStack = [];
|
|
8
|
+
var runtimeErrorHandlerStack = [];
|
|
8
9
|
function isObject(value) {
|
|
9
10
|
return typeof value === "object" && value !== null;
|
|
10
11
|
}
|
|
@@ -40,6 +41,9 @@ var Signal = class {
|
|
|
40
41
|
notify() {
|
|
41
42
|
this.version.value = this.version.peek() + 1;
|
|
42
43
|
}
|
|
44
|
+
peekVersion() {
|
|
45
|
+
return this.version.peek();
|
|
46
|
+
}
|
|
43
47
|
subscribe(fn) {
|
|
44
48
|
return this.source.subscribe(fn);
|
|
45
49
|
}
|
|
@@ -63,7 +67,8 @@ var Signal = class {
|
|
|
63
67
|
return this.proxy;
|
|
64
68
|
}
|
|
65
69
|
wrapObject(value) {
|
|
66
|
-
const
|
|
70
|
+
const ownedProxyMap = rawToProxyByOwner.get(value);
|
|
71
|
+
const existing = ownedProxyMap?.get(this);
|
|
67
72
|
if (existing) {
|
|
68
73
|
return existing;
|
|
69
74
|
}
|
|
@@ -90,7 +95,11 @@ var Signal = class {
|
|
|
90
95
|
return changed;
|
|
91
96
|
}
|
|
92
97
|
});
|
|
93
|
-
|
|
98
|
+
const nextOwnedProxyMap = ownedProxyMap ?? /* @__PURE__ */ new WeakMap();
|
|
99
|
+
nextOwnedProxyMap.set(this, proxy);
|
|
100
|
+
if (!ownedProxyMap) {
|
|
101
|
+
rawToProxyByOwner.set(value, nextOwnedProxyMap);
|
|
102
|
+
}
|
|
94
103
|
proxyToRaw.set(proxy, value);
|
|
95
104
|
proxyOwner.set(proxy, this);
|
|
96
105
|
return proxy;
|
|
@@ -120,8 +129,45 @@ function state(initial, hmrKey) {
|
|
|
120
129
|
}
|
|
121
130
|
return signal;
|
|
122
131
|
}
|
|
123
|
-
function
|
|
124
|
-
|
|
132
|
+
function reportRuntimeError(error, handler) {
|
|
133
|
+
if (handler) {
|
|
134
|
+
handler(error);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
function withRuntimeErrorHandler(handler, fn) {
|
|
140
|
+
if (!handler) {
|
|
141
|
+
return fn();
|
|
142
|
+
}
|
|
143
|
+
runtimeErrorHandlerStack.push(handler);
|
|
144
|
+
try {
|
|
145
|
+
return fn();
|
|
146
|
+
} finally {
|
|
147
|
+
runtimeErrorHandlerStack.pop();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function effect(fn) {
|
|
151
|
+
const handler = runtimeErrorHandlerStack[runtimeErrorHandlerStack.length - 1] ?? null;
|
|
152
|
+
const stop = effect$1(
|
|
153
|
+
() => withRuntimeErrorHandler(handler, () => {
|
|
154
|
+
try {
|
|
155
|
+
const cleanup = fn();
|
|
156
|
+
if (typeof cleanup !== "function") {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
return () => withRuntimeErrorHandler(handler, () => {
|
|
160
|
+
try {
|
|
161
|
+
cleanup();
|
|
162
|
+
} catch (error) {
|
|
163
|
+
reportRuntimeError(error, handler);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
} catch (error) {
|
|
167
|
+
reportRuntimeError(error, handler);
|
|
168
|
+
}
|
|
169
|
+
})
|
|
170
|
+
);
|
|
125
171
|
return () => stop();
|
|
126
172
|
}
|
|
127
173
|
|
|
@@ -181,9 +227,6 @@ function setupPersistence(name, stateRef, target) {
|
|
|
181
227
|
function ensureState(name, initial, options) {
|
|
182
228
|
const existing = globalStates.get(name);
|
|
183
229
|
if (existing) {
|
|
184
|
-
if (existing.value === void 0 && initial !== void 0) {
|
|
185
|
-
existing.value = initial;
|
|
186
|
-
}
|
|
187
230
|
if (options?.persist) {
|
|
188
231
|
if (existing.value === void 0) {
|
|
189
232
|
const persisted = readPersisted(name, options.persist);
|
|
@@ -193,6 +236,9 @@ function ensureState(name, initial, options) {
|
|
|
193
236
|
}
|
|
194
237
|
setupPersistence(name, existing, options.persist);
|
|
195
238
|
}
|
|
239
|
+
if (existing.value === void 0 && initial !== void 0) {
|
|
240
|
+
existing.value = initial;
|
|
241
|
+
}
|
|
196
242
|
return existing;
|
|
197
243
|
}
|
|
198
244
|
let resolvedInitial = initial;
|
package/dist/global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../core/signals-core.ts","../runtime/global.ts"],"names":["preactSignal","preactEffect"],"mappings":";;;AA2BA,IAAM,UAAA,uBAAiB,OAAA,EAAwB;AAC/C,IAAM,UAAA,uBAAiB,OAAA,EAAwB;AAC/C,IAAM,UAAA,uBAAiB,OAAA,EAAiC;AACxD,IAAM,kBAAqC,EAAC;AAE5C,SAAS,SAAS,KAAA,EAAiC;AACjD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEA,SAAS,YAAe,KAAA,EAAa;AACnC,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAQ,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,IAAK,KAAA;AACnC;AAaO,IAAM,SAAN,MAAgB;AAAA,EACJ,MAAA;AAAA,EACA,OAAA;AAAA,EACT,KAAA,GAAkB,IAAA;AAAA,EAE1B,WAAA,CACE,OAAA,EACA,MAAA,EACA,OAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA,IAAWA,MAAA,CAAa,OAAO,CAAA;AAC7C,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA,IAAWA,MAAA,CAAa,CAAC,CAAA;AAAA,EAC1C;AAAA,EAEA,IAAI,KAAA,GAAW;AACb,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAA;AACb,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,EAChD;AAAA,EAEA,IAAI,MAAM,IAAA,EAAS;AACjB,IAAA,MAAM,YAAA,GAAe,YAAY,IAAI,CAAA;AACrC,IAAA,IAAI,OAAO,EAAA,CAAG,IAAA,CAAK,OAAO,IAAA,EAAK,EAAG,YAAY,CAAA,EAAG;AAC/C,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,OAAO,KAAA,GAAQ,YAAA;AAAA,EACtB;AAAA,EAEA,IAAA,GAAU;AACR,IAAA,OAAO,IAAA,CAAK,OAAO,IAAA,EAAK;AAAA,EAC1B;AAAA,EAEA,MAAA,GAAe;AACb,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,MAAK,GAAI,CAAA;AAAA,EAC7C;AAAA,EAEA,UAAU,EAAA,EAAoC;AAC5C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,EAAE,CAAA;AAAA,EACjC;AAAA,EAEA,OAAA,GAAa;AACX,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EAC1B;AAAA,EAEA,MAAA,GAAY;AACV,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AAAA,EAEQ,iBAAiB,KAAA,EAAa;AACpC,IAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AACpB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAK,KAAA,IAAS,UAAA,CAAW,IAAI,IAAA,CAAK,KAAe,MAAM,KAAA,EAAO;AAChE,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACd;AAEA,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AAClC,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEQ,WAAW,KAAA,EAAuB;AACxC,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AACrC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,KAAA,EAAsB;AAAA,MAC5C,GAAA,EAAK,CAAC,MAAA,EAAQ,GAAA,EAAK,QAAA,KAAa;AAC9B,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,KAAK,QAAQ,CAAA;AAChD,QAAA,OAAO,SAAS,MAAM,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,GAAI,MAAA;AAAA,MACtD,CAAA;AAAA,MACA,GAAA,EAAK,CAAC,MAAA,EAAQ,GAAA,EAAK,MAAM,QAAA,KAAa;AACpC,QAAA,MAAM,YAAA,GAAe,YAAY,IAAI,CAAA;AACrC,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,KAAK,QAAQ,CAAA;AAClD,QAAA,MAAM,UAAU,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,GAAA,EAAK,cAAc,QAAQ,CAAA;AAE/D,QAAA,IAAI,WAAW,CAAC,MAAA,CAAO,EAAA,CAAG,QAAA,EAAU,YAAY,CAAA,EAAG;AACjD,UAAA,IAAA,CAAK,MAAA,EAAO;AAAA,QACd;AAEA,QAAA,OAAO,OAAA;AAAA,MACT,CAAA;AAAA,MACA,cAAA,EAAgB,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAC/B,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,GAAG,CAAA;AACtC,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,cAAA,CAAe,MAAA,EAAQ,GAAG,CAAA;AAElD,QAAA,IAAI,UAAU,OAAA,EAAS;AACrB,UAAA,IAAA,CAAK,MAAA,EAAO;AAAA,QACd;AAEA,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,KACD,CAAA;AAED,IAAA,UAAA,CAAW,GAAA,CAAI,OAAO,KAAK,CAAA;AAC3B,IAAA,UAAA,CAAW,GAAA,CAAI,OAAO,KAAK,CAAA;AAC3B,IAAA,UAAA,CAAW,GAAA,CAAI,OAAO,IAAuB,CAAA;AAC7C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,WAAW,KAAA,EAAuB;AACxC,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AAClC,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,EAC9B;AACF,CAAA;AAIO,SAAS,KAAA,CAAS,SAAY,MAAA,EAA4B;AAC/D,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,eAAA,CAAgB,MAAA,GAAS,CAAC,CAAA;AACxD,EAAA,IAAI,WAAA,GAAc,OAAA;AAElB,EAAA,IAAI,KAAA,EAAO;AACT,IAEA,IAAW,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,gBAAgB,MAAA,EAAQ;AACtD,MAAA,WAAA,GAAc,KAAA,CAAM,eAAA,CAAgB,KAAA,CAAM,MAAM,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,WAAW,CAAA;AAErC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,KAAA,CAAM,QAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,MAAA,EAAQ,QAAmC,CAAA;AACrE,IAAkD;AAChD,MAAA,KAAA,CAAM,MAAA,IAAU,CAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,MAAA,CACd,IACA,OAAA,EACY;AACZ,EAAA,MAAM,IAAA,GAAOC,QAAA,CAAa,MAAM,EAAA,EAAI,CAAA;AACpC,EAAA,OAAO,MAAM,IAAA,EAAK;AACpB;;;AClMA,IAAM,YAAA,uBAAmB,GAAA,EAAsB;AAC/C,IAAM,eAAA,uBAAsB,GAAA,EAAwB;AACpD,IAAM,cAAA,uBAAqB,GAAA,EAA2B;AAEtD,SAAS,WAAW,IAAA,EAAsB;AACxC,EAAA,OAAO,gBAAgB,IAAI,CAAA,CAAA;AAC7B;AAEA,SAAS,WAAW,MAAA,EAAuC;AACzD,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,IAAA,OAAO,MAAA,CAAO,YAAA;AAAA,EAChB;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAA,CAAc,MAAc,MAAA,EAAgC;AACnE,EAAA,MAAM,OAAA,GAAU,WAAW,MAAM,CAAA;AACjC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAC,CAAA;AAC5C,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,OAAO,KAAA,CAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,gBAAA,CAAiB,IAAA,EAAc,QAAA,EAAoB,MAAA,EAAuB;AACjF,EAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAC7C,EAAA,IAAI,aAAA,KAAkB,MAAA,IAAU,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA,EAAG;AACzD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA;AAChD,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,eAAA,EAAgB;AAAA,EAClB;AAEA,EAAA,cAAA,CAAe,GAAA,CAAI,MAAM,MAAM,CAAA;AAE/B,EAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM,CAAA;AACjC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,OAAA,CAAQ,WAAW,IAAI,CAAA,EAAG,KAAK,SAAA,CAAU,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,IAClE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAC,CAAA;AAED,EAAA,eAAA,CAAgB,GAAA,CAAI,MAAM,IAAI,CAAA;AAChC;AAEA,SAAS,WAAA,CACP,IAAA,EACA,OAAA,EACA,OAAA,EACU;AACV,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACtC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,QAAA,CAAS,KAAA,KAAU,MAAA,IAAa,OAAA,KAAY,MAAA,EAAW;AACzD,MAAA,QAAA,CAAS,KAAA,GAAQ,OAAA;AAAA,IACnB;AAEA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,IAAI,QAAA,CAAS,UAAU,MAAA,EAAW;AAChC,QAAA,MAAM,SAAA,GAAY,aAAA,CAAc,IAAA,EAAM,OAAA,CAAQ,OAAO,CAAA;AACrD,QAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,UAAA,QAAA,CAAS,KAAA,GAAQ,SAAA;AAAA,QACnB;AAAA,MACF;AACA,MAAA,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,OAAA,CAAQ,OAAO,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,eAAA,GAAkB,OAAA;AACtB,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,IAAA,EAAM,OAAA,CAAQ,OAAO,CAAA;AACrD,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA,eAAA,GAAkB,SAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,eAAe,CAAA;AACrC,EAAA,YAAA,CAAa,GAAA,CAAI,MAAM,OAAO,CAAA;AAE9B,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,gBAAA,CAAiB,IAAA,EAAM,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA;AAAA,EACjD;AAEA,EAAA,OAAO,OAAA;AACT;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,KAAA,CAAM,IAAA,EAAc,OAAA,EAAmB,OAAA,EAA8B;AACnE,IAAA,OAAO,WAAA,CAAY,IAAA,EAAM,OAAA,EAAS,OAAO,CAAA;AAAA,EAC3C,CAAA;AAAA,EACA,IAAI,IAAA,EAAc;AAChB,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB,CAAA;AAAA,EACA,IAAI,IAAA,EAAc;AAChB,IAAA,OAAO,YAAA,CAAa,IAAI,IAAI,CAAA;AAAA,EAC9B;AACF","file":"global.js","sourcesContent":["import {\n batch,\n computed as preactComputed,\n effect as preactEffect,\n Signal as PreactSignal,\n signal as preactSignal,\n untracked,\n} from \"@preact/signals-core\";\n\nexport type EffectMode = \"queued\" | \"sync\";\nexport type EffectCleanup = void | (() => void);\nexport type EffectCallback = () => EffectCleanup;\n\ntype ObjectValue = Record<PropertyKey, unknown>;\ntype PreactSignalLike<T> = PreactSignal<T> & { _notify?: () => void };\ntype HmrStateSnapshot = {\n key?: string;\n value: unknown;\n};\ntype HmrCaptureFrame = {\n created: Array<{ key?: string; signal: Signal<unknown> }>;\n restoredValues?: HmrStateSnapshot[];\n restoredByKey?: Map<string, unknown>;\n restoredUnkeyed: unknown[];\n cursor: number;\n};\n\nconst rawToProxy = new WeakMap<object, object>();\nconst proxyToRaw = new WeakMap<object, object>();\nconst proxyOwner = new WeakMap<object, Signal<unknown>>();\nconst hmrCaptureStack: HmrCaptureFrame[] = [];\n\nfunction isObject(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction unwrapValue<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n return (proxyToRaw.get(value) ?? value) as T;\n}\n\nfunction notifyPreactSignal<T>(source: PreactSignalLike<T>): void {\n if (typeof source._notify === \"function\") {\n source._notify();\n return;\n }\n\n batch(() => {\n source.value = source.value;\n });\n}\n\nexport class Signal<T> {\n private readonly source: PreactSignalLike<T>;\n private readonly version: PreactSignal<number>;\n private proxy: T | null = null;\n\n constructor(\n initial: T,\n source?: PreactSignalLike<T>,\n version?: PreactSignal<number>,\n ) {\n this.source = source ?? (preactSignal(initial) as PreactSignalLike<T>);\n this.version = version ?? preactSignal(0);\n }\n\n get value(): T {\n this.version.value;\n return this.getReactiveValue(this.source.value);\n }\n\n set value(next: T) {\n const resolvedNext = unwrapValue(next);\n if (Object.is(this.source.peek(), resolvedNext)) {\n return;\n }\n\n this.proxy = null;\n this.source.value = resolvedNext;\n }\n\n peek(): T {\n return this.source.peek();\n }\n\n notify(): void {\n this.version.value = this.version.peek() + 1;\n }\n\n subscribe(fn: (value: T) => void): () => void {\n return this.source.subscribe(fn);\n }\n\n valueOf(): T {\n return this.value;\n }\n\n toString(): string {\n return String(this.value);\n }\n\n toJSON(): T {\n return this.peek();\n }\n\n private getReactiveValue(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n if (this.proxy && proxyToRaw.get(this.proxy as object) === value) {\n return this.proxy;\n }\n\n this.proxy = this.wrapObject(value) as T;\n return this.proxy;\n }\n\n private wrapObject(value: object): object {\n const existing = rawToProxy.get(value);\n if (existing) {\n return existing;\n }\n\n const proxy = new Proxy(value as ObjectValue, {\n get: (target, key, receiver) => {\n const result = Reflect.get(target, key, receiver);\n return isObject(result) ? this.wrapNested(result) : result;\n },\n set: (target, key, next, receiver) => {\n const resolvedNext = unwrapValue(next);\n const previous = Reflect.get(target, key, receiver);\n const changed = Reflect.set(target, key, resolvedNext, receiver);\n\n if (changed && !Object.is(previous, resolvedNext)) {\n this.notify();\n }\n\n return changed;\n },\n deleteProperty: (target, key) => {\n const hadKey = Reflect.has(target, key);\n const changed = Reflect.deleteProperty(target, key);\n\n if (hadKey && changed) {\n this.notify();\n }\n\n return changed;\n },\n });\n\n rawToProxy.set(value, proxy);\n proxyToRaw.set(proxy, value);\n proxyOwner.set(proxy, this as Signal<unknown>);\n return proxy;\n }\n\n private wrapNested(value: object): object {\n const owner = proxyOwner.get(value);\n if (owner === this) {\n return value;\n }\n\n return this.wrapObject(value);\n }\n}\n\nexport type SignalState<T> = Signal<T>;\n\nexport function state<T>(initial: T, hmrKey?: string): Signal<T> {\n const frame = hmrCaptureStack[hmrCaptureStack.length - 1];\n let nextInitial = initial;\n\n if (frame) {\n if (hmrKey && frame.restoredByKey?.has(hmrKey)) {\n nextInitial = frame.restoredByKey.get(hmrKey) as T;\n } else if (frame.cursor < frame.restoredUnkeyed.length) {\n nextInitial = frame.restoredUnkeyed[frame.cursor] as T;\n }\n }\n\n const signal = new Signal(nextInitial);\n\n if (frame) {\n frame.created.push({ key: hmrKey, signal: signal as Signal<unknown> });\n if (!hmrKey || !frame.restoredByKey?.has(hmrKey)) {\n frame.cursor += 1;\n }\n }\n\n return signal;\n}\n\nexport function effect(\n fn: EffectCallback,\n options?: { mode?: EffectMode },\n): () => void {\n const stop = preactEffect(() => fn());\n return () => stop();\n}\n\nexport function computed<T>(getter: () => T): Signal<T> {\n const version = preactSignal(0);\n const source = preactComputed(() => getter()) as PreactSignalLike<T>;\n preactEffect(() => {\n getter();\n version.value = version.peek() + 1;\n });\n return new Signal(untracked(() => source.value), source, version);\n}\n\nexport const derived = computed;\n\nexport function beginHmrStateCapture(restoredValues?: HmrStateSnapshot[]): void {\n const restoredByKey = new Map<string, unknown>();\n const restoredUnkeyed: unknown[] = [];\n\n for (const entry of restoredValues ?? []) {\n if (entry.key) {\n restoredByKey.set(entry.key, entry.value);\n continue;\n }\n\n restoredUnkeyed.push(entry.value);\n }\n\n hmrCaptureStack.push({\n created: [],\n restoredValues,\n restoredByKey,\n restoredUnkeyed,\n cursor: 0,\n });\n}\n\nexport function endHmrStateCapture(): Array<{ key?: string; signal: Signal<unknown> }> {\n const frame = hmrCaptureStack.pop();\n return frame?.created ?? [];\n}\n","import { effect, state } from \"../core/signals-core\";\r\nimport type { SignalState } from \"../core/signals-core\";\r\n\r\ntype AnyState = SignalState<unknown>;\r\ntype PersistTarget = \"localStorage\";\r\ntype GlobalStateOptions = {\r\n persist?: PersistTarget;\r\n};\r\n\r\nconst globalStates = new Map<string, AnyState>();\r\nconst persistCleanups = new Map<string, () => void>();\r\nconst persistTargets = new Map<string, PersistTarget>();\r\n\r\nfunction storageKey(name: string): string {\r\n return `olova:global:${name}`;\r\n}\r\n\r\nfunction getStorage(target: PersistTarget): Storage | null {\r\n if (typeof window === \"undefined\") {\r\n return null;\r\n }\r\n\r\n if (target === \"localStorage\") {\r\n return window.localStorage;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction readPersisted(name: string, target: PersistTarget): unknown {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n const raw = storage.getItem(storageKey(name));\r\n if (raw == null) {\r\n return undefined;\r\n }\r\n return JSON.parse(raw);\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction setupPersistence(name: string, stateRef: AnyState, target: PersistTarget) {\r\n const currentTarget = persistTargets.get(name);\r\n if (currentTarget === target && persistCleanups.has(name)) {\r\n return;\r\n }\r\n\r\n const previousCleanup = persistCleanups.get(name);\r\n if (previousCleanup) {\r\n previousCleanup();\r\n }\r\n\r\n persistTargets.set(name, target);\r\n\r\n const stop = effect(() => {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return;\r\n }\r\n\r\n try {\r\n storage.setItem(storageKey(name), JSON.stringify(stateRef.value));\r\n } catch {\r\n // Ignore storage quota/serialization errors.\r\n }\r\n });\r\n\r\n persistCleanups.set(name, stop);\r\n}\r\n\r\nfunction ensureState(\r\n name: string,\r\n initial?: unknown,\r\n options?: GlobalStateOptions,\r\n): AnyState {\r\n const existing = globalStates.get(name);\r\n if (existing) {\r\n if (existing.value === undefined && initial !== undefined) {\r\n existing.value = initial;\r\n }\r\n\r\n if (options?.persist) {\r\n if (existing.value === undefined) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n existing.value = persisted;\r\n }\r\n }\r\n setupPersistence(name, existing, options.persist);\r\n }\r\n\r\n return existing;\r\n }\r\n\r\n let resolvedInitial = initial;\r\n if (options?.persist) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n resolvedInitial = persisted;\r\n }\r\n }\r\n\r\n const created = state(resolvedInitial) as AnyState;\r\n globalStates.set(name, created);\r\n\r\n if (options?.persist) {\r\n setupPersistence(name, created, options.persist);\r\n }\r\n\r\n return created;\r\n}\r\n\r\nexport const global = {\r\n state(name: string, initial?: unknown, options?: GlobalStateOptions) {\r\n return ensureState(name, initial, options);\r\n },\r\n get(name: string) {\r\n return ensureState(name);\r\n },\r\n has(name: string) {\r\n return globalStates.has(name);\r\n },\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../core/signals-core.ts","../runtime/global.ts"],"names":["preactSignal","preactEffect"],"mappings":"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","file":"global.js","sourcesContent":["import {\r\n batch,\r\n computed as preactComputed,\r\n effect as preactEffect,\r\n Signal as PreactSignal,\r\n signal as preactSignal,\r\n untracked,\r\n} from \"@preact/signals-core\";\r\n\r\nexport type EffectCleanup = void | (() => void);\r\nexport type EffectCallback = () => EffectCleanup;\r\nexport type RuntimeErrorHandler = (error: unknown) => void;\r\n\r\ntype ObjectValue = Record<PropertyKey, unknown>;\r\ntype PreactSignalLike<T> = PreactSignal<T> & { _notify?: () => void };\r\ntype HmrStateSnapshot = {\r\n key?: string;\r\n value: unknown;\r\n};\r\ntype HmrCaptureFrame = {\r\n created: Array<{ key?: string; signal: Signal<unknown> }>;\r\n restoredValues?: HmrStateSnapshot[];\r\n restoredByKey?: Map<string, unknown>;\r\n restoredUnkeyed: unknown[];\r\n cursor: number;\r\n};\r\n\r\nconst rawToProxyByOwner = new WeakMap<object, WeakMap<Signal<unknown>, object>>();\r\nconst proxyToRaw = new WeakMap<object, object>();\r\nconst proxyOwner = new WeakMap<object, Signal<unknown>>();\r\nconst hmrCaptureStack: HmrCaptureFrame[] = [];\r\nconst runtimeErrorHandlerStack: RuntimeErrorHandler[] = [];\r\n\r\nfunction isObject(value: unknown): value is object {\r\n return typeof value === \"object\" && value !== null;\r\n}\r\n\r\nfunction unwrapValue<T>(value: T): T {\r\n if (!isObject(value)) {\r\n return value;\r\n }\r\n\r\n return (proxyToRaw.get(value) ?? value) as T;\r\n}\r\n\r\nfunction notifyPreactSignal<T>(source: PreactSignalLike<T>): void {\r\n if (typeof source._notify === \"function\") {\r\n source._notify();\r\n return;\r\n }\r\n\r\n batch(() => {\r\n source.value = source.value;\r\n });\r\n}\r\n\r\nexport class Signal<T> {\r\n private readonly source: PreactSignalLike<T>;\r\n private readonly version: PreactSignal<number>;\r\n private proxy: T | null = null;\r\n\r\n constructor(\r\n initial: T,\r\n source?: PreactSignalLike<T>,\r\n version?: PreactSignal<number>,\r\n ) {\r\n this.source = source ?? (preactSignal(initial) as PreactSignalLike<T>);\r\n this.version = version ?? preactSignal(0);\r\n }\r\n\r\n get value(): T {\r\n this.version.value;\r\n return this.getReactiveValue(this.source.value);\r\n }\r\n\r\n set value(next: T) {\r\n const resolvedNext = unwrapValue(next);\r\n if (Object.is(this.source.peek(), resolvedNext)) {\r\n return;\r\n }\r\n\r\n this.proxy = null;\r\n this.source.value = resolvedNext;\r\n }\r\n\r\n peek(): T {\r\n return this.source.peek();\r\n }\r\n\r\n notify(): void {\r\n this.version.value = this.version.peek() + 1;\r\n }\r\n\r\n peekVersion(): number {\r\n return this.version.peek();\r\n }\r\n\r\n subscribe(fn: (value: T) => void): () => void {\r\n return this.source.subscribe(fn);\r\n }\r\n\r\n valueOf(): T {\r\n return this.value;\r\n }\r\n\r\n toString(): string {\r\n return String(this.value);\r\n }\r\n\r\n toJSON(): T {\r\n return this.peek();\r\n }\r\n\r\n private getReactiveValue(value: T): T {\r\n if (!isObject(value)) {\r\n return value;\r\n }\r\n\r\n if (this.proxy && proxyToRaw.get(this.proxy as object) === value) {\r\n return this.proxy;\r\n }\r\n\r\n this.proxy = this.wrapObject(value) as T;\r\n return this.proxy;\r\n }\r\n\r\n private wrapObject(value: object): object {\r\n const ownedProxyMap = rawToProxyByOwner.get(value);\r\n const existing = ownedProxyMap?.get(this as Signal<unknown>);\r\n if (existing) {\r\n return existing;\r\n }\r\n\r\n const proxy = new Proxy(value as ObjectValue, {\r\n get: (target, key, receiver) => {\r\n const result = Reflect.get(target, key, receiver);\r\n return isObject(result) ? this.wrapNested(result) : result;\r\n },\r\n set: (target, key, next, receiver) => {\r\n const resolvedNext = unwrapValue(next);\r\n const previous = Reflect.get(target, key, receiver);\r\n const changed = Reflect.set(target, key, resolvedNext, receiver);\r\n\r\n if (changed && !Object.is(previous, resolvedNext)) {\r\n this.notify();\r\n }\r\n\r\n return changed;\r\n },\r\n deleteProperty: (target, key) => {\r\n const hadKey = Reflect.has(target, key);\r\n const changed = Reflect.deleteProperty(target, key);\r\n\r\n if (hadKey && changed) {\r\n this.notify();\r\n }\r\n\r\n return changed;\r\n },\r\n });\r\n\r\n const nextOwnedProxyMap = ownedProxyMap ?? new WeakMap<Signal<unknown>, object>();\r\n nextOwnedProxyMap.set(this as Signal<unknown>, proxy);\r\n if (!ownedProxyMap) {\r\n rawToProxyByOwner.set(value, nextOwnedProxyMap);\r\n }\r\n proxyToRaw.set(proxy, value);\r\n proxyOwner.set(proxy, this as Signal<unknown>);\r\n return proxy;\r\n }\r\n\r\n private wrapNested(value: object): object {\r\n const owner = proxyOwner.get(value);\r\n if (owner === this) {\r\n return value;\r\n }\r\n\r\n return this.wrapObject(value);\r\n }\r\n}\r\n\r\nexport type SignalState<T> = Signal<T>;\r\n\r\nexport function state<T>(initial: T, hmrKey?: string): Signal<T> {\r\n const frame = hmrCaptureStack[hmrCaptureStack.length - 1];\r\n let nextInitial = initial;\r\n\r\n if (frame) {\r\n if (hmrKey && frame.restoredByKey?.has(hmrKey)) {\r\n nextInitial = frame.restoredByKey.get(hmrKey) as T;\r\n } else if (frame.cursor < frame.restoredUnkeyed.length) {\r\n nextInitial = frame.restoredUnkeyed[frame.cursor] as T;\r\n }\r\n }\r\n\r\n const signal = new Signal(nextInitial);\r\n\r\n if (frame) {\r\n frame.created.push({ key: hmrKey, signal: signal as Signal<unknown> });\r\n if (!hmrKey || !frame.restoredByKey?.has(hmrKey)) {\r\n frame.cursor += 1;\r\n }\r\n }\r\n\r\n return signal;\r\n}\r\n\r\nexport function getReactiveProxyVersion(value: unknown): number | null {\r\n if (!isObject(value)) {\r\n return null;\r\n }\r\n\r\n const owner = proxyOwner.get(value);\r\n return owner ? owner.peekVersion() : null;\r\n}\r\n\r\nfunction reportRuntimeError(error: unknown, handler?: RuntimeErrorHandler | null): never | void {\r\n if (handler) {\r\n handler(error);\r\n return;\r\n }\r\n\r\n throw error;\r\n}\r\n\r\nexport function withRuntimeErrorHandler<T>(\r\n handler: RuntimeErrorHandler | null | undefined,\r\n fn: () => T,\r\n): T {\r\n if (!handler) {\r\n return fn();\r\n }\r\n\r\n runtimeErrorHandlerStack.push(handler);\r\n try {\r\n return fn();\r\n } finally {\r\n runtimeErrorHandlerStack.pop();\r\n }\r\n}\r\n\r\nexport function effect(fn: EffectCallback): () => void {\r\n const handler = runtimeErrorHandlerStack[runtimeErrorHandlerStack.length - 1] ?? null;\r\n const stop = preactEffect(() =>\r\n withRuntimeErrorHandler(handler, () => {\r\n try {\r\n const cleanup = fn();\r\n if (typeof cleanup !== \"function\") {\r\n return;\r\n }\r\n\r\n return () =>\r\n withRuntimeErrorHandler(handler, () => {\r\n try {\r\n cleanup();\r\n } catch (error) {\r\n reportRuntimeError(error, handler);\r\n }\r\n });\r\n } catch (error) {\r\n reportRuntimeError(error, handler);\r\n }\r\n }),\r\n );\r\n return () => stop();\r\n}\r\n\r\nexport function computed<T>(getter: () => T): Signal<T> {\r\n const version = preactSignal(0);\r\n const source = preactComputed(() => getter()) as PreactSignalLike<T>;\r\n preactEffect(() => {\r\n source.value;\r\n version.value = version.peek() + 1;\r\n });\r\n return new Signal(untracked(() => source.value), source, version);\r\n}\r\n\r\nexport const derived = computed;\r\n\r\nexport function beginHmrStateCapture(restoredValues?: HmrStateSnapshot[]): void {\r\n const restoredByKey = new Map<string, unknown>();\r\n const restoredUnkeyed: unknown[] = [];\r\n\r\n for (const entry of restoredValues ?? []) {\r\n if (entry.key) {\r\n restoredByKey.set(entry.key, entry.value);\r\n continue;\r\n }\r\n\r\n restoredUnkeyed.push(entry.value);\r\n }\r\n\r\n hmrCaptureStack.push({\r\n created: [],\r\n restoredValues,\r\n restoredByKey,\r\n restoredUnkeyed,\r\n cursor: 0,\r\n });\r\n}\r\n\r\nexport function endHmrStateCapture(): Array<{ key?: string; signal: Signal<unknown> }> {\r\n const frame = hmrCaptureStack.pop();\r\n return frame?.created ?? [];\r\n}\r\n","import { effect, state } from \"../core/signals-core\";\r\nimport type { SignalState } from \"../core/signals-core\";\r\n\r\ntype AnyState = SignalState<unknown>;\r\ntype PersistTarget = \"localStorage\";\r\ntype GlobalStateOptions = {\r\n persist?: PersistTarget;\r\n};\r\n\r\nconst globalStates = new Map<string, AnyState>();\r\nconst persistCleanups = new Map<string, () => void>();\r\nconst persistTargets = new Map<string, PersistTarget>();\r\n\r\nfunction storageKey(name: string): string {\r\n return `olova:global:${name}`;\r\n}\r\n\r\nfunction getStorage(target: PersistTarget): Storage | null {\r\n if (typeof window === \"undefined\") {\r\n return null;\r\n }\r\n\r\n if (target === \"localStorage\") {\r\n return window.localStorage;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction readPersisted(name: string, target: PersistTarget): unknown {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n const raw = storage.getItem(storageKey(name));\r\n if (raw == null) {\r\n return undefined;\r\n }\r\n return JSON.parse(raw);\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction setupPersistence(name: string, stateRef: AnyState, target: PersistTarget) {\r\n const currentTarget = persistTargets.get(name);\r\n if (currentTarget === target && persistCleanups.has(name)) {\r\n return;\r\n }\r\n\r\n const previousCleanup = persistCleanups.get(name);\r\n if (previousCleanup) {\r\n previousCleanup();\r\n }\r\n\r\n persistTargets.set(name, target);\r\n\r\n const stop = effect(() => {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return;\r\n }\r\n\r\n try {\r\n storage.setItem(storageKey(name), JSON.stringify(stateRef.value));\r\n } catch {\r\n // Ignore storage quota/serialization errors.\r\n }\r\n });\r\n\r\n persistCleanups.set(name, stop);\r\n}\r\n\r\nfunction ensureState(\r\n name: string,\r\n initial?: unknown,\r\n options?: GlobalStateOptions,\r\n): AnyState {\r\n const existing = globalStates.get(name);\r\n if (existing) {\r\n if (options?.persist) {\r\n if (existing.value === undefined) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n existing.value = persisted;\r\n }\r\n }\r\n setupPersistence(name, existing, options.persist);\r\n }\r\n\r\n if (existing.value === undefined && initial !== undefined) {\r\n existing.value = initial;\r\n }\r\n\r\n return existing;\r\n }\r\n\r\n let resolvedInitial = initial;\r\n if (options?.persist) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n resolvedInitial = persisted;\r\n }\r\n }\r\n\r\n const created = state(resolvedInitial) as AnyState;\r\n globalStates.set(name, created);\r\n\r\n if (options?.persist) {\r\n setupPersistence(name, created, options.persist);\r\n }\r\n\r\n return created;\r\n}\r\n\r\nexport const global = {\r\n state(name: string, initial?: unknown, options?: GlobalStateOptions) {\r\n return ensureState(name, initial, options);\r\n },\r\n get(name: string) {\r\n return ensureState(name);\r\n },\r\n has(name: string) {\r\n return globalStates.has(name);\r\n },\r\n};\r\n"]}
|