essor 0.0.3-beta.4 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/signal/signal.ts","../src/signal/store.ts","../src/utils/comm.ts","../src/utils/is.ts","../src/utils/name.ts","../src/template/utils.ts","../src/template/component-node.ts","../src/template/patch.ts","../src/template/template-node.ts","../src/template/template.ts","../src/template/hooks.ts"],"sourcesContent":["export * from './signal';\nexport * from './template';\n\nexport type * from '../types/index.d.ts';\n","type EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function signal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n track(this, '_value');\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n }\n }\n\n get value(): T {\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function computed<T>(fn: () => T) {\n return new Computed(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function effect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n // Run the effect function for the first time, which will collect dependencies\n effectFn();\n\n // Return a dispose function to cancel the effect\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null; // Reset activeEffect to null\n };\n}\n\nexport function createSignal<T>(value: T): [T, (newValue: T) => void] {\n const signal = new Signal(value);\n return [\n signal.value,\n (newValue: T) => {\n signal.value = newValue;\n },\n ];\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]>;\n};\nexport function signalObject<T extends Object>(initialValues: T): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = isSignal(value) ? value : signal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\nexport function signalToObject<T>(signal: SignalObject<T> | T | Signal<T>): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n acc[key] = isSignal(value) ? value.peek() : value;\n return acc;\n }, {} as T);\n}\n","import {\n type Signal,\n type SignalObject,\n computed,\n signal,\n signalObject,\n signalToObject,\n} from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\ninterface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<any, any, any>;\n\n const initState = { ...(state ?? {}) };\n const signalState: SignalObject<S> = signalObject(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(signalState, signalObject(payload));\n subscriptions.forEach(callback => callback(signalToObject(signalState)));\n actionCallbacks.forEach(callback => callback(signalToObject(signalState)));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n default_actions.patch$(initState);\n },\n };\n const states = {\n _id: `store_${_id}`,\n };\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n states[key] = computed(() => {\n return getter.call(signalState);\n });\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n states[key] = action.bind(signalState);\n }\n }\n\n StoreMap.set(_id, signal);\n ++_id;\n\n return new Proxy(\n {},\n {\n get(_, key) {\n if (key in states) {\n return states[key];\n }\n if (key in default_actions) {\n return default_actions[key];\n }\n return signalState[key].value;\n },\n },\n );\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Signal<ReturnType<S[K]>> : Signal<S[K]>;\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<SignalObject<S> & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","export const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport function hasChanged(value, oldValue) {\n return !Object.is(value, oldValue);\n}\nexport const noop = Function.prototype as () => void;\n","import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isIntegerKey = (key: unknown) =>\n isString(key) && key !== 'NaN' && key[0] !== '-' && `${Number.parseInt(key, 10)}` === key;\nexport function isClass(func) {\n return typeof func === 'function' && /^class\\s/.test(Function.prototype.toString.call(func));\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\nexport function isPrimitive(s: any): s is string | number {\n return (\n typeof s === 'string' || typeof s === 'number' || s instanceof String || s instanceof Number\n );\n}\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n","import { isFalsy, kebabCase } from '../utils';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { isFunction } from '../utils';\nimport { signalObject } from '../signal';\nimport { type Signal, effect, signal } from '../signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, unknown>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(props);\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(this.proxyProps);\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, unknown>) {\n for (const [key, prop] of Object.entries(props)) {\n if (key.indexOf('on') === 0 && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key.indexOf('bind:') === 0) {\n this.proxyProps[key] = signal(prop);\n } else if (key === 'ref') {\n isFunction(prop) ? prop(this.rootNode?.nodes[0]) : (props[key] = this.rootNode?.nodes[0]);\n } else {\n const newValue = (this.proxyProps[key] ??= signal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = effect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { coerceArray, isArray, isFunction, isNil } from '../utils';\nimport { effect, signal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach(([child, path], index) => {\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isFunction(props[attr])) {\n props[attr](node);\n } else {\n props[attr] = node;\n }\n } else if (attr.indexOf('on') === 0) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (attr.indexOf('bind:') === 0) {\n const bindKey = attr.slice(5).toLocaleLowerCase();\n const val = props[attr];\n const track = this.getNodeTrack(`${key}:${attr}`);\n\n const triggerValue = isSignal(val) ? val : signal(val);\n const cleanup = effect(() => {\n triggerValue.value = val;\n node[bindKey] = triggerValue.value;\n });\n\n const cleanupBind = binNode(node, value => {\n props[`update:${bindKey}`](value);\n });\n\n track.cleanup = () => {\n cleanup?.();\n cleanupBind?.();\n };\n } else if (attr.indexOf('update:') !== 0) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : signal(val);\n const cleanup = effect(() => {\n triggerValue.value = val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n track.cleanup = () => {\n cleanup?.();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = effect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = effect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { isFunction } from '../utils';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, unknown>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n"],"mappings":"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","names":["effect","signal","value","template","track","template","track","template","template"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/signal/signal.ts","../src/signal/store.ts","../src/template/template.ts","../src/template/component-node.ts","../src/template/utils.ts","../src/template/template-node.ts","../src/template/patch.ts","../src/template/hooks.ts"],"sourcesContent":["export * from './signal';\nexport * from './template';\n\nexport type * from '../types/index.d.ts';\n","type EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function signal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n track(this, '_value');\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n }\n }\n\n get value(): T {\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function computed<T>(fn: () => T) {\n return new Computed(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function effect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n // Run the effect function for the first time, which will collect dependencies\n effectFn();\n\n // Return a dispose function to cancel the effect\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null; // Reset activeEffect to null\n };\n}\n\nexport function createSignal<T>(value: T): [T, (newValue: T) => void] {\n const signal = new Signal(value);\n return [\n signal.value,\n (newValue: T) => {\n signal.value = newValue;\n },\n ];\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]>;\n};\nexport function signalObject<T extends Object>(initialValues: T): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = isSignal(value) ? value : signal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\nexport function signalToObject<T>(signal: SignalObject<T> | T | Signal<T>): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n acc[key] = isSignal(value) ? value.peek() : value;\n return acc;\n }, {} as T);\n}\n","import {\n type Signal,\n type SignalObject,\n computed,\n signal,\n signalObject,\n signalToObject,\n} from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\nexport interface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<any, any, any>;\n\n const initState = { ...(state ?? {}) };\n const signalState: SignalObject<S> = signalObject(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(signalState, signalObject(payload));\n subscriptions.forEach(callback => callback(signalToObject(signalState)));\n actionCallbacks.forEach(callback => callback(signalToObject(signalState)));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n default_actions.patch$(initState);\n },\n };\n const states = {\n _id: `store_${_id}`,\n };\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n states[key] = computed(() => {\n return getter.call(signalState);\n });\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n states[key] = action.bind(signalState);\n }\n }\n\n StoreMap.set(_id, signal);\n ++_id;\n\n return new Proxy(\n {},\n {\n get(_, key) {\n if (key === 'state') {\n return signalToObject(signalState);\n }\n if (key in states) {\n return states[key];\n }\n if (key in default_actions) {\n return default_actions[key];\n }\n return signalState[key].value;\n },\n },\n );\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Signal<ReturnType<S[K]>> : Signal<S[K]>;\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<SignalObject<S> & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions & { state: S } {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","import { isFunction } from 'essor-shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, any>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFunction } from 'essor-shared';\nimport { signalObject } from '../signal';\nimport { type Signal, effect, signal } from '../signal';\nimport { type SignalObject, signalToObject } from '../signal/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, unknown>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(props);\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: SignalObject<any> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(signalToObject(this.proxyProps));\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, unknown>) {\n for (const [key, prop] of Object.entries(props)) {\n if (key.indexOf('on') === 0 && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key.indexOf('bind:') === 0) {\n this.proxyProps[key] = signal(prop);\n } else if (key === 'ref') {\n isFunction(prop) ? prop(this.rootNode?.nodes[0]) : (props[key] = this.rootNode?.nodes[0]);\n } else {\n const newValue = (this.proxyProps[key] ??= signal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = effect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFalsy, kebabCase } from 'essor-shared';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { coerceArray, isArray, isFunction, isNil } from 'essor-shared';\nimport { effect, signal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach(([child, path], index) => {\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isFunction(props[attr])) {\n props[attr](node);\n } else {\n props[attr] = node;\n }\n } else if (attr.indexOf('on') === 0) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (attr.indexOf('bind:') === 0) {\n const bindKey = attr.slice(5).toLocaleLowerCase();\n const val = props[attr];\n const track = this.getNodeTrack(`${key}:${attr}`);\n\n const triggerValue = isSignal(val) ? val : signal(val);\n const cleanup = effect(() => {\n triggerValue.value = val;\n node[bindKey] = triggerValue.value;\n });\n\n const cleanupBind = binNode(node, value => {\n props[`update:${bindKey}`](value);\n });\n\n track.cleanup = () => {\n cleanup?.();\n cleanupBind?.();\n };\n } else if (attr.indexOf('update:') !== 0) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : signal(val);\n const cleanup = effect(() => {\n triggerValue.value = val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n track.cleanup = () => {\n cleanup?.();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = effect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = effect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n"],"mappings":"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","names":["effect","signal","import_essor_shared","import_essor_shared","value","template","track","import_essor_shared","template","track","template","template"]}
@@ -214,6 +214,9 @@ function createOptionsStore(options) {
214
214
  {},
215
215
  {
216
216
  get(_, key) {
217
+ if (key === "state") {
218
+ return signalToObject(signalState);
219
+ }
217
220
  if (key in states) {
218
221
  return states[key];
219
222
  }
@@ -234,30 +237,14 @@ function createStore(options) {
234
237
  };
235
238
  }
236
239
 
237
- // src/utils/comm.ts
238
- function coerceArray(data) {
239
- return Array.isArray(data) ? data.flat() : [data];
240
- }
241
- var noop = Function.prototype;
242
-
243
- // src/utils/is.ts
244
- var isArray = Array.isArray;
245
- function isNil(x) {
246
- return x === null || x === void 0;
247
- }
248
- var isFunction = (val) => typeof val === "function";
249
- function isFalsy(x) {
250
- return x === false || x === null || x === void 0 || x === "";
251
- }
240
+ // src/template/template.ts
241
+ import { isFunction as isFunction3 } from "essor-shared";
252
242
 
253
- // src/utils/name.ts
254
- var kebabCase = (string) => {
255
- return string.replaceAll(/[A-Z]+/g, (match, offset) => {
256
- return `${offset > 0 ? "-" : ""}${match.toLocaleLowerCase()}`;
257
- });
258
- };
243
+ // src/template/component-node.ts
244
+ import { isFunction } from "essor-shared";
259
245
 
260
246
  // src/template/utils.ts
247
+ import { isFalsy, kebabCase } from "essor-shared";
261
248
  function coerceNode(data) {
262
249
  if (isJsxElement(data) || data instanceof Node) {
263
250
  return data;
@@ -445,7 +432,7 @@ var _ComponentNode = class _ComponentNode {
445
432
  return (_b = (_a = this.rootNode) == null ? void 0 : _a.mount(parent, before)) != null ? _b : [];
446
433
  }
447
434
  _ComponentNode.ref = this;
448
- this.rootNode = this.template(this.proxyProps);
435
+ this.rootNode = this.template(signalToObject(this.proxyProps));
449
436
  _ComponentNode.ref = null;
450
437
  this.mounted = true;
451
438
  const mountedNode = (_d = (_c = this.rootNode) == null ? void 0 : _c.mount(parent, before)) != null ? _d : [];
@@ -492,6 +479,9 @@ _ComponentNode.ref = null;
492
479
  _ComponentNode.context = {};
493
480
  var ComponentNode = _ComponentNode;
494
481
 
482
+ // src/template/template-node.ts
483
+ import { coerceArray, isArray, isFunction as isFunction2, isNil } from "essor-shared";
484
+
495
485
  // src/template/patch.ts
496
486
  function patchChildren(parent, childrenMap, nextChildren, before) {
497
487
  const result = /* @__PURE__ */ new Map();
@@ -724,7 +714,7 @@ var TemplateNode = class _TemplateNode {
724
714
  });
725
715
  }
726
716
  } else if (attr === "ref") {
727
- if (isFunction(props[attr])) {
717
+ if (isFunction2(props[attr])) {
728
718
  props[attr](node);
729
719
  } else {
730
720
  props[attr] = node;
@@ -770,7 +760,7 @@ function patchAttribute(track2, node, attr, data) {
770
760
  if (!element.setAttribute) {
771
761
  return;
772
762
  }
773
- if (isFunction(data)) {
763
+ if (isFunction2(data)) {
774
764
  track2.cleanup = effect(() => {
775
765
  setAttribute(element, attr, data());
776
766
  });
@@ -779,7 +769,7 @@ function patchAttribute(track2, node, attr, data) {
779
769
  }
780
770
  }
781
771
  function patchChild(track2, parent, child, before) {
782
- if (isFunction(child)) {
772
+ if (isFunction2(child)) {
783
773
  track2.cleanup = effect(() => {
784
774
  const nextNodes = coerceArray(child()).map(coerceNode);
785
775
  track2.lastNodes = patchChildren(parent, track2.lastNodes, nextNodes, before);
@@ -795,7 +785,7 @@ function patchChild(track2, parent, child, before) {
795
785
 
796
786
  // src/template/template.ts
797
787
  function h(template2, props, key) {
798
- return isFunction(template2) ? new ComponentNode(template2, props, key) : new TemplateNode(template2, props, key);
788
+ return isFunction3(template2) ? new ComponentNode(template2, props, key) : new TemplateNode(template2, props, key);
799
789
  }
800
790
  function isJsxElement(node) {
801
791
  return node instanceof ComponentNode || node instanceof TemplateNode;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/signal/signal.ts","../src/signal/store.ts","../src/utils/comm.ts","../src/utils/is.ts","../src/utils/name.ts","../src/template/utils.ts","../src/template/component-node.ts","../src/template/patch.ts","../src/template/template-node.ts","../src/template/template.ts","../src/template/hooks.ts"],"sourcesContent":["type EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function signal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n track(this, '_value');\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n }\n }\n\n get value(): T {\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function computed<T>(fn: () => T) {\n return new Computed(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function effect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n // Run the effect function for the first time, which will collect dependencies\n effectFn();\n\n // Return a dispose function to cancel the effect\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null; // Reset activeEffect to null\n };\n}\n\nexport function createSignal<T>(value: T): [T, (newValue: T) => void] {\n const signal = new Signal(value);\n return [\n signal.value,\n (newValue: T) => {\n signal.value = newValue;\n },\n ];\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]>;\n};\nexport function signalObject<T extends Object>(initialValues: T): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = isSignal(value) ? value : signal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\nexport function signalToObject<T>(signal: SignalObject<T> | T | Signal<T>): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n acc[key] = isSignal(value) ? value.peek() : value;\n return acc;\n }, {} as T);\n}\n","import {\n type Signal,\n type SignalObject,\n computed,\n signal,\n signalObject,\n signalToObject,\n} from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\ninterface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<any, any, any>;\n\n const initState = { ...(state ?? {}) };\n const signalState: SignalObject<S> = signalObject(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(signalState, signalObject(payload));\n subscriptions.forEach(callback => callback(signalToObject(signalState)));\n actionCallbacks.forEach(callback => callback(signalToObject(signalState)));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n default_actions.patch$(initState);\n },\n };\n const states = {\n _id: `store_${_id}`,\n };\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n states[key] = computed(() => {\n return getter.call(signalState);\n });\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n states[key] = action.bind(signalState);\n }\n }\n\n StoreMap.set(_id, signal);\n ++_id;\n\n return new Proxy(\n {},\n {\n get(_, key) {\n if (key in states) {\n return states[key];\n }\n if (key in default_actions) {\n return default_actions[key];\n }\n return signalState[key].value;\n },\n },\n );\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Signal<ReturnType<S[K]>> : Signal<S[K]>;\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<SignalObject<S> & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","export const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport function hasChanged(value, oldValue) {\n return !Object.is(value, oldValue);\n}\nexport const noop = Function.prototype as () => void;\n","import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\n\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isIntegerKey = (key: unknown) =>\n isString(key) && key !== 'NaN' && key[0] !== '-' && `${Number.parseInt(key, 10)}` === key;\nexport function isClass(func) {\n return typeof func === 'function' && /^class\\s/.test(Function.prototype.toString.call(func));\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\nexport function isPrimitive(s: any): s is string | number {\n return (\n typeof s === 'string' || typeof s === 'number' || s instanceof String || s instanceof Number\n );\n}\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n","import { isFalsy, kebabCase } from '../utils';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { isFunction } from '../utils';\nimport { signalObject } from '../signal';\nimport { type Signal, effect, signal } from '../signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, unknown>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(props);\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(this.proxyProps);\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, unknown>) {\n for (const [key, prop] of Object.entries(props)) {\n if (key.indexOf('on') === 0 && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key.indexOf('bind:') === 0) {\n this.proxyProps[key] = signal(prop);\n } else if (key === 'ref') {\n isFunction(prop) ? prop(this.rootNode?.nodes[0]) : (props[key] = this.rootNode?.nodes[0]);\n } else {\n const newValue = (this.proxyProps[key] ??= signal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = effect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { coerceArray, isArray, isFunction, isNil } from '../utils';\nimport { effect, signal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach(([child, path], index) => {\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isFunction(props[attr])) {\n props[attr](node);\n } else {\n props[attr] = node;\n }\n } else if (attr.indexOf('on') === 0) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (attr.indexOf('bind:') === 0) {\n const bindKey = attr.slice(5).toLocaleLowerCase();\n const val = props[attr];\n const track = this.getNodeTrack(`${key}:${attr}`);\n\n const triggerValue = isSignal(val) ? val : signal(val);\n const cleanup = effect(() => {\n triggerValue.value = val;\n node[bindKey] = triggerValue.value;\n });\n\n const cleanupBind = binNode(node, value => {\n props[`update:${bindKey}`](value);\n });\n\n track.cleanup = () => {\n cleanup?.();\n cleanupBind?.();\n };\n } else if (attr.indexOf('update:') !== 0) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : signal(val);\n const cleanup = effect(() => {\n triggerValue.value = val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n track.cleanup = () => {\n cleanup?.();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = effect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = effect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { isFunction } from '../utils';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, unknown>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n"],"mappings":"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","names":["effect","signal","value","template","track","template","track","template","template"]}
1
+ {"version":3,"sources":["../src/signal/signal.ts","../src/signal/store.ts","../src/template/template.ts","../src/template/component-node.ts","../src/template/utils.ts","../src/template/template-node.ts","../src/template/patch.ts","../src/template/hooks.ts"],"sourcesContent":["type EffectFn = () => void;\n\nlet activeEffect: EffectFn | null = null;\nlet activeComputed: Computed<unknown> | null = null;\n\nconst computedSet = new Set<Computed<unknown>>();\nconst targetMap = new WeakMap<object, Map<string | symbol, Set<EffectFn>>>();\nconst EffectDeps = new Set<EffectFn>();\n\nfunction track(target, key) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n targetMap.set(target, depsMap);\n }\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n if (activeEffect) dep.add(activeEffect);\n if (activeComputed) {\n computedSet.add(activeComputed);\n }\n}\n\nfunction trigger(target, key) {\n if (computedSet.size > 0) {\n computedSet.forEach(computedSignal => computedSignal.run());\n }\n\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n const dep = depsMap.get(key);\n if (dep) {\n dep.forEach(effect => EffectDeps.has(effect) && effect());\n }\n}\n\nexport class Signal<T> {\n private _value: T;\n\n constructor(value: T) {\n this._value = value;\n }\n\n valueOf(): T {\n track(this, 'value');\n return this._value;\n }\n\n toString(): string {\n track(this, 'value');\n return String(this._value);\n }\n\n toJSON(): T {\n return this._value;\n }\n\n get value(): T {\n track(this, 'value');\n return this._value;\n }\n\n set value(newValue: T) {\n if (this._value !== newValue) {\n this._value = newValue;\n trigger(this, 'value');\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n update() {\n trigger(this, 'value');\n }\n}\nexport function signal<T>(value?: T): Signal<T> {\n if (isSignal(value)) {\n return value as Signal<T>;\n }\n return new Signal<T>(value as T);\n}\n\nexport function isSignal<T>(value: any): value is Signal<T> {\n return value instanceof Signal;\n}\nexport class Computed<T> {\n private _value: T;\n\n constructor(private readonly fn: () => T) {\n const prev = activeComputed;\n activeComputed = this;\n track(this, '_value');\n this._value = this.fn();\n activeComputed = prev;\n }\n\n peek(): T {\n return this._value;\n }\n\n run() {\n const newValue = this.fn();\n if (newValue !== this._value) {\n this._value = newValue;\n }\n }\n\n get value(): T {\n track(this, '_value');\n return this._value;\n }\n}\n\nexport function computed<T>(fn: () => T) {\n return new Computed(fn);\n}\n\nexport function isComputed<T>(value: any): value is Computed<T> {\n return value instanceof Computed;\n}\n\nexport function effect(fn: EffectFn): () => void {\n function effectFn() {\n const prev = activeEffect;\n activeEffect = effectFn;\n fn();\n activeEffect = prev;\n }\n\n EffectDeps.add(effectFn);\n // Run the effect function for the first time, which will collect dependencies\n effectFn();\n\n // Return a dispose function to cancel the effect\n return () => {\n EffectDeps.delete(effectFn);\n activeEffect = null; // Reset activeEffect to null\n };\n}\n\nexport function createSignal<T>(value: T): [T, (newValue: T) => void] {\n const signal = new Signal(value);\n return [\n signal.value,\n (newValue: T) => {\n signal.value = newValue;\n },\n ];\n}\n\nexport type SignalObject<T> = {\n [K in keyof T]: Signal<T[K]>;\n};\nexport function signalObject<T extends Object>(initialValues: T): SignalObject<T> {\n const signals = Object.entries(initialValues).reduce((acc, [key, value]) => {\n acc[key] = isSignal(value) ? value : signal(value);\n return acc;\n }, {} as SignalObject<T>);\n\n return signals;\n}\n\nexport function signalToObject<T>(signal: SignalObject<T> | T | Signal<T>): T {\n if (!signal) return {} as T;\n if (isSignal(signal)) {\n return signal.peek();\n }\n return Object.entries(signal).reduce((acc, [key, value]) => {\n acc[key] = isSignal(value) ? value.peek() : value;\n return acc;\n }, {} as T);\n}\n","import {\n type Signal,\n type SignalObject,\n computed,\n signal,\n signalObject,\n signalToObject,\n} from './signal';\n\ninterface StoreOptions<S, G, A> {\n state?: S;\n getters?: G;\n actions?: A;\n}\ntype PatchPayload = Record<string, any>;\ntype Callback = (value: any) => void;\nexport interface StoreActions {\n patch$: (payload: PatchPayload) => void;\n subscribe$: (callback: Callback) => void;\n unsubscribe$: (callback: Callback) => void;\n onAction$: (callback: Callback) => void;\n reset$: () => void;\n}\n\nlet _id = 0;\nconst StoreMap = new Map<number, any>();\n\nfunction createOptionsStore<S, G, A>(options: StoreOptions<S, G, A>) {\n const { state, getters, actions } = options as StoreOptions<any, any, any>;\n\n const initState = { ...(state ?? {}) };\n const signalState: SignalObject<S> = signalObject(state ?? {});\n\n const subscriptions: Callback[] = [];\n const actionCallbacks: Callback[] = [];\n const default_actions: StoreActions = {\n patch$(payload: PatchPayload) {\n Object.assign(signalState, signalObject(payload));\n subscriptions.forEach(callback => callback(signalToObject(signalState)));\n actionCallbacks.forEach(callback => callback(signalToObject(signalState)));\n },\n subscribe$(callback: Callback) {\n subscriptions.push(callback);\n },\n unsubscribe$(callback: Callback) {\n const index = subscriptions.indexOf(callback);\n if (index !== -1) {\n subscriptions.splice(index, 1);\n }\n },\n onAction$(callback: Callback) {\n actionCallbacks.push(callback);\n },\n reset$() {\n default_actions.patch$(initState);\n },\n };\n const states = {\n _id: `store_${_id}`,\n };\n for (const key in getters) {\n const getter = getters[key];\n if (getter) {\n states[key] = computed(() => {\n return getter.call(signalState);\n });\n }\n }\n\n for (const key in actions) {\n const action = actions[key];\n if (action) {\n states[key] = action.bind(signalState);\n }\n }\n\n StoreMap.set(_id, signal);\n ++_id;\n\n return new Proxy(\n {},\n {\n get(_, key) {\n if (key === 'state') {\n return signalToObject(signalState);\n }\n if (key in states) {\n return states[key];\n }\n if (key in default_actions) {\n return default_actions[key];\n }\n return signalState[key].value;\n },\n },\n );\n}\n\ntype Getters<S> = {\n [K in keyof S]: S[K] extends (...args: any[]) => any ? Signal<ReturnType<S[K]>> : Signal<S[K]>;\n};\n\nexport function createStore<S, G, A>(\n options: {\n state: S;\n getters?: G;\n actions?: A;\n } & ThisType<SignalObject<S> & Getters<G> & A>,\n): () => S & Getters<G> & A & StoreActions & { state: S } {\n return function () {\n if (StoreMap.has(_id)) {\n return StoreMap.get(_id)!;\n }\n\n return createOptionsStore<S, G, A>(options);\n };\n}\n","import { isFunction } from 'essor-shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport type { EssorComponent, EssorNode } from '../../types';\n\nexport function h(\n template: EssorComponent | HTMLTemplateElement,\n props: Record<string, any>,\n key?: string,\n): JSX.Element {\n return isFunction(template)\n ? new ComponentNode(template, props, key)\n : new TemplateNode(template, props, key);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFunction } from 'essor-shared';\nimport { signalObject } from '../signal';\nimport { type Signal, effect, signal } from '../signal';\nimport { type SignalObject, signalToObject } from '../signal/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, unknown>,\n public key?: string,\n ) {\n this.proxyProps = signalObject(props);\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: SignalObject<any> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n ComponentNode.context = {};\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(signalToObject(this.proxyProps));\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, unknown>) {\n for (const [key, prop] of Object.entries(props)) {\n if (key.indexOf('on') === 0 && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key.indexOf('bind:') === 0) {\n this.proxyProps[key] = signal(prop);\n } else if (key === 'ref') {\n isFunction(prop) ? prop(this.rootNode?.nodes[0]) : (props[key] = this.rootNode?.nodes[0]);\n } else {\n const newValue = (this.proxyProps[key] ??= signal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = effect(() => {\n newValue.value = prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFalsy, kebabCase } from 'essor-shared';\nimport { isJsxElement } from './template';\n\n// 将任意数据转换为 Node 或 JSX.Element 类型\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n // 先插入新节点,再移除旧节点\n insertChild(parent, node, child);\n removeChild(child);\n}\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n element.setAttribute(attr, String(value));\n }\n}\n\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n // checkbox\n if (node.type === 'checkbox') {\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n }\n\n // date\n if (node.type === 'date') {\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n }\n\n // file\n if (node.type === 'file') {\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n }\n\n // number\n if (node.type === 'number') {\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n }\n\n // radio\n if (node.type === 'radio') {\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n }\n\n // text\n if (node.type === 'text') {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n // 添加事件监听器\n addEventListener(type: string, listener: Listener<unknown>): void;\n // 移除事件监听器\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n","import { coerceArray, isArray, isFunction, isNil } from 'essor-shared';\nimport { effect, signal } from '../signal';\nimport { isSignal } from '../signal/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n public key?: string,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.forEach(([child, path], index) => {\n const before = isNil(path) ? null : this.treeMap.get(path) ?? null;\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isFunction(props[attr])) {\n props[attr](node);\n } else {\n props[attr] = node;\n }\n } else if (attr.indexOf('on') === 0) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n } else if (attr.indexOf('bind:') === 0) {\n const bindKey = attr.slice(5).toLocaleLowerCase();\n const val = props[attr];\n const track = this.getNodeTrack(`${key}:${attr}`);\n\n const triggerValue = isSignal(val) ? val : signal(val);\n const cleanup = effect(() => {\n triggerValue.value = val;\n node[bindKey] = triggerValue.value;\n });\n\n const cleanupBind = binNode(node, value => {\n props[`update:${bindKey}`](value);\n });\n\n track.cleanup = () => {\n cleanup?.();\n cleanupBind?.();\n };\n } else if (attr.indexOf('update:') !== 0) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n const val = props[attr];\n const triggerValue = isSignal(val) ? val : signal(val);\n const cleanup = effect(() => {\n triggerValue.value = val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n track.cleanup = () => {\n cleanup?.();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = effect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = effect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = childrenMap.values();\n const parentChildNodesLength = parent.childNodes.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parentChildNodesLength === childrenMap.size + (before ? 1 : 0)) {\n const parentElement = parent as Element;\n parentElement.innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children.next().value;\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n\n childrenMap.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children.next().value;\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children.next().value;\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild) {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n } else {\n insertChild(parent, child, before);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nexport function patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n throw new Error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n"],"mappings":"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","names":["effect","signal","isFunction","value","template","track","isFunction","template","track","isFunction","template","isFunction","template"]}