payload 3.0.0-beta.60 → 3.0.0-beta.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/dist/admin/RichText.d.ts +6 -6
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/elements/Cell.d.ts +2 -2
  5. package/dist/admin/elements/Cell.d.ts.map +1 -1
  6. package/dist/admin/elements/Cell.js.map +1 -1
  7. package/dist/admin/elements/DatePicker.d.ts +7 -7
  8. package/dist/admin/elements/DatePicker.d.ts.map +1 -1
  9. package/dist/admin/elements/DatePicker.js.map +1 -1
  10. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  11. package/dist/auth/getFieldsToSign.js +1 -1
  12. package/dist/auth/getFieldsToSign.js.map +1 -1
  13. package/dist/auth/index.d.ts +2 -2
  14. package/dist/auth/index.d.ts.map +1 -1
  15. package/dist/auth/index.js +2 -2
  16. package/dist/auth/index.js.map +1 -1
  17. package/dist/auth/operations/local/login.d.ts +2 -2
  18. package/dist/auth/operations/local/login.d.ts.map +1 -1
  19. package/dist/auth/operations/local/login.js.map +1 -1
  20. package/dist/auth/operations/login.d.ts +2 -2
  21. package/dist/auth/operations/login.d.ts.map +1 -1
  22. package/dist/auth/operations/login.js.map +1 -1
  23. package/dist/auth/operations/registerFirstUser.d.ts +1 -1
  24. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  25. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  26. package/dist/auth/strategies/jwt.js.map +1 -1
  27. package/dist/auth/strategies/local/authenticate.d.ts +1 -1
  28. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  29. package/dist/auth/strategies/local/authenticate.js.map +1 -1
  30. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts +1 -1
  31. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  32. package/dist/auth/strategies/local/incrementLoginAttempts.js.map +1 -1
  33. package/dist/auth/strategies/local/resetLoginAttempts.d.ts +1 -1
  34. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  35. package/dist/auth/strategies/local/resetLoginAttempts.js.map +1 -1
  36. package/dist/bin/loader/compile.d.ts +2 -2
  37. package/dist/bin/loader/compile.d.ts.map +1 -1
  38. package/dist/bin/loader/compile.js.map +1 -1
  39. package/dist/collections/config/client.d.ts +21 -21
  40. package/dist/collections/config/client.d.ts.map +1 -1
  41. package/dist/collections/config/client.js.map +1 -1
  42. package/dist/collections/config/sanitize.js +10 -10
  43. package/dist/collections/config/sanitize.js.map +1 -1
  44. package/dist/collections/operations/delete.d.ts.map +1 -1
  45. package/dist/collections/operations/delete.js +1 -1
  46. package/dist/collections/operations/delete.js.map +1 -1
  47. package/dist/collections/operations/findByID.d.ts.map +1 -1
  48. package/dist/collections/operations/findByID.js +1 -1
  49. package/dist/collections/operations/findByID.js.map +1 -1
  50. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  51. package/dist/collections/operations/findVersionByID.js +1 -1
  52. package/dist/collections/operations/findVersionByID.js.map +1 -1
  53. package/dist/collections/operations/local/delete.d.ts +4 -4
  54. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  55. package/dist/collections/operations/local/delete.js.map +1 -1
  56. package/dist/collections/operations/local/update.d.ts +4 -4
  57. package/dist/collections/operations/local/update.d.ts.map +1 -1
  58. package/dist/collections/operations/local/update.js.map +1 -1
  59. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  60. package/dist/collections/operations/restoreVersion.js +1 -1
  61. package/dist/collections/operations/restoreVersion.js.map +1 -1
  62. package/dist/collections/operations/utils.d.ts +2 -2
  63. package/dist/collections/operations/utils.d.ts.map +1 -1
  64. package/dist/collections/operations/utils.js.map +1 -1
  65. package/dist/config/client.d.ts +4 -4
  66. package/dist/config/client.d.ts.map +1 -1
  67. package/dist/config/client.js.map +1 -1
  68. package/dist/config/find.d.ts.map +1 -1
  69. package/dist/config/find.js +0 -1
  70. package/dist/config/find.js.map +1 -1
  71. package/dist/config/types.d.ts +13 -13
  72. package/dist/config/types.d.ts.map +1 -1
  73. package/dist/config/types.js.map +1 -1
  74. package/dist/database/createDatabaseAdapter.d.ts.map +1 -1
  75. package/dist/database/createDatabaseAdapter.js +1 -1
  76. package/dist/database/createDatabaseAdapter.js.map +1 -1
  77. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  78. package/dist/database/getLocalizedPaths.js +0 -1
  79. package/dist/database/getLocalizedPaths.js.map +1 -1
  80. package/dist/database/migrations/createMigration.d.ts.map +1 -1
  81. package/dist/database/migrations/createMigration.js +1 -1
  82. package/dist/database/migrations/createMigration.js.map +1 -1
  83. package/dist/database/migrations/migrate.d.ts.map +1 -1
  84. package/dist/database/migrations/migrate.js +2 -2
  85. package/dist/database/migrations/migrate.js.map +1 -1
  86. package/dist/database/migrations/migrateDown.d.ts.map +1 -1
  87. package/dist/database/migrations/migrateDown.js +1 -1
  88. package/dist/database/migrations/migrateDown.js.map +1 -1
  89. package/dist/database/migrations/migrateRefresh.d.ts.map +1 -1
  90. package/dist/database/migrations/migrateRefresh.js +1 -1
  91. package/dist/database/migrations/migrateRefresh.js.map +1 -1
  92. package/dist/database/migrations/migrateReset.d.ts.map +1 -1
  93. package/dist/database/migrations/migrateReset.js +1 -1
  94. package/dist/database/migrations/migrateReset.js.map +1 -1
  95. package/dist/database/migrations/migrateStatus.js +0 -1
  96. package/dist/database/migrations/migrateStatus.js.map +1 -1
  97. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  98. package/dist/database/queryValidation/validateQueryPaths.js +1 -1
  99. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  100. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  101. package/dist/database/queryValidation/validateSearchParams.js +0 -3
  102. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  103. package/dist/database/types.d.ts +6 -6
  104. package/dist/database/types.d.ts.map +1 -1
  105. package/dist/database/types.js.map +1 -1
  106. package/dist/errors/APIError.d.ts.map +1 -1
  107. package/dist/errors/APIError.js +1 -1
  108. package/dist/errors/APIError.js.map +1 -1
  109. package/dist/errors/ReservedFieldName.d.ts +6 -0
  110. package/dist/errors/ReservedFieldName.d.ts.map +1 -0
  111. package/dist/errors/ReservedFieldName.js +8 -0
  112. package/dist/errors/ReservedFieldName.js.map +1 -0
  113. package/dist/errors/index.d.ts +1 -0
  114. package/dist/errors/index.d.ts.map +1 -1
  115. package/dist/errors/index.js +1 -0
  116. package/dist/errors/index.js.map +1 -1
  117. package/dist/exports/shared.d.ts +1 -1
  118. package/dist/exports/shared.d.ts.map +1 -1
  119. package/dist/exports/shared.js +1 -1
  120. package/dist/exports/shared.js.map +1 -1
  121. package/dist/fields/config/client.d.ts +448 -448
  122. package/dist/fields/config/client.d.ts.map +1 -1
  123. package/dist/fields/config/sanitize.d.ts +1 -0
  124. package/dist/fields/config/sanitize.d.ts.map +1 -1
  125. package/dist/fields/config/sanitize.js +11 -1
  126. package/dist/fields/config/sanitize.js.map +1 -1
  127. package/dist/fields/config/sanitize.spec.js +71 -55
  128. package/dist/fields/config/sanitize.spec.js.map +1 -1
  129. package/dist/fields/config/types.d.ts +98 -92
  130. package/dist/fields/config/types.d.ts.map +1 -1
  131. package/dist/fields/config/types.js +1 -1
  132. package/dist/fields/config/types.js.map +1 -1
  133. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  134. package/dist/fields/hooks/afterChange/promise.js +1 -1
  135. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  136. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  137. package/dist/fields/hooks/afterRead/promise.js +1 -1
  138. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  139. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  140. package/dist/fields/hooks/beforeValidate/promise.js +1 -1
  141. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  142. package/dist/fields/validations.d.ts +12 -12
  143. package/dist/fields/validations.d.ts.map +1 -1
  144. package/dist/fields/validations.js +1 -1
  145. package/dist/fields/validations.js.map +1 -1
  146. package/dist/fields/validations.spec.js +15 -15
  147. package/dist/fields/validations.spec.js.map +1 -1
  148. package/dist/globals/config/client.d.ts +4 -4
  149. package/dist/globals/config/client.d.ts.map +1 -1
  150. package/dist/globals/config/client.js.map +1 -1
  151. package/dist/globals/config/sanitize.d.ts.map +1 -1
  152. package/dist/globals/config/sanitize.js +8 -7
  153. package/dist/globals/config/sanitize.js.map +1 -1
  154. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  155. package/dist/globals/operations/findVersionByID.js +1 -1
  156. package/dist/globals/operations/findVersionByID.js.map +1 -1
  157. package/dist/index.d.ts +78 -78
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/index.js +60 -59
  160. package/dist/index.js.map +1 -1
  161. package/dist/preferences/types.d.ts +2 -2
  162. package/dist/preferences/types.d.ts.map +1 -1
  163. package/dist/preferences/types.js.map +1 -1
  164. package/dist/types/index.d.ts +1 -1
  165. package/dist/types/index.d.ts.map +1 -1
  166. package/dist/types/index.js.map +1 -1
  167. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  168. package/dist/uploads/deleteAssociatedFiles.js +0 -2
  169. package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
  170. package/dist/uploads/generateFileData.js +3 -3
  171. package/dist/uploads/generateFileData.js.map +1 -1
  172. package/dist/uploads/getBaseFields.js +2 -2
  173. package/dist/uploads/getBaseFields.js.map +1 -1
  174. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  175. package/dist/uploads/getSafeFilename.js +0 -1
  176. package/dist/uploads/getSafeFilename.js.map +1 -1
  177. package/dist/uploads/types.d.ts +4 -4
  178. package/dist/uploads/types.d.ts.map +1 -1
  179. package/dist/uploads/types.js.map +1 -1
  180. package/dist/utilities/configToJSONSchema.spec.js +37 -37
  181. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  182. package/dist/utilities/convertData.d.ts.map +1 -1
  183. package/dist/utilities/convertData.js +1 -1
  184. package/dist/utilities/convertData.js.map +1 -1
  185. package/dist/utilities/getEntityPolicies.js.map +1 -1
  186. package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
  187. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  188. package/dist/versions/getLatestGlobalVersion.js +0 -1
  189. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  190. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/fields/config/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/fields/config/client.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ type Args = {
21
21
  */
22
22
  validRelationships: null | string[];
23
23
  };
