import { SquiggleDeserializationVisitor, SquiggleSerializationVisitor } from "../serialization/squiggle.js"; import { ASTNode, LocationRange } from "./types.js"; type RequiredSerializedNodeField = T extends string | number | boolean ? T : T extends { kind: ASTNode["kind"]; location: LocationRange; } ? number : T extends [infer E1, infer E2] ? [SerializedNodeField, SerializedNodeField] : T extends [infer E1, infer E2][] ? [SerializedNodeField, SerializedNodeField][] : T extends (infer E)[] ? SerializedNodeField[] : T extends Record ? Record> : never; type SerializedNodeField = T extends null ? RequiredSerializedNodeField> | null : RequiredSerializedNodeField; type KindNodeToSerializedNode = Pick & { [K in keyof Node as Exclude]: SerializedNodeField; }; type Distribute = U extends ASTNode ? KindNodeToSerializedNode : never; export type SerializedASTNode = Distribute; export declare function serializeAstNode(node: ASTNode, visit: SquiggleSerializationVisitor): SerializedASTNode; export declare function deserializeAstNode(node: SerializedASTNode, visit: SquiggleDeserializationVisitor): ASTNode; export {}; //# sourceMappingURL=serialize.d.ts.map