From 28a065072fcad2dc768e44d79609eb5ab8a3fdfd Mon Sep 17 00:00:00 2001 From: Jessica Chowdhury <67977755+JessChowdhury@users.noreply.github.com> Date: Thu, 12 Sep 2024 08:59:36 -0400 Subject: [PATCH] feat: add new option to disable JOI validation (#8067) Adds new option `joiValidation: boolean` to the payload config per client request. `joiValidation` defaults to `true`, when set to `false` it will bypass the JOI validation for all collections, globals, fields etc. NOTE: This change is not required for v3. --- packages/payload/src/config/defaults.ts | 1 + packages/payload/src/config/schema.ts | 1 + packages/payload/src/config/types.ts | 16 +++++++++++----- packages/payload/src/config/validate.ts | 4 ++++ 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/packages/payload/src/config/defaults.ts b/packages/payload/src/config/defaults.ts index 3404bed651..a793d35f26 100644 --- a/packages/payload/src/config/defaults.ts +++ b/packages/payload/src/config/defaults.ts @@ -39,6 +39,7 @@ export const defaults: Omit = { schemaOutputFile: `${typeof process?.cwd === 'function' ? process.cwd() : ''}/schema.graphql`, }, hooks: {}, + joiValidation: true, localization: false, maxDepth: 10, rateLimit: { diff --git a/packages/payload/src/config/schema.ts b/packages/payload/src/config/schema.ts index 5a995f8bee..b4958a2151 100644 --- a/packages/payload/src/config/schema.ts +++ b/packages/payload/src/config/schema.ts @@ -128,6 +128,7 @@ export default joi.object({ }), i18n: joi.object(), indexSortableFields: joi.boolean(), + joiValidation: joi.boolean(), local: joi.boolean(), localization: joi.alternatives().try( joi.object().keys({ diff --git a/packages/payload/src/config/types.ts b/packages/payload/src/config/types.ts index fc768a6bde..bcba61bf4b 100644 --- a/packages/payload/src/config/types.ts +++ b/packages/payload/src/config/types.ts @@ -149,6 +149,11 @@ export type InitOptions = { */ local?: boolean + /** + * A previously instantiated logger instance. Must conform to the PayloadLogger interface which uses Pino + * This allows you to bring your own logger instance and let payload use it + */ + logger?: PayloadLogger loggerDestination?: DestinationStream /** * Specify options for the built-in Pino logger that Payload uses for internal logging. @@ -156,11 +161,6 @@ export type InitOptions = { * See Pino Docs for options: https://getpino.io/#/docs/api?id=options */ loggerOptions?: LoggerOptions - /** - * A previously instantiated logger instance. Must conform to the PayloadLogger interface which uses Pino - * This allows you to bring your own logger instance and let payload use it - */ - logger?: PayloadLogger /** * A function that is called immediately following startup that receives the Payload instance as it's only argument. @@ -635,6 +635,12 @@ export type Config = { i18n?: i18nInitOptions /** Automatically index all sortable top-level fields in the database to improve sort performance and add database compatibility for Azure Cosmos and similar. */ indexSortableFields?: boolean + /** + * Disable JOI validation + * + * @default true // enabled by default + */ + joiValidation?: boolean /** * Translate your content to different languages/locales. * diff --git a/packages/payload/src/config/validate.ts b/packages/payload/src/config/validate.ts index ab7a4a7965..3194369e8b 100644 --- a/packages/payload/src/config/validate.ts +++ b/packages/payload/src/config/validate.ts @@ -83,6 +83,10 @@ const validateSchema = async ( abortEarly: false, }) + if (!config?.joiValidation) { + return config + } + const nestedErrors = [ ...(await validateCollections(config.collections)), ...validateGlobals(config.globals),