Skip to content

Commit

Permalink
add possibility to pass in a prisma client
Browse files Browse the repository at this point in the history
rm
  • Loading branch information
mmachatschek committed Oct 5, 2023
1 parent 19d623d commit 2d12d6b
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 10 deletions.
9 changes: 7 additions & 2 deletions examples/custom-prisma-driver-adapter/keystone.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand Down
12 changes: 7 additions & 5 deletions packages/core/src/lib/createSystem.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand Down Expand Up @@ -107,17 +107,19 @@ 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<NonNullable<KeystoneConfig['db']['prismaClient']>>[0] = {
datasources: { [config.db.provider]: { url: config.db.url } },
log:
config.db.enableLogging === true
? ['query']
: 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));
Expand Down
18 changes: 15 additions & 3 deletions packages/core/src/types/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<TypeInfo extends BaseKeystoneTypeInfo> = {
provider: DatabaseProvider;
url: string;

shadowDatabaseUrl?: string;
onConnect?: (args: KeystoneContext<TypeInfo>) => Promise<void>;
enableLogging?: boolean | PrismaLogLevel | Array<PrismaLogLevel | PrismaLogDefinition>;

This comment has been minimized.

Copy link
@dcousens

dcousens Oct 5, 2023

Member

I assume this was broken/wrong?

This comment has been minimized.

Copy link
@mmachatschek

mmachatschek Oct 6, 2023

Author Contributor

@dcousens yes, that type was incompatible with the log config of the PrismaClient constructor

image

enableLogging?: boolean | Array<PrismaLogLevel | PrismaLogDefinition>;
idField?: IdFieldConfig;
prismaClientPath?: string;
prismaSchemaPath?: string;

extendPrismaSchema?: (schema: string) => string;

prismaAdapter?: () => any;
prismaClient?: (config: PrismaClientConfig) => any;

/** @deprecated */
useMigrations?: boolean;
Expand Down

0 comments on commit 2d12d6b

Please sign in to comment.