payload 4.0.0-internal.5f0cd13 → 4.0.0-internal.a0ef1b8

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 (183) hide show
  1. package/dist/admin/RichText.d.ts +22 -2
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/adapters/devReload.d.ts +9 -0
  5. package/dist/admin/adapters/devReload.d.ts.map +1 -0
  6. package/dist/admin/adapters/devReload.js +6 -0
  7. package/dist/admin/adapters/devReload.js.map +1 -0
  8. package/dist/admin/adapters/index.d.ts +3 -0
  9. package/dist/admin/adapters/index.d.ts.map +1 -1
  10. package/dist/admin/adapters/index.js.map +1 -1
  11. package/dist/admin/adapters/render.d.ts +16 -0
  12. package/dist/admin/adapters/render.d.ts.map +1 -0
  13. package/dist/admin/adapters/render.js +7 -0
  14. package/dist/admin/adapters/render.js.map +1 -0
  15. package/dist/admin/adapters/views.d.ts +36 -0
  16. package/dist/admin/adapters/views.d.ts.map +1 -0
  17. package/dist/admin/adapters/views.js +7 -0
  18. package/dist/admin/adapters/views.js.map +1 -0
  19. package/dist/admin/forms/Field.d.ts +7 -0
  20. package/dist/admin/forms/Field.d.ts.map +1 -1
  21. package/dist/admin/forms/Field.js.map +1 -1
  22. package/dist/admin/forms/Form.d.ts +29 -0
  23. package/dist/admin/forms/Form.d.ts.map +1 -1
  24. package/dist/admin/forms/Form.js.map +1 -1
  25. package/dist/admin/functions/index.d.ts +9 -0
  26. package/dist/admin/functions/index.d.ts.map +1 -1
  27. package/dist/admin/functions/index.js.map +1 -1
  28. package/dist/admin/types.d.ts +1 -1
  29. package/dist/admin/types.d.ts.map +1 -1
  30. package/dist/admin/types.js.map +1 -1
  31. package/dist/admin/views/dashboard.d.ts +7 -0
  32. package/dist/admin/views/dashboard.d.ts.map +1 -1
  33. package/dist/admin/views/dashboard.js.map +1 -1
  34. package/dist/admin/views/document.d.ts +7 -1
  35. package/dist/admin/views/document.d.ts.map +1 -1
  36. package/dist/admin/views/document.js.map +1 -1
  37. package/dist/auth/defaultAccess.d.ts +1 -1
  38. package/dist/auth/defaultAccess.d.ts.map +1 -1
  39. package/dist/auth/defaultAccess.js +1 -1
  40. package/dist/auth/defaultAccess.js.map +1 -1
  41. package/dist/auth/defaultUser.d.ts.map +1 -1
  42. package/dist/auth/defaultUser.js +2 -1
  43. package/dist/auth/defaultUser.js.map +1 -1
  44. package/dist/bin/build.d.ts +25 -0
  45. package/dist/bin/build.d.ts.map +1 -0
  46. package/dist/bin/build.js +80 -0
  47. package/dist/bin/build.js.map +1 -0
  48. package/dist/bin/build.spec.js +170 -0
  49. package/dist/bin/build.spec.js.map +1 -0
  50. package/dist/bin/generateImportMap/index.d.ts.map +1 -1
  51. package/dist/bin/generateImportMap/index.js +8 -5
  52. package/dist/bin/generateImportMap/index.js.map +1 -1
  53. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts +5 -1
  54. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts.map +1 -1
  55. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js +24 -18
  56. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js.map +1 -1
  57. package/dist/bin/generateTypes.d.ts +3 -2
  58. package/dist/bin/generateTypes.d.ts.map +1 -1
  59. package/dist/bin/generateTypes.js +4 -0
  60. package/dist/bin/generateTypes.js.map +1 -1
  61. package/dist/bin/index.d.ts.map +1 -1
  62. package/dist/bin/index.js +9 -0
  63. package/dist/bin/index.js.map +1 -1
  64. package/dist/bin/loadEnv.d.ts +3 -1
  65. package/dist/bin/loadEnv.d.ts.map +1 -1
  66. package/dist/bin/loadEnv.js +40 -10
  67. package/dist/bin/loadEnv.js.map +1 -1
  68. package/dist/collections/config/defaults.js +2 -2
  69. package/dist/collections/config/defaults.js.map +1 -1
  70. package/dist/collections/config/defaults.spec.js +47 -0
  71. package/dist/collections/config/defaults.spec.js.map +1 -0
  72. package/dist/collections/operations/create.d.ts.map +1 -1
  73. package/dist/collections/operations/create.js +1 -0
  74. package/dist/collections/operations/create.js.map +1 -1
  75. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  76. package/dist/collections/operations/local/duplicate.js.map +1 -1
  77. package/dist/collections/operations/local/find.d.ts.map +1 -1
  78. package/dist/collections/operations/local/find.js.map +1 -1
  79. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  80. package/dist/collections/operations/local/findByID.js.map +1 -1
  81. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  82. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  83. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  84. package/dist/collections/operations/local/findVersions.js.map +1 -1
  85. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  86. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  87. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  88. package/dist/collections/operations/utilities/update.js +16 -8
  89. package/dist/collections/operations/utilities/update.js.map +1 -1
  90. package/dist/config/types.d.ts +10 -1
  91. package/dist/config/types.d.ts.map +1 -1
  92. package/dist/config/types.js +1 -0
  93. package/dist/config/types.js.map +1 -1
  94. package/dist/database/migrations/migrationsCollection.d.ts.map +1 -1
  95. package/dist/database/migrations/migrationsCollection.js +2 -1
  96. package/dist/database/migrations/migrationsCollection.js.map +1 -1
  97. package/dist/exports/shared.d.ts +20 -0
  98. package/dist/exports/shared.d.ts.map +1 -1
  99. package/dist/exports/shared.js +20 -0
  100. package/dist/exports/shared.js.map +1 -1
  101. package/dist/fields/config/client.d.ts +1 -1
  102. package/dist/fields/config/client.d.ts.map +1 -1
  103. package/dist/fields/config/client.js +1 -1
  104. package/dist/fields/config/client.js.map +1 -1
  105. package/dist/fields/validations.d.ts.map +1 -1
  106. package/dist/fields/validations.js +5 -4
  107. package/dist/fields/validations.js.map +1 -1
  108. package/dist/globals/config/sanitize.d.ts.map +1 -1
  109. package/dist/globals/config/sanitize.js +1 -0
  110. package/dist/globals/config/sanitize.js.map +1 -1
  111. package/dist/globals/config/sanitize.spec.js +43 -0
  112. package/dist/globals/config/sanitize.spec.js.map +1 -0
  113. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  114. package/dist/globals/operations/local/findOne.js.map +1 -1
  115. package/dist/globals/operations/local/update.d.ts.map +1 -1
  116. package/dist/globals/operations/local/update.js.map +1 -1
  117. package/dist/index.bundled.d.ts +178 -17
  118. package/dist/index.d.ts +8 -9
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +50 -33
  121. package/dist/index.js.map +1 -1
  122. package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
  123. package/dist/kv/adapters/DatabaseKVAdapter.js +1 -0
  124. package/dist/kv/adapters/DatabaseKVAdapter.js.map +1 -1
  125. package/dist/locked-documents/config.d.ts.map +1 -1
  126. package/dist/locked-documents/config.js +2 -1
  127. package/dist/locked-documents/config.js.map +1 -1
  128. package/dist/preferences/config.d.ts.map +1 -1
  129. package/dist/preferences/config.js +2 -1
  130. package/dist/preferences/config.js.map +1 -1
  131. package/dist/query-presets/config.d.ts.map +1 -1
  132. package/dist/query-presets/config.js +2 -1
  133. package/dist/query-presets/config.js.map +1 -1
  134. package/dist/queues/config/collection.d.ts.map +1 -1
  135. package/dist/queues/config/collection.js +2 -1
  136. package/dist/queues/config/collection.js.map +1 -1
  137. package/dist/queues/config/generateJobsJSONSchemas.js +2 -2
  138. package/dist/queues/config/generateJobsJSONSchemas.js.map +1 -1
  139. package/dist/queues/config/global.d.ts.map +1 -1
  140. package/dist/queues/config/global.js +2 -1
  141. package/dist/queues/config/global.js.map +1 -1
  142. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
  143. package/dist/uploads/fetchAPI-multipart/processMultipart.js +14 -1
  144. package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
  145. package/dist/uploads/generateFileData.d.ts +2 -1
  146. package/dist/uploads/generateFileData.d.ts.map +1 -1
  147. package/dist/uploads/generateFileData.js +5 -2
  148. package/dist/uploads/generateFileData.js.map +1 -1
  149. package/dist/uploads/safeFetch.d.ts.map +1 -1
  150. package/dist/uploads/safeFetch.js +11 -5
  151. package/dist/uploads/safeFetch.js.map +1 -1
  152. package/dist/utilities/configToJSONSchema.d.ts +25 -0
  153. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  154. package/dist/utilities/configToJSONSchema.js +73 -31
  155. package/dist/utilities/configToJSONSchema.js.map +1 -1
  156. package/dist/utilities/configToJSONSchema.spec.js +216 -29
  157. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  158. package/dist/utilities/dependencies/dependencyChecker.js +1 -1
  159. package/dist/utilities/dependencies/dependencyChecker.js.map +1 -1
  160. package/dist/utilities/dependencies/getDependencies.d.ts.map +1 -1
  161. package/dist/utilities/dependencies/getDependencies.js +5 -5
  162. package/dist/utilities/dependencies/getDependencies.js.map +1 -1
  163. package/dist/utilities/dynamicImport.js +1 -1
  164. package/dist/utilities/dynamicImport.js.map +1 -1
  165. package/dist/utilities/formatErrors.d.ts.map +1 -1
  166. package/dist/utilities/formatErrors.js +3 -1
  167. package/dist/utilities/formatErrors.js.map +1 -1
  168. package/dist/utilities/getRequestLanguage.d.ts +2 -2
  169. package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
  170. package/dist/utilities/getRequestLanguage.js.map +1 -1
  171. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  172. package/dist/utilities/handleEndpoints.js +7 -3
  173. package/dist/utilities/handleEndpoints.js.map +1 -1
  174. package/dist/utilities/isRSCEnabled.d.ts +12 -0
  175. package/dist/utilities/isRSCEnabled.d.ts.map +1 -0
  176. package/dist/utilities/isRSCEnabled.js +14 -0
  177. package/dist/utilities/isRSCEnabled.js.map +1 -0
  178. package/dist/utilities/telemetry/conf/envPaths.d.ts.map +1 -1
  179. package/dist/utilities/telemetry/conf/envPaths.js +31 -40
  180. package/dist/utilities/telemetry/conf/envPaths.js.map +1 -1
  181. package/dist/utilities/transformColumnPreferences.js +4 -2
  182. package/dist/utilities/transformColumnPreferences.js.map +1 -1
  183. package/package.json +8 -5
@@ -1,7 +1,7 @@
1
1
  import type { I18nClient } from '@payloadcms/translations';
2
+ import type { ImportMap } from '../../bin/generateImportMap/index.js';
2
3
  import type { Block, ClientBlock, ClientField, Field, FieldBase } from '../../fields/config/types.js';
3
4
  import type { Payload } from '../../types/index.js';
4
- import { type ImportMap } from '../../index.js';
5
5
  export { ClientField };
6
6
  export type ServerOnlyFieldProperties = 'dbName' | 'editor' | 'enumName' | 'filterOptions' | 'graphQL' | 'jsonSchema' | 'label' | 'validate' | keyof Pick<FieldBase, 'access' | 'custom' | 'defaultValue' | 'hooks'>;
7
7
  export type ServerOnlyFieldAdminProperties = keyof Pick<FieldBase['admin'], 'components' | 'condition'>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/fields/config/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAA;AAErE,OAAO,KAAK,EAGV,KAAK,EAGL,WAAW,EACX,WAAW,EAEX,KAAK,EACL,SAAS,EAOV,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAKnD,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAKtE,OAAO,EAAE,WAAW,EAAE,CAAA;AAEtB,MAAM,MAAM,yBAAyB,GACjC,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,eAAe,GACf,SAAS,GACT,YAAY,GACZ,OAAO,GACP,UAAU,GACV,MAAM,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,CAAC,CAAA;AAEzE,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,SAAS,CAAC,OAAO,CAAC,EAElB,YAAY,GAAG,WAAW,CAC3B,CAAA;AA+BD,eAAO,MAAM,kBAAkB,GAAI,6CAKhC;IACD,MAAM,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,GAAG,WAAW,EAiFzC,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,2DAK/B;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,WAoSH,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,8DAMhC;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,WAAW,EAiCd,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/fields/config/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAA;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EAGV,KAAK,EAGL,WAAW,EACX,WAAW,EAEX,KAAK,EACL,SAAS,EAOV,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAUnD,OAAO,EAAE,WAAW,EAAE,CAAA;AAEtB,MAAM,MAAM,yBAAyB,GACjC,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,eAAe,GACf,SAAS,GACT,YAAY,GACZ,OAAO,GACP,UAAU,GACV,MAAM,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,CAAC,CAAA;AAEzE,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,SAAS,CAAC,OAAO,CAAC,EAElB,YAAY,GAAG,WAAW,CAC3B,CAAA;AA+BD,eAAO,MAAM,kBAAkB,GAAI,6CAKhC;IACD,MAAM,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,GAAG,WAAW,EAiFzC,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,2DAK/B;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,WAoSH,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,8DAMhC;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,WAAW,EAiCd,CAAA"}
@@ -3,7 +3,7 @@
3
3
  import { getFromImportMap } from '../../bin/generateImportMap/utilities/getFromImportMap.js';
