diff --git a/examples/custom-prisma-driver-adapter/keystone.ts b/examples/custom-prisma-driver-adapter/keystone.ts index 0c33b541c2c..b0aa46500f1 100644 --- a/examples/custom-prisma-driver-adapter/keystone.ts +++ b/examples/custom-prisma-driver-adapter/keystone.ts @@ -4,17 +4,22 @@ import { PrismaNeon } from '@prisma/adapter-neon'; import { WebSocket } from 'undici'; import { fixPrismaPath } from '../example-utils'; import { lists } from './schema'; +import { PrismaClient } from '.myprisma/client'; export default config({ db: { provider: 'sqlite', url: process.env.DATABASE_URL || 'file:./keystone-example.db', - prismaAdapter: () => { + prismaClient: config => { neonConfig.webSocketConstructor = WebSocket; const pool = new Pool({ connectionString: process.env.DATABASE_URL }); - return new PrismaNeon(pool); + const adapter = new PrismaNeon(pool); + return new PrismaClient({ + ...config, + adapter, + }); }, extendPrismaSchema: (schema: any) => { diff --git a/packages/core/src/lib/createSystem.ts b/packages/core/src/lib/createSystem.ts index 09950f45329..1d79f0fa420 100644 --- a/packages/core/src/lib/createSystem.ts +++ b/packages/core/src/lib/createSystem.ts @@ -1,6 +1,6 @@ import { randomBytes } from 'node:crypto'; import pLimit from 'p-limit'; -import type { FieldData, KeystoneConfig } from '../types'; +import type { FieldData, KeystoneConfig, } from '../types'; import type { PrismaModule } from '../artifacts'; import { allowAll } from '../access'; @@ -107,9 +107,7 @@ export function createSystem(config: KeystoneConfig) { graphQLSchema, adminMeta, getKeystone: (prismaModule: PrismaModule) => { - const prePrismaClient = new prismaModule.PrismaClient({ - adapter: - typeof config.db.prismaAdapter === 'function' ? config.db.prismaAdapter() : undefined, + const clientConfig: Parameters>[0] = { datasources: { [config.db.provider]: { url: config.db.url } }, log: config.db.enableLogging === true @@ -117,7 +115,11 @@ export function createSystem(config: KeystoneConfig) { : config.db.enableLogging === false ? undefined : config.db.enableLogging, - }); + }; + + const prePrismaClient = config.db.prismaClient + ? config.db.prismaClient(clientConfig) + : new prismaModule.PrismaClient(clientConfig); const prismaClient = injectNewDefaults(prePrismaClient, lists); setWriteLimit(prismaClient, pLimit(config.db.provider === 'sqlite' ? 1 : Infinity)); diff --git a/packages/core/src/types/config/index.ts b/packages/core/src/types/config/index.ts index abdcea063d0..9b0e158b0bc 100644 --- a/packages/core/src/types/config/index.ts +++ b/packages/core/src/types/config/index.ts @@ -139,20 +139,32 @@ type PrismaLogDefinition = { emit: 'stdout' | 'event'; }; +type PrismaDatasource = { + url?: string; +}; + +type PrismaDatasources = { + sqlite?: PrismaDatasource; +}; + +type PrismaClientConfig = { + datasources?: PrismaDatasources; + log?: (PrismaLogLevel | PrismaLogDefinition)[]; +}; + export type DatabaseConfig = { provider: DatabaseProvider; url: string; shadowDatabaseUrl?: string; onConnect?: (args: KeystoneContext) => Promise; - enableLogging?: boolean | PrismaLogLevel | Array; + enableLogging?: boolean | Array; idField?: IdFieldConfig; prismaClientPath?: string; prismaSchemaPath?: string; extendPrismaSchema?: (schema: string) => string; - - prismaAdapter?: () => any; + prismaClient?: (config: PrismaClientConfig) => any; /** @deprecated */ useMigrations?: boolean;