import { LoggingOptions } from "../Logging.js"; import { LinkedList, LinkedItem } from "../util/LinkedList.js"; import { Priority, Mode } from "../Enums.js"; import { ReactivityOptions } from "../Options.js"; import { RxObject } from "../core/Mvcc.js"; export type Script = (this: E, o: E, basis: () => void) => void; export type ScriptAsync = (this: E, o: E, basis: () => Promise) => Promise; export type Handler = (o: E) => R; export declare function declare(driver: ReactiveTreeNodeDriver, body?: Script, bodyTask?: ScriptAsync, key?: string, mode?: Mode, unmounted?: boolean, preparation?: Script, preparationTask?: ScriptAsync, mounting?: Script, finalization?: Script, signalArgs?: unknown, basis?: ReactiveTreeNodeDecl): ReactiveTreeNode; export declare function declare(driver: ReactiveTreeNodeDriver, declaration?: ReactiveTreeNodeDecl): ReactiveTreeNode; export declare function declare(driver: ReactiveTreeNodeDriver, bodyOrDeclaration?: Script | ReactiveTreeNodeDecl, bodyTask?: ScriptAsync, key?: string, mode?: Mode, unmounted?: boolean, preparation?: Script, preparationTask?: ScriptAsync, mounting?: Script, finalization?: Script, signalArgs?: unknown, basis?: ReactiveTreeNodeDecl): ReactiveTreeNode; export declare function setBasis(declaration?: ReactiveTreeNodeDecl, basis?: ReactiveTreeNodeDecl): ReactiveTreeNodeDecl; export declare function launch(func: (...args: any[]) => T, ...args: any[]): T; export declare abstract class ReactiveTreeNode extends LinkedItem> { static readonly shortFrameDuration = 16; static readonly longFrameDuration = 300; static frameDuration: number; static currentBodyPriority: Priority; abstract readonly key: string; abstract readonly driver: ReactiveTreeNodeDriver; abstract readonly declaration: Readonly>; abstract readonly level: number; abstract readonly owner: ReactiveTreeNode; abstract element: E; abstract readonly host: ReactiveTreeNode; abstract readonly children: LinkedList; 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): string; abstract has(mode: Mode): boolean; abstract hasAny(mode: Mode): boolean; abstract configureReactivity(options: Partial): ReactivityOptions; static get current(): ReactiveTreeNode; static get isFirstBodyBuild(): boolean; static rebuildBody(node: ReactiveTreeNode, signalArgs: unknown): void; static launchFinalization(node: ReactiveTreeNode): void; static launchNestedNodesThenDo(action: (error: unknown) => void): void; static markAsMounted(node: ReactiveTreeNode, yes: boolean): void; lookupTreeNodeByUri(uri: string): ReactiveTreeNode | undefined; static findMatchingHost(node: ReactiveTreeNode, match: Handler, boolean>): ReactiveTreeNode | undefined; static findMatchingPrevSibling(node: ReactiveTreeNode, match: Handler, boolean>): ReactiveTreeNode | undefined; static forEachChildRecursively(node: ReactiveTreeNode, action: Handler>): void; static getDefaultLoggingOptions(): LoggingOptions | undefined; static setDefaultLoggingOptions(logging?: LoggingOptions): void; } export type ReactiveTreeNodeDecl = { body?: Script; bodyTask?: ScriptAsync; key?: string; mode?: Mode; unmounted?: boolean; preparation?: Script; preparationTask?: ScriptAsync; mounting?: Script; finalization?: Script; signalArgs?: unknown; basis?: ReactiveTreeNodeDecl; }; export type ReactiveTreeNodeDriver = { readonly name: string; readonly isPartition: boolean; readonly initialize?: Handler; create(node: ReactiveTreeNode): E; runPreparation(node: ReactiveTreeNode): void; runFinalization(node: ReactiveTreeNode, isLeader: boolean): boolean; runMount(node: ReactiveTreeNode): void; rebuildBody(node: ReactiveTreeNode): void | Promise; declareChild(ownerNode: ReactiveTreeNode, childDriver: ReactiveTreeNodeDriver, childDeclaration?: ReactiveTreeNodeDecl, childBasis?: ReactiveTreeNodeDecl): LinkedItem | undefined; provideHost(node: ReactiveTreeNode): ReactiveTreeNode; }; export type ReactiveTreeNodeContext = { variable: ReactiveTreeVariable; value: T; }; export declare abstract class BaseDriver implements ReactiveTreeNodeDriver { readonly name: string; readonly isPartition: boolean; readonly initialize?: Handler | undefined; constructor(name: string, isPartition: boolean, initialize?: Handler | undefined); abstract create(node: ReactiveTreeNode): E; runPreparation(node: ReactiveTreeNode): void | Promise; runFinalization(node: ReactiveTreeNode, isLeader: boolean): boolean; runMount(node: ReactiveTreeNode): void; rebuildBody(node: ReactiveTreeNode): void | Promise; declareChild(ownerNode: ReactiveTreeNode, childDriver: ReactiveTreeNodeDriver, childDeclaration?: ReactiveTreeNodeDecl, childBasis?: ReactiveTreeNodeDecl): LinkedItem | undefined; provideHost(node: ReactiveTreeNode): ReactiveTreeNode; } export declare class ReactiveTreeVariable { readonly hint: string; readonly defaultValue: T | undefined; constructor(hint: string, 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): Mode; declare class ReactiveTreeNodeContext$ extends RxObject implements ReactiveTreeNodeContext { next: ReactiveTreeNodeContext$ | undefined; variable: ReactiveTreeVariable; value: T; constructor(variable: ReactiveTreeVariable, value: T); } declare class ReactiveTreeNode$ extends ReactiveTreeNode { static logging: LoggingOptions | undefined; static grandNodeCount: number; static disposableNodeCount: number; readonly key: string; readonly driver: ReactiveTreeNodeDriver; declaration: ReactiveTreeNodeDecl; readonly level: number; readonly owner: ReactiveTreeNode$; readonly element: E; host: ReactiveTreeNode; readonly children: LinkedList; stamp: number; outer: ReactiveTreeNode$; context: ReactiveTreeNodeContext$ | undefined; numerator: number; priority: Priority; childrenShuffling: boolean; constructor(key: string, driver: ReactiveTreeNodeDriver, declaration: Readonly>, owner: ReactiveTreeNode$ | undefined); getUri(relativeTo?: ReactiveTreeNode): string; get strictOrder(): boolean; set strictOrder(value: boolean); get isMoved(): boolean; has(mode: Mode): boolean; hasAny(mode: Mode): boolean; body(_signalArgs: unknown): void; configureReactivity(options: Partial): ReactivityOptions; static get node(): ReactiveTreeNode$; static tryUseTreeVariableValue(variable: ReactiveTreeVariable): T | undefined; static useTreeVariableValue(variable: ReactiveTreeVariable): T; static setTreeVariableValue(variable: ReactiveTreeVariable, value: T | undefined): void; } export declare function signalsAreEqual(a1: any, a2: any): boolean; export {};