24
+ export declare const reservedFieldNames: string[];
24
25
  export declare const sanitizeFields: ({ config, existingFieldNames, fields, requireFieldLevelRichTextEditor, richTextSanitizationPromises, validRelationships, }: Args) => Promise<Field[]>;
25
26
  export {};
26
27
  //# sourceMappingURL=sanitize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAiBvC,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC;;;OAGG;IACH,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAEhF;;;OAGG;IACH,kBAAkB,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,+HAOxB,IAAI,KAAG,OAAO,CAAC,KAAK,EAAE,CAyLxB,CAAA"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAkBvC,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC;;;OAGG;IACH,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAEhF;;;OAGG;IACH,kBAAkB,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,kBAAkB,UAAkC,CAAA;AAEjE,eAAO,MAAM,cAAc,+HAOxB,IAAI,KAAG,OAAO,CAAC,KAAK,EAAE,CA8LxB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { MissingEditorProp } from '../../errors/MissingEditorProp.js';
2
- import { DuplicateFieldName, InvalidFieldName, InvalidFieldRelationship, MissingFieldType } from '../../errors/index.js';
2
+ import { DuplicateFieldName, InvalidFieldName, InvalidFieldRelationship, MissingFieldType, ReservedFieldName } from '../../errors/index.js';
3
3
  import { deepMerge } from '../../utilities/deepMerge.js';
4
4
  import { formatLabels, toWords } from '../../utilities/formatLabels.js';
5
5
  import { baseBlockFields } from '../baseFields/baseBlockFields.js';
