payload 3.80.0-internal-debug.cd99b1f → 3.80.0-internal.21e9c47

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 (259) hide show
  1. package/dist/admin/elements/Nav.d.ts +10 -0
  2. package/dist/admin/elements/Nav.d.ts.map +1 -1
  3. package/dist/admin/elements/Nav.js.map +1 -1
  4. package/dist/admin/functions/index.d.ts +1 -38
  5. package/dist/admin/functions/index.d.ts.map +1 -1
  6. package/dist/admin/functions/index.js.map +1 -1
  7. package/dist/admin/types.d.ts +5 -4
  8. package/dist/admin/types.d.ts.map +1 -1
  9. package/dist/admin/types.js.map +1 -1
  10. package/dist/admin/views/hierarchyList.d.ts +9 -0
  11. package/dist/admin/views/hierarchyList.d.ts.map +1 -0
  12. package/dist/admin/views/hierarchyList.js +3 -0
  13. package/dist/admin/views/hierarchyList.js.map +1 -0
  14. package/dist/admin/views/index.d.ts +1 -3
  15. package/dist/admin/views/index.d.ts.map +1 -1
  16. package/dist/admin/views/index.js.map +1 -1
  17. package/dist/admin/views/list.d.ts +37 -1
  18. package/dist/admin/views/list.d.ts.map +1 -1
  19. package/dist/admin/views/list.js.map +1 -1
  20. package/dist/auth/operations/me.js +5 -5
  21. package/dist/auth/operations/me.js.map +1 -1
  22. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
  23. package/dist/bin/generateImportMap/iterateCollections.js +1 -0
  24. package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
  25. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
  26. package/dist/bin/generateImportMap/iterateConfig.js +7 -0
  27. package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
  28. package/dist/collections/config/client.d.ts +3 -1
  29. package/dist/collections/config/client.d.ts.map +1 -1
  30. package/dist/collections/config/client.js +11 -0
  31. package/dist/collections/config/client.js.map +1 -1
  32. package/dist/collections/config/defaults.js +1 -1
  33. package/dist/collections/config/defaults.js.map +1 -1
  34. package/dist/collections/config/sanitize.d.ts.map +1 -1
  35. package/dist/collections/config/sanitize.js +3 -7
  36. package/dist/collections/config/sanitize.js.map +1 -1
  37. package/dist/collections/config/types.d.ts +29 -7
  38. package/dist/collections/config/types.d.ts.map +1 -1
  39. package/dist/collections/config/types.js.map +1 -1
  40. package/dist/collections/operations/create.js +17 -17
  41. package/dist/collections/operations/create.js.map +1 -1
  42. package/dist/collections/operations/findByID.js +3 -3
  43. package/dist/collections/operations/findByID.js.map +1 -1
  44. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  45. package/dist/collections/operations/utilities/update.js +5 -4
  46. package/dist/collections/operations/utilities/update.js.map +1 -1
  47. package/dist/config/client.d.ts.map +1 -1
  48. package/dist/config/client.js +0 -10
  49. package/dist/config/client.js.map +1 -1
  50. package/dist/config/defaults.d.ts.map +1 -1
  51. package/dist/config/defaults.js +0 -15
  52. package/dist/config/defaults.js.map +1 -1
  53. package/dist/config/sanitize.d.ts.map +1 -1
  54. package/dist/config/sanitize.js +3 -26
  55. package/dist/config/sanitize.js.map +1 -1
  56. package/dist/config/types.d.ts +26 -12
  57. package/dist/config/types.d.ts.map +1 -1
  58. package/dist/config/types.js.map +1 -1
  59. package/dist/exports/shared.d.ts +2 -3
  60. package/dist/exports/shared.d.ts.map +1 -1
  61. package/dist/exports/shared.js +1 -2
  62. package/dist/exports/shared.js.map +1 -1
  63. package/dist/fields/config/sanitize.d.ts.map +1 -1
  64. package/dist/fields/config/sanitize.js +4 -0
  65. package/dist/fields/config/sanitize.js.map +1 -1
  66. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
  67. package/dist/fields/config/sanitizeJoinField.js +3 -0
  68. package/dist/fields/config/sanitizeJoinField.js.map +1 -1
  69. package/dist/globals/config/types.d.ts +4 -0
  70. package/dist/globals/config/types.d.ts.map +1 -1
  71. package/dist/globals/config/types.js.map +1 -1
  72. package/dist/hierarchy/addHierarchyToCollection.d.ts +8 -0
  73. package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -0
  74. package/dist/hierarchy/addHierarchyToCollection.js +62 -0
  75. package/dist/hierarchy/addHierarchyToCollection.js.map +1 -0
  76. package/dist/hierarchy/buildParentField.d.ts +11 -0
  77. package/dist/hierarchy/buildParentField.d.ts.map +1 -0
  78. package/dist/hierarchy/buildParentField.js +42 -0
  79. package/dist/hierarchy/buildParentField.js.map +1 -0
  80. package/dist/hierarchy/constants.d.ts +15 -0
  81. package/dist/hierarchy/constants.d.ts.map +1 -0
  82. package/dist/hierarchy/constants.js +11 -0
  83. package/dist/hierarchy/constants.js.map +1 -0
  84. package/dist/hierarchy/createFolderField.d.ts +39 -0
  85. package/dist/hierarchy/createFolderField.d.ts.map +1 -0
  86. package/dist/hierarchy/createFolderField.js +54 -0
  87. package/dist/hierarchy/createFolderField.js.map +1 -0
  88. package/dist/hierarchy/createFoldersCollection.d.ts +57 -0
  89. package/dist/hierarchy/createFoldersCollection.d.ts.map +1 -0
  90. package/dist/hierarchy/createFoldersCollection.js +63 -0
  91. package/dist/hierarchy/createFoldersCollection.js.map +1 -0
  92. package/dist/hierarchy/createTagField.d.ts +44 -0
  93. package/dist/hierarchy/createTagField.d.ts.map +1 -0
  94. package/dist/hierarchy/createTagField.js +48 -0
  95. package/dist/hierarchy/createTagField.js.map +1 -0
  96. package/dist/hierarchy/createTagsCollection.d.ts +54 -0
  97. package/dist/hierarchy/createTagsCollection.d.ts.map +1 -0
  98. package/dist/hierarchy/createTagsCollection.js +56 -0
  99. package/dist/hierarchy/createTagsCollection.js.map +1 -0
  100. package/dist/hierarchy/endpoints/findRelated.d.ts +7 -0
  101. package/dist/hierarchy/endpoints/findRelated.d.ts.map +1 -0
  102. package/dist/hierarchy/endpoints/findRelated.js +36 -0
  103. package/dist/hierarchy/endpoints/findRelated.js.map +1 -0
  104. package/dist/hierarchy/getInitialTreeData.d.ts +24 -0
  105. package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -0
  106. package/dist/hierarchy/getInitialTreeData.js +120 -0
  107. package/dist/hierarchy/getInitialTreeData.js.map +1 -0
  108. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts +14 -0
  109. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts.map +1 -0
  110. package/dist/hierarchy/hooks/collectionAfterDelete.js +21 -0
  111. package/dist/hierarchy/hooks/collectionAfterDelete.js.map +1 -0
  112. package/dist/hierarchy/hooks/collectionAfterRead.d.ts +27 -0
  113. package/dist/hierarchy/hooks/collectionAfterRead.d.ts.map +1 -0
  114. package/dist/hierarchy/hooks/collectionAfterRead.js +64 -0
  115. package/dist/hierarchy/hooks/collectionAfterRead.js.map +1 -0
  116. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts +19 -0
  117. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts.map +1 -0
  118. package/dist/hierarchy/hooks/collectionBeforeChange.js +90 -0
  119. package/dist/hierarchy/hooks/collectionBeforeChange.js.map +1 -0
  120. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts +15 -0
  121. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts.map +1 -0
  122. package/dist/hierarchy/hooks/collectionBeforeDelete.js +20 -0
  123. package/dist/hierarchy/hooks/collectionBeforeDelete.js.map +1 -0
  124. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts +8 -0
  125. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts.map +1 -0
  126. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js +108 -0
  127. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js.map +1 -0
  128. package/dist/hierarchy/injectHierarchyButton.d.ts +14 -0
  129. package/dist/hierarchy/injectHierarchyButton.d.ts.map +1 -0
  130. package/dist/hierarchy/injectHierarchyButton.js +37 -0
  131. package/dist/hierarchy/injectHierarchyButton.js.map +1 -0
  132. package/dist/hierarchy/operations/findRelatedDocuments.d.ts +24 -0
  133. package/dist/hierarchy/operations/findRelatedDocuments.d.ts.map +1 -0
  134. package/dist/hierarchy/operations/findRelatedDocuments.js +73 -0
  135. package/dist/hierarchy/operations/findRelatedDocuments.js.map +1 -0
  136. package/dist/hierarchy/operations/index.d.ts +2 -0
  137. package/dist/hierarchy/operations/index.d.ts.map +1 -0
  138. package/dist/hierarchy/operations/index.js +3 -0
  139. package/dist/hierarchy/operations/index.js.map +1 -0
  140. package/dist/hierarchy/resolveHierarchyCollections.d.ts +23 -0
  141. package/dist/hierarchy/resolveHierarchyCollections.d.ts.map +1 -0
  142. package/dist/hierarchy/resolveHierarchyCollections.js +312 -0
  143. package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -0
  144. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts +14 -0
  145. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +1 -0
  146. package/dist/hierarchy/sanitizeHierarchyCollection.js +125 -0
  147. package/dist/hierarchy/sanitizeHierarchyCollection.js.map +1 -0
  148. package/dist/hierarchy/types.d.ts +137 -0
  149. package/dist/hierarchy/types.d.ts.map +1 -0
  150. package/dist/hierarchy/types.js +6 -0
  151. package/dist/hierarchy/types.js.map +1 -0
  152. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts +71 -0
  153. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts.map +1 -0
  154. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js +65 -0
  155. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js.map +1 -0
  156. package/dist/hierarchy/utils/computePaths.d.ts +31 -0
  157. package/dist/hierarchy/utils/computePaths.d.ts.map +1 -0
  158. package/dist/hierarchy/utils/computePaths.js +371 -0
  159. package/dist/hierarchy/utils/computePaths.js.map +1 -0
  160. package/dist/hierarchy/utils/findUseAsTitle.d.ts +6 -0
  161. package/dist/hierarchy/utils/findUseAsTitle.d.ts.map +1 -0
  162. package/dist/hierarchy/utils/findUseAsTitle.js +72 -0
  163. package/dist/hierarchy/utils/findUseAsTitle.js.map +1 -0
  164. package/dist/hierarchy/utils/getAncestors.d.ts +34 -0
  165. package/dist/hierarchy/utils/getAncestors.d.ts.map +1 -0
  166. package/dist/hierarchy/utils/getAncestors.js +94 -0
  167. package/dist/hierarchy/utils/getAncestors.js.map +1 -0
  168. package/dist/hierarchy/utils/getLocalizedValue.d.ts +30 -0
  169. package/dist/hierarchy/utils/getLocalizedValue.d.ts.map +1 -0
  170. package/dist/hierarchy/utils/getLocalizedValue.js +46 -0
  171. package/dist/hierarchy/utils/getLocalizedValue.js.map +1 -0
  172. package/dist/hierarchy/utils/getLocalizedValue.spec.js +250 -0
  173. package/dist/hierarchy/utils/getLocalizedValue.spec.js.map +1 -0
  174. package/dist/index.bundled.d.ts +567 -280
  175. package/dist/index.d.ts +23 -9
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +13 -5
  178. package/dist/index.js.map +1 -1
  179. package/dist/preferences/keys.d.ts +8 -4
  180. package/dist/preferences/keys.d.ts.map +1 -1
  181. package/dist/preferences/keys.js +7 -4
  182. package/dist/preferences/keys.js.map +1 -1
  183. package/dist/types/index.d.ts +1 -0
  184. package/dist/types/index.d.ts.map +1 -1
  185. package/dist/types/index.js.map +1 -1
  186. package/dist/utilities/extractID.js +1 -1
  187. package/dist/utilities/extractID.js.map +1 -1
  188. package/dist/utilities/formatAdminURL.d.ts +13 -2
  189. package/dist/utilities/formatAdminURL.d.ts.map +1 -1
  190. package/dist/utilities/formatAdminURL.js.map +1 -1
  191. package/package.json +2 -2
  192. package/dist/admin/views/folderList.d.ts +0 -56
  193. package/dist/admin/views/folderList.d.ts.map +0 -1
  194. package/dist/admin/views/folderList.js +0 -3
  195. package/dist/admin/views/folderList.js.map +0 -1
  196. package/dist/folders/addFolderCollection.d.ts +0 -10
  197. package/dist/folders/addFolderCollection.d.ts.map +0 -1
  198. package/dist/folders/addFolderCollection.js +0 -26
  199. package/dist/folders/addFolderCollection.js.map +0 -1
  200. package/dist/folders/addFolderFieldToCollection.d.ts +0 -8
  201. package/dist/folders/addFolderFieldToCollection.d.ts.map +0 -1
  202. package/dist/folders/addFolderFieldToCollection.js +0 -20
  203. package/dist/folders/addFolderFieldToCollection.js.map +0 -1
  204. package/dist/folders/buildFolderField.d.ts +0 -8
  205. package/dist/folders/buildFolderField.d.ts.map +0 -1
  206. package/dist/folders/buildFolderField.js +0 -87
  207. package/dist/folders/buildFolderField.js.map +0 -1
  208. package/dist/folders/constants.d.ts +0 -3
  209. package/dist/folders/constants.d.ts.map +0 -1
  210. package/dist/folders/constants.js +0 -4
  211. package/dist/folders/constants.js.map +0 -1
  212. package/dist/folders/createFolderCollection.d.ts +0 -11
  213. package/dist/folders/createFolderCollection.d.ts.map +0 -1
  214. package/dist/folders/createFolderCollection.js +0 -115
  215. package/dist/folders/createFolderCollection.js.map +0 -1
  216. package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts +0 -8
  217. package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts.map +0 -1
  218. package/dist/folders/hooks/deleteSubfoldersAfterDelete.js +0 -15
  219. package/dist/folders/hooks/deleteSubfoldersAfterDelete.js.map +0 -1
  220. package/dist/folders/hooks/dissasociateAfterDelete.d.ts +0 -8
  221. package/dist/folders/hooks/dissasociateAfterDelete.d.ts.map +0 -1
  222. package/dist/folders/hooks/dissasociateAfterDelete.js +0 -20
  223. package/dist/folders/hooks/dissasociateAfterDelete.js.map +0 -1
  224. package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts +0 -5
  225. package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts.map +0 -1
  226. package/dist/folders/hooks/ensureSafeCollectionsChange.js +0 -107
  227. package/dist/folders/hooks/ensureSafeCollectionsChange.js.map +0 -1
  228. package/dist/folders/hooks/reparentChildFolder.d.ts +0 -24
  229. package/dist/folders/hooks/reparentChildFolder.d.ts.map +0 -1
  230. package/dist/folders/hooks/reparentChildFolder.js +0 -72
  231. package/dist/folders/hooks/reparentChildFolder.js.map +0 -1
  232. package/dist/folders/types.d.ts +0 -118
  233. package/dist/folders/types.d.ts.map +0 -1
  234. package/dist/folders/types.js +0 -3
  235. package/dist/folders/types.js.map +0 -1
  236. package/dist/folders/utils/buildFolderWhereConstraints.d.ts +0 -13
  237. package/dist/folders/utils/buildFolderWhereConstraints.d.ts.map +0 -1
  238. package/dist/folders/utils/buildFolderWhereConstraints.js +0 -45
  239. package/dist/folders/utils/buildFolderWhereConstraints.js.map +0 -1
  240. package/dist/folders/utils/formatFolderOrDocumentItem.d.ts +0 -12
  241. package/dist/folders/utils/formatFolderOrDocumentItem.d.ts.map +0 -1
  242. package/dist/folders/utils/formatFolderOrDocumentItem.js +0 -30
  243. package/dist/folders/utils/formatFolderOrDocumentItem.js.map +0 -1
  244. package/dist/folders/utils/getFolderBreadcrumbs.d.ts +0 -14
  245. package/dist/folders/utils/getFolderBreadcrumbs.d.ts.map +0 -1
  246. package/dist/folders/utils/getFolderBreadcrumbs.js +0 -45
  247. package/dist/folders/utils/getFolderBreadcrumbs.js.map +0 -1
  248. package/dist/folders/utils/getFolderData.d.ts +0 -33
  249. package/dist/folders/utils/getFolderData.d.ts.map +0 -1
  250. package/dist/folders/utils/getFolderData.js +0 -88
  251. package/dist/folders/utils/getFolderData.js.map +0 -1
  252. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts +0 -24
  253. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts.map +0 -1
  254. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js +0 -66
  255. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js.map +0 -1
  256. package/dist/folders/utils/getOrphanedDocs.d.ts +0 -15
  257. package/dist/folders/utils/getOrphanedDocs.d.ts.map +0 -1
  258. package/dist/folders/utils/getOrphanedDocs.js +0 -40
  259. package/dist/folders/utils/getOrphanedDocs.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/config/sanitize.ts"],"sourcesContent":["import { deepMergeSimple } from '@payloadcms/translations/utilities'\n\nimport type {\n CollectionConfig,\n SanitizedJoin,\n SanitizedJoins,\n} from '../../collections/config/types.js'\nimport type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { GlobalConfig } from '../../globals/config/types.js'\nimport type { Field } from './types.js'\n\nimport {\n DuplicateFieldName,\n InvalidConfiguration,\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingEditorProp,\n MissingFieldType,\n} from '../../errors/index.js'\nimport { ReservedFieldName } from '../../errors/ReservedFieldName.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { formatLabels, toWords } from '../../utilities/formatLabels.js'\nimport { validateTimezones } from '../../utilities/validateTimezones.js'\nimport { baseBlockFields } from '../baseFields/baseBlockFields.js'\nimport { baseIDField } from '../baseFields/baseIDField.js'\nimport { baseTimezoneField } from '../baseFields/timezone/baseField.js'\nimport { defaultTimezones } from '../baseFields/timezone/defaultTimezones.js'\nimport { getFieldPaths } from '../getFieldPaths.js'\nimport { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js'\nimport { validations } from '../validations.js'\nimport {\n reservedAPIKeyFieldNames,\n reservedBaseAuthFieldNames,\n reservedBaseUploadFieldNames,\n reservedVerifyFieldNames,\n} from './reservedFieldNames.js'\nimport { sanitizeJoinField } from './sanitizeJoinField.js'\nimport {\n fieldAffectsData as _fieldAffectsData,\n fieldIsLocalized,\n fieldIsVirtual,\n tabHasName,\n} from './types.js'\n\ntype Args = {\n collectionConfig?: CollectionConfig\n config: Config\n existingFieldNames?: Set<string>\n fields: Field[]\n globalConfig?: GlobalConfig\n /**\n * Used to prevent unnecessary sanitization of fields that are not top-level.\n */\n isTopLevelField?: boolean\n joinPath?: string\n /**\n * When not passed in, assume that join are not supported (globals, arrays, blocks)\n */\n joins?: SanitizedJoins\n /**\n * A string of '-' separated indexes representing where\n * to find this field in a given field schema array.\n */\n parentIndexPath?: string\n parentIsLocalized: boolean\n /**\n * Path for parent fields relative to their position in the schema.\n */\n parentSchemaPath?: string\n polymorphicJoins?: SanitizedJoin[]\n /**\n * If true, a richText field will require an editor property to be set, as the sanitizeFields function will not add it from the payload config if not present.\n *\n * @default false\n */\n requireFieldLevelRichTextEditor?: boolean\n /**\n * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises\n * so that you can sanitize them together, after the config has been sanitized.\n */\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>\n /**\n * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.\n * This validation will be skipped if validRelationships is null.\n */\n validRelationships: null | string[]\n}\n\nexport const sanitizeFields = async ({\n collectionConfig,\n config,\n existingFieldNames = new Set(),\n fields,\n globalConfig,\n isTopLevelField = true,\n joinPath = '',\n joins,\n parentIndexPath = '',\n parentIsLocalized,\n parentSchemaPath = '',\n polymorphicJoins,\n requireFieldLevelRichTextEditor = false,\n richTextSanitizationPromises,\n validRelationships,\n}: Args): Promise<Field[]> => {\n if (!fields) {\n return []\n }\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]!\n\n if ('_sanitized' in field && field._sanitized === true) {\n continue\n }\n\n if ('_sanitized' in field) {\n field._sanitized = true\n }\n\n if (!field.type) {\n throw new MissingFieldType(field)\n }\n\n const fieldAffectsData = _fieldAffectsData(field)\n\n const { indexPath, schemaPath } = getFieldPaths({\n field,\n index: i,\n parentIndexPath,\n parentSchemaPath,\n })\n\n if (isTopLevelField && fieldAffectsData && field.name) {\n if (collectionConfig && collectionConfig.upload) {\n if (reservedBaseUploadFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n }\n\n if (\n collectionConfig &&\n collectionConfig.auth &&\n typeof collectionConfig.auth === 'object' &&\n !collectionConfig.auth.disableLocalStrategy\n ) {\n if (reservedBaseAuthFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n\n if (collectionConfig.auth.verify) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n if (reservedAPIKeyFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n if (reservedVerifyFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n }\n }\n }\n\n // assert that field names do not contain forbidden characters\n if (fieldAffectsData && field.name.includes('.')) {\n throw new InvalidFieldName(field, field.name)\n }\n\n // Auto-label\n if (\n 'name' in field &&\n field.name &&\n typeof field.label !== 'object' &&\n typeof field.label !== 'string' &&\n typeof field.label !== 'function' &&\n field.label !== false\n ) {\n field.label = toWords(field.name)\n }\n\n if (\n field.type === 'checkbox' &&\n typeof field.defaultValue === 'undefined' &&\n field.required === true\n ) {\n field.defaultValue = false\n }\n\n if (field.type === 'join') {\n sanitizeJoinField({ config, field, joinPath, joins, parentIsLocalized, polymorphicJoins })\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n // Validate that relationTo is not empty\n if (Array.isArray(field.relationTo) && field.relationTo.length === 0) {\n throw new Error(\n `Field \"${field.name}\" of type \"${field.type}\" has an empty relationTo array. At least one collection must be specified.`,\n )\n }\n\n if (validRelationships) {\n const relationships = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n\n relationships.forEach((relationship: string) => {\n if (!validRelationships.includes(relationship)) {\n throw new InvalidFieldRelationship(field, relationship)\n }\n })\n }\n\n if (field.min && !field.minRows) {\n console.warn(\n `(payload): The \"min\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"minRows\" instead.`,\n )\n field.minRows = field.min\n }\n\n if (field.max && !field.maxRows) {\n console.warn(\n `(payload): The \"max\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"maxRows\" instead.`,\n )\n field.maxRows = field.max\n }\n }\n\n if (field.type === 'upload') {\n if (!field.admin || !('isSortable' in field.admin)) {\n field.admin = {\n isSortable: true,\n ...field.admin,\n }\n }\n }\n\n if (field.type === 'array' && field.fields) {\n const hasCustomID = field.fields.some((f) => 'name' in f && f.name === 'id')\n if (!hasCustomID) {\n field.fields.push(baseIDField)\n }\n }\n\n if ((field.type === 'blocks' || field.type === 'array') && field.label) {\n field.labels = field.labels || formatLabels(field.name)\n }\n\n if (fieldAffectsData) {\n if (existingFieldNames.has(field.name)) {\n throw new DuplicateFieldName(field.name)\n } else if (!['blockName', 'id'].includes(field.name)) {\n existingFieldNames.add(field.name)\n }\n\n if (typeof field.localized !== 'undefined') {\n let shouldDisableLocalized = !config.localization\n\n if (\n process.env.NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized !== 'true' &&\n parentIsLocalized &&\n // @todo PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY=true will be the default in 4.0\n process.env.PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY !== 'true'\n ) {\n shouldDisableLocalized = true\n }\n\n if (shouldDisableLocalized) {\n delete field.localized\n }\n }\n\n if (typeof field.validate === 'undefined') {\n const defaultValidate = validations[field.type as keyof typeof validations]\n if (defaultValidate) {\n field.validate = (val: any, options: any) =>\n defaultValidate(val, { ...field, ...options })\n } else {\n field.validate = (): true => true\n }\n }\n\n if (!field.hooks) {\n field.hooks = {}\n }\n\n if (!field.access) {\n field.access = {}\n }\n\n setDefaultBeforeDuplicate(field, parentIsLocalized)\n }\n\n if (!field.admin) {\n field.admin = {}\n }\n\n // Make sure that the richText field has an editor\n if (field.type === 'richText') {\n const sanitizeRichText = async (_config: SanitizedConfig) => {\n if (!field.editor) {\n if (_config.editor && !requireFieldLevelRichTextEditor) {\n // config.editor should be sanitized at this point\n field.editor = _config.editor\n } else {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n }\n\n if (typeof field.editor === 'function') {\n field.editor = await field.editor({\n config: _config,\n isRoot: requireFieldLevelRichTextEditor,\n parentIsLocalized: (parentIsLocalized || field.localized)!,\n })\n }\n\n if (field.editor.i18n && Object.keys(field.editor.i18n).length >= 0) {\n config.i18n!.translations = deepMergeSimple(config.i18n!.translations!, field.editor.i18n)\n }\n }\n if (richTextSanitizationPromises) {\n richTextSanitizationPromises.push(sanitizeRichText)\n } else {\n await sanitizeRichText(config as unknown as SanitizedConfig)\n }\n }\n\n if (field.type === 'blocks' && field.blocks) {\n if (field.blockReferences && field.blocks?.length) {\n throw new Error('You cannot have both blockReferences and blocks in the same blocks field')\n }\n\n const blockSlugs: string[] = []\n\n for (const block of field.blockReferences ?? field.blocks) {\n const blockSlug = typeof block === 'string' ? block : block.slug\n\n if (blockSlugs.includes(blockSlug)) {\n throw new DuplicateFieldName(blockSlug)\n }\n\n blockSlugs.push(blockSlug)\n\n if (typeof block === 'string') {\n continue\n }\n\n if (block._sanitized === true) {\n continue\n }\n\n block._sanitized = true\n block.fields = block.fields.concat(baseBlockFields)\n block.labels = !block.labels ? formatLabels(block.slug) : block.labels\n\n block.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: new Set(),\n fields: block.fields,\n isTopLevelField: false,\n parentIndexPath: '',\n parentIsLocalized: (parentIsLocalized || field.localized)!,\n parentSchemaPath: schemaPath + '.' + block.slug,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n }\n\n if ('fields' in field && field.fields) {\n field.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: fieldAffectsData ? new Set() : existingFieldNames,\n fields: field.fields,\n isTopLevelField: isTopLevelField && !fieldAffectsData,\n joinPath: fieldAffectsData ? `${joinPath ? joinPath + '.' : ''}${field.name}` : joinPath,\n joins,\n parentIndexPath: fieldAffectsData ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || fieldIsLocalized(field),\n parentSchemaPath: schemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n\n if (field.type === 'tabs') {\n for (let j = 0; j < field.tabs.length; j++) {\n const tab = field.tabs[j]!\n\n const isNamedTab = tabHasName(tab)\n\n if (isNamedTab && typeof tab.label === 'undefined') {\n tab.label = toWords(tab.name)\n }\n\n const { indexPath: tabIndexPath, schemaPath: tabSchemaPath } = getFieldPaths({\n field: tab,\n index: j,\n parentIndexPath: indexPath,\n parentSchemaPath: schemaPath,\n })\n\n if (\n 'admin' in tab &&\n tab.admin?.condition &&\n typeof tab.admin.condition === 'function' &&\n !tab.id\n ) {\n tab.id = tabSchemaPath\n }\n\n tab.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: isNamedTab ? new Set() : existingFieldNames,\n fields: tab.fields,\n isTopLevelField: isTopLevelField && !isNamedTab,\n joinPath: isNamedTab ? `${joinPath ? joinPath + '.' : ''}${tab.name}` : joinPath,\n joins,\n parentIndexPath: isNamedTab ? '' : tabIndexPath,\n parentIsLocalized: parentIsLocalized || (isNamedTab && tab.localized)!,\n parentSchemaPath: tabSchemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n field.tabs[j] = tab\n }\n }\n\n if (field.type === 'ui' && typeof field.admin.disableBulkEdit === 'undefined') {\n field.admin.disableBulkEdit = true\n }\n\n fields[i] = field\n\n // Insert our field after assignment\n if (field.type === 'date' && field.timezone) {\n const name = field.name + '_tz'\n\n let defaultTimezone =\n field.timezone && typeof field.timezone === 'object'\n ? field.timezone.defaultTimezone\n : config.admin?.timezones?.defaultTimezone\n\n const required =\n field.required ||\n (field.timezone && typeof field.timezone === 'object' && field.timezone.required)\n\n const supportedTimezones =\n field.timezone && typeof field.timezone === 'object' && field.timezone.supportedTimezones\n ? field.timezone.supportedTimezones\n : config.admin?.timezones?.supportedTimezones\n\n const options =\n typeof supportedTimezones === 'function'\n ? supportedTimezones({ defaultTimezones })\n : supportedTimezones\n\n validateTimezones({\n source: `field \"${field.name}\" timezone.supportedTimezones`,\n timezones: options,\n })\n\n if (options && options.length === 1 && options[0]?.value) {\n defaultTimezone = options[0].value\n }\n\n // Generate label for timezone field\n // Use parent field's label + ' Tz' if it's a simple string, otherwise fallback to name\n const timezoneLabel = typeof field.label === 'string' ? `${field.label} Tz` : toWords(name)\n\n // Need to set the options here manually so that any database enums are generated correctly\n // The UI component will import the options from the config\n const baseField = baseTimezoneField({\n name,\n defaultValue: defaultTimezone,\n label: timezoneLabel,\n options,\n required,\n })\n\n // Apply override if provided\n const timezoneField =\n typeof field.timezone === 'object' && typeof field.timezone.override === 'function'\n ? field.timezone.override({ baseField })\n : baseField\n\n fields.splice(++i, 0, timezoneField)\n }\n\n if ('virtual' in field && typeof field.virtual === 'string') {\n const virtualField = field\n const fields = (collectionConfig || globalConfig)?.fields\n if (fields) {\n let flattenFields = flattenAllFields({ fields })\n const paths = field.virtual.split('.')\n let isHasMany = false\n\n for (const [i, segment] of paths.entries()) {\n const field = flattenFields.find((e) => e.name === segment)\n if (!field) {\n break\n }\n\n if (field.type === 'group' || field.type === 'tab' || field.type === 'array') {\n flattenFields = field.flattenedFields\n } else if (\n (field.type === 'relationship' || field.type === 'upload') &&\n i !== paths.length - 1 &&\n typeof field.relationTo === 'string'\n ) {\n if (\n field.hasMany &&\n (virtualField.type === 'text' ||\n virtualField.type === 'number' ||\n virtualField.type === 'select')\n ) {\n if (isHasMany) {\n throw new InvalidConfiguration(\n `Virtual field ${virtualField.name} in ${globalConfig ? `global ${globalConfig.slug}` : `collection ${collectionConfig?.slug}`} references 2 or more hasMany relationships on the path ${virtualField.virtual} which is not allowed.`,\n )\n }\n\n isHasMany = true\n virtualField.hasMany = true\n }\n const relatedCollection = config.collections?.find((e) => e.slug === field.relationTo)\n if (relatedCollection) {\n flattenFields = flattenAllFields({ fields: relatedCollection.fields })\n }\n }\n }\n }\n }\n }\n\n return fields\n}\n"],"names":["deepMergeSimple","DuplicateFieldName","InvalidConfiguration","InvalidFieldName","InvalidFieldRelationship","MissingEditorProp","MissingFieldType","ReservedFieldName","flattenAllFields","formatLabels","toWords","validateTimezones","baseBlockFields","baseIDField","baseTimezoneField","defaultTimezones","getFieldPaths","setDefaultBeforeDuplicate","validations","reservedAPIKeyFieldNames","reservedBaseAuthFieldNames","reservedBaseUploadFieldNames","reservedVerifyFieldNames","sanitizeJoinField","fieldAffectsData","_fieldAffectsData","fieldIsLocalized","tabHasName","sanitizeFields","collectionConfig","config","existingFieldNames","Set","fields","globalConfig","isTopLevelField","joinPath","joins","parentIndexPath","parentIsLocalized","parentSchemaPath","polymorphicJoins","requireFieldLevelRichTextEditor","richTextSanitizationPromises","validRelationships","i","length","field","_sanitized","type","indexPath","schemaPath","index","name","upload","includes","auth","disableLocalStrategy","verify","label","defaultValue","required","Array","isArray","relationTo","Error","relationships","forEach","relationship","min","minRows","console","warn","max","maxRows","admin","isSortable","hasCustomID","some","f","push","labels","has","add","localized","shouldDisableLocalized","localization","process","env","NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized","PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY","validate","defaultValidate","val","options","hooks","access","sanitizeRichText","_config","editor","isRoot","i18n","Object","keys","translations","blocks","blockReferences","blockSlugs","block","blockSlug","slug","concat","j","tabs","tab","isNamedTab","tabIndexPath","tabSchemaPath","condition","id","disableBulkEdit","timezone","defaultTimezone","timezones","supportedTimezones","source","value","timezoneLabel","baseField","timezoneField","override","splice","virtual","virtualField","flattenFields","paths","split","isHasMany","segment","entries","find","e","flattenedFields","hasMany","relatedCollection","collections"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/config/sanitize.ts"],"sourcesContent":["import { deepMergeSimple } from '@payloadcms/translations/utilities'\n\nimport type {\n CollectionConfig,\n SanitizedJoin,\n SanitizedJoins,\n} from '../../collections/config/types.js'\nimport type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { GlobalConfig } from '../../globals/config/types.js'\nimport type { Field } from './types.js'\n\nimport {\n DuplicateFieldName,\n InvalidConfiguration,\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingEditorProp,\n MissingFieldType,\n} from '../../errors/index.js'\nimport { ReservedFieldName } from '../../errors/ReservedFieldName.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { formatLabels, toWords } from '../../utilities/formatLabels.js'\nimport { validateTimezones } from '../../utilities/validateTimezones.js'\nimport { baseBlockFields } from '../baseFields/baseBlockFields.js'\nimport { baseIDField } from '../baseFields/baseIDField.js'\nimport { baseTimezoneField } from '../baseFields/timezone/baseField.js'\nimport { defaultTimezones } from '../baseFields/timezone/defaultTimezones.js'\nimport { getFieldPaths } from '../getFieldPaths.js'\nimport { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js'\nimport { validations } from '../validations.js'\nimport {\n reservedAPIKeyFieldNames,\n reservedBaseAuthFieldNames,\n reservedBaseUploadFieldNames,\n reservedVerifyFieldNames,\n} from './reservedFieldNames.js'\nimport { sanitizeJoinField } from './sanitizeJoinField.js'\nimport {\n fieldAffectsData as _fieldAffectsData,\n fieldIsLocalized,\n fieldIsVirtual,\n tabHasName,\n} from './types.js'\n\ntype Args = {\n collectionConfig?: CollectionConfig\n config: Config\n existingFieldNames?: Set<string>\n fields: Field[]\n globalConfig?: GlobalConfig\n /**\n * Used to prevent unnecessary sanitization of fields that are not top-level.\n */\n isTopLevelField?: boolean\n joinPath?: string\n /**\n * When not passed in, assume that join are not supported (globals, arrays, blocks)\n */\n joins?: SanitizedJoins\n /**\n * A string of '-' separated indexes representing where\n * to find this field in a given field schema array.\n */\n parentIndexPath?: string\n parentIsLocalized: boolean\n /**\n * Path for parent fields relative to their position in the schema.\n */\n parentSchemaPath?: string\n polymorphicJoins?: SanitizedJoin[]\n /**\n * If true, a richText field will require an editor property to be set, as the sanitizeFields function will not add it from the payload config if not present.\n *\n * @default false\n */\n requireFieldLevelRichTextEditor?: boolean\n /**\n * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises\n * so that you can sanitize them together, after the config has been sanitized.\n */\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>\n /**\n * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.\n * This validation will be skipped if validRelationships is null.\n */\n validRelationships: null | string[]\n}\n\nexport const sanitizeFields = async ({\n collectionConfig,\n config,\n existingFieldNames = new Set(),\n fields,\n globalConfig,\n isTopLevelField = true,\n joinPath = '',\n joins,\n parentIndexPath = '',\n parentIsLocalized,\n parentSchemaPath = '',\n polymorphicJoins,\n requireFieldLevelRichTextEditor = false,\n richTextSanitizationPromises,\n validRelationships,\n}: Args): Promise<Field[]> => {\n if (!fields) {\n return []\n }\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]!\n\n if ('_sanitized' in field && field._sanitized === true) {\n continue\n }\n\n if ('_sanitized' in field) {\n field._sanitized = true\n }\n\n if (!field.type) {\n throw new MissingFieldType(field)\n }\n\n const fieldAffectsData = _fieldAffectsData(field)\n\n const { indexPath, schemaPath } = getFieldPaths({\n field,\n index: i,\n parentIndexPath,\n parentSchemaPath,\n })\n\n if (isTopLevelField && fieldAffectsData && field.name) {\n if (collectionConfig && collectionConfig.upload) {\n if (reservedBaseUploadFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n }\n\n if (\n collectionConfig &&\n collectionConfig.auth &&\n typeof collectionConfig.auth === 'object' &&\n !collectionConfig.auth.disableLocalStrategy\n ) {\n if (reservedBaseAuthFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n\n if (collectionConfig.auth.verify) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n if (reservedAPIKeyFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n if (reservedVerifyFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n }\n }\n }\n\n // assert that field names do not contain forbidden characters\n if (fieldAffectsData && !field?.name) {\n throw new InvalidFieldName(field, 'no field name')\n }\n // assert that field names do not contain forbidden characters\n if (fieldAffectsData && field.name.includes('.')) {\n throw new InvalidFieldName(field, field.name)\n }\n\n // Auto-label\n if (\n 'name' in field &&\n field.name &&\n typeof field.label !== 'object' &&\n typeof field.label !== 'string' &&\n typeof field.label !== 'function' &&\n field.label !== false\n ) {\n field.label = toWords(field.name)\n }\n\n if (\n field.type === 'checkbox' &&\n typeof field.defaultValue === 'undefined' &&\n field.required === true\n ) {\n field.defaultValue = false\n }\n\n if (field.type === 'join') {\n sanitizeJoinField({ config, field, joinPath, joins, parentIsLocalized, polymorphicJoins })\n }\n\n if (field.type === 'relationship' || field.type === 'upload') {\n // Validate that relationTo is not empty\n if (Array.isArray(field.relationTo) && field.relationTo.length === 0) {\n throw new Error(\n `Field \"${field.name}\" of type \"${field.type}\" has an empty relationTo array. At least one collection must be specified.`,\n )\n }\n\n if (validRelationships) {\n const relationships = Array.isArray(field.relationTo)\n ? field.relationTo\n : [field.relationTo]\n\n relationships.forEach((relationship: string) => {\n if (!validRelationships.includes(relationship)) {\n throw new InvalidFieldRelationship(field, relationship)\n }\n })\n }\n\n if (field.min && !field.minRows) {\n console.warn(\n `(payload): The \"min\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"minRows\" instead.`,\n )\n field.minRows = field.min\n }\n\n if (field.max && !field.maxRows) {\n console.warn(\n `(payload): The \"max\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"maxRows\" instead.`,\n )\n field.maxRows = field.max\n }\n }\n\n if (field.type === 'upload') {\n if (!field.admin || !('isSortable' in field.admin)) {\n field.admin = {\n isSortable: true,\n ...field.admin,\n }\n }\n }\n\n if (field.type === 'array' && field.fields) {\n const hasCustomID = field.fields.some((f) => 'name' in f && f.name === 'id')\n if (!hasCustomID) {\n field.fields.push(baseIDField)\n }\n }\n\n if ((field.type === 'blocks' || field.type === 'array') && field.label) {\n field.labels = field.labels || formatLabels(field.name)\n }\n\n if (fieldAffectsData) {\n if (existingFieldNames.has(field.name)) {\n throw new DuplicateFieldName(field.name)\n } else if (!['blockName', 'id'].includes(field.name)) {\n existingFieldNames.add(field.name)\n }\n\n if (typeof field.localized !== 'undefined') {\n let shouldDisableLocalized = !config.localization\n\n if (\n process.env.NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized !== 'true' &&\n parentIsLocalized &&\n // @todo PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY=true will be the default in 4.0\n process.env.PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY !== 'true'\n ) {\n shouldDisableLocalized = true\n }\n\n if (shouldDisableLocalized) {\n delete field.localized\n }\n }\n\n if (typeof field.validate === 'undefined') {\n const defaultValidate = validations[field.type as keyof typeof validations]\n if (defaultValidate) {\n field.validate = (val: any, options: any) =>\n defaultValidate(val, { ...field, ...options })\n } else {\n field.validate = (): true => true\n }\n }\n\n if (!field.hooks) {\n field.hooks = {}\n }\n\n if (!field.access) {\n field.access = {}\n }\n\n setDefaultBeforeDuplicate(field, parentIsLocalized)\n }\n\n if (!field.admin) {\n field.admin = {}\n }\n\n // Make sure that the richText field has an editor\n if (field.type === 'richText') {\n const sanitizeRichText = async (_config: SanitizedConfig) => {\n if (!field.editor) {\n if (_config.editor && !requireFieldLevelRichTextEditor) {\n // config.editor should be sanitized at this point\n field.editor = _config.editor\n } else {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n }\n\n if (typeof field.editor === 'function') {\n field.editor = await field.editor({\n config: _config,\n isRoot: requireFieldLevelRichTextEditor,\n parentIsLocalized: (parentIsLocalized || field.localized)!,\n })\n }\n\n if (field.editor.i18n && Object.keys(field.editor.i18n).length >= 0) {\n config.i18n!.translations = deepMergeSimple(config.i18n!.translations!, field.editor.i18n)\n }\n }\n if (richTextSanitizationPromises) {\n richTextSanitizationPromises.push(sanitizeRichText)\n } else {\n await sanitizeRichText(config as unknown as SanitizedConfig)\n }\n }\n\n if (field.type === 'blocks' && field.blocks) {\n if (field.blockReferences && field.blocks?.length) {\n throw new Error('You cannot have both blockReferences and blocks in the same blocks field')\n }\n\n const blockSlugs: string[] = []\n\n for (const block of field.blockReferences ?? field.blocks) {\n const blockSlug = typeof block === 'string' ? block : block.slug\n\n if (blockSlugs.includes(blockSlug)) {\n throw new DuplicateFieldName(blockSlug)\n }\n\n blockSlugs.push(blockSlug)\n\n if (typeof block === 'string') {\n continue\n }\n\n if (block._sanitized === true) {\n continue\n }\n\n block._sanitized = true\n block.fields = block.fields.concat(baseBlockFields)\n block.labels = !block.labels ? formatLabels(block.slug) : block.labels\n\n block.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: new Set(),\n fields: block.fields,\n isTopLevelField: false,\n parentIndexPath: '',\n parentIsLocalized: (parentIsLocalized || field.localized)!,\n parentSchemaPath: schemaPath + '.' + block.slug,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n }\n\n if ('fields' in field && field.fields) {\n field.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: fieldAffectsData ? new Set() : existingFieldNames,\n fields: field.fields,\n isTopLevelField: isTopLevelField && !fieldAffectsData,\n joinPath: fieldAffectsData ? `${joinPath ? joinPath + '.' : ''}${field.name}` : joinPath,\n joins,\n parentIndexPath: fieldAffectsData ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || fieldIsLocalized(field),\n parentSchemaPath: schemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n\n if (field.type === 'tabs') {\n for (let j = 0; j < field.tabs.length; j++) {\n const tab = field.tabs[j]!\n\n const isNamedTab = tabHasName(tab)\n\n if (isNamedTab && typeof tab.label === 'undefined') {\n tab.label = toWords(tab.name)\n }\n\n const { indexPath: tabIndexPath, schemaPath: tabSchemaPath } = getFieldPaths({\n field: tab,\n index: j,\n parentIndexPath: indexPath,\n parentSchemaPath: schemaPath,\n })\n\n if (\n 'admin' in tab &&\n tab.admin?.condition &&\n typeof tab.admin.condition === 'function' &&\n !tab.id\n ) {\n tab.id = tabSchemaPath\n }\n\n tab.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: isNamedTab ? new Set() : existingFieldNames,\n fields: tab.fields,\n isTopLevelField: isTopLevelField && !isNamedTab,\n joinPath: isNamedTab ? `${joinPath ? joinPath + '.' : ''}${tab.name}` : joinPath,\n joins,\n parentIndexPath: isNamedTab ? '' : tabIndexPath,\n parentIsLocalized: parentIsLocalized || (isNamedTab && tab.localized)!,\n parentSchemaPath: tabSchemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n field.tabs[j] = tab\n }\n }\n\n if (field.type === 'ui' && typeof field.admin.disableBulkEdit === 'undefined') {\n field.admin.disableBulkEdit = true\n }\n\n fields[i] = field\n\n // Insert our field after assignment\n if (field.type === 'date' && field.timezone) {\n const name = field.name + '_tz'\n\n let defaultTimezone =\n field.timezone && typeof field.timezone === 'object'\n ? field.timezone.defaultTimezone\n : config.admin?.timezones?.defaultTimezone\n\n const required =\n field.required ||\n (field.timezone && typeof field.timezone === 'object' && field.timezone.required)\n\n const supportedTimezones =\n field.timezone && typeof field.timezone === 'object' && field.timezone.supportedTimezones\n ? field.timezone.supportedTimezones\n : config.admin?.timezones?.supportedTimezones\n\n const options =\n typeof supportedTimezones === 'function'\n ? supportedTimezones({ defaultTimezones })\n : supportedTimezones\n\n validateTimezones({\n source: `field \"${field.name}\" timezone.supportedTimezones`,\n timezones: options,\n })\n\n if (options && options.length === 1 && options[0]?.value) {\n defaultTimezone = options[0].value\n }\n\n // Generate label for timezone field\n // Use parent field's label + ' Tz' if it's a simple string, otherwise fallback to name\n const timezoneLabel = typeof field.label === 'string' ? `${field.label} Tz` : toWords(name)\n\n // Need to set the options here manually so that any database enums are generated correctly\n // The UI component will import the options from the config\n const baseField = baseTimezoneField({\n name,\n defaultValue: defaultTimezone,\n label: timezoneLabel,\n options,\n required,\n })\n\n // Apply override if provided\n const timezoneField =\n typeof field.timezone === 'object' && typeof field.timezone.override === 'function'\n ? field.timezone.override({ baseField })\n : baseField\n\n fields.splice(++i, 0, timezoneField)\n }\n\n if ('virtual' in field && typeof field.virtual === 'string') {\n const virtualField = field\n const fields = (collectionConfig || globalConfig)?.fields\n if (fields) {\n let flattenFields = flattenAllFields({ fields })\n const paths = field.virtual.split('.')\n let isHasMany = false\n\n for (const [i, segment] of paths.entries()) {\n const field = flattenFields.find((e) => e.name === segment)\n if (!field) {\n break\n }\n\n if (field.type === 'group' || field.type === 'tab' || field.type === 'array') {\n flattenFields = field.flattenedFields\n } else if (\n (field.type === 'relationship' || field.type === 'upload') &&\n i !== paths.length - 1 &&\n typeof field.relationTo === 'string'\n ) {\n if (\n field.hasMany &&\n (virtualField.type === 'text' ||\n virtualField.type === 'number' ||\n virtualField.type === 'select')\n ) {\n if (isHasMany) {\n throw new InvalidConfiguration(\n `Virtual field ${virtualField.name} in ${globalConfig ? `global ${globalConfig.slug}` : `collection ${collectionConfig?.slug}`} references 2 or more hasMany relationships on the path ${virtualField.virtual} which is not allowed.`,\n )\n }\n\n isHasMany = true\n virtualField.hasMany = true\n }\n const relatedCollection = config.collections?.find((e) => e.slug === field.relationTo)\n if (relatedCollection) {\n flattenFields = flattenAllFields({ fields: relatedCollection.fields })\n }\n }\n }\n }\n }\n }\n\n return fields\n}\n"],"names":["deepMergeSimple","DuplicateFieldName","InvalidConfiguration","InvalidFieldName","InvalidFieldRelationship","MissingEditorProp","MissingFieldType","ReservedFieldName","flattenAllFields","formatLabels","toWords","validateTimezones","baseBlockFields","baseIDField","baseTimezoneField","defaultTimezones","getFieldPaths","setDefaultBeforeDuplicate","validations","reservedAPIKeyFieldNames","reservedBaseAuthFieldNames","reservedBaseUploadFieldNames","reservedVerifyFieldNames","sanitizeJoinField","fieldAffectsData","_fieldAffectsData","fieldIsLocalized","tabHasName","sanitizeFields","collectionConfig","config","existingFieldNames","Set","fields","globalConfig","isTopLevelField","joinPath","joins","parentIndexPath","parentIsLocalized","parentSchemaPath","polymorphicJoins","requireFieldLevelRichTextEditor","richTextSanitizationPromises","validRelationships","i","length","field","_sanitized","type","indexPath","schemaPath","index","name","upload","includes","auth","disableLocalStrategy","verify","label","defaultValue","required","Array","isArray","relationTo","Error","relationships","forEach","relationship","min","minRows","console","warn","max","maxRows","admin","isSortable","hasCustomID","some","f","push","labels","has","add","localized","shouldDisableLocalized","localization","process","env","NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized","PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY","validate","defaultValidate","val","options","hooks","access","sanitizeRichText","_config","editor","isRoot","i18n","Object","keys","translations","blocks","blockReferences","blockSlugs","block","blockSlug","slug","concat","j","tabs","tab","isNamedTab","tabIndexPath","tabSchemaPath","condition","id","disableBulkEdit","timezone","defaultTimezone","timezones","supportedTimezones","source","value","timezoneLabel","baseField","timezoneField","override","splice","virtual","virtualField","flattenFields","paths","split","isHasMany","segment","entries","find","e","flattenedFields","hasMany","relatedCollection","collections"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizeJoinField.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitizeJoinField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACtF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAO/D,eAAO,MAAM,iBAAiB,2FAQ3B;IACD,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAA;IAClC,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,SA0FA,CAAA"}
1
+ {"version":3,"file":"sanitizeJoinField.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitizeJoinField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACtF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAO/D,eAAO,MAAM,iBAAiB,2FAQ3B;IACD,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAA;IAClC,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,SA6FA,CAAA"}
@@ -7,6 +7,9 @@ export const sanitizeJoinField = ({ config, field, joinPath, joins, parentIsLoca
7
7
  if (typeof joins === 'undefined') {
8
8
  throw new APIError('Join fields cannot be added to arrays, blocks or globals.');
9
9
  }
10
+ if (!field.admin) {
11
+ field.admin = {};
12
+ }
10
13
  if (typeof field.maxDepth === 'undefined') {
11
14
  field.maxDepth = 1;
12
15
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/config/sanitizeJoinField.ts"],"sourcesContent":["import type { SanitizedJoin, SanitizedJoins } from '../../collections/config/types.js'\nimport type { Config } from '../../config/types.js'\nimport type { FlattenedJoinField, JoinField } from './types.js'\n\nimport { APIError } from '../../errors/index.js'\nimport { InvalidFieldJoin } from '../../errors/InvalidFieldJoin.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { getFieldByPath } from '../../utilities/getFieldByPath.js'\n\nexport const sanitizeJoinField = ({\n config,\n field,\n joinPath,\n joins,\n parentIsLocalized,\n polymorphicJoins,\n validateOnly,\n}: {\n config: Config\n field: FlattenedJoinField | JoinField\n joinPath?: string\n joins?: SanitizedJoins\n parentIsLocalized: boolean\n polymorphicJoins?: SanitizedJoin[]\n validateOnly?: boolean\n}) => {\n // the `joins` arg is not passed for globals or when recursing on fields that do not allow a join field\n if (typeof joins === 'undefined') {\n throw new APIError('Join fields cannot be added to arrays, blocks or globals.')\n }\n if (typeof field.maxDepth === 'undefined') {\n field.maxDepth = 1\n }\n const join: SanitizedJoin = {\n field,\n joinPath: `${joinPath ? joinPath + '.' : ''}${field.name}`,\n parentIsLocalized,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n targetField: undefined,\n }\n\n if (Array.isArray(field.collection)) {\n for (const collection of field.collection) {\n const sanitizedField = {\n ...field,\n collection,\n } as FlattenedJoinField\n\n sanitizeJoinField({\n config,\n field: sanitizedField,\n joinPath,\n joins,\n parentIsLocalized,\n polymorphicJoins,\n validateOnly: true,\n })\n }\n\n if (Array.isArray(polymorphicJoins)) {\n polymorphicJoins.push(join)\n }\n\n return\n }\n\n const joinCollection = config.collections?.find(\n (collection) => collection.slug === field.collection,\n )\n if (!joinCollection) {\n throw new InvalidFieldJoin(field)\n }\n\n const relationshipField = getFieldByPath({\n fields: flattenAllFields({ cache: true, fields: joinCollection.fields }),\n path: field.on,\n })\n\n if (\n !relationshipField ||\n (relationshipField.field.type !== 'relationship' && relationshipField.field.type !== 'upload')\n ) {\n throw new InvalidFieldJoin(join.field)\n }\n\n if (relationshipField.pathHasLocalized) {\n join.getForeignPath = ({ locale }) => {\n return relationshipField.localizedPath.replace('<locale>', locale!)\n }\n }\n\n if (!relationshipField.field.index && !relationshipField.field.unique) {\n relationshipField.field.index = true\n }\n\n if (validateOnly) {\n return\n }\n\n join.targetField = relationshipField.field\n\n // override the join field localized property to use whatever the relationship field has\n // or if it's nested to a localized array / blocks / tabs / group\n field.localized = relationshipField.field.localized\n // override the join field hasMany property to use whatever the relationship field has\n field.hasMany = relationshipField.field.hasMany\n\n // @ts-expect-error converting JoinField to FlattenedJoinField to track targetField\n field.targetField = join.targetField\n\n if (!joins[field.collection]) {\n joins[field.collection] = [join]\n } else {\n joins[field.collection]?.push(join)\n }\n}\n"],"names":["APIError","InvalidFieldJoin","flattenAllFields","getFieldByPath","sanitizeJoinField","config","field","joinPath","joins","parentIsLocalized","polymorphicJoins","validateOnly","maxDepth","join","name","targetField","undefined","Array","isArray","collection","sanitizedField","push","joinCollection","collections","find","slug","relationshipField","fields","cache","path","on","type","pathHasLocalized","getForeignPath","locale","localizedPath","replace","index","unique","localized","hasMany"],"mappings":"AAIA,SAASA,QAAQ,QAAQ,wBAAuB;AAChD,SAASC,gBAAgB,QAAQ,mCAAkC;AACnE,SAASC,gBAAgB,QAAQ,sCAAqC;AACtE,SAASC,cAAc,QAAQ,oCAAmC;AAElE,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,MAAM,EACNC,KAAK,EACLC,QAAQ,EACRC,KAAK,EACLC,iBAAiB,EACjBC,gBAAgB,EAChBC,YAAY,EASb;IACC,uGAAuG;IACvG,IAAI,OAAOH,UAAU,aAAa;QAChC,MAAM,IAAIR,SAAS;IACrB;IACA,IAAI,OAAOM,MAAMM,QAAQ,KAAK,aAAa;QACzCN,MAAMM,QAAQ,GAAG;IACnB;IACA,MAAMC,OAAsB;QAC1BP;QACAC,UAAU,GAAGA,WAAWA,WAAW,MAAM,KAAKD,MAAMQ,IAAI,EAAE;QAC1DL;QACA,oFAAoF;QACpFM,aAAaC;IACf;IAEA,IAAIC,MAAMC,OAAO,CAACZ,MAAMa,UAAU,GAAG;QACnC,KAAK,MAAMA,cAAcb,MAAMa,UAAU,CAAE;YACzC,MAAMC,iBAAiB;gBACrB,GAAGd,KAAK;gBACRa;YACF;YAEAf,kBAAkB;gBAChBC;gBACAC,OAAOc;gBACPb;gBACAC;gBACAC;gBACAC;gBACAC,cAAc;YAChB;QACF;QAEA,IAAIM,MAAMC,OAAO,CAACR,mBAAmB;YACnCA,iBAAiBW,IAAI,CAACR;QACxB;QAEA;IACF;IAEA,MAAMS,iBAAiBjB,OAAOkB,WAAW,EAAEC,KACzC,CAACL,aAAeA,WAAWM,IAAI,KAAKnB,MAAMa,UAAU;IAEtD,IAAI,CAACG,gBAAgB;QACnB,MAAM,IAAIrB,iBAAiBK;IAC7B;IAEA,MAAMoB,oBAAoBvB,eAAe;QACvCwB,QAAQzB,iBAAiB;YAAE0B,OAAO;YAAMD,QAAQL,eAAeK,MAAM;QAAC;QACtEE,MAAMvB,MAAMwB,EAAE;IAChB;IAEA,IACE,CAACJ,qBACAA,kBAAkBpB,KAAK,CAACyB,IAAI,KAAK,kBAAkBL,kBAAkBpB,KAAK,CAACyB,IAAI,KAAK,UACrF;QACA,MAAM,IAAI9B,iBAAiBY,KAAKP,KAAK;IACvC;IAEA,IAAIoB,kBAAkBM,gBAAgB,EAAE;QACtCnB,KAAKoB,cAAc,GAAG,CAAC,EAAEC,MAAM,EAAE;YAC/B,OAAOR,kBAAkBS,aAAa,CAACC,OAAO,CAAC,YAAYF;QAC7D;IACF;IAEA,IAAI,CAACR,kBAAkBpB,KAAK,CAAC+B,KAAK,IAAI,CAACX,kBAAkBpB,KAAK,CAACgC,MAAM,EAAE;QACrEZ,kBAAkBpB,KAAK,CAAC+B,KAAK,GAAG;IAClC;IAEA,IAAI1B,cAAc;QAChB;IACF;IAEAE,KAAKE,WAAW,GAAGW,kBAAkBpB,KAAK;IAE1C,wFAAwF;IACxF,iEAAiE;IACjEA,MAAMiC,SAAS,GAAGb,kBAAkBpB,KAAK,CAACiC,SAAS;IACnD,sFAAsF;IACtFjC,MAAMkC,OAAO,GAAGd,kBAAkBpB,KAAK,CAACkC,OAAO;IAE/C,mFAAmF;IACnFlC,MAAMS,WAAW,GAAGF,KAAKE,WAAW;IAEpC,IAAI,CAACP,KAAK,CAACF,MAAMa,UAAU,CAAC,EAAE;QAC5BX,KAAK,CAACF,MAAMa,UAAU,CAAC,GAAG;YAACN;SAAK;IAClC,OAAO;QACLL,KAAK,CAACF,MAAMa,UAAU,CAAC,EAAEE,KAAKR;IAChC;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/fields/config/sanitizeJoinField.ts"],"sourcesContent":["import type { SanitizedJoin, SanitizedJoins } from '../../collections/config/types.js'\nimport type { Config } from '../../config/types.js'\nimport type { FlattenedJoinField, JoinField } from './types.js'\n\nimport { APIError } from '../../errors/index.js'\nimport { InvalidFieldJoin } from '../../errors/InvalidFieldJoin.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { getFieldByPath } from '../../utilities/getFieldByPath.js'\n\nexport const sanitizeJoinField = ({\n config,\n field,\n joinPath,\n joins,\n parentIsLocalized,\n polymorphicJoins,\n validateOnly,\n}: {\n config: Config\n field: FlattenedJoinField | JoinField\n joinPath?: string\n joins?: SanitizedJoins\n parentIsLocalized: boolean\n polymorphicJoins?: SanitizedJoin[]\n validateOnly?: boolean\n}) => {\n // the `joins` arg is not passed for globals or when recursing on fields that do not allow a join field\n if (typeof joins === 'undefined') {\n throw new APIError('Join fields cannot be added to arrays, blocks or globals.')\n }\n if (!field.admin) {\n field.admin = {}\n }\n if (typeof field.maxDepth === 'undefined') {\n field.maxDepth = 1\n }\n const join: SanitizedJoin = {\n field,\n joinPath: `${joinPath ? joinPath + '.' : ''}${field.name}`,\n parentIsLocalized,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n targetField: undefined,\n }\n\n if (Array.isArray(field.collection)) {\n for (const collection of field.collection) {\n const sanitizedField = {\n ...field,\n collection,\n } as FlattenedJoinField\n\n sanitizeJoinField({\n config,\n field: sanitizedField,\n joinPath,\n joins,\n parentIsLocalized,\n polymorphicJoins,\n validateOnly: true,\n })\n }\n\n if (Array.isArray(polymorphicJoins)) {\n polymorphicJoins.push(join)\n }\n\n return\n }\n\n const joinCollection = config.collections?.find(\n (collection) => collection.slug === field.collection,\n )\n if (!joinCollection) {\n throw new InvalidFieldJoin(field)\n }\n\n const relationshipField = getFieldByPath({\n fields: flattenAllFields({ cache: true, fields: joinCollection.fields }),\n path: field.on,\n })\n\n if (\n !relationshipField ||\n (relationshipField.field.type !== 'relationship' && relationshipField.field.type !== 'upload')\n ) {\n throw new InvalidFieldJoin(join.field)\n }\n\n if (relationshipField.pathHasLocalized) {\n join.getForeignPath = ({ locale }) => {\n return relationshipField.localizedPath.replace('<locale>', locale!)\n }\n }\n\n if (!relationshipField.field.index && !relationshipField.field.unique) {\n relationshipField.field.index = true\n }\n\n if (validateOnly) {\n return\n }\n\n join.targetField = relationshipField.field\n\n // override the join field localized property to use whatever the relationship field has\n // or if it's nested to a localized array / blocks / tabs / group\n field.localized = relationshipField.field.localized\n // override the join field hasMany property to use whatever the relationship field has\n field.hasMany = relationshipField.field.hasMany\n\n // @ts-expect-error converting JoinField to FlattenedJoinField to track targetField\n field.targetField = join.targetField\n\n if (!joins[field.collection]) {\n joins[field.collection] = [join]\n } else {\n joins[field.collection]?.push(join)\n }\n}\n"],"names":["APIError","InvalidFieldJoin","flattenAllFields","getFieldByPath","sanitizeJoinField","config","field","joinPath","joins","parentIsLocalized","polymorphicJoins","validateOnly","admin","maxDepth","join","name","targetField","undefined","Array","isArray","collection","sanitizedField","push","joinCollection","collections","find","slug","relationshipField","fields","cache","path","on","type","pathHasLocalized","getForeignPath","locale","localizedPath","replace","index","unique","localized","hasMany"],"mappings":"AAIA,SAASA,QAAQ,QAAQ,wBAAuB;AAChD,SAASC,gBAAgB,QAAQ,mCAAkC;AACnE,SAASC,gBAAgB,QAAQ,sCAAqC;AACtE,SAASC,cAAc,QAAQ,oCAAmC;AAElE,OAAO,MAAMC,oBAAoB,CAAC,EAChCC,MAAM,EACNC,KAAK,EACLC,QAAQ,EACRC,KAAK,EACLC,iBAAiB,EACjBC,gBAAgB,EAChBC,YAAY,EASb;IACC,uGAAuG;IACvG,IAAI,OAAOH,UAAU,aAAa;QAChC,MAAM,IAAIR,SAAS;IACrB;IACA,IAAI,CAACM,MAAMM,KAAK,EAAE;QAChBN,MAAMM,KAAK,GAAG,CAAC;IACjB;IACA,IAAI,OAAON,MAAMO,QAAQ,KAAK,aAAa;QACzCP,MAAMO,QAAQ,GAAG;IACnB;IACA,MAAMC,OAAsB;QAC1BR;QACAC,UAAU,GAAGA,WAAWA,WAAW,MAAM,KAAKD,MAAMS,IAAI,EAAE;QAC1DN;QACA,oFAAoF;QACpFO,aAAaC;IACf;IAEA,IAAIC,MAAMC,OAAO,CAACb,MAAMc,UAAU,GAAG;QACnC,KAAK,MAAMA,cAAcd,MAAMc,UAAU,CAAE;YACzC,MAAMC,iBAAiB;gBACrB,GAAGf,KAAK;gBACRc;YACF;YAEAhB,kBAAkB;gBAChBC;gBACAC,OAAOe;gBACPd;gBACAC;gBACAC;gBACAC;gBACAC,cAAc;YAChB;QACF;QAEA,IAAIO,MAAMC,OAAO,CAACT,mBAAmB;YACnCA,iBAAiBY,IAAI,CAACR;QACxB;QAEA;IACF;IAEA,MAAMS,iBAAiBlB,OAAOmB,WAAW,EAAEC,KACzC,CAACL,aAAeA,WAAWM,IAAI,KAAKpB,MAAMc,UAAU;IAEtD,IAAI,CAACG,gBAAgB;QACnB,MAAM,IAAItB,iBAAiBK;IAC7B;IAEA,MAAMqB,oBAAoBxB,eAAe;QACvCyB,QAAQ1B,iBAAiB;YAAE2B,OAAO;YAAMD,QAAQL,eAAeK,MAAM;QAAC;QACtEE,MAAMxB,MAAMyB,EAAE;IAChB;IAEA,IACE,CAACJ,qBACAA,kBAAkBrB,KAAK,CAAC0B,IAAI,KAAK,kBAAkBL,kBAAkBrB,KAAK,CAAC0B,IAAI,KAAK,UACrF;QACA,MAAM,IAAI/B,iBAAiBa,KAAKR,KAAK;IACvC;IAEA,IAAIqB,kBAAkBM,gBAAgB,EAAE;QACtCnB,KAAKoB,cAAc,GAAG,CAAC,EAAEC,MAAM,EAAE;YAC/B,OAAOR,kBAAkBS,aAAa,CAACC,OAAO,CAAC,YAAYF;QAC7D;IACF;IAEA,IAAI,CAACR,kBAAkBrB,KAAK,CAACgC,KAAK,IAAI,CAACX,kBAAkBrB,KAAK,CAACiC,MAAM,EAAE;QACrEZ,kBAAkBrB,KAAK,CAACgC,KAAK,GAAG;IAClC;IAEA,IAAI3B,cAAc;QAChB;IACF;IAEAG,KAAKE,WAAW,GAAGW,kBAAkBrB,KAAK;IAE1C,wFAAwF;IACxF,iEAAiE;IACjEA,MAAMkC,SAAS,GAAGb,kBAAkBrB,KAAK,CAACkC,SAAS;IACnD,sFAAsF;IACtFlC,MAAMmC,OAAO,GAAGd,kBAAkBrB,KAAK,CAACmC,OAAO;IAE/C,mFAAmF;IACnFnC,MAAMU,WAAW,GAAGF,KAAKE,WAAW;IAEpC,IAAI,CAACR,KAAK,CAACF,MAAMc,UAAU,CAAC,EAAE;QAC5BZ,KAAK,CAACF,MAAMc,UAAU,CAAC,GAAG;YAACN;SAAK;IAClC,OAAO;QACLN,KAAK,CAACF,MAAMc,UAAU,CAAC,EAAEE,KAAKR;IAChC;AACF,EAAC"}
@@ -129,6 +129,10 @@ export type GlobalAdminOptions = {
129
129
  * Inject custom components before the document controls
130
130
  */
131
131
  beforeDocumentControls?: CustomComponent[];
132
+ /**
133
+ * Inject custom components before the document metadata (left of status/timestamps)
134
+ */
135
+ BeforeDocumentMeta?: CustomComponent[];
132
136
  Description?: EntityDescriptionComponent;
133
137
  /**
134
138
  * Replaces the "Preview" button
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/globals/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/globals/config/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/globals/config/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { GraphQLNonNull, GraphQLObjectType } from 'graphql'\nimport type { DeepRequired, IsAny } from 'ts-essentials'\n\nimport type {\n CustomPreviewButton,\n CustomSaveButton,\n CustomSaveDraftButton,\n CustomStatus,\n PublishButtonClientProps,\n PublishButtonServerProps,\n UnpublishButtonClientProps,\n UnpublishButtonServerProps,\n} from '../../admin/types.js'\nimport type {\n Access,\n CustomComponent,\n EditConfig,\n Endpoint,\n EntityDescription,\n EntityDescriptionComponent,\n GeneratePreviewURL,\n LabelFunction,\n LivePreviewConfig,\n MetaConfig,\n PayloadComponent,\n StaticLabel,\n} from '../../config/types.js'\nimport type { DBIdentifierName } from '../../database/types.js'\nimport type { Field, FlattenedField } from '../../fields/config/types.js'\nimport type {\n GeneratedTypes,\n GlobalAdminCustom,\n GlobalCustom,\n GlobalSlug,\n RequestContext,\n TypedGlobal,\n TypedGlobalSelect,\n} from '../../index.js'\nimport type { PayloadRequest, SelectIncludeType, Where } from '../../types/index.js'\nimport type { IncomingGlobalVersions, SanitizedGlobalVersions } from '../../versions/types.js'\n\nexport type DataFromGlobalSlug<TSlug extends GlobalSlug> = TypedGlobal[TSlug]\n\nexport type SelectFromGlobalSlug<TSlug extends GlobalSlug> = TypedGlobalSelect[TSlug]\n\n/**\n * Global slugs that do not have drafts enabled.\n * Detects globals without drafts by checking for the absence of the `_status` field.\n */\nexport type GlobalsWithoutDrafts = {\n [TSlug in GlobalSlug]: DataFromGlobalSlug<TSlug> extends { _status?: any } ? never : TSlug\n}[GlobalSlug]\n\n/**\n * Conditionally allows or forbids the `draft` property based on global configuration.\n * When `strictDraftTypes` is enabled, the `draft` property is forbidden on globals without drafts.\n */\nexport type DraftFlagFromGlobalSlug<TSlug extends GlobalSlug> = GeneratedTypes extends {\n strictDraftTypes: true\n}\n ? TSlug extends GlobalsWithoutDrafts\n ? {\n /**\n * The `draft` property is not allowed because this global does not have `versions.drafts` enabled.\n */\n draft?: never\n }\n : {\n /**\n * Whether the global should be queried from the versions table/collection or not. [More](https://payloadcms.com/docs/versions/drafts#draft-api)\n */\n draft?: boolean\n }\n : {\n /**\n * Whether the global should be queried from the versions table/collection or not. [More](https://payloadcms.com/docs/versions/drafts#draft-api)\n */\n draft?: boolean\n }\n\nexport type BeforeValidateHook = (args: {\n context: RequestContext\n data?: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n req: PayloadRequest\n}) => any\n\nexport type BeforeChangeHook = (args: {\n context: RequestContext\n data: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n req: PayloadRequest\n}) => any\n\nexport type AfterChangeHook = (args: {\n context: RequestContext\n data: any\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n previousDoc: any\n req: PayloadRequest\n}) => any\n\nexport type BeforeReadHook = (args: {\n context: RequestContext\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n req: PayloadRequest\n}) => any\n\nexport type AfterReadHook = (args: {\n context: RequestContext\n doc: any\n findMany?: boolean\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n query?: Where\n req: PayloadRequest\n}) => any\n\nexport type HookOperationType = 'countVersions' | 'read' | 'restoreVersion' | 'update'\n\nexport type BeforeOperationHook = (args: {\n args?: any\n context: RequestContext\n /**\n * The Global which this hook is being run on\n * */\n global: SanitizedGlobalConfig\n /**\n * Hook operation being performed\n */\n operation: HookOperationType\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n req: PayloadRequest\n}) => any\n\nexport type GlobalAdminOptions = {\n /**\n * Custom admin components\n */\n components?: {\n elements?: {\n /**\n * Inject custom components before the document controls\n */\n beforeDocumentControls?: CustomComponent[]\n Description?: EntityDescriptionComponent\n /**\n * Replaces the \"Preview\" button\n */\n PreviewButton?: CustomPreviewButton\n /**\n * Replaces the \"Publish\" button\n * + drafts must be enabled\n */\n PublishButton?: PayloadComponent<PublishButtonServerProps, PublishButtonClientProps>\n /**\n * Replaces the \"Save\" button\n * + drafts must be disabled\n */\n SaveButton?: CustomSaveButton\n /**\n * Replaces the \"Save Draft\" button\n * + drafts must be enabled\n * + autosave must be disabled\n */\n SaveDraftButton?: CustomSaveDraftButton\n /**\n * Replaces the \"Status\" section\n */\n Status?: CustomStatus\n /**\n * Replaces the \"Unpublish\" button\n * + drafts must be enabled\n */\n UnpublishButton?: PayloadComponent<UnpublishButtonServerProps, UnpublishButtonClientProps>\n }\n views?: {\n /**\n * Set to a React component to replace the entire Edit View, including all nested routes.\n * Set to an object to replace or modify individual nested routes, or to add new ones.\n */\n edit?: EditConfig\n }\n }\n /** Extension point to add your custom data. Available in server and client. */\n custom?: GlobalAdminCustom\n /**\n * Custom description for collection\n */\n description?: EntityDescription\n /**\n * Specify a navigational group for globals in the admin sidebar.\n * - Provide a string to place the entity in a custom group.\n * - Provide a record to define localized group names.\n * - Set to `false` to exclude the entity from the sidebar / dashboard without disabling its routes.\n */\n group?: false | Record<string, string> | string\n /**\n * Exclude the global from the admin nav and routes\n */\n hidden?: ((args: { user: PayloadRequest['user'] }) => boolean) | boolean\n /**\n * Hide the API URL within the Edit View\n */\n hideAPIURL?: boolean\n /**\n * Live preview options\n */\n livePreview?: LivePreviewConfig\n meta?: MetaConfig\n /**\n * Function to generate custom preview URL\n */\n preview?: GeneratePreviewURL\n}\n\nexport type GlobalConfig<TSlug extends GlobalSlug = any> = {\n /**\n * Do not set this property manually. This is set to true during sanitization, to avoid\n * sanitizing the same global multiple times.\n */\n _sanitized?: boolean\n access?: {\n read?: Access\n readVersions?: Access\n update?: Access\n }\n admin?: GlobalAdminOptions\n /** Extension point to add your custom data. Server only. */\n custom?: GlobalCustom\n /**\n * Customize the SQL table name\n */\n dbName?: DBIdentifierName\n endpoints?: false | Omit<Endpoint, 'root'>[]\n fields: Field[]\n /**\n * Specify which fields should be selected always, regardless of the `select` query which can be useful that the field exists for access control / hooks\n */\n forceSelect?: IsAny<SelectFromGlobalSlug<TSlug>> extends true\n ? SelectIncludeType\n : SelectFromGlobalSlug<TSlug>\n graphQL?:\n | {\n disableMutations?: true\n disableQueries?: true\n name?: string\n }\n | false\n hooks?: {\n afterChange?: AfterChangeHook[]\n afterRead?: AfterReadHook[]\n beforeChange?: BeforeChangeHook[]\n beforeOperation?: BeforeOperationHook[]\n beforeRead?: BeforeReadHook[]\n beforeValidate?: BeforeValidateHook[]\n }\n label?: LabelFunction | StaticLabel\n /**\n * Enables / Disables the ability to lock documents while editing\n * @default true\n */\n lockDocuments?:\n | {\n duration: number\n }\n | false\n slug: string\n /**\n * Options used in typescript generation\n */\n typescript?: {\n /**\n * Typescript generation name given to the interface type\n */\n interface?: string\n }\n versions?: boolean | IncomingGlobalVersions\n}\n\nexport interface SanitizedGlobalConfig\n extends Omit<DeepRequired<GlobalConfig>, 'endpoints' | 'fields' | 'slug' | 'versions'> {\n endpoints: Endpoint[] | false\n fields: Field[]\n /**\n * Fields in the database schema structure\n * Rows / collapsible / tabs w/o name `fields` merged to top, UIs are excluded\n */\n flattenedFields: FlattenedField[]\n slug: GlobalSlug\n versions?: SanitizedGlobalVersions\n}\n\nexport type Globals = {\n config: SanitizedGlobalConfig[]\n graphQL?:\n | {\n [slug: string]: {\n mutationInputType: GraphQLNonNull<any>\n type: GraphQLObjectType\n versionType?: GraphQLObjectType\n }\n }\n | false\n}\n"],"names":[],"mappings":"AAAA,qDAAqD,GAqUrD,WAWC"}
1
+ {"version":3,"sources":["../../../src/globals/config/types.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { GraphQLNonNull, GraphQLObjectType } from 'graphql'\nimport type { DeepRequired, IsAny } from 'ts-essentials'\n\nimport type {\n CustomPreviewButton,\n CustomSaveButton,\n CustomSaveDraftButton,\n CustomStatus,\n PublishButtonClientProps,\n PublishButtonServerProps,\n UnpublishButtonClientProps,\n UnpublishButtonServerProps,\n} from '../../admin/types.js'\nimport type {\n Access,\n CustomComponent,\n EditConfig,\n Endpoint,\n EntityDescription,\n EntityDescriptionComponent,\n GeneratePreviewURL,\n LabelFunction,\n LivePreviewConfig,\n MetaConfig,\n PayloadComponent,\n StaticLabel,\n} from '../../config/types.js'\nimport type { DBIdentifierName } from '../../database/types.js'\nimport type { Field, FlattenedField } from '../../fields/config/types.js'\nimport type {\n GeneratedTypes,\n GlobalAdminCustom,\n GlobalCustom,\n GlobalSlug,\n RequestContext,\n TypedGlobal,\n TypedGlobalSelect,\n} from '../../index.js'\nimport type { PayloadRequest, SelectIncludeType, Where } from '../../types/index.js'\nimport type { IncomingGlobalVersions, SanitizedGlobalVersions } from '../../versions/types.js'\n\nexport type DataFromGlobalSlug<TSlug extends GlobalSlug> = TypedGlobal[TSlug]\n\nexport type SelectFromGlobalSlug<TSlug extends GlobalSlug> = TypedGlobalSelect[TSlug]\n\n/**\n * Global slugs that do not have drafts enabled.\n * Detects globals without drafts by checking for the absence of the `_status` field.\n */\nexport type GlobalsWithoutDrafts = {\n [TSlug in GlobalSlug]: DataFromGlobalSlug<TSlug> extends { _status?: any } ? never : TSlug\n}[GlobalSlug]\n\n/**\n * Conditionally allows or forbids the `draft` property based on global configuration.\n * When `strictDraftTypes` is enabled, the `draft` property is forbidden on globals without drafts.\n */\nexport type DraftFlagFromGlobalSlug<TSlug extends GlobalSlug> = GeneratedTypes extends {\n strictDraftTypes: true\n}\n ? TSlug extends GlobalsWithoutDrafts\n ? {\n /**\n * The `draft` property is not allowed because this global does not have `versions.drafts` enabled.\n */\n draft?: never\n }\n : {\n /**\n * Whether the global should be queried from the versions table/collection or not. [More](https://payloadcms.com/docs/versions/drafts#draft-api)\n */\n draft?: boolean\n }\n : {\n /**\n * Whether the global should be queried from the versions table/collection or not. [More](https://payloadcms.com/docs/versions/drafts#draft-api)\n */\n draft?: boolean\n }\n\nexport type BeforeValidateHook = (args: {\n context: RequestContext\n data?: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n req: PayloadRequest\n}) => any\n\nexport type BeforeChangeHook = (args: {\n context: RequestContext\n data: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n originalDoc?: any\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n req: PayloadRequest\n}) => any\n\nexport type AfterChangeHook = (args: {\n context: RequestContext\n data: any\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n previousDoc: any\n req: PayloadRequest\n}) => any\n\nexport type BeforeReadHook = (args: {\n context: RequestContext\n doc: any\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n req: PayloadRequest\n}) => any\n\nexport type AfterReadHook = (args: {\n context: RequestContext\n doc: any\n findMany?: boolean\n /** The global which this hook is being run on */\n global: SanitizedGlobalConfig\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n query?: Where\n req: PayloadRequest\n}) => any\n\nexport type HookOperationType = 'countVersions' | 'read' | 'restoreVersion' | 'update'\n\nexport type BeforeOperationHook = (args: {\n args?: any\n context: RequestContext\n /**\n * The Global which this hook is being run on\n * */\n global: SanitizedGlobalConfig\n /**\n * Hook operation being performed\n */\n operation: HookOperationType\n /**\n * Whether access control is being overridden for this operation\n */\n overrideAccess?: boolean\n req: PayloadRequest\n}) => any\n\nexport type GlobalAdminOptions = {\n /**\n * Custom admin components\n */\n components?: {\n elements?: {\n /**\n * Inject custom components before the document controls\n */\n beforeDocumentControls?: CustomComponent[]\n /**\n * Inject custom components before the document metadata (left of status/timestamps)\n */\n BeforeDocumentMeta?: CustomComponent[]\n Description?: EntityDescriptionComponent\n /**\n * Replaces the \"Preview\" button\n */\n PreviewButton?: CustomPreviewButton\n /**\n * Replaces the \"Publish\" button\n * + drafts must be enabled\n */\n PublishButton?: PayloadComponent<PublishButtonServerProps, PublishButtonClientProps>\n /**\n * Replaces the \"Save\" button\n * + drafts must be disabled\n */\n SaveButton?: CustomSaveButton\n /**\n * Replaces the \"Save Draft\" button\n * + drafts must be enabled\n * + autosave must be disabled\n */\n SaveDraftButton?: CustomSaveDraftButton\n /**\n * Replaces the \"Status\" section\n */\n Status?: CustomStatus\n /**\n * Replaces the \"Unpublish\" button\n * + drafts must be enabled\n */\n UnpublishButton?: PayloadComponent<UnpublishButtonServerProps, UnpublishButtonClientProps>\n }\n views?: {\n /**\n * Set to a React component to replace the entire Edit View, including all nested routes.\n * Set to an object to replace or modify individual nested routes, or to add new ones.\n */\n edit?: EditConfig\n }\n }\n /** Extension point to add your custom data. Available in server and client. */\n custom?: GlobalAdminCustom\n /**\n * Custom description for collection\n */\n description?: EntityDescription\n /**\n * Specify a navigational group for globals in the admin sidebar.\n * - Provide a string to place the entity in a custom group.\n * - Provide a record to define localized group names.\n * - Set to `false` to exclude the entity from the sidebar / dashboard without disabling its routes.\n */\n group?: false | Record<string, string> | string\n /**\n * Exclude the global from the admin nav and routes\n */\n hidden?: ((args: { user: PayloadRequest['user'] }) => boolean) | boolean\n /**\n * Hide the API URL within the Edit View\n */\n hideAPIURL?: boolean\n /**\n * Live preview options\n */\n livePreview?: LivePreviewConfig\n meta?: MetaConfig\n /**\n * Function to generate custom preview URL\n */\n preview?: GeneratePreviewURL\n}\n\nexport type GlobalConfig<TSlug extends GlobalSlug = any> = {\n /**\n * Do not set this property manually. This is set to true during sanitization, to avoid\n * sanitizing the same global multiple times.\n */\n _sanitized?: boolean\n access?: {\n read?: Access\n readVersions?: Access\n update?: Access\n }\n admin?: GlobalAdminOptions\n /** Extension point to add your custom data. Server only. */\n custom?: GlobalCustom\n /**\n * Customize the SQL table name\n */\n dbName?: DBIdentifierName\n endpoints?: false | Omit<Endpoint, 'root'>[]\n fields: Field[]\n /**\n * Specify which fields should be selected always, regardless of the `select` query which can be useful that the field exists for access control / hooks\n */\n forceSelect?: IsAny<SelectFromGlobalSlug<TSlug>> extends true\n ? SelectIncludeType\n : SelectFromGlobalSlug<TSlug>\n graphQL?:\n | {\n disableMutations?: true\n disableQueries?: true\n name?: string\n }\n | false\n hooks?: {\n afterChange?: AfterChangeHook[]\n afterRead?: AfterReadHook[]\n beforeChange?: BeforeChangeHook[]\n beforeOperation?: BeforeOperationHook[]\n beforeRead?: BeforeReadHook[]\n beforeValidate?: BeforeValidateHook[]\n }\n label?: LabelFunction | StaticLabel\n /**\n * Enables / Disables the ability to lock documents while editing\n * @default true\n */\n lockDocuments?:\n | {\n duration: number\n }\n | false\n slug: string\n /**\n * Options used in typescript generation\n */\n typescript?: {\n /**\n * Typescript generation name given to the interface type\n */\n interface?: string\n }\n versions?: boolean | IncomingGlobalVersions\n}\n\nexport interface SanitizedGlobalConfig\n extends Omit<DeepRequired<GlobalConfig>, 'endpoints' | 'fields' | 'slug' | 'versions'> {\n endpoints: Endpoint[] | false\n fields: Field[]\n /**\n * Fields in the database schema structure\n * Rows / collapsible / tabs w/o name `fields` merged to top, UIs are excluded\n */\n flattenedFields: FlattenedField[]\n slug: GlobalSlug\n versions?: SanitizedGlobalVersions\n}\n\nexport type Globals = {\n config: SanitizedGlobalConfig[]\n graphQL?:\n | {\n [slug: string]: {\n mutationInputType: GraphQLNonNull<any>\n type: GraphQLObjectType\n versionType?: GraphQLObjectType\n }\n }\n | false\n}\n"],"names":[],"mappings":"AAAA,qDAAqD,GAyUrD,WAWC"}
@@ -0,0 +1,8 @@
1
+ import type { CollectionConfig } from '../collections/config/types.js';
2
+ export declare const addHierarchyToCollection: ({ collectionConfig, parentFieldName, slugPathFieldName, titlePathFieldName, }: {
3
+ collectionConfig: CollectionConfig;
4
+ parentFieldName: string;
5
+ slugPathFieldName: string;
6
+ titlePathFieldName: string;
7
+ }) => void;
8
+ //# sourceMappingURL=addHierarchyToCollection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addHierarchyToCollection.d.ts","sourceRoot":"","sources":["../../src/hierarchy/addHierarchyToCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AAOtE,eAAO,MAAM,wBAAwB,kFAKlC;IACD,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,MAAM,CAAA;CAC3B,SAqDA,CAAA"}
@@ -0,0 +1,62 @@
1
+ import { hierarchyCollectionAfterRead } from './hooks/collectionAfterRead.js';
2
+ import { hierarchyCollectionBeforeChange } from './hooks/collectionBeforeChange.js';
3
+ import { hierarchyCollectionBeforeDelete } from './hooks/collectionBeforeDelete.js';
4
+ import { findUseAsTitleField } from './utils/findUseAsTitle.js';
5
+ export const addHierarchyToCollection = ({ collectionConfig, parentFieldName, slugPathFieldName, titlePathFieldName })=>{
6
+ const { titleFieldName } = findUseAsTitleField(collectionConfig);
7
+ // Add virtual path fields (computed in afterRead)
8
+ collectionConfig.fields.push({
9
+ name: slugPathFieldName,
10
+ type: 'text',
11
+ admin: {
12
+ readOnly: true
13
+ },
14
+ index: true,
15
+ label: 'Slug Path',
16
+ virtual: true
17
+ }, {
18
+ name: titlePathFieldName,
19
+ type: 'text',
20
+ admin: {
21
+ readOnly: true
22
+ },
23
+ index: true,
24
+ label: 'Title Path',
25
+ virtual: true
26
+ });
27
+ if (!collectionConfig.admin) {
28
+ collectionConfig.admin = {};
29
+ }
30
+ if (!collectionConfig.admin.listSearchableFields) {
31
+ collectionConfig.admin.listSearchableFields = [
32
+ titleFieldName
33
+ ];
34
+ } else if (!collectionConfig.admin.listSearchableFields.includes(titleFieldName)) {
35
+ collectionConfig.admin.listSearchableFields.push(titleFieldName);
36
+ }
37
+ collectionConfig.hooks = {
38
+ ...collectionConfig.hooks || {},
39
+ afterRead: [
40
+ ...collectionConfig.hooks?.afterRead || [],
41
+ hierarchyCollectionAfterRead({
42
+ parentFieldName,
43
+ slugPathFieldName,
44
+ titlePathFieldName
45
+ })
46
+ ],
47
+ beforeChange: [
48
+ ...collectionConfig.hooks?.beforeChange || [],
49
+ hierarchyCollectionBeforeChange({
50
+ parentFieldName
51
+ })
52
+ ],
53
+ beforeDelete: [
54
+ ...collectionConfig.hooks?.beforeDelete || [],
55
+ hierarchyCollectionBeforeDelete({
56
+ parentFieldName
57
+ })
58
+ ]
59
+ };
60
+ };
61
+
62
+ //# sourceMappingURL=addHierarchyToCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hierarchy/addHierarchyToCollection.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\n\nimport { hierarchyCollectionAfterRead } from './hooks/collectionAfterRead.js'\nimport { hierarchyCollectionBeforeChange } from './hooks/collectionBeforeChange.js'\nimport { hierarchyCollectionBeforeDelete } from './hooks/collectionBeforeDelete.js'\nimport { findUseAsTitleField } from './utils/findUseAsTitle.js'\n\nexport const addHierarchyToCollection = ({\n collectionConfig,\n parentFieldName,\n slugPathFieldName,\n titlePathFieldName,\n}: {\n collectionConfig: CollectionConfig\n parentFieldName: string\n slugPathFieldName: string\n titlePathFieldName: string\n}) => {\n const { titleFieldName } = findUseAsTitleField(collectionConfig)\n\n // Add virtual path fields (computed in afterRead)\n collectionConfig.fields.push(\n {\n name: slugPathFieldName,\n type: 'text',\n admin: {\n readOnly: true,\n // hidden: true,\n },\n index: true,\n label: 'Slug Path',\n virtual: true,\n },\n {\n name: titlePathFieldName,\n type: 'text',\n admin: {\n readOnly: true,\n // hidden: true,\n },\n index: true,\n label: 'Title Path',\n virtual: true,\n },\n )\n\n if (!collectionConfig.admin) {\n collectionConfig.admin = {}\n }\n if (!collectionConfig.admin.listSearchableFields) {\n collectionConfig.admin.listSearchableFields = [titleFieldName]\n } else if (!collectionConfig.admin.listSearchableFields.includes(titleFieldName)) {\n collectionConfig.admin.listSearchableFields.push(titleFieldName)\n }\n\n collectionConfig.hooks = {\n ...(collectionConfig.hooks || {}),\n afterRead: [\n ...(collectionConfig.hooks?.afterRead || []),\n hierarchyCollectionAfterRead({ parentFieldName, slugPathFieldName, titlePathFieldName }),\n ],\n beforeChange: [\n ...(collectionConfig.hooks?.beforeChange || []),\n hierarchyCollectionBeforeChange({ parentFieldName }),\n ],\n beforeDelete: [\n ...(collectionConfig.hooks?.beforeDelete || []),\n hierarchyCollectionBeforeDelete({ parentFieldName }),\n ],\n }\n}\n"],"names":["hierarchyCollectionAfterRead","hierarchyCollectionBeforeChange","hierarchyCollectionBeforeDelete","findUseAsTitleField","addHierarchyToCollection","collectionConfig","parentFieldName","slugPathFieldName","titlePathFieldName","titleFieldName","fields","push","name","type","admin","readOnly","index","label","virtual","listSearchableFields","includes","hooks","afterRead","beforeChange","beforeDelete"],"mappings":"AAEA,SAASA,4BAA4B,QAAQ,iCAAgC;AAC7E,SAASC,+BAA+B,QAAQ,oCAAmC;AACnF,SAASC,+BAA+B,QAAQ,oCAAmC;AACnF,SAASC,mBAAmB,QAAQ,4BAA2B;AAE/D,OAAO,MAAMC,2BAA2B,CAAC,EACvCC,gBAAgB,EAChBC,eAAe,EACfC,iBAAiB,EACjBC,kBAAkB,EAMnB;IACC,MAAM,EAAEC,cAAc,EAAE,GAAGN,oBAAoBE;IAE/C,kDAAkD;IAClDA,iBAAiBK,MAAM,CAACC,IAAI,CAC1B;QACEC,MAAML;QACNM,MAAM;QACNC,OAAO;YACLC,UAAU;QAEZ;QACAC,OAAO;QACPC,OAAO;QACPC,SAAS;IACX,GACA;QACEN,MAAMJ;QACNK,MAAM;QACNC,OAAO;YACLC,UAAU;QAEZ;QACAC,OAAO;QACPC,OAAO;QACPC,SAAS;IACX;IAGF,IAAI,CAACb,iBAAiBS,KAAK,EAAE;QAC3BT,iBAAiBS,KAAK,GAAG,CAAC;IAC5B;IACA,IAAI,CAACT,iBAAiBS,KAAK,CAACK,oBAAoB,EAAE;QAChDd,iBAAiBS,KAAK,CAACK,oBAAoB,GAAG;YAACV;SAAe;IAChE,OAAO,IAAI,CAACJ,iBAAiBS,KAAK,CAACK,oBAAoB,CAACC,QAAQ,CAACX,iBAAiB;QAChFJ,iBAAiBS,KAAK,CAACK,oBAAoB,CAACR,IAAI,CAACF;IACnD;IAEAJ,iBAAiBgB,KAAK,GAAG;QACvB,GAAIhB,iBAAiBgB,KAAK,IAAI,CAAC,CAAC;QAChCC,WAAW;eACLjB,iBAAiBgB,KAAK,EAAEC,aAAa,EAAE;YAC3CtB,6BAA6B;gBAAEM;gBAAiBC;gBAAmBC;YAAmB;SACvF;QACDe,cAAc;eACRlB,iBAAiBgB,KAAK,EAAEE,gBAAgB,EAAE;YAC9CtB,gCAAgC;gBAAEK;YAAgB;SACnD;QACDkB,cAAc;eACRnB,iBAAiBgB,KAAK,EAAEG,gBAAgB,EAAE;YAC9CtB,gCAAgC;gBAAEI;YAAgB;SACnD;IACH;AACF,EAAC"}
@@ -0,0 +1,11 @@
1
+ import type { SingleRelationshipField } from '../fields/config/types.js';
2
+ export declare const buildParentField: ({ collectionSlug, injectHeaderButton, overrides, parentFieldName, }: {
3
+ collectionSlug: string;
4
+ /**
5
+ * When true, uses NullField and injects a header button for parent selection
6
+ */
7
+ injectHeaderButton?: boolean;
8
+ overrides?: Partial<SingleRelationshipField>;
9
+ parentFieldName: string;
10
+ }) => SingleRelationshipField;
11
+ //# sourceMappingURL=buildParentField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildParentField.d.ts","sourceRoot":"","sources":["../../src/hierarchy/buildParentField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAExE,eAAO,MAAM,gBAAgB,wEAK1B;IACD,cAAc,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAC5C,eAAe,EAAE,MAAM,CAAA;CACxB,KAAG,uBA0CH,CAAA"}
@@ -0,0 +1,42 @@
1
+ export const buildParentField = ({ collectionSlug, injectHeaderButton = false, overrides = {}, parentFieldName })=>{
2
+ const field = {
3
+ name: parentFieldName,
4
+ type: 'relationship',
5
+ admin: {
6
+ ...injectHeaderButton && {
7
+ components: {
8
+ Field: '@payloadcms/ui#NullField'
9
+ }
10
+ },
11
+ position: 'sidebar'
12
+ },
13
+ hasMany: false,
14
+ index: true,
15
+ label: 'Parent',
16
+ localized: false,
17
+ relationTo: collectionSlug,
18
+ ...injectHeaderButton && {
19
+ custom: {
20
+ hierarchy: {
21
+ // Inform hierarchy UI to inject the header button for this parent field
22
+ injectHeaderButton: true
23
+ }
24
+ }
25
+ }
26
+ };
27
+ if (overrides?.admin) {
28
+ field.admin = {
29
+ ...field.admin || {},
30
+ ...overrides.admin
31
+ };
32
+ if (overrides.admin.components && field.admin) {
33
+ field.admin.components = {
34
+ ...field.admin.components || {},
35
+ ...overrides.admin.components
36
+ };
37
+ }
38
+ }
39
+ return field;
40
+ };
41
+
42
+ //# sourceMappingURL=buildParentField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hierarchy/buildParentField.ts"],"sourcesContent":["import type { SingleRelationshipField } from '../fields/config/types.js'\n\nexport const buildParentField = ({\n collectionSlug,\n injectHeaderButton = false,\n overrides = {},\n parentFieldName,\n}: {\n collectionSlug: string\n /**\n * When true, uses NullField and injects a header button for parent selection\n */\n injectHeaderButton?: boolean\n overrides?: Partial<SingleRelationshipField>\n parentFieldName: string\n}): SingleRelationshipField => {\n const field: SingleRelationshipField = {\n name: parentFieldName,\n type: 'relationship',\n admin: {\n ...(injectHeaderButton && {\n components: {\n Field: '@payloadcms/ui#NullField',\n },\n }),\n position: 'sidebar',\n },\n hasMany: false,\n index: true,\n label: 'Parent',\n localized: false,\n relationTo: collectionSlug, // Always self-referential\n ...(injectHeaderButton && {\n custom: {\n hierarchy: {\n // Inform hierarchy UI to inject the header button for this parent field\n injectHeaderButton: true,\n },\n },\n }),\n }\n\n if (overrides?.admin) {\n field.admin = {\n ...(field.admin || {}),\n ...overrides.admin,\n }\n\n if (overrides.admin.components && field.admin) {\n field.admin.components = {\n ...(field.admin.components || {}),\n ...overrides.admin.components,\n }\n }\n }\n\n return field\n}\n"],"names":["buildParentField","collectionSlug","injectHeaderButton","overrides","parentFieldName","field","name","type","admin","components","Field","position","hasMany","index","label","localized","relationTo","custom","hierarchy"],"mappings":"AAEA,OAAO,MAAMA,mBAAmB,CAAC,EAC/BC,cAAc,EACdC,qBAAqB,KAAK,EAC1BC,YAAY,CAAC,CAAC,EACdC,eAAe,EAShB;IACC,MAAMC,QAAiC;QACrCC,MAAMF;QACNG,MAAM;QACNC,OAAO;YACL,GAAIN,sBAAsB;gBACxBO,YAAY;oBACVC,OAAO;gBACT;YACF,CAAC;YACDC,UAAU;QACZ;QACAC,SAAS;QACTC,OAAO;QACPC,OAAO;QACPC,WAAW;QACXC,YAAYf;QACZ,GAAIC,sBAAsB;YACxBe,QAAQ;gBACNC,WAAW;oBACT,wEAAwE;oBACxEhB,oBAAoB;gBACtB;YACF;QACF,CAAC;IACH;IAEA,IAAIC,WAAWK,OAAO;QACpBH,MAAMG,KAAK,GAAG;YACZ,GAAIH,MAAMG,KAAK,IAAI,CAAC,CAAC;YACrB,GAAGL,UAAUK,KAAK;QACpB;QAEA,IAAIL,UAAUK,KAAK,CAACC,UAAU,IAAIJ,MAAMG,KAAK,EAAE;YAC7CH,MAAMG,KAAK,CAACC,UAAU,GAAG;gBACvB,GAAIJ,MAAMG,KAAK,CAACC,UAAU,IAAI,CAAC,CAAC;gBAChC,GAAGN,UAAUK,KAAK,CAACC,UAAU;YAC/B;QACF;IACF;IAEA,OAAOJ;AACT,EAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Default field names and constants for hierarchy feature
3
+ */
4
+ export declare const HIERARCHY_SLUG_PATH_FIELD = "_h_slugPath";
5
+ export declare const HIERARCHY_TITLE_PATH_FIELD = "_h_titlePath";
6
+ export declare const HIERARCHY_DEFAULT_LOCALE = "en";
7
+ /** Default limit for hierarchy tree queries */
8
+ export declare const DEFAULT_HIERARCHY_TREE_LIMIT = 100;
9
+ /** Default limit for hierarchy list view table queries */
10
+ export declare const DEFAULT_HIERARCHY_LIST_LIMIT = 25;
11
+ /** Default value for allowing hasMany on hierarchy fields */
12
+ export declare const DEFAULT_ALLOW_HAS_MANY = true;
13
+ /** Generate a hierarchy field name from a hierarchy slug (e.g., 'folders' -> '_h_folders') */
14
+ export declare const getHierarchyFieldName: (hierarchySlug: string) => string;
15
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/hierarchy/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,yBAAyB,gBAAgB,CAAA;AACtD,eAAO,MAAM,0BAA0B,iBAAiB,CAAA;AACxD,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAE5C,+CAA+C;AAC/C,eAAO,MAAM,4BAA4B,MAAM,CAAA;AAE/C,0DAA0D;AAC1D,eAAO,MAAM,4BAA4B,KAAK,CAAA;AAE9C,6DAA6D;AAC7D,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C,8FAA8F;AAC9F,eAAO,MAAM,qBAAqB,kBAAmB,MAAM,KAAG,MAA+B,CAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Default field names and constants for hierarchy feature
3
+ */ export const HIERARCHY_SLUG_PATH_FIELD = '_h_slugPath';
4
+ export const HIERARCHY_TITLE_PATH_FIELD = '_h_titlePath';
5
+ export const HIERARCHY_DEFAULT_LOCALE = 'en';
6
+ /** Default limit for hierarchy tree queries */ export const DEFAULT_HIERARCHY_TREE_LIMIT = 100;
7
+ /** Default limit for hierarchy list view table queries */ export const DEFAULT_HIERARCHY_LIST_LIMIT = 25;
8
+ /** Default value for allowing hasMany on hierarchy fields */ export const DEFAULT_ALLOW_HAS_MANY = true;
9
+ /** Generate a hierarchy field name from a hierarchy slug (e.g., 'folders' -> '_h_folders') */ export const getHierarchyFieldName = (hierarchySlug)=>`_h_${hierarchySlug}`;
10
+
11
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hierarchy/constants.ts"],"sourcesContent":["/**\n * Default field names and constants for hierarchy feature\n */\n\nexport const HIERARCHY_SLUG_PATH_FIELD = '_h_slugPath'\nexport const HIERARCHY_TITLE_PATH_FIELD = '_h_titlePath'\nexport const HIERARCHY_DEFAULT_LOCALE = 'en'\n\n/** Default limit for hierarchy tree queries */\nexport const DEFAULT_HIERARCHY_TREE_LIMIT = 100\n\n/** Default limit for hierarchy list view table queries */\nexport const DEFAULT_HIERARCHY_LIST_LIMIT = 25\n\n/** Default value for allowing hasMany on hierarchy fields */\nexport const DEFAULT_ALLOW_HAS_MANY = true\n\n/** Generate a hierarchy field name from a hierarchy slug (e.g., 'folders' -> '_h_folders') */\nexport const getHierarchyFieldName = (hierarchySlug: string): string => `_h_${hierarchySlug}`\n"],"names":["HIERARCHY_SLUG_PATH_FIELD","HIERARCHY_TITLE_PATH_FIELD","HIERARCHY_DEFAULT_LOCALE","DEFAULT_HIERARCHY_TREE_LIMIT","DEFAULT_HIERARCHY_LIST_LIMIT","DEFAULT_ALLOW_HAS_MANY","getHierarchyFieldName","hierarchySlug"],"mappings":"AAAA;;CAEC,GAED,OAAO,MAAMA,4BAA4B,cAAa;AACtD,OAAO,MAAMC,6BAA6B,eAAc;AACxD,OAAO,MAAMC,2BAA2B,KAAI;AAE5C,6CAA6C,GAC7C,OAAO,MAAMC,+BAA+B,IAAG;AAE/C,wDAAwD,GACxD,OAAO,MAAMC,+BAA+B,GAAE;AAE9C,2DAA2D,GAC3D,OAAO,MAAMC,yBAAyB,KAAI;AAE1C,4FAA4F,GAC5F,OAAO,MAAMC,wBAAwB,CAACC,gBAAkC,CAAC,GAAG,EAAEA,eAAe,CAAA"}
@@ -0,0 +1,39 @@
1
+ import type { RelationshipField, SingleRelationshipField } from '../fields/config/types.js';
2
+ /**
3
+ * Options for creating a folder relationship field.
4
+ * All SingleRelationshipField properties are available except name, type, relationTo, and hasMany
5
+ * which are managed by the folder system.
6
+ */
7
+ export type CreateFolderFieldOptions = {
8
+ /**
9
+ * The slug of the hierarchy collection this field references (e.g., 'folders')
10
+ */
11
+ relationTo: string;
12
+ } & Pick<Partial<SingleRelationshipField>, 'admin' | 'label' | 'required'>;
13
+ /**
14
+ * Creates a relationship field for folder-style hierarchies (single-select).
15
+ *
16
+ * This field:
17
+ * - Has hasMany:false (single folder selection)
18
+ * - Uses NullField to render nothing in the form (no DOM output)
19
+ * - Injects a header button for folder selection via miller columns UI
20
+ *
21
+ * Use this in your collection's fields array to add a folder relationship.
22
+ * The field name is automatically generated based on the hierarchy slug.
23
+ *
24
+ * @example
25
+ * import { createFolderField } from 'payload'
26
+ *
27
+ * const Posts: CollectionConfig = {
28
+ * slug: 'posts',
29
+ * fields: [
30
+ * { name: 'title', type: 'text' },
31
+ * createFolderField({
32
+ * relationTo: 'folders',
33
+ * label: 'Folder',
34
+ * }),
35
+ * ],
36
+ * }
37
+ */
38
+ export declare function createFolderField(options: CreateFolderFieldOptions): RelationshipField;
39
+ //# sourceMappingURL=createFolderField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFolderField.d.ts","sourceRoot":"","sources":["../../src/hierarchy/createFolderField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAI3F;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC,CAAA;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CA2BtF"}
@@ -0,0 +1,54 @@
1
+ import { getHierarchyFieldName } from './constants.js';
2
+ /**
3
+ * Creates a relationship field for folder-style hierarchies (single-select).
4
+ *
5
+ * This field:
6
+ * - Has hasMany:false (single folder selection)
7
+ * - Uses NullField to render nothing in the form (no DOM output)
8
+ * - Injects a header button for folder selection via miller columns UI
9
+ *
10
+ * Use this in your collection's fields array to add a folder relationship.
11
+ * The field name is automatically generated based on the hierarchy slug.
12
+ *
13
+ * @example
14
+ * import { createFolderField } from 'payload'
15
+ *
16
+ * const Posts: CollectionConfig = {
17
+ * slug: 'posts',
18
+ * fields: [
19
+ * { name: 'title', type: 'text' },
20
+ * createFolderField({
21
+ * relationTo: 'folders',
22
+ * label: 'Folder',
23
+ * }),
24
+ * ],
25
+ * }
26
+ */ export function createFolderField(options) {
27
+ const { admin: adminOverrides, label, relationTo, ...restOptions } = options;
28
+ const { components: componentOverrides, ...restAdminOverrides } = adminOverrides || {};
29
+ return {
30
+ name: getHierarchyFieldName(relationTo),
31
+ type: 'relationship',
32
+ admin: {
33
+ position: 'sidebar',
34
+ ...restAdminOverrides,
35
+ components: {
36
+ // NullField renders nothing - the header button handles the UI
37
+ Field: '@payloadcms/ui#NullField',
38
+ ...componentOverrides
39
+ }
40
+ },
41
+ custom: {
42
+ hierarchy: {
43
+ injectHeaderButton: true
44
+ }
45
+ },
46
+ hasMany: false,
47
+ index: true,
48
+ label: label ?? 'Folder',
49
+ relationTo,
50
+ ...restOptions
51
+ };
52
+ }
53
+
54
+ //# sourceMappingURL=createFolderField.js.map