import { AnyZodObject } from 'zod'; import { Query, EmptyObject, CreateData } from 'pqb'; import { InstanceToZod } from 'porm-schema-to-zod'; declare type FactoryOptions = { sequence?: number; sequenceDistance?: number; maxTextLength?: number; }; declare type metaKey = typeof metaKey; declare const metaKey: unique symbol; declare type Result> = EmptyObject extends T[metaKey]['pick'] ? Omitted : Pick; declare type BuildArg = { [K in keyof T[metaKey]['type']]?: T[metaKey]['type'][K] | ((sequence: number) => T[metaKey]['type'][K]); } & Record; declare type BuildResult> = Result extends Data ? T[metaKey]['type'] : T[metaKey]['type'] & { [K in keyof Data]: Data[K] extends () => void ? ReturnType : Data[K]; }>; declare type CreateArg = CreateData & { inputType: { [K in keyof T['model']['type']]?: T['model']['type'][K] | ((sequence: number) => T['model']['type'][K]); }; }>; declare type CreateResult = Result; declare class TestFactory { model: Q; schema: Schema; private readonly data; sequence: number; private readonly omitValues; private readonly pickValues; [metaKey]: { type: Type; omit: EmptyObject; pick: EmptyObject; }; constructor(model: Q, schema: Schema, data?: Record, options?: FactoryOptions); set Meta['type'][K]); } & Record>(this: T & { [metaKey]: Meta; }, data: Data): T & { [metaKey]: Meta & { type: Data; }; }; omit(this: T, keys: Keys): T & { [metaKey]: T[metaKey] & { omit: Keys; }; }; pick(this: T, keys: Keys): T & { [metaKey]: T[metaKey] & { pick: Keys; }; }; build>(this: T, data?: Data): BuildResult; buildList>(this: T, qty: number, data?: Data): BuildResult[]; create>(this: T, data?: Data): Promise>; createList>(this: T, qty: number, data?: Data): Promise[]>; extend(this: T): new () => TestFactory; } declare const createFactory: (model: T, options?: FactoryOptions) => TestFactory, T["type"]>; export { TestFactory, createFactory };