@@ -7,6 +7,12 @@ import { baseIDField } from '../baseFields/baseIDField.js';
7
7
  import { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js';
8
8
  import validations from '../validations.js';
9
9
  import { fieldAffectsData, tabHasName } from './types.js';
10
+ export const reservedFieldNames = [
11
+ '__v',
12
+ 'salt',
13
+ 'hash',
14
+ 'file'
15
+ ];
10
16
  export const sanitizeFields = async ({ config, existingFieldNames = new Set(), fields, requireFieldLevelRichTextEditor = false, richTextSanitizationPromises, validRelationships })=>{
11
17
  if (!fields) return [];
12
18
  for(let i = 0; i < fields.length; i++){
@@ -16,6 +22,10 @@ export const sanitizeFields = async ({ config, existingFieldNames = new Set(), f
16
22
  if (fieldAffectsData(field) && field.name.includes('.')) {
17
23
  throw new InvalidFieldName(field, field.name);
18
24
  }
25
+ // assert that field names are not one of reserved names
26
+ if (fieldAffectsData(field) && reservedFieldNames.includes(field.name)) {
27
+ throw new ReservedFieldName(field, field.name);
28
+ }
19
29
  // Auto-label
20
30
  if ('name' in field && field.name && typeof field.label !== 'object' && typeof field.label !== 'string' && typeof field.label !== 'function' && field.label !== false) {
21
31
  field.label = toWords(field.name);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/config/sanitize.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { Field } from './types.js'\n\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport {\n DuplicateFieldName,\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingFieldType,\n} from '../../errors/index.js'\nimport { deepMerge } from '../../utilities/deepMerge.js'\nimport { formatLabels, toWords } from '../../utilities/formatLabels.js'\nimport { baseBlockFields } from '../baseFields/baseBlockFields.js'\nimport { baseIDField } from '../baseFields/baseIDField.js'\nimport { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js'\nimport validations from '../validations.js'\nimport { fieldAffectsData, tabHasName } from './types.js'\n\ntype Args = {\n config: Config\n existingFieldNames?: Set<string>\n fields: Field[]\n /**\n * If true, a richText field will require an editor property to be set, as the sanitizeFields function will not add it from the payload config if not present.\n *\n * @default false\n */\n requireFieldLevelRichTextEditor?: boolean\n /**\n * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises\n * so that you can sanitize them together, after the config has been sanitized.\n */\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>\n\n /**\n * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.\n * This validation will be skipped if validRelationships is null.\n */\n validRelationships: null | string[]\n}\n\nexport const sanitizeFields = async ({\n config,\n existingFieldNames = new Set(),\n fields,\n requireFieldLevelRichTextEditor = false,\n richTextSanitizationPromises,\n validRelationships,\n}: Args): Promise<Field[]> => {\n if (!fields) return []\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]\n\n if (!field.type) throw new MissingFieldType(field)\n\n // assert that field names do not contain forbidden characters\n if (fieldAffectsData(field) && field.name.includes('.')) {\n throw new InvalidFieldName(field, field.name)\n }\n\n // Auto-label\n if (\n 'name' in field &&\n field.name &&\n typeof field.label !== 'object' &&\n typeof field.label !== 'string' &&\n typeof field.label !== 'function' &&\n field.label !== false\n ) {\n field.label = toWords(field.name)\n }\n\n if (\n field.type === 'checkbox' &&\n typeof field.defaultValue === 'undefined' &&\n field.required === true\n ) {\n field.defaultValue = false\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (validRelationships) {\n const relationships = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n relationships.forEach((relationship: string) => {\n if (!validRelationships.includes(relationship)) {\n throw new InvalidFieldRelationship(field, relationship)\n }\n })\n }\n\n if (field.type === 'relationship') {\n if (field.min && !field.minRows) {\n console.warn(\n `(payload): The \"min\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"minRows\" instead.`,\n )\n }\n if (field.max && !field.maxRows) {\n console.warn(\n `(payload): The \"max\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"maxRows\" instead.`,\n )\n }\n field.minRows = field.minRows || field.min\n field.maxRows = field.maxRows || field.max\n }\n }\n\n if (field.type === 'blocks' && field.blocks) {\n field.blocks = field.blocks.map((block) => ({\n ...block,\n fields: block.fields.concat(baseBlockFields),\n }))\n }\n\n if (field.type === 'array' && field.fields) {\n field.fields.push(baseIDField)\n }\n\n if ((field.type === 'blocks' || field.type === 'array') && field.label) {\n field.labels = field.labels || formatLabels(field.name)\n }\n\n if (fieldAffectsData(field)) {\n if (existingFieldNames.has(field.name)) {\n throw new DuplicateFieldName(field.name)\n } else if (!['blockName', 'id'].includes(field.name)) {\n existingFieldNames.add(field.name)\n }\n\n if (field.localized && !config.localization) delete field.localized\n\n if (typeof field.validate === 'undefined') {\n const defaultValidate = validations[field.type]\n if (defaultValidate) {\n field.validate = (val, options) => defaultValidate(val, { ...field, ...options })\n } else {\n field.validate = () => true\n }\n }\n\n if (!field.hooks) field.hooks = {}\n if (!field.access) field.access = {}\n\n setDefaultBeforeDuplicate(field)\n }\n\n if (!field.admin) {\n field.admin = {}\n }\n\n // Make sure that the richText field has an editor\n if (field.type === 'richText') {\n const sanitizeRichText = async (_config: SanitizedConfig) => {\n if (!field.editor) {\n if (_config.editor && !requireFieldLevelRichTextEditor) {\n // config.editor should be sanitized at this point\n field.editor = _config.editor\n } else {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n }\n\n if (typeof field.editor === 'function') {\n field.editor = await field.editor({\n config: _config,\n isRoot: requireFieldLevelRichTextEditor,\n })\n }\n\n if (field.editor.i18n && Object.keys(field.editor.i18n).length >= 0) {\n config.i18n.translations = deepMerge(config.i18n.translations, field.editor.i18n)\n }\n }\n if (richTextSanitizationPromises) {\n richTextSanitizationPromises.push(sanitizeRichText)\n } else {\n await sanitizeRichText(config as unknown as SanitizedConfig)\n }\n }\n\n if ('fields' in field && field.fields) {\n field.fields = await sanitizeFields({\n config,\n existingFieldNames: fieldAffectsData(field) ? new Set() : existingFieldNames,\n fields: field.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n\n if (field.type === 'tabs') {\n for (let j = 0; j < field.tabs.length; j++) {\n const tab = field.tabs[j]\n if (tabHasName(tab) && typeof tab.label === 'undefined') {\n tab.label = toWords(tab.name)\n }\n\n tab.fields = await sanitizeFields({\n config,\n existingFieldNames: tabHasName(tab) ? new Set() : existingFieldNames,\n fields: tab.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n field.tabs[j] = tab\n }\n }\n\n if ('blocks' in field && field.blocks) {\n for (let j = 0; j < field.blocks.length; j++) {\n const block = field.blocks[j]\n block.labels = !block.labels ? formatLabels(block.slug) : block.labels\n\n block.fields = await sanitizeFields({\n config,\n existingFieldNames: new Set(),\n fields: block.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n field.blocks[j] = block\n }\n }\n\n fields[i] = field\n }\n\n return fields\n}\n"],"names":["MissingEditorProp","DuplicateFieldName","InvalidFieldName","InvalidFieldRelationship","MissingFieldType","deepMerge","formatLabels","toWords","baseBlockFields","baseIDField","setDefaultBeforeDuplicate","validations","fieldAffectsData","tabHasName","sanitizeFields","config","existingFieldNames","Set","fields","requireFieldLevelRichTextEditor","richTextSanitizationPromises","validRelationships","i","length","field","type","name","includes","label","defaultValue","required","relationships","Array","isArray","relationTo","forEach","relationship","min","minRows","console","warn","max","maxRows","blocks","map","block","concat","push","labels","has","add","localized","localization","validate","defaultValidate","val","options","hooks","access","admin","sanitizeRichText","_config","editor","isRoot","i18n","Object","keys","translations","j","tabs","tab","slug"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/config/sanitize.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { Field } from './types.js'\n\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport {\n DuplicateFieldName,\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingFieldType,\n ReservedFieldName,\n} from '../../errors/index.js'\nimport { deepMerge } from '../../utilities/deepMerge.js'\nimport { formatLabels, toWords } from '../../utilities/formatLabels.js'\nimport { baseBlockFields } from '../baseFields/baseBlockFields.js'\nimport { baseIDField } from '../baseFields/baseIDField.js'\nimport { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js'\nimport validations from '../validations.js'\nimport { fieldAffectsData, tabHasName } from './types.js'\n\ntype Args = {\n config: Config\n existingFieldNames?: Set<string>\n fields: Field[]\n /**\n * If true, a richText field will require an editor property to be set, as the sanitizeFields function will not add it from the payload config if not present.\n *\n * @default false\n */\n requireFieldLevelRichTextEditor?: boolean\n /**\n * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises\n * so that you can sanitize them together, after the config has been sanitized.\n */\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>\n\n /**\n * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.\n * This validation will be skipped if validRelationships is null.\n */\n validRelationships: null | string[]\n}\n\nexport const reservedFieldNames = ['__v', 'salt', 'hash', 'file']\n\nexport const sanitizeFields = async ({\n config,\n existingFieldNames = new Set(),\n fields,\n requireFieldLevelRichTextEditor = false,\n richTextSanitizationPromises,\n validRelationships,\n}: Args): Promise<Field[]> => {\n if (!fields) return []\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]\n\n if (!field.type) throw new MissingFieldType(field)\n\n // assert that field names do not contain forbidden characters\n if (fieldAffectsData(field) && field.name.includes('.')) {\n throw new InvalidFieldName(field, field.name)\n }\n\n // assert that field names are not one of reserved names\n if (fieldAffectsData(field) && reservedFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n\n // Auto-label\n if (\n 'name' in field &&\n field.name &&\n typeof field.label !== 'object' &&\n typeof field.label !== 'string' &&\n typeof field.label !== 'function' &&\n field.label !== false\n ) {\n field.label = toWords(field.name)\n }\n\n if (\n field.type === 'checkbox' &&\n typeof field.defaultValue === 'undefined' &&\n field.required === true\n ) {\n field.defaultValue = false\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n if (validRelationships) {\n const relationships = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n relationships.forEach((relationship: string) => {\n if (!validRelationships.includes(relationship)) {\n throw new InvalidFieldRelationship(field, relationship)\n }\n })\n }\n\n if (field.type === 'relationship') {\n if (field.min && !field.minRows) {\n console.warn(\n `(payload): The \"min\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"minRows\" instead.`,\n )\n }\n if (field.max && !field.maxRows) {\n console.warn(\n `(payload): The \"max\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"maxRows\" instead.`,\n )\n }\n field.minRows = field.minRows || field.min\n field.maxRows = field.maxRows || field.max\n }\n }\n\n if (field.type === 'blocks' && field.blocks) {\n field.blocks = field.blocks.map((block) => ({\n ...block,\n fields: block.fields.concat(baseBlockFields),\n }))\n }\n\n if (field.type === 'array' && field.fields) {\n field.fields.push(baseIDField)\n }\n\n if ((field.type === 'blocks' || field.type === 'array') && field.label) {\n field.labels = field.labels || formatLabels(field.name)\n }\n\n if (fieldAffectsData(field)) {\n if (existingFieldNames.has(field.name)) {\n throw new DuplicateFieldName(field.name)\n } else if (!['blockName', 'id'].includes(field.name)) {\n existingFieldNames.add(field.name)\n }\n\n if (field.localized && !config.localization) delete field.localized\n\n if (typeof field.validate === 'undefined') {\n const defaultValidate = validations[field.type]\n if (defaultValidate) {\n field.validate = (val, options) => defaultValidate(val, { ...field, ...options })\n } else {\n field.validate = () => true\n }\n }\n\n if (!field.hooks) field.hooks = {}\n if (!field.access) field.access = {}\n\n setDefaultBeforeDuplicate(field)\n }\n\n if (!field.admin) {\n field.admin = {}\n }\n\n // Make sure that the richText field has an editor\n if (field.type === 'richText') {\n const sanitizeRichText = async (_config: SanitizedConfig) => {\n if (!field.editor) {\n if (_config.editor && !requireFieldLevelRichTextEditor) {\n // config.editor should be sanitized at this point\n field.editor = _config.editor\n } else {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n }\n\n if (typeof field.editor === 'function') {\n field.editor = await field.editor({\n config: _config,\n isRoot: requireFieldLevelRichTextEditor,\n })\n }\n\n if (field.editor.i18n && Object.keys(field.editor.i18n).length >= 0) {\n config.i18n.translations = deepMerge(config.i18n.translations, field.editor.i18n)\n }\n }\n if (richTextSanitizationPromises) {\n richTextSanitizationPromises.push(sanitizeRichText)\n } else {\n await sanitizeRichText(config as unknown as SanitizedConfig)\n }\n }\n\n if ('fields' in field && field.fields) {\n field.fields = await sanitizeFields({\n config,\n existingFieldNames: fieldAffectsData(field) ? new Set() : existingFieldNames,\n fields: field.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n\n if (field.type === 'tabs') {\n for (let j = 0; j < field.tabs.length; j++) {\n const tab = field.tabs[j]\n if (tabHasName(tab) && typeof tab.label === 'undefined') {\n tab.label = toWords(tab.name)\n }\n\n tab.fields = await sanitizeFields({\n config,\n existingFieldNames: tabHasName(tab) ? new Set() : existingFieldNames,\n fields: tab.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n field.tabs[j] = tab\n }\n }\n\n if ('blocks' in field && field.blocks) {\n for (let j = 0; j < field.blocks.length; j++) {\n const block = field.blocks[j]\n block.labels = !block.labels ? formatLabels(block.slug) : block.labels\n\n block.fields = await sanitizeFields({\n config,\n existingFieldNames: new Set(),\n fields: block.fields,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n field.blocks[j] = block\n }\n }\n\n fields[i] = field\n }\n\n return fields\n}\n"],"names":["MissingEditorProp","DuplicateFieldName","InvalidFieldName","InvalidFieldRelationship","MissingFieldType","ReservedFieldName","deepMerge","formatLabels","toWords","baseBlockFields","baseIDField","setDefaultBeforeDuplicate","validations","fieldAffectsData","tabHasName","reservedFieldNames","sanitizeFields","config","existingFieldNames","Set","fields","requireFieldLevelRichTextEditor","richTextSanitizationPromises","validRelationships","i","length","field","type","name","includes","label","defaultValue","required","relationships","Array","isArray","relationTo","forEach","relationship","min","minRows","console","warn","max","maxRows","blocks","map","block","concat","push","labels","has","add","localized","localization","validate","defaultValidate","val","options","hooks","access","admin","sanitizeRichText","_config","editor","isRoot","i18n","Object","keys","translations","j","tabs","tab","slug"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { InvalidFieldName, InvalidFieldRelationship, MissingFieldType } from '../../errors/index.js';
1
+ import { InvalidFieldName, InvalidFieldRelationship, MissingFieldType, ReservedFieldName } from '../../errors/index.js';
2
2
  import { sanitizeFields } from './sanitize.js';
3
3
  describe('sanitizeFields', ()=>{
4
4
  const config = {};
@@ -6,8 +6,8 @@ describe('sanitizeFields', ()=>{
6
6
  const fields = [
7
7
  // @ts-expect-error
8
8
  {
9
- label: 'some-collection',
10
- name: 'Some Collection'
9
+ name: 'Some Collection',
10
+ label: 'some-collection'
11
11
  }
12
12
  ];
13
13
  await expect(async ()=>{
@@ -21,9 +21,9 @@ describe('sanitizeFields', ()=>{
21
21
  it('should throw on invalid field name', async ()=>{
22
22
  const fields = [
23
23
  {
24
- label: 'some.collection',
25
24
  name: 'some.collection',
26
- type: 'text'
25
+ type: 'text',
26
+ label: 'some.collection'
27
27
  }
28
28
  ];
29
29
  await expect(async ()=>{
@@ -34,6 +34,22 @@ describe('sanitizeFields', ()=>{
34
34
  });
35
35
  }).rejects.toThrow(InvalidFieldName);
36
36
  });
37
+ it('should throw on a reserved field name', async ()=>{
38
+ const fields = [
39
+ {
40
+ name: 'hash',
41
+ type: 'text',
42
+ label: 'hash'
43
+ }
44
+ ];
45
+ await expect(async ()=>{
46
+ await sanitizeFields({
47
+ config,
48
+ fields,
49
+ validRelationships: []
50
+ });
51
+ }).rejects.toThrow(ReservedFieldName);
52
+ });
37
53
  describe('auto-labeling', ()=>{
38
54
  it('should populate label if missing', async ()=>{
39
55
  const fields = [
@@ -54,9 +70,9 @@ describe('sanitizeFields', ()=>{
54
70
  it('should allow auto-label override', async ()=>{
55
71
  const fields = [
56
72
  {
57
- label: 'Do not label',
58
73
  name: 'someField',
59
- type: 'text'
74
+ type: 'text',
75
+ label: 'Do not label'
60
76
  }
61
77
  ];
62
78
  const sanitizedField = (await sanitizeFields({
@@ -72,9 +88,9 @@ describe('sanitizeFields', ()=>{
72
88
  it('should allow label opt-out', async ()=>{
73
89
  const fields = [
74
90
  {
75
- label: false,
76
91
  name: 'someField',
77
- type: 'text'
92
+ type: 'text',
93
+ label: false
78
94
  }
79
95
  ];
80
96
  const sanitizedField = (await sanitizeFields({
@@ -88,15 +104,15 @@ describe('sanitizeFields', ()=>{
88
104
  });
89
105
  it('should allow label opt-out for arrays', async ()=>{
90
106
  const arrayField = {
107
+ name: 'items',
108
+ type: 'array',
91
109
  fields: [
92
110
  {
93
111
  name: 'itemName',
94
112
  type: 'text'
95
113
  }
96
114
  ],
97
- label: false,
98
- name: 'items',
99
- type: 'array'
115
+ label: false
100
116
  };
101
117
  const sanitizedField = (await sanitizeFields({
102
118
  config,
@@ -113,20 +129,20 @@ describe('sanitizeFields', ()=>{
113
129
  it('should allow label opt-out for blocks', async ()=>{
114
130
  const fields = [
115
131
  {
132
+ name: 'noLabelBlock',
133
+ type: 'blocks',
116
134
  blocks: [
117
135
  {
136
+ slug: 'number',
118
137
  fields: [
119
138
  {
120
139
  name: 'testNumber',
121
140
  type: 'number'
122
141
  }
123
- ],
124
- slug: 'number'
142
+ ]
125
143
  }
126
144
  ],
127
- label: false,
128
- name: 'noLabelBlock',
129
- type: 'blocks'
145
+ label: false
130
146
  }
131
147
  ];
132
148
  const sanitizedField = (await sanitizeFields({
@@ -143,14 +159,14 @@ describe('sanitizeFields', ()=>{
143
159
  it('should label arrays with plural and singular', async ()=>{
144
160
  const fields = [
145
161
  {
162
+ name: 'items',
163
+ type: 'array',
146
164
  fields: [
147
165
  {
148
166
  name: 'itemName',
149
167
  type: 'text'
150
168
  }
151
- ],
152
- name: 'items',
153
- type: 'array'
169
+ ]
154
170
  }
155
171
  ];
156
172
  const sanitizedField = (await sanitizeFields({
@@ -169,19 +185,19 @@ describe('sanitizeFields', ()=>{
169
185
  it('should label blocks with plural and singular', async ()=>{
170
186
  const fields = [
171
187
  {
188
+ name: 'specialBlock',
189
+ type: 'blocks',
172
190
  blocks: [
173
191
  {
192
+ slug: 'number',
174
193
  fields: [
175
194
  {
176
195
  name: 'testNumber',
177
196
  type: 'number'
178
197
  }
179
- ],
180
- slug: 'number'
198
+ ]
181
199
  }
182
- ],
183
- name: 'specialBlock',
184
- type: 'blocks'
200
+ ]
185
201
  }
186
202
  ];
187
203
  const sanitizedField = (await sanitizeFields({
@@ -206,10 +222,10 @@ describe('sanitizeFields', ()=>{
206
222
  ];
207
223
  const fields = [
208
224
  {
209
- label: 'my-relationship',
210
225
  name: 'My Relationship',
211
- relationTo: 'some-collection',
212
- type: 'relationship'
226
+ type: 'relationship',
227
+ label: 'my-relationship',
228
+ relationTo: 'some-collection'
213
229
  }
214
230
  ];
215
231
  await expect(async ()=>{
@@ -227,13 +243,13 @@ describe('sanitizeFields', ()=>{
227
243
  ];
228
244
  const fields = [
229
245
  {
230
- label: 'my-relationship',
231
246
  name: 'My Relationship',
247
+ type: 'relationship',
248
+ label: 'my-relationship',
232
249
  relationTo: [
233
250
  'some-collection',
234
251
  'another-collection'
235
- ],
236
- type: 'relationship'
252
+ ]
237
253
  }
238
254
  ];
239
255
  await expect(async ()=>{
@@ -249,24 +265,24 @@ describe('sanitizeFields', ()=>{
249
265
  'some-collection'
250
266
  ];
251
267
  const relationshipBlock = {
268
+ slug: 'relationshipBlock',
252
269
  fields: [
253
270
  {
254
- label: 'my-relationship',
255
271
  name: 'My Relationship',
256
- relationTo: 'some-collection',
257
- type: 'relationship'
272
+ type: 'relationship',
273
+ label: 'my-relationship',
274
+ relationTo: 'some-collection'
258
275
  }
259
- ],
260
- slug: 'relationshipBlock'
276
+ ]
261
277
  };
262
278
  const fields = [
263
279
  {
280
+ name: 'layout',
281
+ type: 'blocks',
264
282
  blocks: [
265
283
  relationshipBlock
266
284
  ],
267
- label: 'Layout Blocks',
268
- name: 'layout',
269
- type: 'blocks'
285
+ label: 'Layout Blocks'
270
286
  }
271
287
  ];
272
288
  await expect(async ()=>{
@@ -283,10 +299,10 @@ describe('sanitizeFields', ()=>{
283
299
  ];
284
300
  const fields = [
285
301
  {
286
- label: 'my-relationship',
287
302
  name: 'My Relationship',
288
- relationTo: 'not-valid',
289
- type: 'relationship'
303
+ type: 'relationship',
304
+ label: 'my-relationship',
305
+ relationTo: 'not-valid'
290
306
  }
291
307
  ];
292
308
  await expect(async ()=>{
@@ -304,13 +320,13 @@ describe('sanitizeFields', ()=>{
304
320
  ];
305
321
  const fields = [
306
322
  {
307
- label: 'my-relationship',
308
323
  name: 'My Relationship',
324
+ type: 'relationship',
325
+ label: 'my-relationship',
309
326
  relationTo: [
310
327
  'some-collection',
311
328
  'not-valid'
312
- ],
313
- type: 'relationship'
329
+ ]
314
330
  }
315
331
  ];
316
332
  await expect(async ()=>{
@@ -326,24 +342,24 @@ describe('sanitizeFields', ()=>{
326
342
  'some-collection'
327
343
  ];
328
344
  const relationshipBlock = {
345
+ slug: 'relationshipBlock',
329
346
  fields: [
330
347
  {
331
- label: 'my-relationship',
332
348
  name: 'My Relationship',
333
- relationTo: 'not-valid',
334
- type: 'relationship'
349
+ type: 'relationship',
350
+ label: 'my-relationship',
351
+ relationTo: 'not-valid'
335
352
  }
336
- ],
337
- slug: 'relationshipBlock'
353
+ ]
338
354
  };
339
355
  const fields = [
340
356
  {
357
+ name: 'layout',
358
+ type: 'blocks',
341
359
  blocks: [
342
360
  relationshipBlock
343
361
  ],
344
- label: 'Layout Blocks',
345
- name: 'layout',
346
- type: 'blocks'
362
+ label: 'Layout Blocks'
347
363
  }
348
364
  ];
349
365
  await expect(async ()=>{
@@ -358,8 +374,8 @@ describe('sanitizeFields', ()=>{
358
374
  const fields = [
359
375
  {
360
376
  name: 'My Checkbox',
361
- required: true,
362
- type: 'checkbox'
377
+ type: 'checkbox',
378
+ required: true
363
379
  }
364
380
  ];
365
381
  const sanitizedField = (await sanitizeFields({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/config/sanitize.spec.ts"],"sourcesContent":["import { Config } from '../../config/types.js'\nimport { InvalidFieldName, InvalidFieldRelationship, MissingFieldType } from '../../errors/index.js'\nimport { sanitizeFields } from './sanitize.js'\nimport type {\n ArrayField,\n Block,\n BlockField,\n CheckboxField,\n Field,\n NumberField,\n TextField,\n} from './types.js'\n\ndescribe('sanitizeFields', () => {\n const config = {} as Config\n it('should throw on missing type field', async () => {\n const fields: Field[] = [\n // @ts-expect-error\n {\n label: 'some-collection',\n name: 'Some Collection',\n },\n ]\n await expect(async () => {\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n }).rejects.toThrow(MissingFieldType)\n })\n it('should throw on invalid field name', async () => {\n const fields: Field[] = [\n {\n label: 'some.collection',\n name: 'some.collection',\n type: 'text',\n },\n ]\n await expect(async () => {\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n }).rejects.toThrow(InvalidFieldName)\n })\n\n describe('auto-labeling', () => {\n it('should populate label if missing', async () => {\n const fields: Field[] = [\n {\n name: 'someField',\n type: 'text',\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as TextField\n expect(sanitizedField.name).toStrictEqual('someField')\n expect(sanitizedField.label).toStrictEqual('Some Field')\n expect(sanitizedField.type).toStrictEqual('text')\n })\n it('should allow auto-label override', async () => {\n const fields: Field[] = [\n {\n label: 'Do not label',\n name: 'someField',\n type: 'text',\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as TextField\n expect(sanitizedField.name).toStrictEqual('someField')\n expect(sanitizedField.label).toStrictEqual('Do not label')\n expect(sanitizedField.type).toStrictEqual('text')\n })\n\n describe('opt-out', () => {\n it('should allow label opt-out', async () => {\n const fields: Field[] = [\n {\n label: false,\n name: 'someField',\n type: 'text',\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as TextField\n expect(sanitizedField.name).toStrictEqual('someField')\n expect(sanitizedField.label).toStrictEqual(false)\n expect(sanitizedField.type).toStrictEqual('text')\n })\n\n it('should allow label opt-out for arrays', async () => {\n const arrayField: ArrayField = {\n fields: [\n {\n name: 'itemName',\n type: 'text',\n },\n ],\n label: false,\n name: 'items',\n type: 'array',\n }\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields: [arrayField],\n validRelationships: [],\n })\n )[0] as ArrayField\n expect(sanitizedField.name).toStrictEqual('items')\n expect(sanitizedField.label).toStrictEqual(false)\n expect(sanitizedField.type).toStrictEqual('array')\n expect(sanitizedField.labels).toBeUndefined()\n })\n it('should allow label opt-out for blocks', async () => {\n const fields: Field[] = [\n {\n blocks: [\n {\n fields: [\n {\n name: 'testNumber',\n type: 'number',\n },\n ],\n slug: 'number',\n },\n ],\n label: false,\n name: 'noLabelBlock',\n type: 'blocks',\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as BlockField\n expect(sanitizedField.name).toStrictEqual('noLabelBlock')\n expect(sanitizedField.label).toStrictEqual(false)\n expect(sanitizedField.type).toStrictEqual('blocks')\n expect(sanitizedField.labels).toBeUndefined()\n })\n })\n\n it('should label arrays with plural and singular', async () => {\n const fields: Field[] = [\n {\n fields: [\n {\n name: 'itemName',\n type: 'text',\n },\n ],\n name: 'items',\n type: 'array',\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as ArrayField\n expect(sanitizedField.name).toStrictEqual('items')\n expect(sanitizedField.label).toStrictEqual('Items')\n expect(sanitizedField.type).toStrictEqual('array')\n expect(sanitizedField.labels).toMatchObject({ plural: 'Items', singular: 'Item' })\n })\n\n it('should label blocks with plural and singular', async () => {\n const fields: Field[] = [\n {\n blocks: [\n {\n fields: [{ name: 'testNumber', type: 'number' }],\n slug: 'number',\n },\n ],\n name: 'specialBlock',\n type: 'blocks',\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as BlockField\n expect(sanitizedField.name).toStrictEqual('specialBlock')\n expect(sanitizedField.label).toStrictEqual('Special Block')\n expect(sanitizedField.type).toStrictEqual('blocks')\n expect(sanitizedField.labels).toMatchObject({\n plural: 'Special Blocks',\n singular: 'Special Block',\n })\n expect((sanitizedField.blocks[0].fields[0] as NumberField).label).toStrictEqual('Test Number')\n })\n })\n\n describe('relationships', () => {\n it('should not throw on valid relationship', async () => {\n const validRelationships = ['some-collection']\n const fields: Field[] = [\n {\n label: 'my-relationship',\n name: 'My Relationship',\n relationTo: 'some-collection',\n type: 'relationship',\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).not.toThrow()\n })\n\n it('should not throw on valid relationship - multiple', async () => {\n const validRelationships = ['some-collection', 'another-collection']\n const fields: Field[] = [\n {\n label: 'my-relationship',\n name: 'My Relationship',\n relationTo: ['some-collection', 'another-collection'],\n type: 'relationship',\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).not.toThrow()\n })\n\n it('should not throw on valid relationship inside blocks', async () => {\n const validRelationships = ['some-collection']\n const relationshipBlock: Block = {\n fields: [\n {\n label: 'my-relationship',\n name: 'My Relationship',\n relationTo: 'some-collection',\n type: 'relationship',\n },\n ],\n slug: 'relationshipBlock',\n }\n const fields: Field[] = [\n {\n blocks: [relationshipBlock],\n label: 'Layout Blocks',\n name: 'layout',\n type: 'blocks',\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).not.toThrow()\n })\n\n it('should throw on invalid relationship', async () => {\n const validRelationships = ['some-collection']\n const fields: Field[] = [\n {\n label: 'my-relationship',\n name: 'My Relationship',\n relationTo: 'not-valid',\n type: 'relationship',\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).rejects.toThrow(InvalidFieldRelationship)\n })\n\n it('should throw on invalid relationship - multiple', async () => {\n const validRelationships = ['some-collection', 'another-collection']\n const fields: Field[] = [\n {\n label: 'my-relationship',\n name: 'My Relationship',\n relationTo: ['some-collection', 'not-valid'],\n type: 'relationship',\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).rejects.toThrow(InvalidFieldRelationship)\n })\n\n it('should throw on invalid relationship inside blocks', async () => {\n const validRelationships = ['some-collection']\n const relationshipBlock: Block = {\n fields: [\n {\n label: 'my-relationship',\n name: 'My Relationship',\n relationTo: 'not-valid',\n type: 'relationship',\n },\n ],\n slug: 'relationshipBlock',\n }\n const fields: Field[] = [\n {\n blocks: [relationshipBlock],\n label: 'Layout Blocks',\n name: 'layout',\n type: 'blocks',\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).rejects.toThrow(InvalidFieldRelationship)\n })\n\n it('should defaultValue of checkbox to false if required and undefined', async () => {\n const fields: Field[] = [\n {\n name: 'My Checkbox',\n required: true,\n type: 'checkbox',\n },\n ]\n\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as CheckboxField\n expect(sanitizedField.defaultValue).toStrictEqual(false)\n })\n\n it('should return empty field array if no fields', async () => {\n const sanitizedFields = await sanitizeFields({\n config,\n fields: [],\n validRelationships: [],\n })\n expect(sanitizedFields).toStrictEqual([])\n })\n })\n})\n"],"names":["InvalidFieldName","InvalidFieldRelationship","MissingFieldType","sanitizeFields","describe","config","it","fields","label","name","expect","validRelationships","rejects","toThrow","type","sanitizedField","toStrictEqual","arrayField","labels","toBeUndefined","blocks","slug","toMatchObject","plural","singular","relationTo","not","relationshipBlock","required","defaultValue","sanitizedFields"],"mappings":"AACA,SAASA,gBAAgB,EAAEC,wBAAwB,EAAEC,gBAAgB,QAAQ,wBAAuB;AACpG,SAASC,cAAc,QAAQ,gBAAe;AAW9CC,SAAS,kBAAkB;IACzB,MAAMC,SAAS,CAAC;IAChBC,GAAG,sCAAsC;QACvC,MAAMC,SAAkB;YACtB,mBAAmB;YACnB;gBACEC,OAAO;gBACPC,MAAM;YACR;SACD;QACD,MAAMC,OAAO;YACX,MAAMP,eAAe;gBACnBE;gBACAE;gBACAI,oBAAoB,EAAE;YACxB;QACF,GAAGC,OAAO,CAACC,OAAO,CAACX;IACrB;IACAI,GAAG,sCAAsC;QACvC,MAAMC,SAAkB;YACtB;gBACEC,OAAO;gBACPC,MAAM;gBACNK,MAAM;YACR;SACD;QACD,MAAMJ,OAAO;YACX,MAAMP,eAAe;gBACnBE;gBACAE;gBACAI,oBAAoB,EAAE;YACxB;QACF,GAAGC,OAAO,CAACC,OAAO,CAACb;IACrB;IAEAI,SAAS,iBAAiB;QACxBE,GAAG,oCAAoC;YACrC,MAAMC,SAAkB;gBACtB;oBACEE,MAAM;oBACNK,MAAM;gBACR;aACD;YACD,MAAMC,iBAAiB,AACrB,CAAA,MAAMZ,eAAe;gBACnBE;gBACAE;gBACAI,oBAAoB,EAAE;YACxB,EAAC,CACF,CAAC,EAAE;YACJD,OAAOK,eAAeN,IAAI,EAAEO,aAAa,CAAC;YAC1CN,OAAOK,eAAeP,KAAK,EAAEQ,aAAa,CAAC;YAC3CN,OAAOK,eAAeD,IAAI,EAAEE,aAAa,CAAC;QAC5C;QACAV,GAAG,oCAAoC;YACrC,MAAMC,SAAkB;gBACtB;oBACEC,OAAO;oBACPC,MAAM;oBACNK,MAAM;gBACR;aACD;YACD,MAAMC,iBAAiB,AACrB,CAAA,MAAMZ,eAAe;gBACnBE;gBACAE;gBACAI,oBAAoB,EAAE;YACxB,EAAC,CACF,CAAC,EAAE;YACJD,OAAOK,eAAeN,IAAI,EAAEO,aAAa,CAAC;YAC1CN,OAAOK,eAAeP,KAAK,EAAEQ,aAAa,CAAC;YAC3CN,OAAOK,eAAeD,IAAI,EAAEE,aAAa,CAAC;QAC5C;QAEAZ,SAAS,WAAW;YAClBE,GAAG,8BAA8B;gBAC/B,MAAMC,SAAkB;oBACtB;wBACEC,OAAO;wBACPC,MAAM;wBACNK,MAAM;oBACR;iBACD;gBACD,MAAMC,iBAAiB,AACrB,CAAA,MAAMZ,eAAe;oBACnBE;oBACAE;oBACAI,oBAAoB,EAAE;gBACxB,EAAC,CACF,CAAC,EAAE;gBACJD,OAAOK,eAAeN,IAAI,EAAEO,aAAa,CAAC;gBAC1CN,OAAOK,eAAeP,KAAK,EAAEQ,aAAa,CAAC;gBAC3CN,OAAOK,eAAeD,IAAI,EAAEE,aAAa,CAAC;YAC5C;YAEAV,GAAG,yCAAyC;gBAC1C,MAAMW,aAAyB;oBAC7BV,QAAQ;wBACN;4BACEE,MAAM;4BACNK,MAAM;wBACR;qBACD;oBACDN,OAAO;oBACPC,MAAM;oBACNK,MAAM;gBACR;gBACA,MAAMC,iBAAiB,AACrB,CAAA,MAAMZ,eAAe;oBACnBE;oBACAE,QAAQ;wBAACU;qBAAW;oBACpBN,oBAAoB,EAAE;gBACxB,EAAC,CACF,CAAC,EAAE;gBACJD,OAAOK,eAAeN,IAAI,EAAEO,aAAa,CAAC;gBAC1CN,OAAOK,eAAeP,KAAK,EAAEQ,aAAa,CAAC;gBAC3CN,OAAOK,eAAeD,IAAI,EAAEE,aAAa,CAAC;gBAC1CN,OAAOK,eAAeG,MAAM,EAAEC,aAAa;YAC7C;YACAb,GAAG,yCAAyC;gBAC1C,MAAMC,SAAkB;oBACtB;wBACEa,QAAQ;4BACN;gCACEb,QAAQ;oCACN;wCACEE,MAAM;wCACNK,MAAM;oCACR;iCACD;gCACDO,MAAM;4BACR;yBACD;wBACDb,OAAO;wBACPC,MAAM;wBACNK,MAAM;oBACR;iBACD;gBACD,MAAMC,iBAAiB,AACrB,CAAA,MAAMZ,eAAe;oBACnBE;oBACAE;oBACAI,oBAAoB,EAAE;gBACxB,EAAC,CACF,CAAC,EAAE;gBACJD,OAAOK,eAAeN,IAAI,EAAEO,aAAa,CAAC;gBAC1CN,OAAOK,eAAeP,KAAK,EAAEQ,aAAa,CAAC;gBAC3CN,OAAOK,eAAeD,IAAI,EAAEE,aAAa,CAAC;gBAC1CN,OAAOK,eAAeG,MAAM,EAAEC,aAAa;YAC7C;QACF;QAEAb,GAAG,gDAAgD;YACjD,MAAMC,SAAkB;gBACtB;oBACEA,QAAQ;wBACN;4BACEE,MAAM;4BACNK,MAAM;wBACR;qBACD;oBACDL,MAAM;oBACNK,MAAM;gBACR;aACD;YACD,MAAMC,iBAAiB,AACrB,CAAA,MAAMZ,eAAe;gBACnBE;gBACAE;gBACAI,oBAAoB,EAAE;YACxB,EAAC,CACF,CAAC,EAAE;YACJD,OAAOK,eAAeN,IAAI,EAAEO,aAAa,CAAC;YAC1CN,OAAOK,eAAeP,KAAK,EAAEQ,aAAa,CAAC;YAC3CN,OAAOK,eAAeD,IAAI,EAAEE,aAAa,CAAC;YAC1CN,OAAOK,eAAeG,MAAM,EAAEI,aAAa,CAAC;gBAAEC,QAAQ;gBAASC,UAAU;YAAO;QAClF;QAEAlB,GAAG,gDAAgD;YACjD,MAAMC,SAAkB;gBACtB;oBACEa,QAAQ;wBACN;4BACEb,QAAQ;gCAAC;oCAAEE,MAAM;oCAAcK,MAAM;gCAAS;6BAAE;4BAChDO,MAAM;wBACR;qBACD;oBACDZ,MAAM;oBACNK,MAAM;gBACR;aACD;YACD,MAAMC,iBAAiB,AACrB,CAAA,MAAMZ,eAAe;gBACnBE;gBACAE;gBACAI,oBAAoB,EAAE;YACxB,EAAC,CACF,CAAC,EAAE;YACJD,OAAOK,eAAeN,IAAI,EAAEO,aAAa,CAAC;YAC1CN,OAAOK,eAAeP,KAAK,EAAEQ,aAAa,CAAC;YAC3CN,OAAOK,eAAeD,IAAI,EAAEE,aAAa,CAAC;YAC1CN,OAAOK,eAAeG,MAAM,EAAEI,aAAa,CAAC;gBAC1CC,QAAQ;gBACRC,UAAU;YACZ;YACAd,OAAO,AAACK,eAAeK,MAAM,CAAC,EAAE,CAACb,MAAM,CAAC,EAAE,CAAiBC,KAAK,EAAEQ,aAAa,CAAC;QAClF;IACF;IAEAZ,SAAS,iBAAiB;QACxBE,GAAG,0CAA0C;YAC3C,MAAMK,qBAAqB;gBAAC;aAAkB;YAC9C,MAAMJ,SAAkB;gBACtB;oBACEC,OAAO;oBACPC,MAAM;oBACNgB,YAAY;oBACZX,MAAM;gBACR;aACD;YACD,MAAMJ,OAAO;gBACX,MAAMP,eAAe;oBAAEE;oBAAQE;oBAAQI;gBAAmB;YAC5D,GAAGe,GAAG,CAACb,OAAO;QAChB;QAEAP,GAAG,qDAAqD;YACtD,MAAMK,qBAAqB;gBAAC;gBAAmB;aAAqB;YACpE,MAAMJ,SAAkB;gBACtB;oBACEC,OAAO;oBACPC,MAAM;oBACNgB,YAAY;wBAAC;wBAAmB;qBAAqB;oBACrDX,MAAM;gBACR;aACD;YACD,MAAMJ,OAAO;gBACX,MAAMP,eAAe;oBAAEE;oBAAQE;oBAAQI;gBAAmB;YAC5D,GAAGe,GAAG,CAACb,OAAO;QAChB;QAEAP,GAAG,wDAAwD;YACzD,MAAMK,qBAAqB;gBAAC;aAAkB;YAC9C,MAAMgB,oBAA2B;gBAC/BpB,QAAQ;oBACN;wBACEC,OAAO;wBACPC,MAAM;wBACNgB,YAAY;wBACZX,MAAM;oBACR;iBACD;gBACDO,MAAM;YACR;YACA,MAAMd,SAAkB;gBACtB;oBACEa,QAAQ;wBAACO;qBAAkB;oBAC3BnB,OAAO;oBACPC,MAAM;oBACNK,MAAM;gBACR;aACD;YACD,MAAMJ,OAAO;gBACX,MAAMP,eAAe;oBAAEE;oBAAQE;oBAAQI;gBAAmB;YAC5D,GAAGe,GAAG,CAACb,OAAO;QAChB;QAEAP,GAAG,wCAAwC;YACzC,MAAMK,qBAAqB;gBAAC;aAAkB;YAC9C,MAAMJ,SAAkB;gBACtB;oBACEC,OAAO;oBACPC,MAAM;oBACNgB,YAAY;oBACZX,MAAM;gBACR;aACD;YACD,MAAMJ,OAAO;gBACX,MAAMP,eAAe;oBAAEE;oBAAQE;oBAAQI;gBAAmB;YAC5D,GAAGC,OAAO,CAACC,OAAO,CAACZ;QACrB;QAEAK,GAAG,mDAAmD;YACpD,MAAMK,qBAAqB;gBAAC;gBAAmB;aAAqB;YACpE,MAAMJ,SAAkB;gBACtB;oBACEC,OAAO;oBACPC,MAAM;oBACNgB,YAAY;wBAAC;wBAAmB;qBAAY;oBAC5CX,MAAM;gBACR;aACD;YACD,MAAMJ,OAAO;gBACX,MAAMP,eAAe;oBAAEE;oBAAQE;oBAAQI;gBAAmB;YAC5D,GAAGC,OAAO,CAACC,OAAO,CAACZ;QACrB;QAEAK,GAAG,sDAAsD;YACvD,MAAMK,qBAAqB;gBAAC;aAAkB;YAC9C,MAAMgB,oBAA2B;gBAC/BpB,QAAQ;oBACN;wBACEC,OAAO;wBACPC,MAAM;wBACNgB,YAAY;wBACZX,MAAM;oBACR;iBACD;gBACDO,MAAM;YACR;YACA,MAAMd,SAAkB;gBACtB;oBACEa,QAAQ;wBAACO;qBAAkB;oBAC3BnB,OAAO;oBACPC,MAAM;oBACNK,MAAM;gBACR;aACD;YACD,MAAMJ,OAAO;gBACX,MAAMP,eAAe;oBAAEE;oBAAQE;oBAAQI;gBAAmB;YAC5D,GAAGC,OAAO,CAACC,OAAO,CAACZ;QACrB;QAEAK,GAAG,sEAAsE;YACvE,MAAMC,SAAkB;gBACtB;oBACEE,MAAM;oBACNmB,UAAU;oBACVd,MAAM;gBACR;aACD;YAED,MAAMC,iBAAiB,AACrB,CAAA,MAAMZ,eAAe;gBACnBE;gBACAE;gBACAI,oBAAoB,EAAE;YACxB,EAAC,CACF,CAAC,EAAE;YACJD,OAAOK,eAAec,YAAY,EAAEb,aAAa,CAAC;QACpD;QAEAV,GAAG,gDAAgD;YACjD,MAAMwB,kBAAkB,MAAM3B,eAAe;gBAC3CE;gBACAE,QAAQ,EAAE;gBACVI,oBAAoB,EAAE;YACxB;YACAD,OAAOoB,iBAAiBd,aAAa,CAAC,EAAE;QAC1C;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/fields/config/sanitize.spec.ts"],"sourcesContent":["import type { Config } from '../../config/types.js'\nimport type {\n ArrayField,\n Block,\n BlockField,\n CheckboxField,\n Field,\n NumberField,\n TextField,\n} from './types.js'\n\nimport {\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingFieldType,\n ReservedFieldName,\n} from '../../errors/index.js'\nimport { sanitizeFields } from './sanitize.js'\n\ndescribe('sanitizeFields', () => {\n const config = {} as Config\n it('should throw on missing type field', async () => {\n const fields: Field[] = [\n // @ts-expect-error\n {\n name: 'Some Collection',\n label: 'some-collection',\n },\n ]\n await expect(async () => {\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n }).rejects.toThrow(MissingFieldType)\n })\n it('should throw on invalid field name', async () => {\n const fields: Field[] = [\n {\n name: 'some.collection',\n type: 'text',\n label: 'some.collection',\n },\n ]\n await expect(async () => {\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n }).rejects.toThrow(InvalidFieldName)\n })\n\n it('should throw on a reserved field name', async () => {\n const fields: Field[] = [\n {\n name: 'hash',\n type: 'text',\n label: 'hash',\n },\n ]\n await expect(async () => {\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n }).rejects.toThrow(ReservedFieldName)\n })\n\n describe('auto-labeling', () => {\n it('should populate label if missing', async () => {\n const fields: Field[] = [\n {\n name: 'someField',\n type: 'text',\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as TextField\n expect(sanitizedField.name).toStrictEqual('someField')\n expect(sanitizedField.label).toStrictEqual('Some Field')\n expect(sanitizedField.type).toStrictEqual('text')\n })\n it('should allow auto-label override', async () => {\n const fields: Field[] = [\n {\n name: 'someField',\n type: 'text',\n label: 'Do not label',\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as TextField\n expect(sanitizedField.name).toStrictEqual('someField')\n expect(sanitizedField.label).toStrictEqual('Do not label')\n expect(sanitizedField.type).toStrictEqual('text')\n })\n\n describe('opt-out', () => {\n it('should allow label opt-out', async () => {\n const fields: Field[] = [\n {\n name: 'someField',\n type: 'text',\n label: false,\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as TextField\n expect(sanitizedField.name).toStrictEqual('someField')\n expect(sanitizedField.label).toStrictEqual(false)\n expect(sanitizedField.type).toStrictEqual('text')\n })\n\n it('should allow label opt-out for arrays', async () => {\n const arrayField: ArrayField = {\n name: 'items',\n type: 'array',\n fields: [\n {\n name: 'itemName',\n type: 'text',\n },\n ],\n label: false,\n }\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields: [arrayField],\n validRelationships: [],\n })\n )[0] as ArrayField\n expect(sanitizedField.name).toStrictEqual('items')\n expect(sanitizedField.label).toStrictEqual(false)\n expect(sanitizedField.type).toStrictEqual('array')\n expect(sanitizedField.labels).toBeUndefined()\n })\n it('should allow label opt-out for blocks', async () => {\n const fields: Field[] = [\n {\n name: 'noLabelBlock',\n type: 'blocks',\n blocks: [\n {\n slug: 'number',\n fields: [\n {\n name: 'testNumber',\n type: 'number',\n },\n ],\n },\n ],\n label: false,\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as BlockField\n expect(sanitizedField.name).toStrictEqual('noLabelBlock')\n expect(sanitizedField.label).toStrictEqual(false)\n expect(sanitizedField.type).toStrictEqual('blocks')\n expect(sanitizedField.labels).toBeUndefined()\n })\n })\n\n it('should label arrays with plural and singular', async () => {\n const fields: Field[] = [\n {\n name: 'items',\n type: 'array',\n fields: [\n {\n name: 'itemName',\n type: 'text',\n },\n ],\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as ArrayField\n expect(sanitizedField.name).toStrictEqual('items')\n expect(sanitizedField.label).toStrictEqual('Items')\n expect(sanitizedField.type).toStrictEqual('array')\n expect(sanitizedField.labels).toMatchObject({ plural: 'Items', singular: 'Item' })\n })\n\n it('should label blocks with plural and singular', async () => {\n const fields: Field[] = [\n {\n name: 'specialBlock',\n type: 'blocks',\n blocks: [\n {\n slug: 'number',\n fields: [{ name: 'testNumber', type: 'number' }],\n },\n ],\n },\n ]\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as BlockField\n expect(sanitizedField.name).toStrictEqual('specialBlock')\n expect(sanitizedField.label).toStrictEqual('Special Block')\n expect(sanitizedField.type).toStrictEqual('blocks')\n expect(sanitizedField.labels).toMatchObject({\n plural: 'Special Blocks',\n singular: 'Special Block',\n })\n expect((sanitizedField.blocks[0].fields[0] as NumberField).label).toStrictEqual('Test Number')\n })\n })\n\n describe('relationships', () => {\n it('should not throw on valid relationship', async () => {\n const validRelationships = ['some-collection']\n const fields: Field[] = [\n {\n name: 'My Relationship',\n type: 'relationship',\n label: 'my-relationship',\n relationTo: 'some-collection',\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).not.toThrow()\n })\n\n it('should not throw on valid relationship - multiple', async () => {\n const validRelationships = ['some-collection', 'another-collection']\n const fields: Field[] = [\n {\n name: 'My Relationship',\n type: 'relationship',\n label: 'my-relationship',\n relationTo: ['some-collection', 'another-collection'],\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).not.toThrow()\n })\n\n it('should not throw on valid relationship inside blocks', async () => {\n const validRelationships = ['some-collection']\n const relationshipBlock: Block = {\n slug: 'relationshipBlock',\n fields: [\n {\n name: 'My Relationship',\n type: 'relationship',\n label: 'my-relationship',\n relationTo: 'some-collection',\n },\n ],\n }\n const fields: Field[] = [\n {\n name: 'layout',\n type: 'blocks',\n blocks: [relationshipBlock],\n label: 'Layout Blocks',\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).not.toThrow()\n })\n\n it('should throw on invalid relationship', async () => {\n const validRelationships = ['some-collection']\n const fields: Field[] = [\n {\n name: 'My Relationship',\n type: 'relationship',\n label: 'my-relationship',\n relationTo: 'not-valid',\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).rejects.toThrow(InvalidFieldRelationship)\n })\n\n it('should throw on invalid relationship - multiple', async () => {\n const validRelationships = ['some-collection', 'another-collection']\n const fields: Field[] = [\n {\n name: 'My Relationship',\n type: 'relationship',\n label: 'my-relationship',\n relationTo: ['some-collection', 'not-valid'],\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).rejects.toThrow(InvalidFieldRelationship)\n })\n\n it('should throw on invalid relationship inside blocks', async () => {\n const validRelationships = ['some-collection']\n const relationshipBlock: Block = {\n slug: 'relationshipBlock',\n fields: [\n {\n name: 'My Relationship',\n type: 'relationship',\n label: 'my-relationship',\n relationTo: 'not-valid',\n },\n ],\n }\n const fields: Field[] = [\n {\n name: 'layout',\n type: 'blocks',\n blocks: [relationshipBlock],\n label: 'Layout Blocks',\n },\n ]\n await expect(async () => {\n await sanitizeFields({ config, fields, validRelationships })\n }).rejects.toThrow(InvalidFieldRelationship)\n })\n\n it('should defaultValue of checkbox to false if required and undefined', async () => {\n const fields: Field[] = [\n {\n name: 'My Checkbox',\n type: 'checkbox',\n required: true,\n },\n ]\n\n const sanitizedField = (\n await sanitizeFields({\n config,\n fields,\n validRelationships: [],\n })\n )[0] as CheckboxField\n expect(sanitizedField.defaultValue).toStrictEqual(false)\n })\n\n it('should return empty field array if no fields', async () => {\n const sanitizedFields = await sanitizeFields({\n config,\n fields: [],\n validRelationships: [],\n })\n expect(sanitizedFields).toStrictEqual([])\n })\n })\n})\n"],"names":["InvalidFieldName","InvalidFieldRelationship","MissingFieldType","ReservedFieldName","sanitizeFields","describe","config","it","fields","name","label","expect","validRelationships","rejects","toThrow","type","sanitizedField","toStrictEqual","arrayField","labels","toBeUndefined","blocks","slug","toMatchObject","plural","singular","relationTo","not","relationshipBlock","required","defaultValue","sanitizedFields"],"mappings":"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"}