MCPcopy
hub / github.com/prisma/prisma / ModelDelegate

Class ModelDelegate

packages/client-generator-js/src/TSClient/Model.ts:458–617  ·  packages/client-generator-js/src/TSClient/Model.ts::ModelDelegate

Source from the content-addressed store, hash-verified

456 }
457}
458export class ModelDelegate implements Generable {
459 constructor(
460 protected readonly outputType: DMMF.OutputType,
461 protected readonly context: GenerateContext,
462 ) {}
463
464 /**
465 * Returns all available non-aggregate or group actions
466 * Includes both dmmf and client-only actions
467 *
468 * @param availableActions
469 * @returns
470 */
471 private getNonAggregateActions(availableActions: DMMF.ModelAction[]): DMMF.ModelAction[] {
472 const actions = availableActions.filter(
473 (key) => key !== DMMF.ModelAction.aggregate && key !== DMMF.ModelAction.groupBy && key !== DMMF.ModelAction.count,
474 )
475
476 return actions
477 }
478
479 public toTS(): string {
480 const { name } = this.outputType
481 const { dmmf } = this.context
482
483 const mapping = dmmf.mappingsMap[name] ?? { model: name, plural: `${name}s` }
484 const modelOrType = dmmf.typeAndModelMap[name]
485
486 const availableActions = getModelActions(dmmf, name)
487 const nonAggregateActions = this.getNonAggregateActions(availableActions)
488 const groupByArgsName = getGroupByArgsName(name)
489 const countArgsName = getModelArgName(name, DMMF.ModelAction.count)
490
491 const genericDelegateParams = [extArgsParam, ts.genericParameter(class="st">'GlobalOmitOptions').default(ts.objectType())]
492
493 const excludedArgsForCount = [class="st">'select', class="st">'include', class="st">'distinct', class="st">'omit']
494 if (this.context.isPreviewFeatureOn(class="st">'relationJoins')) {
495 excludedArgsForCount.push(class="st">'relationLoadStrategy')
496 }
497
498 const excludedArgsForCountType = excludedArgsForCount.map((name) => `class="st">'${name}'`).join(class="st">' | ')
499
500 return `\
501${
502 availableActions.includes(DMMF.ModelAction.aggregate)
503 ? `type ${countArgsName}<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
504 Omit<${getModelArgName(name, DMMF.ModelAction.findMany)}, ${excludedArgsForCountType}> & {
505 select?: ${getCountAggregateInputName(name)} | true
506 }
507`
508 : class="st">''
509}
510export interface ${name}Delegate<${genericDelegateParams.map((param) => ts.stringify(param)).join(class="st">', ')}> {
511${indent(`[K: symbol]: { types: Prisma.TypeMap<ExtArgs>[class="st">'model'][class="st">'${name}'], meta: { name: class="st">'${name}' } }`, TAB_SIZE)}
512${nonAggregateActions
513 .map((action) => {
514 const method = buildModelDelegateMethod(name, action, this.context)
515 return ts.stringify(method, { indentLevel: 1, newLine: class="st">'trailing' })

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected