aoye 0.0.17 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aoye.cjs.js +1 -0
- package/dist/aoye.cjs.js.map +1 -1
- package/dist/aoye.esm.js +1 -1
- package/dist/aoye.esm.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.umd.js +1 -0
- package/dist/index.umd.js.map +1 -1
- package/package.json +2 -2
package/dist/aoye.cjs.js
CHANGED
|
@@ -1543,6 +1543,7 @@ exports.TaskQueue = TaskQueue;
|
|
|
1543
1543
|
exports.batch = batch;
|
|
1544
1544
|
exports.clean = clean;
|
|
1545
1545
|
exports.customEffect = customEffect;
|
|
1546
|
+
exports.deepSignal = deepSignal;
|
|
1546
1547
|
exports.effect = effect;
|
|
1547
1548
|
exports.getPulling = getPulling;
|
|
1548
1549
|
exports.isScope = isScope;
|
package/dist/aoye.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aoye.cjs.js","sources":["../src/global.ts","../src/priority-queue.ts","../src/task.ts","../src/type.ts","../src/util.ts","../src/schedule.ts","../src/dfs.ts","../src/line.ts","../src/scope.ts","../src/batch-set.ts","../src/signal.ts","../src/deep-signal.ts","../src/store.ts","../src/index.ts"],"sourcesContent":["import { SortMap, BaseEvent as Event } from 'bobe-shared';\nimport type { Signal } from './signal';\nexport const rawToProxy = new WeakMap();\n\nexport const evt = new Event();\n\nexport const G = {\n /** 原子 signal 更新次数 */\n version: 0,\n id: 0,\n /** scope 销毁任务序号 */\n scopeDisposeI: 0,\n PullingSignal: null as Signal | null,\n /** 表示当前处于 pull 递归中 */\n PullingRecurseDeep: 0\n};\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","/**\n * 这是一个优先队列 (满足子节点总是比父节点大)\n * 1\n *\n * 10 20\n *\n * 15 30 25 30\n *\n * 17\n * 现在插入 7 , 会按广度优先的顺序插入在数组尾部\n * 1\n *\n * 10 20\n *\n * 15 30 25 30\n *\n * 17 7\n * 接着我们只需要将 7 逐层与上门的父节点比较, 7 较小则两者交互,一直让 7 上浮到适合的位置\n *\n * 0\n *\n * 1 2 2^0 得到第二层第一个索引\n *\n * 3 4 5 6 2^0 + 2^1 。。。 + 2^n + x = y\n *\n * 7 8\n * 上浮后我们得到以上的树\n */\n// 父子节点的关系\n// 计算一个节点的 index 公式 ① 2^0 + 2^1 。。。 + 2^n + y = x 已知\n// 节点的左子节点 index ② 2^0 + 2^1 。。。 + 2^n + 2^(n+1) + z = res 求 res\n// ② - ① 得到 2^(n+1) + (z-y) = res - x\n// 2^(n+1) + (z-y) + x = res\n// 而 z 和 y 的关系是,③ z = 2y\n\n// 2^(n+1) + y + x = res;\n// 2^n + (2^n + y) + x = res;\n\n// 根据① 可得 2^n + y = x - 2^0~2^(n-1);\n// 2^n + (2^n + y) + x = res;\n// 2^n + (x - (2^0+~2^(n-1))) + x = res;\n// 2^n - (2^0+~2^(n-1)) + 2x = res;\n// 1 + 2x = res;\n\ntype IGetIndex = (v: number, max: number) => number | null;\nexport const leakI: IGetIndex = (y, max) => (y < 0 || y >= max ? null : y);\nconst getLeft: IGetIndex = (x, max) => leakI(x * 2 + 1, max);\nconst getRight: IGetIndex = (x, max) => leakI(x * 2 + 2, max);\nconst getParent: IGetIndex = (x, max) => leakI((x - 1) >>> 1, max);\n\nconst exchange = (arr, i, j) => ([arr[i], arr[j]] = [arr[j], arr[i]]);\nexport class PriorityQueue<T> {\n arr: T[] = [];\n // 构造函数接受一个compare函数\n // compare返回的-1, 0, 1决定元素是否优先被去除\n constructor(public aIsUrgent: (a: T, b: T) => boolean) {\n }\n\n // 添加一个元素\n _add(current: T) {\n // console.log(`加入 ${current}`);\n this.arr.push(current);\n const len = this.size();\n // this.logTree();\n if (len === 1) {\n return;\n }\n this.goUp(this.arr, current, len);\n }\n\n add(...items: T[]) {\n items.forEach(it => this._add(it));\n }\n\n goUp = (arr: T[], current: T, len: number) => {\n let i = len - 1;\n while (i > 0) {\n const item = arr[i];\n const pI = getParent(i, len)!;\n const parent = arr[pI];\n if (this.aIsUrgent(item, parent)) {\n // console.log(`交换 parent:${parent} -> child:${item} `);\n exchange(arr, i, pI);\n // this.logTree();\n i = pI;\n } else {\n // console.log(`parent:${parent} child:${item} 不需要交换 \\n`);\n break;\n }\n }\n };\n\n // 去除头元素并返回\n poll() {\n const { arr } = this;\n // console.log(`弹出 ${arr[0]} 把 ${arr[arr.length - 1]} 放置到队头 `);\n const len = this.size();\n if (len <= 2) {\n return arr.shift();\n }\n\n const last = arr.pop();\n const first = arr[0];\n arr[0] = last!;\n // this.logTree();\n this.goDown(this.arr, 0);\n return first;\n }\n\n goDown = (arr: T[], i: number) => {\n const len = this.size();\n const half = len >>> 1;\n while (i < half) {\n const lI = getLeft(i, len);\n const rI = getRight(i, len);\n let point = i;\n\n if (lI != null && this.aIsUrgent(arr[lI], arr[point])) {\n point = lI;\n }\n if (rI != null && this.aIsUrgent(arr[rI], arr[point])) {\n point = rI;\n }\n if (point === i) {\n break;\n }\n // console.log(`交换 parent:${arr[i]} -> child:${arr[point]} `);\n exchange(arr, i, point);\n // this.logTree();\n i = point;\n }\n };\n\n // 取得头元素\n peek() {\n return this.arr[0];\n }\n // 取得元素数量\n size() {\n return this.arr.length;\n }\n\n logTree() {\n const { arr } = this;\n let i = 0;\n let j = 1;\n let level = 0;\n const matrix: T[][] = [];\n do {\n matrix.push(arr.slice(i, j));\n i = i * 2 + 1;\n j = i + Math.pow(2, level) + 1;\n level++;\n } while (i < arr.length);\n const last = Math.pow(2, matrix.length - 1);\n const arrStr = JSON.stringify(last);\n const halfLen = arrStr.length >>> 1;\n\n matrix.forEach(it => {\n const str = JSON.stringify(it);\n const halfIt = str.length >>> 1;\n console.log(str.padStart(halfLen + halfIt, ' '));\n });\n console.log('\\n');\n }\n}\n\n// case 1\n// const pq = new PriorityQueue((a, b) => a - b)\n// pq.add(5)\n// pq.add(3)\n// pq.add(1)\n// pq.add(4)\n// pq.add(2)\n// const result = []\n// while (pq.size() > 0) {\n// result.push(pq.poll())\n// }\n// console.log(result);\n// [1,2,3,4,5]\n\n// case 2\n// const pq = new PriorityQueue((a, b) => b - a)\n// pq.add(1)\n// pq.add(3)\n// pq.add(4)\n// pq.add(5)\n// pq.add(2)\n// const result = []\n// while (pq.size() > 0) {\n// result.push(pq.poll())\n// }\n// console.log(result);\n// [5,4,3,2,1]\n","import { evt } from './global';\nimport { PriorityQueue } from './priority-queue';\nimport { CreateTaskProps, Task, TaskControlReturn } from './type';\n\nconst DefaultTaskControlReturn: TaskControlReturn = {\n finished: true,\n startNewCallbackAble: true\n};\n\n/** TODO: 支持配置是否继续在同一任务中完成后续任务 */\nexport class TaskQueue {\n constructor(\n public callbackAble: CreateTaskProps['callbackAble'],\n public aIsUrgent: CreateTaskProps['aIsUrgent']\n ) {}\n isScheduling = false;\n taskQueue: PriorityQueue<Task>;\n static create({ callbackAble, aIsUrgent }: CreateTaskProps) {\n const queue = new TaskQueue(callbackAble, aIsUrgent);\n queue.taskQueue = new PriorityQueue<Task>(aIsUrgent);\n return queue;\n }\n\n pushTask(task: Task) {\n const { taskQueue, isScheduling } = this;\n taskQueue._add(task);\n if (!isScheduling) {\n this.callbackAble(this.scheduleTask.bind(this));\n this.isScheduling = true;\n }\n }\n\n scheduleTask() {\n const { taskQueue } = this;\n // console.log('调度 dispose');\n const fn = taskQueue.peek();\n if (!fn) return (this.isScheduling = false);\n\n let info: TaskControlReturn = fn() || {};\n info = { ...DefaultTaskControlReturn, ...info };\n\n // 完成\n if (info.finished) {\n taskQueue.poll();\n if (taskQueue.size() === 0) {\n return (this.isScheduling = false);\n }\n }\n\n // 开启新 启动器\n if (info.startNewCallbackAble) {\n this.callbackAble(this.scheduleTask.bind(this));\n } else {\n this.scheduleTask();\n }\n }\n}\n","import { Queue } from 'bobe-shared';\nimport { Line } from './line';\nimport type { Signal } from './signal';\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}\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 ScheduleHandler = (effects: Queue<Signal>) => any;\nexport type SignalOpt<T> = {\n customPull?: () => T;\n scheduler?: string;\n isScope?: boolean;\n scope?: Signal;\n immediate?: boolean;\n};\n\nexport type Vertex = {\n /** 上游来的最后一条线 */\n recEnd: Line;\n recStart: Line;\n /** 向下游发出的最后一条线 */\n emitEnd: Line;\n emitStart: Line;\n};\n\nexport type DFSCtxBegin = {\n node: Signal;\n lineFromUp: Line;\n walkedLine: Line[];\n notGoDeep?: boolean;\n};\n\nexport type DFSCtxCompete = {\n node: Signal;\n lineToDeep: Line;\n walkedLine: Line[];\n notGoDeep?: boolean;\n};\n\nexport type Getter<T = any> = {\n (): T;\n ins?: Signal;\n};\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 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 { Queue, QueueItem, SubQueue } from 'bobe-shared';\nimport type { Signal } from './signal';\nimport { TaskQueue } from './task';\nimport { Task } from './type';\nimport { macro, micro } from './util';\n\nexport abstract class Scheduler {\n static Sync = '__Sync_';\n static Layout = '__Layout_';\n static Micro = '__Micro_';\n static Macro = '__Macro_';\n\n effectQueue: Queue<Signal> = new Queue();\n /** 每当 Set 或 BatchSet 开始时标记 */\n firstEffectItem: QueueItem<Signal> = null;\n /** 记录 Set 或 BatchSet 产生的最后一个 Effect */\n lastEffectItem: QueueItem<Signal> = null;\n\n endSet() {\n if(!this.firstEffectItem) return;\n const subQueue = this.effectQueue.subRef(this.firstEffectItem, this.lastEffectItem);\n this.onOneSetEffectsAdded?.(subQueue, this.effectQueue)\n this.firstEffectItem = null;\n this.lastEffectItem = null;\n }\n\n addEffect(effect: Signal) {\n const item = this.effectQueue.push(effect);\n this.onEffectAdded?.(effect, item, this.effectQueue);\n return item;\n }\n\n /**\n * 用户可实现\n * 一个 effect 加入队列后的 回调\n * */\n // @ts-ignore\n onEffectAdded(effect: Signal, item: QueueItem<Signal>, queue: Queue<Signal>): void;\n\n /**\n * 用户可实现\n * 一次 set 操作导致的所有 effect 加入队列后的 回调\n * */\n // @ts-ignore\n onOneSetEffectsAdded(subQueue: SubQueue<Signal>, queue: Queue<Signal>): void;\n}\n\nclass SyncScheduler extends Scheduler {\n onOneSetEffectsAdded(subQueue: Queue<Signal>, queue: Queue<Signal>): void {\n subQueue.forEach((effect, item) => {\n // 循环依赖时会跳过已经在执行的 effect\n effect.runIfDirty();\n queue.delete(item);\n });\n }\n}\n\nclass MicroScheduler extends Scheduler {\n taskQueue = TaskQueue.create({ callbackAble: micro, aIsUrgent: (a, b) => a.time < b.time });\n onOneSetEffectsAdded(subQueue: Queue<Signal>, queue: Queue<Signal>): void {\n const task: Task = () => {\n subQueue.forEach((effect, item) => {\n // 循环依赖时会跳过已经在执行的 effect\n effect.runIfDirty();\n queue.delete(item);\n });\n return {\n finished: true,\n startNewCallbackAble: false\n };\n };\n task.time = Date.now();\n this.taskQueue.pushTask(task);\n }\n}\n\nclass MacroScheduler extends Scheduler {\n taskQueue = TaskQueue.create({ callbackAble: macro, aIsUrgent: (a, b) => a.time < b.time });\n onOneSetEffectsAdded(subQueue: Queue<Signal>, queue: Queue<Signal>): void {\n const task = () => {\n subQueue.forEach((effect, item) => {\n // 循环依赖时会跳过已经在执行的 effect\n effect.runIfDirty();\n queue.delete(item);\n });\n };\n task.time = Date.now();\n this.taskQueue.pushTask(task);\n }\n}\n\nclass LayoutScheduler extends Scheduler {\n taskQueue = TaskQueue.create({ callbackAble: macro, aIsUrgent: (a, b) => a.time < b.time });\n onOneSetEffectsAdded(subQueue: Queue<Signal>, queue: Queue<Signal>): void {\n const task = () => {\n subQueue.forEach((effect, item) => {\n // 循环依赖时会跳过已经在执行的 effect\n effect.runIfDirty();\n queue.delete(item);\n });\n };\n task.time = Date.now();\n this.taskQueue.pushTask(task);\n }\n}\n\nexport const _scheduler: Record<string | symbol, Scheduler> = {\n [Scheduler.Sync]: new SyncScheduler(),\n [Scheduler.Micro]: new MicroScheduler(),\n [Scheduler.Macro]: new MacroScheduler(),\n [Scheduler.Layout]: new LayoutScheduler()\n};\nexport const registerScheduler = (key: string | symbol, Ctor: new () => Scheduler) => (_scheduler[key] = new Ctor());\n","import type { Signal } from './signal';\nimport { Line } from './line';\nimport { DFSCtxBegin, DFSCtxCompete, Vertex } from './type';\n\nconst DefaultDFSOpt = {\n isUp: false,\n begin: null as (dfsCtx: DFSCtxBegin) => any,\n complete: null as (dfsCtx: DFSCtxCompete) => any,\n breakStack: [] as Line[],\n breakLine: null as Line,\n breakNode: null as Signal\n};\n\ntype DFSOpt = typeof DefaultDFSOpt;\n\nexport function dfs(root: Vertex, opt: Partial<DFSOpt> = {}) {\n const { isUp, begin, complete, breakStack: lineStack, breakLine } = { ...DefaultDFSOpt, ...opt };\n let node = opt.breakNode || root;\n let line: Line = breakLine;\n const listKey = isUp ? 'recStart' : 'emitStart';\n const nodeKey = isUp ? 'upstream' : 'downstream';\n // 向上意味着要找所有节点的入度\n const nextLineKey = isUp ? 'nextRecLine' : 'nextEmitLine';\n const reverseNodeKey = isUp ? 'downstream' : 'upstream';\n\n while (1) {\n let notGoDeep = begin?.({\n node: node as Signal,\n lineFromUp: line,\n walkedLine: lineStack\n });\n lineStack.push(line);\n line = node[listKey];\n\n if (line && !notGoDeep) {\n const firstChild = line[nodeKey];\n node = firstChild;\n continue;\n }\n\n while (1) {\n const noGoSibling = complete?.({\n node: node as Signal,\n lineToDeep: line,\n walkedLine: lineStack,\n notGoDeep\n });\n // 只对当前不下钻的节点生效\n // notGoDeep = false;\n line = lineStack.pop();\n // 递归出口,回到起点\n if (node === root) {\n return;\n }\n notGoDeep = false;\n const nextLine = line[nextLineKey];\n // 有兄弟节点, 进入外循环,向下遍历兄弟节点\n if (!noGoSibling && nextLine) {\n // 外层循环后会把 sibling line 入栈,这里不需要处理\n line = nextLine;\n node = nextLine[nodeKey];\n break;\n }\n // 没有兄弟节点就上浮\n node = line[reverseNodeKey];\n }\n }\n}\n","import { State } from './global';\nimport type { Signal } from './signal';\nimport { Vertex } from './type';\n\nexport class Line {\n static link(v1: Signal, v2: Signal) {\n let { emitEnd } = v1,\n { recEnd, recStart } = v2,\n noRecEnd = !recEnd,\n /** 模拟头节点 */\n head = { nextRecLine: recStart } as Line,\n line: Line;\n recEnd = recEnd || head;\n\n const { nextRecLine } = recEnd || {};\n // 没有下一个收到的线\n if (!nextRecLine) {\n line = new Line();\n // 内部会处理空链表的情况,即同步头部\n Line.emit_line(v1, line);\n Line.rec_line(v2, line);\n emitEnd && Line.line_line_emit(emitEnd, line);\n !noRecEnd && Line.line_line_rec(recEnd, line);\n }\n // 复用\n else if (nextRecLine.upstream === v1) {\n v2.recEnd = nextRecLine;\n // TODO: link 版本标记\n }\n // 插入(这么做): v1 和 下一个 入度(订阅)节点不同\n // TODO: v2上次真依赖了 v1 只是没检查出来,需要删除原依赖\n else {\n line = new Line();\n Line.emit_line(v1, line);\n Line.rec_line(v2, line);\n emitEnd && Line.line_line_emit(emitEnd, line);\n Line.insert_line_rec(recEnd, nextRecLine, line);\n }\n // 消除 head\n for (const key in head) {\n head[key] = null;\n }\n // v1 和 v2 处于不同 scope,v1 不是 scope\n // => v1 是外部 signal\n if (line && v2.scope && v1.scope !== v2.scope && (v1.state & State.IsScope) === 0) {\n const first = v2.scope.outLink;\n if (!first) {\n v2.scope.outLink = line;\n } else {\n first.prevOutLink = line;\n line.nextOutLink = first;\n v2.scope.outLink = line;\n }\n }\n }\n\n static unlink(line: Line) {\n let { prevEmitLine, nextEmitLine, prevRecLine, nextRecLine, upstream, downstream, nextOutLink, prevOutLink } = line;\n line.prevEmitLine = null;\n line.nextEmitLine = null;\n line.prevRecLine = null;\n line.nextRecLine = null;\n line.upstream = null;\n line.downstream = null;\n line.prevOutLink = null;\n line.nextOutLink = null;\n\n const downNode = downstream as Signal;\n // 有兄弟外部引用\n if(prevOutLink) {\n prevOutLink.nextOutLink = nextOutLink;\n } \n if(nextOutLink) {\n nextOutLink.prevOutLink = prevOutLink;\n }\n // 是 first 节点\n if(downNode.scope && downNode.scope.outLink === line) {\n downNode.scope.outLink = nextOutLink;\n }\n\n\n /** 上游节点发出的线 前一条 关联 后一条 */\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = nextEmitLine;\n } else {\n // 删除的是首个节点\n upstream.emitStart = nextEmitLine;\n }\n if (nextEmitLine) {\n nextEmitLine.prevEmitLine = prevEmitLine;\n } else {\n // 删除尾节点\n upstream.emitEnd = prevEmitLine;\n }\n\n /** 下游节点接收的线,我们从 recEnd 开始删除的,\n * 接收信息,不需要设置 recEnd ,\n * 因为 recStart ~ recEnd 是经过上级 get 确认的有用依赖\n * */\n if (prevRecLine) {\n prevRecLine.nextRecLine = nextRecLine;\n } else {\n // 删除的是首个节点,大概率不可能从有依赖 变成无依赖\n downstream.recStart = nextRecLine;\n }\n if (nextRecLine) {\n nextRecLine.prevRecLine = prevRecLine;\n } else {\n // 删除尾节点\n downstream.recEnd = prevRecLine;\n }\n }\n\n static unlinkRec(line: Line) {\n // 作为下游,执行完 get 上游节点已经完成了依赖更新,把 recEnd 后的依赖删除即可\n let toDel = line;\n while (toDel) {\n const memoNext = toDel.nextRecLine;\n Line.unlink(toDel);\n toDel = memoNext;\n }\n }\n static unlinkEmit(line: Line) {\n // 作为下游,执行完 get 上游节点已经完成了依赖更新,把 recEnd 后的依赖删除即可\n let toDel = line;\n while (toDel) {\n const memoNext = toDel.nextEmitLine;\n Line.unlink(toDel);\n toDel = memoNext;\n }\n }\n\n /** 上游节点 连 link */\n static emit_line(upstream: Vertex, line: Line) {\n if (!upstream.emitStart) {\n upstream.emitStart = line;\n }\n upstream.emitEnd = line;\n line.upstream = upstream;\n }\n /** 下游节点 连 link */\n static rec_line(downstream: Vertex, line: Line) {\n if (!downstream.recStart) {\n downstream.recStart = line;\n }\n downstream.recEnd = line;\n line.downstream = downstream;\n }\n\n /** 同一节点发出的 两个条线 相连 */\n static line_line_emit(l1: Line, l2: Line) {\n if (!l1 || !l2) return;\n l1.nextEmitLine = l2;\n l2.prevEmitLine = l1;\n }\n\n /** 同一节点接收的 两个条线 相连 */\n static line_line_rec(l1: Line, l2: Line) {\n if (!l1 || !l2) return;\n l1.nextRecLine = l2;\n l2.prevRecLine = l1;\n }\n\n static insert_line_emit(l1: Line, l2: Line, ins: Line) {\n l1.nextEmitLine = ins;\n ins.prevEmitLine = l1;\n l2.prevEmitLine = ins;\n ins.nextEmitLine = l2;\n }\n\n static insert_line_rec(l1: Line, l2: Line, ins: Line) {\n l1.nextRecLine = ins;\n ins.prevRecLine = l1;\n l2.prevRecLine = ins;\n ins.nextRecLine = l2;\n }\n\n /** 上游顶点 */\n public upstream: Vertex = null;\n /** 上游节点 发出的上一条线 */\n public prevEmitLine: Line = null;\n /** 上游节点 发出的下一条线 */\n public nextEmitLine: Line = null;\n\n /** 下游顶点 */\n public downstream: Vertex = null;\n /** 下游节点 接收的上一条线 */\n public prevRecLine: Line = null;\n /** 下游节点 接收的下一条线 */\n public nextRecLine: Line = null;\n /** 表示 scope 当前存在的 外部 link */\n public prevOutLink = null;\n public nextOutLink = null;\n constructor() {}\n}\n","import { dfs } from './dfs';\nimport { G, ScopeAbort, State } from './global';\nimport { Line } from './line';\nimport type { Signal } from './signal';\n\n/** 子 scope 释放,把其 only 被其持有的 signal 挂回其属于的 scope */\nexport const trackByOtherScopeDispose = (signal: Signal) => {\n const line = new Line();\n const { recEnd } = signal.scope;\n Line.emit_line(signal, line);\n Line.rec_line(signal.scope, line);\n Line.line_line_rec(recEnd, line);\n};\n\nexport function unlinkRecWithScope(line: Line) {\n // 作为下游,执行完 get 上游节点已经完成了依赖更新,把 recEnd 后的依赖删除即可\n let toDel = line;\n while (toDel) {\n const memoNext = toDel.nextRecLine;\n const upstream = toDel.upstream as Signal;\n // 的上游是 scope\n if (upstream.state & State.IsScope) {\n dispose.call(upstream);\n }\n // 删除的上游是 signal\n else {\n unlinkSingleLine(toDel);\n }\n // trackIsland(upstream);\n toDel = memoNext;\n }\n}\n\nexport function unlinkSingleLine(line: Line) {\n const upstream = line.upstream as Signal;\n if (upstream.emitStart === upstream.emitEnd) {\n unlinkSingleRefedNode(upstream);\n }\n // 多处引用,断开当前即可\n else {\n Line.unlink(line);\n }\n}\n\nexport function unlinkSingleRefedNode(delRoot: Signal) {\n let toUnlink: Line;\n dfs(delRoot, {\n isUp: true,\n begin: ({ node }) => {\n doUnlink(toUnlink);\n toUnlink = null;\n // 1.节点不止一个引用\n if (node.emitStart !== node.emitEnd) {\n return true;\n }\n },\n complete: ({ node, notGoDeep }) => {\n doUnlink(toUnlink);\n toUnlink = null;\n const isSingleRefed = !notGoDeep;\n // 先记录,离开这个节点后执行 unlink\n if (isSingleRefed) {\n toUnlink = node.emitStart;\n }\n }\n });\n doUnlink(toUnlink);\n}\n\nfunction doUnlink(line: Line) {\n if (!line) {\n return;\n }\n Line.unlink(line);\n}\n\n/** 释放 scope effect watch 的外链 */\nexport function dispose(this: Signal) {\n // 断开子节点的外链,以及其引用的 signals\n let toDel = this.recStart;\n while (toDel) {\n const memoNext = toDel.nextRecLine;\n const upstream = toDel.upstream as Signal;\n // 的上游是 scope,交给 dfs 处理\n if (upstream.state & State.IsScope) {\n dfs(upstream, {\n isUp: true,\n begin: ({ node }) => {\n // 1. 不是 scope 直接忽略\n // 2. 已完成标记 或 清理\n if ((node.state & State.IsScope) === 0 || node.state & ScopeAbort) return true;\n },\n complete: ({ node: scope, notGoDeep }) => {\n const shouldAbort = !notGoDeep;\n if (shouldAbort) {\n releaseScope(scope);\n }\n }\n });\n }\n // 删除的上游是 signal\n else {\n unlinkSingleLine(toDel);\n }\n // trackIsland(upstream);\n toDel = memoNext;\n }\n // 自身的外链也需要断开\n releaseScope(this);\n doUnlink(this.emitStart);\n}\n\nfunction releaseScope(scope: Signal) {\n let outLink = scope.outLink;\n while (outLink) {\n const memoNext = outLink.nextOutLink;\n unlinkSingleLine(outLink);\n outLink = memoNext;\n }\n scope.state |= State.ScopeAbort;\n // clean 在 scope 释放时执行\n scope.clean?.();\n scope.clean = null;\n}\n\nexport function clean(cb: () => void) {\n G.PullingSignal.clean = () => runWithPulling(cb, null);\n}\n\nexport function runWithPulling<T extends (...args: any[]) => any>(fn: T, signal: Signal | null): ReturnType<T> {\n const prevPulling = G.PullingSignal;\n G.PullingSignal = signal;\n const res = fn();\n G.PullingSignal = prevPulling;\n return res;\n}\n\nexport function getPulling() {\n return G.PullingSignal;\n}\nexport function setPulling(pulling: Signal | null) {\n G.PullingSignal = pulling;\n}\n","import { _scheduler } from './schedule';\n\nclass Batch {\n deep = 0;\n start() {\n this.deep++;\n }\n end() {\n this.deep--;\n if (this.deep !== 0) return;\n // 完成 batch 后开始调度\n for (const key in _scheduler) {\n const instance = _scheduler[key];\n instance.endSet();\n }\n }\n\n inBatch() {\n return this.deep > 0;\n }\n}\n\nexport const batch = new Batch();\n","import { dfs } from './dfs';\nimport { DirtyState, G, ScopeExecuted, State } from './global';\nimport { Line } from './line';\nimport { _scheduler } from './schedule';\nimport { runWithPulling, unlinkRecWithScope } from './scope';\nimport { SignalOpt, Vertex } from './type';\nimport { batch } from './batch-set';\n\nconst markDeep = (signal: Signal) => {\n let level = 0,\n updatedSchedulers = new Set<string>();\n dfs(signal, {\n isUp: false,\n begin: ({ node }) => {\n /**\n * 1. 已放弃节点, 或 scope,不做标记\n * 2. scope 节点\n */\n if (node.isDisabled()) {\n return true;\n }\n\n const inPullingArea = node.state & State.Pulling;\n /** 在 Pulling 结束后将 PullingUnknown 转为 Unknown */\n const Unknown = inPullingArea ? State.PullingUnknown : State.Unknown;\n\n const isEffect = level > 0;\n // 没有下游,或者下游是 scope\n const isLeaf = !node.emitStart || node.emitStart.downstream === node.scope;\n if (isEffect) {\n node.state |= Unknown;\n }\n // 源节点是叶子节点,不做标记,后续可以通过 get 重新拉取到新值\n else if (!isLeaf) {\n node.state |= State.Dirty;\n }\n\n // 当前 effect 正在执行,不收集到 Queue\n if (isLeaf && isEffect && !inPullingArea) {\n const key = node.scheduler;\n const instance = _scheduler[key];\n const item = instance.addEffect(node);\n if (!instance.firstEffectItem) {\n instance.firstEffectItem = item;\n }\n instance.lastEffectItem = item;\n updatedSchedulers.add(key);\n }\n level++;\n }\n });\n // batch 操作通过 endBatch 触发\n if (batch.inBatch()) return;\n\n for (const key in _scheduler) {\n const instance = _scheduler[key];\n instance.endSet();\n }\n};\n\nconst pullingPostprocess = (node: Signal) => {\n let s = node.state;\n s &= ~State.Pulling; // 移除 Pulling 状态\n\n if (s & State.PullingUnknown) {\n // 同时移除 PullingUnknown 并加上 Unknown\n // 使用位掩码:s = (s & ~State.PullingUnknown) | State.Unknown\n s = (s & ~State.PullingUnknown) | State.Unknown;\n }\n \n node.state = s;\n};\n\nexport class Signal<T = any> implements Vertex {\n version = -1;\n id = G.id++;\n state = State.Clean;\n /** 当前节点创建时处于的 effect 就是 scope */\n scope: Signal = G.PullingSignal;\n recEnd: Line = null;\n recStart: Line = null;\n emitStart: Line = null;\n emitEnd: Line = null;\n scheduler: string = null;\n value: T = null;\n outLink: Line = null;\n static Pulling: Signal = null;\n pull: () => T = null;\n\n constructor(\n private nextValue: T,\n /** 为什么是 shallow,因为 pullDeep 会把\n * 上游节点 get 执行完成,让其可以直接拿到缓存值\n */\n private customPull?: () => T\n ) {}\n\n static create<T>(nextValue: T, { customPull, isScope, scope, immediate, ...rest }: SignalOpt<T>) {\n const s = new Signal(nextValue, customPull);\n s.pull = s.customPull || s.DEFAULT_PULL;\n // TODO: 性能优化 0,1ms\n Object.assign(s, rest);\n if (isScope) {\n s.state |= State.IsScope;\n }\n if (scope !== undefined) {\n s.scope = scope;\n }\n return s;\n }\n\n DEFAULT_PULL() {\n return this.nextValue;\n }\n\n /**\n * 递归拉取负责建立以来链\n */\n pullRecurse(shouldLink = true) {\n G.PullingRecurseDeep++;\n const downstream = G.PullingSignal;\n const isScope = this.state & State.IsScope;\n\n if (\n this !== downstream &&\n // 1. 外部支持 link\n shouldLink &&\n // 2. 有下游\n downstream &&\n // 3. 下游是 watcher,不链接非 scope\n ((downstream.state & State.LinkScopeOnly) === 0 || isScope)\n ) {\n Line.link(this, downstream);\n }\n try {\n if (this.version === G.version) {\n return this.value;\n }\n\n // 进 pullShallow 前重置 recEnd,让子 getter 重构订阅链表\n if (this.pull !== this.DEFAULT_PULL) this.recEnd = null;\n this.state |= State.Pulling;\n G.PullingSignal = this;\n this.clean?.();\n this.clean = null;\n let v = this.pull();\n if (isScope && typeof v === 'function') {\n const fn = v;\n this.clean = () => runWithPulling(fn as any, null);\n v = this.value;\n }\n this.value = v;\n // 依赖上游的 版本号\n this.version = G.version;\n // if (this.value !== v) {\n // }\n return this.value;\n } catch (error) {\n console.error('计算属性报错这次不触发,后续状态可能出错', error);\n return this.value;\n } finally {\n // 如果使用了 DEFAULT_PULL,处理一次 set 的取值后,替换回 customPull,如果有的话\n this.pull = this.customPull || this.DEFAULT_PULL;\n pullingPostprocess(this);\n // 本 getter 执行完成时上游 getter 通过 link,完成对下游 recLines 的更新\n const toDel = this.recEnd?.nextRecLine;\n unlinkRecWithScope(toDel);\n G.PullingSignal = downstream;\n G.PullingRecurseDeep--;\n }\n }\n\n pullDeep() {\n /*----------------- 有上游节点,通过 dfs 重新计算结果 -----------------*/\n const signal = this;\n // 优化执行\n if (signal.state & DirtyState) {\n dfs(signal, {\n isUp: true,\n begin: ({ node }) => {\n // console.log('begin', node.id);\n\n /**\n * 不需要检查\n * 1. 正在查\n * 2. 干净\n * 3. 放弃 或者为 scope 节点\n */\n if (node.state & (State.Pulling | State.Dirty) || (node.state & DirtyState) === 0 || node.isDisabled()) {\n return true;\n }\n node.state |= State.Pulling;\n },\n complete: ({ node, notGoDeep: cleanOrDirty, walkedLine }) => {\n const isDirty = node.state & State.Dirty;\n // 1. 非 Dirty 的情况\n let currentClean = cleanOrDirty && !isDirty;\n // 2. 已在处理 Dirty 节点 跳过\n if (cleanOrDirty && node.state & State.Pulling) {\n currentClean = true;\n }\n let noGoSibling = false;\n const last = walkedLine[walkedLine.length - 1];\n const downstream = last?.downstream as Signal;\n // 当前正在检查,生成检查屏障,同时避免重新标记 和\n if (currentClean) {\n }\n // 当前节点需要重新计算\n else if (isDirty) {\n // 优化:源节点变化,直接让下游节点重新计算\n // if (!node.recStart && node.value !== node.nextValue) {\n if (node.pull === node.DEFAULT_PULL && node.value !== node.nextValue) {\n node.markDownStreamsDirty();\n node.state &= ~State.Dirty;\n // 源接节点不需要做 PullingUnknown => Unknown 转换\n node.state &= ~State.Pulling;\n return;\n }\n // 预检数据\n else {\n const prevPulling = G.PullingSignal;\n G.PullingSignal = downstream;\n const prevValue = node.value;\n // 递归转用递归拉取,且不需要重建 link 因为dfs的前提就是上游节点依赖于 本节点\n node.pullRecurse(false);\n // dirty 传播, 由于本节点值已被计算出,因此消除 dirty\n if (prevValue !== node.value) {\n node.markDownStreamsDirty();\n }\n node.state &= ~State.Dirty;\n G.PullingSignal = prevPulling;\n // 立刻返回父节点重新计算\n noGoSibling = true;\n }\n }\n // 没被上游节点标记为 Dirty,说明是干净的\n else if (node.state & State.Unknown) {\n node.state &= ~State.Unknown;\n }\n node.version = G.version;\n pullingPostprocess(node);\n return noGoSibling;\n }\n });\n }\n // 此处要建立执行 pullDeep 的 signal 和 downstream 的连接\n const downstream = G.PullingSignal;\n if (\n this !== downstream &&\n // 2. 有下游\n downstream &&\n // 3. 下游是 watcher 不是 watch,或 是watcher 但 当前是 scope\n ((downstream.state & State.LinkScopeOnly) === 0 || this.state & State.IsScope)\n ) {\n Line.link(this, downstream);\n }\n return this.value;\n }\n\n get v() {\n if (this.isDisabled()) {\n return this.value;\n }\n // 1. 没有上游节点\n // 2. 本节点标记了 Dirty\n // 应该通过递归重新建立\n if (!this.recStart || this.pull === this.DEFAULT_PULL) {\n return this.pullRecurse(true);\n }\n // 有上游节点则采用 dfs 直接遍历,查看情况\n return this.pullDeep();\n }\n\n // pause() {\n // this.state |= State.SelfPaused;\n // }\n\n // resume() {\n // this.state &= ~State.SelfPaused;\n // }\n\n markDownStreamsDirty() {\n let point = this.emitStart;\n while (point != null) {\n const downstream = point.downstream as Signal;\n downstream.state |= State.Dirty;\n downstream.state &= ~State.Unknown;\n point = point.nextEmitLine;\n }\n }\n\n set v(v: T) {\n if (this.isDisabled() || this.nextValue === v) {\n return;\n }\n this.nextValue = v;\n // 手动设值后,采用默认拉取,能拉取到设置的值,拉取完成后在替换回 customPull\n this.pull = this.DEFAULT_PULL;\n G.version++;\n markDeep(this as any);\n }\n\n /** 返回值为 true 表示已处理 */\n runIfDirty() {\n this.state & (State.Unknown | State.Dirty) && this.v;\n }\n\n isDisabled() {\n return (\n // scope 被取消\n (this.scope && this.scope.state & State.ScopeAbort) ||\n // 是 scope 节点,且处于 ready 状态,不需要重复执行\n (this.state & State.IsScope && this.state & ScopeExecuted)\n );\n }\n /** 记录当前 effect 中 clean */\n clean: () => void = null;\n}\n","import { isNatureNumStr } from 'bobe-shared';\nimport { G, rawToProxy } from './global';\nimport { Scheduler } from './schedule';\nimport { runWithPulling } from './scope';\nimport { Signal } from './signal';\nimport { IsStore, Key, Keys, StoreIgnoreKeys } from './type';\nimport { toRaw } from './util';\nimport { batch } from './batch-set';\n\nexport const deepSignal = <T>(target: T, scope: Signal, deep = true) => {\n const isObj = typeof target === 'object' && target !== null;\n // 1. 不是对象则返回原始值\n if (!isObj || target[Keys.Raw]) 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, 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.v;\n }\n\n const wrappedValue = deep ? deepSignal(value, scope) : value;\n s = Signal.create(wrappedValue, {\n scheduler: Scheduler.Sync,\n isScope: false,\n scope\n });\n cells.set(prop, s);\n return s.v;\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 batch.start();\n const success = Reflect.set(obj, prop, value, receiver);\n // 已有对应 Signal,更新 signal 值\n const cell = cells.get(prop);\n if (cell) {\n cell.v = 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 batch.end();\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 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 }, 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, Signal>,\n scope: Signal\n) {\n let s = cells.get(prop);\n if (s) {\n return s.v;\n }\n\n s = Signal.create(null, {\n customPull: () => Reflect.get(obj, prop, receiver),\n scheduler: Scheduler.Sync,\n isScope: false,\n scope\n });\n cells.set(prop, s);\n return s.v;\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] + 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 batch.start();\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 batch.end();\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: Signal, 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 { G } from './global';\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, G.PullingSignal, 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 { G, State } from './global';\nimport { Scheduler } from './schedule';\nimport { dispose } from './scope';\nimport { Signal } from './signal';\nimport { Dispose, Getter, Mix, SignalType, ValueDiff } from './type';\nimport { deepSignal } from './deep-signal';\n\nexport { shareSignal } from './deep-signal';\nexport { Scheduler, registerScheduler } from './schedule';\nexport { TaskQueue } from './task';\nexport { runWithPulling, clean, setPulling, getPulling } from './scope';\nexport * from './store';\nexport * from './type';\nexport { batch } from './batch-set';\nconst DefaultCustomSignalOpt = {\n /** 三种模式\n * 1. auto: 根据值类型自动判断 默认\n * 2. ref: 对任何值使用 {v: xxx} 进行包装\n * 3. proxy: 使用 proxy 进行包装\n */\n mode: 'auto' as SignalType,\n /** 是否深度响应式 */\n deep: true\n};\n\nconst DefaultCustomEffectOpt = {\n scheduler: Scheduler.Sync,\n immediate: true,\n isScope: true\n};\n\nexport type CustomSignalOpt = Partial<typeof DefaultCustomSignalOpt>;\nexport type CustomEffectOpt = Partial<typeof DefaultCustomEffectOpt>;\n\nexport type CreateSignal = {\n <T extends (...args: any[]) => any>(get: T, opt?: CustomSignalOpt): Signal<ReturnType<T>>;\n <T extends object>(value: T, opt?: CustomSignalOpt): T;\n <T = any>(value: T, opt?: CustomSignalOpt): Signal<T>;\n};\n\nexport const $: CreateSignal = (init?: unknown, opt: CustomSignalOpt = {}) => {\n opt = { ...DefaultCustomSignalOpt, ...opt };\n let intiValue: any, customPull: Getter;\n if (typeof init === 'function') {\n intiValue = null;\n customPull = init as Getter;\n } else if (opt.mode !== 'ref' && typeof init === 'object' && init !== null) {\n return deepSignal(init, G.PullingSignal, opt.deep);\n } else {\n intiValue = init;\n }\n const s = Signal.create(intiValue, {\n scheduler: Scheduler.Sync,\n isScope: false,\n customPull\n });\n return s;\n};\n\nexport const effect = (\n customPull: (...args: ValueDiff[]) => void,\n depOrOpt?: Signal<any>[] | CustomEffectOpt,\n opt?: CustomEffectOpt\n) => {\n /*----------------- 自动收集 -----------------*/\n const hasDep = Array.isArray(depOrOpt);\n opt = hasDep ? opt || {} : depOrOpt || {};\n // 立即执行\n if (!hasDep) {\n const s = Signal.create(null, {\n customPull,\n scheduler: Scheduler.Sync,\n isScope: true,\n ...opt\n });\n\n s.v;\n const bound = dispose.bind(s);\n bound.ins = s;\n return bound as Dispose;\n }\n\n /*----------------- 指定依赖, watcher -----------------*/\n let mounted = false;\n const deps = depOrOpt as Signal[];\n const immediate = deps.length === 0 ? true : (opt.immediate ?? true);\n const vs: ValueDiff[] = Array.from({ length: deps.length }, () => ({ old: null, val: null }));\n const s = Signal.create(null, {\n customPull() {\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 s.state |= State.LinkScopeOnly;\n customPull(...vs);\n s.state &= ~State.LinkScopeOnly;\n }\n mounted = true;\n },\n scheduler: Scheduler.Sync,\n isScope: true,\n ...opt\n });\n\n s.v;\n const bound = dispose.bind(s);\n bound.ins = s;\n return bound as Dispose;\n};\n\nexport const scope = (customPull: () => void) => {\n const s = Signal.create(null, {\n customPull,\n scheduler: Scheduler.Sync,\n isScope: true\n });\n\n s.v;\n s.state |= State.ScopeReady;\n\n const bound = dispose.bind(s);\n bound.ins = s;\n return bound as Dispose;\n};\n\n/**\n * 数据变化时,自定义 触发订阅函数的时机\n * @param {CustomSignalOpt} opt 配置如下:\n * @prop scheduler: (runIfDirty, effect) => void 执行 runIfDirty 定制触发 effect 时机\n * @prop scope: 用于统一释放 effect link 的作用域 默认是 defaultScope 可以全局获取\n */\nexport const customEffect = (opt?: CustomEffectOpt) => {\n return ((init: any, innerOpt: any = {}) => {\n return effect(init, { ...opt, ...innerOpt });\n }) as typeof effect;\n};\n\nexport const isSignal = (value: unknown): value is Signal => {\n return value instanceof Signal;\n};\n\nexport const isScope = (value: any): boolean => {\n return value instanceof Signal;\n};\n"],"names":["Event","State","__spreadValues","Keys","Queue","downstream","isNatureNumStr","s","bound"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aoye.cjs.js","sources":["../src/global.ts","../src/priority-queue.ts","../src/task.ts","../src/type.ts","../src/util.ts","../src/schedule.ts","../src/dfs.ts","../src/line.ts","../src/scope.ts","../src/batch-set.ts","../src/signal.ts","../src/deep-signal.ts","../src/store.ts","../src/index.ts"],"sourcesContent":["import { SortMap, BaseEvent as Event } from 'bobe-shared';\nimport type { Signal } from './signal';\nexport const rawToProxy = new WeakMap();\n\nexport const evt = new Event();\n\nexport const G = {\n /** 原子 signal 更新次数 */\n version: 0,\n id: 0,\n /** scope 销毁任务序号 */\n scopeDisposeI: 0,\n PullingSignal: null as Signal | null,\n /** 表示当前处于 pull 递归中 */\n PullingRecurseDeep: 0\n};\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","/**\n * 这是一个优先队列 (满足子节点总是比父节点大)\n * 1\n *\n * 10 20\n *\n * 15 30 25 30\n *\n * 17\n * 现在插入 7 , 会按广度优先的顺序插入在数组尾部\n * 1\n *\n * 10 20\n *\n * 15 30 25 30\n *\n * 17 7\n * 接着我们只需要将 7 逐层与上门的父节点比较, 7 较小则两者交互,一直让 7 上浮到适合的位置\n *\n * 0\n *\n * 1 2 2^0 得到第二层第一个索引\n *\n * 3 4 5 6 2^0 + 2^1 。。。 + 2^n + x = y\n *\n * 7 8\n * 上浮后我们得到以上的树\n */\n// 父子节点的关系\n// 计算一个节点的 index 公式 ① 2^0 + 2^1 。。。 + 2^n + y = x 已知\n// 节点的左子节点 index ② 2^0 + 2^1 。。。 + 2^n + 2^(n+1) + z = res 求 res\n// ② - ① 得到 2^(n+1) + (z-y) = res - x\n// 2^(n+1) + (z-y) + x = res\n// 而 z 和 y 的关系是,③ z = 2y\n\n// 2^(n+1) + y + x = res;\n// 2^n + (2^n + y) + x = res;\n\n// 根据① 可得 2^n + y = x - 2^0~2^(n-1);\n// 2^n + (2^n + y) + x = res;\n// 2^n + (x - (2^0+~2^(n-1))) + x = res;\n// 2^n - (2^0+~2^(n-1)) + 2x = res;\n// 1 + 2x = res;\n\ntype IGetIndex = (v: number, max: number) => number | null;\nexport const leakI: IGetIndex = (y, max) => (y < 0 || y >= max ? null : y);\nconst getLeft: IGetIndex = (x, max) => leakI(x * 2 + 1, max);\nconst getRight: IGetIndex = (x, max) => leakI(x * 2 + 2, max);\nconst getParent: IGetIndex = (x, max) => leakI((x - 1) >>> 1, max);\n\nconst exchange = (arr, i, j) => ([arr[i], arr[j]] = [arr[j], arr[i]]);\nexport class PriorityQueue<T> {\n arr: T[] = [];\n // 构造函数接受一个compare函数\n // compare返回的-1, 0, 1决定元素是否优先被去除\n constructor(public aIsUrgent: (a: T, b: T) => boolean) {\n }\n\n // 添加一个元素\n _add(current: T) {\n // console.log(`加入 ${current}`);\n this.arr.push(current);\n const len = this.size();\n // this.logTree();\n if (len === 1) {\n return;\n }\n this.goUp(this.arr, current, len);\n }\n\n add(...items: T[]) {\n items.forEach(it => this._add(it));\n }\n\n goUp = (arr: T[], current: T, len: number) => {\n let i = len - 1;\n while (i > 0) {\n const item = arr[i];\n const pI = getParent(i, len)!;\n const parent = arr[pI];\n if (this.aIsUrgent(item, parent)) {\n // console.log(`交换 parent:${parent} -> child:${item} `);\n exchange(arr, i, pI);\n // this.logTree();\n i = pI;\n } else {\n // console.log(`parent:${parent} child:${item} 不需要交换 \\n`);\n break;\n }\n }\n };\n\n // 去除头元素并返回\n poll() {\n const { arr } = this;\n // console.log(`弹出 ${arr[0]} 把 ${arr[arr.length - 1]} 放置到队头 `);\n const len = this.size();\n if (len <= 2) {\n return arr.shift();\n }\n\n const last = arr.pop();\n const first = arr[0];\n arr[0] = last!;\n // this.logTree();\n this.goDown(this.arr, 0);\n return first;\n }\n\n goDown = (arr: T[], i: number) => {\n const len = this.size();\n const half = len >>> 1;\n while (i < half) {\n const lI = getLeft(i, len);\n const rI = getRight(i, len);\n let point = i;\n\n if (lI != null && this.aIsUrgent(arr[lI], arr[point])) {\n point = lI;\n }\n if (rI != null && this.aIsUrgent(arr[rI], arr[point])) {\n point = rI;\n }\n if (point === i) {\n break;\n }\n // console.log(`交换 parent:${arr[i]} -> child:${arr[point]} `);\n exchange(arr, i, point);\n // this.logTree();\n i = point;\n }\n };\n\n // 取得头元素\n peek() {\n return this.arr[0];\n }\n // 取得元素数量\n size() {\n return this.arr.length;\n }\n\n logTree() {\n const { arr } = this;\n let i = 0;\n let j = 1;\n let level = 0;\n const matrix: T[][] = [];\n do {\n matrix.push(arr.slice(i, j));\n i = i * 2 + 1;\n j = i + Math.pow(2, level) + 1;\n level++;\n } while (i < arr.length);\n const last = Math.pow(2, matrix.length - 1);\n const arrStr = JSON.stringify(last);\n const halfLen = arrStr.length >>> 1;\n\n matrix.forEach(it => {\n const str = JSON.stringify(it);\n const halfIt = str.length >>> 1;\n console.log(str.padStart(halfLen + halfIt, ' '));\n });\n console.log('\\n');\n }\n}\n\n// case 1\n// const pq = new PriorityQueue((a, b) => a - b)\n// pq.add(5)\n// pq.add(3)\n// pq.add(1)\n// pq.add(4)\n// pq.add(2)\n// const result = []\n// while (pq.size() > 0) {\n// result.push(pq.poll())\n// }\n// console.log(result);\n// [1,2,3,4,5]\n\n// case 2\n// const pq = new PriorityQueue((a, b) => b - a)\n// pq.add(1)\n// pq.add(3)\n// pq.add(4)\n// pq.add(5)\n// pq.add(2)\n// const result = []\n// while (pq.size() > 0) {\n// result.push(pq.poll())\n// }\n// console.log(result);\n// [5,4,3,2,1]\n","import { evt } from './global';\nimport { PriorityQueue } from './priority-queue';\nimport { CreateTaskProps, Task, TaskControlReturn } from './type';\n\nconst DefaultTaskControlReturn: TaskControlReturn = {\n finished: true,\n startNewCallbackAble: true\n};\n\n/** TODO: 支持配置是否继续在同一任务中完成后续任务 */\nexport class TaskQueue {\n constructor(\n public callbackAble: CreateTaskProps['callbackAble'],\n public aIsUrgent: CreateTaskProps['aIsUrgent']\n ) {}\n isScheduling = false;\n taskQueue: PriorityQueue<Task>;\n static create({ callbackAble, aIsUrgent }: CreateTaskProps) {\n const queue = new TaskQueue(callbackAble, aIsUrgent);\n queue.taskQueue = new PriorityQueue<Task>(aIsUrgent);\n return queue;\n }\n\n pushTask(task: Task) {\n const { taskQueue, isScheduling } = this;\n taskQueue._add(task);\n if (!isScheduling) {\n this.callbackAble(this.scheduleTask.bind(this));\n this.isScheduling = true;\n }\n }\n\n scheduleTask() {\n const { taskQueue } = this;\n // console.log('调度 dispose');\n const fn = taskQueue.peek();\n if (!fn) return (this.isScheduling = false);\n\n let info: TaskControlReturn = fn() || {};\n info = { ...DefaultTaskControlReturn, ...info };\n\n // 完成\n if (info.finished) {\n taskQueue.poll();\n if (taskQueue.size() === 0) {\n return (this.isScheduling = false);\n }\n }\n\n // 开启新 启动器\n if (info.startNewCallbackAble) {\n this.callbackAble(this.scheduleTask.bind(this));\n } else {\n this.scheduleTask();\n }\n }\n}\n","import { Queue } from 'bobe-shared';\nimport { Line } from './line';\nimport type { Signal } from './signal';\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}\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 ScheduleHandler = (effects: Queue<Signal>) => any;\nexport type SignalOpt<T> = {\n customPull?: () => T;\n scheduler?: string;\n isScope?: boolean;\n scope?: Signal;\n immediate?: boolean;\n};\n\nexport type Vertex = {\n /** 上游来的最后一条线 */\n recEnd: Line;\n recStart: Line;\n /** 向下游发出的最后一条线 */\n emitEnd: Line;\n emitStart: Line;\n};\n\nexport type DFSCtxBegin = {\n node: Signal;\n lineFromUp: Line;\n walkedLine: Line[];\n notGoDeep?: boolean;\n};\n\nexport type DFSCtxCompete = {\n node: Signal;\n lineToDeep: Line;\n walkedLine: Line[];\n notGoDeep?: boolean;\n};\n\nexport type Getter<T = any> = {\n (): T;\n ins?: Signal;\n};\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 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 { Queue, QueueItem, SubQueue } from 'bobe-shared';\nimport type { Signal } from './signal';\nimport { TaskQueue } from './task';\nimport { Task } from './type';\nimport { macro, micro } from './util';\n\nexport abstract class Scheduler {\n static Sync = '__Sync_';\n static Layout = '__Layout_';\n static Micro = '__Micro_';\n static Macro = '__Macro_';\n\n effectQueue: Queue<Signal> = new Queue();\n /** 每当 Set 或 BatchSet 开始时标记 */\n firstEffectItem: QueueItem<Signal> = null;\n /** 记录 Set 或 BatchSet 产生的最后一个 Effect */\n lastEffectItem: QueueItem<Signal> = null;\n\n endSet() {\n if(!this.firstEffectItem) return;\n const subQueue = this.effectQueue.subRef(this.firstEffectItem, this.lastEffectItem);\n this.onOneSetEffectsAdded?.(subQueue, this.effectQueue)\n this.firstEffectItem = null;\n this.lastEffectItem = null;\n }\n\n addEffect(effect: Signal) {\n const item = this.effectQueue.push(effect);\n this.onEffectAdded?.(effect, item, this.effectQueue);\n return item;\n }\n\n /**\n * 用户可实现\n * 一个 effect 加入队列后的 回调\n * */\n // @ts-ignore\n onEffectAdded(effect: Signal, item: QueueItem<Signal>, queue: Queue<Signal>): void;\n\n /**\n * 用户可实现\n * 一次 set 操作导致的所有 effect 加入队列后的 回调\n * */\n // @ts-ignore\n onOneSetEffectsAdded(subQueue: SubQueue<Signal>, queue: Queue<Signal>): void;\n}\n\nclass SyncScheduler extends Scheduler {\n onOneSetEffectsAdded(subQueue: Queue<Signal>, queue: Queue<Signal>): void {\n subQueue.forEach((effect, item) => {\n // 循环依赖时会跳过已经在执行的 effect\n effect.runIfDirty();\n queue.delete(item);\n });\n }\n}\n\nclass MicroScheduler extends Scheduler {\n taskQueue = TaskQueue.create({ callbackAble: micro, aIsUrgent: (a, b) => a.time < b.time });\n onOneSetEffectsAdded(subQueue: Queue<Signal>, queue: Queue<Signal>): void {\n const task: Task = () => {\n subQueue.forEach((effect, item) => {\n // 循环依赖时会跳过已经在执行的 effect\n effect.runIfDirty();\n queue.delete(item);\n });\n return {\n finished: true,\n startNewCallbackAble: false\n };\n };\n task.time = Date.now();\n this.taskQueue.pushTask(task);\n }\n}\n\nclass MacroScheduler extends Scheduler {\n taskQueue = TaskQueue.create({ callbackAble: macro, aIsUrgent: (a, b) => a.time < b.time });\n onOneSetEffectsAdded(subQueue: Queue<Signal>, queue: Queue<Signal>): void {\n const task = () => {\n subQueue.forEach((effect, item) => {\n // 循环依赖时会跳过已经在执行的 effect\n effect.runIfDirty();\n queue.delete(item);\n });\n };\n task.time = Date.now();\n this.taskQueue.pushTask(task);\n }\n}\n\nclass LayoutScheduler extends Scheduler {\n taskQueue = TaskQueue.create({ callbackAble: macro, aIsUrgent: (a, b) => a.time < b.time });\n onOneSetEffectsAdded(subQueue: Queue<Signal>, queue: Queue<Signal>): void {\n const task = () => {\n subQueue.forEach((effect, item) => {\n // 循环依赖时会跳过已经在执行的 effect\n effect.runIfDirty();\n queue.delete(item);\n });\n };\n task.time = Date.now();\n this.taskQueue.pushTask(task);\n }\n}\n\nexport const _scheduler: Record<string | symbol, Scheduler> = {\n [Scheduler.Sync]: new SyncScheduler(),\n [Scheduler.Micro]: new MicroScheduler(),\n [Scheduler.Macro]: new MacroScheduler(),\n [Scheduler.Layout]: new LayoutScheduler()\n};\nexport const registerScheduler = (key: string | symbol, Ctor: new () => Scheduler) => (_scheduler[key] = new Ctor());\n","import type { Signal } from './signal';\nimport { Line } from './line';\nimport { DFSCtxBegin, DFSCtxCompete, Vertex } from './type';\n\nconst DefaultDFSOpt = {\n isUp: false,\n begin: null as (dfsCtx: DFSCtxBegin) => any,\n complete: null as (dfsCtx: DFSCtxCompete) => any,\n breakStack: [] as Line[],\n breakLine: null as Line,\n breakNode: null as Signal\n};\n\ntype DFSOpt = typeof DefaultDFSOpt;\n\nexport function dfs(root: Vertex, opt: Partial<DFSOpt> = {}) {\n const { isUp, begin, complete, breakStack: lineStack, breakLine } = { ...DefaultDFSOpt, ...opt };\n let node = opt.breakNode || root;\n let line: Line = breakLine;\n const listKey = isUp ? 'recStart' : 'emitStart';\n const nodeKey = isUp ? 'upstream' : 'downstream';\n // 向上意味着要找所有节点的入度\n const nextLineKey = isUp ? 'nextRecLine' : 'nextEmitLine';\n const reverseNodeKey = isUp ? 'downstream' : 'upstream';\n\n while (1) {\n let notGoDeep = begin?.({\n node: node as Signal,\n lineFromUp: line,\n walkedLine: lineStack\n });\n lineStack.push(line);\n line = node[listKey];\n\n if (line && !notGoDeep) {\n const firstChild = line[nodeKey];\n node = firstChild;\n continue;\n }\n\n while (1) {\n const noGoSibling = complete?.({\n node: node as Signal,\n lineToDeep: line,\n walkedLine: lineStack,\n notGoDeep\n });\n // 只对当前不下钻的节点生效\n // notGoDeep = false;\n line = lineStack.pop();\n // 递归出口,回到起点\n if (node === root) {\n return;\n }\n notGoDeep = false;\n const nextLine = line[nextLineKey];\n // 有兄弟节点, 进入外循环,向下遍历兄弟节点\n if (!noGoSibling && nextLine) {\n // 外层循环后会把 sibling line 入栈,这里不需要处理\n line = nextLine;\n node = nextLine[nodeKey];\n break;\n }\n // 没有兄弟节点就上浮\n node = line[reverseNodeKey];\n }\n }\n}\n","import { State } from './global';\nimport type { Signal } from './signal';\nimport { Vertex } from './type';\n\nexport class Line {\n static link(v1: Signal, v2: Signal) {\n let { emitEnd } = v1,\n { recEnd, recStart } = v2,\n noRecEnd = !recEnd,\n /** 模拟头节点 */\n head = { nextRecLine: recStart } as Line,\n line: Line;\n recEnd = recEnd || head;\n\n const { nextRecLine } = recEnd || {};\n // 没有下一个收到的线\n if (!nextRecLine) {\n line = new Line();\n // 内部会处理空链表的情况,即同步头部\n Line.emit_line(v1, line);\n Line.rec_line(v2, line);\n emitEnd && Line.line_line_emit(emitEnd, line);\n !noRecEnd && Line.line_line_rec(recEnd, line);\n }\n // 复用\n else if (nextRecLine.upstream === v1) {\n v2.recEnd = nextRecLine;\n // TODO: link 版本标记\n }\n // 插入(这么做): v1 和 下一个 入度(订阅)节点不同\n // TODO: v2上次真依赖了 v1 只是没检查出来,需要删除原依赖\n else {\n line = new Line();\n Line.emit_line(v1, line);\n Line.rec_line(v2, line);\n emitEnd && Line.line_line_emit(emitEnd, line);\n Line.insert_line_rec(recEnd, nextRecLine, line);\n }\n // 消除 head\n for (const key in head) {\n head[key] = null;\n }\n // v1 和 v2 处于不同 scope,v1 不是 scope\n // => v1 是外部 signal\n if (line && v2.scope && v1.scope !== v2.scope && (v1.state & State.IsScope) === 0) {\n const first = v2.scope.outLink;\n if (!first) {\n v2.scope.outLink = line;\n } else {\n first.prevOutLink = line;\n line.nextOutLink = first;\n v2.scope.outLink = line;\n }\n }\n }\n\n static unlink(line: Line) {\n let { prevEmitLine, nextEmitLine, prevRecLine, nextRecLine, upstream, downstream, nextOutLink, prevOutLink } = line;\n line.prevEmitLine = null;\n line.nextEmitLine = null;\n line.prevRecLine = null;\n line.nextRecLine = null;\n line.upstream = null;\n line.downstream = null;\n line.prevOutLink = null;\n line.nextOutLink = null;\n\n const downNode = downstream as Signal;\n // 有兄弟外部引用\n if(prevOutLink) {\n prevOutLink.nextOutLink = nextOutLink;\n } \n if(nextOutLink) {\n nextOutLink.prevOutLink = prevOutLink;\n }\n // 是 first 节点\n if(downNode.scope && downNode.scope.outLink === line) {\n downNode.scope.outLink = nextOutLink;\n }\n\n\n /** 上游节点发出的线 前一条 关联 后一条 */\n if (prevEmitLine) {\n prevEmitLine.nextEmitLine = nextEmitLine;\n } else {\n // 删除的是首个节点\n upstream.emitStart = nextEmitLine;\n }\n if (nextEmitLine) {\n nextEmitLine.prevEmitLine = prevEmitLine;\n } else {\n // 删除尾节点\n upstream.emitEnd = prevEmitLine;\n }\n\n /** 下游节点接收的线,我们从 recEnd 开始删除的,\n * 接收信息,不需要设置 recEnd ,\n * 因为 recStart ~ recEnd 是经过上级 get 确认的有用依赖\n * */\n if (prevRecLine) {\n prevRecLine.nextRecLine = nextRecLine;\n } else {\n // 删除的是首个节点,大概率不可能从有依赖 变成无依赖\n downstream.recStart = nextRecLine;\n }\n if (nextRecLine) {\n nextRecLine.prevRecLine = prevRecLine;\n } else {\n // 删除尾节点\n downstream.recEnd = prevRecLine;\n }\n }\n\n static unlinkRec(line: Line) {\n // 作为下游,执行完 get 上游节点已经完成了依赖更新,把 recEnd 后的依赖删除即可\n let toDel = line;\n while (toDel) {\n const memoNext = toDel.nextRecLine;\n Line.unlink(toDel);\n toDel = memoNext;\n }\n }\n static unlinkEmit(line: Line) {\n // 作为下游,执行完 get 上游节点已经完成了依赖更新,把 recEnd 后的依赖删除即可\n let toDel = line;\n while (toDel) {\n const memoNext = toDel.nextEmitLine;\n Line.unlink(toDel);\n toDel = memoNext;\n }\n }\n\n /** 上游节点 连 link */\n static emit_line(upstream: Vertex, line: Line) {\n if (!upstream.emitStart) {\n upstream.emitStart = line;\n }\n upstream.emitEnd = line;\n line.upstream = upstream;\n }\n /** 下游节点 连 link */\n static rec_line(downstream: Vertex, line: Line) {\n if (!downstream.recStart) {\n downstream.recStart = line;\n }\n downstream.recEnd = line;\n line.downstream = downstream;\n }\n\n /** 同一节点发出的 两个条线 相连 */\n static line_line_emit(l1: Line, l2: Line) {\n if (!l1 || !l2) return;\n l1.nextEmitLine = l2;\n l2.prevEmitLine = l1;\n }\n\n /** 同一节点接收的 两个条线 相连 */\n static line_line_rec(l1: Line, l2: Line) {\n if (!l1 || !l2) return;\n l1.nextRecLine = l2;\n l2.prevRecLine = l1;\n }\n\n static insert_line_emit(l1: Line, l2: Line, ins: Line) {\n l1.nextEmitLine = ins;\n ins.prevEmitLine = l1;\n l2.prevEmitLine = ins;\n ins.nextEmitLine = l2;\n }\n\n static insert_line_rec(l1: Line, l2: Line, ins: Line) {\n l1.nextRecLine = ins;\n ins.prevRecLine = l1;\n l2.prevRecLine = ins;\n ins.nextRecLine = l2;\n }\n\n /** 上游顶点 */\n public upstream: Vertex = null;\n /** 上游节点 发出的上一条线 */\n public prevEmitLine: Line = null;\n /** 上游节点 发出的下一条线 */\n public nextEmitLine: Line = null;\n\n /** 下游顶点 */\n public downstream: Vertex = null;\n /** 下游节点 接收的上一条线 */\n public prevRecLine: Line = null;\n /** 下游节点 接收的下一条线 */\n public nextRecLine: Line = null;\n /** 表示 scope 当前存在的 外部 link */\n public prevOutLink = null;\n public nextOutLink = null;\n constructor() {}\n}\n","import { dfs } from './dfs';\nimport { G, ScopeAbort, State } from './global';\nimport { Line } from './line';\nimport type { Signal } from './signal';\n\n/** 子 scope 释放,把其 only 被其持有的 signal 挂回其属于的 scope */\nexport const trackByOtherScopeDispose = (signal: Signal) => {\n const line = new Line();\n const { recEnd } = signal.scope;\n Line.emit_line(signal, line);\n Line.rec_line(signal.scope, line);\n Line.line_line_rec(recEnd, line);\n};\n\nexport function unlinkRecWithScope(line: Line) {\n // 作为下游,执行完 get 上游节点已经完成了依赖更新,把 recEnd 后的依赖删除即可\n let toDel = line;\n while (toDel) {\n const memoNext = toDel.nextRecLine;\n const upstream = toDel.upstream as Signal;\n // 的上游是 scope\n if (upstream.state & State.IsScope) {\n dispose.call(upstream);\n }\n // 删除的上游是 signal\n else {\n unlinkSingleLine(toDel);\n }\n // trackIsland(upstream);\n toDel = memoNext;\n }\n}\n\nexport function unlinkSingleLine(line: Line) {\n const upstream = line.upstream as Signal;\n if (upstream.emitStart === upstream.emitEnd) {\n unlinkSingleRefedNode(upstream);\n }\n // 多处引用,断开当前即可\n else {\n Line.unlink(line);\n }\n}\n\nexport function unlinkSingleRefedNode(delRoot: Signal) {\n let toUnlink: Line;\n dfs(delRoot, {\n isUp: true,\n begin: ({ node }) => {\n doUnlink(toUnlink);\n toUnlink = null;\n // 1.节点不止一个引用\n if (node.emitStart !== node.emitEnd) {\n return true;\n }\n },\n complete: ({ node, notGoDeep }) => {\n doUnlink(toUnlink);\n toUnlink = null;\n const isSingleRefed = !notGoDeep;\n // 先记录,离开这个节点后执行 unlink\n if (isSingleRefed) {\n toUnlink = node.emitStart;\n }\n }\n });\n doUnlink(toUnlink);\n}\n\nfunction doUnlink(line: Line) {\n if (!line) {\n return;\n }\n Line.unlink(line);\n}\n\n/** 释放 scope effect watch 的外链 */\nexport function dispose(this: Signal) {\n // 断开子节点的外链,以及其引用的 signals\n let toDel = this.recStart;\n while (toDel) {\n const memoNext = toDel.nextRecLine;\n const upstream = toDel.upstream as Signal;\n // 的上游是 scope,交给 dfs 处理\n if (upstream.state & State.IsScope) {\n dfs(upstream, {\n isUp: true,\n begin: ({ node }) => {\n // 1. 不是 scope 直接忽略\n // 2. 已完成标记 或 清理\n if ((node.state & State.IsScope) === 0 || node.state & ScopeAbort) return true;\n },\n complete: ({ node: scope, notGoDeep }) => {\n const shouldAbort = !notGoDeep;\n if (shouldAbort) {\n releaseScope(scope);\n }\n }\n });\n }\n // 删除的上游是 signal\n else {\n unlinkSingleLine(toDel);\n }\n // trackIsland(upstream);\n toDel = memoNext;\n }\n // 自身的外链也需要断开\n releaseScope(this);\n doUnlink(this.emitStart);\n}\n\nfunction releaseScope(scope: Signal) {\n let outLink = scope.outLink;\n while (outLink) {\n const memoNext = outLink.nextOutLink;\n unlinkSingleLine(outLink);\n outLink = memoNext;\n }\n scope.state |= State.ScopeAbort;\n // clean 在 scope 释放时执行\n scope.clean?.();\n scope.clean = null;\n}\n\nexport function clean(cb: () => void) {\n G.PullingSignal.clean = () => runWithPulling(cb, null);\n}\n\nexport function runWithPulling<T extends (...args: any[]) => any>(fn: T, signal: Signal | null): ReturnType<T> {\n const prevPulling = G.PullingSignal;\n G.PullingSignal = signal;\n const res = fn();\n G.PullingSignal = prevPulling;\n return res;\n}\n\nexport function getPulling() {\n return G.PullingSignal;\n}\nexport function setPulling(pulling: Signal | null) {\n G.PullingSignal = pulling;\n}\n","import { _scheduler } from './schedule';\n\nclass Batch {\n deep = 0;\n start() {\n this.deep++;\n }\n end() {\n this.deep--;\n if (this.deep !== 0) return;\n // 完成 batch 后开始调度\n for (const key in _scheduler) {\n const instance = _scheduler[key];\n instance.endSet();\n }\n }\n\n inBatch() {\n return this.deep > 0;\n }\n}\n\nexport const batch = new Batch();\n","import { dfs } from './dfs';\nimport { DirtyState, G, ScopeExecuted, State } from './global';\nimport { Line } from './line';\nimport { _scheduler } from './schedule';\nimport { runWithPulling, unlinkRecWithScope } from './scope';\nimport { SignalOpt, Vertex } from './type';\nimport { batch } from './batch-set';\n\nconst markDeep = (signal: Signal) => {\n let level = 0,\n updatedSchedulers = new Set<string>();\n dfs(signal, {\n isUp: false,\n begin: ({ node }) => {\n /**\n * 1. 已放弃节点, 或 scope,不做标记\n * 2. scope 节点\n */\n if (node.isDisabled()) {\n return true;\n }\n\n const inPullingArea = node.state & State.Pulling;\n /** 在 Pulling 结束后将 PullingUnknown 转为 Unknown */\n const Unknown = inPullingArea ? State.PullingUnknown : State.Unknown;\n\n const isEffect = level > 0;\n // 没有下游,或者下游是 scope\n const isLeaf = !node.emitStart || node.emitStart.downstream === node.scope;\n if (isEffect) {\n node.state |= Unknown;\n }\n // 源节点是叶子节点,不做标记,后续可以通过 get 重新拉取到新值\n else if (!isLeaf) {\n node.state |= State.Dirty;\n }\n\n // 当前 effect 正在执行,不收集到 Queue\n if (isLeaf && isEffect && !inPullingArea) {\n const key = node.scheduler;\n const instance = _scheduler[key];\n const item = instance.addEffect(node);\n if (!instance.firstEffectItem) {\n instance.firstEffectItem = item;\n }\n instance.lastEffectItem = item;\n updatedSchedulers.add(key);\n }\n level++;\n }\n });\n // batch 操作通过 endBatch 触发\n if (batch.inBatch()) return;\n\n for (const key in _scheduler) {\n const instance = _scheduler[key];\n instance.endSet();\n }\n};\n\nconst pullingPostprocess = (node: Signal) => {\n let s = node.state;\n s &= ~State.Pulling; // 移除 Pulling 状态\n\n if (s & State.PullingUnknown) {\n // 同时移除 PullingUnknown 并加上 Unknown\n // 使用位掩码:s = (s & ~State.PullingUnknown) | State.Unknown\n s = (s & ~State.PullingUnknown) | State.Unknown;\n }\n \n node.state = s;\n};\n\nexport class Signal<T = any> implements Vertex {\n version = -1;\n id = G.id++;\n state = State.Clean;\n /** 当前节点创建时处于的 effect 就是 scope */\n scope: Signal = G.PullingSignal;\n recEnd: Line = null;\n recStart: Line = null;\n emitStart: Line = null;\n emitEnd: Line = null;\n scheduler: string = null;\n value: T = null;\n outLink: Line = null;\n static Pulling: Signal = null;\n pull: () => T = null;\n\n constructor(\n private nextValue: T,\n /** 为什么是 shallow,因为 pullDeep 会把\n * 上游节点 get 执行完成,让其可以直接拿到缓存值\n */\n private customPull?: () => T\n ) {}\n\n static create<T>(nextValue: T, { customPull, isScope, scope, immediate, ...rest }: SignalOpt<T>) {\n const s = new Signal(nextValue, customPull);\n s.pull = s.customPull || s.DEFAULT_PULL;\n // TODO: 性能优化 0,1ms\n Object.assign(s, rest);\n if (isScope) {\n s.state |= State.IsScope;\n }\n if (scope !== undefined) {\n s.scope = scope;\n }\n return s;\n }\n\n DEFAULT_PULL() {\n return this.nextValue;\n }\n\n /**\n * 递归拉取负责建立以来链\n */\n pullRecurse(shouldLink = true) {\n G.PullingRecurseDeep++;\n const downstream = G.PullingSignal;\n const isScope = this.state & State.IsScope;\n\n if (\n this !== downstream &&\n // 1. 外部支持 link\n shouldLink &&\n // 2. 有下游\n downstream &&\n // 3. 下游是 watcher,不链接非 scope\n ((downstream.state & State.LinkScopeOnly) === 0 || isScope)\n ) {\n Line.link(this, downstream);\n }\n try {\n if (this.version === G.version) {\n return this.value;\n }\n\n // 进 pullShallow 前重置 recEnd,让子 getter 重构订阅链表\n if (this.pull !== this.DEFAULT_PULL) this.recEnd = null;\n this.state |= State.Pulling;\n G.PullingSignal = this;\n this.clean?.();\n this.clean = null;\n let v = this.pull();\n if (isScope && typeof v === 'function') {\n const fn = v;\n this.clean = () => runWithPulling(fn as any, null);\n v = this.value;\n }\n this.value = v;\n // 依赖上游的 版本号\n this.version = G.version;\n // if (this.value !== v) {\n // }\n return this.value;\n } catch (error) {\n console.error('计算属性报错这次不触发,后续状态可能出错', error);\n return this.value;\n } finally {\n // 如果使用了 DEFAULT_PULL,处理一次 set 的取值后,替换回 customPull,如果有的话\n this.pull = this.customPull || this.DEFAULT_PULL;\n pullingPostprocess(this);\n // 本 getter 执行完成时上游 getter 通过 link,完成对下游 recLines 的更新\n const toDel = this.recEnd?.nextRecLine;\n unlinkRecWithScope(toDel);\n G.PullingSignal = downstream;\n G.PullingRecurseDeep--;\n }\n }\n\n pullDeep() {\n /*----------------- 有上游节点,通过 dfs 重新计算结果 -----------------*/\n const signal = this;\n // 优化执行\n if (signal.state & DirtyState) {\n dfs(signal, {\n isUp: true,\n begin: ({ node }) => {\n // console.log('begin', node.id);\n\n /**\n * 不需要检查\n * 1. 正在查\n * 2. 干净\n * 3. 放弃 或者为 scope 节点\n */\n if (node.state & (State.Pulling | State.Dirty) || (node.state & DirtyState) === 0 || node.isDisabled()) {\n return true;\n }\n node.state |= State.Pulling;\n },\n complete: ({ node, notGoDeep: cleanOrDirty, walkedLine }) => {\n const isDirty = node.state & State.Dirty;\n // 1. 非 Dirty 的情况\n let currentClean = cleanOrDirty && !isDirty;\n // 2. 已在处理 Dirty 节点 跳过\n if (cleanOrDirty && node.state & State.Pulling) {\n currentClean = true;\n }\n let noGoSibling = false;\n const last = walkedLine[walkedLine.length - 1];\n const downstream = last?.downstream as Signal;\n // 当前正在检查,生成检查屏障,同时避免重新标记 和\n if (currentClean) {\n }\n // 当前节点需要重新计算\n else if (isDirty) {\n // 优化:源节点变化,直接让下游节点重新计算\n // if (!node.recStart && node.value !== node.nextValue) {\n if (node.pull === node.DEFAULT_PULL && node.value !== node.nextValue) {\n node.markDownStreamsDirty();\n node.state &= ~State.Dirty;\n // 源接节点不需要做 PullingUnknown => Unknown 转换\n node.state &= ~State.Pulling;\n return;\n }\n // 预检数据\n else {\n const prevPulling = G.PullingSignal;\n G.PullingSignal = downstream;\n const prevValue = node.value;\n // 递归转用递归拉取,且不需要重建 link 因为dfs的前提就是上游节点依赖于 本节点\n node.pullRecurse(false);\n // dirty 传播, 由于本节点值已被计算出,因此消除 dirty\n if (prevValue !== node.value) {\n node.markDownStreamsDirty();\n }\n node.state &= ~State.Dirty;\n G.PullingSignal = prevPulling;\n // 立刻返回父节点重新计算\n noGoSibling = true;\n }\n }\n // 没被上游节点标记为 Dirty,说明是干净的\n else if (node.state & State.Unknown) {\n node.state &= ~State.Unknown;\n }\n node.version = G.version;\n pullingPostprocess(node);\n return noGoSibling;\n }\n });\n }\n // 此处要建立执行 pullDeep 的 signal 和 downstream 的连接\n const downstream = G.PullingSignal;\n if (\n this !== downstream &&\n // 2. 有下游\n downstream &&\n // 3. 下游是 watcher 不是 watch,或 是watcher 但 当前是 scope\n ((downstream.state & State.LinkScopeOnly) === 0 || this.state & State.IsScope)\n ) {\n Line.link(this, downstream);\n }\n return this.value;\n }\n\n get v() {\n if (this.isDisabled()) {\n return this.value;\n }\n // 1. 没有上游节点\n // 2. 本节点标记了 Dirty\n // 应该通过递归重新建立\n if (!this.recStart || this.pull === this.DEFAULT_PULL) {\n return this.pullRecurse(true);\n }\n // 有上游节点则采用 dfs 直接遍历,查看情况\n return this.pullDeep();\n }\n\n // pause() {\n // this.state |= State.SelfPaused;\n // }\n\n // resume() {\n // this.state &= ~State.SelfPaused;\n // }\n\n markDownStreamsDirty() {\n let point = this.emitStart;\n while (point != null) {\n const downstream = point.downstream as Signal;\n downstream.state |= State.Dirty;\n downstream.state &= ~State.Unknown;\n point = point.nextEmitLine;\n }\n }\n\n set v(v: T) {\n if (this.isDisabled() || this.nextValue === v) {\n return;\n }\n this.nextValue = v;\n // 手动设值后,采用默认拉取,能拉取到设置的值,拉取完成后在替换回 customPull\n this.pull = this.DEFAULT_PULL;\n G.version++;\n markDeep(this as any);\n }\n\n /** 返回值为 true 表示已处理 */\n runIfDirty() {\n this.state & (State.Unknown | State.Dirty) && this.v;\n }\n\n isDisabled() {\n return (\n // scope 被取消\n (this.scope && this.scope.state & State.ScopeAbort) ||\n // 是 scope 节点,且处于 ready 状态,不需要重复执行\n (this.state & State.IsScope && this.state & ScopeExecuted)\n );\n }\n /** 记录当前 effect 中 clean */\n clean: () => void = null;\n}\n","import { isNatureNumStr } from 'bobe-shared';\nimport { G, rawToProxy } from './global';\nimport { Scheduler } from './schedule';\nimport { runWithPulling } from './scope';\nimport { Signal } from './signal';\nimport { IsStore, Key, Keys, StoreIgnoreKeys } from './type';\nimport { toRaw } from './util';\nimport { batch } from './batch-set';\n\nexport const deepSignal = <T>(target: T, scope: Signal, deep = true) => {\n const isObj = typeof target === 'object' && target !== null;\n // 1. 不是对象则返回原始值\n if (!isObj || target[Keys.Raw]) 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, 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.v;\n }\n\n const wrappedValue = deep ? deepSignal(value, scope) : value;\n s = Signal.create(wrappedValue, {\n scheduler: Scheduler.Sync,\n isScope: false,\n scope\n });\n cells.set(prop, s);\n return s.v;\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 batch.start();\n const success = Reflect.set(obj, prop, value, receiver);\n // 已有对应 Signal,更新 signal 值\n const cell = cells.get(prop);\n if (cell) {\n cell.v = 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 batch.end();\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 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 }, 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, Signal>,\n scope: Signal\n) {\n let s = cells.get(prop);\n if (s) {\n return s.v;\n }\n\n s = Signal.create(null, {\n customPull: () => Reflect.get(obj, prop, receiver),\n scheduler: Scheduler.Sync,\n isScope: false,\n scope\n });\n cells.set(prop, s);\n return s.v;\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] + 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 batch.start();\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 batch.end();\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: Signal, 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 { G } from './global';\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, G.PullingSignal, 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 { G, State } from './global';\nimport { Scheduler } from './schedule';\nimport { dispose } from './scope';\nimport { Signal } from './signal';\nimport { Dispose, Getter, Mix, SignalType, ValueDiff } from './type';\nimport { deepSignal } from './deep-signal';\n\nexport { deepSignal, shareSignal } from './deep-signal';\nexport { Scheduler, registerScheduler } from './schedule';\nexport { TaskQueue } from './task';\nexport { runWithPulling, clean, setPulling, getPulling } from './scope';\nexport * from './store';\nexport * from './type';\nexport { batch } from './batch-set';\nconst DefaultCustomSignalOpt = {\n /** 三种模式\n * 1. auto: 根据值类型自动判断 默认\n * 2. ref: 对任何值使用 {v: xxx} 进行包装\n * 3. proxy: 使用 proxy 进行包装\n */\n mode: 'auto' as SignalType,\n /** 是否深度响应式 */\n deep: true\n};\n\nconst DefaultCustomEffectOpt = {\n scheduler: Scheduler.Sync,\n immediate: true,\n isScope: true\n};\n\nexport type CustomSignalOpt = Partial<typeof DefaultCustomSignalOpt>;\nexport type CustomEffectOpt = Partial<typeof DefaultCustomEffectOpt>;\n\nexport type CreateSignal = {\n <T extends (...args: any[]) => any>(get: T, opt?: CustomSignalOpt): Signal<ReturnType<T>>;\n <T extends object>(value: T, opt?: CustomSignalOpt): T;\n <T = any>(value: T, opt?: CustomSignalOpt): Signal<T>;\n};\n\nexport const $: CreateSignal = (init?: unknown, opt: CustomSignalOpt = {}) => {\n opt = { ...DefaultCustomSignalOpt, ...opt };\n let intiValue: any, customPull: Getter;\n if (typeof init === 'function') {\n intiValue = null;\n customPull = init as Getter;\n } else if (opt.mode !== 'ref' && typeof init === 'object' && init !== null) {\n return deepSignal(init, G.PullingSignal, opt.deep);\n } else {\n intiValue = init;\n }\n const s = Signal.create(intiValue, {\n scheduler: Scheduler.Sync,\n isScope: false,\n customPull\n });\n return s;\n};\n\nexport const effect = (\n customPull: (...args: ValueDiff[]) => void,\n depOrOpt?: Signal<any>[] | CustomEffectOpt,\n opt?: CustomEffectOpt\n) => {\n /*----------------- 自动收集 -----------------*/\n const hasDep = Array.isArray(depOrOpt);\n opt = hasDep ? opt || {} : depOrOpt || {};\n // 立即执行\n if (!hasDep) {\n const s = Signal.create(null, {\n customPull,\n scheduler: Scheduler.Sync,\n isScope: true,\n ...opt\n });\n\n s.v;\n const bound = dispose.bind(s);\n bound.ins = s;\n return bound as Dispose;\n }\n\n /*----------------- 指定依赖, watcher -----------------*/\n let mounted = false;\n const deps = depOrOpt as Signal[];\n const immediate = deps.length === 0 ? true : (opt.immediate ?? true);\n const vs: ValueDiff[] = Array.from({ length: deps.length }, () => ({ old: null, val: null }));\n const s = Signal.create(null, {\n customPull() {\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 s.state |= State.LinkScopeOnly;\n customPull(...vs);\n s.state &= ~State.LinkScopeOnly;\n }\n mounted = true;\n },\n scheduler: Scheduler.Sync,\n isScope: true,\n ...opt\n });\n\n s.v;\n const bound = dispose.bind(s);\n bound.ins = s;\n return bound as Dispose;\n};\n\nexport const scope = (customPull: () => void) => {\n const s = Signal.create(null, {\n customPull,\n scheduler: Scheduler.Sync,\n isScope: true\n });\n\n s.v;\n s.state |= State.ScopeReady;\n\n const bound = dispose.bind(s);\n bound.ins = s;\n return bound as Dispose;\n};\n\n/**\n * 数据变化时,自定义 触发订阅函数的时机\n * @param {CustomSignalOpt} opt 配置如下:\n * @prop scheduler: (runIfDirty, effect) => void 执行 runIfDirty 定制触发 effect 时机\n * @prop scope: 用于统一释放 effect link 的作用域 默认是 defaultScope 可以全局获取\n */\nexport const customEffect = (opt?: CustomEffectOpt) => {\n return ((init: any, innerOpt: any = {}) => {\n return effect(init, { ...opt, ...innerOpt });\n }) as typeof effect;\n};\n\nexport const isSignal = (value: unknown): value is Signal => {\n return value instanceof Signal;\n};\n\nexport const isScope = (value: any): boolean => {\n return value instanceof Signal;\n};\n"],"names":["Event","State","__spreadValues","Keys","Queue","downstream","isNatureNumStr","s","bound"],"mappings":"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"}
|
package/dist/aoye.esm.js
CHANGED
|
@@ -1531,5 +1531,5 @@ const isScope = (value) => {
|
|
|
1531
1531
|
return value instanceof Signal;
|
|
1532
1532
|
};
|
|
1533
1533
|
|
|
1534
|
-
export { $, IsStore, Keys, Scheduler, Store, StoreIgnoreKeys, TaskQueue, batch, clean, customEffect, effect, getPulling, isScope, isSignal, registerScheduler, runWithPulling, scope, setPulling, shareSignal };
|
|
1534
|
+
export { $, IsStore, Keys, Scheduler, Store, StoreIgnoreKeys, TaskQueue, batch, clean, customEffect, deepSignal, effect, getPulling, isScope, isSignal, registerScheduler, runWithPulling, scope, setPulling, shareSignal };
|
|
1535
1535
|
//# sourceMappingURL=aoye.esm.js.map
|