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/runtime.js CHANGED
@@ -41,7 +41,7 @@ function requireSetupContext(apiName) {
41
41
  return currentSetupContext;
42
42
  }
43
43
  function toText(value) {
44
- if (value === null || value === void 0) {
44
+ if (value === null || value === void 0 || value === false || value === true) {
45
45
  return "";
46
46
  }
47
47
  if (Array.isArray(value)) {
@@ -103,7 +103,7 @@ function sanitizeHtml(html) {
103
103
  return template.innerHTML;
104
104
  }
105
105
  function toHtml(value) {
106
- if (value === null || value === void 0) {
106
+ if (value === null || value === void 0 || value === false || value === true) {
107
107
  return "";
108
108
  }
109
109
  if (Array.isArray(value)) {
@@ -177,6 +177,7 @@ function bindJsxEventsInRange(range) {
177
177
  };
178
178
  }
179
179
  const listeners = [];
180
+ const handlerIds = /* @__PURE__ */ new Set();
180
181
  const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
181
182
  let current = walker.currentNode;
182
183
  while (current) {
@@ -194,6 +195,7 @@ function bindJsxEventsInRange(range) {
194
195
  }
195
196
  const eventName = attr.name.slice("data-o-jsx-".length);
196
197
  const handlerId = attr.value;
198
+ handlerIds.add(handlerId);
197
199
  const listener = (event) => {
198
200
  const handler = handlers.get(handlerId);
199
201
  if (typeof handler === "function") {
@@ -211,6 +213,9 @@ function bindJsxEventsInRange(range) {
211
213
  for (const cleanup of listeners) {
212
214
  cleanup();
213
215
  }
216
+ for (const handlerId of handlerIds) {
217
+ handlers.delete(handlerId);
218
+ }
214
219
  };
215
220
  }
216
221
  function replaceTokenWithTextNode(root, token) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../core/signals-core.ts","../runtime/component.ts"],"names":["preactEffect"],"mappings":"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","file":"runtime.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, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\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"]}
1
+ {"version":3,"sources":["../core/signals-core.ts","../runtime/component.ts"],"names":["preactEffect"],"mappings":"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","file":"runtime.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, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\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"]}
package/dist/vite.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) => Array.isArray(value) ? value.map(__olovaToString).join('') : value == null ? '' : String(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 resolvePackageEntry = (relativePath) => {
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
- if (id.includes("/node_modules/") || id.endsWith(".d.ts")) {
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(id)) {
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.split("?")[0].replace(/\.css$/, "");
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
- if (!filename.endsWith(".olova")) {
2200
- if (!query && shouldRewriteRuntimeScript(filename, code)) {
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(filename, result.css);
2219
- jsCode = `import ${JSON.stringify(filename + ".css" + STYLE_QUERY)};
2262
+ cssCache.set(normalizedFilename, result.css);
2263
+ jsCode = `import ${JSON.stringify(normalizedFilename + ".css" + STYLE_QUERY)};
2220
2264
  ` + jsCode;
2221
2265
  } else {
2222
- cssCache.delete(filename);
2266
+ cssCache.delete(normalizedFilename);
2223
2267
  }
2224
2268
  return {
2225
2269
  code: jsCode,