Skip to content

Commit

Permalink
Merge branch 'return-default-config' into v-next-merge-test
Browse files Browse the repository at this point in the history
  • Loading branch information
gautamsi committed Aug 27, 2024
2 parents cf523cd + 946347e commit c57e39e
Show file tree
Hide file tree
Showing 29 changed files with 81 additions and 76 deletions.
6 changes: 6 additions & 0 deletions .changeset/blue-balloons-turn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@keystone-6/core": major
---

Renamed `__ResolvedKeystoneConfig` to `ResolvedKeystoneConfig`.
Changed `config` function to return config with defaults instead of just type casting. This now returns `ResolvedKeystoneConfig` instead of `KeystoneConfig`
5 changes: 5 additions & 0 deletions .changeset/shaggy-beds-know.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@keystone-6/auth": major
---

Changed type of `withAuth` input to `ResolvedKeystoneConfig` instead of `KeystoneConfig`
8 changes: 4 additions & 4 deletions packages/auth/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import type {
AdminFileToWrite,
BaseListTypeInfo,
KeystoneConfig,
KeystoneContext,
SessionStrategy,
BaseKeystoneTypeInfo,
ResolvedKeystoneConfig,
} from '@keystone-6/core/types'
import { password, timestamp } from '@keystone-6/core/fields'

Expand Down Expand Up @@ -135,7 +135,7 @@ export function createAuth<ListTypeInfo extends BaseListTypeInfo> ({
})

