Skip to content

Commit

Permalink
Only check for a valid db.provider once (keystonejs#6524)
Browse files Browse the repository at this point in the history
  • Loading branch information
timleslie authored and Nikitoring committed Sep 14, 2021
1 parent 98457ba commit bbb9620
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 18 deletions.
5 changes: 5 additions & 0 deletions .changeset/dirty-apricots-swim.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@keystone-next/keystone': patch
---

Updated system setup to only check for a valid `config.db.provider` once during `initConfig`.
3 changes: 1 addition & 2 deletions packages/keystone/src/artifacts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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');
Expand Down
6 changes: 6 additions & 0 deletions packages/keystone/src/lib/config/initConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) };
}
4 changes: 1 addition & 3 deletions packages/keystone/src/lib/createGraphQLSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<string, InitialisedList>,
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) {
Expand Down
16 changes: 3 additions & 13 deletions packages/keystone/src/lib/createSystem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -64,22 +55,21 @@ 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,
adminMeta,
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
Expand Down

0 comments on commit bbb9620

Please sign in to comment.