diff --git a/src/collections/sanitize.js b/src/collections/sanitize.js index f1dc7b1024..0a8d066e54 100644 --- a/src/collections/sanitize.js +++ b/src/collections/sanitize.js @@ -257,7 +257,8 @@ const sanitizeCollection = (collections, collection) => { // Sanitize fields // ///////////////////////////////// - sanitized.fields = sanitizeFields(collections, sanitized.fields); + const validRelationships = collections.map((c) => c.slug); + sanitized.fields = sanitizeFields(validRelationships, sanitized.fields); return sanitized; }; diff --git a/src/fields/sanitize.js b/src/fields/sanitize.js index 6bab55fded..11df858afe 100644 --- a/src/fields/sanitize.js +++ b/src/fields/sanitize.js @@ -1,11 +1,9 @@ const { MissingFieldType, InvalidFieldRelationship } = require('../errors'); const validations = require('./validations'); -const sanitizeFields = (collections, fields) => { +const sanitizeFields = (validRelationships, fields) => { if (!fields) return []; - const validSlugs = collections.map((c) => c.slug); - return fields.map((unsanitizedField) => { const field = { ...unsanitizedField }; @@ -13,14 +11,14 @@ const sanitizeFields = (collections, fields) => { if (field.type === 'blocks') { field.blocks.forEach((blockCollection) => { - sanitizeFields(collections, blockCollection.fields); + sanitizeFields(validRelationships, blockCollection.fields); }); } if (field.type === 'relationship') { const relationships = Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]; relationships.forEach((relationship) => { - if (!validSlugs.includes(relationship)) { + if (!validRelationships.includes(relationship)) { throw new InvalidFieldRelationship(field, relationship); } }); diff --git a/src/globals/sanitize.js b/src/globals/sanitize.js index 3792610b88..1d50e42f3c 100644 --- a/src/globals/sanitize.js +++ b/src/globals/sanitize.js @@ -1,7 +1,7 @@ const { MissingGlobalLabel } = require('../errors'); const sanitizeFields = require('../fields/sanitize'); -const sanitizeGlobals = (globals) => { +const sanitizeGlobals = (collections, globals) => { // ///////////////////////////////// // Ensure globals are valid // ///////////////////////////////// @@ -33,7 +33,8 @@ const sanitizeGlobals = (globals) => { // Sanitize fields // ///////////////////////////////// - sanitizedGlobal.fields = sanitizeFields(global.fields); + const validRelationships = collections.map((c) => c.slug); + sanitizedGlobal.fields = sanitizeFields(validRelationships, global.fields); return sanitizedGlobal; }); diff --git a/src/utilities/sanitizeConfig.js b/src/utilities/sanitizeConfig.js index ee2228e6c0..d34574a82f 100644 --- a/src/utilities/sanitizeConfig.js +++ b/src/utilities/sanitizeConfig.js @@ -10,7 +10,7 @@ const sanitizeConfig = (config) => { sanitizedConfig.collections = sanitizedConfig.collections.map((collection) => sanitizeCollection(sanitizedConfig.collections, collection)); if (sanitizedConfig.globals) { - sanitizedConfig.globals = sanitizeGlobals(sanitizedConfig.globals); + sanitizedConfig.globals = sanitizeGlobals(sanitizedConfig.collections, sanitizedConfig.globals); } else { sanitizedConfig.globals = []; }