4
4
  import { MissingEditorProp } from '../../errors/MissingEditorProp.js';
5
5
  import { fieldAffectsData } from '../../fields/config/types.js';
6
- import { flattenTopLevelFields } from '../../index.js';
6
+ import { flattenTopLevelFields } from '../../utilities/flattenTopLevelFields.js';
7
7
  const serverOnlyFieldProperties = [
8
8
  'hooks',
9
9
  'access',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/config/client.ts"],"sourcesContent":["// @ts-strict-ignore\n/* eslint-disable perfectionist/sort-switch-case */\n// Keep perfectionist/sort-switch-case disabled - it incorrectly messes up the ordering of the switch cases, causing it to break\nimport type { I18nClient, TFunction } from '@payloadcms/translations'\n\nimport type {\n AdminClient,\n ArrayFieldClient,\n Block,\n BlockJSX,\n BlocksFieldClient,\n ClientBlock,\n ClientField,\n DateFieldClient,\n Field,\n FieldBase,\n JoinFieldClient,\n LabelsClient,\n RadioFieldClient,\n RowFieldClient,\n SelectFieldClient,\n TabsFieldClient,\n} from '../../fields/config/types.js'\nimport type { Payload } from '../../types/index.js'\n\nimport { getFromImportMap } from '../../bin/generateImportMap/utilities/getFromImportMap.js'\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { flattenTopLevelFields, type ImportMap } from '../../index.js'\n\n// Should not be used - ClientField should be used instead. This is why we don't export ClientField, we don't want people\n// to accidentally use it instead of ClientField and get confused\n\nexport { ClientField }\n\nexport type ServerOnlyFieldProperties =\n | 'dbName' // can be a function\n | 'editor' // This is a `richText` only property\n | 'enumName' // can be a function\n | 'filterOptions' // This is a `relationship`, `upload`, and `select` only property\n | 'graphQL'\n | 'jsonSchema'\n | 'label'\n | 'validate'\n | keyof Pick<FieldBase, 'access' | 'custom' | 'defaultValue' | 'hooks'>\n\nexport type ServerOnlyFieldAdminProperties = keyof Pick<\n FieldBase['admin'],\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n 'components' | 'condition'\n>\n\nconst serverOnlyFieldProperties: Partial<ServerOnlyFieldProperties>[] = [\n 'hooks',\n 'access',\n 'validate',\n 'defaultValue',\n 'filterOptions', // This is a `relationship`, `upload`, and `select` only property\n 'editor', // This is a `richText` only property\n 'custom',\n 'jsonSchema',\n 'dbName', // can be a function\n 'enumName', // can be a function\n 'graphQL', // client does not need graphQL\n // the following props are handled separately (see below):\n // `label`\n // `fields`\n // `blocks`\n // `tabs`\n // `admin`\n]\n\nconst serverOnlyFieldAdminProperties: Partial<ServerOnlyFieldAdminProperties>[] = [\n 'condition',\n 'components',\n]\n\ntype FieldWithDescription = {\n admin: AdminClient\n} & ClientField\n\nexport const createClientBlocks = ({\n blocks,\n defaultIDType,\n i18n,\n importMap,\n}: {\n blocks: (Block | string)[]\n defaultIDType: Payload['config']['db']['defaultIDType']\n i18n: I18nClient\n importMap: ImportMap\n}): (ClientBlock | string)[] | ClientBlock[] => {\n const clientBlocks: (ClientBlock | string)[] = []\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i]!\n\n if (typeof block === 'string') {\n // Do not process blocks that are just strings - they are processed once in the client config\n clientBlocks.push(block)\n continue\n }\n\n const clientBlock: ClientBlock = {\n slug: block.slug,\n fields: [],\n }\n if (block.imageAltText) {\n clientBlock.imageAltText = block.imageAltText\n }\n if (block.imageURL) {\n clientBlock.imageURL = block.imageURL\n }\n\n if (block.admin?.custom || block.admin?.group || block.admin?.images) {\n clientBlock.admin = {}\n if (block.admin.custom) {\n clientBlock.admin.custom = block.admin.custom\n }\n if (block.admin.group) {\n clientBlock.admin.group = block.admin.group\n }\n if (block.admin.images) {\n clientBlock.admin.images = block.admin.images\n }\n }\n\n if (block?.admin?.jsx) {\n const jsxResolved = getFromImportMap<BlockJSX>({\n importMap,\n PayloadComponent: block.admin.jsx,\n schemaPath: '',\n })\n clientBlock.jsx = jsxResolved\n }\n\n if (block?.admin?.disableBlockName) {\n // Check for existing admin object, this way we don't have to spread it in\n if (clientBlock.admin) {\n clientBlock.admin.disableBlockName = block.admin.disableBlockName\n } else {\n clientBlock.admin = { disableBlockName: block.admin.disableBlockName }\n }\n }\n\n if (block.labels) {\n clientBlock.labels = {} as unknown as LabelsClient\n\n if (block.labels.singular) {\n if (typeof block.labels.singular === 'function') {\n clientBlock.labels.singular = block.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n clientBlock.labels.singular = block.labels.singular\n }\n if (typeof block.labels.plural === 'function') {\n clientBlock.labels.plural = block.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n clientBlock.labels.plural = block.labels.plural\n }\n }\n }\n\n clientBlock.fields = createClientFields({\n defaultIDType,\n fields: block.fields,\n i18n,\n importMap,\n })\n\n clientBlocks.push(clientBlock)\n }\n\n return clientBlocks\n}\n\nexport const createClientField = ({\n defaultIDType,\n field: incomingField,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n field: Field\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField => {\n const clientField: ClientField = {} as ClientField\n\n for (const key in incomingField) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n switch (key) {\n case 'admin':\n if (!incomingField.admin) {\n break\n }\n\n clientField.admin = {} as AdminClient\n\n for (const adminKey in incomingField.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in incomingField.admin) {\n if (typeof incomingField.admin?.description !== 'function') {\n ;(clientField as FieldWithDescription).admin.description =\n incomingField.admin.description\n }\n }\n\n break\n\n default:\n ;(clientField.admin as any)[adminKey] =\n incomingField.admin[adminKey as keyof typeof incomingField.admin]\n }\n }\n\n break\n\n case 'blocks':\n case 'fields':\n case 'tabs':\n // Skip - we handle sub-fields in the switch below\n break\n\n case 'options':\n // Skip - we handle options in the radio/select switch below to avoid mutating the global config\n break\n\n case 'label':\n //@ts-expect-error - would need to type narrow\n if (typeof incomingField.label === 'function') {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label({ i18n, t: i18n.t })\n } else {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label\n }\n\n break\n\n default:\n ;(clientField as any)[key] = incomingField[key as keyof Field]\n }\n }\n\n switch (incomingField.type) {\n case 'array': {\n if (incomingField.labels) {\n const field = clientField as unknown as ArrayFieldClient\n\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n }\n // falls through\n case 'collapsible':\n case 'group':\n case 'row': {\n const field = clientField as unknown as RowFieldClient\n\n if (!field.fields) {\n field.fields = []\n }\n\n field.fields = createClientFields({\n defaultIDType,\n disableAddingID: incomingField.type !== 'array',\n fields: incomingField.fields,\n i18n,\n importMap,\n })\n\n break\n }\n\n case 'blocks': {\n const field = clientField as unknown as BlocksFieldClient\n\n if (incomingField.labels) {\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n\n if (incomingField.blockReferences?.length) {\n field.blockReferences = createClientBlocks({\n blocks: incomingField.blockReferences,\n defaultIDType,\n i18n,\n importMap,\n })\n }\n\n if (incomingField.blocks?.length) {\n field.blocks = createClientBlocks({\n blocks: incomingField.blocks,\n defaultIDType,\n i18n,\n importMap,\n }) as ClientBlock[]\n }\n\n break\n }\n\n case 'date': {\n // Strip the `override` function from timezone config as it cannot be serialized\n if (\n incomingField.timezone &&\n typeof incomingField.timezone === 'object' &&\n 'override' in incomingField.timezone\n ) {\n const field = clientField as DateFieldClient\n const { override: _, ...timezoneConfigWithoutOverride } = incomingField.timezone\n field.timezone = timezoneConfigWithoutOverride\n }\n\n break\n }\n\n case 'join': {\n const field = clientField as JoinFieldClient\n\n field.targetField = {\n relationTo: field.targetField?.relationTo,\n }\n\n break\n }\n\n case 'radio':\n // falls through\n case 'select': {\n const field = clientField as RadioFieldClient | SelectFieldClient\n\n if (incomingField.options?.length) {\n field.options = [] // Create new array to avoid mutating global config\n\n for (let i = 0; i < incomingField.options.length; i++) {\n const option = incomingField.options[i]\n\n if (typeof option === 'object' && typeof option.label === 'function') {\n field.options[i] = {\n label: option.label({ i18n, t: i18n.t as TFunction }),\n value: option.value,\n }\n } else if (typeof option === 'object') {\n field.options[i] = {\n label: option.label,\n value: option.value,\n }\n } else if (typeof option === 'string') {\n field.options[i] = option\n }\n }\n }\n\n break\n }\n\n case 'richText': {\n if (!incomingField?.editor) {\n throw new MissingEditorProp(incomingField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof incomingField?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n break\n }\n\n case 'tabs': {\n const field = clientField as unknown as TabsFieldClient\n\n if (incomingField.tabs?.length) {\n field.tabs = []\n\n for (let i = 0; i < incomingField.tabs.length; i++) {\n const tab = incomingField.tabs[i]\n const clientTab = {} as unknown as TabsFieldClient['tabs'][0]\n\n for (const key in tab) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n const tabProp = tab[key as keyof typeof tab]\n\n if (key === 'fields') {\n clientTab.fields = createClientFields({\n defaultIDType,\n disableAddingID: true,\n fields: tab.fields,\n i18n,\n importMap,\n })\n } else if (\n (key === 'label' || key === 'description') &&\n typeof tabProp === 'function'\n ) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n clientTab[key] = tabProp({ t: i18n.t })\n } else if (key === 'admin') {\n clientTab.admin = {} as AdminClient\n\n for (const adminKey in tab.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in tab.admin) {\n if (typeof tab.admin?.description === 'function') {\n clientTab.admin.description = tab.admin.description({\n i18n,\n t: i18n.t as TFunction,\n })\n } else {\n clientTab.admin.description = tab.admin.description\n }\n }\n\n break\n\n default:\n ;(clientTab.admin as any)[adminKey] =\n tab.admin[adminKey as keyof typeof tab.admin]\n }\n }\n } else {\n ;(clientTab as any)[key] = tabProp\n }\n }\n field.tabs[i] = clientTab\n }\n }\n\n break\n }\n\n default:\n break\n }\n\n return clientField\n}\n\nexport const createClientFields = ({\n defaultIDType,\n disableAddingID,\n fields,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n disableAddingID?: boolean\n fields: Field[]\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField[] => {\n const clientFields: ClientField[] = []\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]!\n\n const clientField = createClientField({\n defaultIDType,\n field,\n i18n,\n importMap,\n })\n\n clientFields.push(clientField)\n }\n\n const hasID = flattenTopLevelFields(fields).some((f) => fieldAffectsData(f) && f.name === 'id')\n\n if (!disableAddingID && !hasID) {\n clientFields.push({\n name: 'id',\n type: defaultIDType,\n admin: {\n description: 'The unique identifier for this document',\n disabled: { bulkEdit: true },\n hidden: true,\n },\n hidden: true,\n label: 'ID',\n } as ClientField)\n }\n\n return clientFields\n}\n"],"names":["getFromImportMap","MissingEditorProp","fieldAffectsData","flattenTopLevelFields","serverOnlyFieldProperties","serverOnlyFieldAdminProperties","createClientBlocks","blocks","defaultIDType","i18n","importMap","clientBlocks","i","length","block","push","clientBlock","slug","fields","imageAltText","imageURL","admin","custom","group","images","jsx","jsxResolved","PayloadComponent","schemaPath","disableBlockName","labels","singular","t","plural","createClientFields","createClientField","field","incomingField","clientField","key","includes","adminKey","description","label","type","disableAddingID","blockReferences","timezone","override","_","timezoneConfigWithoutOverride","targetField","relationTo","options","option","value","editor","Error","tabs","tab","clientTab","tabProp","clientFields","hasID","some","f","name","disabled","bulkEdit","hidden"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/config/client.ts"],"sourcesContent":["// @ts-strict-ignore\n/* eslint-disable perfectionist/sort-switch-case */\n// Keep perfectionist/sort-switch-case disabled - it incorrectly messes up the ordering of the switch cases, causing it to break\nimport type { I18nClient, TFunction } from '@payloadcms/translations'\n\nimport type { ImportMap } from '../../bin/generateImportMap/index.js'\nimport type {\n AdminClient,\n ArrayFieldClient,\n Block,\n BlockJSX,\n BlocksFieldClient,\n ClientBlock,\n ClientField,\n DateFieldClient,\n Field,\n FieldBase,\n JoinFieldClient,\n LabelsClient,\n RadioFieldClient,\n RowFieldClient,\n SelectFieldClient,\n TabsFieldClient,\n} from '../../fields/config/types.js'\nimport type { Payload } from '../../types/index.js'\n\nimport { getFromImportMap } from '../../bin/generateImportMap/utilities/getFromImportMap.js'\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { flattenTopLevelFields } from '../../utilities/flattenTopLevelFields.js'\n\n// Should not be used - ClientField should be used instead. This is why we don't export ClientField, we don't want people\n// to accidentally use it instead of ClientField and get confused\n\nexport { ClientField }\n\nexport type ServerOnlyFieldProperties =\n | 'dbName' // can be a function\n | 'editor' // This is a `richText` only property\n | 'enumName' // can be a function\n | 'filterOptions' // This is a `relationship`, `upload`, and `select` only property\n | 'graphQL'\n | 'jsonSchema'\n | 'label'\n | 'validate'\n | keyof Pick<FieldBase, 'access' | 'custom' | 'defaultValue' | 'hooks'>\n\nexport type ServerOnlyFieldAdminProperties = keyof Pick<\n FieldBase['admin'],\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n 'components' | 'condition'\n>\n\nconst serverOnlyFieldProperties: Partial<ServerOnlyFieldProperties>[] = [\n 'hooks',\n 'access',\n 'validate',\n 'defaultValue',\n 'filterOptions', // This is a `relationship`, `upload`, and `select` only property\n 'editor', // This is a `richText` only property\n 'custom',\n 'jsonSchema',\n 'dbName', // can be a function\n 'enumName', // can be a function\n 'graphQL', // client does not need graphQL\n // the following props are handled separately (see below):\n // `label`\n // `fields`\n // `blocks`\n // `tabs`\n // `admin`\n]\n\nconst serverOnlyFieldAdminProperties: Partial<ServerOnlyFieldAdminProperties>[] = [\n 'condition',\n 'components',\n]\n\ntype FieldWithDescription = {\n admin: AdminClient\n} & ClientField\n\nexport const createClientBlocks = ({\n blocks,\n defaultIDType,\n i18n,\n importMap,\n}: {\n blocks: (Block | string)[]\n defaultIDType: Payload['config']['db']['defaultIDType']\n i18n: I18nClient\n importMap: ImportMap\n}): (ClientBlock | string)[] | ClientBlock[] => {\n const clientBlocks: (ClientBlock | string)[] = []\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i]!\n\n if (typeof block === 'string') {\n // Do not process blocks that are just strings - they are processed once in the client config\n clientBlocks.push(block)\n continue\n }\n\n const clientBlock: ClientBlock = {\n slug: block.slug,\n fields: [],\n }\n if (block.imageAltText) {\n clientBlock.imageAltText = block.imageAltText\n }\n if (block.imageURL) {\n clientBlock.imageURL = block.imageURL\n }\n\n if (block.admin?.custom || block.admin?.group || block.admin?.images) {\n clientBlock.admin = {}\n if (block.admin.custom) {\n clientBlock.admin.custom = block.admin.custom\n }\n if (block.admin.group) {\n clientBlock.admin.group = block.admin.group\n }\n if (block.admin.images) {\n clientBlock.admin.images = block.admin.images\n }\n }\n\n if (block?.admin?.jsx) {\n const jsxResolved = getFromImportMap<BlockJSX>({\n importMap,\n PayloadComponent: block.admin.jsx,\n schemaPath: '',\n })\n clientBlock.jsx = jsxResolved\n }\n\n if (block?.admin?.disableBlockName) {\n // Check for existing admin object, this way we don't have to spread it in\n if (clientBlock.admin) {\n clientBlock.admin.disableBlockName = block.admin.disableBlockName\n } else {\n clientBlock.admin = { disableBlockName: block.admin.disableBlockName }\n }\n }\n\n if (block.labels) {\n clientBlock.labels = {} as unknown as LabelsClient\n\n if (block.labels.singular) {\n if (typeof block.labels.singular === 'function') {\n clientBlock.labels.singular = block.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n clientBlock.labels.singular = block.labels.singular\n }\n if (typeof block.labels.plural === 'function') {\n clientBlock.labels.plural = block.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n clientBlock.labels.plural = block.labels.plural\n }\n }\n }\n\n clientBlock.fields = createClientFields({\n defaultIDType,\n fields: block.fields,\n i18n,\n importMap,\n })\n\n clientBlocks.push(clientBlock)\n }\n\n return clientBlocks\n}\n\nexport const createClientField = ({\n defaultIDType,\n field: incomingField,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n field: Field\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField => {\n const clientField: ClientField = {} as ClientField\n\n for (const key in incomingField) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n switch (key) {\n case 'admin':\n if (!incomingField.admin) {\n break\n }\n\n clientField.admin = {} as AdminClient\n\n for (const adminKey in incomingField.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in incomingField.admin) {\n if (typeof incomingField.admin?.description !== 'function') {\n ;(clientField as FieldWithDescription).admin.description =\n incomingField.admin.description\n }\n }\n\n break\n\n default:\n ;(clientField.admin as any)[adminKey] =\n incomingField.admin[adminKey as keyof typeof incomingField.admin]\n }\n }\n\n break\n\n case 'blocks':\n case 'fields':\n case 'tabs':\n // Skip - we handle sub-fields in the switch below\n break\n\n case 'options':\n // Skip - we handle options in the radio/select switch below to avoid mutating the global config\n break\n\n case 'label':\n //@ts-expect-error - would need to type narrow\n if (typeof incomingField.label === 'function') {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label({ i18n, t: i18n.t })\n } else {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label\n }\n\n break\n\n default:\n ;(clientField as any)[key] = incomingField[key as keyof Field]\n }\n }\n\n switch (incomingField.type) {\n case 'array': {\n if (incomingField.labels) {\n const field = clientField as unknown as ArrayFieldClient\n\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n }\n // falls through\n case 'collapsible':\n case 'group':\n case 'row': {\n const field = clientField as unknown as RowFieldClient\n\n if (!field.fields) {\n field.fields = []\n }\n\n field.fields = createClientFields({\n defaultIDType,\n disableAddingID: incomingField.type !== 'array',\n fields: incomingField.fields,\n i18n,\n importMap,\n })\n\n break\n }\n\n case 'blocks': {\n const field = clientField as unknown as BlocksFieldClient\n\n if (incomingField.labels) {\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n\n if (incomingField.blockReferences?.length) {\n field.blockReferences = createClientBlocks({\n blocks: incomingField.blockReferences,\n defaultIDType,\n i18n,\n importMap,\n })\n }\n\n if (incomingField.blocks?.length) {\n field.blocks = createClientBlocks({\n blocks: incomingField.blocks,\n defaultIDType,\n i18n,\n importMap,\n }) as ClientBlock[]\n }\n\n break\n }\n\n case 'date': {\n // Strip the `override` function from timezone config as it cannot be serialized\n if (\n incomingField.timezone &&\n typeof incomingField.timezone === 'object' &&\n 'override' in incomingField.timezone\n ) {\n const field = clientField as DateFieldClient\n const { override: _, ...timezoneConfigWithoutOverride } = incomingField.timezone\n field.timezone = timezoneConfigWithoutOverride\n }\n\n break\n }\n\n case 'join': {\n const field = clientField as JoinFieldClient\n\n field.targetField = {\n relationTo: field.targetField?.relationTo,\n }\n\n break\n }\n\n case 'radio':\n // falls through\n case 'select': {\n const field = clientField as RadioFieldClient | SelectFieldClient\n\n if (incomingField.options?.length) {\n field.options = [] // Create new array to avoid mutating global config\n\n for (let i = 0; i < incomingField.options.length; i++) {\n const option = incomingField.options[i]\n\n if (typeof option === 'object' && typeof option.label === 'function') {\n field.options[i] = {\n label: option.label({ i18n, t: i18n.t as TFunction }),\n value: option.value,\n }\n } else if (typeof option === 'object') {\n field.options[i] = {\n label: option.label,\n value: option.value,\n }\n } else if (typeof option === 'string') {\n field.options[i] = option\n }\n }\n }\n\n break\n }\n\n case 'richText': {\n if (!incomingField?.editor) {\n throw new MissingEditorProp(incomingField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof incomingField?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n break\n }\n\n case 'tabs': {\n const field = clientField as unknown as TabsFieldClient\n\n if (incomingField.tabs?.length) {\n field.tabs = []\n\n for (let i = 0; i < incomingField.tabs.length; i++) {\n const tab = incomingField.tabs[i]\n const clientTab = {} as unknown as TabsFieldClient['tabs'][0]\n\n for (const key in tab) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n const tabProp = tab[key as keyof typeof tab]\n\n if (key === 'fields') {\n clientTab.fields = createClientFields({\n defaultIDType,\n disableAddingID: true,\n fields: tab.fields,\n i18n,\n importMap,\n })\n } else if (\n (key === 'label' || key === 'description') &&\n typeof tabProp === 'function'\n ) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n clientTab[key] = tabProp({ t: i18n.t })\n } else if (key === 'admin') {\n clientTab.admin = {} as AdminClient\n\n for (const adminKey in tab.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in tab.admin) {\n if (typeof tab.admin?.description === 'function') {\n clientTab.admin.description = tab.admin.description({\n i18n,\n t: i18n.t as TFunction,\n })\n } else {\n clientTab.admin.description = tab.admin.description\n }\n }\n\n break\n\n default:\n ;(clientTab.admin as any)[adminKey] =\n tab.admin[adminKey as keyof typeof tab.admin]\n }\n }\n } else {\n ;(clientTab as any)[key] = tabProp\n }\n }\n field.tabs[i] = clientTab\n }\n }\n\n break\n }\n\n default:\n break\n }\n\n return clientField\n}\n\nexport const createClientFields = ({\n defaultIDType,\n disableAddingID,\n fields,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n disableAddingID?: boolean\n fields: Field[]\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField[] => {\n const clientFields: ClientField[] = []\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]!\n\n const clientField = createClientField({\n defaultIDType,\n field,\n i18n,\n importMap,\n })\n\n clientFields.push(clientField)\n }\n\n const hasID = flattenTopLevelFields(fields).some((f) => fieldAffectsData(f) && f.name === 'id')\n\n if (!disableAddingID && !hasID) {\n clientFields.push({\n name: 'id',\n type: defaultIDType,\n admin: {\n description: 'The unique identifier for this document',\n disabled: { bulkEdit: true },\n hidden: true,\n },\n hidden: true,\n label: 'ID',\n } as ClientField)\n }\n\n return clientFields\n}\n"],"names":["getFromImportMap","MissingEditorProp","fieldAffectsData","flattenTopLevelFields","serverOnlyFieldProperties","serverOnlyFieldAdminProperties","createClientBlocks","blocks","defaultIDType","i18n","importMap","clientBlocks","i","length","block","push","clientBlock","slug","fields","imageAltText","imageURL","admin","custom","group","images","jsx","jsxResolved","PayloadComponent","schemaPath","disableBlockName","labels","singular","t","plural","createClientFields","createClientField","field","incomingField","clientField","key","includes","adminKey","description","label","type","disableAddingID","blockReferences","timezone","override","_","timezoneConfigWithoutOverride","targetField","relationTo","options","option","value","editor","Error","tabs","tab","clientTab","tabProp","clientFields","hasID","some","f","name","disabled","bulkEdit","hidden"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../src/fields/validations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validations.d.ts","sourceRoot":"","sources":["../../src/fields/validations.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import Ajv from 'ajv';
2
1
  import ObjectIdImport from 'bson-objectid';
3
2
  const ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport;
4
3
  import { isNumber } from '../utilities/isNumber.js';
@@ -163,7 +162,7 @@ export const code = (value, { req: { t }, required })=>{
163
162
  }
164
163
  return true;
165
164
  };
