aoye 0.0.45 → 0.0.47

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,"file":"aoye.esm.js","sources":["../src/core/global.ts","../src/core/type.ts","../src/core/schedule.ts","../src/type.ts","../src/util.ts","../src/core/operate.ts","../src/core/line.ts","../src/core/computed.ts","../src/core/signal.ts","../src/core/effect.ts","../src/core/scope.ts","../src/global.ts","../src/deep-signal.ts","../src/store.ts","../src/functional-api.ts"],"sourcesContent":["import { SignalNode } from './type';\n\nlet _execId = 0;\nlet currentExecId = 0;\n\nexport const execIdInc = () => ++_execId;\n/** effect、computed 回调执行的唯一 id\n * 用于判断重复依赖属于同一 effect、effect、computed\n */\nexport const execId = () => currentExecId;\nexport const setExecId = (v: number) => (currentExecId = v);\n\nlet pulling: SignalNode = null;\nexport const setPulling = (v: SignalNode) => (pulling = v);\nexport const getPulling = () => pulling as any;\n\nexport function runWithPulling<T extends (...args: any[]) => any>(fn: T, scope: any): ReturnType<T> {\n const oldPulling = pulling;\n pulling = scope;\n const ret = fn();\n pulling = oldPulling;\n return ret;\n}\n","import { Computed } from './computed';\nimport { Effect } from './effect';\nimport { Scope } from './scope';\nimport { Signal } from './signal';\n\nexport type OnClean = (isDestroy: boolean) => any;\n\nexport type SignalNode = Partial<\n Omit<Computed, 'callback'> & {\n dispose(): void;\n }\n>;\nexport type Link = {\n execId: number;\n up: SignalNode;\n down: SignalNode;\n nextEmitLine: Link;\n prevEmitLine: Link;\n nextRecLine: Link;\n prevRecLine: Link;\n};\n\nexport type OutLink = Link & {\n nextOutLink: OutLink;\n prevOutLink: OutLink;\n};\n\nexport type SideEffect = Effect | Computed;\n\nexport enum ScheduleType {\n /** signal 变化后 同步执行 Effect */\n Sync = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n /** signal 变化后优先级最高的异步任务 */\n Pre = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n /** signal 变化后优先级第二高的异步任务 */\n Render = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n /** signal 变化后优先级第三高的异步任务 */\n Post = 0b0000_0000_0000_0000_0000_0000_0000_1000\n}\n","import { micro } from '#/util';\nimport { Effect } from './effect';\n\nexport type TaskNode<T> = {\n value: T;\n next: TaskNode<T> | null;\n};\n\nexport type TaskQueue<T> = {\n head: TaskNode<T> | null;\n tail: TaskNode<T> | null;\n};\n\n/** bobe 专用的调度器 */\nexport class MultiScheduler<T> {\n /** 二进制位表示某个队列中是否有任务 */\n hasTask = 0;\n taskMap: Record<number, TaskQueue<T>> = {};\n constructor(queueCount: number) {\n for (let i = 0; i < queueCount; i++) {\n this.taskMap[1 << i] = {\n head: null,\n tail: null\n };\n }\n }\n\n addTask(queueId: number, task: any) {\n const queue = this.taskMap[queueId];\n const { tail } = queue;\n const item = {\n value: task,\n next: null\n };\n if (tail) {\n tail.next = item;\n } else {\n queue.head = item;\n }\n queue.tail = item;\n this.hasTask |= queueId;\n }\n\n flushAllTask() {\n while (this.hasTask) {\n const { hasTask } = this;\n const highest = hasTask & (~hasTask + 1);\n const task: Effect = this.consumeTask(highest).value as any;\n task.get();\n }\n }\n\n consumeTask(queueId: number) {\n const queue = this.taskMap[queueId];\n const { head, tail } = queue;\n const next = head.next;\n head.next = null;\n if (head === tail) {\n queue.head = null;\n queue.tail = null;\n // 最后一项被消费,这个队列就没有任务了\n this.hasTask &= ~queueId;\n } else {\n head.next = null;\n queue.head = next;\n }\n return head;\n }\n}\n\n/** TODO: 考虑如何与 ScheduleType 对齐\n * TODO: 考虑异步 effect 循环依赖的情况\n */\nexport const multiScheduler = new MultiScheduler(4);\n","import { Signal } from './core';\nexport { Signal };\n\nexport type SignalType = 'ref' | 'auto' | 'proxy';\n\nexport enum Keys {\n Iterator = '__AOYE_ITERATOR',\n Raw = '__AOYE_RAW',\n Meta = '__AOYE_META',\n /** 当一个值对象标记为 ShallowObject 时,它的所有属性都不需要代理 */\n ProxyFreeObject = '__AOYE_PROXY_FREE_OBJECT'\n}\nexport type Key = string | number | symbol;\n/** store 标识 */\nexport const IsStore = Symbol('__AOYE_IS_STORE'),\n StoreIgnoreKeys = Symbol('__AOYE_IGNORE_KEYS');\n\nexport type TaskControlReturn = {\n /** 当前任务已完成 */\n finished?: boolean;\n /** 启动一个新 定时器 | RAF | Idle | 微任务 ... 等 */\n startNewCallbackAble?: boolean;\n};\n\nexport type Task = {\n (): TaskControlReturn | void;\n [key: string]: any;\n};\n\nexport type CreateTaskProps = {\n callbackAble: (fn: Function) => any;\n aIsUrgent: (a: Task, b: Task) => boolean;\n};\nexport type Mix<T = any> = {\n (v: T): void;\n (): T;\n v: T;\n stop(): void;\n};\n\nexport type ValueDiff = {\n old: any;\n val: any;\n};\n\nexport type CreateScope = (customPull: () => void, scope?: Signal) => Dispose;\n\nexport type Dispose = {\n (): void;\n ins: Signal;\n};\n\n// 定义一个递减器,用来控制深度\ntype Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\nexport type DeepPath<T, Depth extends number = 8> = [Depth] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: [K] | [K, ...DeepPath<T[K], Prev[Depth]>];\n }[keyof T]\n : never;\n\nexport type DeepOmitPath<T, K extends string> = DeepPath<Omit<T, K>, 8>;\nexport type PRecord<K extends string | symbol | number, V> = Partial<Record<K, V>>;\nexport type DeepValue<T, P> = P extends [infer Head, ...infer Tail]\n ? Head extends keyof T\n ? Tail extends []\n ? T[Head]\n : DeepValue<T[Head], Tail>\n : never\n : never;\n\nexport type MatchValue<V1, T2, P2> = (DeepValue<T2, P2> extends V1 ? P2 : never) ","import { Keys } from \"./type\";\n\nexport const ide =\n globalThis.requestIdleCallback ||\n (globalThis.requestAnimationFrame\n ? (fn: Function) =>\n globalThis.requestAnimationFrame(() => {\n setTimeout(() => {\n fn();\n });\n })\n : globalThis.setTimeout);\n\nexport const now = () => {\n const timer = globalThis.performance || globalThis.Date;\n return timer.now();\n};\nlet channel: MessageChannel = globalThis.MessageChannel ? new MessageChannel() : null;\nif (globalThis.MessageChannel) {\n channel = new MessageChannel();\n}\nlet msgId = 0;\nexport const macro = fn => {\n if (!channel) {\n setTimeout(fn);\n }\n const memoId = msgId;\n function onMessage(e) {\n if (memoId === e.data) {\n fn();\n channel.port2.removeEventListener('message', onMessage);\n }\n }\n channel.port2.addEventListener('message', onMessage);\n channel.port1.postMessage(msgId++);\n};\n\nconst p = Promise.resolve();\nexport const micro = (cb: () => any) => {\n p.then(cb)\n}\n\nexport const toRaw = <T>(a: T) => {\n if (typeof a === 'object' && a !== null && a[Keys.Raw]) {\n return toRaw(a[Keys.Raw]);\n }\n return a;\n};","import { setPulling, getPulling } from './global';\nimport { Effect } from './effect';\nimport { Signal } from './signal';\nimport { Link, SideEffect, OutLink, SignalNode, OnClean, ScheduleType } from './type';\nimport { State, DirtyState, PullingOrScopeExecuted, ScopeAbort } from './macro' with { type: 'macro' };\nimport { multiScheduler } from './schedule';\nimport { micro } from '#/util';\n\nexport function mark(signal: Signal) {\n let line = signal.emitHead;\n while (line) {\n const down = line.down as Effect;\n const { scope, emitHead, state } = down;\n // if ((scope && scope.state & State.ScopeAbort) || down === up.scope || state & ScopeExecuted) {\n // }\n if (scope && scope.state & State.ScopeAbort) {\n } else {\n const notLocked = (state & State.PullLock) === 0;\n down.state |= notLocked ? State.NeedCompute : State.PullingNeedCompute;\n // window['mark'] = (window['mark'] || 0) + 1;\n if (state & State.IsScope) {\n if (notLocked && state & State.IsEffect) {\n if (down.type === ScheduleType.Sync) {\n addEffect(down);\n } else {\n multiScheduler.addTask(down.type, down);\n }\n }\n } else if (emitHead) {\n markUnknownDeep(emitHead);\n }\n }\n line = line.nextEmitLine;\n }\n}\n\nfunction markUnknownDeep(initialLine: Link) {\n const noPulling = !getPulling();\n // 初始节点入栈\n const stack: Link[] = [initialLine];\n let len = 1;\n\n while (len > 0) {\n // 手动出栈,不触发数组缩容\n let line: Link = stack[--len];\n stack[len] = null as any;\n\n while (line) {\n const down = line.down as Effect;\n const { state, scope } = down;\n // 判定逻辑\n // const noSkip = !(\n // (scope && scope.state & State.ScopeAbort) ||\n // down === up.scope ||\n // state & UnknownOrScopeExecuted\n // );\n // 1. 禁用,2. 已标记\n if ((scope && scope.state & State.ScopeAbort) || (noPulling && state & DirtyState)) {\n } else {\n const notLocked = (state & State.PullLock) === 0;\n down.state |= notLocked ? State.Unknown : State.PullingUnknown;\n // window['mark'] = (window['mark'] || 0) + 1;\n if (state & State.IsScope) {\n if (notLocked && state & State.IsEffect) {\n if (down.type === ScheduleType.Sync) {\n addEffect(down);\n } else {\n multiScheduler.addTask(down.type, down);\n }\n }\n } else if (down.emitHead) {\n // 手动入栈\n stack[len++] = down.emitHead;\n }\n }\n\n line = line.nextEmitLine;\n }\n }\n}\n\nexport function pullDeep(root: SideEffect): any {\n let node = root,\n top: Link = null,\n i = -1;\n const lineStack: Link[] = [];\n do {\n const { state, scope } = node;\n let noSkipSelf = !(\n state & PullingOrScopeExecuted ||\n (state & DirtyState) === 0 ||\n (scope && scope.state & State.ScopeAbort)\n );\n // begin\n const firstLine = node.recHead;\n // 1. 本节点不跳过则可进入子节点,\n // 2. 本节点需要计算,不需要进入子节点\n if (noSkipSelf) {\n node.state |= State.PullLock;\n if ((state & State.NeedCompute) === 0 && firstLine) {\n node = firstLine.up as SideEffect;\n lineStack[++i] = top;\n top = firstLine;\n continue;\n }\n }\n\n do {\n const { state } = node;\n let noGoSibling = false;\n if (noSkipSelf) {\n // 子节点计算完成后重新查看父节点的 NeedCompute\n if (state & State.NeedCompute) {\n // window['update'] = (window['update'] || 0) + 1;\n // @ts-ignore\n const prevValue = node.value;\n const prevPulling = getPulling();\n setPulling(node);\n const value = node.get(false, false);\n setPulling(prevPulling);\n // 将父标记为 NeedCompute\n if ((noGoSibling = value !== prevValue)) {\n let line = node.emitHead;\n while (line) {\n const { down } = line;\n down.state &= ~State.Unknown;\n down.state |= State.NeedCompute;\n line = line.nextEmitLine;\n }\n }\n }\n // 不需要计算时将,将 blocked 标记释放\n else {\n transferDirtyState(node, state);\n }\n node.state &= ~State.PullLock;\n }\n // complete\n // 递归出口\n if (node === root) {\n // @ts-ignore\n return node.value;\n }\n if (!noGoSibling && top.nextRecLine) {\n top = top.nextRecLine;\n node = top.up as SideEffect;\n break;\n }\n // 避免回溯时子节点 noSkipSelf 影响到父节点\n noSkipSelf = true;\n node = top.down as SideEffect;\n top = lineStack[i];\n lineStack[i--] = null;\n } while (true);\n } while (true);\n}\n/**\n * 将 PullingUnknown、PullingNeedCompute\n * 转为 Unknown、NeedCompute\n * TODO: 考虑加属性 blockedSate 进行优化\n */\nexport function transferDirtyState(node: SideEffect, state: State) {\n // 被处理的节点应该恢复\n if (state & State.PullingUnknown) {\n node.state = (state & ~State.PullingUnknown) | State.Unknown;\n } else {\n node.state &= ~State.Unknown;\n }\n // 被处理的节点应该恢复\n if (state & State.PullingNeedCompute) {\n node.state = (state & ~State.PullingNeedCompute) | State.NeedCompute;\n } else {\n node.state &= ~State.NeedCompute;\n }\n}\nconst effectQueue: Effect[] = [];\nlet consumeI = -1,\n produceI = -1;\nexport function addEffect(effect: Effect) {\n effectQueue[++produceI] = effect;\n}\nexport function flushSyncEffect() {\n // 正在消费\n if (consumeI !== -1) {\n return;\n }\n while (++consumeI <= produceI) {\n const effect = effectQueue[consumeI];\n if (effect.state | DirtyState) {\n effect.get();\n }\n effectQueue[consumeI] = null;\n }\n consumeI = -1;\n produceI = -1;\n}\n\nexport function flushMicroEffect() {\n if (multiScheduler.hasTask) {\n micro(() => {\n multiScheduler.flushAllTask();\n });\n }\n}\n\nlet _batchDeep = 0;\nexport const batchStart = () => _batchDeep++;\nexport const batchEnd = () => {\n _batchDeep--;\n if (_batchDeep === 0) {\n flushSyncEffect();\n flushMicroEffect();\n }\n};\n/** effect、computed 回调执行的唯一 id\n * 用于判断重复依赖属于同一 effect、effect、computed\n */\nexport const batchDeep = () => _batchDeep;\n\nexport function unlink(line: OutLink, deep: boolean) {\n // window['unlink'] = (window['unlink'] || 0) + 1;\n const { nextEmitLine, prevEmitLine, nextRecLine, prevRecLine, up, down, prevOutLink, nextOutLink } = line;\n const { scope } = down;\n // 1. 非唯一 emitLine, 直接释放即可\n /*----------------- 从 up 中移除 -----------------*/\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = nextEmitLine;\n } else {\n // 头移除\n up.emitHead = nextEmitLine;\n }\n if (nextEmitLine) {\n nextEmitLine.prevEmitLine = prevEmitLine;\n } else {\n // 尾移除\n up.emitTail = prevEmitLine;\n }\n /*----------------- 从 down 中移除 -----------------*/\n if (prevRecLine) {\n prevRecLine.nextRecLine = nextRecLine;\n } else {\n // 头移除\n down.recHead = nextRecLine;\n }\n if (nextRecLine) {\n nextRecLine.prevRecLine = prevRecLine;\n } else {\n // 尾移除\n down.recTail = prevRecLine;\n }\n /*----------------- 从 outLink 中移除 -----------------*/\n if (prevOutLink) {\n prevOutLink.nextOutLink = nextOutLink;\n }\n if (nextOutLink) {\n nextOutLink.prevOutLink = prevOutLink;\n }\n if (scope && scope.outLink === line) {\n scope.outLink = nextOutLink;\n }\n if (up.state & State.IsScope) {\n // @ts-ignore\n up.dispose();\n // dispose(up as Effect);\n }\n // 唯一 emitLine, 现在 up 是游离节点,递归删除 up 的上游依赖\n else if (deep && !prevEmitLine && !nextEmitLine) {\n let { recHead: line } = up as Effect;\n // 如果 up 节点上面也有 唯一 emitLine 继续释放\n while (line) {\n const next = line.nextRecLine;\n unlink(line as OutLink, true);\n line = next;\n }\n }\n}\n\nexport function dispose(this: SideEffect) {\n // window['dispose'] = (window['dispose'] || 0) + 1;\n let { recHead: toDel, emitHead } = this;\n while (toDel) {\n const { up, nextRecLine } = toDel;\n // 上游非 scope 直接 unlink\n if ((up.state & State.IsScope) === 0) {\n unlink(toDel as OutLink, true);\n toDel = nextRecLine;\n continue;\n }\n let node = up,\n top: Link = null,\n i = -1;\n const lineStack: Link[] = [];\n outer: do {\n let noSkipSelf = node.state & State.IsScope && (node.state & ScopeAbort) === 0;\n const firstLine = node.recHead;\n\n if (noSkipSelf && firstLine) {\n node = firstLine.up as SideEffect;\n lineStack[++i] = top;\n top = firstLine;\n continue;\n }\n do {\n if (noSkipSelf) {\n releaseScope(node as Effect);\n }\n // 递归出口\n if (node === up) {\n break outer;\n }\n if (top.nextRecLine) {\n top = top.nextRecLine;\n node = top.up as SideEffect;\n break;\n }\n noSkipSelf = true;\n node = top.down as SideEffect;\n top = lineStack[i];\n lineStack[i--] = null;\n } while (true);\n } while (true);\n toDel = nextRecLine;\n }\n releaseScope(this as Effect);\n if (emitHead) unlink(emitHead as OutLink, false);\n}\n\nexport function clean(onClean: OnClean) {\n const current = getPulling() as Effect;\n current.clean = onClean;\n}\n\nfunction releaseScope(scope: Effect) {\n let { outLink } = scope;\n while (outLink) {\n const next = outLink.nextOutLink;\n unlink(outLink, true);\n outLink = next;\n }\n scope.state |= State.ScopeAbort;\n // clean 在 scope 释放时执行\n scope.clean?.(true);\n scope.clean = null;\n}\n\n// export function pullDeep<T>(node: SideEffect, down: SignalNode): T {\n// let { scope, state, recHead: line, emitHead: downLine } = node;\n// // @ts-ignore\n// const prevValue = node.value;\n// if (state & State.Pulling || (scope && scope.state & State.ScopeAbort) || state & ScopeExecuted) {\n// return prevValue;\n// }\n// node.state |= State.Pulling;\n// setPulling(node);\n// try {\n// // 当前无需计算 先往下查询需计算的节点\n// if ((state & State.NeedCompute) === 0) {\n// while (line) {\n// pullDeep(line.up as any, node);\n// line = line.nextRecLine;\n// }\n// }\n\n// // 子节点完成后重新判断父节点是否需要计算\n// if (node.state & State.NeedCompute) {\n// const value = node.get(false, false);\n// if (value !== prevValue) {\n// while (downLine) {\n// const { down } = downLine;\n// down.state &= ~State.Unknown;\n// down.state |= State.NeedCompute;\n// downLine = downLine.nextEmitLine;\n// }\n// }\n// node.state &= ~State.NeedCompute;\n// return value;\n// }\n// return prevValue;\n// } finally {\n// node.state &= ~State.Pulling;\n// setPulling(down);\n// }\n// }\n\n// function markUnknownDeep(line: Link) {\n// while (line) {\n// const { down, up } = line;\n// if (\n// (down.scope &&\n// // 所属 scope 被取消\n// (down.scope.state & State.ScopeAbort ||\n// // 下游是上游的 scope\n// down === up.scope)) ||\n// // 是 scope 节点,且处于 ready 状态,不需要重复执行\n// down.state & ScopeExecuted\n// ) {\n// } else {\n// down.state |= State.Unknown;\n// markUnknownDeep(down.emitHead);\n// }\n// line = line.nextEmitLine;\n// }\n// }\n","import { execId } from './global';\nimport { Scope } from './scope';\nimport { Link, OutLink, SignalNode } from './type';\nimport { State } from './macro' with { type: 'macro' };\nimport { Effect } from './effect';\nexport function link(\n /** 上游顶点 */\n up: SignalNode = null,\n /** 下游顶点 */\n down: SignalNode = null\n) {\n const { emitTail: prevEmitLine, scope: scopeUp } = up;\n let { recHead, recTail, scope: scopeDown } = down;\n // 符合外链规则,使用 outLink 进行连接\n if (scopeDown && scopeDown !== scopeUp && (up.state & State.IsScope) === 0) {\n outLink(up, down);\n return;\n }\n const nextRec = recTail ? recTail.nextRecLine : recHead;\n const eid = execId();\n // 重复依赖 跳过\n if (prevEmitLine && prevEmitLine.down === down && prevEmitLine.execId === eid) {\n return;\n }\n\n // 1. down 无 nextRec 尾插\n if (!nextRec) {\n // window['link'] = (window['link'] || 0) + 1;\n // 是 1. 上游节点尾指针 2.下游节点的首尾指针\n const line: Link = {\n execId: eid,\n up,\n down,\n prevEmitLine,\n nextEmitLine: null,\n prevRecLine: recTail,\n nextRecLine: null\n };\n // 加入 up 的链表\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = line;\n } else {\n up.emitHead = line;\n }\n up.emitTail = line;\n\n // 加入 down 的链表\n if (recTail) {\n recTail.nextRecLine = line;\n } else {\n down.recHead = line;\n }\n down.recTail = line;\n return;\n }\n\n // 2. 如果下一个 rec 连接的就是 up,直接复用\n if (nextRec.up === up) {\n nextRec.execId = eid;\n down.recTail = nextRec;\n return;\n }\n // window['link'] = (window['link'] || 0) + 1;\n // 3. rec 指向不匹配, 在 tail 和 next 中间插入 line\n const line: Link = {\n execId: eid,\n up,\n down,\n prevEmitLine,\n nextEmitLine: null,\n prevRecLine: recTail,\n nextRecLine: nextRec\n };\n // 加入 up 的链表\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = line;\n } else {\n up.emitHead = line;\n }\n up.emitTail = line;\n\n // 加入 down 链表, 一定不是尾插,只考虑是否头插\n if (recHead) {\n recTail.nextRecLine = line;\n } else {\n down.recHead = line;\n }\n // 移动 recTail\n down.recTail = line;\n // tail <-> line <-> nextRec\n if (recTail) recTail.nextRecLine = line;\n nextRec.prevRecLine = line;\n}\n\nexport function outLink(\n /** 上游顶点 */\n up: SignalNode = null,\n /** 下游顶点 */\n down: SignalNode = null\n) {\n const { emitTail: prevEmitLine } = up;\n let { recHead, recTail, scope: scopeDown } = down;\n const nextRec = recTail ? recTail.nextRecLine : recHead;\n // 1. down 无 nextRec 尾插\n if (!nextRec) {\n // 是 1. 上游节点尾指针 2.下游节点的首尾指针\n const line: OutLink = {\n execId: execId(),\n up,\n down,\n prevEmitLine,\n nextEmitLine: null,\n prevRecLine: recTail,\n nextRecLine: null,\n nextOutLink: null,\n prevOutLink: null\n };\n\n // 加入 up 的链表\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = line;\n } else {\n up.emitHead = line;\n }\n up.emitTail = line;\n\n // 加入 down 的链表\n if (recTail) {\n recTail.nextRecLine = line;\n } else {\n down.recHead = line;\n }\n down.recTail = line;\n // if (scopeDown && scopeDown !== scopeUp && (up.state & State.IsScope) == 0)\n makeOutLink(scopeDown, line);\n return;\n }\n\n // 2. 如果下一个 rec 连接的就是 up,直接复用\n if (nextRec.up === up) {\n down.recTail = nextRec;\n return;\n }\n // 3. rec 指向不匹配, 在 tail 和 next 中间插入 line\n const line: OutLink = {\n execId: execId(),\n up,\n down,\n prevEmitLine,\n nextEmitLine: null,\n prevRecLine: recTail,\n nextRecLine: nextRec,\n nextOutLink: null,\n prevOutLink: null\n };\n // 加入 up 的链表\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = line;\n } else {\n up.emitHead = line;\n }\n up.emitTail = line;\n\n // 加入 down 链表, 一定不是尾插,只考虑是否头插\n if (recHead) {\n recTail.nextRecLine = line;\n } else {\n down.recHead = line;\n }\n // 移动 recTail\n down.recTail = line;\n // tail <-> line <-> nextRec\n if (recTail) recTail.nextRecLine = line;\n nextRec.prevRecLine = line;\n // if (scopeDown && scopeDown !== scopeUp && (up.state & State.IsScope) == 0)\n makeOutLink(scopeDown, line);\n}\n\nfunction makeOutLink(scopeDown: Effect|Scope, line: OutLink) {\n const first = scopeDown.outLink;\n if (first) {\n first.prevOutLink = line;\n line.nextOutLink = first;\n }\n scopeDown.outLink = line;\n}\n\nexport function outLink2(\n /** 上游顶点 */\n up: SignalNode = null,\n /** 下游顶点 */\n down: SignalNode = null\n) {\n const { emitTail: prevEmitLine, emitHead } = up;\n const { emitTail: prevRecLine, recHead, scope } = down;\n const { outLink: first } = scope;\n\n const line: OutLink = {\n execId: execId(),\n up,\n down,\n prevEmitLine,\n prevRecLine,\n nextEmitLine: null,\n nextRecLine: null,\n nextOutLink: first,\n prevOutLink: null\n };\n\n scope.outLink = line;\n if (first) {\n first.nextOutLink = line;\n }\n\n // 处理节点上的双向链表\n up.emitTail = line;\n down.recTail = line;\n\n if (!emitHead) {\n up.emitHead = line;\n }\n if (!recHead) {\n down.recHead = line;\n }\n}\n","import { setPulling, getPulling, execIdInc, execId, setExecId } from './global';\nimport { Effect } from './effect';\nimport { Scope } from './scope';\nimport { Link, OutLink, SideEffect, SignalNode } from './type';\nimport { State, DirtyState } from './macro' with { type: 'macro' };\nimport { transferDirtyState, pullDeep, unlink } from './operate';\nimport { link } from './line';\n\nexport class Computed<T = any> {\n emitHead: Link = null;\n emitTail: Link = null;\n recHead: Link = null;\n recTail: Link = null;\n state = State.Clean;\n scope: Effect | Scope = getPulling() as any;\n value: T = null;\n constructor(public callback: (thisArgs: Computed) => T) {}\n get(shouldLink = true, notForceUpdate = true) {\n const { scope } = this;\n if (scope && scope.state & State.ScopeAbort) return this.value;\n const down = getPulling();\n if (this.recHead && notForceUpdate) {\n if (this.state & DirtyState) {\n this.value = pullDeep(this);\n }\n } else {\n this.state |= State.PullLock;\n\n const nextId = execIdInc();\n const prevId = execId();\n setExecId(nextId);\n\n setPulling(this);\n this.recTail = null;\n this.value = this.callback(this);\n this.state &= ~State.PullLock;\n setPulling(down);\n\n setExecId(prevId);\n // Unknown 转换\n transferDirtyState(this, this.state);\n let line = this.recTail?.nextRecLine;\n while (line) {\n const nextLine = line.nextRecLine;\n unlink(line as OutLink, true);\n line = nextLine;\n }\n }\n\n // link 连接\n if (shouldLink && down && (down.state & State.LinkScopeOnly) === 0) {\n link(this, down);\n }\n return this.value;\n }\n}\n","import { Effect } from './effect';\nimport { getPulling } from './global';\nimport { link } from './line';\nimport { mark, flushSyncEffect, batchDeep, flushMicroEffect } from './operate';\nimport { Scope } from './scope';\nimport { Link, SignalNode } from './type';\nimport { State } from './macro' with { type: 'macro' };\n\nexport class Signal<T = any> {\n scope: Effect | Scope = getPulling() as any;\n emitHead: Link = null;\n emitTail: Link = null;\n state = State.Clean;\n\n constructor(public value: T) {}\n // TODO: shouldLink 考虑 signal -> computed NeedComputed -> effect 时执行 get 不应该触发 shouldLink\n get(shouldLink = true) {\n if (shouldLink) {\n const down = getPulling();\n // 在 watcher 的 callback 中执行,不连接\n if (down && (down.state & State.LinkScopeOnly) === 0) {\n link(this, down);\n }\n }\n return this.value;\n }\n set(v: T) {\n if (this.value === v) return;\n this.value = v;\n if (this.emitHead) {\n mark(this);\n if (batchDeep() === 0) {\n flushSyncEffect();\n flushMicroEffect();\n }\n }\n }\n}\n","import { execId, execIdInc, getPulling, setExecId, setPulling } from './global';\nimport { link } from './line';\nimport { transferDirtyState, pullDeep, unlink, dispose } from './operate';\nimport { Scope } from './scope';\nimport { Link, OnClean, OutLink, ScheduleType, SideEffect, SignalNode } from './type';\nimport { State } from './macro' with { type: 'macro' };\n\nconst EffectState = State.IsEffect | State.IsScope;\nexport class Effect {\n emitHead: Link = null;\n emitTail: Link = null;\n recHead: Link = null;\n recTail: Link = null;\n\n state = EffectState;\n scope: Effect | Scope = getPulling() as any;\n outLink: OutLink = null;\n clean: OnClean = null;\n constructor(public callback: (thisArg: Effect) => OnClean | void, public type: ScheduleType = ScheduleType.Sync) {\n this.get();\n }\n get(shouldLink = true, notForceUpdate = true) {\n if (this.state & State.ScopeAbort) return;\n const down = getPulling();\n if (this.recHead && notForceUpdate) {\n pullDeep(this);\n } else {\n this.state |= State.PullLock;\n\n setPulling(null);\n this.clean?.(false);\n this.clean = null;\n\n const nextId = execIdInc();\n const prevId = execId();\n setExecId(nextId);\n\n setPulling(this);\n this.recTail = null;\n const res = this.callback(this);\n typeof res === 'function' && (this.clean = res);\n this.state &= ~State.PullLock;\n setPulling(down);\n\n setExecId(prevId);\n // Unknown 转换\n transferDirtyState(this, this.state);\n let line = this.recTail?.nextRecLine;\n while (line) {\n const nextLine = line.nextRecLine;\n unlink(line as OutLink, true);\n line = nextLine;\n }\n }\n // effect 可以嵌套管理,但是链接只建立一次\n if (!this.emitHead && shouldLink && down) {\n link(this, down);\n }\n }\n}\n\nexport interface Effect {\n dispose(): void;\n}\n\nEffect.prototype.dispose = dispose;\n","import { Effect } from './effect';\nimport { getPulling, setPulling } from './global';\nimport { link } from './line';\nimport { Link, OnClean, OutLink } from './type';\nimport { State } from './macro' with { type: 'macro' };\nimport { dispose } from './operate';\nconst ScopeAndLinkScopeOnly = State.IsScope | State.LinkScopeOnly;\nexport class Scope {\n emitHead: Link = null;\n emitTail: Link = null;\n recHead: Link = null;\n recTail: Link = null;\n\n state = ScopeAndLinkScopeOnly;\n scope: Effect | Scope = getPulling() as any;\n outLink: OutLink = null;\n clean: OnClean = null;\n constructor(public callback: () => OnClean | any) {}\n get(shouldLink = true) {\n const { scope } = this;\n this.state |= State.PullLock;\n setPulling(this);\n this.recTail = null;\n const res = this.callback();\n typeof res === 'function' && (this.clean = res);\n this.state &= ~State.PullLock;\n setPulling(scope);\n\n // effect 可以嵌套管理,但是链接只建立一次\n if (!this.emitHead && shouldLink && scope) {\n link(this, scope);\n }\n }\n}\nexport interface Scope {\n dispose(): void;\n}\n\nScope.prototype.dispose = dispose;\n","export const rawToProxy = new WeakMap();\n\nexport enum State {\n Clean = 0,\n /** watch 节点执行 watcher 时只连接 scope */\n LinkScopeOnly = 0b0000_0000_0000_0000_0000_0001_0000_0000,\n /** 仅用于 scope 节点是否 abort */\n ScopeAbort = 0b0000_0000_0000_0000_0000_0000_1000_0000,\n /** 仅用于 scope 节点是否 ready */\n ScopeReady = 0b0000_0000_0000_0000_0000_0000_0100_0000,\n /** 当前节点是 scope 节点 */\n IsScope = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n /** 当前节点正在 pull 递归中标记为 dirty, 保证 pulling 过程中不影响 dirty 传播 */\n PullingDirty = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n /** 当前节点正在 pull 递归中标记为 unknown, 保证 pulling 过程中不影响 dirty 传播 */\n PullingUnknown = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n /** 当前节点可能变化 */\n Unknown = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n /** 当前节点有变化 */\n Dirty = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n /** 当前节点正在进行 pull 预检处理 */\n Pulling = 0b0000_0000_0000_0000_0000_0000_0000_0001\n}\n\nexport const DirtyState = State.Unknown | State.Dirty;\nexport const ScopeExecuted = State.ScopeReady | State.ScopeAbort;\nexport const ScopeAbort = State.ScopeAbort;\n","import { isNatureNumStr } from 'bobe-shared';\nimport { rawToProxy } from './global';\nimport { Computed, Scope, Signal, batchEnd, batchStart, runWithPulling } from './core';\nimport { IsStore, Key, Keys, StoreIgnoreKeys } from './type';\nimport { toRaw } from './util';\n\nexport const deepSignal = <T>(target: T, scope: Scope, deep = true) => {\n const isObj = typeof target === 'object' && target !== null;\n // 1. 不是对象则返回原始值\n // 2. 返回已有代理\n // 3. 对象不需要代理\n if (!isObj || target[Keys.Raw] || target[Keys.ProxyFreeObject]) return target;\n // 2. 返回已有代理\n const p = rawToProxy.get(target);\n if (p) return p;\n\n // 每个对象维护自己的 cells 闭包\n const cells = new Map<any, Signal>();\n const targetIsArray = Array.isArray(target);\n const targetIsStore = Boolean(target.constructor?.[IsStore]);\n const meta = {\n deep,\n scope,\n cells\n };\n const proxy = new Proxy(target, {\n get(obj, prop, receiver) {\n switch (prop) {\n case Keys.Raw:\n return target;\n case Keys.Meta:\n return meta;\n default:\n break;\n }\n\n if (prop === Symbol.unscopables) return Reflect.get(obj, prop, receiver);\n\n if (targetIsStore && isIgnoreKey(obj.constructor[StoreIgnoreKeys], prop)) {\n return Reflect.get(obj, prop, receiver);\n }\n\n const desc = Reflect.getOwnPropertyDescriptor(obj, prop);\n\n const isGetter = desc && typeof desc.get === 'function';\n\n if (isGetter) {\n return handleGetterAsComputed(obj, prop, receiver, cells as any, scope);\n }\n\n // 创建 Signal\n const value = Reflect.get(obj, prop, receiver);\n\n const valueIsFn = typeof value === 'function';\n if (valueIsFn) {\n if (targetIsArray) {\n return arrayMethodReWrites[prop] || value;\n } else {\n return value;\n }\n }\n\n // 已有对应 Signal\n let s: Signal = cells.get(prop);\n if (s) {\n return s.get();\n }\n\n const wrappedValue = deep ? deepSignal(value, scope) : value;\n s = new Signal(wrappedValue);\n s.scope = scope;\n cells.set(prop, s);\n return s.get();\n },\n\n set(obj, prop, value, receiver) {\n if ((targetIsStore && isIgnoreKey(obj.constructor[StoreIgnoreKeys], prop)) || typeof value === 'function') {\n return Reflect.set(obj, prop, value, receiver);\n }\n // 数组项 set 可能出现 Iterator 设置,用 batch 避免 effect 多次执行\n batchStart();\n const success = Reflect.set(obj, prop, value, receiver);\n // 已有对应 Signal,更新 signal 值\n const cell = cells.get(prop);\n if (cell) {\n cell.set(deep ? deepSignal(value, scope) : value);\n }\n\n if (targetIsArray) {\n handleArraySet(obj, prop, value, receiver);\n } else {\n triggerIter(obj, prop, value, receiver);\n }\n batchEnd();\n // 保持原始对象干净\n return success;\n },\n\n // 【核心修改】拦截 delete 操作\n deleteProperty(obj, prop) {\n if ((targetIsStore && isIgnoreKey(obj.constructor[StoreIgnoreKeys], prop)) || typeof obj[prop] === 'function') {\n return Reflect.deleteProperty(obj, prop);\n }\n // 2. 从 Map 中移除,切断引用,允许 GC 回收这个 $() 实例\n cells.delete(prop);\n triggerIter(obj, prop, undefined, proxy);\n return Reflect.deleteProperty(obj, prop);\n },\n\n ownKeys(obj) {\n if (targetIsArray) {\n // @ts-ignore\n proxy.length;\n } else {\n proxy[Keys.Iterator];\n }\n return Reflect.ownKeys(obj);\n }\n });\n\n rawToProxy.set(target, proxy);\n return proxy;\n};\n\n/**\n * 将 from 响应式对象中 fromKey 对应的 Signal\n * 共享给 to 响应式对象的 toKey\n */\nexport const shareSignal = (from: any, fromPath: string, to: any, toPath: string) => {\n try {\n const toPaths = toPath.split('.');\n const formPaths = Array.isArray(fromPath) ? fromPath : fromPath.split('.');\n runWithPulling(() => {\n const { target: fromTarget, key: fromKey } = getTargetAndKey(from, formPaths);\n // 通过 get 陷阱确保 signal 已生成\n const val = fromTarget[fromKey];\n // 获取 signal\n const fromSignal = fromTarget[Keys.Meta].cells.get(fromKey)!;\n\n // 将 signal 共享给 to 代理对象\n const { target: toTarget, key: toKey } = getTargetAndKey(to, toPaths);\n toTarget[Keys.Meta].cells.set(toKey, fromSignal);\n toTarget[Keys.Raw][toKey] = val;\n }, null);\n } catch (error) {\n console.error('映射了不存在的Key!');\n throw error;\n }\n};\n\nfunction getTargetAndKey(obj: any, paths: string[]) {\n let target = obj;\n let key = '';\n const len = paths.length;\n for (let i = 0; i < len; i++) {\n key = paths[i];\n // 通过倒数第二个 key,可以找到代理对象\n if (i < len - 1) {\n target = target[key];\n }\n }\n return { target, key };\n}\n\nfunction isIgnoreKey(ignores: Key[], key: Key) {\n if (typeof key !== 'string') {\n return ignores.includes(key);\n }\n return ignores.some(it => typeof it === 'string' && key.startsWith(it));\n}\n\nfunction handleGetterAsComputed(\n obj: object,\n prop: string | symbol,\n receiver: any,\n cells: Map<any, Computed>,\n scope: Scope\n) {\n let s = cells.get(prop);\n if (s) {\n return s.get();\n }\n\n s = new Computed(() => Reflect.get(obj, prop, receiver));\n s.scope = scope;\n cells.set(prop, s);\n return s.get();\n}\n\nfunction handleArraySet(arr: object, prop: string | symbol, value: any, receiver: any) {\n // 设置 length\n if (prop === 'length') {\n }\n // 设置 index,由于 includes 等方法不对 index 再做监听,通过 Keys.Iterator 来保证副作用正确执行\n else if (isNatureNumStr(prop)) {\n receiver[Keys.Iterator] = (arr[Keys.Iterator] || 0) + 1;\n }\n // 其他\n else {\n triggerIter(arr, prop, value, receiver);\n }\n}\n\nfunction triggerIter(obj: object, prop: string | symbol, value: any, receiver: any) {\n if (!Reflect.has(obj, prop)) {\n receiver[Keys.Iterator] = (receiver[Keys.Raw][Keys.Iterator] || 0) + 1;\n }\n}\n\nconst arrayMethodReWrites: any = {};\n/*----------------- 增删移 增加 __Iterator Set ✅ -----------------*/\n['pop', 'push', 'shift', 'splice', 'unshift', 'copyWithin', 'reverse', 'fill'].forEach(key => {\n arrayMethodReWrites[key] = function (...args: any[]) {\n batchStart();\n const fn = Array.prototype[key];\n // 不会进行依赖收集,但是会触发 set\n const res = runWithPulling(() => fn.call(this, ...args), null);\n this[Keys.Iterator] = (this[Keys.Raw][Keys.Iterator] || 0) + 1;\n batchEnd();\n return res;\n };\n});\n\n/*----------------- 全等匹配 仅收集 __Iterator Get, 尝试使用原始或代理值再找一遍 ✅ -----------------*/\n['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n arrayMethodReWrites[key] = function (...args: any[]) {\n const fn = Array.prototype[key];\n const that = toRaw(this);\n let result = fn.call(that, ...args);\n const value = args[0];\n // 使用传入的值但是未找到,尝试使用代理值,或原始值查询\n if ((result === false || result === -1) && typeof value === 'object' && value !== null) {\n if (value[Keys.Raw]) {\n args[0] = value[Keys.Raw];\n result = fn.call(that, ...args);\n }\n const p = rawToProxy.get(value);\n if (p) {\n args[0] = p;\n result = fn.call(that, ...args);\n }\n }\n // 增加 __Iterator Get\n this[Keys.Iterator];\n return result;\n };\n});\n\n/*----------------- 重写迭代器获取 仅收集 __Iterator Get, ✅ -----------------*/\n// keys 不重写因为 array 的 keys 和 length 对等, length 不变 keys 也不变\n[Symbol.iterator, 'values', 'entries'].forEach(key => {\n const isEntries = key === 'entries';\n arrayMethodReWrites[key] = function (...args: any[]) {\n const fn = Array.prototype[key];\n const rawArray = toRaw(this);\n const iter = fn.call(rawArray, ...args);\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n // 深度代理需要将 iter.next 返回值转 proxy\n if (isDeep) {\n const rawNext = iter.next.bind(iter);\n iter.next = () => {\n const result = rawNext();\n if (!result.done) {\n if (isEntries) {\n result.value[1] = deepSignal(result.value[1], scope);\n } else {\n result.value = deepSignal(result.value, scope);\n }\n }\n return result;\n };\n }\n\n this[Keys.Iterator];\n\n return iter;\n };\n});\n\n/**\n * filter 函数的实现\n */\narrayMethodReWrites.filter = function (callback, thisArg) {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n const result = [];\n let resultIndex = 0;\n\n const userThis = thisArg || that;\n\n const len = that.length;\n for (let i = 0; i < len; i++) {\n // 使用 in 操作符检查索引是否存在\n // 原生 filter 会跳过空洞(比如 [1, , 3] 中的 index 1)\n if (i in that) {\n const value = isDeep ? deepSignal(that[i], scope) : that[i];\n // 性能点 3:直接调用回调,避免使用多余的包装\n if (callback.call(userThis, value, i, userThis)) {\n // 性能点 4:直接通过索引赋值,通常比 push() 略快\n result[resultIndex++] = value;\n }\n }\n }\n this[Keys.Iterator];\n return result;\n};\n\narrayMethodReWrites.slice = function (start, end) {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n\n const that = toRaw(this);\n const len = that.length;\n\n // 1. 处理 start 参数\n let k = start || 0;\n if (k < 0) {\n k = Math.max(len + k, 0);\n } else {\n k = Math.min(k, len);\n }\n\n // 2. 处理 end 参数\n let final = end === undefined ? len : end;\n if (final < 0) {\n final = Math.max(len + final, 0);\n } else {\n final = Math.min(final, len);\n }\n\n // 3. 计算实际需要抽取的长度\n const count = Math.max(final - k, 0);\n\n // 4. 预分配数组空间以提升性能(针对大数组非常有效)\n // 现代引擎对于已知长度的数组初始化会有优化\n const result = new Array(count);\n\n // 5. 循环赋值\n for (let i = 0; i < count; i++) {\n // 确保处理稀疏数组的情况,保持与原生行为一致\n if (i + k in that) {\n result[i] = isDeep ? deepSignal(that[i + k], scope) : that[i + k];\n }\n }\n this[Keys.Iterator];\n return result;\n};\n\narrayMethodReWrites.toReversed = function () {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n\n // 2. 获取数组长度(使用无符号右移保证为正整数,模拟规范中的 ToLength/ToUint32)\n const len = that.length;\n\n // 3. 创建等长的新数组\n // 预先分配内存空间比不断 push 性能更好\n const result = new Array(len);\n\n // 4. 填充新数组\n // 使用双指针或简单减法遍历。由于 O[i] 可能触发 getter,\n // 且我们需要处理稀疏数组,直接赋值 A[k] = O[j] 即可。\n let k = 0;\n while (k < len) {\n // 根据规范,toReversed 会读取索引值,如果索引不存在则为 undefined\n // 这会自动将稀疏数组的 hole 转为 undefined\n result[k] = isDeep ? deepSignal(that[len - 1 - k], scope) : that[len - 1 - k];\n k++;\n }\n\n this[Keys.Iterator];\n // 5. 返回结果\n return result;\n};\n\narrayMethodReWrites.toSpliced = function (start, deleteCount, ...items) {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n\n const len = that.length;\n\n // 1. 确定实际的相对起始索引 (处理负数和越界)\n let relativeStart = start >> 0; // 快速取整\n let actualStart = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len);\n\n // 2. 确定实际删除的数量\n let actualDeleteCount;\n if (arguments.length === 0) {\n actualDeleteCount = 0;\n } else if (arguments.length === 1) {\n actualDeleteCount = len - actualStart;\n } else {\n let dc = deleteCount >> 0;\n actualDeleteCount = Math.min(Math.max(dc, 0), len - actualStart);\n }\n\n // 3. 计算新数组长度\n const insertCount = items.length;\n const newLen = len - actualDeleteCount + insertCount;\n const result = new Array(newLen);\n\n // 4. 填充新数组(分段式操作,性能最优)\n\n // 第一段:保留起始点之前的元素\n for (let i = 0; i < actualStart; i++) {\n result[i] = isDeep ? deepSignal(that[i], scope) : that[i];\n }\n\n // 第二段:插入新元素\n for (let i = 0; i < insertCount; i++) {\n result[actualStart + i] = isDeep ? deepSignal(items[i], scope) : items[i];\n }\n\n // 第三段:保留被删除部分之后的剩余元素\n const remainingStart = actualStart + actualDeleteCount;\n const resultOffset = actualStart + insertCount;\n for (let i = 0; i < len - remainingStart; i++) {\n result[resultOffset + i] = isDeep ? deepSignal(that[remainingStart + i], scope) : that[remainingStart + i];\n }\n\n this[Keys.Iterator];\n return result;\n};\n\narrayMethodReWrites.with = function (index, value) {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n\n // 1. 获取数组长度(确保处理类数组对象)\n const len = that.length;\n\n // 2. 转换索引为整数(处理 undefined/NaN 等情况)\n let relativeIndex = Number(index) || 0;\n\n // 3. 处理负数索引逻辑\n let actualIndex = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n\n // 4. 边界检查:如果索引越界,抛出 RangeError\n if (actualIndex >= len || actualIndex < 0) {\n throw new RangeError(`Invalid index: ${index}`);\n }\n\n // 5. 性能优化点:预分配数组空间\n // 使用 new Array(len) 配合循环在处理大数组且包含空位时,\n // 比 [...that] 或 slice() 更加符合规范对“稀疏转密集”的要求。\n const result = new Array(len);\n\n for (let i = 0; i < len; i++) {\n if (i === actualIndex) {\n result[i] = isDeep ? deepSignal(value, scope) : value;\n } else {\n result[i] = isDeep ? deepSignal(that[i], scope) : that[i];\n }\n }\n this[Keys.Iterator];\n return result;\n};\n\narrayMethodReWrites.concat = function (...items) {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n const selfLen = that.length; // 确保长度为正整数\n\n // 2. 预计算总长度以优化性能\n let totalLength = selfLen;\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n // 模拟原生 concat 的展开逻辑:只有数组会被展开\n if (Array.isArray(item)) {\n totalLength += item.length;\n } else {\n totalLength += 1;\n }\n }\n\n // 3. 创建结果数组(预设长度)\n const result = new Array(totalLength);\n let k = 0;\n\n // 4. 填充原数组数据\n for (; k < selfLen; k++) {\n if (k in that) {\n result[k] = isDeep ? deepSignal(that[k], scope) : that[k];\n }\n }\n\n // 5. 填充参数数据\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (Array.isArray(item)) {\n for (let j = 0; j < item.length; j++) {\n if (j in item) {\n result[k] = isDeep ? deepSignal(item[j], scope) : item[j];\n }\n k++;\n }\n } else {\n result[k] = isDeep ? deepSignal(item, scope) : item;\n k++;\n }\n }\n this[Keys.Iterator];\n return result;\n};\n\n/*----------------- 回调函数 仅收集 __Iterator Get,回调中收集用户 get -----------------*/\nconst GetMethodConf = {\n wrapReturn: false,\n wrapArgs: 0b01\n};\n[\n {\n key: 'every',\n ...GetMethodConf\n },\n {\n key: 'find',\n wrapReturn: true,\n ...GetMethodConf\n },\n {\n key: 'findLast',\n ...GetMethodConf,\n wrapReturn: true\n },\n {\n key: 'findIndex',\n ...GetMethodConf\n },\n {\n key: 'findLastIndex',\n ...GetMethodConf\n },\n {\n key: 'forEach',\n ...GetMethodConf\n },\n {\n key: 'map',\n ...GetMethodConf\n },\n {\n key: 'some',\n ...GetMethodConf\n },\n {\n key: 'reduce',\n ...GetMethodConf,\n wrapArgs: 0b10\n },\n {\n key: 'reduceRight',\n ...GetMethodConf,\n wrapArgs: 0b10\n }\n].forEach(({ key, wrapReturn, wrapArgs }) => {\n arrayMethodReWrites[key] = function (...args: any[]) {\n const meta = this[Keys.Meta];\n const fn = Array.prototype[key];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n warpCallbackArgs(isDeep, args, scope, wrapArgs);\n // 遍历函数不收集数组属性\n let result = fn.call(that, ...args);\n if (wrapReturn && isDeep) {\n result = deepSignal(result, scope);\n }\n this[Keys.Iterator];\n return result;\n };\n});\n\n// TODO: 考虑是否基于 js 实现以提高性能\narrayMethodReWrites.toSorted = function (...args: any[]) {\n const fn = Array.prototype['toSorted'];\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n warpCallbackArgs(isDeep, args, scope, 0b11);\n let result = fn.call(that, ...args);\n this[Keys.Iterator];\n return isDeep ? result.map(it => deepSignal(it, scope)) : result;\n};\n\n/*----------------- 转换方法 仅收集 仅收集 __Iterator Get -----------------*/\n['join', 'toString', 'toLocaleString'].forEach(key => {\n arrayMethodReWrites[key] = function (...args: any[]) {\n const fn = Array.prototype[key];\n const that = toRaw(this);\n const result = fn.call(that, ...args);\n this[Keys.Iterator];\n return result;\n };\n});\n\nfunction warpCallbackArgs(isDeep: boolean, args: any[], scope: Scope, wrapArgs: number = 0b01) {\n const callback = args[0];\n const wrapCb = function (this: any, ...cbArgs: any[]) {\n if (isDeep) {\n if (wrapArgs & 0b01) cbArgs[0] = deepSignal(cbArgs[0], scope);\n if (wrapArgs & 0b10) cbArgs[1] = deepSignal(cbArgs[1], scope);\n }\n // 遍历函数不收集数组属性,但是回调函数需要收集用户的 get\n return callback.call(this, ...cbArgs);\n };\n args[0] = wrapCb;\n}\n\n// TODO: flat flatMap sort\n\n/**\n * 无需重写:\n * 1. at\n * 2. keys\n */\n","import { getPulling } from './core';\nimport { deepSignal, shareSignal } from './deep-signal';\nimport { DeepOmitPath, IsStore, Key, PRecord, StoreIgnoreKeys } from './type';\n\nexport class Store {\n static [IsStore] = true;\n static [StoreIgnoreKeys]: Key[] = ['ui', 'raw'];\n static Current: Store = null;\n constructor() {\n const proxy = deepSignal(this, getPulling(), true);\n Store.Current = proxy;\n return proxy;\n }\n parent: () => Store | null = () => null;\n\n static new<T extends Store = any, P extends Store = any, O extends string = ''>(\n this: new (...args: any[]) => T,\n keyMap: PRecord<keyof T, keyof Omit<P, O> | DeepOmitPath<P, O>> = {},\n staticMap: PRecord<keyof T, any> = {}\n ): T {\n const parentStore = Store.Current;\n const child = new (this as any)();\n if (parentStore) {\n for (const childKey in keyMap) {\n const parentKey: string = keyMap[childKey] as any;\n shareSignal(parentStore, parentKey, child, childKey);\n }\n }\n for (const key in staticMap) {\n const value = staticMap[key];\n child[key] = value;\n }\n child.parent = () => parentStore;\n Store.Current = parentStore;\n return child;\n }\n\n map<P extends Store = any, O extends string = ''>(\n keyMap: PRecord<keyof this, keyof Omit<P, O> | DeepOmitPath<P, O>> = {}\n ) {\n const parentStore = this.parent();\n if (parentStore) {\n for (const childKey in keyMap) {\n const parentKey: string = keyMap[childKey] as any;\n shareSignal(parentStore, parentKey, this, childKey);\n }\n }\n this.parent = null;\n }\n}\n","import { Computed, Effect, getPulling, ScheduleType, Scope, Signal } from './core';\nimport { State } from './core/macro' with { type: 'macro' };\nimport { ValueDiff } from './type';\nimport { deepSignal } from './deep-signal';\n\nexport function $(data: any) {\n if (typeof data === 'object' && data !== null) {\n return deepSignal(data, getPulling());\n }\n if (typeof data === 'function') {\n const s = new Computed(data),\n get = s.get.bind(s);\n return {\n ins: s,\n get v() {\n return get();\n }\n };\n } else {\n const s = new Signal(data),\n set = s.set.bind(s),\n get = s.get.bind(s);\n return {\n ins: s,\n get v() {\n return get();\n },\n set v(v) {\n set(v);\n }\n };\n }\n}\n\nconst DefaultCustomEffectOpt = {\n immediate: true,\n type: ScheduleType.Sync\n};\n\nexport type CustomEffectOpt = Partial<typeof DefaultCustomEffectOpt>;\n\nexport function effectUt(\n callback: (...args: ValueDiff[]) => void,\n depOrOpt?: any[] | CustomEffectOpt,\n opt?: CustomEffectOpt\n) {\n /*----------------- 自动收集 -----------------*/\n const hasDep = Array.isArray(depOrOpt);\n opt = hasDep ? opt || {} : depOrOpt || {};\n if (!hasDep) {\n // @ts-ignore\n const ef = new Effect(callback, opt.type);\n const run = ef.dispose.bind(ef);\n run.ins = ef;\n return run;\n }\n /*----------------- 指定依赖, watcher -----------------*/\n let mounted = false;\n const deps = depOrOpt as any[];\n const immediate = deps.length === 0 ? true : (opt.immediate ?? true);\n const vs: ValueDiff[] = Array.from({ length: deps.length }, () => ({ old: null, val: null }));\n\n const ef = new Effect((eff) => {\n for (let i = 0; i < deps.length; i++) {\n const value = deps[i].v;\n vs[i].old = vs[i].val;\n vs[i].val = value;\n }\n\n if (mounted || immediate) {\n eff.state |= State.LinkScopeOnly;\n callback(...vs);\n eff.state &= ~State.LinkScopeOnly;\n }\n mounted = true;\n }, opt.type);\n const run = ef.dispose.bind(ef);\n run.ins = ef;\n return run;\n}\n\nexport function effect(\n callback: (...args: ValueDiff[]) => void,\n depOrOpt?: any[] | CustomEffectOpt,\n opt?: CustomEffectOpt\n) {\n /*----------------- 自动收集 -----------------*/\n const hasDep = Array.isArray(depOrOpt);\n opt = hasDep ? opt || {} : depOrOpt || {};\n if (!hasDep) {\n // @ts-ignore\n const ef = new Effect(callback, opt.type);\n return ef;\n }\n /*----------------- 指定依赖, watcher -----------------*/\n let mounted = false;\n const deps = depOrOpt as any[];\n const immediate = deps.length === 0 ? true : (opt.immediate ?? true);\n const vs: ValueDiff[] = Array.from({ length: deps.length }, () => ({ old: null, val: null }));\n\n const ef = new Effect(eff => {\n for (let i = 0; i < deps.length; i++) {\n const value = deps[i].get();\n vs[i].old = vs[i].val;\n vs[i].val = value;\n }\n\n if (mounted || immediate) {\n eff.state |= State.LinkScopeOnly;\n callback(...vs);\n eff.state &= ~State.LinkScopeOnly;\n }\n mounted = true;\n }, opt.type);\n return ef;\n}\n\nexport function scope(...args) {\n const ins = new Scope(args[0]);\n if (args.length === 2) {\n ins.scope = args[1];\n }\n ins.get();\n const run = ins.dispose.bind(ins);\n run.ins = ins;\n return run;\n}\n"],"names":["_execId","currentExecId","execIdInc","execId","setExecId","v","pulling","setPulling","getPulling","runWithPulling","fn","scope","oldPulling","ret","ScheduleType","MultiScheduler","hasTask","taskMap","constructor","queueCount","i","head","tail","addTask","queueId","task","queue","item","value","next","flushAllTask","highest","consumeTask","get","multiScheduler","Keys","IsStore","Symbol","StoreIgnoreKeys","ide","globalThis","requestIdleCallback","requestAnimationFrame","setTimeout","now","timer","performance","Date","channel","MessageChannel","msgId","macro","memoId","onMessage","e","data","port2","removeEventListener","addEventListener","port1","postMessage","p","Promise","resolve","micro","cb","then","toRaw","a","Raw","mark","signal","line","emitHead","down","state","State","notLocked","type","Sync","addEffect","markUnknownDeep","nextEmitLine","initialLine","noPulling","stack","len","DirtyState","pullDeep","root","node","top","lineStack","_node","noSkipSelf","PullingOrScopeExecuted","firstLine","recHead","up","_node2","noGoSibling","prevValue","prevPulling","_line","transferDirtyState","nextRecLine","effectQueue","consumeI","produceI","effect","flushSyncEffect","flushMicroEffect","_batchDeep","batchStart","batchEnd","batchDeep","unlink","deep","prevEmitLine","prevRecLine","prevOutLink","nextOutLink","emitTail","recTail","outLink","dispose","_ref","toDel","_toDel","outer","ScopeAbort","releaseScope","clean","onClean","current","link","scopeUp","scopeDown","nextRec","eid","makeOutLink","first","Computed","callback","shouldLink","notForceUpdate","nextId","prevId","nextLine","Signal","set","EffectState","Effect","res","prototype","ScopeAndLinkScopeOnly","Scope","rawToProxy","WeakMap","Unknown","Dirty","ScopeReady","deepSignal","target","isObj","ProxyFreeObject","cells","Map","targetIsArray","Array","isArray","targetIsStore","Boolean","meta","proxy","Proxy","obj","prop","receiver","Meta","unscopables","Reflect","isIgnoreKey","desc","getOwnPropertyDescriptor","isGetter","handleGetterAsComputed","valueIsFn","arrayMethodReWrites","s","wrappedValue","success","cell","handleArraySet","triggerIter","deleteProperty","delete","undefined","ownKeys","length","Iterator","shareSignal","from","fromPath","to","toPath","toPaths","split","formPaths","_getTargetAndKey","getTargetAndKey","fromTarget","fromKey","key","val","fromSignal","_getTargetAndKey2","toTarget","toKey","error","console","paths","ignores","includes","some","it","startsWith","arr","isNatureNumStr","has","forEach","args","call","that","result","iterator","isEntries","rawArray","iter","isDeep","rawNext","bind","done","filter","thisArg","resultIndex","userThis","slice","start","end","k","Math","max","min","final","count","toReversed","toSpliced","deleteCount","items","relativeStart","actualStart","actualDeleteCount","arguments","dc","insertCount","newLen","remainingStart","resultOffset","with","index","relativeIndex","Number","actualIndex","RangeError","concat","selfLen","totalLength","j","GetMethodConf","wrapReturn","wrapArgs","warpCallbackArgs","toSorted","map","wrapCb","cbArgs","Store","Current","parent","new","keyMap","staticMap","parentStore","child","childKey","parentKey","$","ins","immediate","effectUt","depOrOpt","opt","hasDep","ef","run","mounted","deps","vs","old","eff"],"mappings":"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"}
1
+ {"version":3,"file":"aoye.esm.js","sources":["../src/core/global.ts","../src/core/type.ts","../src/core/schedule.ts","../src/type.ts","../src/util.ts","../src/core/operate.ts","../src/core/line.ts","../src/core/computed.ts","../src/core/signal.ts","../src/core/effect.ts","../src/core/scope.ts","../src/global.ts","../src/deep-signal.ts","../src/store.ts","../src/functional-api.ts"],"sourcesContent":["import { SignalNode } from './type';\n\nlet _execId = 0;\nlet currentExecId = 0;\n\nexport const execIdInc = () => ++_execId;\n/** effect、computed 回调执行的唯一 id\n * 用于判断重复依赖属于同一 effect、effect、computed\n */\nexport const execId = () => currentExecId;\nexport const setExecId = (v: number) => (currentExecId = v);\n\nlet pulling: SignalNode = null;\nexport const setPulling = (v: SignalNode) => (pulling = v);\nexport const getPulling = () => pulling as any;\n\nexport function runWithPulling<T extends (...args: any[]) => any>(fn: T, scope: any): ReturnType<T> {\n const oldPulling = pulling;\n pulling = scope;\n const ret = fn();\n pulling = oldPulling;\n return ret;\n}\n","import { Computed } from './computed';\nimport { Effect } from './effect';\nimport { Scope } from './scope';\nimport { Signal } from './signal';\n\nexport type OnClean = (isDestroy: boolean) => any;\n\nexport type SignalNode = Partial<\n Omit<Computed, 'callback'> & {\n dispose(): void;\n }\n>;\nexport type Link = {\n execId: number;\n up: SignalNode;\n down: SignalNode;\n nextEmitLine: Link;\n prevEmitLine: Link;\n nextRecLine: Link;\n prevRecLine: Link;\n};\n\nexport type OutLink = Link & {\n nextOutLink: OutLink;\n prevOutLink: OutLink;\n};\n\nexport type SideEffect = Effect | Computed;\n\nexport enum ScheduleType {\n /** signal 变化后 同步执行 Effect */\n Sync = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n /** signal 变化后优先级最高的异步任务 */\n Pre = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n /** signal 变化后优先级第二高的异步任务 */\n Render = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n /** signal 变化后优先级第三高的异步任务 */\n Post = 0b0000_0000_0000_0000_0000_0000_0000_1000\n}\n\nexport const EffectStrType2Enum = {\n sync: ScheduleType.Sync,\n pre: ScheduleType.Pre,\n render: ScheduleType.Render,\n post: ScheduleType.Post\n};\n\nexport type ScheduleTypeStr = keyof typeof EffectStrType2Enum;\n\nexport enum ScheduleStatus {\n /** 空闲 */\n Idle = 0,\n /** 准备运行 */\n Ready,\n /** 运行中 */\n Running\n}\n","import { micro } from '#/util';\nimport { Effect } from './effect';\n\nexport type TaskNode<T> = {\n value: T;\n next: TaskNode<T> | null;\n};\n\nexport type TaskQueue<T> = {\n head: TaskNode<T> | null;\n tail: TaskNode<T> | null;\n};\n\n/** bobe 专用的调度器 */\nexport class MultiScheduler<T> {\n /** 二进制位表示某个队列中是否有任务 */\n hasTask = 0;\n taskMap: Record<number, TaskQueue<T>> = {};\n constructor(queueCount: number) {\n for (let i = 0; i < queueCount; i++) {\n this.taskMap[1 << i] = {\n head: null,\n tail: null\n };\n }\n }\n\n addTask(queueId: number, task: any) {\n const queue = this.taskMap[queueId];\n const { tail } = queue;\n const item = {\n value: task,\n next: null\n };\n if (tail) {\n tail.next = item;\n } else {\n queue.head = item;\n }\n queue.tail = item;\n this.hasTask |= queueId;\n }\n\n flushAllTask() {\n // TODO: 开发环境 考虑异步 effect 循环依赖的情况\n while (this.hasTask) {\n const { hasTask } = this;\n const highest = hasTask & (~hasTask + 1);\n const task: Effect = this.consumeTask(highest).value as any;\n task.get();\n }\n }\n\n consumeTask(queueId: number) {\n const queue = this.taskMap[queueId];\n const { head, tail } = queue;\n const next = head.next;\n head.next = null;\n if (head === tail) {\n queue.head = null;\n queue.tail = null;\n // 最后一项被消费,这个队列就没有任务了\n this.hasTask &= ~queueId;\n } else {\n head.next = null;\n queue.head = next;\n }\n return head;\n }\n}\n\n/** TODO: 考虑如何与 ScheduleType 对齐\n * TODO: 考虑异步 effect 循环依赖的情况\n */\nexport const multiScheduler = new MultiScheduler(4);\n","import { Signal } from './core';\nexport { Signal };\n\nexport type SignalType = 'ref' | 'auto' | 'proxy';\n\nexport enum Keys {\n Iterator = '__AOYE_ITERATOR',\n Raw = '__AOYE_RAW',\n Meta = '__AOYE_META',\n /** 当一个值对象标记为 ShallowObject 时,它的所有属性都不需要代理 */\n ProxyFreeObject = '__AOYE_PROXY_FREE_OBJECT'\n}\nexport type Key = string | number | symbol;\n/** store 标识 */\nexport const IsStore = Symbol('__AOYE_IS_STORE'),\n StoreIgnoreKeys = Symbol('__AOYE_IGNORE_KEYS');\n\nexport type TaskControlReturn = {\n /** 当前任务已完成 */\n finished?: boolean;\n /** 启动一个新 定时器 | RAF | Idle | 微任务 ... 等 */\n startNewCallbackAble?: boolean;\n};\n\nexport type Task = {\n (): TaskControlReturn | void;\n [key: string]: any;\n};\n\nexport type CreateTaskProps = {\n callbackAble: (fn: Function) => any;\n aIsUrgent: (a: Task, b: Task) => boolean;\n};\nexport type Mix<T = any> = {\n (v: T): void;\n (): T;\n v: T;\n stop(): void;\n};\n\nexport type ValueDiff = {\n old: any;\n val: any;\n};\n\nexport type CreateScope = (customPull: () => void, scope?: Signal) => Dispose;\n\nexport type Dispose = {\n (): void;\n ins: Signal;\n};\n\n// 定义一个递减器,用来控制深度\ntype Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\n\nexport type DeepPath<T, Depth extends number = 8> = [Depth] extends [never]\n ? never\n : T extends object\n ? {\n [K in keyof T]-?: [K] | [K, ...DeepPath<T[K], Prev[Depth]>];\n }[keyof T]\n : never;\n\nexport type DeepOmitPath<T, K extends string> = DeepPath<Omit<T, K>, 8>;\nexport type PRecord<K extends string | symbol | number, V> = Partial<Record<K, V>>;\nexport type DeepValue<T, P> = P extends [infer Head, ...infer Tail]\n ? Head extends keyof T\n ? Tail extends []\n ? T[Head]\n : DeepValue<T[Head], Tail>\n : never\n : never;\n\nexport type MatchValue<V1, T2, P2> = (DeepValue<T2, P2> extends V1 ? P2 : never) ","import { Keys } from \"./type\";\n\nexport const ide =\n globalThis.requestIdleCallback ||\n (globalThis.requestAnimationFrame\n ? (fn: Function) =>\n globalThis.requestAnimationFrame(() => {\n setTimeout(() => {\n fn();\n });\n })\n : globalThis.setTimeout);\n\nexport const now = () => {\n const timer = globalThis.performance || globalThis.Date;\n return timer.now();\n};\nlet channel: MessageChannel = globalThis.MessageChannel ? new MessageChannel() : null;\nif (globalThis.MessageChannel) {\n channel = new MessageChannel();\n}\nlet msgId = 0;\nexport const macro = fn => {\n if (!channel) {\n setTimeout(fn);\n }\n const memoId = msgId;\n function onMessage(e) {\n if (memoId === e.data) {\n fn();\n channel.port2.removeEventListener('message', onMessage);\n }\n }\n channel.port2.addEventListener('message', onMessage);\n channel.port1.postMessage(msgId++);\n};\n\nconst p = Promise.resolve();\nexport const micro = (cb: () => any) => {\n p.then(cb)\n}\n\nexport const toRaw = <T>(a: T) => {\n if (typeof a === 'object' && a !== null && a[Keys.Raw]) {\n return toRaw(a[Keys.Raw]);\n }\n return a;\n};","import { setPulling, getPulling } from './global';\nimport { Effect } from './effect';\nimport { Signal } from './signal';\nimport { Link, SideEffect, OutLink, SignalNode, OnClean, ScheduleType, ScheduleStatus } from './type';\nimport { State, DirtyState, PullingOrScopeExecuted, ScopeAbort } from './macro' with { type: 'macro' };\nimport { multiScheduler } from './schedule';\nimport { micro } from '#/util';\n\nexport function mark(signal: Signal) {\n let line = signal.emitHead;\n while (line) {\n const down = line.down as Effect;\n const { scope, emitHead, state } = down;\n // if ((scope && scope.state & State.ScopeAbort) || down === up.scope || state & ScopeExecuted) {\n // }\n if (scope && scope.state & State.ScopeAbort) {\n } else {\n const notLocked = (state & State.PullLock) === 0;\n down.state |= notLocked ? State.NeedCompute : State.PullingNeedCompute;\n // window['mark'] = (window['mark'] || 0) + 1;\n if (state & State.IsScope) {\n if (notLocked && state & State.IsEffect) {\n if (down.type === ScheduleType.Sync) {\n addEffect(down);\n } else {\n multiScheduler.addTask(down.type, down);\n }\n }\n } else if (emitHead) {\n markUnknownDeep(emitHead);\n }\n }\n line = line.nextEmitLine;\n }\n}\n\nfunction markUnknownDeep(initialLine: Link) {\n const noPulling = !getPulling();\n // 初始节点入栈\n const stack: Link[] = [initialLine];\n let len = 1;\n\n while (len > 0) {\n // 手动出栈,不触发数组缩容\n let line: Link = stack[--len];\n stack[len] = null as any;\n\n while (line) {\n const down = line.down as Effect;\n const { state, scope } = down;\n // 判定逻辑\n // const noSkip = !(\n // (scope && scope.state & State.ScopeAbort) ||\n // down === up.scope ||\n // state & UnknownOrScopeExecuted\n // );\n // 1. 禁用,2. 已标记\n if ((scope && scope.state & State.ScopeAbort) || (noPulling && state & DirtyState)) {\n } else {\n const notLocked = (state & State.PullLock) === 0;\n down.state |= notLocked ? State.Unknown : State.PullingUnknown;\n // window['mark'] = (window['mark'] || 0) + 1;\n if (state & State.IsScope) {\n if (notLocked && state & State.IsEffect) {\n if (down.type === ScheduleType.Sync) {\n addEffect(down);\n } else {\n multiScheduler.addTask(down.type, down);\n }\n }\n } else if (down.emitHead) {\n // 手动入栈\n stack[len++] = down.emitHead;\n }\n }\n\n line = line.nextEmitLine;\n }\n }\n}\n\nexport function pullDeep(root: SideEffect): any {\n let node = root,\n top: Link = null,\n i = -1;\n const lineStack: Link[] = [];\n do {\n const { state, scope } = node;\n let noSkipSelf = !(\n state & PullingOrScopeExecuted ||\n (state & DirtyState) === 0 ||\n (scope && scope.state & State.ScopeAbort)\n );\n // begin\n const firstLine = node.recHead;\n // 1. 本节点不跳过则可进入子节点,\n // 2. 本节点需要计算,不需要进入子节点\n if (noSkipSelf) {\n node.state |= State.PullLock;\n if ((state & State.NeedCompute) === 0 && firstLine) {\n node = firstLine.up as SideEffect;\n lineStack[++i] = top;\n top = firstLine;\n continue;\n }\n }\n\n do {\n const { state } = node;\n let noGoSibling = false;\n if (noSkipSelf) {\n // 子节点计算完成后重新查看父节点的 NeedCompute\n if (state & State.NeedCompute) {\n // window['update'] = (window['update'] || 0) + 1;\n // @ts-ignore\n const prevValue = node.value;\n const prevPulling = getPulling();\n setPulling(node);\n const value = node.get(false, false);\n setPulling(prevPulling);\n // 将父标记为 NeedCompute\n if ((noGoSibling = value !== prevValue)) {\n let line = node.emitHead;\n while (line) {\n const { down } = line;\n down.state &= ~State.Unknown;\n down.state |= State.NeedCompute;\n line = line.nextEmitLine;\n }\n }\n }\n // 不需要计算时将,将 blocked 标记释放\n else {\n transferDirtyState(node, state);\n }\n node.state &= ~State.PullLock;\n }\n // complete\n // 递归出口\n if (node === root) {\n // @ts-ignore\n return node.value;\n }\n if (!noGoSibling && top.nextRecLine) {\n top = top.nextRecLine;\n node = top.up as SideEffect;\n break;\n }\n // 避免回溯时子节点 noSkipSelf 影响到父节点\n noSkipSelf = true;\n node = top.down as SideEffect;\n top = lineStack[i];\n lineStack[i--] = null;\n } while (true);\n } while (true);\n}\n/**\n * 将 PullingUnknown、PullingNeedCompute\n * 转为 Unknown、NeedCompute\n * TODO: 考虑加属性 blockedSate 进行优化\n */\nexport function transferDirtyState(node: SideEffect, state: State) {\n // 被处理的节点应该恢复\n if (state & State.PullingUnknown) {\n node.state = (state & ~State.PullingUnknown) | State.Unknown;\n } else {\n node.state &= ~State.Unknown;\n }\n // 被处理的节点应该恢复\n if (state & State.PullingNeedCompute) {\n node.state = (state & ~State.PullingNeedCompute) | State.NeedCompute;\n } else {\n node.state &= ~State.NeedCompute;\n }\n}\nconst effectQueue: Effect[] = [];\nlet consumeI = -1,\n produceI = -1;\nexport function addEffect(effect: Effect) {\n effectQueue[++produceI] = effect;\n}\nexport function flushSyncEffect() {\n // 正在消费\n if (consumeI !== -1) {\n return;\n }\n while (++consumeI <= produceI) {\n const effect = effectQueue[consumeI];\n if (effect.state | DirtyState) {\n effect.get();\n }\n effectQueue[consumeI] = null;\n }\n consumeI = -1;\n produceI = -1;\n}\nlet schedulerStatus = ScheduleStatus.Idle;\nexport function flushMicroEffect() {\n if (schedulerStatus === ScheduleStatus.Idle && multiScheduler.hasTask) {\n schedulerStatus = ScheduleStatus.Ready;\n micro(() => {\n schedulerStatus = ScheduleStatus.Running;\n multiScheduler.flushAllTask();\n schedulerStatus = ScheduleStatus.Idle;\n });\n }\n}\n\nlet _batchDeep = 0;\nexport const batchStart = () => _batchDeep++;\nexport const batchEnd = () => {\n _batchDeep--;\n if (_batchDeep === 0) {\n flushSyncEffect();\n flushMicroEffect();\n }\n};\n/** effect、computed 回调执行的唯一 id\n * 用于判断重复依赖属于同一 effect、effect、computed\n */\nexport const batchDeep = () => _batchDeep;\n\nexport function unlink(line: OutLink, deep: boolean) {\n // window['unlink'] = (window['unlink'] || 0) + 1;\n const { nextEmitLine, prevEmitLine, nextRecLine, prevRecLine, up, down, prevOutLink, nextOutLink } = line;\n const { scope } = down;\n // 1. 非唯一 emitLine, 直接释放即可\n /*----------------- 从 up 中移除 -----------------*/\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = nextEmitLine;\n } else {\n // 头移除\n up.emitHead = nextEmitLine;\n }\n if (nextEmitLine) {\n nextEmitLine.prevEmitLine = prevEmitLine;\n } else {\n // 尾移除\n up.emitTail = prevEmitLine;\n }\n /*----------------- 从 down 中移除 -----------------*/\n if (prevRecLine) {\n prevRecLine.nextRecLine = nextRecLine;\n } else {\n // 头移除\n down.recHead = nextRecLine;\n }\n if (nextRecLine) {\n nextRecLine.prevRecLine = prevRecLine;\n } else {\n // 尾移除\n down.recTail = prevRecLine;\n }\n /*----------------- 从 outLink 中移除 -----------------*/\n if (prevOutLink) {\n prevOutLink.nextOutLink = nextOutLink;\n }\n if (nextOutLink) {\n nextOutLink.prevOutLink = prevOutLink;\n }\n if (scope && scope.outLink === line) {\n scope.outLink = nextOutLink;\n }\n if (up.state & State.IsScope) {\n // @ts-ignore\n up.dispose();\n // dispose(up as Effect);\n }\n // 唯一 emitLine, 现在 up 是游离节点,递归删除 up 的上游依赖\n else if (deep && !prevEmitLine && !nextEmitLine) {\n let { recHead: line } = up as Effect;\n // 如果 up 节点上面也有 唯一 emitLine 继续释放\n while (line) {\n const next = line.nextRecLine;\n unlink(line as OutLink, true);\n line = next;\n }\n }\n}\n\nexport function dispose(this: SideEffect) {\n // window['dispose'] = (window['dispose'] || 0) + 1;\n let { recHead: toDel, emitHead } = this;\n while (toDel) {\n const { up, nextRecLine } = toDel;\n // 上游非 scope 直接 unlink\n if ((up.state & State.IsScope) === 0) {\n unlink(toDel as OutLink, true);\n toDel = nextRecLine;\n continue;\n }\n let node = up,\n top: Link = null,\n i = -1;\n const lineStack: Link[] = [];\n outer: do {\n let noSkipSelf = node.state & State.IsScope && (node.state & ScopeAbort) === 0;\n const firstLine = node.recHead;\n\n if (noSkipSelf && firstLine) {\n node = firstLine.up as SideEffect;\n lineStack[++i] = top;\n top = firstLine;\n continue;\n }\n do {\n if (noSkipSelf) {\n releaseScope(node as Effect);\n }\n // 递归出口\n if (node === up) {\n break outer;\n }\n if (top.nextRecLine) {\n top = top.nextRecLine;\n node = top.up as SideEffect;\n break;\n }\n noSkipSelf = true;\n node = top.down as SideEffect;\n top = lineStack[i];\n lineStack[i--] = null;\n } while (true);\n } while (true);\n toDel = nextRecLine;\n }\n releaseScope(this as Effect);\n if (emitHead) unlink(emitHead as OutLink, false);\n}\n\nexport function clean(onClean: OnClean) {\n const current = getPulling() as Effect;\n current.clean = onClean;\n}\n\nfunction releaseScope(scope: Effect) {\n let { outLink } = scope;\n while (outLink) {\n const next = outLink.nextOutLink;\n unlink(outLink, true);\n outLink = next;\n }\n scope.state |= State.ScopeAbort;\n // clean 在 scope 释放时执行\n scope.clean?.(true);\n scope.clean = null;\n}\n\n// export function pullDeep<T>(node: SideEffect, down: SignalNode): T {\n// let { scope, state, recHead: line, emitHead: downLine } = node;\n// // @ts-ignore\n// const prevValue = node.value;\n// if (state & State.Pulling || (scope && scope.state & State.ScopeAbort) || state & ScopeExecuted) {\n// return prevValue;\n// }\n// node.state |= State.Pulling;\n// setPulling(node);\n// try {\n// // 当前无需计算 先往下查询需计算的节点\n// if ((state & State.NeedCompute) === 0) {\n// while (line) {\n// pullDeep(line.up as any, node);\n// line = line.nextRecLine;\n// }\n// }\n\n// // 子节点完成后重新判断父节点是否需要计算\n// if (node.state & State.NeedCompute) {\n// const value = node.get(false, false);\n// if (value !== prevValue) {\n// while (downLine) {\n// const { down } = downLine;\n// down.state &= ~State.Unknown;\n// down.state |= State.NeedCompute;\n// downLine = downLine.nextEmitLine;\n// }\n// }\n// node.state &= ~State.NeedCompute;\n// return value;\n// }\n// return prevValue;\n// } finally {\n// node.state &= ~State.Pulling;\n// setPulling(down);\n// }\n// }\n\n// function markUnknownDeep(line: Link) {\n// while (line) {\n// const { down, up } = line;\n// if (\n// (down.scope &&\n// // 所属 scope 被取消\n// (down.scope.state & State.ScopeAbort ||\n// // 下游是上游的 scope\n// down === up.scope)) ||\n// // 是 scope 节点,且处于 ready 状态,不需要重复执行\n// down.state & ScopeExecuted\n// ) {\n// } else {\n// down.state |= State.Unknown;\n// markUnknownDeep(down.emitHead);\n// }\n// line = line.nextEmitLine;\n// }\n// }\n","import { execId } from './global';\nimport { Scope } from './scope';\nimport { Link, OutLink, SignalNode } from './type';\nimport { State } from './macro' with { type: 'macro' };\nimport { Effect } from './effect';\nexport function link(\n /** 上游顶点 */\n up: SignalNode = null,\n /** 下游顶点 */\n down: SignalNode = null\n) {\n const { emitTail: prevEmitLine, scope: scopeUp } = up;\n let { recHead, recTail, scope: scopeDown } = down;\n // 符合外链规则,使用 outLink 进行连接\n if (scopeDown && scopeDown !== scopeUp && (up.state & State.IsScope) === 0) {\n outLink(up, down);\n return;\n }\n const nextRec = recTail ? recTail.nextRecLine : recHead;\n const eid = execId();\n // 重复依赖 跳过\n if (prevEmitLine && prevEmitLine.down === down && prevEmitLine.execId === eid) {\n return;\n }\n\n // 1. down 无 nextRec 尾插\n if (!nextRec) {\n // window['link'] = (window['link'] || 0) + 1;\n // 是 1. 上游节点尾指针 2.下游节点的首尾指针\n const line: Link = {\n execId: eid,\n up,\n down,\n prevEmitLine,\n nextEmitLine: null,\n prevRecLine: recTail,\n nextRecLine: null\n };\n // 加入 up 的链表\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = line;\n } else {\n up.emitHead = line;\n }\n up.emitTail = line;\n\n // 加入 down 的链表\n if (recTail) {\n recTail.nextRecLine = line;\n } else {\n down.recHead = line;\n }\n down.recTail = line;\n return;\n }\n\n // 2. 如果下一个 rec 连接的就是 up,直接复用\n if (nextRec.up === up) {\n nextRec.execId = eid;\n down.recTail = nextRec;\n return;\n }\n // window['link'] = (window['link'] || 0) + 1;\n // 3. rec 指向不匹配, 在 tail 和 next 中间插入 line\n const line: Link = {\n execId: eid,\n up,\n down,\n prevEmitLine,\n nextEmitLine: null,\n prevRecLine: recTail,\n nextRecLine: nextRec\n };\n // 加入 up 的链表\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = line;\n } else {\n up.emitHead = line;\n }\n up.emitTail = line;\n\n // 加入 down 链表, 一定不是尾插,只考虑是否头插\n if (recHead) {\n recTail.nextRecLine = line;\n } else {\n down.recHead = line;\n }\n // 移动 recTail\n down.recTail = line;\n // tail <-> line <-> nextRec\n if (recTail) recTail.nextRecLine = line;\n nextRec.prevRecLine = line;\n}\n\nexport function outLink(\n /** 上游顶点 */\n up: SignalNode = null,\n /** 下游顶点 */\n down: SignalNode = null\n) {\n const { emitTail: prevEmitLine } = up;\n let { recHead, recTail, scope: scopeDown } = down;\n const nextRec = recTail ? recTail.nextRecLine : recHead;\n // 1. down 无 nextRec 尾插\n if (!nextRec) {\n // 是 1. 上游节点尾指针 2.下游节点的首尾指针\n const line: OutLink = {\n execId: execId(),\n up,\n down,\n prevEmitLine,\n nextEmitLine: null,\n prevRecLine: recTail,\n nextRecLine: null,\n nextOutLink: null,\n prevOutLink: null\n };\n\n // 加入 up 的链表\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = line;\n } else {\n up.emitHead = line;\n }\n up.emitTail = line;\n\n // 加入 down 的链表\n if (recTail) {\n recTail.nextRecLine = line;\n } else {\n down.recHead = line;\n }\n down.recTail = line;\n // if (scopeDown && scopeDown !== scopeUp && (up.state & State.IsScope) == 0)\n makeOutLink(scopeDown, line);\n return;\n }\n\n // 2. 如果下一个 rec 连接的就是 up,直接复用\n if (nextRec.up === up) {\n down.recTail = nextRec;\n return;\n }\n // 3. rec 指向不匹配, 在 tail 和 next 中间插入 line\n const line: OutLink = {\n execId: execId(),\n up,\n down,\n prevEmitLine,\n nextEmitLine: null,\n prevRecLine: recTail,\n nextRecLine: nextRec,\n nextOutLink: null,\n prevOutLink: null\n };\n // 加入 up 的链表\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = line;\n } else {\n up.emitHead = line;\n }\n up.emitTail = line;\n\n // 加入 down 链表, 一定不是尾插,只考虑是否头插\n if (recHead) {\n recTail.nextRecLine = line;\n } else {\n down.recHead = line;\n }\n // 移动 recTail\n down.recTail = line;\n // tail <-> line <-> nextRec\n if (recTail) recTail.nextRecLine = line;\n nextRec.prevRecLine = line;\n // if (scopeDown && scopeDown !== scopeUp && (up.state & State.IsScope) == 0)\n makeOutLink(scopeDown, line);\n}\n\nfunction makeOutLink(scopeDown: Effect|Scope, line: OutLink) {\n const first = scopeDown.outLink;\n if (first) {\n first.prevOutLink = line;\n line.nextOutLink = first;\n }\n scopeDown.outLink = line;\n}\n\nexport function outLink2(\n /** 上游顶点 */\n up: SignalNode = null,\n /** 下游顶点 */\n down: SignalNode = null\n) {\n const { emitTail: prevEmitLine, emitHead } = up;\n const { emitTail: prevRecLine, recHead, scope } = down;\n const { outLink: first } = scope;\n\n const line: OutLink = {\n execId: execId(),\n up,\n down,\n prevEmitLine,\n prevRecLine,\n nextEmitLine: null,\n nextRecLine: null,\n nextOutLink: first,\n prevOutLink: null\n };\n\n scope.outLink = line;\n if (first) {\n first.nextOutLink = line;\n }\n\n // 处理节点上的双向链表\n up.emitTail = line;\n down.recTail = line;\n\n if (!emitHead) {\n up.emitHead = line;\n }\n if (!recHead) {\n down.recHead = line;\n }\n}\n","import { setPulling, getPulling, execIdInc, execId, setExecId } from './global';\nimport { Effect } from './effect';\nimport { Scope } from './scope';\nimport { Link, OutLink, SideEffect, SignalNode } from './type';\nimport { State, DirtyState } from './macro' with { type: 'macro' };\nimport { transferDirtyState, pullDeep, unlink } from './operate';\nimport { link } from './line';\n\nexport class Computed<T = any> {\n emitHead: Link = null;\n emitTail: Link = null;\n recHead: Link = null;\n recTail: Link = null;\n state = State.Clean;\n scope: Effect | Scope = getPulling() as any;\n value: T = null;\n constructor(public callback: (thisArgs: Computed) => T) {}\n get(shouldLink = true, notForceUpdate = true) {\n const { scope } = this;\n if (scope && scope.state & State.ScopeAbort) return this.value;\n const down = getPulling();\n if (this.recHead && notForceUpdate) {\n if (this.state & DirtyState) {\n this.value = pullDeep(this);\n }\n } else {\n this.state |= State.PullLock;\n\n const nextId = execIdInc();\n const prevId = execId();\n setExecId(nextId);\n\n setPulling(this);\n this.recTail = null;\n this.value = this.callback(this);\n this.state &= ~State.PullLock;\n setPulling(down);\n\n setExecId(prevId);\n // Unknown 转换\n transferDirtyState(this, this.state);\n let line = this.recTail?.nextRecLine;\n while (line) {\n const nextLine = line.nextRecLine;\n unlink(line as OutLink, true);\n line = nextLine;\n }\n }\n\n // link 连接\n if (shouldLink && down && (down.state & State.LinkScopeOnly) === 0) {\n link(this, down);\n }\n return this.value;\n }\n}\n","import { Effect } from './effect';\nimport { getPulling } from './global';\nimport { link } from './line';\nimport { mark, flushSyncEffect, batchDeep, flushMicroEffect } from './operate';\nimport { Scope } from './scope';\nimport { Link, SignalNode } from './type';\nimport { State } from './macro' with { type: 'macro' };\n\nexport class Signal<T = any> {\n scope: Effect | Scope = getPulling() as any;\n emitHead: Link = null;\n emitTail: Link = null;\n state = State.Clean;\n\n constructor(public value: T) {}\n // TODO: shouldLink 考虑 signal -> computed NeedComputed -> effect 时执行 get 不应该触发 shouldLink\n get(shouldLink = true) {\n if (shouldLink) {\n const down = getPulling();\n // 在 watcher 的 callback 中执行,不连接\n if (down && (down.state & State.LinkScopeOnly) === 0) {\n link(this, down);\n }\n }\n return this.value;\n }\n set(v: T) {\n if (this.value === v) return;\n this.value = v;\n if (this.emitHead) {\n mark(this);\n if (batchDeep() === 0) {\n flushSyncEffect();\n flushMicroEffect();\n }\n }\n }\n}\n","import { execId, execIdInc, getPulling, setExecId, setPulling } from './global';\nimport { link } from './line';\nimport { transferDirtyState, pullDeep, unlink, dispose } from './operate';\nimport { Scope } from './scope';\nimport { Link, OnClean, OutLink, ScheduleType, SideEffect, SignalNode } from './type';\nimport { State } from './macro' with { type: 'macro' };\n\nconst EffectState = State.IsEffect | State.IsScope;\nexport class Effect {\n emitHead: Link = null;\n emitTail: Link = null;\n recHead: Link = null;\n recTail: Link = null;\n\n state = EffectState;\n scope: Effect | Scope = getPulling() as any;\n outLink: OutLink = null;\n clean: OnClean = null;\n constructor(public callback: (thisArg: Effect) => OnClean | void, public type: ScheduleType = ScheduleType.Sync) {\n this.get();\n }\n get(shouldLink = true, notForceUpdate = true) {\n if (this.state & State.ScopeAbort) return;\n const down = getPulling();\n if (this.recHead && notForceUpdate) {\n pullDeep(this);\n } else {\n this.state |= State.PullLock;\n\n setPulling(null);\n this.clean?.(false);\n this.clean = null;\n\n const nextId = execIdInc();\n const prevId = execId();\n setExecId(nextId);\n\n setPulling(this);\n this.recTail = null;\n const res = this.callback(this);\n typeof res === 'function' && (this.clean = res);\n this.state &= ~State.PullLock;\n setPulling(down);\n\n setExecId(prevId);\n // Unknown 转换\n transferDirtyState(this, this.state);\n let line = this.recTail?.nextRecLine;\n while (line) {\n const nextLine = line.nextRecLine;\n unlink(line as OutLink, true);\n line = nextLine;\n }\n }\n // effect 可以嵌套管理,但是链接只建立一次\n if (!this.emitHead && shouldLink && down) {\n link(this, down);\n }\n }\n}\n\nexport interface Effect {\n dispose(): void;\n}\n\nEffect.prototype.dispose = dispose;\n","import { Effect } from './effect';\nimport { getPulling, setPulling } from './global';\nimport { link } from './line';\nimport { Link, OnClean, OutLink } from './type';\nimport { State } from './macro' with { type: 'macro' };\nimport { dispose } from './operate';\nconst ScopeAndLinkScopeOnly = State.IsScope | State.LinkScopeOnly;\nexport class Scope {\n emitHead: Link = null;\n emitTail: Link = null;\n recHead: Link = null;\n recTail: Link = null;\n\n state = ScopeAndLinkScopeOnly;\n scope: Effect | Scope = getPulling() as any;\n outLink: OutLink = null;\n clean: OnClean = null;\n constructor(public callback: () => OnClean | any) {}\n get(shouldLink = true) {\n const { scope } = this;\n this.state |= State.PullLock;\n setPulling(this);\n this.recTail = null;\n const res = this.callback();\n typeof res === 'function' && (this.clean = res);\n this.state &= ~State.PullLock;\n setPulling(scope);\n\n // effect 可以嵌套管理,但是链接只建立一次\n if (!this.emitHead && shouldLink && scope) {\n link(this, scope);\n }\n }\n}\nexport interface Scope {\n dispose(): void;\n}\n\nScope.prototype.dispose = dispose;\n","export const rawToProxy = new WeakMap();\n\nexport enum State {\n Clean = 0,\n /** watch 节点执行 watcher 时只连接 scope */\n LinkScopeOnly = 0b0000_0000_0000_0000_0000_0001_0000_0000,\n /** 仅用于 scope 节点是否 abort */\n ScopeAbort = 0b0000_0000_0000_0000_0000_0000_1000_0000,\n /** 仅用于 scope 节点是否 ready */\n ScopeReady = 0b0000_0000_0000_0000_0000_0000_0100_0000,\n /** 当前节点是 scope 节点 */\n IsScope = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n /** 当前节点正在 pull 递归中标记为 dirty, 保证 pulling 过程中不影响 dirty 传播 */\n PullingDirty = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n /** 当前节点正在 pull 递归中标记为 unknown, 保证 pulling 过程中不影响 dirty 传播 */\n PullingUnknown = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n /** 当前节点可能变化 */\n Unknown = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n /** 当前节点有变化 */\n Dirty = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n /** 当前节点正在进行 pull 预检处理 */\n Pulling = 0b0000_0000_0000_0000_0000_0000_0000_0001\n}\n\nexport const DirtyState = State.Unknown | State.Dirty;\nexport const ScopeExecuted = State.ScopeReady | State.ScopeAbort;\nexport const ScopeAbort = State.ScopeAbort;\n","import { isNatureNumStr } from 'bobe-shared';\nimport { rawToProxy } from './global';\nimport { Computed, Scope, Signal, batchEnd, batchStart, runWithPulling } from './core';\nimport { IsStore, Key, Keys, StoreIgnoreKeys } from './type';\nimport { toRaw } from './util';\n\nexport const deepSignal = <T>(target: T, scope: Scope, deep = true) => {\n const isObj = typeof target === 'object' && target !== null;\n // 1. 不是对象则返回原始值\n // 2. 返回已有代理\n // 3. 对象不需要代理\n if (!isObj || target[Keys.Raw] || target[Keys.ProxyFreeObject]) return target;\n // 2. 返回已有代理\n const p = rawToProxy.get(target);\n if (p) return p;\n\n // 每个对象维护自己的 cells 闭包\n const cells = new Map<any, Signal>();\n const targetIsArray = Array.isArray(target);\n const targetIsStore = Boolean(target.constructor?.[IsStore]);\n const meta = {\n deep,\n scope,\n cells\n };\n const proxy = new Proxy(target, {\n get(obj, prop, receiver) {\n switch (prop) {\n case Keys.Raw:\n return target;\n case Keys.Meta:\n return meta;\n default:\n break;\n }\n\n if (prop === Symbol.unscopables) return Reflect.get(obj, prop, receiver);\n\n if (targetIsStore && isIgnoreKey(obj.constructor[StoreIgnoreKeys], prop)) {\n return Reflect.get(obj, prop, receiver);\n }\n\n const desc = Reflect.getOwnPropertyDescriptor(obj, prop);\n\n const isGetter = desc && typeof desc.get === 'function';\n\n if (isGetter) {\n return handleGetterAsComputed(obj, prop, receiver, cells as any, scope);\n }\n\n // 创建 Signal\n const value = Reflect.get(obj, prop, receiver);\n\n const valueIsFn = typeof value === 'function';\n if (valueIsFn) {\n if (targetIsArray) {\n return arrayMethodReWrites[prop] || value;\n } else {\n return value;\n }\n }\n\n // 已有对应 Signal\n let s: Signal = cells.get(prop);\n if (s) {\n return s.get();\n }\n\n const wrappedValue = deep ? deepSignal(value, scope) : value;\n s = new Signal(wrappedValue);\n s.scope = scope;\n cells.set(prop, s);\n return s.get();\n },\n\n set(obj, prop, value, receiver) {\n if ((targetIsStore && isIgnoreKey(obj.constructor[StoreIgnoreKeys], prop)) || typeof value === 'function') {\n return Reflect.set(obj, prop, value, receiver);\n }\n // 数组项 set 可能出现 Iterator 设置,用 batch 避免 effect 多次执行\n batchStart();\n const success = Reflect.set(obj, prop, value, receiver);\n // 已有对应 Signal,更新 signal 值\n const cell = cells.get(prop);\n if (cell) {\n cell.set(deep ? deepSignal(value, scope) : value);\n }\n\n if (targetIsArray) {\n handleArraySet(obj, prop, value, receiver);\n } else {\n triggerIter(obj, prop, value, receiver);\n }\n batchEnd();\n // 保持原始对象干净\n return success;\n },\n\n // 【核心修改】拦截 delete 操作\n deleteProperty(obj, prop) {\n if ((targetIsStore && isIgnoreKey(obj.constructor[StoreIgnoreKeys], prop)) || typeof obj[prop] === 'function') {\n return Reflect.deleteProperty(obj, prop);\n }\n // 2. 从 Map 中移除,切断引用,允许 GC 回收这个 $() 实例\n cells.delete(prop);\n triggerIter(obj, prop, undefined, proxy);\n return Reflect.deleteProperty(obj, prop);\n },\n\n ownKeys(obj) {\n if (targetIsArray) {\n // @ts-ignore\n proxy.length;\n } else {\n proxy[Keys.Iterator];\n }\n return Reflect.ownKeys(obj);\n }\n });\n\n rawToProxy.set(target, proxy);\n return proxy;\n};\n\n/**\n * 将 from 响应式对象中 fromKey 对应的 Signal\n * 共享给 to 响应式对象的 toKey\n */\nexport const shareSignal = (from: any, fromPath: string, to: any, toPath: string) => {\n try {\n const toPaths = toPath.split('.');\n const formPaths = Array.isArray(fromPath) ? fromPath : fromPath.split('.');\n runWithPulling(() => {\n const { target: fromTarget, key: fromKey } = getTargetAndKey(from, formPaths);\n // 通过 get 陷阱确保 signal 已生成\n const val = fromTarget[fromKey];\n // 获取 signal\n const fromSignal = fromTarget[Keys.Meta].cells.get(fromKey)!;\n\n // 将 signal 共享给 to 代理对象\n const { target: toTarget, key: toKey } = getTargetAndKey(to, toPaths);\n toTarget[Keys.Meta].cells.set(toKey, fromSignal);\n toTarget[Keys.Raw][toKey] = val;\n }, null);\n } catch (error) {\n console.error('映射了不存在的Key!');\n throw error;\n }\n};\n\nfunction getTargetAndKey(obj: any, paths: string[]) {\n let target = obj;\n let key = '';\n const len = paths.length;\n for (let i = 0; i < len; i++) {\n key = paths[i];\n // 通过倒数第二个 key,可以找到代理对象\n if (i < len - 1) {\n target = target[key];\n }\n }\n return { target, key };\n}\n\nfunction isIgnoreKey(ignores: Key[], key: Key) {\n if (typeof key !== 'string') {\n return ignores.includes(key);\n }\n return ignores.some(it => typeof it === 'string' && key.startsWith(it));\n}\n\nfunction handleGetterAsComputed(\n obj: object,\n prop: string | symbol,\n receiver: any,\n cells: Map<any, Computed>,\n scope: Scope\n) {\n let s = cells.get(prop);\n if (s) {\n return s.get();\n }\n\n s = new Computed(() => Reflect.get(obj, prop, receiver));\n s.scope = scope;\n cells.set(prop, s);\n return s.get();\n}\n\nfunction handleArraySet(arr: object, prop: string | symbol, value: any, receiver: any) {\n // 设置 length\n if (prop === 'length') {\n }\n // 设置 index,由于 includes 等方法不对 index 再做监听,通过 Keys.Iterator 来保证副作用正确执行\n else if (isNatureNumStr(prop)) {\n receiver[Keys.Iterator] = (arr[Keys.Iterator] || 0) + 1;\n }\n // 其他\n else {\n triggerIter(arr, prop, value, receiver);\n }\n}\n\nfunction triggerIter(obj: object, prop: string | symbol, value: any, receiver: any) {\n if (!Reflect.has(obj, prop)) {\n receiver[Keys.Iterator] = (receiver[Keys.Raw][Keys.Iterator] || 0) + 1;\n }\n}\n\nconst arrayMethodReWrites: any = {};\n/*----------------- 增删移 增加 __Iterator Set ✅ -----------------*/\n['pop', 'push', 'shift', 'splice', 'unshift', 'copyWithin', 'reverse', 'fill'].forEach(key => {\n arrayMethodReWrites[key] = function (...args: any[]) {\n batchStart();\n const fn = Array.prototype[key];\n // 不会进行依赖收集,但是会触发 set\n const res = runWithPulling(() => fn.call(this, ...args), null);\n this[Keys.Iterator] = (this[Keys.Raw][Keys.Iterator] || 0) + 1;\n batchEnd();\n return res;\n };\n});\n\n/*----------------- 全等匹配 仅收集 __Iterator Get, 尝试使用原始或代理值再找一遍 ✅ -----------------*/\n['includes', 'indexOf', 'lastIndexOf'].forEach(key => {\n arrayMethodReWrites[key] = function (...args: any[]) {\n const fn = Array.prototype[key];\n const that = toRaw(this);\n let result = fn.call(that, ...args);\n const value = args[0];\n // 使用传入的值但是未找到,尝试使用代理值,或原始值查询\n if ((result === false || result === -1) && typeof value === 'object' && value !== null) {\n if (value[Keys.Raw]) {\n args[0] = value[Keys.Raw];\n result = fn.call(that, ...args);\n }\n const p = rawToProxy.get(value);\n if (p) {\n args[0] = p;\n result = fn.call(that, ...args);\n }\n }\n // 增加 __Iterator Get\n this[Keys.Iterator];\n return result;\n };\n});\n\n/*----------------- 重写迭代器获取 仅收集 __Iterator Get, ✅ -----------------*/\n// keys 不重写因为 array 的 keys 和 length 对等, length 不变 keys 也不变\n[Symbol.iterator, 'values', 'entries'].forEach(key => {\n const isEntries = key === 'entries';\n arrayMethodReWrites[key] = function (...args: any[]) {\n const fn = Array.prototype[key];\n const rawArray = toRaw(this);\n const iter = fn.call(rawArray, ...args);\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n // 深度代理需要将 iter.next 返回值转 proxy\n if (isDeep) {\n const rawNext = iter.next.bind(iter);\n iter.next = () => {\n const result = rawNext();\n if (!result.done) {\n if (isEntries) {\n result.value[1] = deepSignal(result.value[1], scope);\n } else {\n result.value = deepSignal(result.value, scope);\n }\n }\n return result;\n };\n }\n\n this[Keys.Iterator];\n\n return iter;\n };\n});\n\n/**\n * filter 函数的实现\n */\narrayMethodReWrites.filter = function (callback, thisArg) {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n const result = [];\n let resultIndex = 0;\n\n const userThis = thisArg || that;\n\n const len = that.length;\n for (let i = 0; i < len; i++) {\n // 使用 in 操作符检查索引是否存在\n // 原生 filter 会跳过空洞(比如 [1, , 3] 中的 index 1)\n if (i in that) {\n const value = isDeep ? deepSignal(that[i], scope) : that[i];\n // 性能点 3:直接调用回调,避免使用多余的包装\n if (callback.call(userThis, value, i, userThis)) {\n // 性能点 4:直接通过索引赋值,通常比 push() 略快\n result[resultIndex++] = value;\n }\n }\n }\n this[Keys.Iterator];\n return result;\n};\n\narrayMethodReWrites.slice = function (start, end) {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n\n const that = toRaw(this);\n const len = that.length;\n\n // 1. 处理 start 参数\n let k = start || 0;\n if (k < 0) {\n k = Math.max(len + k, 0);\n } else {\n k = Math.min(k, len);\n }\n\n // 2. 处理 end 参数\n let final = end === undefined ? len : end;\n if (final < 0) {\n final = Math.max(len + final, 0);\n } else {\n final = Math.min(final, len);\n }\n\n // 3. 计算实际需要抽取的长度\n const count = Math.max(final - k, 0);\n\n // 4. 预分配数组空间以提升性能(针对大数组非常有效)\n // 现代引擎对于已知长度的数组初始化会有优化\n const result = new Array(count);\n\n // 5. 循环赋值\n for (let i = 0; i < count; i++) {\n // 确保处理稀疏数组的情况,保持与原生行为一致\n if (i + k in that) {\n result[i] = isDeep ? deepSignal(that[i + k], scope) : that[i + k];\n }\n }\n this[Keys.Iterator];\n return result;\n};\n\narrayMethodReWrites.toReversed = function () {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n\n // 2. 获取数组长度(使用无符号右移保证为正整数,模拟规范中的 ToLength/ToUint32)\n const len = that.length;\n\n // 3. 创建等长的新数组\n // 预先分配内存空间比不断 push 性能更好\n const result = new Array(len);\n\n // 4. 填充新数组\n // 使用双指针或简单减法遍历。由于 O[i] 可能触发 getter,\n // 且我们需要处理稀疏数组,直接赋值 A[k] = O[j] 即可。\n let k = 0;\n while (k < len) {\n // 根据规范,toReversed 会读取索引值,如果索引不存在则为 undefined\n // 这会自动将稀疏数组的 hole 转为 undefined\n result[k] = isDeep ? deepSignal(that[len - 1 - k], scope) : that[len - 1 - k];\n k++;\n }\n\n this[Keys.Iterator];\n // 5. 返回结果\n return result;\n};\n\narrayMethodReWrites.toSpliced = function (start, deleteCount, ...items) {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n\n const len = that.length;\n\n // 1. 确定实际的相对起始索引 (处理负数和越界)\n let relativeStart = start >> 0; // 快速取整\n let actualStart = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len);\n\n // 2. 确定实际删除的数量\n let actualDeleteCount;\n if (arguments.length === 0) {\n actualDeleteCount = 0;\n } else if (arguments.length === 1) {\n actualDeleteCount = len - actualStart;\n } else {\n let dc = deleteCount >> 0;\n actualDeleteCount = Math.min(Math.max(dc, 0), len - actualStart);\n }\n\n // 3. 计算新数组长度\n const insertCount = items.length;\n const newLen = len - actualDeleteCount + insertCount;\n const result = new Array(newLen);\n\n // 4. 填充新数组(分段式操作,性能最优)\n\n // 第一段:保留起始点之前的元素\n for (let i = 0; i < actualStart; i++) {\n result[i] = isDeep ? deepSignal(that[i], scope) : that[i];\n }\n\n // 第二段:插入新元素\n for (let i = 0; i < insertCount; i++) {\n result[actualStart + i] = isDeep ? deepSignal(items[i], scope) : items[i];\n }\n\n // 第三段:保留被删除部分之后的剩余元素\n const remainingStart = actualStart + actualDeleteCount;\n const resultOffset = actualStart + insertCount;\n for (let i = 0; i < len - remainingStart; i++) {\n result[resultOffset + i] = isDeep ? deepSignal(that[remainingStart + i], scope) : that[remainingStart + i];\n }\n\n this[Keys.Iterator];\n return result;\n};\n\narrayMethodReWrites.with = function (index, value) {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n\n // 1. 获取数组长度(确保处理类数组对象)\n const len = that.length;\n\n // 2. 转换索引为整数(处理 undefined/NaN 等情况)\n let relativeIndex = Number(index) || 0;\n\n // 3. 处理负数索引逻辑\n let actualIndex = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n\n // 4. 边界检查:如果索引越界,抛出 RangeError\n if (actualIndex >= len || actualIndex < 0) {\n throw new RangeError(`Invalid index: ${index}`);\n }\n\n // 5. 性能优化点:预分配数组空间\n // 使用 new Array(len) 配合循环在处理大数组且包含空位时,\n // 比 [...that] 或 slice() 更加符合规范对“稀疏转密集”的要求。\n const result = new Array(len);\n\n for (let i = 0; i < len; i++) {\n if (i === actualIndex) {\n result[i] = isDeep ? deepSignal(value, scope) : value;\n } else {\n result[i] = isDeep ? deepSignal(that[i], scope) : that[i];\n }\n }\n this[Keys.Iterator];\n return result;\n};\n\narrayMethodReWrites.concat = function (...items) {\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n const selfLen = that.length; // 确保长度为正整数\n\n // 2. 预计算总长度以优化性能\n let totalLength = selfLen;\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n // 模拟原生 concat 的展开逻辑:只有数组会被展开\n if (Array.isArray(item)) {\n totalLength += item.length;\n } else {\n totalLength += 1;\n }\n }\n\n // 3. 创建结果数组(预设长度)\n const result = new Array(totalLength);\n let k = 0;\n\n // 4. 填充原数组数据\n for (; k < selfLen; k++) {\n if (k in that) {\n result[k] = isDeep ? deepSignal(that[k], scope) : that[k];\n }\n }\n\n // 5. 填充参数数据\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (Array.isArray(item)) {\n for (let j = 0; j < item.length; j++) {\n if (j in item) {\n result[k] = isDeep ? deepSignal(item[j], scope) : item[j];\n }\n k++;\n }\n } else {\n result[k] = isDeep ? deepSignal(item, scope) : item;\n k++;\n }\n }\n this[Keys.Iterator];\n return result;\n};\n\n/*----------------- 回调函数 仅收集 __Iterator Get,回调中收集用户 get -----------------*/\nconst GetMethodConf = {\n wrapReturn: false,\n wrapArgs: 0b01\n};\n[\n {\n key: 'every',\n ...GetMethodConf\n },\n {\n key: 'find',\n wrapReturn: true,\n ...GetMethodConf\n },\n {\n key: 'findLast',\n ...GetMethodConf,\n wrapReturn: true\n },\n {\n key: 'findIndex',\n ...GetMethodConf\n },\n {\n key: 'findLastIndex',\n ...GetMethodConf\n },\n {\n key: 'forEach',\n ...GetMethodConf\n },\n {\n key: 'map',\n ...GetMethodConf\n },\n {\n key: 'some',\n ...GetMethodConf\n },\n {\n key: 'reduce',\n ...GetMethodConf,\n wrapArgs: 0b10\n },\n {\n key: 'reduceRight',\n ...GetMethodConf,\n wrapArgs: 0b10\n }\n].forEach(({ key, wrapReturn, wrapArgs }) => {\n arrayMethodReWrites[key] = function (...args: any[]) {\n const meta = this[Keys.Meta];\n const fn = Array.prototype[key];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n warpCallbackArgs(isDeep, args, scope, wrapArgs);\n // 遍历函数不收集数组属性\n let result = fn.call(that, ...args);\n if (wrapReturn && isDeep) {\n result = deepSignal(result, scope);\n }\n this[Keys.Iterator];\n return result;\n };\n});\n\n// TODO: 考虑是否基于 js 实现以提高性能\narrayMethodReWrites.toSorted = function (...args: any[]) {\n const fn = Array.prototype['toSorted'];\n const meta = this[Keys.Meta];\n const { deep: isDeep, scope } = meta;\n const that = toRaw(this);\n warpCallbackArgs(isDeep, args, scope, 0b11);\n let result = fn.call(that, ...args);\n this[Keys.Iterator];\n return isDeep ? result.map(it => deepSignal(it, scope)) : result;\n};\n\n/*----------------- 转换方法 仅收集 仅收集 __Iterator Get -----------------*/\n['join', 'toString', 'toLocaleString'].forEach(key => {\n arrayMethodReWrites[key] = function (...args: any[]) {\n const fn = Array.prototype[key];\n const that = toRaw(this);\n const result = fn.call(that, ...args);\n this[Keys.Iterator];\n return result;\n };\n});\n\nfunction warpCallbackArgs(isDeep: boolean, args: any[], scope: Scope, wrapArgs: number = 0b01) {\n const callback = args[0];\n const wrapCb = function (this: any, ...cbArgs: any[]) {\n if (isDeep) {\n if (wrapArgs & 0b01) cbArgs[0] = deepSignal(cbArgs[0], scope);\n if (wrapArgs & 0b10) cbArgs[1] = deepSignal(cbArgs[1], scope);\n }\n // 遍历函数不收集数组属性,但是回调函数需要收集用户的 get\n return callback.call(this, ...cbArgs);\n };\n args[0] = wrapCb;\n}\n\n// TODO: flat flatMap sort\n\n/**\n * 无需重写:\n * 1. at\n * 2. keys\n */\n","import { getPulling } from './core';\nimport { deepSignal, shareSignal } from './deep-signal';\nimport { DeepOmitPath, IsStore, Key, PRecord, StoreIgnoreKeys } from './type';\n\nexport class Store {\n static [IsStore] = true;\n static [StoreIgnoreKeys]: Key[] = ['ui', 'raw'];\n static Current: Store = null;\n constructor() {\n const proxy = deepSignal(this, getPulling(), true);\n Store.Current = proxy;\n return proxy;\n }\n parent: () => Store | null = () => null;\n\n static new<T extends Store = any, P extends Store = any, O extends string = ''>(\n this: new (...args: any[]) => T,\n keyMap: PRecord<keyof T, keyof Omit<P, O> | DeepOmitPath<P, O>> = {},\n staticMap: PRecord<keyof T, any> = {}\n ): T {\n const parentStore = Store.Current;\n const child = new (this as any)();\n if (parentStore) {\n for (const childKey in keyMap) {\n const parentKey: string = keyMap[childKey] as any;\n shareSignal(parentStore, parentKey, child, childKey);\n }\n }\n for (const key in staticMap) {\n const value = staticMap[key];\n child[key] = value;\n }\n child.parent = () => parentStore;\n Store.Current = parentStore;\n return child;\n }\n\n map<P extends Store = any, O extends string = ''>(\n keyMap: PRecord<keyof this, keyof Omit<P, O> | DeepOmitPath<P, O>> = {}\n ) {\n const parentStore = this.parent();\n if (parentStore) {\n for (const childKey in keyMap) {\n const parentKey: string = keyMap[childKey] as any;\n shareSignal(parentStore, parentKey, this, childKey);\n }\n }\n this.parent = null;\n }\n}\n","import { Computed, Effect, EffectStrType2Enum, getPulling, ScheduleType, ScheduleTypeStr, Scope, Signal } from './core';\nimport { State } from './core/macro' with { type: 'macro' };\nimport { ValueDiff } from './type';\nimport { deepSignal } from './deep-signal';\n\nexport function $(data: any) {\n if (typeof data === 'object' && data !== null) {\n return deepSignal(data, getPulling());\n }\n if (typeof data === 'function') {\n const s = new Computed(data),\n get = s.get.bind(s);\n return {\n ins: s,\n get v() {\n return get();\n }\n };\n } else {\n const s = new Signal(data),\n set = s.set.bind(s),\n get = s.get.bind(s);\n return {\n ins: s,\n get v() {\n return get();\n },\n set v(v) {\n set(v);\n }\n };\n }\n}\n\nconst DefaultCustomEffectOpt = {\n immediate: true,\n type: 'sync' as ScheduleTypeStr\n};\n\nexport type CustomEffectOpt = Partial<typeof DefaultCustomEffectOpt>;\n\nexport function effectUt(\n callback: (...args: ValueDiff[]) => void,\n depOrOpt?: any[] | CustomEffectOpt,\n opt?: CustomEffectOpt\n) {\n /*----------------- 自动收集 -----------------*/\n const hasDep = Array.isArray(depOrOpt);\n opt = hasDep ? opt || {} : depOrOpt || {};\n const scheduleType = EffectStrType2Enum[opt.type];\n if (!hasDep) {\n // @ts-ignore\n const ef = new Effect(callback, scheduleType);\n const run = ef.dispose.bind(ef);\n run.ins = ef;\n return run;\n }\n /*----------------- 指定依赖, watcher -----------------*/\n let mounted = false;\n const deps = depOrOpt as any[];\n const immediate = deps.length === 0 ? true : (opt.immediate ?? true);\n const vs: ValueDiff[] = Array.from({ length: deps.length }, () => ({ old: null, val: null }));\n\n const ef = new Effect(eff => {\n for (let i = 0; i < deps.length; i++) {\n const value = deps[i].v;\n vs[i].old = vs[i].val;\n vs[i].val = value;\n }\n\n if (mounted || immediate) {\n eff.state |= State.LinkScopeOnly;\n callback(...vs);\n eff.state &= ~State.LinkScopeOnly;\n }\n mounted = true;\n }, scheduleType);\n const run = ef.dispose.bind(ef);\n run.ins = ef;\n return run;\n}\n\nexport function effect(\n callback: (...args: ValueDiff[]) => void,\n depOrOpt?: any[] | CustomEffectOpt,\n opt?: CustomEffectOpt\n) {\n /*----------------- 自动收集 -----------------*/\n const hasDep = Array.isArray(depOrOpt);\n opt = hasDep ? opt || {} : depOrOpt || {};\n const scheduleType = EffectStrType2Enum[opt.type];\n if (!hasDep) {\n // @ts-ignore\n const ef = new Effect(callback, scheduleType);\n return ef;\n }\n /*----------------- 指定依赖, watcher -----------------*/\n let mounted = false;\n const deps = depOrOpt as any[];\n const immediate = deps.length === 0 ? true : (opt.immediate ?? true);\n const vs: ValueDiff[] = Array.from({ length: deps.length }, () => ({ old: null, val: null }));\n\n const ef = new Effect(eff => {\n for (let i = 0; i < deps.length; i++) {\n const value = deps[i].get();\n vs[i].old = vs[i].val;\n vs[i].val = value;\n }\n\n if (mounted || immediate) {\n eff.state |= State.LinkScopeOnly;\n callback(...vs);\n eff.state &= ~State.LinkScopeOnly;\n }\n mounted = true;\n }, scheduleType);\n return ef;\n}\n\nexport function scope(...args) {\n const ins = new Scope(args[0]);\n if (args.length === 2) {\n ins.scope = args[1];\n }\n ins.get();\n const run = ins.dispose.bind(ins);\n run.ins = ins;\n return run;\n}\n"],"names":["_execId","currentExecId","execIdInc","execId","setExecId","v","pulling","setPulling","getPulling","runWithPulling","fn","scope","oldPulling","ret","ScheduleType","EffectStrType2Enum","sync","Sync","pre","Pre","render","Render","post","Post","ScheduleStatus","MultiScheduler","hasTask","taskMap","constructor","queueCount","i","head","tail","addTask","queueId","task","queue","item","value","next","flushAllTask","highest","consumeTask","get","multiScheduler","Keys","IsStore","Symbol","StoreIgnoreKeys","ide","globalThis","requestIdleCallback","requestAnimationFrame","setTimeout","now","timer","performance","Date","channel","MessageChannel","msgId","macro","memoId","onMessage","e","data","port2","removeEventListener","addEventListener","port1","postMessage","p","Promise","resolve","micro","cb","then","toRaw","a","Raw","mark","signal","line","emitHead","down","state","State","notLocked","type","addEffect","markUnknownDeep","nextEmitLine","initialLine","noPulling","stack","len","DirtyState","pullDeep","root","node","top","lineStack","_node","noSkipSelf","PullingOrScopeExecuted","firstLine","recHead","up","_node2","noGoSibling","prevValue","prevPulling","_line","transferDirtyState","nextRecLine","effectQueue","consumeI","produceI","effect","flushSyncEffect","schedulerStatus","Idle","flushMicroEffect","Ready","Running","_batchDeep","batchStart","batchEnd","batchDeep","unlink","deep","prevEmitLine","prevRecLine","prevOutLink","nextOutLink","emitTail","recTail","outLink","dispose","_ref","toDel","_toDel","outer","ScopeAbort","releaseScope","clean","onClean","current","link","scopeUp","scopeDown","nextRec","eid","makeOutLink","first","Computed","callback","shouldLink","notForceUpdate","nextId","prevId","nextLine","Signal","set","EffectState","Effect","res","prototype","ScopeAndLinkScopeOnly","Scope","rawToProxy","WeakMap","Unknown","Dirty","ScopeReady","deepSignal","target","isObj","ProxyFreeObject","cells","Map","targetIsArray","Array","isArray","targetIsStore","Boolean","meta","proxy","Proxy","obj","prop","receiver","Meta","unscopables","Reflect","isIgnoreKey","desc","getOwnPropertyDescriptor","isGetter","handleGetterAsComputed","valueIsFn","arrayMethodReWrites","s","wrappedValue","success","cell","handleArraySet","triggerIter","deleteProperty","delete","undefined","ownKeys","length","Iterator","shareSignal","from","fromPath","to","toPath","toPaths","split","formPaths","_getTargetAndKey","getTargetAndKey","fromTarget","fromKey","key","val","fromSignal","_getTargetAndKey2","toTarget","toKey","error","console","paths","ignores","includes","some","it","startsWith","arr","isNatureNumStr","has","forEach","args","call","that","result","iterator","isEntries","rawArray","iter","isDeep","rawNext","bind","done","filter","thisArg","resultIndex","userThis","slice","start","end","k","Math","max","min","final","count","toReversed","toSpliced","deleteCount","items","relativeStart","actualStart","actualDeleteCount","arguments","dc","insertCount","newLen","remainingStart","resultOffset","with","index","relativeIndex","Number","actualIndex","RangeError","concat","selfLen","totalLength","j","GetMethodConf","wrapReturn","wrapArgs","warpCallbackArgs","toSorted","map","wrapCb","cbArgs","Store","Current","parent","new","keyMap","staticMap","parentStore","child","childKey","parentKey","$","ins","effectUt","depOrOpt","opt","hasDep","scheduleType","ef","run","mounted","deps","immediate","vs","old","eff"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -26,6 +26,21 @@ declare enum ScheduleType {
26
26
  /** signal 变化后优先级第三高的异步任务 */
27
27
  Post = 8
28
28
  }
29
+ declare const EffectStrType2Enum: {
30
+ sync: ScheduleType;
31
+ pre: ScheduleType;
32
+ render: ScheduleType;
33
+ post: ScheduleType;
34
+ };
35
+ type ScheduleTypeStr = keyof typeof EffectStrType2Enum;
36
+ declare enum ScheduleStatus {
37
+ /** 空闲 */
38
+ Idle = 0,
39
+ /** 准备运行 */
40
+ Ready = 1,
41
+ /** 运行中 */
42
+ Running = 2
43
+ }
29
44
 
30
45
  declare class Scope {
31
46
  callback: () => OnClean | any;
@@ -202,12 +217,12 @@ declare const shareSignal: (from: any, fromPath: string, to: any, toPath: string
202
217
  declare function $(data: any): any;
203
218
  declare const DefaultCustomEffectOpt: {
204
219
  immediate: boolean;
205
- type: ScheduleType;
220
+ type: ScheduleTypeStr;
206
221
  };
207
222
  type CustomEffectOpt = Partial<typeof DefaultCustomEffectOpt>;
208
223
  declare function effectUt(callback: (...args: ValueDiff[]) => void, depOrOpt?: any[] | CustomEffectOpt, opt?: CustomEffectOpt): any;
209
224
  declare function effect(callback: (...args: ValueDiff[]) => void, depOrOpt?: any[] | CustomEffectOpt, opt?: CustomEffectOpt): Effect;
210
225
  declare function scope(...args: any[]): any;
211
226
 
212
- export { $, Computed, Effect, IsStore, Keys, ScheduleType, Scope, Signal, Store, StoreIgnoreKeys, batchEnd, batchStart, clean, deepSignal, effect, effectUt, execId, execIdInc, getPulling, ide, macro, micro, now, runWithPulling, scope, setExecId, setPulling, shareSignal, toRaw };
213
- export type { CreateScope, CreateTaskProps, CustomEffectOpt, DeepOmitPath, DeepPath, DeepValue, Dispose, Key, Link, MatchValue, Mix, OnClean, OutLink, PRecord, SideEffect, SignalNode, SignalType, Task, TaskControlReturn, ValueDiff };
227
+ export { $, Computed, Effect, EffectStrType2Enum, IsStore, Keys, ScheduleStatus, ScheduleType, Scope, Signal, Store, StoreIgnoreKeys, batchEnd, batchStart, clean, deepSignal, effect, effectUt, execId, execIdInc, getPulling, ide, macro, micro, now, runWithPulling, scope, setExecId, setPulling, shareSignal, toRaw };
228
+ export type { CreateScope, CreateTaskProps, CustomEffectOpt, DeepOmitPath, DeepPath, DeepValue, Dispose, Key, Link, MatchValue, Mix, OnClean, OutLink, PRecord, ScheduleTypeStr, SideEffect, SignalNode, SignalType, Task, TaskControlReturn, ValueDiff };