Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
chore: format index.ts
  • Loading branch information
olivierwilkinson committed Jan 8, 2023
commit c428970ace362b8d90abaecdddca572124cfe2c4
46 changes: 24 additions & 22 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
/* eslint-disable import/no-unresolved */
// @ts-ignore unable to generate prisma client before building
import { Prisma } from '@prisma/client';
import { Prisma } from "@prisma/client";

import get from 'lodash/get';
import set from 'lodash/set';
import get from "lodash/get";
import set from "lodash/set";

if (!Prisma.dmmf) {
throw new Error('Prisma DMMF not found, please generate Prisma client using `npx prisma generate`');
throw new Error(
"Prisma DMMF not found, please generate Prisma client using `npx prisma generate`"
);
}

const relationsByModel: Record<string, Prisma.DMMF.Field[]> = {};
Prisma.dmmf.datamodel.models.forEach((model: Prisma.DMMF.Model) => {
relationsByModel[model.name] = model.fields.filter(
(field) => field.kind === 'object' && field.relationName
(field) => field.kind === "object" && field.relationName
);
});

export type NestedAction = Prisma.PrismaAction | 'connectOrCreate';
export type NestedAction = Prisma.PrismaAction | "connectOrCreate";

export type NestedParams = Omit<Prisma.MiddlewareParams, 'action'> & {
export type NestedParams = Omit<Prisma.MiddlewareParams, "action"> & {
action: NestedAction;
scope?: NestedParams;
};
Expand All @@ -39,18 +41,18 @@ type PromiseCallbackRef = {
};

const writeOperationsSupportingNestedWrites: NestedAction[] = [
'create',
'update',
'upsert',
'connectOrCreate',
"create",
"update",
"upsert",
"connectOrCreate",
];

const writeOperations: NestedAction[] = [
...writeOperationsSupportingNestedWrites,
'createMany',
'updateMany',
'delete',
'deleteMany',
"createMany",
"updateMany",
"delete",
"deleteMany",
];

function isWriteOperation(key: any): key is NestedAction {
Expand Down Expand Up @@ -85,26 +87,26 @@ function extractNestedWriteInfo(
const model = relation.type as Prisma.ModelName;

switch (params.action) {
case 'upsert':
case "upsert":
return [
...extractWriteInfo(params, model, `update.${relation.name}`),
...extractWriteInfo(params, model, `create.${relation.name}`),
];

case 'create':
case "create":
// nested creates use args as data instead of including a data field.
if (params.scope) {
return extractWriteInfo(params, model, relation.name);
}

return extractWriteInfo(params, model, `data.${relation.name}`);

case 'update':
case 'updateMany':
case 'createMany':
case "update":
case "updateMany":
case "createMany":
return extractWriteInfo(params, model, `data.${relation.name}`);

case 'connectOrCreate':
case "connectOrCreate":
return extractWriteInfo(params, model, `create.${relation.name}`);

default:
Expand All @@ -116,7 +118,7 @@ export function createNestedMiddleware<T>(
middleware: NestedMiddleware
): Prisma.Middleware<T> {
const nestedMiddleware: NestedMiddleware = async (params, next) => {
const relations = relationsByModel[params.model || ''] || [];
const relations = relationsByModel[params.model || ""] || [];
const finalParams = params;
const nestedWrites: {
relationName: string;
Expand Down