166
- export const json = (value, { jsonError, jsonSchema, req: { t }, required })=>{
165
+ export const json = async (value, { jsonError, jsonSchema, req: { t }, required })=>{
167
166
  const isNotEmpty = (value)=>{
168
167
  if (value === undefined || value === null) {
169
168
  return false;
@@ -205,8 +204,10 @@ export const json = (value, { jsonError, jsonSchema, req: { t }, required })=>{
205
204
  try {
206
205
  jsonSchema.schema = fetchSchema(jsonSchema);
207
206
  const { schema } = jsonSchema;
208
- // @ts-expect-error missing types
209
- const ajv = new Ajv();
207
+ const AjvModule = await import('ajv');
208
+ // Handle both ESM default export and CJS interop where the module itself is the constructor
209
+ const AjvClass = 'default' in AjvModule && typeof AjvModule.default === 'function' ? AjvModule.default : AjvModule;
210
+ const ajv = new AjvClass();
210
211
  if (!ajv.validate(schema, value)) {
211
212
  return ajv.errorsText();
212
213
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/validations.ts"],"sourcesContent":["import Ajv from 'ajv'\nimport ObjectIdImport from 'bson-objectid'\n\nconst ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport\n\nimport type { TFunction } from '@payloadcms/translations'\nimport type { JSONSchema4 } from 'json-schema'\n\nimport type { RichTextAdapter } from '../admin/types.js'\nimport type { CollectionSlug } from '../index.js'\nimport type { Where } from '../types/index.js'\nimport type {\n ArrayField,\n BlocksField,\n CheckboxField,\n CodeField,\n DateField,\n EmailField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RelationshipValue,\n RelationshipValueMany,\n RelationshipValueSingle,\n RichTextField,\n SelectField,\n TextareaField,\n TextField,\n UploadField,\n Validate,\n ValueWithRelation,\n} from './config/types.js'\n\nimport { isNumber } from '../utilities/isNumber.js'\nimport { isValidID } from '../utilities/isValidID.js'\n\nexport type TextFieldValidation = Validate<string, unknown, unknown, TextField>\n\nexport type TextFieldManyValidation = Validate<string[], unknown, unknown, TextField>\n\nexport type TextFieldSingleValidation = Validate<string, unknown, unknown, TextField>\n\nexport const text: TextFieldValidation = (\n value,\n {\n hasMany,\n maxLength: fieldMaxLength,\n maxRows,\n minLength,\n minRows,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength!: number\n\n if (!required) {\n if (value === undefined || value === null) {\n return true\n }\n }\n\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult\n }\n }\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n\n const stringsToValidate: string[] = Array.isArray(value) ? value : [value!]\n\n for (const stringValue of stringsToValidate) {\n const length = stringValue?.length || 0\n\n if (typeof maxLength === 'number' && length > maxLength) {\n return t('validation:shorterThanMax', { label: t('general:value'), maxLength, stringValue })\n }\n\n if (typeof minLength === 'number' && length < minLength) {\n return t('validation:longerThanMin', { label: t('general:value'), minLength, stringValue })\n }\n }\n\n if (required) {\n if (!value || ((typeof value === 'string' || Array.isArray(value)) && value.length === 0)) {\n return t('validation:required')\n }\n }\n\n return true\n}\n\nexport type PasswordFieldValidation = Validate<string, unknown, unknown, TextField>\n\nexport const password: PasswordFieldValidation = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength = 3,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength!: number\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type ConfirmPasswordFieldValidation = Validate<\n string,\n unknown,\n { password: string },\n TextField\n>\n\nexport const confirmPassword: ConfirmPasswordFieldValidation = (\n value,\n { req: { t }, required, siblingData },\n) => {\n if (required && !value) {\n return t('validation:required')\n }\n\n if (value && value !== siblingData.password) {\n return t('fields:passwordsDoNotMatch')\n }\n\n return true\n}\n\nexport type EmailFieldValidation = Validate<string, unknown, { username?: string }, EmailField>\n\nexport const email: EmailFieldValidation = (\n value,\n {\n collectionSlug,\n req: {\n payload: { collections, config },\n t,\n },\n required,\n siblingData,\n },\n) => {\n if (collectionSlug) {\n const collection =\n collections?.[collectionSlug]?.config ??\n config.collections.find(({ slug }) => slug === collectionSlug)! // If this is run on the client, `collections` will be undefined, but `config.collections` will be available\n\n if (\n collection.auth.loginWithUsername &&\n !collection.auth.loginWithUsername?.requireUsername &&\n !collection.auth.loginWithUsername?.requireEmail\n ) {\n if (!value && !siblingData?.username) {\n return t('validation:required')\n }\n }\n }\n\n /**\n * Disallows emails with double quotes (e.g., \"user\"@example.com, user@\"example.com\", \"user@example.com\")\n * Rejects spaces anywhere in the email (e.g., user @example.com, user@ example.com, user name@example.com)\n * Prevents consecutive dots in the local or domain part (e.g., user..name@example.com, user@example..com)\n * Disallows domains that start or end with a hyphen (e.g., user@-example.com, user@example-.com)\n * Allows standard email formats (e.g., user@example.com, user.name+alias@example.co.uk, user-name@example.org)\n * Allows domains with consecutive hyphens as long as they are not leading/trailing (e.g., user@ex--ample.com)\n * Supports multiple subdomains (e.g., user@sub.domain.example.com)\n */\n const emailRegex =\n /^(?!.*\\.\\.)[\\w!#$%&'*+/=?^`{|}~-](?:[\\w!#$%&'*+/=?^`{|}~.-]*[\\w!#$%&'*+/=?^`{|}~-])?@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)*\\.[a-z]{2,}$/i\n\n if ((value && !emailRegex.test(value)) || (!value && required)) {\n return t('validation:emailAddress')\n }\n\n return true\n}\n\nexport type UsernameFieldValidation = Validate<string, unknown, { email?: string }, TextField>\n\nexport const username: UsernameFieldValidation = (\n value,\n {\n collectionSlug,\n req: {\n payload: { collections, config },\n t,\n },\n required,\n siblingData,\n },\n) => {\n let maxLength!: number\n\n if (collectionSlug) {\n const collection =\n collections?.[collectionSlug]?.config ??\n config.collections.find(({ slug }) => slug === collectionSlug)! // If this is run on the client, `collections` will be undefined, but `config.collections` will be available\n\n if (\n collection.auth.loginWithUsername &&\n !collection.auth.loginWithUsername?.requireUsername &&\n !collection.auth.loginWithUsername?.requireEmail\n ) {\n if (!value && !siblingData?.email) {\n return t('validation:required')\n }\n }\n }\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (!value && required) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type TextareaFieldValidation = Validate<string, unknown, unknown, TextareaField>\n\nexport const textarea: TextareaFieldValidation = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength!: number\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type CodeFieldValidation = Validate<string, unknown, unknown, CodeField>\n\nexport const code: CodeFieldValidation = (value, { req: { t }, required }) => {\n if (required && (!value || (typeof value === 'string' && value.length === 0))) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type JSONFieldValidation = Validate<\n string,\n unknown,\n unknown,\n { jsonError?: string } & JSONField\n>\n\nexport const json: JSONFieldValidation = (\n value,\n { jsonError, jsonSchema, req: { t }, required },\n) => {\n const isNotEmpty = (value: null | string | undefined) => {\n if (value === undefined || value === null) {\n return false\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return false\n }\n\n if (typeof value === 'object' && Object.keys(value).length === 0) {\n return false\n }\n\n return true\n }\n\n const fetchSchema = ({ schema, uri }: { schema: JSONSchema4; uri: string }) => {\n if (uri && schema) {\n return schema\n }\n return fetch(uri)\n .then((response) => {\n if (!response.ok) {\n throw new Error('Network response was not ok')\n }\n return response.json()\n })\n .then((_json) => {\n const json = _json as {\n id: string\n }\n const jsonSchemaSanitizations = {\n id: undefined,\n $id: json.id,\n $schema: 'http://json-schema.org/draft-07/schema#',\n }\n\n return Object.assign(json, jsonSchemaSanitizations)\n })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n if (jsonError !== undefined) {\n return t('validation:invalidInput')\n }\n\n if (jsonSchema && isNotEmpty(value)) {\n try {\n jsonSchema.schema = fetchSchema(jsonSchema)\n const { schema } = jsonSchema\n // @ts-expect-error missing types\n const ajv = new Ajv()\n\n if (!ajv.validate(schema, value)) {\n return ajv.errorsText()\n }\n } catch (error) {\n return error instanceof Error ? error.message : 'Unknown error'\n }\n }\n return true\n}\n\nexport type CheckboxFieldValidation = Validate<boolean, unknown, unknown, CheckboxField>\n\nexport const checkbox: CheckboxFieldValidation = (value, { req: { t }, required }) => {\n if ((value && typeof value !== 'boolean') || (required && typeof value !== 'boolean')) {\n return t('validation:trueOrFalse')\n }\n\n return true\n}\n\nexport type DateFieldValidation = Validate<Date, unknown, unknown, DateField>\n\nexport const date: DateFieldValidation = (\n value,\n { name, req: { t }, required, siblingData, timezone },\n) => {\n const validDate = value && !isNaN(Date.parse(value.toString()))\n\n // We need to also check for the timezone data based on this field's config\n // We cannot do this inside the timezone field validation as it's visually hidden\n const hasRequiredTimezone = timezone && required\n const selectedTimezone: string = siblingData?.[`${name}_tz` as keyof typeof siblingData]\n // Always resolve to true if the field is not required, as timezone may be optional too then\n const validTimezone = hasRequiredTimezone ? Boolean(selectedTimezone) : true\n\n if (validDate && validTimezone) {\n return true\n }\n\n if (validDate && !validTimezone) {\n return t('validation:timezoneRequired')\n }\n\n if (value) {\n return t('validation:notValidDate', { value })\n }\n\n if (required) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type RichTextFieldValidation = Validate<object, unknown, unknown, RichTextField>\n\nexport const richText: RichTextFieldValidation = async (value, options) => {\n if (!options?.editor) {\n throw new Error('richText field has no editor property.')\n }\n if (typeof options?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = options?.editor\n\n return editor.validate(value, options)\n}\n\nconst validateArrayLength = (\n value: unknown,\n options: {\n maxRows?: number\n minRows?: number\n required?: boolean\n t: TFunction\n },\n) => {\n const { maxRows, minRows, required, t } = options\n\n const arrayLength = Array.isArray(value) ? value.length : (value as number) || 0\n\n if (!required && arrayLength === 0) {\n return true\n }\n\n if (minRows && arrayLength < minRows) {\n return t('validation:requiresAtLeast', { count: minRows, label: t('general:rows') })\n }\n\n if (maxRows && arrayLength > maxRows) {\n return t('validation:requiresNoMoreThan', { count: maxRows, label: t('general:rows') })\n }\n\n if (required && !arrayLength) {\n return t('validation:requiresAtLeast', { count: 1, label: t('general:row') })\n }\n\n return true\n}\n\nexport type NumberFieldValidation = Validate<number | number[], unknown, unknown, NumberField>\n\nexport type NumberFieldManyValidation = Validate<number[], unknown, unknown, NumberField>\n\nexport type NumberFieldSingleValidation = Validate<number, unknown, unknown, NumberField>\n\nexport const number: NumberFieldValidation = (\n value,\n { hasMany, max, maxRows, min, minRows, req: { t }, required },\n) => {\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult\n }\n }\n\n if (!value && !isNumber(value)) {\n // if no value is present, validate based on required\n if (required) {\n return t('validation:required')\n }\n if (!required) {\n return true\n }\n }\n\n const numbersToValidate: number[] = Array.isArray(value) ? value : [value!]\n\n for (const number of numbersToValidate) {\n if (!isNumber(number)) {\n return t('validation:enterNumber')\n }\n\n const numberValue = parseFloat(number as unknown as string)\n\n if (typeof max === 'number' && numberValue > max) {\n return t('validation:greaterThanMax', { label: t('general:value'), max, value })\n }\n\n if (typeof min === 'number' && numberValue < min) {\n return t('validation:lessThanMin', { label: t('general:value'), min, value })\n }\n }\n\n return true\n}\n\nexport type ArrayFieldValidation = Validate<unknown[], unknown, unknown, ArrayField>\n\nexport const array: ArrayFieldValidation = (value, { maxRows, minRows, req: { t }, required }) => {\n return validateArrayLength(value, { maxRows, minRows, required, t })\n}\n\nexport type BlocksFieldValidation = Validate<unknown, unknown, unknown, BlocksField>\n\n/**\n * This function validates the blocks in a blocks field against the provided filterOptions.\n * It will return a list of all block slugs found in the value, the allowed block slugs (if any),\n * and a list of invalid block slugs that are used despite being disallowed.\n *\n * @internal - this may break or be removed at any time\n */\nexport async function validateBlocksFilterOptions({\n id,\n data,\n filterOptions,\n req,\n siblingData,\n value,\n}: { value: Parameters<BlocksFieldValidation>[0] } & Pick<\n Parameters<BlocksFieldValidation>[1],\n 'data' | 'filterOptions' | 'id' | 'req' | 'siblingData'\n>): Promise<{\n /**\n * All block slugs found in the value of the blocks field\n */\n allBlockSlugs: string[]\n /**\n * All block slugs that are allowed. If undefined, all blocks are allowed.\n */\n allowedBlockSlugs: string[] | undefined\n /**\n * A list of block slugs that are used despite being disallowed. If undefined, field passed validation.\n */\n invalidBlockSlugs: string[] | undefined\n}> {\n const allBlockSlugs = Array.isArray(value)\n ? (value as Array<{ blockType?: string }>)\n .map((b) => b.blockType)\n .filter((s): s is string => Boolean(s))\n : []\n\n // if undefined => all blocks allowed\n let allowedBlockSlugs: string[] | undefined = undefined\n\n if (typeof filterOptions === 'function') {\n const result = await filterOptions({\n id: id!, // original code asserted presence\n data,\n req,\n siblingData,\n user: req.user,\n })\n if (result !== true && Array.isArray(result)) {\n allowedBlockSlugs = result\n }\n } else if (Array.isArray(filterOptions)) {\n allowedBlockSlugs = filterOptions\n }\n\n const invalidBlockSlugs: string[] = []\n if (allowedBlockSlugs) {\n for (const blockSlug of allBlockSlugs) {\n if (!allowedBlockSlugs.includes(blockSlug)) {\n invalidBlockSlugs.push(blockSlug)\n }\n }\n }\n\n return {\n allBlockSlugs,\n allowedBlockSlugs,\n invalidBlockSlugs,\n }\n}\nexport const blocks: BlocksFieldValidation = async (\n value,\n { id, data, filterOptions, maxRows, minRows, req: { t }, req, required, siblingData },\n) => {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult\n }\n\n if (filterOptions) {\n const { invalidBlockSlugs } = await validateBlocksFilterOptions({\n id,\n data,\n filterOptions,\n req,\n siblingData,\n value,\n })\n if (invalidBlockSlugs?.length) {\n return t('validation:invalidBlocks', { blocks: invalidBlockSlugs.join(', ') })\n }\n }\n\n return true\n}\n\nconst validateFilterOptions: Validate<\n unknown,\n unknown,\n unknown,\n RelationshipField | UploadField\n> = async (\n value,\n { id, blockData, data, filterOptions, relationTo, req, req: { t, user }, siblingData },\n) => {\n if (typeof filterOptions !== 'undefined' && value) {\n const options: {\n [collection: string]: (number | string)[]\n } = {}\n\n const falseCollections: CollectionSlug[] = []\n const collections = !Array.isArray(relationTo) ? [relationTo] : relationTo\n const values = Array.isArray(value) ? value : [value]\n\n for (const collection of collections) {\n try {\n let optionFilter =\n typeof filterOptions === 'function'\n ? await filterOptions({\n id: id!,\n blockData,\n data,\n relationTo: collection,\n req,\n siblingData,\n user,\n })\n : filterOptions\n\n if (optionFilter === true) {\n optionFilter = null\n }\n\n const valueIDs: (number | string)[] = []\n\n values.forEach((val) => {\n if (typeof val === 'object') {\n if (val?.value) {\n valueIDs.push(val.value)\n } else if (ObjectId.isValid(val)) {\n valueIDs.push(new ObjectId(val).toHexString())\n }\n }\n\n if (typeof val === 'string' || typeof val === 'number') {\n valueIDs.push(val)\n }\n })\n\n if (valueIDs.length > 0) {\n const findWhere: Where = {\n and: [{ id: { in: valueIDs } }],\n }\n\n // @ts-expect-error - I don't understand why optionFilter is inferred as `false | Where | null` instead of `boolean | Where | null`\n if (optionFilter && optionFilter !== true) {\n findWhere.and?.push(optionFilter)\n }\n\n if (optionFilter === false) {\n falseCollections.push(collection)\n }\n\n const result = await req.payloadDataLoader.find({\n collection,\n depth: 0,\n limit: 0,\n pagination: false,\n req,\n where: findWhere,\n })\n\n options[collection] = result.docs.map((doc) => doc.id)\n } else {\n options[collection] = []\n }\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Error validating filter options for collection ${collection}`,\n })\n options[collection] = []\n }\n }\n\n const invalidRelationships = values.filter((val) => {\n let collection: string\n let requestedID: number | string\n\n if (typeof relationTo === 'string') {\n collection = relationTo\n\n if (typeof val === 'string' || typeof val === 'number') {\n requestedID = val\n }\n\n if (typeof val === 'object' && ObjectId.isValid(val)) {\n requestedID = new ObjectId(val).toHexString()\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collection = val.relationTo\n requestedID = val.value\n }\n\n if (falseCollections.find((slug) => relationTo === slug)) {\n return true\n }\n\n if (!options[collection!]) {\n return true\n }\n\n return options[collection!]!.indexOf(requestedID!) === -1\n })\n\n if (invalidRelationships.length > 0) {\n return invalidRelationships.reduce((err, invalid, i) => {\n return `${err} ${JSON.stringify(invalid)}${\n invalidRelationships.length === i + 1 ? ',' : ''\n } `\n }, t('validation:invalidSelections')) as string\n }\n\n return true\n }\n\n return true\n}\n\nexport type UploadFieldValidation = Validate<unknown, unknown, unknown, UploadField>\n\nexport type UploadFieldManyValidation = Validate<unknown[], unknown, unknown, UploadField>\n\nexport type UploadFieldSingleValidation = Validate<unknown, unknown, unknown, UploadField>\n\nexport const upload: UploadFieldValidation = async (value, options) => {\n const {\n event,\n maxRows,\n minRows,\n relationTo,\n req: { payload, t },\n required,\n } = options\n\n if (\n ((!value && typeof value !== 'number') || (Array.isArray(value) && value.length === 0)) &&\n required\n ) {\n return t('validation:required')\n }\n\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length,\n })\n }\n\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length,\n })\n }\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [value]\n\n const invalidRelationships = values.filter((val) => {\n let collectionSlug: string\n let requestedID\n\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo\n\n // custom id\n if (val || typeof val === 'number') {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo\n requestedID = val.value\n }\n\n if (requestedID === null) {\n return false\n }\n\n const idType =\n payload.collections[collectionSlug!]?.customIDType || payload?.db?.defaultIDType || 'text'\n\n return !isValidID(requestedID, idType)\n })\n\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships\n .map((err, invalid) => {\n return `${err} ${JSON.stringify(invalid)}`\n })\n .join(', ')}`\n }\n }\n\n if (event === 'onChange') {\n return true\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport type RelationshipFieldValidation = Validate<\n RelationshipValue,\n unknown,\n unknown,\n RelationshipField\n>\n\nexport type RelationshipFieldManyValidation = Validate<\n RelationshipValueMany,\n unknown,\n unknown,\n RelationshipField\n>\n\nexport type RelationshipFieldSingleValidation = Validate<\n RelationshipValueSingle,\n unknown,\n unknown,\n RelationshipField\n>\n\nexport const relationship: RelationshipFieldValidation = async (value, options) => {\n const {\n event,\n maxRows,\n minRows,\n relationTo,\n req: { payload, t },\n required,\n } = options\n\n if (\n ((!value && typeof value !== 'number') || (Array.isArray(value) && value.length === 0)) &&\n required\n ) {\n return t('validation:required')\n }\n\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length,\n })\n }\n\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length,\n })\n }\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [value]\n\n const invalidRelationships = values.filter((val) => {\n let collectionSlug: string\n let requestedID: number | string | undefined | ValueWithRelation\n\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo\n\n // custom id\n if (val || typeof val === 'number') {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo\n requestedID = val.value\n }\n\n if (requestedID === null) {\n return false\n }\n\n const idType =\n payload.collections[collectionSlug!]?.customIDType || payload?.db?.defaultIDType || 'text'\n\n return !isValidID(requestedID as number | string, idType)\n })\n\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships\n .map((err, invalid) => {\n return `${err} ${JSON.stringify(invalid)}`\n })\n .join(', ')}`\n }\n }\n\n if (event === 'onChange') {\n return true\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport type SelectFieldValidation = Validate<string | string[], unknown, unknown, SelectField>\n\nexport type SelectFieldManyValidation = Validate<string[], unknown, unknown, SelectField>\n\nexport type SelectFieldSingleValidation = Validate<string, unknown, unknown, SelectField>\n\nexport const select: SelectFieldValidation = (\n value,\n { data, filterOptions, hasMany, options, req, req: { t }, required, siblingData },\n) => {\n const filteredOptions =\n typeof filterOptions === 'function'\n ? filterOptions({\n data,\n options,\n req,\n siblingData,\n })\n : options\n\n if (\n Array.isArray(value) &&\n value.some(\n (input) =>\n !filteredOptions.some(\n (option) => option === input || (typeof option !== 'string' && option?.value === input),\n ),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n // Check for duplicate values when hasMany is true\n if (hasMany && Array.isArray(value) && value.length > 1) {\n const counts = new Map<unknown, number>()\n\n for (const item of value) {\n counts.set(item, (counts.get(item) || 0) + 1)\n }\n\n const duplicates: unknown[] = []\n for (const [item, count] of counts.entries()) {\n if (count > 1) {\n // Add the item 'count' times to show all occurrences\n for (let i = 0; i < count; i++) {\n duplicates.push(item)\n }\n }\n }\n\n if (duplicates.length > 0) {\n return duplicates.reduce((err, duplicate, i) => {\n return `${err} ${JSON.stringify(duplicate)}${i < duplicates.length - 1 ? ',' : ''}`\n }, t('validation:invalidSelections')) as string\n }\n }\n\n if (\n typeof value === 'string' &&\n !filteredOptions.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n if (\n required &&\n (typeof value === 'undefined' ||\n value === null ||\n (hasMany && Array.isArray(value) && (value as [])?.length === 0))\n ) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type RadioFieldValidation = Validate<unknown, unknown, unknown, RadioField>\n\nexport const radio: RadioFieldValidation = (value, { options, req: { t }, required }) => {\n if (value) {\n const valueMatchesOption = options.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n return valueMatchesOption || t('validation:invalidSelection')\n }\n\n return required ? t('validation:required') : true\n}\n\nexport type PointFieldValidation = Validate<\n [number | string, number | string],\n unknown,\n unknown,\n PointField\n>\n\nexport const point: PointFieldValidation = (value = ['', ''], { req: { t }, required }) => {\n if (value === null) {\n if (required) {\n return t('validation:required')\n }\n\n return true\n }\n\n const lng = parseFloat(String(value[0]))\n const lat = parseFloat(String(value[1]))\n if (\n required &&\n ((value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number') ||\n Number.isNaN(lng) ||\n Number.isNaN(lat) ||\n (Array.isArray(value) && value.length !== 2))\n ) {\n return t('validation:requiresTwoNumbers')\n }\n\n if ((value[1] && Number.isNaN(lng)) || (value[0] && Number.isNaN(lat))) {\n return t('validation:invalidInput')\n }\n\n // Validate longitude bounds (-180 to 180)\n if (value[0] && !Number.isNaN(lng) && (lng < -180 || lng > 180)) {\n return t('validation:longitudeOutOfBounds')\n }\n\n // Validate latitude bounds (-90 to 90)\n if (value[1] && !Number.isNaN(lat) && (lat < -90 || lat > 90)) {\n return t('validation:latitudeOutOfBounds')\n }\n\n return true\n}\n\n/**\n * Built-in field validations used by Payload\n *\n * These can be re-used in custom validations\n */\nexport const validations = {\n array,\n blocks,\n checkbox,\n code,\n confirmPassword,\n date,\n email,\n json,\n number,\n password,\n point,\n radio,\n relationship,\n richText,\n select,\n text,\n textarea,\n upload,\n}\n"],"names":["Ajv","ObjectIdImport","ObjectId","default","isNumber","isValidID","text","value","hasMany","maxLength","fieldMaxLength","maxRows","minLength","minRows","req","payload","config","t","required","undefined","lengthValidationResult","validateArrayLength","defaultMaxTextLength","stringsToValidate","Array","isArray","stringValue","length","label","password","confirmPassword","siblingData","email","collectionSlug","collections","collection","find","slug","auth","loginWithUsername","requireUsername","requireEmail","username","emailRegex","test","textarea","code","json","jsonError","jsonSchema","isNotEmpty","Object","keys","fetchSchema","schema","uri","fetch","then","response","ok","Error","_json","jsonSchemaSanitizations","id","$id","$schema","assign","ajv","validate","errorsText","error","message","checkbox","date","name","timezone","validDate","isNaN","Date","parse","toString","hasRequiredTimezone","selectedTimezone","validTimezone","Boolean","richText","options","editor","arrayLength","count","number","max","min","numbersToValidate","numberValue","parseFloat","array","validateBlocksFilterOptions","data","filterOptions","allBlockSlugs","map","b","blockType","filter","s","allowedBlockSlugs","result","user","invalidBlockSlugs","blockSlug","includes","push","blocks","join","validateFilterOptions","blockData","relationTo","falseCollections","values","optionFilter","valueIDs","forEach","val","isValid","toHexString","findWhere","and","in","payloadDataLoader","depth","limit","pagination","where","docs","doc","err","logger","msg","invalidRelationships","requestedID","indexOf","reduce","invalid","i","JSON","stringify","upload","event","idType","customIDType","db","defaultIDType","relationship","select","filteredOptions","some","input","option","counts","Map","item","set","get","duplicates","entries","duplicate","radio","valueMatchesOption","point","lng","String","lat","Number","validations"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/fields/validations.ts"],"sourcesContent":["import ObjectIdImport from 'bson-objectid'\n\nconst ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport\n\nimport type { TFunction } from '@payloadcms/translations'\nimport type { JSONSchema4 } from 'json-schema'\n\nimport type { RichTextAdapter } from '../admin/types.js'\nimport type { CollectionSlug } from '../index.js'\nimport type { Where } from '../types/index.js'\nimport type {\n ArrayField,\n BlocksField,\n CheckboxField,\n CodeField,\n DateField,\n EmailField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RelationshipValue,\n RelationshipValueMany,\n RelationshipValueSingle,\n RichTextField,\n SelectField,\n TextareaField,\n TextField,\n UploadField,\n Validate,\n ValueWithRelation,\n} from './config/types.js'\n\nimport { isNumber } from '../utilities/isNumber.js'\nimport { isValidID } from '../utilities/isValidID.js'\n\nexport type TextFieldValidation = Validate<string, unknown, unknown, TextField>\n\nexport type TextFieldManyValidation = Validate<string[], unknown, unknown, TextField>\n\nexport type TextFieldSingleValidation = Validate<string, unknown, unknown, TextField>\n\nexport const text: TextFieldValidation = (\n value,\n {\n hasMany,\n maxLength: fieldMaxLength,\n maxRows,\n minLength,\n minRows,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength!: number\n\n if (!required) {\n if (value === undefined || value === null) {\n return true\n }\n }\n\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult\n }\n }\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n\n const stringsToValidate: string[] = Array.isArray(value) ? value : [value!]\n\n for (const stringValue of stringsToValidate) {\n const length = stringValue?.length || 0\n\n if (typeof maxLength === 'number' && length > maxLength) {\n return t('validation:shorterThanMax', { label: t('general:value'), maxLength, stringValue })\n }\n\n if (typeof minLength === 'number' && length < minLength) {\n return t('validation:longerThanMin', { label: t('general:value'), minLength, stringValue })\n }\n }\n\n if (required) {\n if (!value || ((typeof value === 'string' || Array.isArray(value)) && value.length === 0)) {\n return t('validation:required')\n }\n }\n\n return true\n}\n\nexport type PasswordFieldValidation = Validate<string, unknown, unknown, TextField>\n\nexport const password: PasswordFieldValidation = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength = 3,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength!: number\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type ConfirmPasswordFieldValidation = Validate<\n string,\n unknown,\n { password: string },\n TextField\n>\n\nexport const confirmPassword: ConfirmPasswordFieldValidation = (\n value,\n { req: { t }, required, siblingData },\n) => {\n if (required && !value) {\n return t('validation:required')\n }\n\n if (value && value !== siblingData.password) {\n return t('fields:passwordsDoNotMatch')\n }\n\n return true\n}\n\nexport type EmailFieldValidation = Validate<string, unknown, { username?: string }, EmailField>\n\nexport const email: EmailFieldValidation = (\n value,\n {\n collectionSlug,\n req: {\n payload: { collections, config },\n t,\n },\n required,\n siblingData,\n },\n) => {\n if (collectionSlug) {\n const collection =\n collections?.[collectionSlug]?.config ??\n config.collections.find(({ slug }) => slug === collectionSlug)! // If this is run on the client, `collections` will be undefined, but `config.collections` will be available\n\n if (\n collection.auth.loginWithUsername &&\n !collection.auth.loginWithUsername?.requireUsername &&\n !collection.auth.loginWithUsername?.requireEmail\n ) {\n if (!value && !siblingData?.username) {\n return t('validation:required')\n }\n }\n }\n\n /**\n * Disallows emails with double quotes (e.g., \"user\"@example.com, user@\"example.com\", \"user@example.com\")\n * Rejects spaces anywhere in the email (e.g., user @example.com, user@ example.com, user name@example.com)\n * Prevents consecutive dots in the local or domain part (e.g., user..name@example.com, user@example..com)\n * Disallows domains that start or end with a hyphen (e.g., user@-example.com, user@example-.com)\n * Allows standard email formats (e.g., user@example.com, user.name+alias@example.co.uk, user-name@example.org)\n * Allows domains with consecutive hyphens as long as they are not leading/trailing (e.g., user@ex--ample.com)\n * Supports multiple subdomains (e.g., user@sub.domain.example.com)\n */\n const emailRegex =\n /^(?!.*\\.\\.)[\\w!#$%&'*+/=?^`{|}~-](?:[\\w!#$%&'*+/=?^`{|}~.-]*[\\w!#$%&'*+/=?^`{|}~-])?@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)*\\.[a-z]{2,}$/i\n\n if ((value && !emailRegex.test(value)) || (!value && required)) {\n return t('validation:emailAddress')\n }\n\n return true\n}\n\nexport type UsernameFieldValidation = Validate<string, unknown, { email?: string }, TextField>\n\nexport const username: UsernameFieldValidation = (\n value,\n {\n collectionSlug,\n req: {\n payload: { collections, config },\n t,\n },\n required,\n siblingData,\n },\n) => {\n let maxLength!: number\n\n if (collectionSlug) {\n const collection =\n collections?.[collectionSlug]?.config ??\n config.collections.find(({ slug }) => slug === collectionSlug)! // If this is run on the client, `collections` will be undefined, but `config.collections` will be available\n\n if (\n collection.auth.loginWithUsername &&\n !collection.auth.loginWithUsername?.requireUsername &&\n !collection.auth.loginWithUsername?.requireEmail\n ) {\n if (!value && !siblingData?.email) {\n return t('validation:required')\n }\n }\n }\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (!value && required) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type TextareaFieldValidation = Validate<string, unknown, unknown, TextareaField>\n\nexport const textarea: TextareaFieldValidation = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength!: number\n\n if (typeof config?.defaultMaxTextLength === 'number') {\n maxLength = config.defaultMaxTextLength\n }\n if (typeof fieldMaxLength === 'number') {\n maxLength = fieldMaxLength\n }\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type CodeFieldValidation = Validate<string, unknown, unknown, CodeField>\n\nexport const code: CodeFieldValidation = (value, { req: { t }, required }) => {\n if (required && (!value || (typeof value === 'string' && value.length === 0))) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type JSONFieldValidation = Validate<\n string,\n unknown,\n unknown,\n { jsonError?: string } & JSONField\n>\n\nexport const json: JSONFieldValidation = async (\n value,\n { jsonError, jsonSchema, req: { t }, required },\n) => {\n const isNotEmpty = (value: null | string | undefined) => {\n if (value === undefined || value === null) {\n return false\n }\n\n if (Array.isArray(value) && value.length === 0) {\n return false\n }\n\n if (typeof value === 'object' && Object.keys(value).length === 0) {\n return false\n }\n\n return true\n }\n\n const fetchSchema = ({ schema, uri }: { schema: JSONSchema4; uri: string }) => {\n if (uri && schema) {\n return schema\n }\n return fetch(uri)\n .then((response) => {\n if (!response.ok) {\n throw new Error('Network response was not ok')\n }\n return response.json()\n })\n .then((_json) => {\n const json = _json as {\n id: string\n }\n const jsonSchemaSanitizations = {\n id: undefined,\n $id: json.id,\n $schema: 'http://json-schema.org/draft-07/schema#',\n }\n\n return Object.assign(json, jsonSchemaSanitizations)\n })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n if (jsonError !== undefined) {\n return t('validation:invalidInput')\n }\n\n if (jsonSchema && isNotEmpty(value)) {\n try {\n jsonSchema.schema = fetchSchema(jsonSchema)\n const { schema } = jsonSchema\n const AjvModule = await import('ajv')\n // Handle both ESM default export and CJS interop where the module itself is the constructor\n const AjvClass: any =\n 'default' in AjvModule && typeof AjvModule.default === 'function'\n ? AjvModule.default\n : AjvModule\n const ajv = new AjvClass()\n\n if (!ajv.validate(schema, value)) {\n return ajv.errorsText()\n }\n } catch (error) {\n return error instanceof Error ? error.message : 'Unknown error'\n }\n }\n return true\n}\n\nexport type CheckboxFieldValidation = Validate<boolean, unknown, unknown, CheckboxField>\n\nexport const checkbox: CheckboxFieldValidation = (value, { req: { t }, required }) => {\n if ((value && typeof value !== 'boolean') || (required && typeof value !== 'boolean')) {\n return t('validation:trueOrFalse')\n }\n\n return true\n}\n\nexport type DateFieldValidation = Validate<Date, unknown, unknown, DateField>\n\nexport const date: DateFieldValidation = (\n value,\n { name, req: { t }, required, siblingData, timezone },\n) => {\n const validDate = value && !isNaN(Date.parse(value.toString()))\n\n // We need to also check for the timezone data based on this field's config\n // We cannot do this inside the timezone field validation as it's visually hidden\n const hasRequiredTimezone = timezone && required\n const selectedTimezone: string = siblingData?.[`${name}_tz` as keyof typeof siblingData]\n // Always resolve to true if the field is not required, as timezone may be optional too then\n const validTimezone = hasRequiredTimezone ? Boolean(selectedTimezone) : true\n\n if (validDate && validTimezone) {\n return true\n }\n\n if (validDate && !validTimezone) {\n return t('validation:timezoneRequired')\n }\n\n if (value) {\n return t('validation:notValidDate', { value })\n }\n\n if (required) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type RichTextFieldValidation = Validate<object, unknown, unknown, RichTextField>\n\nexport const richText: RichTextFieldValidation = async (value, options) => {\n if (!options?.editor) {\n throw new Error('richText field has no editor property.')\n }\n if (typeof options?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n const editor: RichTextAdapter = options?.editor\n\n return editor.validate(value, options)\n}\n\nconst validateArrayLength = (\n value: unknown,\n options: {\n maxRows?: number\n minRows?: number\n required?: boolean\n t: TFunction\n },\n) => {\n const { maxRows, minRows, required, t } = options\n\n const arrayLength = Array.isArray(value) ? value.length : (value as number) || 0\n\n if (!required && arrayLength === 0) {\n return true\n }\n\n if (minRows && arrayLength < minRows) {\n return t('validation:requiresAtLeast', { count: minRows, label: t('general:rows') })\n }\n\n if (maxRows && arrayLength > maxRows) {\n return t('validation:requiresNoMoreThan', { count: maxRows, label: t('general:rows') })\n }\n\n if (required && !arrayLength) {\n return t('validation:requiresAtLeast', { count: 1, label: t('general:row') })\n }\n\n return true\n}\n\nexport type NumberFieldValidation = Validate<number | number[], unknown, unknown, NumberField>\n\nexport type NumberFieldManyValidation = Validate<number[], unknown, unknown, NumberField>\n\nexport type NumberFieldSingleValidation = Validate<number, unknown, unknown, NumberField>\n\nexport const number: NumberFieldValidation = (\n value,\n { hasMany, max, maxRows, min, minRows, req: { t }, required },\n) => {\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult\n }\n }\n\n if (!value && !isNumber(value)) {\n // if no value is present, validate based on required\n if (required) {\n return t('validation:required')\n }\n if (!required) {\n return true\n }\n }\n\n const numbersToValidate: number[] = Array.isArray(value) ? value : [value!]\n\n for (const number of numbersToValidate) {\n if (!isNumber(number)) {\n return t('validation:enterNumber')\n }\n\n const numberValue = parseFloat(number as unknown as string)\n\n if (typeof max === 'number' && numberValue > max) {\n return t('validation:greaterThanMax', { label: t('general:value'), max, value })\n }\n\n if (typeof min === 'number' && numberValue < min) {\n return t('validation:lessThanMin', { label: t('general:value'), min, value })\n }\n }\n\n return true\n}\n\nexport type ArrayFieldValidation = Validate<unknown[], unknown, unknown, ArrayField>\n\nexport const array: ArrayFieldValidation = (value, { maxRows, minRows, req: { t }, required }) => {\n return validateArrayLength(value, { maxRows, minRows, required, t })\n}\n\nexport type BlocksFieldValidation = Validate<unknown, unknown, unknown, BlocksField>\n\n/**\n * This function validates the blocks in a blocks field against the provided filterOptions.\n * It will return a list of all block slugs found in the value, the allowed block slugs (if any),\n * and a list of invalid block slugs that are used despite being disallowed.\n *\n * @internal - this may break or be removed at any time\n */\nexport async function validateBlocksFilterOptions({\n id,\n data,\n filterOptions,\n req,\n siblingData,\n value,\n}: { value: Parameters<BlocksFieldValidation>[0] } & Pick<\n Parameters<BlocksFieldValidation>[1],\n 'data' | 'filterOptions' | 'id' | 'req' | 'siblingData'\n>): Promise<{\n /**\n * All block slugs found in the value of the blocks field\n */\n allBlockSlugs: string[]\n /**\n * All block slugs that are allowed. If undefined, all blocks are allowed.\n */\n allowedBlockSlugs: string[] | undefined\n /**\n * A list of block slugs that are used despite being disallowed. If undefined, field passed validation.\n */\n invalidBlockSlugs: string[] | undefined\n}> {\n const allBlockSlugs = Array.isArray(value)\n ? (value as Array<{ blockType?: string }>)\n .map((b) => b.blockType)\n .filter((s): s is string => Boolean(s))\n : []\n\n // if undefined => all blocks allowed\n let allowedBlockSlugs: string[] | undefined = undefined\n\n if (typeof filterOptions === 'function') {\n const result = await filterOptions({\n id: id!, // original code asserted presence\n data,\n req,\n siblingData,\n user: req.user,\n })\n if (result !== true && Array.isArray(result)) {\n allowedBlockSlugs = result\n }\n } else if (Array.isArray(filterOptions)) {\n allowedBlockSlugs = filterOptions\n }\n\n const invalidBlockSlugs: string[] = []\n if (allowedBlockSlugs) {\n for (const blockSlug of allBlockSlugs) {\n if (!allowedBlockSlugs.includes(blockSlug)) {\n invalidBlockSlugs.push(blockSlug)\n }\n }\n }\n\n return {\n allBlockSlugs,\n allowedBlockSlugs,\n invalidBlockSlugs,\n }\n}\nexport const blocks: BlocksFieldValidation = async (\n value,\n { id, data, filterOptions, maxRows, minRows, req: { t }, req, required, siblingData },\n) => {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') {\n return lengthValidationResult\n }\n\n if (filterOptions) {\n const { invalidBlockSlugs } = await validateBlocksFilterOptions({\n id,\n data,\n filterOptions,\n req,\n siblingData,\n value,\n })\n if (invalidBlockSlugs?.length) {\n return t('validation:invalidBlocks', { blocks: invalidBlockSlugs.join(', ') })\n }\n }\n\n return true\n}\n\nconst validateFilterOptions: Validate<\n unknown,\n unknown,\n unknown,\n RelationshipField | UploadField\n> = async (\n value,\n { id, blockData, data, filterOptions, relationTo, req, req: { t, user }, siblingData },\n) => {\n if (typeof filterOptions !== 'undefined' && value) {\n const options: {\n [collection: string]: (number | string)[]\n } = {}\n\n const falseCollections: CollectionSlug[] = []\n const collections = !Array.isArray(relationTo) ? [relationTo] : relationTo\n const values = Array.isArray(value) ? value : [value]\n\n for (const collection of collections) {\n try {\n let optionFilter =\n typeof filterOptions === 'function'\n ? await filterOptions({\n id: id!,\n blockData,\n data,\n relationTo: collection,\n req,\n siblingData,\n user,\n })\n : filterOptions\n\n if (optionFilter === true) {\n optionFilter = null\n }\n\n const valueIDs: (number | string)[] = []\n\n values.forEach((val) => {\n if (typeof val === 'object') {\n if (val?.value) {\n valueIDs.push(val.value)\n } else if (ObjectId.isValid(val)) {\n valueIDs.push(new ObjectId(val).toHexString())\n }\n }\n\n if (typeof val === 'string' || typeof val === 'number') {\n valueIDs.push(val)\n }\n })\n\n if (valueIDs.length > 0) {\n const findWhere: Where = {\n and: [{ id: { in: valueIDs } }],\n }\n\n // @ts-expect-error - I don't understand why optionFilter is inferred as `false | Where | null` instead of `boolean | Where | null`\n if (optionFilter && optionFilter !== true) {\n findWhere.and?.push(optionFilter)\n }\n\n if (optionFilter === false) {\n falseCollections.push(collection)\n }\n\n const result = await req.payloadDataLoader.find({\n collection,\n depth: 0,\n limit: 0,\n pagination: false,\n req,\n where: findWhere,\n })\n\n options[collection] = result.docs.map((doc) => doc.id)\n } else {\n options[collection] = []\n }\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Error validating filter options for collection ${collection}`,\n })\n options[collection] = []\n }\n }\n\n const invalidRelationships = values.filter((val) => {\n let collection: string\n let requestedID: number | string\n\n if (typeof relationTo === 'string') {\n collection = relationTo\n\n if (typeof val === 'string' || typeof val === 'number') {\n requestedID = val\n }\n\n if (typeof val === 'object' && ObjectId.isValid(val)) {\n requestedID = new ObjectId(val).toHexString()\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collection = val.relationTo\n requestedID = val.value\n }\n\n if (falseCollections.find((slug) => relationTo === slug)) {\n return true\n }\n\n if (!options[collection!]) {\n return true\n }\n\n return options[collection!]!.indexOf(requestedID!) === -1\n })\n\n if (invalidRelationships.length > 0) {\n return invalidRelationships.reduce((err, invalid, i) => {\n return `${err} ${JSON.stringify(invalid)}${\n invalidRelationships.length === i + 1 ? ',' : ''\n } `\n }, t('validation:invalidSelections')) as string\n }\n\n return true\n }\n\n return true\n}\n\nexport type UploadFieldValidation = Validate<unknown, unknown, unknown, UploadField>\n\nexport type UploadFieldManyValidation = Validate<unknown[], unknown, unknown, UploadField>\n\nexport type UploadFieldSingleValidation = Validate<unknown, unknown, unknown, UploadField>\n\nexport const upload: UploadFieldValidation = async (value, options) => {\n const {\n event,\n maxRows,\n minRows,\n relationTo,\n req: { payload, t },\n required,\n } = options\n\n if (\n ((!value && typeof value !== 'number') || (Array.isArray(value) && value.length === 0)) &&\n required\n ) {\n return t('validation:required')\n }\n\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length,\n })\n }\n\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length,\n })\n }\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [value]\n\n const invalidRelationships = values.filter((val) => {\n let collectionSlug: string\n let requestedID\n\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo\n\n // custom id\n if (val || typeof val === 'number') {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo\n requestedID = val.value\n }\n\n if (requestedID === null) {\n return false\n }\n\n const idType =\n payload.collections[collectionSlug!]?.customIDType || payload?.db?.defaultIDType || 'text'\n\n return !isValidID(requestedID, idType)\n })\n\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships\n .map((err, invalid) => {\n return `${err} ${JSON.stringify(invalid)}`\n })\n .join(', ')}`\n }\n }\n\n if (event === 'onChange') {\n return true\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport type RelationshipFieldValidation = Validate<\n RelationshipValue,\n unknown,\n unknown,\n RelationshipField\n>\n\nexport type RelationshipFieldManyValidation = Validate<\n RelationshipValueMany,\n unknown,\n unknown,\n RelationshipField\n>\n\nexport type RelationshipFieldSingleValidation = Validate<\n RelationshipValueSingle,\n unknown,\n unknown,\n RelationshipField\n>\n\nexport const relationship: RelationshipFieldValidation = async (value, options) => {\n const {\n event,\n maxRows,\n minRows,\n relationTo,\n req: { payload, t },\n required,\n } = options\n\n if (\n ((!value && typeof value !== 'number') || (Array.isArray(value) && value.length === 0)) &&\n required\n ) {\n return t('validation:required')\n }\n\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length,\n })\n }\n\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length,\n })\n }\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [value]\n\n const invalidRelationships = values.filter((val) => {\n let collectionSlug: string\n let requestedID: number | string | undefined | ValueWithRelation\n\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo\n\n // custom id\n if (val || typeof val === 'number') {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo\n requestedID = val.value\n }\n\n if (requestedID === null) {\n return false\n }\n\n const idType =\n payload.collections[collectionSlug!]?.customIDType || payload?.db?.defaultIDType || 'text'\n\n return !isValidID(requestedID as number | string, idType)\n })\n\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships\n .map((err, invalid) => {\n return `${err} ${JSON.stringify(invalid)}`\n })\n .join(', ')}`\n }\n }\n\n if (event === 'onChange') {\n return true\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport type SelectFieldValidation = Validate<string | string[], unknown, unknown, SelectField>\n\nexport type SelectFieldManyValidation = Validate<string[], unknown, unknown, SelectField>\n\nexport type SelectFieldSingleValidation = Validate<string, unknown, unknown, SelectField>\n\nexport const select: SelectFieldValidation = (\n value,\n { data, filterOptions, hasMany, options, req, req: { t }, required, siblingData },\n) => {\n const filteredOptions =\n typeof filterOptions === 'function'\n ? filterOptions({\n data,\n options,\n req,\n siblingData,\n })\n : options\n\n if (\n Array.isArray(value) &&\n value.some(\n (input) =>\n !filteredOptions.some(\n (option) => option === input || (typeof option !== 'string' && option?.value === input),\n ),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n // Check for duplicate values when hasMany is true\n if (hasMany && Array.isArray(value) && value.length > 1) {\n const counts = new Map<unknown, number>()\n\n for (const item of value) {\n counts.set(item, (counts.get(item) || 0) + 1)\n }\n\n const duplicates: unknown[] = []\n for (const [item, count] of counts.entries()) {\n if (count > 1) {\n // Add the item 'count' times to show all occurrences\n for (let i = 0; i < count; i++) {\n duplicates.push(item)\n }\n }\n }\n\n if (duplicates.length > 0) {\n return duplicates.reduce((err, duplicate, i) => {\n return `${err} ${JSON.stringify(duplicate)}${i < duplicates.length - 1 ? ',' : ''}`\n }, t('validation:invalidSelections')) as string\n }\n }\n\n if (\n typeof value === 'string' &&\n !filteredOptions.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n if (\n required &&\n (typeof value === 'undefined' ||\n value === null ||\n (hasMany && Array.isArray(value) && (value as [])?.length === 0))\n ) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport type RadioFieldValidation = Validate<unknown, unknown, unknown, RadioField>\n\nexport const radio: RadioFieldValidation = (value, { options, req: { t }, required }) => {\n if (value) {\n const valueMatchesOption = options.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n return valueMatchesOption || t('validation:invalidSelection')\n }\n\n return required ? t('validation:required') : true\n}\n\nexport type PointFieldValidation = Validate<\n [number | string, number | string],\n unknown,\n unknown,\n PointField\n>\n\nexport const point: PointFieldValidation = (value = ['', ''], { req: { t }, required }) => {\n if (value === null) {\n if (required) {\n return t('validation:required')\n }\n\n return true\n }\n\n const lng = parseFloat(String(value[0]))\n const lat = parseFloat(String(value[1]))\n if (\n required &&\n ((value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number') ||\n Number.isNaN(lng) ||\n Number.isNaN(lat) ||\n (Array.isArray(value) && value.length !== 2))\n ) {\n return t('validation:requiresTwoNumbers')\n }\n\n if ((value[1] && Number.isNaN(lng)) || (value[0] && Number.isNaN(lat))) {\n return t('validation:invalidInput')\n }\n\n // Validate longitude bounds (-180 to 180)\n if (value[0] && !Number.isNaN(lng) && (lng < -180 || lng > 180)) {\n return t('validation:longitudeOutOfBounds')\n }\n\n // Validate latitude bounds (-90 to 90)\n if (value[1] && !Number.isNaN(lat) && (lat < -90 || lat > 90)) {\n return t('validation:latitudeOutOfBounds')\n }\n\n return true\n}\n\n/**\n * Built-in field validations used by Payload\n *\n * These can be re-used in custom validations\n */\nexport const validations = {\n array,\n blocks,\n checkbox,\n code,\n confirmPassword,\n date,\n email,\n json,\n number,\n password,\n point,\n radio,\n relationship,\n richText,\n select,\n text,\n textarea,\n upload,\n}\n"],"names":["ObjectIdImport","ObjectId","default","isNumber","isValidID","text","value","hasMany","maxLength","fieldMaxLength","maxRows","minLength","minRows","req","payload","config","t","required","undefined","lengthValidationResult","validateArrayLength","defaultMaxTextLength","stringsToValidate","Array","isArray","stringValue","length","label","password","confirmPassword","siblingData","email","collectionSlug","collections","collection","find","slug","auth","loginWithUsername","requireUsername","requireEmail","username","emailRegex","test","textarea","code","json","jsonError","jsonSchema","isNotEmpty","Object","keys","fetchSchema","schema","uri","fetch","then","response","ok","Error","_json","jsonSchemaSanitizations","id","$id","$schema","assign","AjvModule","AjvClass","ajv","validate","errorsText","error","message","checkbox","date","name","timezone","validDate","isNaN","Date","parse","toString","hasRequiredTimezone","selectedTimezone","validTimezone","Boolean","richText","options","editor","arrayLength","count","number","max","min","numbersToValidate","numberValue","parseFloat","array","validateBlocksFilterOptions","data","filterOptions","allBlockSlugs","map","b","blockType","filter","s","allowedBlockSlugs","result","user","invalidBlockSlugs","blockSlug","includes","push","blocks","join","validateFilterOptions","blockData","relationTo","falseCollections","values","optionFilter","valueIDs","forEach","val","isValid","toHexString","findWhere","and","in","payloadDataLoader","depth","limit","pagination","where","docs","doc","err","logger","msg","invalidRelationships","requestedID","indexOf","reduce","invalid","i","JSON","stringify","upload","event","idType","customIDType","db","defaultIDType","relationship","select","filteredOptions","some","input","option","counts","Map","item","set","get","duplicates","entries","duplicate","radio","valueMatchesOption","point","lng","String","lat","Number","validations"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/globals/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAYrE,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,QAAQ,YAAY;AACpB;;;GAGG;AACH,+BAA+B,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,EAChF,sBAAsB,MAAM,EAAE,KAC7B,OAAO,CAAC,qBAAqB,CA4K/B,CAAA"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/globals/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAYrE,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,QAAQ,YAAY;AACpB;;;GAGG;AACH,+BAA+B,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,EAChF,sBAAsB,MAAM,EAAE,KAC7B,OAAO,CAAC,qBAAqB,CA8K/B,CAAA"}
@@ -69,6 +69,7 @@ export const sanitizeGlobal = async (config, global, /**
69
69
  global.endpoints.push(endpoint);
70
70
  }
71
71
  }
72
+ global.versions = global.versions ?? true;
72
73
  if (global.versions) {
73
74
  if (global.versions === true) {
74
75
  global.versions = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/globals/config/sanitize.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { GlobalConfig, SanitizedGlobalConfig } from './types.js'\n\nimport { defaultAccess } from '../../auth/defaultAccess.js'\nimport { sanitizeFields } from '../../fields/config/sanitize.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { mergeBaseFields } from '../../fields/mergeBaseFields.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { toWords } from '../../utilities/formatLabels.js'\nimport { traverseForLocalizedFields } from '../../utilities/traverseForLocalizedFields.js'\nimport { baseVersionFields } from '../../versions/baseFields.js'\nimport { versionDefaults } from '../../versions/defaults.js'\nimport { defaultGlobalEndpoints } from '../endpoints/index.js'\nexport const sanitizeGlobal = async (\n config: Config,\n global: GlobalConfig,\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 _validRelationships?: string[],\n): Promise<SanitizedGlobalConfig> => {\n if (global._sanitized) {\n return global as SanitizedGlobalConfig\n }\n\n global._sanitized = true\n\n global.label = global.label || toWords(global.slug)\n\n // /////////////////////////////////\n // Ensure that collection has required object structure\n // /////////////////////////////////\n\n global.endpoints = global.endpoints ?? []\n\n if (!global.hooks) {\n global.hooks = {}\n }\n\n if (!global.access) {\n global.access = {}\n }\n\n if (!global.admin) {\n global.admin = {}\n }\n\n if (!global.access.read) {\n global.access.read = defaultAccess\n }\n\n if (!global.access.update) {\n global.access.update = defaultAccess\n }\n\n if (!global.hooks.beforeValidate) {\n global.hooks.beforeValidate = []\n }\n\n if (!global.hooks.beforeChange) {\n global.hooks.beforeChange = []\n }\n\n if (!global.hooks.afterChange) {\n global.hooks.afterChange = []\n }\n\n if (!global.hooks.beforeRead) {\n global.hooks.beforeRead = []\n }\n\n if (!global.hooks.afterRead) {\n global.hooks.afterRead = []\n }\n\n // Sanitize fields\n const validRelationships = _validRelationships ?? config.collections?.map((c) => c.slug) ?? []\n\n global.fields = await sanitizeFields({\n config,\n fields: global.fields,\n globalConfig: global,\n parentIsLocalized: false,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n if (global.endpoints !== false) {\n if (!global.endpoints) {\n global.endpoints = []\n }\n\n for (const endpoint of defaultGlobalEndpoints) {\n global.endpoints.push(endpoint)\n }\n }\n\n if (global.versions) {\n if (global.versions === true) {\n global.versions = {\n drafts: false,\n max: 100,\n }\n }\n\n global.versions.max = typeof global.versions.max === 'number' ? global.versions.max : 100\n\n if (global.versions.drafts) {\n if (global.versions.drafts === true) {\n global.versions.drafts = {\n autosave: false,\n validate: false,\n }\n }\n\n const hasLocalizedFields = traverseForLocalizedFields(global.fields)\n\n if (config.localization && hasLocalizedFields) {\n if (global.versions.drafts.localizeStatus === undefined) {\n global.versions.drafts.localizeStatus = false\n }\n }\n\n global.versions.drafts.localizeStatus = config.experimental?.localizeStatus\n ? global.versions.drafts.localizeStatus\n : false\n\n if (global.versions.drafts.autosave === true) {\n global.versions.drafts.autosave = {\n interval: versionDefaults.autosaveInterval,\n }\n }\n\n if (global.versions.drafts.validate === undefined) {\n global.versions.drafts.validate = false\n }\n\n global.fields = mergeBaseFields(\n global.fields,\n baseVersionFields({\n localized: global.versions.drafts.localizeStatus ?? false,\n }),\n )\n }\n }\n\n if (!global.custom) {\n global.custom = {}\n }\n\n // /////////////////////////////////\n // Sanitize fields\n // /////////////////////////////////\n let hasUpdatedAt: boolean | null = null\n let hasCreatedAt: boolean | null = null\n global.fields.some((field) => {\n if (fieldAffectsData(field)) {\n if (field.name === 'updatedAt') {\n hasUpdatedAt = true\n }\n if (field.name === 'createdAt') {\n hasCreatedAt = true\n }\n }\n return hasCreatedAt && hasUpdatedAt\n })\n if (!hasUpdatedAt) {\n global.fields.push({\n name: 'updatedAt',\n type: 'date',\n admin: {\n disabled: { bulkEdit: true },\n hidden: true,\n },\n label: ({ t }) => t('general:updatedAt'),\n })\n }\n if (!hasCreatedAt) {\n global.fields.push({\n name: 'createdAt',\n type: 'date',\n admin: {\n disabled: { bulkEdit: true },\n hidden: true,\n },\n label: ({ t }) => t('general:createdAt'),\n })\n }\n\n ;(global as SanitizedGlobalConfig).flattenedFields = flattenAllFields({ fields: global.fields })\n\n return global as SanitizedGlobalConfig\n}\n"],"names":["defaultAccess","sanitizeFields","fieldAffectsData","mergeBaseFields","flattenAllFields","toWords","traverseForLocalizedFields","baseVersionFields","versionDefaults","defaultGlobalEndpoints","sanitizeGlobal","config","global","richTextSanitizationPromises","_validRelationships","_sanitized","label","slug","endpoints","hooks","access","admin","read","update","beforeValidate","beforeChange","afterChange","beforeRead","afterRead","validRelationships","collections","map","c","fields","globalConfig","parentIsLocalized","endpoint","push","versions","drafts","max","autosave","validate","hasLocalizedFields","localization","localizeStatus","undefined","experimental","interval","autosaveInterval","localized","custom","hasUpdatedAt","hasCreatedAt","some","field","name","type","disabled","bulkEdit","hidden","t","flattenedFields"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/globals/config/sanitize.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { GlobalConfig, SanitizedGlobalConfig } from './types.js'\n\nimport { defaultAccess } from '../../auth/defaultAccess.js'\nimport { sanitizeFields } from '../../fields/config/sanitize.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { mergeBaseFields } from '../../fields/mergeBaseFields.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { toWords } from '../../utilities/formatLabels.js'\nimport { traverseForLocalizedFields } from '../../utilities/traverseForLocalizedFields.js'\nimport { baseVersionFields } from '../../versions/baseFields.js'\nimport { versionDefaults } from '../../versions/defaults.js'\nimport { defaultGlobalEndpoints } from '../endpoints/index.js'\nexport const sanitizeGlobal = async (\n config: Config,\n global: GlobalConfig,\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 _validRelationships?: string[],\n): Promise<SanitizedGlobalConfig> => {\n if (global._sanitized) {\n return global as SanitizedGlobalConfig\n }\n\n global._sanitized = true\n\n global.label = global.label || toWords(global.slug)\n\n // /////////////////////////////////\n // Ensure that collection has required object structure\n // /////////////////////////////////\n\n global.endpoints = global.endpoints ?? []\n\n if (!global.hooks) {\n global.hooks = {}\n }\n\n if (!global.access) {\n global.access = {}\n }\n\n if (!global.admin) {\n global.admin = {}\n }\n\n if (!global.access.read) {\n global.access.read = defaultAccess\n }\n\n if (!global.access.update) {\n global.access.update = defaultAccess\n }\n\n if (!global.hooks.beforeValidate) {\n global.hooks.beforeValidate = []\n }\n\n if (!global.hooks.beforeChange) {\n global.hooks.beforeChange = []\n }\n\n if (!global.hooks.afterChange) {\n global.hooks.afterChange = []\n }\n\n if (!global.hooks.beforeRead) {\n global.hooks.beforeRead = []\n }\n\n if (!global.hooks.afterRead) {\n global.hooks.afterRead = []\n }\n\n // Sanitize fields\n const validRelationships = _validRelationships ?? config.collections?.map((c) => c.slug) ?? []\n\n global.fields = await sanitizeFields({\n config,\n fields: global.fields,\n globalConfig: global,\n parentIsLocalized: false,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n if (global.endpoints !== false) {\n if (!global.endpoints) {\n global.endpoints = []\n }\n\n for (const endpoint of defaultGlobalEndpoints) {\n global.endpoints.push(endpoint)\n }\n }\n\n global.versions = global.versions ?? true\n\n if (global.versions) {\n if (global.versions === true) {\n global.versions = {\n drafts: false,\n max: 100,\n }\n }\n\n global.versions.max = typeof global.versions.max === 'number' ? global.versions.max : 100\n\n if (global.versions.drafts) {\n if (global.versions.drafts === true) {\n global.versions.drafts = {\n autosave: false,\n validate: false,\n }\n }\n\n const hasLocalizedFields = traverseForLocalizedFields(global.fields)\n\n if (config.localization && hasLocalizedFields) {\n if (global.versions.drafts.localizeStatus === undefined) {\n global.versions.drafts.localizeStatus = false\n }\n }\n\n global.versions.drafts.localizeStatus = config.experimental?.localizeStatus\n ? global.versions.drafts.localizeStatus\n : false\n\n if (global.versions.drafts.autosave === true) {\n global.versions.drafts.autosave = {\n interval: versionDefaults.autosaveInterval,\n }\n }\n\n if (global.versions.drafts.validate === undefined) {\n global.versions.drafts.validate = false\n }\n\n global.fields = mergeBaseFields(\n global.fields,\n baseVersionFields({\n localized: global.versions.drafts.localizeStatus ?? false,\n }),\n )\n }\n }\n\n if (!global.custom) {\n global.custom = {}\n }\n\n // /////////////////////////////////\n // Sanitize fields\n // /////////////////////////////////\n let hasUpdatedAt: boolean | null = null\n let hasCreatedAt: boolean | null = null\n global.fields.some((field) => {\n if (fieldAffectsData(field)) {\n if (field.name === 'updatedAt') {\n hasUpdatedAt = true\n }\n if (field.name === 'createdAt') {\n hasCreatedAt = true\n }\n }\n return hasCreatedAt && hasUpdatedAt\n })\n if (!hasUpdatedAt) {\n global.fields.push({\n name: 'updatedAt',\n type: 'date',\n admin: {\n disabled: { bulkEdit: true },\n hidden: true,\n },\n label: ({ t }) => t('general:updatedAt'),\n })\n }\n if (!hasCreatedAt) {\n global.fields.push({\n name: 'createdAt',\n type: 'date',\n admin: {\n disabled: { bulkEdit: true },\n hidden: true,\n },\n label: ({ t }) => t('general:createdAt'),\n })\n }\n\n ;(global as SanitizedGlobalConfig).flattenedFields = flattenAllFields({ fields: global.fields })\n\n return global as SanitizedGlobalConfig\n}\n"],"names":["defaultAccess","sanitizeFields","fieldAffectsData","mergeBaseFields","flattenAllFields","toWords","traverseForLocalizedFields","baseVersionFields","versionDefaults","defaultGlobalEndpoints","sanitizeGlobal","config","global","richTextSanitizationPromises","_validRelationships","_sanitized","label","slug","endpoints","hooks","access","admin","read","update","beforeValidate","beforeChange","afterChange","beforeRead","afterRead","validRelationships","collections","map","c","fields","globalConfig","parentIsLocalized","endpoint","push","versions","drafts","max","autosave","validate","hasLocalizedFields","localization","localizeStatus","undefined","experimental","interval","autosaveInterval","localized","custom","hasUpdatedAt","hasCreatedAt","some","field","name","type","disabled","bulkEdit","hidden","t","flattenedFields"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { sanitizeGlobal } from './sanitize.js';
3
+ const minimalConfig = {
4
+ collections: [],
5
+ globals: []
6
+ };
7
+ describe('sanitizeGlobal — versions default', ()=>{
8
+ it('should default versions to true when not specified', async ()=>{
9
+ const global = {
10
+ slug: 'header',
11
+ fields: []
12
+ };
13
+ const result = await sanitizeGlobal(minimalConfig, global);
14
+ expect(result.versions).toEqual({
15
+ drafts: false,
16
+ max: 100
17
+ });
18
+ });
19
+ it('should preserve explicit versions: false', async ()=>{
20
+ const global = {
21
+ slug: 'header',
22
+ fields: [],
23
+ versions: false
24
+ };
25
+ const result = await sanitizeGlobal(minimalConfig, global);
26
+ expect(result.versions).toBe(false);
27
+ });
28
+ it('should preserve explicit versions object config', async ()=>{
29
+ const global = {
30
+ slug: 'header',
31
+ fields: [],
32
+ versions: {
33
+ drafts: true,
34
+ max: 50
35
+ }
36
+ };
37
+ const result = await sanitizeGlobal(minimalConfig, global);
38
+ expect(result.versions.max).toBe(50);
39
+ expect(result.versions.drafts).toBeTruthy();
40
+ });
41
+ });
42
+
43
+ //# sourceMappingURL=sanitize.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/globals/config/sanitize.spec.ts"],"sourcesContent":["import type { GlobalConfig } from './types.js'\n\nimport { describe, expect, it } from 'vitest'\n\nimport { sanitizeGlobal } from './sanitize.js'\n\nconst minimalConfig = {\n collections: [],\n globals: [],\n} as any\n\ndescribe('sanitizeGlobal — versions default', () => {\n it('should default versions to true when not specified', async () => {\n const global: GlobalConfig = {\n slug: 'header',\n fields: [],\n }\n\n const result = await sanitizeGlobal(minimalConfig, global)\n\n expect(result.versions).toEqual({ drafts: false, max: 100 })\n })\n\n it('should preserve explicit versions: false', async () => {\n const global: GlobalConfig = {\n slug: 'header',\n fields: [],\n versions: false,\n }\n\n const result = await sanitizeGlobal(minimalConfig, global)\n\n expect(result.versions).toBe(false)\n })\n\n it('should preserve explicit versions object config', async () => {\n const global: GlobalConfig = {\n slug: 'header',\n fields: [],\n versions: { drafts: true, max: 50 },\n }\n\n const result = await sanitizeGlobal(minimalConfig, global)\n\n expect((result.versions as any).max).toBe(50)\n expect((result.versions as any).drafts).toBeTruthy()\n })\n})\n"],"names":["describe","expect","it","sanitizeGlobal","minimalConfig","collections","globals","global","slug","fields","result","versions","toEqual","drafts","max","toBe","toBeTruthy"],"mappings":"AAEA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,cAAc,QAAQ,gBAAe;AAE9C,MAAMC,gBAAgB;IACpBC,aAAa,EAAE;IACfC,SAAS,EAAE;AACb;AAEAN,SAAS,qCAAqC;IAC5CE,GAAG,sDAAsD;QACvD,MAAMK,SAAuB;YAC3BC,MAAM;YACNC,QAAQ,EAAE;QACZ;QAEA,MAAMC,SAAS,MAAMP,eAAeC,eAAeG;QAEnDN,OAAOS,OAAOC,QAAQ,EAAEC,OAAO,CAAC;YAAEC,QAAQ;YAAOC,KAAK;QAAI;IAC5D;IAEAZ,GAAG,4CAA4C;QAC7C,MAAMK,SAAuB;YAC3BC,MAAM;YACNC,QAAQ,EAAE;YACVE,UAAU;QACZ;QAEA,MAAMD,SAAS,MAAMP,eAAeC,eAAeG;QAEnDN,OAAOS,OAAOC,QAAQ,EAAEI,IAAI,CAAC;IAC/B;IAEAb,GAAG,mDAAmD;QACpD,MAAMK,SAAuB;YAC3BC,MAAM;YACNC,QAAQ,EAAE;YACVE,UAAU;gBAAEE,QAAQ;gBAAMC,KAAK;YAAG;QACpC;QAEA,MAAMJ,SAAS,MAAMP,eAAeC,eAAeG;QAEnDN,OAAO,AAACS,OAAOC,QAAQ,CAASG,GAAG,EAAEC,IAAI,CAAC;QAC1Cd,OAAO,AAACS,OAAOC,QAAQ,CAASE,MAAM,EAAEG,UAAU;IACpD;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../../src/globals/operations/local/findOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAChF,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,yBAAyB,EAC1B,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,uBAAuB,CAAA;AAI9B,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAExE,KAAK,kBAAkB,CAAC,KAAK,SAAS,UAAU,EAAE,OAAO,SAAS,UAAU,IAAI;IAC9E;;;;;OAKG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;OAEG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAA;IACpC;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,WAAW,CAAA;IAC5B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;OAEG;IACH,IAAI,EAAE,KAAK,CAAA;IAEX;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,GACjD,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAA;AAE3C,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,UAAU,EAAE,OAAO,SAAS,UAAU,IACtE,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAA;AAErE,wBAAsB,kBAAkB,CACtC,KAAK,SAAS,UAAU,EACxB,OAAO,SAAS,oBAAoB,CAAC,KAAK,CAAC,EAE3C,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAoCpD"}
1
+ {"version":3,"file":"findOne.d.ts","sourceRoot":"","sources":["../../../../src/globals/operations/local/findOne.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAChF,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAC1B,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,yBAAyB,EAC1B,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAI1F,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAExE,KAAK,kBAAkB,CAAC,KAAK,SAAS,UAAU,EAAE,OAAO,SAAS,UAAU,IAAI;IAC9E;;;;;OAKG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;OAEG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAA;IACpC;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,WAAW,CAAA;IAC5B;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAC7B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;OAEG;IACH,IAAI,EAAE,KAAK,CAAA;IAEX;;OAEG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,GACjD,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAA;AAE3C,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,UAAU,EAAE,OAAO,SAAS,UAAU,IAAI,kBAAkB,CAC5F,KAAK,EACL,OAAO,CACR,GACC,uBAAuB,CAAC,KAAK,CAAC,CAAA;AAEhC,wBAAsB,kBAAkB,CACtC,KAAK,SAAS,UAAU,EACxB,OAAO,SAAS,oBAAoB,CAAC,KAAK,CAAC,EAE3C,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,yBAAyB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAoCpD"}