UNPKG

@augment-vir/common

Version:

A collection of augments, helpers types, functions, and classes for any JavaScript environment.

31 lines (30 loc) 1.58 kB
import { type BaseTypeMap } from './base-prisma-types.js'; import { type PrismaBasicModel } from './prisma-basic-model.js'; /** * Gets the full model type with all nested models for Prisma. * * @category Prisma : Common * @category Package : @augment-vir/common * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common) */ export type PrismaFullModel<TypeMap extends BaseTypeMap, Model extends keyof TypeMap['model']> = PrismaBasicModel<TypeMap, Model> & ExpandModelObjects<TypeMap['model'][Model]['payload']['objects'], TypeMap>; /** * Expand a model's objects (nested models). * * @category Prisma : Common * @category Package : @augment-vir/common * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common) */ export type ExpandModelObjects<Objects, TypeMap extends BaseTypeMap> = { [Key in keyof Objects]: Objects[Key] extends ReadonlyArray<infer Entry> ? ExpandModel<TypeMap, Entry>[] : ExpandModel<TypeMap, Objects[Key]>; }; /** * Expand a model entry from {@link ExpandModelObjects}. * * @category Prisma : Common * @category Package : @augment-vir/common * @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common) */ export type ExpandModel<TypeMap extends BaseTypeMap, Entry> = null extends Entry ? null | ExpandModel<TypeMap, NonNullable<Entry>> : undefined extends Entry ? undefined | ExpandModel<TypeMap, NonNullable<Entry>> : Entry extends Readonly<{ name: infer ModelName extends keyof TypeMap['model']; }> ? PrismaFullModel<TypeMap, ModelName> : never;