import * as t from '@rekajs/types'; import { IArraySplice, IArrayUpdate, IObjectDidChange } from 'mobx'; type Location = { parent: t.Type; path: Array; }; export type MobxChangePayload = IObjectDidChange | IArraySplice | IArrayUpdate; export type ObserverAddPayload = { type: t.Type; }; export type ObserverDiposePayload = { type: t.Type; }; export type ObserverChangePayload = MobxChangePayload & Location; export type ObserverHooks = { onAdd: (payload: ObserverAddPayload) => void; onChange: (payload: ObserverChangePayload) => void; onDispose: (payload: ObserverDiposePayload) => void; onNormalize: (changeset: Changeset) => void; }; export type ObserverOptions = { id?: string; batch: boolean; shouldIgnoreObservable: (parent: t.Type, key: string, value: any) => boolean; hooks: Partial; resolveProp: t.Tree['resolveProp']; }; export type ChangeOpts = {}> = { source?: any; } & O; export type Changeset = {}> = { changes: ObserverChangePayload[]; disposed: t.Type[]; added: t.Type[]; } & ChangeOpts; export type ChangesetListener = {}> = (changeset: Changeset) => void; export declare class Observer = {}> extends t.Tree { readonly root: T; private rootDisposer; private valueToTraversalInfo; private idToType; private opts; private typeToDisposer; private markedForDisposal; private isDisposing; private isMutating; private changesetListeners; private uncommittedValues; private changeset; constructor(root: T, opts?: Partial); private whileDisposing; private disposeTypes; private setRoot; resolveProp(node: t.Type, name: string): any; getTypeFromId(id: string, expectedType?: t.TypeConstructor): T; listenToChangeset(subscriber: ChangesetListener): () => void; private setupChild; private setupType; private setupArray; private setupMap; private updateChangeset; private handleOnAddType; private handleOnDisposeType; private handleOnChange; private isParentValueUncommitted; private notifyChangesetListeners; private getValueTraversalInfo; /** * Get the nearest parent Type node (and any additional path to traverse) in order to reach a given value * For example: * { * type: "A", * children: [ * { * type: "B" * } * ] * * The location of "B" is { * parent: "A", * path: ["children", 0] * } * } */ private getValueLocation; getNodeLocation(node: t.Type): Location; getParentNode(node: t.Type, expectedParentType?: t.TypeConstructor): T | null; getNodePath(node: t.Type): (string | number)[] | null; getNodePathStr(node: t.Type, nearest?: boolean): any; change(mutation: () => C, opts?: ChangeOpts): C; dispose(): void; } export {};