import { ArrayArg, IntegerArg, CharacterArg, TextType } from '../' import { AnyExpression, Expression } from '../../expressions' import { ConstraintConfig } from '../../functions' import { Type, type } from '../index' export const JSON = () => type`JSON` as JSONType export type JSONArg = JSONType['argument'] export interface JSONType extends Type<'JSON', R, T> { expression: JSONExpression argument: Expression> | this['input'] required(conf?: ConstraintConfig): JSONType } export interface JSONExpression = Record, R extends boolean = boolean> extends AnyExpression> { concat(arg: CharacterArg): Expression> get (item: K): Expression> get (item: IntegerArg | CharacterArg): Expression> getText (item: IntegerArg | CharacterArg): Expression> getByPath (path: ArrayArg): Expression> getTextByPath (path: ArrayArg): Expression> }