From 4f284547402b78b3e6d1771529466d3b856943d6 Mon Sep 17 00:00:00 2001 From: mitchellhamilton Date: Fri, 12 Mar 2021 14:23:28 +1000 Subject: [PATCH 1/2] Skip generating prisma client in keystone-next start --- .changeset/lovely-days-smile.md | 7 +++++++ packages-next/keystone/src/scripts/run/start.ts | 6 +++++- packages-next/types/src/core.ts | 7 ++++++- packages/adapter-prisma/src/adapter-prisma.js | 4 +++- 4 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 .changeset/lovely-days-smile.md diff --git a/.changeset/lovely-days-smile.md b/.changeset/lovely-days-smile.md new file mode 100644 index 00000000000..48060d4feb5 --- /dev/null +++ b/.changeset/lovely-days-smile.md @@ -0,0 +1,7 @@ +--- +'@keystone-next/adapter-prisma-legacy': minor +'@keystone-next/types': minor +'@keystone-next/keystone': minor +--- + +Added `none-skip-client-generation` migrationMode diff --git a/packages-next/keystone/src/scripts/run/start.ts b/packages-next/keystone/src/scripts/run/start.ts index cc8ac9a432b..b26a014837a 100644 --- a/packages-next/keystone/src/scripts/run/start.ts +++ b/packages-next/keystone/src/scripts/run/start.ts @@ -15,7 +15,11 @@ export const start = async ({ dotKeystonePath, projectAdminPath }: StaticPaths) throw new Error('keystone-next build must be run before running keystone-next start'); } const config = initConfig(require(apiFile).config); - const { keystone, graphQLSchema, createContext } = createSystem(config, dotKeystonePath, 'none'); + const { keystone, graphQLSchema, createContext } = createSystem( + config, + dotKeystonePath, + 'none-skip-client-generation' + ); console.log('✨ Connecting to the database'); await keystone.connect({ context: createContext().sudo() }); diff --git a/packages-next/types/src/core.ts b/packages-next/types/src/core.ts index 14715df0477..f1175f5bd0b 100644 --- a/packages-next/types/src/core.ts +++ b/packages-next/types/src/core.ts @@ -66,4 +66,9 @@ export function getGqlNames({ }; } -export type MigrationMode = 'none' | 'createOnly' | 'dev' | 'prototype'; +export type MigrationMode = + | 'none-skip-client-generation' + | 'none' + | 'createOnly' + | 'dev' + | 'prototype'; diff --git a/packages/adapter-prisma/src/adapter-prisma.js b/packages/adapter-prisma/src/adapter-prisma.js index 2623e3ab752..03cf3934777 100644 --- a/packages/adapter-prisma/src/adapter-prisma.js +++ b/packages/adapter-prisma/src/adapter-prisma.js @@ -67,7 +67,9 @@ class PrismaAdapter extends BaseKeystoneAdapter { if (this._prismaClient) { return this._prismaClient; } - await this._generateClient(rels); + if (this.migrationMode !== 'none-skip-client-generation') { + await this._generateClient(rels); + } return require(this.clientPath).PrismaClient; } From 6e6ccaa8f94b5ac4f8673a25212050b7689ba7ac Mon Sep 17 00:00:00 2001 From: mitchellhamilton Date: Fri, 12 Mar 2021 14:27:54 +1000 Subject: [PATCH 2/2] Fix things --- packages/adapter-prisma/src/adapter-prisma.js | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/packages/adapter-prisma/src/adapter-prisma.js b/packages/adapter-prisma/src/adapter-prisma.js index 03cf3934777..6d99b0a1c80 100644 --- a/packages/adapter-prisma/src/adapter-prisma.js +++ b/packages/adapter-prisma/src/adapter-prisma.js @@ -67,9 +67,7 @@ class PrismaAdapter extends BaseKeystoneAdapter { if (this._prismaClient) { return this._prismaClient; } - if (this.migrationMode !== 'none-skip-client-generation') { - await this._generateClient(rels); - } + await this._generateClient(rels); return require(this.clientPath).PrismaClient; } @@ -90,21 +88,17 @@ class PrismaAdapter extends BaseKeystoneAdapter { } async _generateClient(rels) { - // 1. Generate a formatted schema + // Generate a formatted schema + // note that we currently still need to call _prepareSchema even during + // a `keystone-next start` because it has various side effects const { prismaSchema } = await this._prepareSchema(rels); - // 2. Check for existing schema - // 2a1. If they're the same, we're golden - // 2a2. If they're different, generate and run a migration - // 2b. If it doesn't exist, generate and run a migration - - // If any of our critical directories are missing, or if the schema has changed, then - // we've got things to do. - - this._writePrismaSchema({ prismaSchema }); + if (this.migrationMode !== 'none-skip-client-generation') { + this._writePrismaSchema({ prismaSchema }); - // Generate prisma client and run prisma migrations - await Promise.all([this._generatePrismaClient(), this._runMigrations({ prismaSchema })]); + // Generate prisma client and run prisma migrations + await Promise.all([this._generatePrismaClient(), this._runMigrations({ prismaSchema })]); + } } async _runMigrations({ prismaSchema }) {