import type { ExtensionId } from '../../json-crdt-extensions'; import type { MvalNode } from '../../json-crdt-extensions/mval/MvalNode'; import type { PeritextNode, QuillDeltaNode, ProseMirrorNode } from '../../json-crdt-extensions'; import type { nodes as builder } from '../../json-crdt-patch'; import type { ExtNode } from '../extensions/ExtNode'; import type * as nodes from '../nodes'; export type SchemaToJsonNode = S extends builder.str ? nodes.StrNode : S extends builder.bin ? nodes.BinNode : S extends builder.con ? nodes.ConNode : S extends builder.val ? nodes.ValNode> : S extends builder.vec ? nodes.VecNode<{ [K in keyof T]: SchemaToJsonNode; }> : S extends builder.obj ? nodes.ObjNode<{ [K in keyof T]: SchemaToJsonNode; }> : S extends builder.arr ? nodes.ArrNode> : S extends builder.ext ? ExtensionNode : S extends builder.ext ? ExtensionNode : S extends builder.ext ? ExtensionNode : S extends builder.ext ? ExtensionNode : nodes.JsonNode; export type ExtensionNode> = nodes.VecNode>; export type ExtensionVecData> = { __BRAND__: 'ExtVecData'; } & [ header: nodes.ConNode, data: EDataNode ]; export type VecNodeExtensionData = N extends nodes.VecNode ? VecNodeExtensionData : N extends ExtensionVecData ? EDataNode : undefined; export type JsonNodeToSchema = N extends nodes.StrNode ? builder.str : N extends nodes.BinNode ? builder.bin : N extends nodes.ConNode ? builder.con : N extends nodes.ValNode ? builder.val> : N extends nodes.VecNode ? T extends ExtensionVecData ? EDataNode extends PeritextNode ? builder.ext : EDataNode extends QuillDeltaNode ? builder.ext : EDataNode extends ProseMirrorNode ? builder.ext : EDataNode extends MvalNode ? builder.ext : builder.ext : builder.vec<{ [K in keyof T]: JsonNodeToSchema; }> : N extends nodes.ObjNode ? builder.obj<{ [K in keyof T]: JsonNodeToSchema; }> : N extends nodes.ArrNode ? builder.arr> : builder.con;