UNPKG

reactronic

Version:

Reactronic - Transactional Reactive State Management

138 lines (137 loc) 8.09 kB
import { LoggingOptions } from "../Logging.js"; import { ReconciliationList, ReconciliationListReader, LinkedItem } from "../util/ReconciliationList.js"; import { Priority, Mode } from "../Enums.js"; import { ReactivityOptions } from "../Options.js"; import { SxObject } from "../core/Mvcc.js"; export type Script<E> = (o: E, basis: () => void) => void; export type ScriptAsync<E> = (o: E, basis: () => Promise<void>) => Promise<void>; export type Handler<E = unknown, R = void> = (o: E) => R; export declare function declare<E = void>(driver: ReactiveTreeNodeDriver<E>, script?: Script<E>, scriptAsync?: ScriptAsync<E>, key?: string, mode?: Mode, preparation?: Script<E>, preparationAsync?: ScriptAsync<E>, finalization?: Script<E>, triggers?: unknown, basis?: ReactiveTreeNodeDecl<E>): ReactiveTreeNode<E>; export declare function declare<E = void>(driver: ReactiveTreeNodeDriver<E>, declaration?: ReactiveTreeNodeDecl<E>): ReactiveTreeNode<E>; export declare function declare<E = void>(driver: ReactiveTreeNodeDriver<E>, scriptOrDeclaration?: Script<E> | ReactiveTreeNodeDecl<E>, scriptAsync?: ScriptAsync<E>, key?: string, mode?: Mode, preparation?: Script<E>, preparationAsync?: ScriptAsync<E>, finalization?: Script<E>, triggers?: unknown, basis?: ReactiveTreeNodeDecl<E>): ReactiveTreeNode<E>; export declare function derivative<E = void>(declaration?: ReactiveTreeNodeDecl<E>, basis?: ReactiveTreeNodeDecl<E>): ReactiveTreeNodeDecl<E>; export declare function launch<T>(node: ReactiveTreeNode<T>, triggers?: unknown): ReactiveTreeNode<T>; export declare abstract class ReactiveTreeNode<E = unknown> { static readonly shortFrameDuration = 16; static readonly longFrameDuration = 300; static frameDuration: number; static currentScriptPriority: Priority; abstract readonly key: string; abstract readonly driver: ReactiveTreeNodeDriver<E>; abstract readonly declaration: Readonly<ReactiveTreeNodeDecl<E>>; abstract readonly level: number; abstract readonly owner: ReactiveTreeNode; abstract element: E; abstract readonly host: ReactiveTreeNode; abstract readonly children: ReconciliationListReader<ReactiveTreeNode>; abstract readonly slot: LinkedItem<ReactiveTreeNode<E>> | undefined; abstract readonly stamp: number; abstract readonly outer: ReactiveTreeNode; abstract readonly context: ReactiveTreeNodeContext | undefined; abstract priority?: Priority; abstract childrenShuffling: boolean; abstract strictOrder: boolean; abstract getUri(relativeTo?: ReactiveTreeNode<any>): string; abstract has(mode: Mode): boolean; abstract configureReactivity(options: Partial<ReactivityOptions>): ReactivityOptions; static get current(): ReactiveTreeNode; static get isFirstScriptRun(): boolean; static launchScript(node: ReactiveTreeNode<any>, triggers: unknown): void; static launchFinalization(node: ReactiveTreeNode<any>): void; static launchNestedNodesThenDo(action: (error: unknown) => void): void; static markAsMounted(node: ReactiveTreeNode<any>, yes: boolean): void; lookupTreeNodeByUri<E = unknown>(uri: string): ReactiveTreeNode<E> | undefined; static findMatchingHost<E = unknown, R = unknown>(node: ReactiveTreeNode<E>, match: Handler<ReactiveTreeNode<E>, boolean>): ReactiveTreeNode<R> | undefined; static findMatchingPrevSibling<E = unknown, R = unknown>(node: ReactiveTreeNode<E>, match: Handler<ReactiveTreeNode<E>, boolean>): ReactiveTreeNode<R> | undefined; static forEachChildRecursively<E = unknown>(node: ReactiveTreeNode<E>, action: Handler<ReactiveTreeNode<E>>): void; static getDefaultLoggingOptions(): LoggingOptions | undefined; static setDefaultLoggingOptions(logging?: LoggingOptions): void; } export type ReactiveTreeNodeDecl<E = unknown> = { script?: Script<E>; scriptAsync?: ScriptAsync<E>; key?: string; mode?: Mode; preparation?: Script<E>; preparationAsync?: ScriptAsync<E>; finalization?: Script<E>; triggers?: unknown; basis?: ReactiveTreeNodeDecl<E>; }; export type ReactiveTreeNodeDriver<E = unknown> = { readonly name: string; readonly isPartition: boolean; readonly initialize?: Handler<E>; create(node: ReactiveTreeNode<E>): E; runPreparation(node: ReactiveTreeNode<E>): void; runFinalization(node: ReactiveTreeNode<E>, isLeader: boolean): boolean; runMount(node: ReactiveTreeNode<E>): void; runScript(node: ReactiveTreeNode<E>): void | Promise<void>; declareChild(ownerNode: ReactiveTreeNode<E>, childDriver: ReactiveTreeNodeDriver<any>, childDeclaration?: ReactiveTreeNodeDecl<any>, childBasis?: ReactiveTreeNodeDecl<any>): LinkedItem<ReactiveTreeNode> | undefined; provideHost(node: ReactiveTreeNode<E>): ReactiveTreeNode<E>; }; export type ReactiveTreeNodeContext<T extends Object = Object> = { value: T; }; export declare abstract class BaseDriver<E = unknown> implements ReactiveTreeNodeDriver<E> { readonly name: string; readonly isPartition: boolean; readonly initialize?: Handler<E> | undefined; constructor(name: string, isPartition: boolean, initialize?: Handler<E> | undefined); abstract create(node: ReactiveTreeNode<E>): E; runPreparation(node: ReactiveTreeNode<E>): void | Promise<void>; runFinalization(node: ReactiveTreeNode<E>, isLeader: boolean): boolean; runMount(node: ReactiveTreeNode<E>): void; runScript(node: ReactiveTreeNode<E>): void | Promise<void>; declareChild(ownerNode: ReactiveTreeNode<E>, childDriver: ReactiveTreeNodeDriver<any>, childDeclaration?: ReactiveTreeNodeDecl<any>, childBasis?: ReactiveTreeNodeDecl<any>): LinkedItem<ReactiveTreeNode> | undefined; provideHost(node: ReactiveTreeNode<E>): ReactiveTreeNode<E>; } export declare class ReactiveTreeVariable<T extends Object = Object> { readonly defaultValue: T | undefined; constructor(defaultValue?: T); set value(value: T); get value(): T; get valueOrUndefined(): T | undefined; } export declare function generateKey(owner?: ReactiveTreeNode$): string; export declare function getModeUsingBasisChain(declaration?: ReactiveTreeNodeDecl<any>): Mode; declare class ReactiveTreeNodeContext$<T extends Object = Object> extends SxObject implements ReactiveTreeNodeContext<T> { next: ReactiveTreeNodeContext$<object> | undefined; variable: ReactiveTreeVariable<T>; value: T; constructor(variable: ReactiveTreeVariable<T>, value: T); } declare class ReactiveTreeNode$<E = unknown> extends ReactiveTreeNode<E> { static logging: LoggingOptions | undefined; static grandNodeCount: number; static disposableNodeCount: number; readonly key: string; readonly driver: ReactiveTreeNodeDriver<E>; declaration: ReactiveTreeNodeDecl<E>; readonly level: number; readonly owner: ReactiveTreeNode$; readonly element: E; host: ReactiveTreeNode$; readonly children: ReconciliationList<ReactiveTreeNode$>; slot: LinkedItem<ReactiveTreeNode$<E>> | undefined; stamp: number; outer: ReactiveTreeNode$; context: ReactiveTreeNodeContext$<any> | undefined; numerator: number; priority: Priority; childrenShuffling: boolean; constructor(key: string, driver: ReactiveTreeNodeDriver<E>, declaration: Readonly<ReactiveTreeNodeDecl<E>>, owner: ReactiveTreeNode$ | undefined); getUri(relativeTo?: ReactiveTreeNode<any>): string; get strictOrder(): boolean; set strictOrder(value: boolean); get isMoved(): boolean; has(mode: Mode): boolean; script(_triggers: unknown): void; configureReactivity(options: Partial<ReactivityOptions>): ReactivityOptions; static get nodeSlot(): LinkedItem<ReactiveTreeNode$>; static tryUseTreeVariableValue<T extends Object>(variable: ReactiveTreeVariable<T>): T | undefined; static useTreeVariableValue<T extends Object>(variable: ReactiveTreeVariable<T>): T; static setTreeVariableValue<T extends Object>(variable: ReactiveTreeVariable<T>, value: T | undefined): void; } export declare function signalsAreEqual(a1: any, a2: any): boolean; export {};