@augment-vir/common
Version:
A collection of augments, helpers types, functions, and classes for any JavaScript environment.
31 lines (30 loc) • 1.58 kB
TypeScript
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;