import { BaseNode, Node, ParentsOf } from './helpers'; import * as a from './assert'; type NodeKeys = Exclude; export type DefinitionIndex = T extends true ? number | [builderIndex: number | false, visitIndex: number | false] : false | [builderIndex: number | false, visitIndex: false]; export type DefinitionField = { default?: V | ((node: N) => V); validate: a.ValidateFn>; type?: string; }; export type Definition = { indices: { [K in NodeKeys]: DefinitionIndex; }; fields: { [F in NodeKeys]: DefinitionField; }; finalValidate?: a.ValidateFn; insertionValidate?: (node: N, key: string | number, listKey: string | null, parent: ParentsOf) => string | null; }; export type Definitions = { [N in Node as `${N['type']}`]: Definition; }; export declare const definitions: Definitions; export declare const getFieldsOf: ({ indices }: Definition, type: "builder" | "visitor") => string[]; export declare const visitorKeys: Readonly>; export {};