olova 2.0.62 → 2.0.64
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/dist/compiler.js +6 -1
- package/dist/compiler.js.map +1 -1
- package/dist/core.js +7 -2
- package/dist/core.js.map +1 -1
- package/dist/index.js +59 -15
- package/dist/index.js.map +1 -1
- package/dist/runtime.js +7 -2
- package/dist/runtime.js.map +1 -1
- package/dist/vite.js +59 -15
- package/dist/vite.js.map +1 -1
- package/package.json +1 -1
package/dist/core.js
CHANGED
|
@@ -171,7 +171,7 @@ function requireSetupContext(apiName) {
|
|
|
171
171
|
return currentSetupContext;
|
|
172
172
|
}
|
|
173
173
|
function toText(value) {
|
|
174
|
-
if (value === null || value === void 0) {
|
|
174
|
+
if (value === null || value === void 0 || value === false || value === true) {
|
|
175
175
|
return "";
|
|
176
176
|
}
|
|
177
177
|
if (Array.isArray(value)) {
|
|
@@ -233,7 +233,7 @@ function sanitizeHtml(html) {
|
|
|
233
233
|
return template.innerHTML;
|
|
234
234
|
}
|
|
235
235
|
function toHtml(value) {
|
|
236
|
-
if (value === null || value === void 0) {
|
|
236
|
+
if (value === null || value === void 0 || value === false || value === true) {
|
|
237
237
|
return "";
|
|
238
238
|
}
|
|
239
239
|
if (Array.isArray(value)) {
|
|
@@ -307,6 +307,7 @@ function bindJsxEventsInRange(range) {
|
|
|
307
307
|
};
|
|
308
308
|
}
|
|
309
309
|
const listeners = [];
|
|
310
|
+
const handlerIds = /* @__PURE__ */ new Set();
|
|
310
311
|
const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
|
|
311
312
|
let current = walker.currentNode;
|
|
312
313
|
while (current) {
|
|
@@ -324,6 +325,7 @@ function bindJsxEventsInRange(range) {
|
|
|
324
325
|
}
|
|
325
326
|
const eventName = attr.name.slice("data-o-jsx-".length);
|
|
326
327
|
const handlerId = attr.value;
|
|
328
|
+
handlerIds.add(handlerId);
|
|
327
329
|
const listener = (event) => {
|
|
328
330
|
const handler = handlers.get(handlerId);
|
|
329
331
|
if (typeof handler === "function") {
|
|
@@ -341,6 +343,9 @@ function bindJsxEventsInRange(range) {
|
|
|
341
343
|
for (const cleanup of listeners) {
|
|
342
344
|
cleanup();
|
|
343
345
|
}
|
|
346
|
+
for (const handlerId of handlerIds) {
|
|
347
|
+
handlers.delete(handlerId);
|
|
348
|
+
}
|
|
344
349
|
};
|
|
345
350
|
}
|
|
346
351
|
function replaceTokenWithTextNode(root, token) {
|
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 {\r\n if (value === null || value === undefined) {\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().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 {\r\n if (value === null || value === undefined) {\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\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 {\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 walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\r\n let current = walker.currentNode 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 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}\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 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 {\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"]}
|
package/dist/index.js
CHANGED
|
@@ -1926,7 +1926,12 @@ ${exportHead}
|
|
|
1926
1926
|
__olovaJsxHandlers.set(id, handler);
|
|
1927
1927
|
return ' data-o-jsx-' + eventName + '="' + id + '" on' + eventName + '="window.__olovaDispatchJsxEvent(event, this)"';
|
|
1928
1928
|
};
|
|
1929
|
-
const __olovaToString = (value) =>
|
|
1929
|
+
const __olovaToString = (value) =>
|
|
1930
|
+
Array.isArray(value)
|
|
1931
|
+
? value.map(__olovaToString).join('')
|
|
1932
|
+
: value == null || value === false || value === true
|
|
1933
|
+
? ''
|
|
1934
|
+
: String(value);
|
|
1930
1935
|
const __olovaDangerouslySetHtml = (value) => ({ __dangerousHtml: true, value: __olovaToString(value) });
|
|
1931
1936
|
const __olovaNormalizeClassValue = (value) => {
|
|
1932
1937
|
if (value == null || value === false) {
|
|
@@ -2143,11 +2148,48 @@ var RUNTIME_MODULE_ID = "\0olova:runtime";
|
|
|
2143
2148
|
var CORE_MODULE_ID = "\0olova:core";
|
|
2144
2149
|
var GLOBAL_MODULE_ID = "\0olova:global";
|
|
2145
2150
|
var STYLE_QUERY = "?olova&type=style";
|
|
2151
|
+
function findPackageRoot(startDir) {
|
|
2152
|
+
let currentDir = startDir;
|
|
2153
|
+
while (true) {
|
|
2154
|
+
const packageJsonPath = path.join(currentDir, "package.json");
|
|
2155
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
2156
|
+
return currentDir;
|
|
2157
|
+
}
|
|
2158
|
+
const parentDir = path.dirname(currentDir);
|
|
2159
|
+
if (parentDir === currentDir) {
|
|
2160
|
+
return null;
|
|
2161
|
+
}
|
|
2162
|
+
currentDir = parentDir;
|
|
2163
|
+
}
|
|
2164
|
+
}
|
|
2165
|
+
function readPackageJson(packageRoot) {
|
|
2166
|
+
if (!packageRoot) {
|
|
2167
|
+
return null;
|
|
2168
|
+
}
|
|
2169
|
+
const packageJsonPath = path.join(packageRoot, "package.json");
|
|
2170
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
2171
|
+
return null;
|
|
2172
|
+
}
|
|
2173
|
+
return JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
|
|
2174
|
+
}
|
|
2175
|
+
function normalizeFilename(id) {
|
|
2176
|
+
return normalizePath(id.split("?", 1)[0]);
|
|
2177
|
+
}
|
|
2146
2178
|
function olovaPlugin() {
|
|
2147
2179
|
let config;
|
|
2148
2180
|
const cssCache = /* @__PURE__ */ new Map();
|
|
2149
2181
|
const pluginDir = path.dirname(fileURLToPath(import.meta.url));
|
|
2150
|
-
const
|
|
2182
|
+
const packageRoot = findPackageRoot(pluginDir);
|
|
2183
|
+
const packageJson = readPackageJson(packageRoot);
|
|
2184
|
+
const resolvePackageEntry = (exportKey, relativePath) => {
|
|
2185
|
+
const exportEntry = packageJson?.exports?.[exportKey];
|
|
2186
|
+
const publishedPath = typeof exportEntry === "string" ? exportEntry : exportEntry?.import ?? exportEntry?.default;
|
|
2187
|
+
if (packageRoot && publishedPath) {
|
|
2188
|
+
const publishedCandidate = path.resolve(packageRoot, publishedPath);
|
|
2189
|
+
if (fs.existsSync(publishedCandidate)) {
|
|
2190
|
+
return normalizePath(publishedCandidate);
|
|
2191
|
+
}
|
|
2192
|
+
}
|
|
2151
2193
|
const candidates = [
|
|
2152
2194
|
path.resolve(pluginDir, relativePath),
|
|
2153
2195
|
path.resolve(pluginDir, relativePath.replace(/\.ts$/, ".js"))
|
|
@@ -2159,14 +2201,15 @@ function olovaPlugin() {
|
|
|
2159
2201
|
}
|
|
2160
2202
|
return normalizePath(candidates[0]);
|
|
2161
2203
|
};
|
|
2162
|
-
const runtimeEntry = resolvePackageEntry("../runtime/index.ts");
|
|
2163
|
-
const coreEntry = resolvePackageEntry("../core/index.ts");
|
|
2164
|
-
const globalEntry = resolvePackageEntry("../runtime/global.ts");
|
|
2204
|
+
const runtimeEntry = resolvePackageEntry("./runtime", "../runtime/index.ts");
|
|
2205
|
+
const coreEntry = resolvePackageEntry("./core", "../core/index.ts");
|
|
2206
|
+
const globalEntry = resolvePackageEntry("./global", "../runtime/global.ts");
|
|
2165
2207
|
const shouldRewriteRuntimeScript = (id, code) => {
|
|
2166
|
-
|
|
2208
|
+
const normalizedId = normalizeFilename(id);
|
|
2209
|
+
if (normalizedId.includes("/node_modules/") || normalizedId.endsWith(".d.ts")) {
|
|
2167
2210
|
return false;
|
|
2168
2211
|
}
|
|
2169
|
-
if (!/\.(?:[cm]?[jt]sx?)$/.test(
|
|
2212
|
+
if (!/\.(?:[cm]?[jt]sx?)$/.test(normalizedId)) {
|
|
2170
2213
|
return false;
|
|
2171
2214
|
}
|
|
2172
2215
|
return /from\s+['"]olova\/(?:core|global|state)['"]|import\s+['"]olova\/(?:core|global|state)['"]/.test(code);
|
|
@@ -2189,17 +2232,18 @@ function olovaPlugin() {
|
|
|
2189
2232
|
if (id === CORE_MODULE_ID) return `export * from ${JSON.stringify(coreEntry)};`;
|
|
2190
2233
|
if (id === GLOBAL_MODULE_ID) return `export * from ${JSON.stringify(globalEntry)};`;
|
|
2191
2234
|
if (id.includes(`.css${STYLE_QUERY}`)) {
|
|
2192
|
-
const filename = id
|
|
2235
|
+
const filename = normalizeFilename(id).replace(/\.css$/, "");
|
|
2193
2236
|
return cssCache.get(filename) || "";
|
|
2194
2237
|
}
|
|
2195
2238
|
return null;
|
|
2196
2239
|
},
|
|
2197
2240
|
transform(code, id) {
|
|
2198
2241
|
const [filename, query] = id.split("?", 2);
|
|
2199
|
-
|
|
2200
|
-
|
|
2242
|
+
const normalizedFilename = normalizePath(filename);
|
|
2243
|
+
if (!normalizedFilename.endsWith(".olova")) {
|
|
2244
|
+
if (!query && shouldRewriteRuntimeScript(normalizedFilename, code)) {
|
|
2201
2245
|
const result = compileOlovaScriptModule(code, {
|
|
2202
|
-
filename,
|
|
2246
|
+
filename: normalizedFilename,
|
|
2203
2247
|
dev: !config.isProduction
|
|
2204
2248
|
});
|
|
2205
2249
|
return {
|
|
@@ -2212,14 +2256,14 @@ function olovaPlugin() {
|
|
|
2212
2256
|
if (query && !query.includes("olova")) return null;
|
|
2213
2257
|
if (query && query.includes("type=style")) return null;
|
|
2214
2258
|
try {
|
|
2215
|
-
const result = compileOlova(code, { filename, dev: !config.isProduction });
|
|
2259
|
+
const result = compileOlova(code, { filename: normalizedFilename, dev: !config.isProduction });
|
|
2216
2260
|
let jsCode = result.code;
|
|
2217
2261
|
if (result.css && result.css.trim()) {
|
|
2218
|
-
cssCache.set(
|
|
2219
|
-
jsCode = `import ${JSON.stringify(
|
|
2262
|
+
cssCache.set(normalizedFilename, result.css);
|
|
2263
|
+
jsCode = `import ${JSON.stringify(normalizedFilename + ".css" + STYLE_QUERY)};
|
|
2220
2264
|
` + jsCode;
|
|
2221
2265
|
} else {
|
|
2222
|
-
cssCache.delete(
|
|
2266
|
+
cssCache.delete(normalizedFilename);
|
|
2223
2267
|
}
|
|
2224
2268
|
return {
|
|
2225
2269
|
code: jsCode,
|