import { sortAndCompactPaths } from "../reactive-dependencies.ts"; import type { IMemorySpaceAddress } from "../storage/interface.ts"; import { type SchedulerWriteIndex } from "./scheduling-writes.ts"; import type { Action, ReactivityLog } from "./types.ts"; export interface DependencyUpdateState { readonly writeIndex: SchedulerWriteIndex; readonly dependencies: WeakMap; } export function setSchedulerDependencies( state: DependencyUpdateState, action: Action, log: ReactivityLog, ): { reads: IMemorySpaceAddress[]; shallowReads: IMemorySpaceAddress[]; log: ReactivityLog; } { const reads = sortAndCompactPaths(log.reads); const shallowReads = sortAndCompactPaths(log.shallowReads, false); const schedulingLog: ReactivityLog = { reads, shallowReads, writes: state.writeIndex.getSchedulingWrites(action) ?? [], }; state.dependencies.set(action, schedulingLog); return { reads, shallowReads, log: schedulingLog }; }