function throwIfInvalidConfig<TypeInfo extends BaseKeystoneTypeInfo> (
config: KeystoneConfig<TypeInfo>
config: ResolvedKeystoneConfig<TypeInfo>
) {
if (!(listKey in config.lists)) {
throw new Error(`withAuth cannot find the list "${listKey}"`)
Expand Down Expand Up @@ -247,8 +247,8 @@ export function createAuth<ListTypeInfo extends BaseListTypeInfo> ({
* Automatically extends your configuration with a prescriptive implementation.
*/
function withAuth<TypeInfo extends BaseKeystoneTypeInfo> (
config: KeystoneConfig<TypeInfo>
): KeystoneConfig<TypeInfo> {
config: ResolvedKeystoneConfig<TypeInfo>
): ResolvedKeystoneConfig<TypeInfo> {
throwIfInvalidConfig(config)
let { ui } = config
if (!ui?.isDisabled) {
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/admin-ui/system/generateAdminUI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { type GraphQLSchema } from 'graphql'
// import { walk as _walk } from '@nodelib/fs.walk'
import {
type AdminFileToWrite,
type __ResolvedKeystoneConfig
type ResolvedKeystoneConfig
} from '../../types'
import { writeAdminFiles } from '../templates'
import { type AdminMetaRootVal } from '../../lib/create-admin-meta'
Expand Down Expand Up @@ -60,7 +60,7 @@ export async function writeAdminFile (file: AdminFileToWrite, projectAdminPath:
}

export async function generateAdminUI (
config: __ResolvedKeystoneConfig,
config: ResolvedKeystoneConfig,
graphQLSchema: GraphQLSchema,
adminMeta: AdminMetaRootVal,
projectAdminPath: string,
Expand Down
9 changes: 4 additions & 5 deletions packages/core/src/admin-ui/templates/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import { type GraphQLSchema } from 'graphql'
import {
type __ResolvedKeystoneConfig
} from '../../types'
import type { AdminMetaRootVal } from '../../lib/create-admin-meta'
import { type ResolvedKeystoneConfig } from '../../types'
import { type AdminMetaRootVal } from '../../lib/create-admin-meta'
import { adminConfigTemplate, adminLayoutTemplate, adminRootLayoutTemplate } from './app'
import { homeTemplate } from './home'
import { listTemplate } from './list'
Expand All @@ -11,7 +9,8 @@ import { noAccessTemplate } from './no-access'
import { createItemTemplate } from './create-item'
import { nextConfigTemplate } from './next-config'

export function writeAdminFiles (config: __ResolvedKeystoneConfig,
export function writeAdminFiles (
config: ResolvedKeystoneConfig,
graphQLSchema: GraphQLSchema,
adminMeta: AdminMetaRootVal,
configFileExists: boolean,
Expand Down
1 change: 0 additions & 1 deletion packages/core/src/artifacts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { type ChildProcess } from 'node:child_process'
import { printSchema } from 'graphql'
import { getGenerators, formatSchema } from '@prisma/internals'
import { ExitError } from './scripts/utils'
import { type __ResolvedKeystoneConfig } from './types'
import { initialiseLists } from './lib/core/initialise-lists'
import {
type System,
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/context.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import {
type BaseKeystoneTypeInfo,
type KeystoneConfig,
type ResolvedKeystoneConfig,
type KeystoneContext
} from './types'
import { createSystem } from './lib/createSystem'

export function getContext<TypeInfo extends BaseKeystoneTypeInfo> (
config: KeystoneConfig<TypeInfo>,
config: ResolvedKeystoneConfig<TypeInfo>,
PrismaModule: unknown
): KeystoneContext<TypeInfo> {
const system = createSystem(config)
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/lib/assets/createFilesContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { randomBytes } from 'node:crypto'

import {
type FilesContext,
type __ResolvedKeystoneConfig,
type ResolvedKeystoneConfig,
} from '../../types'
import { localFileAssetsAPI } from './local'
import { s3FileAssetsAPI } from './s3'
Expand All @@ -21,7 +21,7 @@ function defaultTransformName (path: string) {
return `${urlSafeName}-${id}`
}

export function createFilesContext (config: __ResolvedKeystoneConfig): FilesContext {
export function createFilesContext (config: ResolvedKeystoneConfig): FilesContext {
const adaptersMap = new Map<string, FileAdapter>()

for (const [storageKey, storageConfig] of Object.entries(config.storage || {})) {
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/lib/assets/createImagesContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import imageSize from 'image-size'

import {
type ImagesContext,
type __ResolvedKeystoneConfig,
type ResolvedKeystoneConfig,
} from '../../types'
import type { ImageAdapter } from './types'
import { localImageAssetsAPI } from './local'
Expand Down Expand Up @@ -33,7 +33,7 @@ async function getImageMetadataFromBuffer (buffer: Buffer) {
return { width, height, filesize: buffer.length, extension }
}

export function createImagesContext (config: __ResolvedKeystoneConfig): ImagesContext {
export function createImagesContext (config: ResolvedKeystoneConfig): ImagesContext {
const imageAssetsAPIs = new Map<string, ImageAdapter>()
for (const [storageKey, storageConfig] of Object.entries(config.storage || {})) {
if (storageConfig.type === 'image') {
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/lib/context/createContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
import {
type KeystoneContext,
type KeystoneGraphQLAPI,
type __ResolvedKeystoneConfig,
type ResolvedKeystoneConfig,
} from '../../types'

import { type InitialisedList } from '../core/initialise-lists'
Expand All @@ -27,7 +27,7 @@ export function createContext ({
prismaClient,
prismaTypes
}: {
config: __ResolvedKeystoneConfig
config: ResolvedKeystoneConfig
lists: Record<string, InitialisedList>
graphQLSchema: GraphQLSchema
graphQLSchemaSudo: GraphQLSchema
Expand Down
8 changes: 4 additions & 4 deletions packages/core/src/lib/core/initialise-lists.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
type GraphQLTypesForList,
type ListGraphQLTypes,
type ListHooks,
type __ResolvedKeystoneConfig,
type ResolvedKeystoneConfig,
type MaybePromise,
type NextFieldType,
type FieldTypeFunc,
Expand Down Expand Up @@ -153,7 +153,7 @@ function throwIfNotAFilter (x: unknown, listKey: string, fieldKey: string) {
throw new Error(`Configuration option '${listKey}.${fieldKey}' must be either a boolean value or a function. Received '${x}'.`)
}

type ListConfigType = __ResolvedKeystoneConfig['lists'][string]
type ListConfigType = ResolvedKeystoneConfig['lists'][string]
type FieldConfigType = ReturnType<FieldTypeFunc<any>>
type PartiallyInitialisedList1 = { graphql: { isEnabled: IsListEnabled } }
type PartiallyInitialisedList2 = Omit<InitialisedList, 'lists' | 'resolvedDbFields'>
Expand Down Expand Up @@ -305,7 +305,7 @@ function parseFieldHooks (
}

function getListsWithInitialisedFields (
config: __ResolvedKeystoneConfig,
config: ResolvedKeystoneConfig,
listsRef: Record<string, InitialisedList>,
) {
const { storage: configStorage, lists: listsConfig, db: { provider } } = config
Expand Down Expand Up @@ -803,7 +803,7 @@ function graphqlForOutputField (field: InitialisedField) {
})
}

export function initialiseLists (config: __ResolvedKeystoneConfig): Record<string, InitialisedList> {
export function initialiseLists (config: ResolvedKeystoneConfig): Record<string, InitialisedList> {
const listsRef: Record<string, InitialisedList> = {}
let intermediateLists

Expand Down
6 changes: 2 additions & 4 deletions packages/core/src/lib/core/prisma-schema-printer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import {
} from '../../types'
import { type ResolvedDBField } from './resolve-relationships'
import { type InitialisedList } from './initialise-lists'
import {
type __ResolvedKeystoneConfig
} from '../../types'
import { type ResolvedKeystoneConfig } from '../../types'
import { areArraysEqual, getDBFieldKeyForFieldOnMultiField } from './utils'

const modifiers = {
Expand Down Expand Up @@ -183,7 +181,7 @@ function assertDbFieldIsValidForIdField (
}

export function printPrismaSchema (
config: __ResolvedKeystoneConfig,
config: ResolvedKeystoneConfig,
lists: Record<string, InitialisedList>,
) {
const {
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/lib/create-admin-meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
type MaybeItemFunction,
type MaybePromise,
type MaybeSessionFunction,
type __ResolvedKeystoneConfig,
type ResolvedKeystoneConfig,
} from '../types'
import {
type GraphQLNames
Expand Down Expand Up @@ -85,7 +85,7 @@ export type AdminMetaRootVal = {
}

export function createAdminMeta (
config: __ResolvedKeystoneConfig,
config: ResolvedKeystoneConfig,
initialisedLists: Record<string, InitialisedList>
) {
const { lists } = config
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/lib/createAdminUIMiddleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import type express from 'express'
import type next from 'next'
import {
type KeystoneContext,
type __ResolvedKeystoneConfig,
type ResolvedKeystoneConfig,
} from '../types'
import { pkgDir } from '../pkg-dir'

const adminErrorHTMLFilepath = path.join(pkgDir, 'static', 'admin-error.html')

export function createAdminUIMiddlewareWithNextApp (
config: __ResolvedKeystoneConfig,
config: ResolvedKeystoneConfig,
commonContext: KeystoneContext,
nextApp: ReturnType<typeof next>
) {
Expand Down
6 changes: 3 additions & 3 deletions packages/core/src/lib/createExpressServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { ApolloServerPluginLandingPageLocalDefault } from '@apollo/server/plugin
import graphqlUploadExpress from 'graphql-upload/graphqlUploadExpress.js'
import {
type KeystoneContext,
type __ResolvedKeystoneConfig,
type ResolvedKeystoneConfig,
} from '../types'

/*
Expand All @@ -24,7 +24,7 @@ The Admin UI takes a while to build for dev, and is created separately
so the CLI can bring up the dev server early to handle GraphQL requests.
*/

function formatError (graphqlConfig: __ResolvedKeystoneConfig['graphql']) {
function formatError (graphqlConfig: ResolvedKeystoneConfig['graphql']) {
return (formattedError: GraphQLFormattedError, error: unknown) => {
let debug = graphqlConfig.debug
if (debug === undefined) {
Expand All @@ -46,7 +46,7 @@ function formatError (graphqlConfig: __ResolvedKeystoneConfig['graphql']) {
}

export async function createExpressServer (
config: Pick<__ResolvedKeystoneConfig, 'graphql' | 'server' | 'storage'>,
config: Pick<ResolvedKeystoneConfig, 'graphql' | 'server' | 'storage'>,
context: KeystoneContext
): Promise<{
expressServer: express.Express
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/lib/createGraphQLSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { type GraphQLNamedType, GraphQLSchema } from 'graphql'

import { graphql } from '../types/schema'
import {
type __ResolvedKeystoneConfig
type ResolvedKeystoneConfig
} from '../types'
import { KeystoneMeta } from './resolve-admin-meta'
import type { AdminMetaRootVal } from './create-admin-meta'
Expand Down Expand Up @@ -98,7 +98,7 @@ function collectTypes (
}

export function createGraphQLSchema (
config: __ResolvedKeystoneConfig,
config: ResolvedKeystoneConfig,
lists: Record<string, InitialisedList>,
adminMeta: AdminMetaRootVal | null,
sudo: boolean
Expand Down
14 changes: 7 additions & 7 deletions packages/core/src/lib/createSystem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { randomBytes } from 'node:crypto'
import {
type KeystoneConfig,
type FieldData,
type __ResolvedKeystoneConfig
type ResolvedKeystoneConfig
} from '../types'
import { GraphQLError } from 'graphql'

Expand All @@ -27,7 +27,7 @@ function posixify (s: string) {
return s.split(path.sep).join('/')
}

export function getSystemPaths (cwd: string, config: KeystoneConfig | __ResolvedKeystoneConfig) {
export function getSystemPaths (cwd: string, config: KeystoneConfig | ResolvedKeystoneConfig) {
const prismaClientPath = config.db.prismaClientPath === '@prisma/client'
? null
: config.db.prismaClientPath
Expand Down Expand Up @@ -72,7 +72,7 @@ export function getSystemPaths (cwd: string, config: KeystoneConfig | __Resolved
}
}

function getSudoGraphQLSchema (config: __ResolvedKeystoneConfig) {
function getSudoGraphQLSchema (config: ResolvedKeystoneConfig) {
// This function creates a GraphQLSchema based on a modified version of the provided config.
// The modifications are:
// * All list level access control is disabled
Expand All @@ -84,7 +84,7 @@ function getSudoGraphQLSchema (config: __ResolvedKeystoneConfig) {
// operations that can be run.
//
// The resulting schema is used as the GraphQL schema when calling `context.sudo()`.
const transformedConfig: __ResolvedKeystoneConfig = {
const transformedConfig: ResolvedKeystoneConfig = {
...config,
ui: {
...config.ui,
Expand Down Expand Up @@ -191,7 +191,7 @@ function injectNewDefaults (prismaClient: unknown, lists: Record<string, Initial
return prismaClient
}

function formatUrl (provider: __ResolvedKeystoneConfig['db']['provider'], url: string) {
function formatUrl (provider: ResolvedKeystoneConfig['db']['provider'], url: string) {
if (url.startsWith('file:')) {
const parsed = new URL(url)
if (provider === 'sqlite' && !parsed.searchParams.get('connection_limit')) {
Expand All @@ -208,8 +208,8 @@ function formatUrl (provider: __ResolvedKeystoneConfig['db']['provider'], url: s
return url
}

export function createSystem (config_: KeystoneConfig) {
const config = resolveDefaults(config_, true)
export function createSystem (config_: KeystoneConfig | ResolvedKeystoneConfig) {
const config = resolveDefaults(config_ as KeystoneConfig, true)
const lists = initialiseLists(config)
const adminMeta = createAdminMeta(config, lists)
const graphQLSchema = createGraphQLSchema(config, lists, adminMeta, false)
Expand Down
10 changes: 5 additions & 5 deletions packages/core/src/lib/defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
type IdFieldConfig,
type KeystoneConfig,
type KeystoneContext,
type __ResolvedKeystoneConfig,
type ResolvedKeystoneConfig,
} from '../types'
import {
idFieldType
Expand All @@ -22,7 +22,7 @@ function injectDefaults (config: KeystoneConfig, defaultIdField: IdFieldConfig)
}
}

const updated: __ResolvedKeystoneConfig['lists'] = {}
const updated: ResolvedKeystoneConfig['lists'] = {}

for (const [listKey, list] of Object.entries(config.lists)) {
if (list.isSingleton) {
Expand Down Expand Up @@ -56,10 +56,10 @@ function defaultIsAccessAllowed ({ session, sessionStrategy }: KeystoneContext)
return session !== undefined
}

async function noop () {}
export async function noop () {}
function identity<T> (x: T) { return x }

export function resolveDefaults <TypeInfo extends BaseKeystoneTypeInfo> (config: KeystoneConfig<TypeInfo>, inject = false): __ResolvedKeystoneConfig<TypeInfo> {
export function resolveDefaults <TypeInfo extends BaseKeystoneTypeInfo> (config: KeystoneConfig<TypeInfo>, injectIdField = false): ResolvedKeystoneConfig<TypeInfo> {
if (!['postgresql', 'sqlite', 'mysql'].includes(config.db.provider)) {
throw new TypeError(`"db.provider" only supports "sqlite", "postgresql" or "mysql"`)
}
Expand Down Expand Up @@ -109,7 +109,7 @@ export function resolveDefaults <TypeInfo extends BaseKeystoneTypeInfo> (config:
schemaPath: config.graphql?.schemaPath ?? 'schema.graphql',
extendGraphqlSchema: config.graphql?.extendGraphqlSchema ?? ((s) => s),
},
lists: inject ? injectDefaults(config, defaultIdField) : config.lists,
lists: injectIdField ? injectDefaults(config, defaultIdField) : config.lists as ResolvedKeystoneConfig['lists'],
server: {
maxFileSize: 200 * 1024 * 1024, // 200 MiB
extendExpressApp: config.server?.extendExpressApp ?? noop,
Expand Down
Loading

0 comments on commit c57e39e

Please sign in to comment.