interface BaseNode { readonly kind: string; readonly path?: string; } export interface ValueNode extends BaseNode { readonly kind: 'value'; readonly transform: 'string' | 'number' | 'integer' | 'boolean'; } export type ASTNode = ValueNode | ObjectNode | ArrayNode; export interface ObjectNode extends BaseNode { readonly kind: 'object'; readonly fields: Readonly>; } export interface ArrayNode extends BaseNode { readonly kind: 'array'; readonly item: ASTNode; } export interface Field { readonly toAST: () => ASTNode; readonly __type?: T; } type InferShape>> = { [K in keyof T]: T[K] extends Field ? U : never; }; export declare const toString: (path?: string) => Field; export declare const toNumber: (path?: string) => Field; export declare const toInteger: (path?: string) => Field; export declare const toBoolean: (path?: string) => Field; export declare function toObject>>(fields: T): Field>; export declare function toObject>>(path: string, fields: T): Field>; export declare function toArray(field: Field): Field; export declare function toArray(path: string, field: Field): Field; type Executor = (data: unknown) => T; export declare const compile: (field: Field) => Executor; export {}; //# sourceMappingURL=field-dsl.d.ts.map