import type { PeritextNode, PeritextApi, QuillDeltaNode, QuillDeltaApi, ProseMirrorNode, ProseMirrorApi } from '../../../json-crdt-extensions'; import type * as types from '../../nodes'; import type * as nodes from './nodes'; import type { Path } from '@jsonjoy.com/json-pointer'; export type ApiPath = string | number | Path | undefined; export type JsonNodeApi = N extends types.ConNode ? nodes.ConApi : N extends types.RootNode ? nodes.ValApi : N extends types.ValNode ? nodes.ValApi : N extends types.StrNode ? nodes.StrApi : N extends types.BinNode ? nodes.BinApi : N extends types.ArrNode ? nodes.ArrApi : N extends types.ObjNode ? nodes.ObjApi : N extends types.VecNode ? nodes.VecApi : N extends PeritextNode ? PeritextApi : N extends QuillDeltaNode ? QuillDeltaApi : N extends ProseMirrorNode ? ProseMirrorApi : never; export type ApiOperation = ApiOperationAdd | ApiOperationReplace | ApiOperationMerge | ApiOperationRemove; export type ApiOperationBase = [type: Type, path: ApiPath]; export type ApiOperationBaseWithValue = [...ApiOperationBase, value: Value]; export type ApiOperationAdd = ApiOperationBaseWithValue<'add'>; export type ApiOperationReplace = ApiOperationBaseWithValue<'replace'>; export type ApiOperationMerge = ApiOperationBaseWithValue<'merge'>; export type ApiOperationRemove = [...ApiOperationBase<'remove'>, length?: number];