chore: validate schema moved from loadConfig to init

This commit is contained in:
Dan Ribbens
2024-03-04 14:30:38 -05:00
parent b14560c07d
commit c0a07a6144
4 changed files with 16 additions and 23 deletions

View File

@@ -1,20 +1,12 @@
/* eslint-disable import/no-dynamic-require */
/* eslint-disable global-require */
import type pino from 'pino'
// eslint-disable-next-line import/no-extraneous-dependencies
import path from 'path'
import type { SanitizedConfig } from './types'
import Logger from '../utilities/logger'
import { clientFiles } from './clientFiles'
import findConfig from './find'
import validate from './validate'
const loadConfig = async (logger?: pino.Logger): Promise<SanitizedConfig> => {
const localLogger = logger ?? Logger()
const loadConfig = async (): Promise<SanitizedConfig> => {
const configPath = findConfig()
clientFiles.forEach((ext) => {
@@ -28,18 +20,7 @@ const loadConfig = async (logger?: pino.Logger): Promise<SanitizedConfig> => {
if (config.default) config = await config.default
if (process.env.NODE_ENV !== 'production') {
config = await validate(config, localLogger)
}
return {
...config,
paths: {
config: configPath,
configDir: path.dirname(configPath),
rawConfig: configPath,
},
}
return config
}
export default loadConfig

View File

@@ -73,6 +73,12 @@ export default joi.object({
}),
user: joi.string(),
}),
bin: joi.array().items(
joi.object().keys({
key: joi.string(),
scriptPath: joi.string(),
}),
),
collections: joi.array(),
cookiePrefix: joi.string(),
cors: [joi.string().valid('*'), joi.array().items(joi.string())],
@@ -148,6 +154,7 @@ export default joi.object({
graphQL: joi.string(),
graphQLPlayground: joi.string(),
}),
secret: joi.string(),
serverURL: joi
.string()
.uri()

View File

@@ -46,6 +46,7 @@ import { decrypt, encrypt } from './auth/crypto'
import { APIKeyAuthentication } from './auth/strategies/apiKey'
import { JWTAuthentication } from './auth/strategies/jwt'
import localOperations from './collections/operations/local'
import validate from './config/validate'
import buildEmail from './email/build'
import { defaults as emailDefaults } from './email/defaults'
import sendEmail from './email/sendEmail'
@@ -302,6 +303,10 @@ export class BasePayload<TGeneratedTypes extends GeneratedTypes> {
this.config = await options.config
if (process.env.NODE_ENV !== 'production') {
await validate(this.config, this.logger)
}
if (!this.config.secret) {
throw new Error('Error: missing secret key. A secret key is needed to secure Payload.')
}

View File

@@ -1,4 +1,3 @@
import type { Payload } from '../../packages/payload/src'
import { sql } from 'drizzle-orm'
import fs from 'fs'
import path from 'path'
@@ -13,14 +12,15 @@ import { migrate } from '../../packages/payload/src/bin/migrate'
import { commitTransaction } from '../../packages/payload/src/utilities/commitTransaction'
import { initTransaction } from '../../packages/payload/src/utilities/initTransaction'
import { devUser } from '../credentials'
import removeFiles from '../helpers/removeFiles'
import { startMemoryDB } from '../startMemoryDB'
import configPromise from './config'
import removeFiles from '../helpers/removeFiles'
let payload: Payload
let user: TypeWithID & Record<string, unknown>
const collection = 'posts'
const title = 'title'
process.env.PAYLOAD_CONFIG_PATH = path.join(__dirname, 'config.ts')
describe('database', () => {
beforeAll(async () => {