diff --git a/.changeset/dirty-apricots-swim.md b/.changeset/dirty-apricots-swim.md new file mode 100644 index 00000000000..787ad81e07d --- /dev/null +++ b/.changeset/dirty-apricots-swim.md @@ -0,0 +1,5 @@ +--- +'@keystone-next/keystone': patch +--- + +Updated system setup to only check for a valid `config.db.provider` once during `initConfig`. diff --git a/packages/keystone/src/artifacts.ts b/packages/keystone/src/artifacts.ts index 8ddf1438450..1e9e28ad579 100644 --- a/packages/keystone/src/artifacts.ts +++ b/packages/keystone/src/artifacts.ts @@ -9,7 +9,6 @@ import { printGeneratedTypes } from './lib/schema-type-printer'; import { ExitError } from './scripts/utils'; import { initialiseLists } from './lib/core/types-for-lists'; import { printPrismaSchema } from './lib/core/prisma-schema'; -import { getDBProvider } from './lib/createSystem'; export function getSchemaPaths(cwd: string) { return { @@ -181,7 +180,7 @@ export async function generateNodeModulesArtifacts( config: KeystoneConfig, cwd: string ) { - const lists = initialiseLists(config.lists, getDBProvider(config.db)); + const lists = initialiseLists(config.lists, config.db.provider); const printedSchema = printSchema(graphQLSchema); const dotKeystoneDir = path.join(cwd, 'node_modules/.keystone'); diff --git a/packages/keystone/src/lib/config/initConfig.ts b/packages/keystone/src/lib/config/initConfig.ts index 71d5e7542a0..d22725854ca 100644 --- a/packages/keystone/src/lib/config/initConfig.ts +++ b/packages/keystone/src/lib/config/initConfig.ts @@ -8,5 +8,11 @@ import { applyIdFieldDefaults } from './applyIdFieldDefaults'; */ export function initConfig(config: KeystoneConfig) { + if (!['postgresql', 'sqlite'].includes(config.db.provider)) { + throw new Error( + 'Invalid db configuration. Please specify db.provider as either "sqlite" or "postgresql"' + ); + } + return { ...config, lists: applyIdFieldDefaults(config) }; } diff --git a/packages/keystone/src/lib/createGraphQLSchema.ts b/packages/keystone/src/lib/createGraphQLSchema.ts index 18b590c6bab..f56b3bc1e73 100644 --- a/packages/keystone/src/lib/createGraphQLSchema.ts +++ b/packages/keystone/src/lib/createGraphQLSchema.ts @@ -3,15 +3,13 @@ import { getAdminMetaSchema } from '../admin-ui/system'; import { sessionSchema } from '../session'; import { InitialisedList } from './core/types-for-lists'; import { getGraphQLSchema } from './core/graphql-schema'; -import { getDBProvider } from './createSystem'; - export function createGraphQLSchema( config: KeystoneConfig, lists: Record, adminMeta: AdminMetaRootVal ) { // Start with the core keystone graphQL schema - let graphQLSchema = getGraphQLSchema(lists, getDBProvider(config.db)); + let graphQLSchema = getGraphQLSchema(lists, config.db.provider); // Merge in the user defined graphQL API if (config.extendGraphqlSchema) { diff --git a/packages/keystone/src/lib/createSystem.ts b/packages/keystone/src/lib/createSystem.ts index 456d5a4b60c..7be2c85f392 100644 --- a/packages/keystone/src/lib/createSystem.ts +++ b/packages/keystone/src/lib/createSystem.ts @@ -5,15 +5,6 @@ import { createGraphQLSchema } from './createGraphQLSchema'; import { makeCreateContext } from './context/createContext'; import { initialiseLists } from './core/types-for-lists'; -export function getDBProvider(db: KeystoneConfig['db']): DatabaseProvider { - if (!['postgresql', 'sqlite'].includes(db.provider)) { - throw new Error( - 'Invalid db configuration. Please specify db.provider as either "sqlite" or "postgresql"' - ); - } - return db.provider; -} - function getSudoGraphQLSchema(config: KeystoneConfig, provider: DatabaseProvider) { // This function creates a GraphQLSchema based on a modified version of the provided config. // The modifications are: @@ -64,14 +55,13 @@ function getSudoGraphQLSchema(config: KeystoneConfig, provider: DatabaseProvider } export function createSystem(config: KeystoneConfig) { - const provider = getDBProvider(config.db); - const lists = initialiseLists(config.lists, provider); + const lists = initialiseLists(config.lists, config.db.provider); const adminMeta = createAdminMeta(config, lists); const graphQLSchema = createGraphQLSchema(config, lists, adminMeta); - const sudoGraphQLSchema = getSudoGraphQLSchema(config, provider); + const sudoGraphQLSchema = getSudoGraphQLSchema(config, config.db.provider); return { graphQLSchema, @@ -79,7 +69,7 @@ export function createSystem(config: KeystoneConfig) { getKeystone: (PrismaClient: any) => { const prismaClient = new PrismaClient({ log: config.db.enableLogging && ['query'], - datasources: { [provider]: { url: config.db.url } }, + datasources: { [config.db.provider]: { url: config.db.url } }, }); prismaClient.$on('beforeExit', async () => { // Prisma is failing to properly clean up its child processes