import type { Prisma } from '@prisma/client';
import { PrismaClient } from '@prisma/client';
import type { DynamicQueryExtensionArgs } from '@prisma/client/runtime/library';
import { readReplicas } from '@prisma/extension-read-replicas';
import { drizzle } from 'drizzle-orm/prisma/pg';
import { writeTriggersExtension } from './extensions/write-triggers/extension';
import { ensureDatabaseCert } from './prisma/certs';
declare const global: Global & {
prisma?: ReturnType<typeof createPrismaClient>;
prismaWithoutWriteTriggers?: ReturnType<typeof createPrismaClient>;
};
export let prisma: ReturnType<typeof createPrismaClient>;
export let prismaWithoutWriteTriggers: ReturnType<typeof createPrismaClient>;
export function createPrismaClient(
queryExtension?: DynamicQueryExtensionArgs<
{
[K in Prisma.TypeMap['meta']['modelProps'] | '$allModels']?: unknown;
},
Prisma.TypeMap
>,
options?: {
withWriteTriggers?: boolean;
},
) {
if (
process.env.DATABASE_URL &&
!process.env.DATABASE_URL.includes('localhost')
) {
ensureDatabaseCert();
}
const { withWriteTriggers = true } = options ?? {};
const client = new PrismaClient()
.$extends({
query: {
...(queryExtension ?? {}),
},
})
.$extends(withWriteTriggers ? writeTriggersExtension : {})
.$extends(drizzle());
// ALWAYS KEEP READ REPLICAS EXTENSION LAST THIS IS A LIMITATION OF THE PRISMA EXTENSION
return client.$extends({
...readReplicas({
url: [
process.env.DB_REPLICA_URL_1 ?? '',
process.env.DB_REPLICA_URL_2 ?? '',
],
}),
});
}
if (typeof window === 'undefined') {
if (process.env['NODE_ENV'] === 'production') {
prisma = createPrismaClient();
prismaWithoutWriteTriggers = createPrismaClient(undefined, {
withWriteTriggers: false,
});
} else {
if (!global.prisma) {
global.prisma = createPrismaClient();
}
if (!global.prismaWithoutWriteTriggers) {
global.prismaWithoutWriteTriggers = createPrismaClient(undefined, {
withWriteTriggers: false,
});
}
prisma = global.prisma;
prismaWithoutWriteTriggers = global.prismaWithoutWriteTriggers;
}
}
import type { Prisma } from '@prisma/client';
import { PrismaClient } from '@prisma/client';
import type { DynamicQueryExtensionArgs } from '@prisma/client/runtime/library';
import { readReplicas } from '@prisma/extension-read-replicas';
import { drizzle } from 'drizzle-orm/prisma/pg';
import { writeTriggersExtension } from './extensions/write-triggers/extension';
import { ensureDatabaseCert } from './prisma/certs';
declare const global: Global & {
prisma?: ReturnType<typeof createPrismaClient>;
prismaWithoutWriteTriggers?: ReturnType<typeof createPrismaClient>;
};
export let prisma: ReturnType<typeof createPrismaClient>;
export let prismaWithoutWriteTriggers: ReturnType<typeof createPrismaClient>;
export function createPrismaClient(
queryExtension?: DynamicQueryExtensionArgs<
{
[K in Prisma.TypeMap['meta']['modelProps'] | '$allModels']?: unknown;
},
Prisma.TypeMap
>,
options?: {
withWriteTriggers?: boolean;
},
) {
if (
process.env.DATABASE_URL &&
!process.env.DATABASE_URL.includes('localhost')
) {
ensureDatabaseCert();
}
const { withWriteTriggers = true } = options ?? {};
const client = new PrismaClient()
.$extends({
query: {
...(queryExtension ?? {}),
},
})
.$extends(withWriteTriggers ? writeTriggersExtension : {})
.$extends(drizzle());
// ALWAYS KEEP READ REPLICAS EXTENSION LAST THIS IS A LIMITATION OF THE PRISMA EXTENSION
return client.$extends({
...readReplicas({
url: [
process.env.DB_REPLICA_URL_1 ?? '',
process.env.DB_REPLICA_URL_2 ?? '',
],
}),
});
}
if (typeof window === 'undefined') {
if (process.env['NODE_ENV'] === 'production') {
prisma = createPrismaClient();
prismaWithoutWriteTriggers = createPrismaClient(undefined, {
withWriteTriggers: false,
});
} else {
if (!global.prisma) {
global.prisma = createPrismaClient();
}
if (!global.prismaWithoutWriteTriggers) {
global.prismaWithoutWriteTriggers = createPrismaClient(undefined, {
withWriteTriggers: false,
});
}
prisma = global.prisma;
prismaWithoutWriteTriggers = global.prismaWithoutWriteTriggers;
}
}