import { AnyExpression, Expression } from '../../expressions' import { ConstraintConfig } from '../../functions' import { BooleanType, Type, type } from '../index' import { BigintArg } from '../math' export const ARRAY = (of: O) => type`${of}[]` as ArrayType export type ArrayArg = ArrayType['argument'] export interface ArrayType extends Type<'ARRAY', R, T['output']> { expression: ArrayExpression argument: Expression> | this['input'] | Expression[] | Expression required(conf?: ConstraintConfig): ArrayType } export interface ArrayExpression extends AnyExpression> { concat(arr: ArrayArg): Expression> overlap (arg: ArrayArg): Expression> unshift (arg: T['argument']): Expression> push (arg: T['argument']): Expression> contain (arg: ArrayArg): Expression> contained (arg: ArrayArg): Expression> item(l: BigintArg): Expression item(l: BigintArg, u: BigintArg): Expression> item(l: BigintArg, u?: BigintArg): Expression> | Expression }