@prisma-extensions/factory
Version:
Factory enables you to easily create and build database records for testing or seeding purposes.
31 lines (25 loc) • 973 B
text/typescript
import type { CreateOperation, OptionalKeys, RequiredKeys } from '@prisma-extensions/core'
import type { Prisma } from '@prisma/client'
export type ArgReturnType<T> = T extends () => infer R ? R : T
export type ExtractData<Model, Operation extends CreateOperation = 'create'> = Prisma.Args<
Model,
Operation
>['data']
export type TransformKeys<
Model,
Data extends Prisma.Args<Model, Operation>['data'],
Operation extends CreateOperation = 'create',
> = {
[Key in keyof Pick<Data, RequiredKeys<Data>>]: Data[Key] | (() => Data[Key])
} & {
[Key in keyof Pick<Data, OptionalKeys<Data>>]?: Data[Key] | (() => Data[Key])
}
export type DefaultData<Model, Args> = Prisma.Exact<Args, TransformKeys<Model, ExtractData<Model>>>
export interface FactoryBuilder<
Model,
Data = ExtractData<Model>,
Input = Partial<TransformKeys<Model, Data>>,
> {
attributes: (data?: Input) => Data
create: (data?: Input) => Promise<Prisma.Result<Model, Data, 'create'>>
}