Skip to content

Commit 6defa1c

Browse files
hbjORbjdevin-ai-integration[bot]keithwillcode
authored
refactor: replace @prisma/client/runtime imports with public API (calcom#23087)
- Replace PrismaClientKnownRequestError and other error classes with Prisma namespace equivalents - Remove internal DefaultArgs and InternalArgs type imports from Prisma extensions - Ensure all error handling uses stable public API exports - Maintain compatibility with future Prisma versions by avoiding runtime dependencies Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Keith Williams <[email protected]>
1 parent 5b2b5fd commit 6defa1c

File tree

6 files changed

+29
-38
lines changed

6 files changed

+29
-38
lines changed

apps/api/v2/src/filters/prisma-exception.filter.ts

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,7 @@ import { extractUserContext } from "@/lib/extract-user-context";
22
import { filterReqHeaders } from "@/lib/filterReqHeaders";
33
import type { ArgumentsHost, ExceptionFilter } from "@nestjs/common";
44
import { Catch, HttpStatus, Logger } from "@nestjs/common";
5-
import {
6-
PrismaClientInitializationError,
7-
PrismaClientKnownRequestError,
8-
PrismaClientRustPanicError,
9-
PrismaClientUnknownRequestError,
10-
PrismaClientValidationError,
11-
} from "@prisma/client/runtime/library";
5+
import { Prisma } from "@prisma/client";
126
import { Request } from "express";
137

148
import {
@@ -21,18 +15,18 @@ import {
2115
import { Response } from "@calcom/platform-types";
2216

2317
type PrismaError =
24-
| PrismaClientInitializationError
25-
| PrismaClientKnownRequestError
26-
| PrismaClientRustPanicError
27-
| PrismaClientUnknownRequestError
28-
| PrismaClientValidationError;
18+
| Prisma.PrismaClientInitializationError
19+
| Prisma.PrismaClientKnownRequestError
20+
| Prisma.PrismaClientRustPanicError
21+
| Prisma.PrismaClientUnknownRequestError
22+
| Prisma.PrismaClientValidationError;
2923

3024
@Catch(
31-
PrismaClientInitializationError,
32-
PrismaClientKnownRequestError,
33-
PrismaClientRustPanicError,
34-
PrismaClientUnknownRequestError,
35-
PrismaClientValidationError
25+
Prisma.PrismaClientInitializationError,
26+
Prisma.PrismaClientKnownRequestError,
27+
Prisma.PrismaClientRustPanicError,
28+
Prisma.PrismaClientUnknownRequestError,
29+
Prisma.PrismaClientValidationError
3630
)
3731
export class PrismaExceptionFilter implements ExceptionFilter {
3832
private readonly logger = new Logger("PrismaExceptionFilter");
@@ -58,7 +52,7 @@ export class PrismaExceptionFilter implements ExceptionFilter {
5852
let message = "There was an error, please try again later.";
5953
let statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
6054
let errorCode = INTERNAL_SERVER_ERROR;
61-
if (error instanceof PrismaClientKnownRequestError) {
55+
if (error instanceof Prisma.PrismaClientKnownRequestError) {
6256
switch (error.code) {
6357
case "P2002": // Unique constraint failed
6458
errorCode = CONFLICT;

packages/app-store/stripepayment/lib/team-billing.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library";
1+
import { Prisma } from "@prisma/client";
22

33
export function getRequestedSlugError(error: unknown, requestedSlug: string) {
44
let message = `Unknown error`;
55
let statusCode = 500;
66
// This covers the edge case if an unpublished team takes too long to publish
77
// and another team gets the requestedSlug first.
88
// https://www.prisma.io/docs/reference/api-reference/error-reference#p2002
9-
if (error instanceof PrismaClientKnownRequestError && error.code === "P2002") {
9+
if (error instanceof Prisma.PrismaClientKnownRequestError && error.code === "P2002") {
1010
statusCode = 400;
1111
message = `It seems like the requestedSlug: '${requestedSlug}' is already taken. Please contact support at [email protected] so we can resolve this issue.`;
1212
} else if (error instanceof Error) {

packages/features/auth/lib/next-auth-custom-adapter.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import type { Account, IdentityProvider, Prisma, User, VerificationToken } from "@prisma/client";
2-
import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library";
1+
import type { Account, IdentityProvider, User, VerificationToken } from "@prisma/client";
2+
import { Prisma } from "@prisma/client";
33
import type { Awaitable } from "next-auth";
44

55
import type { PrismaClient } from "@calcom/prisma";
@@ -86,7 +86,7 @@ export default function CalComAdapter(prismaClient: PrismaClient): CalComAdapter
8686
} catch (error) {
8787
// If token already used/deleted, just return null
8888
// https://www.prisma.io/docs/reference/api-reference/error-reference#p2025
89-
if (error instanceof PrismaClientKnownRequestError) {
89+
if (error instanceof Prisma.PrismaClientKnownRequestError) {
9090
if (error.code === "P2025") return null;
9191
}
9292
throw error;

packages/prisma/extensions/exclude-locked-users.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Prisma } from "@prisma/client";
2-
import type { DefaultArgs, InternalArgs } from "@prisma/client/runtime/library";
32

43
export function excludeLockedUsersExtension() {
54
return Prisma.defineExtension({
@@ -35,11 +34,11 @@ function safeJSONStringify(x: any) {
3534

3635
async function excludeLockedUsers(
3736
args:
38-
| Prisma.UserFindUniqueArgs<InternalArgs & DefaultArgs>
39-
| Prisma.UserFindFirstArgs<InternalArgs & DefaultArgs>
40-
| Prisma.UserFindManyArgs<InternalArgs & DefaultArgs>
41-
| Prisma.UserFindUniqueOrThrowArgs<InternalArgs & DefaultArgs>
42-
| Prisma.UserFindFirstOrThrowArgs<InternalArgs & DefaultArgs>,
37+
| Prisma.UserFindUniqueArgs
38+
| Prisma.UserFindFirstArgs
39+
| Prisma.UserFindManyArgs
40+
| Prisma.UserFindUniqueOrThrowArgs
41+
| Prisma.UserFindFirstOrThrowArgs,
4342
query: <T>(args: T) => Promise<unknown>
4443
) {
4544
args.where = args.where || {};

packages/prisma/extensions/exclude-pending-payment-teams.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Prisma } from "@prisma/client";
2-
import type { DefaultArgs, InternalArgs } from "@prisma/client/runtime/library";
32

43
export function excludePendingPaymentsExtension() {
54
return Prisma.defineExtension({
@@ -27,11 +26,11 @@ export function excludePendingPaymentsExtension() {
2726

2827
async function excludePendingPayments(
2928
args:
30-
| Prisma.TeamFindUniqueArgs<InternalArgs & DefaultArgs>
31-
| Prisma.TeamFindFirstArgs<InternalArgs & DefaultArgs>
32-
| Prisma.TeamFindManyArgs<InternalArgs & DefaultArgs>
33-
| Prisma.TeamFindUniqueOrThrowArgs<InternalArgs & DefaultArgs>
34-
| Prisma.TeamFindFirstOrThrowArgs<InternalArgs & DefaultArgs>,
29+
| Prisma.TeamFindUniqueArgs
30+
| Prisma.TeamFindFirstArgs
31+
| Prisma.TeamFindManyArgs
32+
| Prisma.TeamFindUniqueOrThrowArgs
33+
| Prisma.TeamFindFirstOrThrowArgs,
3534
query: <T>(args: T) => Promise<unknown>
3635
) {
3736
args.where = args.where || {};

packages/trpc/server/routers/viewer/eventTypes/create.handler.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import type { Prisma } from "@prisma/client";
2-
import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library";
1+
import { Prisma } from "@prisma/client";
32

43
import { DailyLocationType } from "@calcom/app-store/locations";
54
import { getDefaultLocations } from "@calcom/lib/server/getDefaultLocations";
@@ -139,7 +138,7 @@ export const createHandler = async ({ ctx, input }: CreateOptions) => {
139138
return { eventType };
140139
} catch (e) {
141140
console.warn(e);
142-
if (e instanceof PrismaClientKnownRequestError) {
141+
if (e instanceof Prisma.PrismaClientKnownRequestError) {
143142
if (e.code === "P2002" && Array.isArray(e.meta?.target) && e.meta?.target.includes("slug")) {
144143
throw new TRPCError({ code: "BAD_REQUEST", message: "URL Slug already exists for given user." });
145144
}

0 commit comments

Comments
 (0)