chore: validate schema moved from loadConfig to init
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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.')
|
||||
}
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
Reference in New Issue
Block a user