/** * S StoreType; // Append root to the first value type V you are given * G StateRefStore; // Add "value" to the ending point with “root” unattached. * T StateRefStore>; // Attach a "value" to the ending point in the state where the root exists. */ export type Renew = (store: G, isFirst: boolean) => boolean | AbortSignal | void; export type Run = null | ((isFirst?: boolean) => boolean | AbortSignal | void); export type StoreType = { root: V; }; export type WithRoot = { root: unknown; } & { [key: string | symbol]: unknown; }; export type StateRefStore = S extends object ? { [K in keyof S]: StateRefStore; } & { value: S; } : { value: S; }; export type Watch = (renew?: Renew>, userOption?: { cache?: boolean; editable?: boolean; }) => StateRefStore; export type RunInfo = { value: A; getNextValue: () => A; key: string; primitiveSetter?: (newValue: A) => void; }; export type RenderListSub = Map>; export type StoreRenderList = Map>; export type Copyable = { [K in keyof T]: Copyable; } & { writeCopy: (v: V) => Root; }; export type StateRefsTuple[]> = { -readonly [K in keyof W]: W[K] extends Watch ? StateRefStore : never; }; export type CombinedValue[]> = { [K in keyof W]: W[K] extends Watch ? T : never; }; export type ManualSyncStore = { watch: Watch; updateRef: StateRefStore; sync: () => void; };