import type { JsonNodeApi } from './types'; import type * as nodes from '../../nodes'; import type { PeritextNode, QuillDeltaNode } from '../../../json-crdt-extensions'; import type { VecNodeExtensionData } from '../../schema/types'; import type { PathStep } from '@jsonjoy.com/json-pointer'; import type { NodeApi } from '..'; export interface ProxyNode { $: JsonNodeApi; } export type ProxyNodeCon> = ProxyNode; export type ProxyNodeVal> = ProxyNode & { _: JsonNodeToProxyNode>; }; export type ProxyNodeVec> = ProxyNode & { [K in keyof nodes.JsonNodeView]: JsonNodeToProxyNode[K]>; } & { /** @todo Rename to `asExt()`. */ toExt: () => JsonNodeApi>; }; export type ProxyNodeObj> = ProxyNode & { [K in keyof nodes.JsonNodeView]: JsonNodeToProxyNode<(N extends nodes.ObjNode ? M : never)[K]>; }; export type ProxyNodeStr = ProxyNode; export type ProxyNodeBin = ProxyNode; export type ProxyNodeArr> = ProxyNode & Record ? E : never>>; export type JsonNodeToProxyNode = N extends nodes.ConNode ? ProxyNodeCon : N extends nodes.RootNode ? ProxyNodeVal : N extends nodes.ValNode ? ProxyNodeVal : N extends nodes.StrNode ? ProxyNodeStr : N extends nodes.BinNode ? ProxyNodeBin : N extends nodes.ArrNode ? ProxyNodeArr : N extends nodes.ObjNode ? ProxyNodeObj : N extends nodes.VecNode ? ProxyNodeVec : N extends PeritextNode ? ProxyNode : N extends QuillDeltaNode ? ProxyNode : never; export type JsonNodeToProxyPathNodeEnd = { $?: JsonNodeApi; }; export type JsonNodeToProxyPathNode = 0 extends 1 & N ? ProxyPathNode<{ $?: NodeApi ? N : nodes.JsonNode>; }> : N extends nodes.ArrNode ? JsonNodeToProxyPathNode[] & JsonNodeToProxyPathNodeEnd : N extends nodes.ObjNode ? { [K in keyof Obj]: JsonNodeToProxyPathNode; } & JsonNodeToProxyPathNodeEnd : N extends nodes.VecNode ? { [K in keyof Tuple]: JsonNodeToProxyPathNode; } & JsonNodeToProxyPathNodeEnd : N extends nodes.RootNode ? JsonNodeToProxyPathNode : nodes.JsonNode extends N ? ProxyPathNode<{ $?: NodeApi ? N : nodes.JsonNode>; }> : JsonNodeToProxyPathNodeEnd; export type ProxyPathEndMethod = (path: PathStep[], ...args: Args) => Return; export type ProxyPathUserEndMethod> = M extends ProxyPathEndMethod ? (...args: Args) => Return : never; export type ProxyPathNodeStep = Api & Record; export type ProxyPathNode = ProxyPathNodeStep>>>>>>>; export declare const proxy: >(fn: EndMethod, path?: PathStep[]) => ProxyPathNode>; export declare const proxy$: , Sentinel extends string>(fn: EndMethod, sentinel: Sentinel, path?: PathStep[]) => ProxyPathNode<{ [k in Sentinel]: ReturnType; }>;