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

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 (641) hide show
  1. package/dist/admin/RichText.d.ts +3 -16
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/adapters/cookies.d.ts +21 -0
  5. package/dist/admin/adapters/cookies.d.ts.map +1 -0
  6. package/dist/admin/adapters/cookies.js +3 -0
  7. package/dist/admin/adapters/cookies.js.map +1 -0
  8. package/dist/admin/adapters/index.d.ts +4 -0
  9. package/dist/admin/adapters/index.d.ts.map +1 -0
  10. package/dist/admin/adapters/index.js +3 -0
  11. package/dist/admin/adapters/index.js.map +1 -0
  12. package/dist/admin/adapters/router.d.ts +56 -0
  13. package/dist/admin/adapters/router.d.ts.map +1 -0
  14. package/dist/admin/adapters/router.js +3 -0
  15. package/dist/admin/adapters/router.js.map +1 -0
  16. package/dist/admin/adapters/server.d.ts +23 -0
  17. package/dist/admin/adapters/server.d.ts.map +1 -0
  18. package/dist/admin/adapters/server.js +6 -0
  19. package/dist/admin/adapters/server.js.map +1 -0
  20. package/dist/admin/elements/Nav.d.ts +13 -0
  21. package/dist/admin/elements/Nav.d.ts.map +1 -1
  22. package/dist/admin/elements/Nav.js.map +1 -1
  23. package/dist/admin/elements/Table.d.ts +1 -0
  24. package/dist/admin/elements/Table.d.ts.map +1 -1
  25. package/dist/admin/elements/Table.js.map +1 -1
  26. package/dist/admin/functions/index.d.ts +1 -38
  27. package/dist/admin/functions/index.d.ts.map +1 -1
  28. package/dist/admin/functions/index.js.map +1 -1
  29. package/dist/admin/types.d.ts +5 -4
  30. package/dist/admin/types.d.ts.map +1 -1
  31. package/dist/admin/types.js.map +1 -1
  32. package/dist/admin/views/hierarchyList.d.ts +10 -0
  33. package/dist/admin/views/hierarchyList.d.ts.map +1 -0
  34. package/dist/admin/views/hierarchyList.js +3 -0
  35. package/dist/admin/views/hierarchyList.js.map +1 -0
  36. package/dist/admin/views/index.d.ts +1 -3
  37. package/dist/admin/views/index.d.ts.map +1 -1
  38. package/dist/admin/views/index.js.map +1 -1
  39. package/dist/admin/views/list.d.ts +47 -2
  40. package/dist/admin/views/list.d.ts.map +1 -1
  41. package/dist/admin/views/list.js.map +1 -1
  42. package/dist/auth/cookies.d.ts.map +1 -1
  43. package/dist/auth/defaultAccess.d.ts.map +1 -1
  44. package/dist/auth/ensureUsernameOrEmail.d.ts.map +1 -1
  45. package/dist/auth/executeAccess.d.ts.map +1 -1
  46. package/dist/auth/executeAuthStrategies.d.ts.map +1 -1
  47. package/dist/auth/extractAccessFromPermission.d.ts.map +1 -1
  48. package/dist/auth/extractJWT.d.ts.map +1 -1
  49. package/dist/auth/getAuthFields.d.ts.map +1 -1
  50. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  51. package/dist/auth/getLoginOptions.d.ts.map +1 -1
  52. package/dist/auth/isUserLocked.d.ts.map +1 -1
  53. package/dist/auth/jwt.d.ts.map +1 -1
  54. package/dist/auth/operations/access.d.ts.map +1 -1
  55. package/dist/auth/operations/auth.d.ts.map +1 -1
  56. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  57. package/dist/auth/operations/init.d.ts.map +1 -1
  58. package/dist/auth/operations/local/auth.d.ts.map +1 -1
  59. package/dist/auth/operations/login.d.ts.map +1 -1
  60. package/dist/auth/operations/logout.d.ts.map +1 -1
  61. package/dist/auth/operations/me.d.ts.map +1 -1
  62. package/dist/auth/operations/refresh.d.ts.map +1 -1
  63. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  64. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  65. package/dist/auth/operations/unlock.d.ts.map +1 -1
  66. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  67. package/dist/auth/sessions.d.ts.map +1 -1
  68. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  69. package/dist/auth/strategies/apiKey.js +6 -17
  70. package/dist/auth/strategies/apiKey.js.map +1 -1
  71. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  72. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
  73. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  74. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  75. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  76. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
  77. package/dist/bin/generateImportMap/iterateCollections.js +1 -0
  78. package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
  79. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
  80. package/dist/bin/generateImportMap/iterateConfig.js +7 -0
  81. package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
  82. package/dist/bin/generateImportMap/iterateFields.d.ts.map +1 -1
  83. package/dist/bin/generateImportMap/iterateFields.js +4 -1
  84. package/dist/bin/generateImportMap/iterateFields.js.map +1 -1
  85. package/dist/bin/generateImportMap/iterateGlobals.d.ts.map +1 -1
  86. package/dist/bin/generateImportMap/iterateGlobals.js +20 -8
  87. package/dist/bin/generateImportMap/iterateGlobals.js.map +1 -1
  88. package/dist/bin/generateImportMap/utilities/getFromImportMap.d.ts.map +1 -1
  89. package/dist/bin/generateTypes.d.ts.map +1 -1
  90. package/dist/bin/generateTypes.js +7 -1
  91. package/dist/bin/generateTypes.js.map +1 -1
  92. package/dist/bin/index.d.ts.map +1 -1
  93. package/dist/bin/index.js +1 -3
  94. package/dist/bin/index.js.map +1 -1
  95. package/dist/bin/migrate.d.ts.map +1 -1
  96. package/dist/collections/config/client.d.ts +4 -2
  97. package/dist/collections/config/client.d.ts.map +1 -1
  98. package/dist/collections/config/client.js +13 -1
  99. package/dist/collections/config/client.js.map +1 -1
  100. package/dist/collections/config/defaults.d.ts.map +1 -1
  101. package/dist/collections/config/defaults.js +1 -1
  102. package/dist/collections/config/defaults.js.map +1 -1
  103. package/dist/collections/config/sanitize.d.ts +10 -1
  104. package/dist/collections/config/sanitize.d.ts.map +1 -1
  105. package/dist/collections/config/sanitize.js +51 -10
  106. package/dist/collections/config/sanitize.js.map +1 -1
  107. package/dist/collections/config/sanitizeCompoundIndexes.d.ts.map +1 -1
  108. package/dist/collections/config/types.d.ts +76 -91
  109. package/dist/collections/config/types.d.ts.map +1 -1
  110. package/dist/collections/config/types.js.map +1 -1
  111. package/dist/collections/config/useAsTitle.d.ts.map +1 -1
  112. package/dist/collections/dataloader.d.ts.map +1 -1
  113. package/dist/collections/operations/count.d.ts.map +1 -1
  114. package/dist/collections/operations/countVersions.d.ts.map +1 -1
  115. package/dist/collections/operations/create.d.ts.map +1 -1
  116. package/dist/collections/operations/create.js +24 -19
  117. package/dist/collections/operations/create.js.map +1 -1
  118. package/dist/collections/operations/delete.d.ts.map +1 -1
  119. package/dist/collections/operations/delete.js +7 -2
  120. package/dist/collections/operations/delete.js.map +1 -1
  121. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  122. package/dist/collections/operations/deleteByID.js +7 -2
  123. package/dist/collections/operations/deleteByID.js.map +1 -1
  124. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  125. package/dist/collections/operations/find.d.ts.map +1 -1
  126. package/dist/collections/operations/find.js +7 -2
  127. package/dist/collections/operations/find.js.map +1 -1
  128. package/dist/collections/operations/findByID.d.ts.map +1 -1
  129. package/dist/collections/operations/findByID.js +10 -5
  130. package/dist/collections/operations/findByID.js.map +1 -1
  131. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  132. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  133. package/dist/collections/operations/findVersionByID.js +6 -4
  134. package/dist/collections/operations/findVersionByID.js.map +1 -1
  135. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  136. package/dist/collections/operations/findVersions.js +6 -4
  137. package/dist/collections/operations/findVersions.js.map +1 -1
  138. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  139. package/dist/collections/operations/restoreVersion.js +7 -2
  140. package/dist/collections/operations/restoreVersion.js.map +1 -1
  141. package/dist/collections/operations/update.d.ts.map +1 -1
  142. package/dist/collections/operations/update.js +7 -2
  143. package/dist/collections/operations/update.js.map +1 -1
  144. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  145. package/dist/collections/operations/updateByID.js +7 -2
  146. package/dist/collections/operations/updateByID.js.map +1 -1
  147. package/dist/collections/operations/utilities/buildAfterOperation.d.ts.map +1 -1
  148. package/dist/collections/operations/utilities/sanitizeSortQuery.d.ts.map +1 -1
  149. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  150. package/dist/collections/operations/utilities/update.js +5 -4
  151. package/dist/collections/operations/utilities/update.js.map +1 -1
  152. package/dist/config/build.d.ts.map +1 -1
  153. package/dist/config/build.js +8 -0
  154. package/dist/config/build.js.map +1 -1
  155. package/dist/config/client.d.ts +1 -1
  156. package/dist/config/client.d.ts.map +1 -1
  157. package/dist/config/client.js +2 -11
  158. package/dist/config/client.js.map +1 -1
  159. package/dist/config/defaults.d.ts.map +1 -1
  160. package/dist/config/defaults.js +0 -15
  161. package/dist/config/defaults.js.map +1 -1
  162. package/dist/config/orderable/index.d.ts.map +1 -1
  163. package/dist/config/orderable/index.js +0 -4
  164. package/dist/config/orderable/index.js.map +1 -1
  165. package/dist/config/sanitize.d.ts.map +1 -1
  166. package/dist/config/sanitize.js +6 -53
  167. package/dist/config/sanitize.js.map +1 -1
  168. package/dist/config/types.d.ts +188 -32
  169. package/dist/config/types.d.ts.map +1 -1
  170. package/dist/config/types.js.map +1 -1
  171. package/dist/database/combineQueries.d.ts.map +1 -1
  172. package/dist/database/migrations/findMigrationDir.d.ts.map +1 -1
  173. package/dist/database/migrations/getPredefinedMigration.d.ts.map +1 -1
  174. package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
  175. package/dist/database/migrations/templates/localizeStatus.d.ts.map +1 -1
  176. package/dist/database/migrations/writeMigrationIndex.d.ts.map +1 -1
  177. package/dist/database/sanitizeJoinQuery.d.ts.map +1 -1
  178. package/dist/database/sanitizeWhereQuery.d.ts.map +1 -1
  179. package/dist/duplicateDocument/index.d.ts.map +1 -1
  180. package/dist/email/getStringifiedToAddress.d.ts.map +1 -1
  181. package/dist/exports/shared.d.ts +6 -3
  182. package/dist/exports/shared.d.ts.map +1 -1
  183. package/dist/exports/shared.js +4 -2
  184. package/dist/exports/shared.js.map +1 -1
  185. package/dist/fields/baseFields/slug/countVersions.d.ts.map +1 -1
  186. package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
  187. package/dist/fields/baseFields/slug/index.d.ts.map +1 -1
  188. package/dist/fields/baseFields/slug/index.js +7 -5
  189. package/dist/fields/baseFields/slug/index.js.map +1 -1
  190. package/dist/fields/config/client.d.ts +1 -1
  191. package/dist/fields/config/client.d.ts.map +1 -1
  192. package/dist/fields/config/client.js +4 -3
  193. package/dist/fields/config/client.js.map +1 -1
  194. package/dist/fields/config/sanitize.d.ts.map +1 -1
  195. package/dist/fields/config/sanitize.js +13 -20
  196. package/dist/fields/config/sanitize.js.map +1 -1
  197. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
  198. package/dist/fields/config/sanitizeJoinField.js +3 -0
  199. package/dist/fields/config/sanitizeJoinField.js.map +1 -1
  200. package/dist/fields/config/types.d.ts +44 -118
  201. package/dist/fields/config/types.d.ts.map +1 -1
  202. package/dist/fields/config/types.js +12 -2
  203. package/dist/fields/config/types.js.map +1 -1
  204. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  205. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  206. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  207. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  208. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  209. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  210. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  211. package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.d.ts.map +1 -1
  212. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.d.ts.map +1 -1
  213. package/dist/fields/hooks/beforeChange/getExistingRowDoc.d.ts.map +1 -1
  214. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  215. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  216. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  217. package/dist/fields/hooks/beforeDuplicate/index.d.ts.map +1 -1
  218. package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
  219. package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -1
  220. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  221. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  222. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  223. package/dist/fields/isFieldDisabled.d.ts +12 -0
  224. package/dist/fields/isFieldDisabled.d.ts.map +1 -0
  225. package/dist/fields/isFieldDisabled.js +15 -0
  226. package/dist/fields/isFieldDisabled.js.map +1 -0
  227. package/dist/fields/isFieldDisabled.spec.js +134 -0
  228. package/dist/fields/isFieldDisabled.spec.js.map +1 -0
  229. package/dist/fields/mergeBaseFields.d.ts.map +1 -1
  230. package/dist/fields/setDefaultBeforeDuplicate.d.ts.map +1 -1
  231. package/dist/fields/validations.js +1 -1
  232. package/dist/fields/validations.js.map +1 -1
  233. package/dist/globals/config/client.d.ts +1 -1
  234. package/dist/globals/config/client.d.ts.map +1 -1
  235. package/dist/globals/config/client.js +2 -1
  236. package/dist/globals/config/client.js.map +1 -1
  237. package/dist/globals/config/sanitize.d.ts +6 -1
  238. package/dist/globals/config/sanitize.d.ts.map +1 -1
  239. package/dist/globals/config/sanitize.js +6 -2
  240. package/dist/globals/config/sanitize.js.map +1 -1
  241. package/dist/globals/config/types.d.ts +4 -57
  242. package/dist/globals/config/types.d.ts.map +1 -1
  243. package/dist/globals/config/types.js.map +1 -1
  244. package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -1
  245. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  246. package/dist/globals/operations/findOne.d.ts.map +1 -1
  247. package/dist/globals/operations/findOne.js +7 -2
  248. package/dist/globals/operations/findOne.js.map +1 -1
  249. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  250. package/dist/globals/operations/findVersionByID.js +6 -4
  251. package/dist/globals/operations/findVersionByID.js.map +1 -1
  252. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  253. package/dist/globals/operations/findVersions.js +6 -4
  254. package/dist/globals/operations/findVersions.js.map +1 -1
  255. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  256. package/dist/globals/operations/update.d.ts.map +1 -1
  257. package/dist/globals/operations/update.js +7 -2
  258. package/dist/globals/operations/update.js.map +1 -1
  259. package/dist/hierarchy/addHierarchyToCollection.d.ts +9 -0
  260. package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -0
  261. package/dist/hierarchy/addHierarchyToCollection.js +76 -0
  262. package/dist/hierarchy/addHierarchyToCollection.js.map +1 -0
  263. package/dist/hierarchy/buildParentField.d.ts +11 -0
  264. package/dist/hierarchy/buildParentField.d.ts.map +1 -0
  265. package/dist/hierarchy/buildParentField.js +42 -0
  266. package/dist/hierarchy/buildParentField.js.map +1 -0
  267. package/dist/hierarchy/constants.d.ts +15 -0
  268. package/dist/hierarchy/constants.d.ts.map +1 -0
  269. package/dist/hierarchy/constants.js +11 -0
  270. package/dist/hierarchy/constants.js.map +1 -0
  271. package/dist/hierarchy/createFolderField.d.ts +39 -0
  272. package/dist/hierarchy/createFolderField.d.ts.map +1 -0
  273. package/dist/hierarchy/createFolderField.js +54 -0
  274. package/dist/hierarchy/createFolderField.js.map +1 -0
  275. package/dist/hierarchy/createTagField.d.ts +44 -0
  276. package/dist/hierarchy/createTagField.d.ts.map +1 -0
  277. package/dist/hierarchy/createTagField.js +48 -0
  278. package/dist/hierarchy/createTagField.js.map +1 -0
  279. package/dist/hierarchy/getInitialTreeData.d.ts +27 -0
  280. package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -0
  281. package/dist/hierarchy/getInitialTreeData.js +125 -0
  282. package/dist/hierarchy/getInitialTreeData.js.map +1 -0
  283. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts +14 -0
  284. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts.map +1 -0
  285. package/dist/hierarchy/hooks/collectionAfterDelete.js +21 -0
  286. package/dist/hierarchy/hooks/collectionAfterDelete.js.map +1 -0
  287. package/dist/hierarchy/hooks/collectionAfterRead.d.ts +27 -0
  288. package/dist/hierarchy/hooks/collectionAfterRead.d.ts.map +1 -0
  289. package/dist/hierarchy/hooks/collectionAfterRead.js +72 -0
  290. package/dist/hierarchy/hooks/collectionAfterRead.js.map +1 -0
  291. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts +19 -0
  292. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts.map +1 -0
  293. package/dist/hierarchy/hooks/collectionBeforeChange.js +90 -0
  294. package/dist/hierarchy/hooks/collectionBeforeChange.js.map +1 -0
  295. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts +15 -0
  296. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts.map +1 -0
  297. package/dist/hierarchy/hooks/collectionBeforeDelete.js +20 -0
  298. package/dist/hierarchy/hooks/collectionBeforeDelete.js.map +1 -0
  299. package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts +33 -0
  300. package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts.map +1 -0
  301. package/dist/hierarchy/hooks/collectionBeforeOperation.js +66 -0
  302. package/dist/hierarchy/hooks/collectionBeforeOperation.js.map +1 -0
  303. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts +8 -0
  304. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts.map +1 -0
  305. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js +108 -0
  306. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js.map +1 -0
  307. package/dist/hierarchy/injectHierarchyButton.d.ts +14 -0
  308. package/dist/hierarchy/injectHierarchyButton.d.ts.map +1 -0
  309. package/dist/hierarchy/injectHierarchyButton.js +37 -0
  310. package/dist/hierarchy/injectHierarchyButton.js.map +1 -0
  311. package/dist/hierarchy/presets.d.ts +13 -0
  312. package/dist/hierarchy/presets.d.ts.map +1 -0
  313. package/dist/hierarchy/presets.js +52 -0
  314. package/dist/hierarchy/presets.js.map +1 -0
  315. package/dist/hierarchy/resolveHierarchyCollections.d.ts +23 -0
  316. package/dist/hierarchy/resolveHierarchyCollections.d.ts.map +1 -0
  317. package/dist/hierarchy/resolveHierarchyCollections.js +321 -0
  318. package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -0
  319. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts +14 -0
  320. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +1 -0
  321. package/dist/hierarchy/sanitizeHierarchyCollection.js +119 -0
  322. package/dist/hierarchy/sanitizeHierarchyCollection.js.map +1 -0
  323. package/dist/hierarchy/types.d.ts +162 -0
  324. package/dist/hierarchy/types.d.ts.map +1 -0
  325. package/dist/hierarchy/types.js +6 -0
  326. package/dist/hierarchy/types.js.map +1 -0
  327. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts +77 -0
  328. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts.map +1 -0
  329. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js +77 -0
  330. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js.map +1 -0
  331. package/dist/hierarchy/utils/computePaths.d.ts +31 -0
  332. package/dist/hierarchy/utils/computePaths.d.ts.map +1 -0
  333. package/dist/hierarchy/utils/computePaths.js +445 -0
  334. package/dist/hierarchy/utils/computePaths.js.map +1 -0
  335. package/dist/hierarchy/utils/findUseAsTitle.d.ts +14 -0
  336. package/dist/hierarchy/utils/findUseAsTitle.d.ts.map +1 -0
  337. package/dist/hierarchy/utils/findUseAsTitle.js +89 -0
  338. package/dist/hierarchy/utils/findUseAsTitle.js.map +1 -0
  339. package/dist/hierarchy/utils/getAncestors.d.ts +34 -0
  340. package/dist/hierarchy/utils/getAncestors.d.ts.map +1 -0
  341. package/dist/hierarchy/utils/getAncestors.js +94 -0
  342. package/dist/hierarchy/utils/getAncestors.js.map +1 -0
  343. package/dist/hierarchy/utils/getLocalizedValue.d.ts +30 -0
  344. package/dist/hierarchy/utils/getLocalizedValue.d.ts.map +1 -0
  345. package/dist/hierarchy/utils/getLocalizedValue.js +46 -0
  346. package/dist/hierarchy/utils/getLocalizedValue.js.map +1 -0
  347. package/dist/hierarchy/utils/getLocalizedValue.spec.js +250 -0
  348. package/dist/hierarchy/utils/getLocalizedValue.spec.js.map +1 -0
  349. package/dist/index.bundled.d.ts +1017 -672
  350. package/dist/index.d.ts +32 -10
  351. package/dist/index.d.ts.map +1 -1
  352. package/dist/index.js +13 -8
  353. package/dist/index.js.map +1 -1
  354. package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
  355. package/dist/locked-documents/config.d.ts.map +1 -1
  356. package/dist/preferences/config.d.ts.map +1 -1
  357. package/dist/preferences/deleteUserPreferences.d.ts.map +1 -1
  358. package/dist/preferences/keys.d.ts +8 -4
  359. package/dist/preferences/keys.d.ts.map +1 -1
  360. package/dist/preferences/keys.js +7 -4
  361. package/dist/preferences/keys.js.map +1 -1
  362. package/dist/preferences/types.d.ts +1 -1
  363. package/dist/preferences/types.d.ts.map +1 -1
  364. package/dist/preferences/types.js.map +1 -1
  365. package/dist/query-presets/access.d.ts.map +1 -1
  366. package/dist/query-presets/config.d.ts.map +1 -1
  367. package/dist/query-presets/config.js +11 -7
  368. package/dist/query-presets/config.js.map +1 -1
  369. package/dist/query-presets/constraints.d.ts.map +1 -1
  370. package/dist/query-presets/constraints.js +1 -1
  371. package/dist/query-presets/constraints.js.map +1 -1
  372. package/dist/queues/config/generateJobsJSONSchemas.d.ts +1 -1
  373. package/dist/queues/config/generateJobsJSONSchemas.d.ts.map +1 -1
  374. package/dist/queues/config/generateJobsJSONSchemas.js +31 -10
  375. package/dist/queues/config/generateJobsJSONSchemas.js.map +1 -1
  376. package/dist/queues/config/types/index.d.ts +0 -21
  377. package/dist/queues/config/types/index.d.ts.map +1 -1
  378. package/dist/queues/config/types/index.js.map +1 -1
  379. package/dist/queues/config/types/taskTypes.d.ts +0 -20
  380. package/dist/queues/config/types/taskTypes.d.ts.map +1 -1
  381. package/dist/queues/config/types/taskTypes.js.map +1 -1
  382. package/dist/queues/endpoints/run.d.ts.map +1 -1
  383. package/dist/queues/errors/handleWorkflowError.d.ts.map +1 -1
  384. package/dist/queues/errors/handleWorkflowError.js +9 -1
  385. package/dist/queues/errors/handleWorkflowError.js.map +1 -1
  386. package/dist/queues/localAPI.d.ts.map +1 -1
  387. package/dist/queues/localAPI.js +26 -67
  388. package/dist/queues/localAPI.js.map +1 -1
  389. package/dist/queues/operations/handleSchedules/getQueuesWithSchedules.d.ts.map +1 -1
  390. package/dist/queues/operations/handleSchedules/index.d.ts.map +1 -1
  391. package/dist/queues/operations/handleSchedules/index.js +1 -4
  392. package/dist/queues/operations/handleSchedules/index.js.map +1 -1
  393. package/dist/queues/operations/runJobs/index.d.ts.map +1 -1
  394. package/dist/queues/operations/runJobs/index.js +40 -37
  395. package/dist/queues/operations/runJobs/index.js.map +1 -1
  396. package/dist/queues/operations/runJobs/runJSONJob/index.d.ts.map +1 -1
  397. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.d.ts.map +1 -1
  398. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +3 -22
  399. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
  400. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts.map +1 -1
  401. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js +0 -2
  402. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js.map +1 -1
  403. package/dist/queues/operations/runJobs/runJob/index.d.ts.map +1 -1
  404. package/dist/queues/utilities/getJobTaskStatus.d.ts.map +1 -1
  405. package/dist/queues/utilities/updateJob.d.ts +1 -3
  406. package/dist/queues/utilities/updateJob.d.ts.map +1 -1
  407. package/dist/queues/utilities/updateJob.js +2 -18
  408. package/dist/queues/utilities/updateJob.js.map +1 -1
  409. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  410. package/dist/types/index.d.ts +54 -5
  411. package/dist/types/index.d.ts.map +1 -1
  412. package/dist/types/index.js.map +1 -1
  413. package/dist/uploads/checkFileAccess.d.ts.map +1 -1
  414. package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
  415. package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
  416. package/dist/uploads/endpoints/getFileFromURL.d.ts.map +1 -1
  417. package/dist/uploads/endpoints/getFileFromURL.js +9 -5
  418. package/dist/uploads/endpoints/getFileFromURL.js.map +1 -1
  419. package/dist/uploads/fetchAPI-multipart/isEligibleRequest.d.ts.map +1 -1
  420. package/dist/uploads/fetchAPI-multipart/processNested.d.ts.map +1 -1
  421. package/dist/uploads/fetchAPI-multipart/utilities.d.ts.map +1 -1
  422. package/dist/uploads/fileExists.d.ts.map +1 -1
  423. package/dist/uploads/generateFileData.d.ts.map +1 -1
  424. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  425. package/dist/uploads/getBaseFields.js +24 -70
  426. package/dist/uploads/getBaseFields.js.map +1 -1
  427. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  428. package/dist/uploads/getFileByPath.d.ts.map +1 -1
  429. package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
  430. package/dist/uploads/getSafeFilename.d.ts +9 -4
  431. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  432. package/dist/uploads/getSafeFilename.js +5 -5
  433. package/dist/uploads/getSafeFilename.js.map +1 -1
  434. package/dist/uploads/image-resizing/createImageSize.d.ts.map +1 -1
  435. package/dist/uploads/image-resizing/generateImageSizeFilename.d.ts.map +1 -1
  436. package/dist/uploads/image-resizing/getImageResizeAction.d.ts.map +1 -1
  437. package/dist/uploads/image-resizing/parseFilename.d.ts.map +1 -1
  438. package/dist/uploads/image-resizing/sanitizeResizeConfig.d.ts.map +1 -1
  439. package/dist/uploads/mimeTypeValidator.d.ts.map +1 -1
  440. package/dist/uploads/safeFetch.d.ts +1 -1
  441. package/dist/uploads/safeFetch.d.ts.map +1 -1
  442. package/dist/uploads/saveBufferToFile.d.ts.map +1 -1
  443. package/dist/uploads/tempFile.d.ts.map +1 -1
  444. package/dist/uploads/types.d.ts +12 -29
  445. package/dist/uploads/types.d.ts.map +1 -1
  446. package/dist/uploads/types.js.map +1 -1
  447. package/dist/uploads/uploadFiles.d.ts.map +1 -1
  448. package/dist/utilities/addLocalesToRequest.d.ts.map +1 -1
  449. package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
  450. package/dist/utilities/appendDateTimezoneSelectFields.d.ts +13 -0
  451. package/dist/utilities/appendDateTimezoneSelectFields.d.ts.map +1 -0
  452. package/dist/utilities/appendDateTimezoneSelectFields.js +47 -0
  453. package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -0
  454. package/dist/utilities/appendNonTrashedFilter.d.ts.map +1 -1
  455. package/dist/utilities/appendUploadSelectFields.d.ts.map +1 -1
  456. package/dist/utilities/appendUploadSelectFields.js +3 -0
  457. package/dist/utilities/appendUploadSelectFields.js.map +1 -1
  458. package/dist/utilities/canAccessAdmin.d.ts.map +1 -1
  459. package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -1
  460. package/dist/utilities/configToJSONSchema.d.ts +34 -16
  461. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  462. package/dist/utilities/configToJSONSchema.js +127 -52
  463. package/dist/utilities/configToJSONSchema.js.map +1 -1
  464. package/dist/utilities/configToJSONSchema.spec.js +94 -65
  465. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  466. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  467. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  468. package/dist/utilities/dependencies/resolveFrom.d.ts.map +1 -1
  469. package/dist/utilities/escapeRegExp.d.ts.map +1 -1
  470. package/dist/utilities/extractID.d.ts.map +1 -1
  471. package/dist/utilities/extractID.js +1 -1
  472. package/dist/utilities/extractID.js.map +1 -1
  473. package/dist/utilities/flattenAllFields.d.ts.map +1 -1
  474. package/dist/utilities/formatAdminURL.d.ts +13 -2
  475. package/dist/utilities/formatAdminURL.d.ts.map +1 -1
  476. package/dist/utilities/formatAdminURL.js +3 -15
  477. package/dist/utilities/formatAdminURL.js.map +1 -1
  478. package/dist/utilities/formatAdminURL.spec.js +1 -90
  479. package/dist/utilities/formatAdminURL.spec.js.map +1 -1
  480. package/dist/utilities/formatErrors.d.ts.map +1 -1
  481. package/dist/utilities/formatLabels.d.ts.map +1 -1
  482. package/dist/utilities/getBestFitFromSizes.d.ts.map +1 -1
  483. package/dist/utilities/getBlockSelect.d.ts.map +1 -1
  484. package/dist/utilities/getDataByPath.d.ts.map +1 -1
  485. package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts.map +1 -1
  486. package/dist/utilities/getFieldByPath.d.ts.map +1 -1
  487. package/dist/utilities/getFieldPermissions.d.ts.map +1 -1
  488. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  489. package/dist/utilities/getRequestEntity.d.ts.map +1 -1
  490. package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
  491. package/dist/utilities/getRequestOrigin.d.ts.map +1 -1
  492. package/dist/utilities/getSafeRedirect.d.ts.map +1 -1
  493. package/dist/utilities/getSelectMode.d.ts.map +1 -1
  494. package/dist/utilities/getSiblingData.d.ts.map +1 -1
  495. package/dist/utilities/getTranslatedLabel.d.ts.map +1 -1
  496. package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
  497. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  498. package/dist/utilities/handleEndpoints.js +2 -6
  499. package/dist/utilities/handleEndpoints.js.map +1 -1
  500. package/dist/utilities/headersWithCors.d.ts.map +1 -1
  501. package/dist/utilities/isEntityHidden.d.ts.map +1 -1
  502. package/dist/utilities/isURLAllowed.d.ts.map +1 -1
  503. package/dist/utilities/isValidID.d.ts.map +1 -1
  504. package/dist/utilities/logError.d.ts.map +1 -1
  505. package/dist/utilities/logger.d.ts.map +1 -1
  506. package/dist/utilities/mergeHeaders.d.ts.map +1 -1
  507. package/dist/utilities/mergeListSearchAndWhere.d.ts.map +1 -1
  508. package/dist/utilities/optionsAreEqual.d.ts.map +1 -1
  509. package/dist/utilities/parseBooleanString.d.ts.map +1 -1
  510. package/dist/utilities/parseCookies.d.ts.map +1 -1
  511. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  512. package/dist/utilities/profiling.d.ts.map +1 -1
  513. package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -1
  514. package/dist/utilities/resolveSelect.d.ts +16 -0
  515. package/dist/utilities/resolveSelect.d.ts.map +1 -0
  516. package/dist/utilities/resolveSelect.js +19 -0
  517. package/dist/utilities/resolveSelect.js.map +1 -0
  518. package/dist/utilities/routeError.d.ts.map +1 -1
  519. package/dist/utilities/sanitizeFallbackLocale.d.ts.map +1 -1
  520. package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
  521. package/dist/utilities/sanitizeJoinParams.d.ts.map +1 -1
  522. package/dist/utilities/sanitizePopulateParam.d.ts.map +1 -1
  523. package/dist/utilities/sanitizeSelect.d.ts +1 -2
  524. package/dist/utilities/sanitizeSelect.d.ts.map +1 -1
  525. package/dist/utilities/sanitizeSelect.js +19 -25
  526. package/dist/utilities/sanitizeSelect.js.map +1 -1
  527. package/dist/utilities/sanitizeSelectParam.d.ts.map +1 -1
  528. package/dist/utilities/sanitizeSortParams.d.ts.map +1 -1
  529. package/dist/utilities/setsAreEqual.d.ts.map +1 -1
  530. package/dist/utilities/slugify.d.ts.map +1 -1
  531. package/dist/utilities/stripUnselectedFields.d.ts.map +1 -1
  532. package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
  533. package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
  534. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  535. package/dist/utilities/telemetry/oneWayHash.d.ts.map +1 -1
  536. package/dist/utilities/timestamp.d.ts.map +1 -1
  537. package/dist/utilities/toKebabCase.d.ts.map +1 -1
  538. package/dist/utilities/transformColumnPreferences.d.ts.map +1 -1
  539. package/dist/utilities/transformWhereQuery.d.ts.map +1 -1
  540. package/dist/utilities/traverseFields.d.ts.map +1 -1
  541. package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
  542. package/dist/utilities/unflatten.d.ts.map +1 -1
  543. package/dist/utilities/validateMimeType.d.ts.map +1 -1
  544. package/dist/utilities/validateTimezones.d.ts.map +1 -1
  545. package/dist/utilities/validateWhereQuery.d.ts.map +1 -1
  546. package/dist/utilities/wordBoundariesRegex.d.ts.map +1 -1
  547. package/dist/utilities/wrapInternalEndpoints.d.ts.map +1 -1
  548. package/dist/versions/baseFields.d.ts.map +1 -1
  549. package/dist/versions/baseFields.js +3 -2
  550. package/dist/versions/baseFields.js.map +1 -1
  551. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  552. package/dist/versions/buildCollectionFields.js +0 -1
  553. package/dist/versions/buildCollectionFields.js.map +1 -1
  554. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  555. package/dist/versions/buildGlobalFields.js +0 -1
  556. package/dist/versions/buildGlobalFields.js.map +1 -1
  557. package/dist/versions/buildVersionCompoundIndexes.d.ts.map +1 -1
  558. package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
  559. package/dist/versions/deleteScheduledPublishJobs.d.ts.map +1 -1
  560. package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
  561. package/dist/versions/drafts/getQueryDraftsSelect.d.ts.map +1 -1
  562. package/dist/versions/drafts/getQueryDraftsSort.d.ts.map +1 -1
  563. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  564. package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
  565. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  566. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  567. package/dist/versions/migrations/localizeStatus/shared.d.ts.map +1 -1
  568. package/dist/versions/payloadPackageList.d.ts.map +1 -1
  569. package/dist/versions/payloadPackageList.js +0 -1
  570. package/dist/versions/payloadPackageList.js.map +1 -1
  571. package/dist/versions/saveSnapshot.d.ts.map +1 -1
  572. package/dist/versions/schedule/job.d.ts.map +1 -1
  573. package/package.json +20 -20
  574. package/dist/admin/views/folderList.d.ts +0 -56
  575. package/dist/admin/views/folderList.d.ts.map +0 -1
  576. package/dist/admin/views/folderList.js +0 -3
  577. package/dist/admin/views/folderList.js.map +0 -1
  578. package/dist/folders/addFolderCollection.d.ts +0 -10
  579. package/dist/folders/addFolderCollection.d.ts.map +0 -1
  580. package/dist/folders/addFolderCollection.js +0 -26
  581. package/dist/folders/addFolderCollection.js.map +0 -1
  582. package/dist/folders/addFolderFieldToCollection.d.ts +0 -8
  583. package/dist/folders/addFolderFieldToCollection.d.ts.map +0 -1
  584. package/dist/folders/addFolderFieldToCollection.js +0 -20
  585. package/dist/folders/addFolderFieldToCollection.js.map +0 -1
  586. package/dist/folders/buildFolderField.d.ts +0 -8
  587. package/dist/folders/buildFolderField.d.ts.map +0 -1
  588. package/dist/folders/buildFolderField.js +0 -87
  589. package/dist/folders/buildFolderField.js.map +0 -1
  590. package/dist/folders/constants.d.ts +0 -3
  591. package/dist/folders/constants.d.ts.map +0 -1
  592. package/dist/folders/constants.js +0 -4
  593. package/dist/folders/constants.js.map +0 -1
  594. package/dist/folders/createFolderCollection.d.ts +0 -11
  595. package/dist/folders/createFolderCollection.d.ts.map +0 -1
  596. package/dist/folders/createFolderCollection.js +0 -115
  597. package/dist/folders/createFolderCollection.js.map +0 -1
  598. package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts +0 -8
  599. package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts.map +0 -1
  600. package/dist/folders/hooks/deleteSubfoldersAfterDelete.js +0 -15
  601. package/dist/folders/hooks/deleteSubfoldersAfterDelete.js.map +0 -1
  602. package/dist/folders/hooks/dissasociateAfterDelete.d.ts +0 -8
  603. package/dist/folders/hooks/dissasociateAfterDelete.d.ts.map +0 -1
  604. package/dist/folders/hooks/dissasociateAfterDelete.js +0 -20
  605. package/dist/folders/hooks/dissasociateAfterDelete.js.map +0 -1
  606. package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts +0 -5
  607. package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts.map +0 -1
  608. package/dist/folders/hooks/ensureSafeCollectionsChange.js +0 -107
  609. package/dist/folders/hooks/ensureSafeCollectionsChange.js.map +0 -1
  610. package/dist/folders/hooks/reparentChildFolder.d.ts +0 -24
  611. package/dist/folders/hooks/reparentChildFolder.d.ts.map +0 -1
  612. package/dist/folders/hooks/reparentChildFolder.js +0 -72
  613. package/dist/folders/hooks/reparentChildFolder.js.map +0 -1
  614. package/dist/folders/types.d.ts +0 -118
  615. package/dist/folders/types.d.ts.map +0 -1
  616. package/dist/folders/types.js +0 -3
  617. package/dist/folders/types.js.map +0 -1
  618. package/dist/folders/utils/buildFolderWhereConstraints.d.ts +0 -13
  619. package/dist/folders/utils/buildFolderWhereConstraints.d.ts.map +0 -1
  620. package/dist/folders/utils/buildFolderWhereConstraints.js +0 -45
  621. package/dist/folders/utils/buildFolderWhereConstraints.js.map +0 -1
  622. package/dist/folders/utils/formatFolderOrDocumentItem.d.ts +0 -12
  623. package/dist/folders/utils/formatFolderOrDocumentItem.d.ts.map +0 -1
  624. package/dist/folders/utils/formatFolderOrDocumentItem.js +0 -30
  625. package/dist/folders/utils/formatFolderOrDocumentItem.js.map +0 -1
  626. package/dist/folders/utils/getFolderBreadcrumbs.d.ts +0 -14
  627. package/dist/folders/utils/getFolderBreadcrumbs.d.ts.map +0 -1
  628. package/dist/folders/utils/getFolderBreadcrumbs.js +0 -45
  629. package/dist/folders/utils/getFolderBreadcrumbs.js.map +0 -1
  630. package/dist/folders/utils/getFolderData.d.ts +0 -33
  631. package/dist/folders/utils/getFolderData.d.ts.map +0 -1
  632. package/dist/folders/utils/getFolderData.js +0 -88
  633. package/dist/folders/utils/getFolderData.js.map +0 -1
  634. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts +0 -24
  635. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts.map +0 -1
  636. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js +0 -66
  637. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js.map +0 -1
  638. package/dist/folders/utils/getOrphanedDocs.d.ts +0 -15
  639. package/dist/folders/utils/getOrphanedDocs.d.ts.map +0 -1
  640. package/dist/folders/utils/getOrphanedDocs.js +0 -40
  641. package/dist/folders/utils/getOrphanedDocs.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/config/defaults.ts"],"sourcesContent":["import type { IncomingAuthType, LoginWithUsernameOptions } from '../../auth/types.js'\nimport type { CollectionConfig } from './types.js'\n\nimport { defaultAccess } from '../../auth/defaultAccess.js'\n\n/**\n * @deprecated - remove in 4.0. This is error-prone, as mutating this object will affect any objects that use the defaults as a base.\n */\nexport const defaults: Partial<CollectionConfig> = {\n access: {\n create: defaultAccess,\n delete: defaultAccess,\n read: defaultAccess,\n unlock: defaultAccess,\n update: defaultAccess,\n },\n admin: {\n components: {},\n custom: {},\n enableRichTextLink: true,\n enableRichTextRelationship: true,\n pagination: {\n defaultLimit: 10,\n limits: [5, 10, 25, 50, 100],\n },\n useAsTitle: 'id',\n },\n auth: false,\n custom: {},\n endpoints: [],\n fields: [],\n hooks: {\n afterChange: [],\n afterDelete: [],\n afterForgotPassword: [],\n afterLogin: [],\n afterLogout: [],\n afterMe: [],\n afterOperation: [],\n afterRead: [],\n afterRefresh: [],\n beforeChange: [],\n beforeDelete: [],\n beforeLogin: [],\n beforeOperation: [],\n beforeRead: [],\n beforeValidate: [],\n me: [],\n refresh: [],\n },\n indexes: [],\n timestamps: true,\n upload: false,\n versions: false,\n}\n\nexport const addDefaultsToCollectionConfig = (collection: CollectionConfig): CollectionConfig => {\n collection.access = {\n create: defaultAccess,\n delete: defaultAccess,\n read: defaultAccess,\n unlock: defaultAccess,\n update: defaultAccess,\n ...(collection.access || {}),\n }\n\n collection.admin = {\n components: {},\n custom: {},\n enableRichTextLink: true,\n enableRichTextRelationship: true,\n useAsTitle: 'id',\n ...(collection.admin || {}),\n pagination: {\n defaultLimit: 10,\n limits: [5, 10, 25, 50, 100],\n ...(collection.admin?.pagination || {}),\n },\n }\n\n collection.auth = collection.auth ?? false\n collection.custom = collection.custom ?? {}\n collection.endpoints = collection.endpoints ?? []\n collection.fields = collection.fields ?? []\n collection.folders = collection.folders ?? false\n\n collection.hooks = {\n afterChange: [],\n afterDelete: [],\n afterForgotPassword: [],\n afterLogin: [],\n afterLogout: [],\n afterMe: [],\n afterOperation: [],\n afterRead: [],\n afterRefresh: [],\n beforeChange: [],\n beforeDelete: [],\n beforeLogin: [],\n beforeOperation: [],\n beforeRead: [],\n beforeValidate: [],\n me: [],\n refresh: [],\n ...(collection.hooks || {}),\n }\n\n collection.timestamps = collection.timestamps ?? true\n collection.upload = collection.upload ?? false\n collection.versions = collection.versions ?? false\n\n collection.indexes = collection.indexes ?? []\n\n return collection\n}\n\n/**\n * @deprecated - remove in 4.0. This is error-prone, as mutating this object will affect any objects that use the defaults as a base.\n */\nexport const authDefaults: IncomingAuthType = {\n cookies: {\n sameSite: 'Lax',\n secure: false,\n },\n forgotPassword: {},\n lockTime: 600000, // 10 minutes\n loginWithUsername: false,\n maxLoginAttempts: 5,\n tokenExpiration: 7200,\n useSessions: true,\n verify: false,\n}\n\nexport const addDefaultsToAuthConfig = (auth: IncomingAuthType): IncomingAuthType => {\n auth.cookies = {\n sameSite: 'Lax',\n secure: false,\n ...(auth.cookies || {}),\n }\n\n auth.forgotPassword = auth.forgotPassword ?? {}\n auth.lockTime = auth.lockTime ?? 600000 // 10 minutes\n auth.loginWithUsername = auth.loginWithUsername ?? false\n auth.maxLoginAttempts = auth.maxLoginAttempts ?? 5\n auth.tokenExpiration = auth.tokenExpiration ?? 7200\n auth.useSessions = auth.useSessions ?? true\n auth.verify = auth.verify ?? false\n auth.strategies = auth.strategies ?? []\n\n if (!auth.disableLocalStrategy && auth.verify === true) {\n auth.verify = {}\n }\n\n return auth\n}\n\n/**\n * @deprecated - remove in 4.0. This is error-prone, as mutating this object will affect any objects that use the defaults as a base.\n */\nexport const loginWithUsernameDefaults: LoginWithUsernameOptions = {\n allowEmailLogin: false,\n requireEmail: false,\n requireUsername: true,\n}\n\nexport const addDefaultsToLoginWithUsernameConfig = (\n loginWithUsername: LoginWithUsernameOptions,\n): LoginWithUsernameOptions =>\n ({\n allowEmailLogin: false,\n requireEmail: false,\n requireUsername: true,\n ...(loginWithUsername || {}),\n }) as LoginWithUsernameOptions\n"],"names":["defaultAccess","defaults","access","create","delete","read","unlock","update","admin","components","custom","enableRichTextLink","enableRichTextRelationship","pagination","defaultLimit","limits","useAsTitle","auth","endpoints","fields","hooks","afterChange","afterDelete","afterForgotPassword","afterLogin","afterLogout","afterMe","afterOperation","afterRead","afterRefresh","beforeChange","beforeDelete","beforeLogin","beforeOperation","beforeRead","beforeValidate","me","refresh","indexes","timestamps","upload","versions","addDefaultsToCollectionConfig","collection","folders","authDefaults","cookies","sameSite","secure","forgotPassword","lockTime","loginWithUsername","maxLoginAttempts","tokenExpiration","useSessions","verify","addDefaultsToAuthConfig","strategies","disableLocalStrategy","loginWithUsernameDefaults","allowEmailLogin","requireEmail","requireUsername","addDefaultsToLoginWithUsernameConfig"],"mappings":"AAGA,SAASA,aAAa,QAAQ,8BAA6B;AAE3D;;CAEC,GACD,OAAO,MAAMC,WAAsC;IACjDC,QAAQ;QACNC,QAAQH;QACRI,QAAQJ;QACRK,MAAML;QACNM,QAAQN;QACRO,QAAQP;IACV;IACAQ,OAAO;QACLC,YAAY,CAAC;QACbC,QAAQ,CAAC;QACTC,oBAAoB;QACpBC,4BAA4B;QAC5BC,YAAY;YACVC,cAAc;YACdC,QAAQ;gBAAC;gBAAG;gBAAI;gBAAI;gBAAI;aAAI;QAC9B;QACAC,YAAY;IACd;IACAC,MAAM;IACNP,QAAQ,CAAC;IACTQ,WAAW,EAAE;IACbC,QAAQ,EAAE;IACVC,OAAO;QACLC,aAAa,EAAE;QACfC,aAAa,EAAE;QACfC,qBAAqB,EAAE;QACvBC,YAAY,EAAE;QACdC,aAAa,EAAE;QACfC,SAAS,EAAE;QACXC,gBAAgB,EAAE;QAClBC,WAAW,EAAE;QACbC,cAAc,EAAE;QAChBC,cAAc,EAAE;QAChBC,cAAc,EAAE;QAChBC,aAAa,EAAE;QACfC,iBAAiB,EAAE;QACnBC,YAAY,EAAE;QACdC,gBAAgB,EAAE;QAClBC,IAAI,EAAE;QACNC,SAAS,EAAE;IACb;IACAC,SAAS,EAAE;IACXC,YAAY;IACZC,QAAQ;IACRC,UAAU;AACZ,EAAC;AAED,OAAO,MAAMC,gCAAgC,CAACC;IAC5CA,WAAWzC,MAAM,GAAG;QAClBC,QAAQH;QACRI,QAAQJ;QACRK,MAAML;QACNM,QAAQN;QACRO,QAAQP;QACR,GAAI2C,WAAWzC,MAAM,IAAI,CAAC,CAAC;IAC7B;IAEAyC,WAAWnC,KAAK,GAAG;QACjBC,YAAY,CAAC;QACbC,QAAQ,CAAC;QACTC,oBAAoB;QACpBC,4BAA4B;QAC5BI,YAAY;QACZ,GAAI2B,WAAWnC,KAAK,IAAI,CAAC,CAAC;QAC1BK,YAAY;YACVC,cAAc;YACdC,QAAQ;gBAAC;gBAAG;gBAAI;gBAAI;gBAAI;aAAI;YAC5B,GAAI4B,WAAWnC,KAAK,EAAEK,cAAc,CAAC,CAAC;QACxC;IACF;IAEA8B,WAAW1B,IAAI,GAAG0B,WAAW1B,IAAI,IAAI;IACrC0B,WAAWjC,MAAM,GAAGiC,WAAWjC,MAAM,IAAI,CAAC;IAC1CiC,WAAWzB,SAAS,GAAGyB,WAAWzB,SAAS,IAAI,EAAE;IACjDyB,WAAWxB,MAAM,GAAGwB,WAAWxB,MAAM,IAAI,EAAE;IAC3CwB,WAAWC,OAAO,GAAGD,WAAWC,OAAO,IAAI;IAE3CD,WAAWvB,KAAK,GAAG;QACjBC,aAAa,EAAE;QACfC,aAAa,EAAE;QACfC,qBAAqB,EAAE;QACvBC,YAAY,EAAE;QACdC,aAAa,EAAE;QACfC,SAAS,EAAE;QACXC,gBAAgB,EAAE;QAClBC,WAAW,EAAE;QACbC,cAAc,EAAE;QAChBC,cAAc,EAAE;QAChBC,cAAc,EAAE;QAChBC,aAAa,EAAE;QACfC,iBAAiB,EAAE;QACnBC,YAAY,EAAE;QACdC,gBAAgB,EAAE;QAClBC,IAAI,EAAE;QACNC,SAAS,EAAE;QACX,GAAIM,WAAWvB,KAAK,IAAI,CAAC,CAAC;IAC5B;IAEAuB,WAAWJ,UAAU,GAAGI,WAAWJ,UAAU,IAAI;IACjDI,WAAWH,MAAM,GAAGG,WAAWH,MAAM,IAAI;IACzCG,WAAWF,QAAQ,GAAGE,WAAWF,QAAQ,IAAI;IAE7CE,WAAWL,OAAO,GAAGK,WAAWL,OAAO,IAAI,EAAE;IAE7C,OAAOK;AACT,EAAC;AAED;;CAEC,GACD,OAAO,MAAME,eAAiC;IAC5CC,SAAS;QACPC,UAAU;QACVC,QAAQ;IACV;IACAC,gBAAgB,CAAC;IACjBC,UAAU;IACVC,mBAAmB;IACnBC,kBAAkB;IAClBC,iBAAiB;IACjBC,aAAa;IACbC,QAAQ;AACV,EAAC;AAED,OAAO,MAAMC,0BAA0B,CAACvC;IACtCA,KAAK6B,OAAO,GAAG;QACbC,UAAU;QACVC,QAAQ;QACR,GAAI/B,KAAK6B,OAAO,IAAI,CAAC,CAAC;IACxB;IAEA7B,KAAKgC,cAAc,GAAGhC,KAAKgC,cAAc,IAAI,CAAC;IAC9ChC,KAAKiC,QAAQ,GAAGjC,KAAKiC,QAAQ,IAAI,QAAO,aAAa;IACrDjC,KAAKkC,iBAAiB,GAAGlC,KAAKkC,iBAAiB,IAAI;IACnDlC,KAAKmC,gBAAgB,GAAGnC,KAAKmC,gBAAgB,IAAI;IACjDnC,KAAKoC,eAAe,GAAGpC,KAAKoC,eAAe,IAAI;IAC/CpC,KAAKqC,WAAW,GAAGrC,KAAKqC,WAAW,IAAI;IACvCrC,KAAKsC,MAAM,GAAGtC,KAAKsC,MAAM,IAAI;IAC7BtC,KAAKwC,UAAU,GAAGxC,KAAKwC,UAAU,IAAI,EAAE;IAEvC,IAAI,CAACxC,KAAKyC,oBAAoB,IAAIzC,KAAKsC,MAAM,KAAK,MAAM;QACtDtC,KAAKsC,MAAM,GAAG,CAAC;IACjB;IAEA,OAAOtC;AACT,EAAC;AAED;;CAEC,GACD,OAAO,MAAM0C,4BAAsD;IACjEC,iBAAiB;IACjBC,cAAc;IACdC,iBAAiB;AACnB,EAAC;AAED,OAAO,MAAMC,uCAAuC,CAClDZ,oBAEC,CAAA;QACCS,iBAAiB;QACjBC,cAAc;QACdC,iBAAiB;QACjB,GAAIX,qBAAqB,CAAC,CAAC;IAC7B,CAAA,EAA8B"}
1
+ {"version":3,"sources":["../../../src/collections/config/defaults.ts"],"sourcesContent":["import type { IncomingAuthType, LoginWithUsernameOptions } from '../../auth/types.js'\nimport type { CollectionConfig } from './types.js'\n\nimport { defaultAccess } from '../../auth/defaultAccess.js'\n\n/**\n * @deprecated - remove in 4.0. This is error-prone, as mutating this object will affect any objects that use the defaults as a base.\n */\nexport const defaults: Partial<CollectionConfig> = {\n access: {\n create: defaultAccess,\n delete: defaultAccess,\n read: defaultAccess,\n unlock: defaultAccess,\n update: defaultAccess,\n },\n admin: {\n components: {},\n custom: {},\n enableRichTextLink: true,\n enableRichTextRelationship: true,\n pagination: {\n defaultLimit: 10,\n limits: [5, 10, 25, 50, 100],\n },\n useAsTitle: 'id',\n },\n auth: false,\n custom: {},\n endpoints: [],\n fields: [],\n hooks: {\n afterChange: [],\n afterDelete: [],\n afterForgotPassword: [],\n afterLogin: [],\n afterLogout: [],\n afterMe: [],\n afterOperation: [],\n afterRead: [],\n afterRefresh: [],\n beforeChange: [],\n beforeDelete: [],\n beforeLogin: [],\n beforeOperation: [],\n beforeRead: [],\n beforeValidate: [],\n me: [],\n refresh: [],\n },\n indexes: [],\n timestamps: true,\n upload: false,\n versions: false,\n}\n\nexport const addDefaultsToCollectionConfig = (collection: CollectionConfig): CollectionConfig => {\n collection.access = {\n create: defaultAccess,\n delete: defaultAccess,\n read: defaultAccess,\n unlock: defaultAccess,\n update: defaultAccess,\n ...(collection.access || {}),\n }\n\n collection.admin = {\n components: {},\n custom: {},\n enableRichTextLink: true,\n enableRichTextRelationship: true,\n useAsTitle: 'id',\n ...(collection.admin || {}),\n pagination: {\n defaultLimit: 10,\n limits: [5, 10, 25, 50, 100],\n ...(collection.admin?.pagination || {}),\n },\n }\n\n collection.auth = collection.auth ?? false\n collection.custom = collection.custom ?? {}\n collection.endpoints = collection.endpoints ?? []\n collection.fields = collection.fields ?? []\n collection.hierarchy = collection.hierarchy ?? false\n\n collection.hooks = {\n afterChange: [],\n afterDelete: [],\n afterForgotPassword: [],\n afterLogin: [],\n afterLogout: [],\n afterMe: [],\n afterOperation: [],\n afterRead: [],\n afterRefresh: [],\n beforeChange: [],\n beforeDelete: [],\n beforeLogin: [],\n beforeOperation: [],\n beforeRead: [],\n beforeValidate: [],\n me: [],\n refresh: [],\n ...(collection.hooks || {}),\n }\n\n collection.timestamps = collection.timestamps ?? true\n collection.upload = collection.upload ?? false\n collection.versions = collection.versions ?? false\n\n collection.indexes = collection.indexes ?? []\n\n return collection\n}\n\n/**\n * @deprecated - remove in 4.0. This is error-prone, as mutating this object will affect any objects that use the defaults as a base.\n */\nexport const authDefaults: IncomingAuthType = {\n cookies: {\n sameSite: 'Lax',\n secure: false,\n },\n forgotPassword: {},\n lockTime: 600000, // 10 minutes\n loginWithUsername: false,\n maxLoginAttempts: 5,\n tokenExpiration: 7200,\n useSessions: true,\n verify: false,\n}\n\nexport const addDefaultsToAuthConfig = (auth: IncomingAuthType): IncomingAuthType => {\n auth.cookies = {\n sameSite: 'Lax',\n secure: false,\n ...(auth.cookies || {}),\n }\n\n auth.forgotPassword = auth.forgotPassword ?? {}\n auth.lockTime = auth.lockTime ?? 600000 // 10 minutes\n auth.loginWithUsername = auth.loginWithUsername ?? false\n auth.maxLoginAttempts = auth.maxLoginAttempts ?? 5\n auth.tokenExpiration = auth.tokenExpiration ?? 7200\n auth.useSessions = auth.useSessions ?? true\n auth.verify = auth.verify ?? false\n auth.strategies = auth.strategies ?? []\n\n if (!auth.disableLocalStrategy && auth.verify === true) {\n auth.verify = {}\n }\n\n return auth\n}\n\n/**\n * @deprecated - remove in 4.0. This is error-prone, as mutating this object will affect any objects that use the defaults as a base.\n */\nexport const loginWithUsernameDefaults: LoginWithUsernameOptions = {\n allowEmailLogin: false,\n requireEmail: false,\n requireUsername: true,\n}\n\nexport const addDefaultsToLoginWithUsernameConfig = (\n loginWithUsername: LoginWithUsernameOptions,\n): LoginWithUsernameOptions =>\n ({\n allowEmailLogin: false,\n requireEmail: false,\n requireUsername: true,\n ...(loginWithUsername || {}),\n }) as LoginWithUsernameOptions\n"],"names":["defaultAccess","defaults","access","create","delete","read","unlock","update","admin","components","custom","enableRichTextLink","enableRichTextRelationship","pagination","defaultLimit","limits","useAsTitle","auth","endpoints","fields","hooks","afterChange","afterDelete","afterForgotPassword","afterLogin","afterLogout","afterMe","afterOperation","afterRead","afterRefresh","beforeChange","beforeDelete","beforeLogin","beforeOperation","beforeRead","beforeValidate","me","refresh","indexes","timestamps","upload","versions","addDefaultsToCollectionConfig","collection","hierarchy","authDefaults","cookies","sameSite","secure","forgotPassword","lockTime","loginWithUsername","maxLoginAttempts","tokenExpiration","useSessions","verify","addDefaultsToAuthConfig","strategies","disableLocalStrategy","loginWithUsernameDefaults","allowEmailLogin","requireEmail","requireUsername","addDefaultsToLoginWithUsernameConfig"],"mappings":"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"}
@@ -6,5 +6,14 @@ import type { CollectionConfig, SanitizedCollectionConfig } from './types.js';
6
6
  * Views without `path` will never be matched by the router and are silently ignored.
7
7
  */
8
8
  export declare const warnOnInvalidCustomViews: (collection: CollectionConfig) => void;
9
- export declare const sanitizeCollection: (config: Config, collection: CollectionConfig, richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>, _validRelationships?: string[], orderableJoins?: OrderableJoinInfo[]) => Promise<SanitizedCollectionConfig>;
9
+ export declare const sanitizeCollection: (config: Config, collection: CollectionConfig,
10
+ /**
11
+ * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises
12
+ * so that you can sanitize them together, after the config has been sanitized.
13
+ */
14
+ richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>, _validRelationships?: string[],
15
+ /**
16
+ * Tracker for orderable join fields - populated during sanitization
17
+ */
18
+ orderableJoins?: OrderableJoinInfo[]) => Promise<SanitizedCollectionConfig>;
10
19
  //# sourceMappingURL=sanitize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/collections/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EAG1B,MAAM,YAAY,CAAA;AAyBnB;;;GAGG;AACH,eAAO,MAAM,wBAAwB,eAAgB,gBAAgB,KAAG,IAuBvE,CAAA;AAED,eAAO,MAAM,kBAAkB,WACrB,MAAM,cACF,gBAAgB,iCAKG,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,wBAC1D,MAAM,EAAE,mBAIb,iBAAiB,EAAE,KACnC,OAAO,CAAC,yBAAyB,CAmRnC,CAAA"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/collections/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,KAAK,EACV,gBAAgB,EAChB,yBAAyB,EAG1B,MAAM,YAAY,CAAA;AA2BnB;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,YAAY,gBAAgB,KAAG,IAuBvE,CAAA;AAED,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,MAAM,EACd,YAAY,gBAAgB;AAC5B;;;GAGG;AACH,+BAA+B,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,EAChF,sBAAsB,MAAM,EAAE;AAC9B;;GAEG;AACH,iBAAiB,iBAAiB,EAAE,KACnC,OAAO,CAAC,yBAAyB,CA0TnC,CAAA"}
@@ -4,6 +4,8 @@ import { TimestampsRequired } from '../../errors/TimestampsRequired.js';
4
4
  import { sanitizeFields } from '../../fields/config/sanitize.js';
5
5
  import { fieldAffectsData } from '../../fields/config/types.js';
6
6
  import { mergeBaseFields } from '../../fields/mergeBaseFields.js';
7
+ import { buildFoldersHierarchy, buildTagsHierarchy } from '../../hierarchy/presets.js';
8
+ import { sanitizeHierarchyCollection } from '../../hierarchy/sanitizeHierarchyCollection.js';
7
9
  import { uploadCollectionEndpoints } from '../../uploads/endpoints/index.js';
8
10
  import { getBaseUploadFields } from '../../uploads/getBaseFields.js';
9
11
  import { flattenAllFields } from '../../utilities/flattenAllFields.js';
@@ -52,6 +54,44 @@ export const sanitizeCollection = async (config, collection, /**
52
54
  // /////////////////////////////////
53
55
  const sanitized = addDefaultsToCollectionConfig(collection);
54
56
  // /////////////////////////////////
57
+ // Convert folders/tags to hierarchy
58
+ // /////////////////////////////////
59
+ const presetCount = [
60
+ sanitized.folders,
61
+ sanitized.tags,
62
+ sanitized.hierarchy
63
+ ].filter(Boolean).length;
64
+ if (presetCount > 1) {
65
+ throw new Error(`Collection "${sanitized.slug}": Only one of 'folders', 'tags', or 'hierarchy' can be specified`);
66
+ }
67
+ if (sanitized.folders) {
68
+ sanitized.labels = {
69
+ plural: 'Folders',
70
+ singular: 'Folder',
71
+ ...sanitized.labels
72
+ };
73
+ sanitized.hierarchy = buildFoldersHierarchy(sanitized.folders, sanitized.slug);
74
+ // Set admin.group: false when sidebar tab enabled (folders accessed via tab)
75
+ const sidebarTabEnabled = typeof sanitized.hierarchy === 'object' && sanitized.hierarchy.admin?.injectSidebarTab !== false;
76
+ if (sidebarTabEnabled && sanitized.admin.group === undefined) {
77
+ sanitized.admin.group = false;
78
+ }
79
+ delete sanitized.folders;
80
+ }
81
+ if (sanitized.tags) {
82
+ sanitized.labels = {
83
+ plural: 'Tags',
84
+ singular: 'Tag',
85
+ ...sanitized.labels
86
+ };
87
+ sanitized.hierarchy = buildTagsHierarchy(sanitized.tags, sanitized.slug);
88
+ // Tags also hidden from nav by default
89
+ if (sanitized.admin.group === undefined) {
90
+ sanitized.admin.group = false;
91
+ }
92
+ delete sanitized.tags;
93
+ }
94
+ // /////////////////////////////////
55
95
  // Sanitize fields
56
96
  // /////////////////////////////////
57
97
  const validRelationships = _validRelationships ?? config.collections.map((c)=>c.slug) ?? [];
@@ -111,7 +151,9 @@ export const sanitizeCollection = async (config, collection, /**
111
151
  name: 'updatedAt',
112
152
  type: 'date',
113
153
  admin: {
114
- disableBulkEdit: true,
154
+ disabled: {
155
+ bulkEdit: true
156
+ },
115
157
  hidden: true
116
158
  },
117
159
  index: true,
@@ -122,7 +164,9 @@ export const sanitizeCollection = async (config, collection, /**
122
164
  sanitized.fields.push({
123
165
  name: 'createdAt',
124
166
  admin: {
125
- disableBulkEdit: true,
167
+ disabled: {
168
+ bulkEdit: true
169
+ },
126
170
  hidden: true
127
171
  },
128
172
  // The default sort for list view is createdAt. Thus, enabling indexing by default, is a major performance improvement, especially for large or a large amount of collections.
@@ -136,7 +180,9 @@ export const sanitizeCollection = async (config, collection, /**
136
180
  name: 'deletedAt',
137
181
  type: 'date',
138
182
  admin: {
139
- disableBulkEdit: true,
183
+ disabled: {
184
+ bulkEdit: true
185
+ },
140
186
  hidden: true
141
187
  },
142
188
  index: true,
@@ -193,13 +239,8 @@ export const sanitizeCollection = async (config, collection, /**
193
239
  } else {
194
240
  delete sanitized.versions;
195
241
  }
196
- if (sanitized.folders === true) {
197
- sanitized.folders = {
198
- browseByFolder: true
199
- };
200
- } else if (sanitized.folders) {
201
- sanitized.folders.browseByFolder = sanitized.folders.browseByFolder ?? true;
202
- }
242
+ // Sanitize hierarchy configuration (phase 1 - per collection)
243
+ sanitizeHierarchyCollection(sanitized, config);
203
244
  if (sanitized.upload) {
204
245
  if (sanitized.upload === true) {
205
246
  sanitized.upload = {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/config/sanitize.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { OrderableJoinInfo } from '../../fields/config/sanitizeJoinField.js'\nimport type {\n CollectionConfig,\n SanitizedCollectionConfig,\n SanitizedJoin,\n SanitizedJoins,\n} from './types.js'\n\nimport { authCollectionEndpoints } from '../../auth/endpoints/index.js'\nimport { getBaseAuthFields } from '../../auth/getAuthFields.js'\nimport { TimestampsRequired } from '../../errors/TimestampsRequired.js'\nimport { sanitizeFields } from '../../fields/config/sanitize.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { mergeBaseFields } from '../../fields/mergeBaseFields.js'\nimport { uploadCollectionEndpoints } from '../../uploads/endpoints/index.js'\nimport { getBaseUploadFields } from '../../uploads/getBaseFields.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { formatLabels } from '../../utilities/formatLabels.js'\nimport { miniChalk } from '../../utilities/miniChalk.js'\nimport { traverseForLocalizedFields } from '../../utilities/traverseForLocalizedFields.js'\nimport { baseVersionFields } from '../../versions/baseFields.js'\nimport { versionDefaults } from '../../versions/defaults.js'\nimport { defaultCollectionEndpoints } from '../endpoints/index.js'\nimport {\n addDefaultsToAuthConfig,\n addDefaultsToCollectionConfig,\n addDefaultsToLoginWithUsernameConfig,\n} from './defaults.js'\nimport { sanitizeCompoundIndexes } from './sanitizeCompoundIndexes.js'\nimport { validateUseAsTitle } from './useAsTitle.js'\n\n/**\n * Warns at startup when custom collection views are misconfigured with a missing `path`.\n * Views without `path` will never be matched by the router and are silently ignored.\n */\nexport const warnOnInvalidCustomViews = (collection: CollectionConfig): void => {\n const views = collection.admin?.components?.views\n if (!views || typeof views !== 'object') {\n return\n }\n\n for (const [key, view] of Object.entries(views)) {\n if (key === 'edit' || key === 'list') {\n continue\n }\n\n if (view && typeof view === 'object' && 'Component' in view && !('path' in view)) {\n console.warn(\n `[Payload] Custom collection view \"${key}\" in collection \"${collection.slug}\" is missing a \"path\" property. The view will never be rendered.`,\n )\n }\n\n if (view && typeof view === 'object' && 'path' in view && !('Component' in view)) {\n console.warn(\n `[Payload] Custom collection view \"${key}\" in collection \"${collection.slug}\" has a \"path\" but is missing a \"Component\". The view will never be rendered.`,\n )\n }\n }\n}\n\nexport const sanitizeCollection = async (\n config: Config,\n collection: CollectionConfig,\n /**\n * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises\n * so that you can sanitize them together, after the config has been sanitized.\n */\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>,\n _validRelationships?: string[],\n /**\n * Tracker for orderable join fields - populated during sanitization\n */\n orderableJoins?: OrderableJoinInfo[],\n): Promise<SanitizedCollectionConfig> => {\n if (collection._sanitized) {\n return collection as SanitizedCollectionConfig\n }\n\n collection._sanitized = true\n\n warnOnInvalidCustomViews(collection)\n\n // /////////////////////////////////\n // Make copy of collection config\n // /////////////////////////////////\n\n const sanitized: CollectionConfig = addDefaultsToCollectionConfig(collection)\n\n // /////////////////////////////////\n // Sanitize fields\n // /////////////////////////////////\n\n const validRelationships = _validRelationships ?? config.collections!.map((c) => c.slug) ?? []\n\n const joins: SanitizedJoins = {}\n\n const polymorphicJoins: SanitizedJoin[] = []\n\n sanitized.fields = await sanitizeFields({\n collectionConfig: sanitized,\n config,\n fields: sanitized.fields,\n joinPath: '',\n joins,\n orderableJoins,\n parentIsLocalized: false,\n polymorphicJoins,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n if (sanitized.endpoints !== false) {\n if (!sanitized.endpoints) {\n sanitized.endpoints = []\n }\n\n if (sanitized.auth) {\n for (const endpoint of authCollectionEndpoints) {\n sanitized.endpoints.push(endpoint)\n }\n }\n\n if (sanitized.upload) {\n for (const endpoint of uploadCollectionEndpoints) {\n sanitized.endpoints.push(endpoint)\n }\n }\n\n for (const endpoint of defaultCollectionEndpoints) {\n sanitized.endpoints.push(endpoint)\n }\n }\n\n if (sanitized.timestamps !== false) {\n // add default timestamps fields only as needed\n let hasUpdatedAt: boolean | null = null\n let hasCreatedAt: boolean | null = null\n let hasDeletedAt: boolean | null = null\n\n sanitized.fields.some((field) => {\n if (fieldAffectsData(field)) {\n if (field.name === 'updatedAt') {\n hasUpdatedAt = true\n }\n\n if (field.name === 'createdAt') {\n hasCreatedAt = true\n }\n\n if (field.name === 'deletedAt') {\n hasDeletedAt = true\n }\n }\n\n return hasCreatedAt && hasUpdatedAt && (!sanitized.trash || hasDeletedAt)\n })\n\n if (!hasUpdatedAt) {\n sanitized.fields.push({\n name: 'updatedAt',\n type: 'date',\n admin: {\n disableBulkEdit: true,\n hidden: true,\n },\n index: true,\n label: ({ t }) => t('general:updatedAt'),\n })\n }\n\n if (!hasCreatedAt) {\n sanitized.fields.push({\n name: 'createdAt',\n admin: {\n disableBulkEdit: true,\n hidden: true,\n },\n // The default sort for list view is createdAt. Thus, enabling indexing by default, is a major performance improvement, especially for large or a large amount of collections.\n type: 'date',\n index: true,\n label: ({ t }) => t('general:createdAt'),\n })\n }\n\n if (sanitized.trash && !hasDeletedAt) {\n sanitized.fields.push({\n name: 'deletedAt',\n type: 'date',\n admin: {\n disableBulkEdit: true,\n hidden: true,\n },\n index: true,\n label: ({ t }) => t('general:deletedAt'),\n })\n }\n }\n\n const defaultLabels = formatLabels(sanitized.slug)\n\n sanitized.labels = {\n plural: sanitized.labels?.plural || defaultLabels.plural,\n singular: sanitized.labels?.singular || defaultLabels.singular,\n }\n\n if (sanitized.versions) {\n if (sanitized.timestamps === false) {\n throw new TimestampsRequired(collection)\n }\n\n if (sanitized.versions === true) {\n sanitized.versions = {\n drafts: false,\n maxPerDoc: 100,\n }\n }\n\n sanitized.versions.maxPerDoc =\n typeof sanitized.versions.maxPerDoc === 'number' ? sanitized.versions.maxPerDoc : 100\n\n if (sanitized.versions.drafts) {\n if (sanitized.versions.drafts === true) {\n sanitized.versions.drafts = {\n autosave: false,\n validate: false,\n }\n }\n\n const hasLocalizedFields = traverseForLocalizedFields(sanitized.fields)\n\n if (config.localization) {\n if (hasLocalizedFields && sanitized.versions.drafts.localizeStatus === undefined) {\n sanitized.versions.drafts.localizeStatus = false\n }\n }\n\n // TODO v4: remove this sanitization check, should not need to enable the experimental flag\n if (sanitized.versions.drafts.localizeStatus && !config.experimental?.localizeStatus) {\n sanitized.versions.drafts.localizeStatus = false\n console.log(\n miniChalk.yellowBold(\n `Warning: \"localizeStatus\" for drafts is an experimental feature. To enable, set \"experimental.localizeStatus\" to true in your Payload config.`,\n ),\n )\n }\n\n if (sanitized.versions.drafts.autosave === true) {\n sanitized.versions.drafts.autosave = {\n interval: versionDefaults.autosaveInterval,\n }\n }\n\n if (sanitized.versions.drafts.validate === undefined) {\n sanitized.versions.drafts.validate = false\n }\n\n sanitized.fields = mergeBaseFields(\n sanitized.fields,\n baseVersionFields({\n localized: sanitized.versions.drafts.localizeStatus ?? false,\n }),\n )\n }\n } else {\n delete sanitized.versions\n }\n\n if (sanitized.folders === true) {\n sanitized.folders = {\n browseByFolder: true,\n }\n } else if (sanitized.folders) {\n sanitized.folders.browseByFolder = sanitized.folders.browseByFolder ?? true\n }\n\n if (sanitized.upload) {\n if (sanitized.upload === true) {\n sanitized.upload = {}\n }\n\n sanitized.upload.cacheTags = sanitized.upload?.cacheTags ?? true\n sanitized.upload.bulkUpload = sanitized.upload?.bulkUpload ?? true\n sanitized.upload.staticDir = sanitized.upload.staticDir || sanitized.slug\n sanitized.admin!.useAsTitle =\n sanitized.admin?.useAsTitle && sanitized.admin.useAsTitle !== 'id'\n ? sanitized.admin.useAsTitle\n : 'filename'\n\n const uploadFields = getBaseUploadFields({\n collection: sanitized,\n config,\n })\n\n sanitized.fields = mergeBaseFields(sanitized.fields, uploadFields)\n }\n\n if (sanitized.auth) {\n sanitized.auth = addDefaultsToAuthConfig(\n typeof sanitized.auth === 'boolean' ? {} : sanitized.auth,\n )\n\n // disable duplicate for auth enabled collections by default\n sanitized.disableDuplicate = sanitized.disableDuplicate ?? true\n\n if (sanitized.auth.loginWithUsername) {\n if (sanitized.auth.loginWithUsername === true) {\n sanitized.auth.loginWithUsername = addDefaultsToLoginWithUsernameConfig({})\n } else {\n const loginWithUsernameWithDefaults = addDefaultsToLoginWithUsernameConfig(\n sanitized.auth.loginWithUsername,\n )\n\n // if allowEmailLogin is false, requireUsername must be true\n if (loginWithUsernameWithDefaults.allowEmailLogin === false) {\n loginWithUsernameWithDefaults.requireUsername = true\n }\n sanitized.auth.loginWithUsername = loginWithUsernameWithDefaults\n }\n } else {\n sanitized.auth.loginWithUsername = false\n }\n\n if (!collection?.admin?.useAsTitle) {\n sanitized.admin!.useAsTitle = sanitized.auth.loginWithUsername ? 'username' : 'email'\n }\n\n sanitized.fields = mergeBaseFields(sanitized.fields, getBaseAuthFields(sanitized.auth))\n }\n\n if (collection?.admin?.pagination?.limits?.length) {\n sanitized.admin!.pagination!.limits = collection.admin.pagination.limits\n }\n\n validateUseAsTitle(sanitized)\n\n const sanitizedConfig = sanitized as SanitizedCollectionConfig\n\n sanitizedConfig.joins = joins\n sanitizedConfig.polymorphicJoins = polymorphicJoins\n\n sanitizedConfig.flattenedFields = flattenAllFields({ fields: sanitizedConfig.fields })\n\n sanitizedConfig.sanitizedIndexes = sanitizeCompoundIndexes({\n fields: sanitizedConfig.flattenedFields,\n indexes: sanitizedConfig.indexes,\n })\n\n return sanitizedConfig\n}\n"],"names":["authCollectionEndpoints","getBaseAuthFields","TimestampsRequired","sanitizeFields","fieldAffectsData","mergeBaseFields","uploadCollectionEndpoints","getBaseUploadFields","flattenAllFields","formatLabels","miniChalk","traverseForLocalizedFields","baseVersionFields","versionDefaults","defaultCollectionEndpoints","addDefaultsToAuthConfig","addDefaultsToCollectionConfig","addDefaultsToLoginWithUsernameConfig","sanitizeCompoundIndexes","validateUseAsTitle","warnOnInvalidCustomViews","collection","views","admin","components","key","view","Object","entries","console","warn","slug","sanitizeCollection","config","richTextSanitizationPromises","_validRelationships","orderableJoins","_sanitized","sanitized","validRelationships","collections","map","c","joins","polymorphicJoins","fields","collectionConfig","joinPath","parentIsLocalized","endpoints","auth","endpoint","push","upload","timestamps","hasUpdatedAt","hasCreatedAt","hasDeletedAt","some","field","name","trash","type","disableBulkEdit","hidden","index","label","t","defaultLabels","labels","plural","singular","versions","drafts","maxPerDoc","autosave","validate","hasLocalizedFields","localization","localizeStatus","undefined","experimental","log","yellowBold","interval","autosaveInterval","localized","folders","browseByFolder","cacheTags","bulkUpload","staticDir","useAsTitle","uploadFields","disableDuplicate","loginWithUsername","loginWithUsernameWithDefaults","allowEmailLogin","requireUsername","pagination","limits","length","sanitizedConfig","flattenedFields","sanitizedIndexes","indexes"],"mappings":"AASA,SAASA,uBAAuB,QAAQ,gCAA+B;AACvE,SAASC,iBAAiB,QAAQ,8BAA6B;AAC/D,SAASC,kBAAkB,QAAQ,qCAAoC;AACvE,SAASC,cAAc,QAAQ,kCAAiC;AAChE,SAASC,gBAAgB,QAAQ,+BAA8B;AAC/D,SAASC,eAAe,QAAQ,kCAAiC;AACjE,SAASC,yBAAyB,QAAQ,mCAAkC;AAC5E,SAASC,mBAAmB,QAAQ,iCAAgC;AACpE,SAASC,gBAAgB,QAAQ,sCAAqC;AACtE,SAASC,YAAY,QAAQ,kCAAiC;AAC9D,SAASC,SAAS,QAAQ,+BAA8B;AACxD,SAASC,0BAA0B,QAAQ,gDAA+C;AAC1F,SAASC,iBAAiB,QAAQ,+BAA8B;AAChE,SAASC,eAAe,QAAQ,6BAA4B;AAC5D,SAASC,0BAA0B,QAAQ,wBAAuB;AAClE,SACEC,uBAAuB,EACvBC,6BAA6B,EAC7BC,oCAAoC,QAC/B,gBAAe;AACtB,SAASC,uBAAuB,QAAQ,+BAA8B;AACtE,SAASC,kBAAkB,QAAQ,kBAAiB;AAEpD;;;CAGC,GACD,OAAO,MAAMC,2BAA2B,CAACC;IACvC,MAAMC,QAAQD,WAAWE,KAAK,EAAEC,YAAYF;IAC5C,IAAI,CAACA,SAAS,OAAOA,UAAU,UAAU;QACvC;IACF;IAEA,KAAK,MAAM,CAACG,KAAKC,KAAK,IAAIC,OAAOC,OAAO,CAACN,OAAQ;QAC/C,IAAIG,QAAQ,UAAUA,QAAQ,QAAQ;YACpC;QACF;QAEA,IAAIC,QAAQ,OAAOA,SAAS,YAAY,eAAeA,QAAQ,CAAE,CAAA,UAAUA,IAAG,GAAI;YAChFG,QAAQC,IAAI,CACV,CAAC,kCAAkC,EAAEL,IAAI,iBAAiB,EAAEJ,WAAWU,IAAI,CAAC,gEAAgE,CAAC;QAEjJ;QAEA,IAAIL,QAAQ,OAAOA,SAAS,YAAY,UAAUA,QAAQ,CAAE,CAAA,eAAeA,IAAG,GAAI;YAChFG,QAAQC,IAAI,CACV,CAAC,kCAAkC,EAAEL,IAAI,iBAAiB,EAAEJ,WAAWU,IAAI,CAAC,6EAA6E,CAAC;QAE9J;IACF;AACF,EAAC;AAED,OAAO,MAAMC,qBAAqB,OAChCC,QACAZ,YACA;;;GAGC,GACDa,8BACAC,qBACA;;GAEC,GACDC;IAEA,IAAIf,WAAWgB,UAAU,EAAE;QACzB,OAAOhB;IACT;IAEAA,WAAWgB,UAAU,GAAG;IAExBjB,yBAAyBC;IAEzB,oCAAoC;IACpC,iCAAiC;IACjC,oCAAoC;IAEpC,MAAMiB,YAA8BtB,8BAA8BK;IAElE,oCAAoC;IACpC,kBAAkB;IAClB,oCAAoC;IAEpC,MAAMkB,qBAAqBJ,uBAAuBF,OAAOO,WAAW,CAAEC,GAAG,CAAC,CAACC,IAAMA,EAAEX,IAAI,KAAK,EAAE;IAE9F,MAAMY,QAAwB,CAAC;IAE/B,MAAMC,mBAAoC,EAAE;IAE5CN,UAAUO,MAAM,GAAG,MAAM1C,eAAe;QACtC2C,kBAAkBR;QAClBL;QACAY,QAAQP,UAAUO,MAAM;QACxBE,UAAU;QACVJ;QACAP;QACAY,mBAAmB;QACnBJ;QACAV;QACAK;IACF;IAEA,IAAID,UAAUW,SAAS,KAAK,OAAO;QACjC,IAAI,CAACX,UAAUW,SAAS,EAAE;YACxBX,UAAUW,SAAS,GAAG,EAAE;QAC1B;QAEA,IAAIX,UAAUY,IAAI,EAAE;YAClB,KAAK,MAAMC,YAAYnD,wBAAyB;gBAC9CsC,UAAUW,SAAS,CAACG,IAAI,CAACD;YAC3B;QACF;QAEA,IAAIb,UAAUe,MAAM,EAAE;YACpB,KAAK,MAAMF,YAAY7C,0BAA2B;gBAChDgC,UAAUW,SAAS,CAACG,IAAI,CAACD;YAC3B;QACF;QAEA,KAAK,MAAMA,YAAYrC,2BAA4B;YACjDwB,UAAUW,SAAS,CAACG,IAAI,CAACD;QAC3B;IACF;IAEA,IAAIb,UAAUgB,UAAU,KAAK,OAAO;QAClC,+CAA+C;QAC/C,IAAIC,eAA+B;QACnC,IAAIC,eAA+B;QACnC,IAAIC,eAA+B;QAEnCnB,UAAUO,MAAM,CAACa,IAAI,CAAC,CAACC;YACrB,IAAIvD,iBAAiBuD,QAAQ;gBAC3B,IAAIA,MAAMC,IAAI,KAAK,aAAa;oBAC9BL,eAAe;gBACjB;gBAEA,IAAII,MAAMC,IAAI,KAAK,aAAa;oBAC9BJ,eAAe;gBACjB;gBAEA,IAAIG,MAAMC,IAAI,KAAK,aAAa;oBAC9BH,eAAe;gBACjB;YACF;YAEA,OAAOD,gBAAgBD,gBAAiB,CAAA,CAACjB,UAAUuB,KAAK,IAAIJ,YAAW;QACzE;QAEA,IAAI,CAACF,cAAc;YACjBjB,UAAUO,MAAM,CAACO,IAAI,CAAC;gBACpBQ,MAAM;gBACNE,MAAM;gBACNvC,OAAO;oBACLwC,iBAAiB;oBACjBC,QAAQ;gBACV;gBACAC,OAAO;gBACPC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;YACtB;QACF;QAEA,IAAI,CAACX,cAAc;YACjBlB,UAAUO,MAAM,CAACO,IAAI,CAAC;gBACpBQ,MAAM;gBACNrC,OAAO;oBACLwC,iBAAiB;oBACjBC,QAAQ;gBACV;gBACA,8KAA8K;gBAC9KF,MAAM;gBACNG,OAAO;gBACPC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;YACtB;QACF;QAEA,IAAI7B,UAAUuB,KAAK,IAAI,CAACJ,cAAc;YACpCnB,UAAUO,MAAM,CAACO,IAAI,CAAC;gBACpBQ,MAAM;gBACNE,MAAM;gBACNvC,OAAO;oBACLwC,iBAAiB;oBACjBC,QAAQ;gBACV;gBACAC,OAAO;gBACPC,OAAO,CAAC,EAAEC,CAAC,EAAE,GAAKA,EAAE;YACtB;QACF;IACF;IAEA,MAAMC,gBAAgB3D,aAAa6B,UAAUP,IAAI;IAEjDO,UAAU+B,MAAM,GAAG;QACjBC,QAAQhC,UAAU+B,MAAM,EAAEC,UAAUF,cAAcE,MAAM;QACxDC,UAAUjC,UAAU+B,MAAM,EAAEE,YAAYH,cAAcG,QAAQ;IAChE;IAEA,IAAIjC,UAAUkC,QAAQ,EAAE;QACtB,IAAIlC,UAAUgB,UAAU,KAAK,OAAO;YAClC,MAAM,IAAIpD,mBAAmBmB;QAC/B;QAEA,IAAIiB,UAAUkC,QAAQ,KAAK,MAAM;YAC/BlC,UAAUkC,QAAQ,GAAG;gBACnBC,QAAQ;gBACRC,WAAW;YACb;QACF;QAEApC,UAAUkC,QAAQ,CAACE,SAAS,GAC1B,OAAOpC,UAAUkC,QAAQ,CAACE,SAAS,KAAK,WAAWpC,UAAUkC,QAAQ,CAACE,SAAS,GAAG;QAEpF,IAAIpC,UAAUkC,QAAQ,CAACC,MAAM,EAAE;YAC7B,IAAInC,UAAUkC,QAAQ,CAACC,MAAM,KAAK,MAAM;gBACtCnC,UAAUkC,QAAQ,CAACC,MAAM,GAAG;oBAC1BE,UAAU;oBACVC,UAAU;gBACZ;YACF;YAEA,MAAMC,qBAAqBlE,2BAA2B2B,UAAUO,MAAM;YAEtE,IAAIZ,OAAO6C,YAAY,EAAE;gBACvB,IAAID,sBAAsBvC,UAAUkC,QAAQ,CAACC,MAAM,CAACM,cAAc,KAAKC,WAAW;oBAChF1C,UAAUkC,QAAQ,CAACC,MAAM,CAACM,cAAc,GAAG;gBAC7C;YACF;YAEA,2FAA2F;YAC3F,IAAIzC,UAAUkC,QAAQ,CAACC,MAAM,CAACM,cAAc,IAAI,CAAC9C,OAAOgD,YAAY,EAAEF,gBAAgB;gBACpFzC,UAAUkC,QAAQ,CAACC,MAAM,CAACM,cAAc,GAAG;gBAC3ClD,QAAQqD,GAAG,CACTxE,UAAUyE,UAAU,CAClB,CAAC,6IAA6I,CAAC;YAGrJ;YAEA,IAAI7C,UAAUkC,QAAQ,CAACC,MAAM,CAACE,QAAQ,KAAK,MAAM;gBAC/CrC,UAAUkC,QAAQ,CAACC,MAAM,CAACE,QAAQ,GAAG;oBACnCS,UAAUvE,gBAAgBwE,gBAAgB;gBAC5C;YACF;YAEA,IAAI/C,UAAUkC,QAAQ,CAACC,MAAM,CAACG,QAAQ,KAAKI,WAAW;gBACpD1C,UAAUkC,QAAQ,CAACC,MAAM,CAACG,QAAQ,GAAG;YACvC;YAEAtC,UAAUO,MAAM,GAAGxC,gBACjBiC,UAAUO,MAAM,EAChBjC,kBAAkB;gBAChB0E,WAAWhD,UAAUkC,QAAQ,CAACC,MAAM,CAACM,cAAc,IAAI;YACzD;QAEJ;IACF,OAAO;QACL,OAAOzC,UAAUkC,QAAQ;IAC3B;IAEA,IAAIlC,UAAUiD,OAAO,KAAK,MAAM;QAC9BjD,UAAUiD,OAAO,GAAG;YAClBC,gBAAgB;QAClB;IACF,OAAO,IAAIlD,UAAUiD,OAAO,EAAE;QAC5BjD,UAAUiD,OAAO,CAACC,cAAc,GAAGlD,UAAUiD,OAAO,CAACC,cAAc,IAAI;IACzE;IAEA,IAAIlD,UAAUe,MAAM,EAAE;QACpB,IAAIf,UAAUe,MAAM,KAAK,MAAM;YAC7Bf,UAAUe,MAAM,GAAG,CAAC;QACtB;QAEAf,UAAUe,MAAM,CAACoC,SAAS,GAAGnD,UAAUe,MAAM,EAAEoC,aAAa;QAC5DnD,UAAUe,MAAM,CAACqC,UAAU,GAAGpD,UAAUe,MAAM,EAAEqC,cAAc;QAC9DpD,UAAUe,MAAM,CAACsC,SAAS,GAAGrD,UAAUe,MAAM,CAACsC,SAAS,IAAIrD,UAAUP,IAAI;QACzEO,UAAUf,KAAK,CAAEqE,UAAU,GACzBtD,UAAUf,KAAK,EAAEqE,cAActD,UAAUf,KAAK,CAACqE,UAAU,KAAK,OAC1DtD,UAAUf,KAAK,CAACqE,UAAU,GAC1B;QAEN,MAAMC,eAAetF,oBAAoB;YACvCc,YAAYiB;YACZL;QACF;QAEAK,UAAUO,MAAM,GAAGxC,gBAAgBiC,UAAUO,MAAM,EAAEgD;IACvD;IAEA,IAAIvD,UAAUY,IAAI,EAAE;QAClBZ,UAAUY,IAAI,GAAGnC,wBACf,OAAOuB,UAAUY,IAAI,KAAK,YAAY,CAAC,IAAIZ,UAAUY,IAAI;QAG3D,4DAA4D;QAC5DZ,UAAUwD,gBAAgB,GAAGxD,UAAUwD,gBAAgB,IAAI;QAE3D,IAAIxD,UAAUY,IAAI,CAAC6C,iBAAiB,EAAE;YACpC,IAAIzD,UAAUY,IAAI,CAAC6C,iBAAiB,KAAK,MAAM;gBAC7CzD,UAAUY,IAAI,CAAC6C,iBAAiB,GAAG9E,qCAAqC,CAAC;YAC3E,OAAO;gBACL,MAAM+E,gCAAgC/E,qCACpCqB,UAAUY,IAAI,CAAC6C,iBAAiB;gBAGlC,4DAA4D;gBAC5D,IAAIC,8BAA8BC,eAAe,KAAK,OAAO;oBAC3DD,8BAA8BE,eAAe,GAAG;gBAClD;gBACA5D,UAAUY,IAAI,CAAC6C,iBAAiB,GAAGC;YACrC;QACF,OAAO;YACL1D,UAAUY,IAAI,CAAC6C,iBAAiB,GAAG;QACrC;QAEA,IAAI,CAAC1E,YAAYE,OAAOqE,YAAY;YAClCtD,UAAUf,KAAK,CAAEqE,UAAU,GAAGtD,UAAUY,IAAI,CAAC6C,iBAAiB,GAAG,aAAa;QAChF;QAEAzD,UAAUO,MAAM,GAAGxC,gBAAgBiC,UAAUO,MAAM,EAAE5C,kBAAkBqC,UAAUY,IAAI;IACvF;IAEA,IAAI7B,YAAYE,OAAO4E,YAAYC,QAAQC,QAAQ;QACjD/D,UAAUf,KAAK,CAAE4E,UAAU,CAAEC,MAAM,GAAG/E,WAAWE,KAAK,CAAC4E,UAAU,CAACC,MAAM;IAC1E;IAEAjF,mBAAmBmB;IAEnB,MAAMgE,kBAAkBhE;IAExBgE,gBAAgB3D,KAAK,GAAGA;IACxB2D,gBAAgB1D,gBAAgB,GAAGA;IAEnC0D,gBAAgBC,eAAe,GAAG/F,iBAAiB;QAAEqC,QAAQyD,gBAAgBzD,MAAM;IAAC;IAEpFyD,gBAAgBE,gBAAgB,GAAGtF,wBAAwB;QACzD2B,QAAQyD,gBAAgBC,eAAe;QACvCE,SAASH,gBAAgBG,OAAO;IAClC;IAEA,OAAOH;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../src/collections/config/sanitize.ts"],"sourcesContent":["import type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { OrderableJoinInfo } from '../../fields/config/sanitizeJoinField.js'\nimport type {\n CollectionConfig,\n SanitizedCollectionConfig,\n SanitizedJoin,\n SanitizedJoins,\n} from './types.js'\n\nimport { authCollectionEndpoints } from '../../auth/endpoints/index.js'\nimport { getBaseAuthFields } from '../../auth/getAuthFields.js'\nimport { TimestampsRequired } from '../../errors/TimestampsRequired.js'\nimport { sanitizeFields } from '../../fields/config/sanitize.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { mergeBaseFields } from '../../fields/mergeBaseFields.js'\nimport { buildFoldersHierarchy, buildTagsHierarchy } from '../../hierarchy/presets.js'\nimport { sanitizeHierarchyCollection } from '../../hierarchy/sanitizeHierarchyCollection.js'\nimport { uploadCollectionEndpoints } from '../../uploads/endpoints/index.js'\nimport { getBaseUploadFields } from '../../uploads/getBaseFields.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { formatLabels } from '../../utilities/formatLabels.js'\nimport { miniChalk } from '../../utilities/miniChalk.js'\nimport { traverseForLocalizedFields } from '../../utilities/traverseForLocalizedFields.js'\nimport { baseVersionFields } from '../../versions/baseFields.js'\nimport { versionDefaults } from '../../versions/defaults.js'\nimport { defaultCollectionEndpoints } from '../endpoints/index.js'\nimport {\n addDefaultsToAuthConfig,\n addDefaultsToCollectionConfig,\n addDefaultsToLoginWithUsernameConfig,\n} from './defaults.js'\nimport { sanitizeCompoundIndexes } from './sanitizeCompoundIndexes.js'\nimport { validateUseAsTitle } from './useAsTitle.js'\n\n/**\n * Warns at startup when custom collection views are misconfigured with a missing `path`.\n * Views without `path` will never be matched by the router and are silently ignored.\n */\nexport const warnOnInvalidCustomViews = (collection: CollectionConfig): void => {\n const views = collection.admin?.components?.views\n if (!views || typeof views !== 'object') {\n return\n }\n\n for (const [key, view] of Object.entries(views)) {\n if (key === 'edit' || key === 'list') {\n continue\n }\n\n if (view && typeof view === 'object' && 'Component' in view && !('path' in view)) {\n console.warn(\n `[Payload] Custom collection view \"${key}\" in collection \"${collection.slug}\" is missing a \"path\" property. The view will never be rendered.`,\n )\n }\n\n if (view && typeof view === 'object' && 'path' in view && !('Component' in view)) {\n console.warn(\n `[Payload] Custom collection view \"${key}\" in collection \"${collection.slug}\" has a \"path\" but is missing a \"Component\". The view will never be rendered.`,\n )\n }\n }\n}\n\nexport const sanitizeCollection = async (\n config: Config,\n collection: CollectionConfig,\n /**\n * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises\n * so that you can sanitize them together, after the config has been sanitized.\n */\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>,\n _validRelationships?: string[],\n /**\n * Tracker for orderable join fields - populated during sanitization\n */\n orderableJoins?: OrderableJoinInfo[],\n): Promise<SanitizedCollectionConfig> => {\n if (collection._sanitized) {\n return collection as SanitizedCollectionConfig\n }\n\n collection._sanitized = true\n\n warnOnInvalidCustomViews(collection)\n\n // /////////////////////////////////\n // Make copy of collection config\n // /////////////////////////////////\n\n const sanitized: CollectionConfig = addDefaultsToCollectionConfig(collection)\n\n // /////////////////////////////////\n // Convert folders/tags to hierarchy\n // /////////////////////////////////\n\n const presetCount = [sanitized.folders, sanitized.tags, sanitized.hierarchy].filter(\n Boolean,\n ).length\n if (presetCount > 1) {\n throw new Error(\n `Collection \"${sanitized.slug}\": Only one of 'folders', 'tags', or 'hierarchy' can be specified`,\n )\n }\n\n if (sanitized.folders) {\n sanitized.labels = {\n plural: 'Folders',\n singular: 'Folder',\n ...sanitized.labels,\n }\n sanitized.hierarchy = buildFoldersHierarchy(sanitized.folders, sanitized.slug)\n // Set admin.group: false when sidebar tab enabled (folders accessed via tab)\n const sidebarTabEnabled =\n typeof sanitized.hierarchy === 'object' &&\n sanitized.hierarchy.admin?.injectSidebarTab !== false\n if (sidebarTabEnabled && sanitized.admin!.group === undefined) {\n sanitized.admin!.group = false\n }\n delete sanitized.folders\n }\n\n if (sanitized.tags) {\n sanitized.labels = {\n plural: 'Tags',\n singular: 'Tag',\n ...sanitized.labels,\n }\n sanitized.hierarchy = buildTagsHierarchy(sanitized.tags, sanitized.slug)\n // Tags also hidden from nav by default\n if (sanitized.admin!.group === undefined) {\n sanitized.admin!.group = false\n }\n delete sanitized.tags\n }\n\n // /////////////////////////////////\n // Sanitize fields\n // /////////////////////////////////\n\n const validRelationships = _validRelationships ?? config.collections!.map((c) => c.slug) ?? []\n\n const joins: SanitizedJoins = {}\n\n const polymorphicJoins: SanitizedJoin[] = []\n\n sanitized.fields = await sanitizeFields({\n collectionConfig: sanitized,\n config,\n fields: sanitized.fields,\n joinPath: '',\n joins,\n orderableJoins,\n parentIsLocalized: false,\n polymorphicJoins,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n if (sanitized.endpoints !== false) {\n if (!sanitized.endpoints) {\n sanitized.endpoints = []\n }\n\n if (sanitized.auth) {\n for (const endpoint of authCollectionEndpoints) {\n sanitized.endpoints.push(endpoint)\n }\n }\n\n if (sanitized.upload) {\n for (const endpoint of uploadCollectionEndpoints) {\n sanitized.endpoints.push(endpoint)\n }\n }\n\n for (const endpoint of defaultCollectionEndpoints) {\n sanitized.endpoints.push(endpoint)\n }\n }\n\n if (sanitized.timestamps !== false) {\n // add default timestamps fields only as needed\n let hasUpdatedAt: boolean | null = null\n let hasCreatedAt: boolean | null = null\n let hasDeletedAt: boolean | null = null\n\n sanitized.fields.some((field) => {\n if (fieldAffectsData(field)) {\n if (field.name === 'updatedAt') {\n hasUpdatedAt = true\n }\n\n if (field.name === 'createdAt') {\n hasCreatedAt = true\n }\n\n if (field.name === 'deletedAt') {\n hasDeletedAt = true\n }\n }\n\n return hasCreatedAt && hasUpdatedAt && (!sanitized.trash || hasDeletedAt)\n })\n\n if (!hasUpdatedAt) {\n sanitized.fields.push({\n name: 'updatedAt',\n type: 'date',\n admin: {\n disabled: { bulkEdit: true },\n hidden: true,\n },\n index: true,\n label: ({ t }) => t('general:updatedAt'),\n })\n }\n\n if (!hasCreatedAt) {\n sanitized.fields.push({\n name: 'createdAt',\n admin: {\n disabled: { bulkEdit: true },\n hidden: true,\n },\n // The default sort for list view is createdAt. Thus, enabling indexing by default, is a major performance improvement, especially for large or a large amount of collections.\n type: 'date',\n index: true,\n label: ({ t }) => t('general:createdAt'),\n })\n }\n\n if (sanitized.trash && !hasDeletedAt) {\n sanitized.fields.push({\n name: 'deletedAt',\n type: 'date',\n admin: {\n disabled: { bulkEdit: true },\n hidden: true,\n },\n index: true,\n label: ({ t }) => t('general:deletedAt'),\n })\n }\n }\n\n const defaultLabels = formatLabels(sanitized.slug)\n\n sanitized.labels = {\n plural: sanitized.labels?.plural || defaultLabels.plural,\n singular: sanitized.labels?.singular || defaultLabels.singular,\n }\n\n if (sanitized.versions) {\n if (sanitized.timestamps === false) {\n throw new TimestampsRequired(collection)\n }\n\n if (sanitized.versions === true) {\n sanitized.versions = {\n drafts: false,\n maxPerDoc: 100,\n }\n }\n\n sanitized.versions.maxPerDoc =\n typeof sanitized.versions.maxPerDoc === 'number' ? sanitized.versions.maxPerDoc : 100\n\n if (sanitized.versions.drafts) {\n if (sanitized.versions.drafts === true) {\n sanitized.versions.drafts = {\n autosave: false,\n validate: false,\n }\n }\n\n const hasLocalizedFields = traverseForLocalizedFields(sanitized.fields)\n\n if (config.localization) {\n if (hasLocalizedFields && sanitized.versions.drafts.localizeStatus === undefined) {\n sanitized.versions.drafts.localizeStatus = false\n }\n }\n\n // TODO v4: remove this sanitization check, should not need to enable the experimental flag\n if (sanitized.versions.drafts.localizeStatus && !config.experimental?.localizeStatus) {\n sanitized.versions.drafts.localizeStatus = false\n console.log(\n miniChalk.yellowBold(\n `Warning: \"localizeStatus\" for drafts is an experimental feature. To enable, set \"experimental.localizeStatus\" to true in your Payload config.`,\n ),\n )\n }\n\n if (sanitized.versions.drafts.autosave === true) {\n sanitized.versions.drafts.autosave = {\n interval: versionDefaults.autosaveInterval,\n }\n }\n\n if (sanitized.versions.drafts.validate === undefined) {\n sanitized.versions.drafts.validate = false\n }\n\n sanitized.fields = mergeBaseFields(\n sanitized.fields,\n baseVersionFields({\n localized: sanitized.versions.drafts.localizeStatus ?? false,\n }),\n )\n }\n } else {\n delete sanitized.versions\n }\n\n // Sanitize hierarchy configuration (phase 1 - per collection)\n sanitizeHierarchyCollection(sanitized, config)\n\n if (sanitized.upload) {\n if (sanitized.upload === true) {\n sanitized.upload = {}\n }\n\n sanitized.upload.cacheTags = sanitized.upload?.cacheTags ?? true\n sanitized.upload.bulkUpload = sanitized.upload?.bulkUpload ?? true\n sanitized.upload.staticDir = sanitized.upload.staticDir || sanitized.slug\n sanitized.admin!.useAsTitle =\n sanitized.admin?.useAsTitle && sanitized.admin.useAsTitle !== 'id'\n ? sanitized.admin.useAsTitle\n : 'filename'\n\n const uploadFields = getBaseUploadFields({\n collection: sanitized,\n config,\n })\n\n sanitized.fields = mergeBaseFields(sanitized.fields, uploadFields)\n }\n\n if (sanitized.auth) {\n sanitized.auth = addDefaultsToAuthConfig(\n typeof sanitized.auth === 'boolean' ? {} : sanitized.auth,\n )\n\n // disable duplicate for auth enabled collections by default\n sanitized.disableDuplicate = sanitized.disableDuplicate ?? true\n\n if (sanitized.auth.loginWithUsername) {\n if (sanitized.auth.loginWithUsername === true) {\n sanitized.auth.loginWithUsername = addDefaultsToLoginWithUsernameConfig({})\n } else {\n const loginWithUsernameWithDefaults = addDefaultsToLoginWithUsernameConfig(\n sanitized.auth.loginWithUsername,\n )\n\n // if allowEmailLogin is false, requireUsername must be true\n if (loginWithUsernameWithDefaults.allowEmailLogin === false) {\n loginWithUsernameWithDefaults.requireUsername = true\n }\n sanitized.auth.loginWithUsername = loginWithUsernameWithDefaults\n }\n } else {\n sanitized.auth.loginWithUsername = false\n }\n\n if (!collection?.admin?.useAsTitle) {\n sanitized.admin!.useAsTitle = sanitized.auth.loginWithUsername ? 'username' : 'email'\n }\n\n sanitized.fields = mergeBaseFields(sanitized.fields, getBaseAuthFields(sanitized.auth))\n }\n\n if (collection?.admin?.pagination?.limits?.length) {\n sanitized.admin!.pagination!.limits = collection.admin.pagination.limits\n }\n\n validateUseAsTitle(sanitized)\n\n const sanitizedConfig = sanitized as SanitizedCollectionConfig\n\n sanitizedConfig.joins = joins\n sanitizedConfig.polymorphicJoins = polymorphicJoins\n\n sanitizedConfig.flattenedFields = flattenAllFields({ fields: sanitizedConfig.fields })\n\n sanitizedConfig.sanitizedIndexes = sanitizeCompoundIndexes({\n fields: sanitizedConfig.flattenedFields,\n indexes: sanitizedConfig.indexes,\n })\n\n return sanitizedConfig\n}\n"],"names":["authCollectionEndpoints","getBaseAuthFields","TimestampsRequired","sanitizeFields","fieldAffectsData","mergeBaseFields","buildFoldersHierarchy","buildTagsHierarchy","sanitizeHierarchyCollection","uploadCollectionEndpoints","getBaseUploadFields","flattenAllFields","formatLabels","miniChalk","traverseForLocalizedFields","baseVersionFields","versionDefaults","defaultCollectionEndpoints","addDefaultsToAuthConfig","addDefaultsToCollectionConfig","addDefaultsToLoginWithUsernameConfig","sanitizeCompoundIndexes","validateUseAsTitle","warnOnInvalidCustomViews","collection","views","admin","components","key","view","Object","entries","console","warn","slug","sanitizeCollection","config","richTextSanitizationPromises","_validRelationships","orderableJoins","_sanitized","sanitized","presetCount","folders","tags","hierarchy","filter","Boolean","length","Error","labels","plural","singular","sidebarTabEnabled","injectSidebarTab","group","undefined","validRelationships","collections","map","c","joins","polymorphicJoins","fields","collectionConfig","joinPath","parentIsLocalized","endpoints","auth","endpoint","push","upload","timestamps","hasUpdatedAt","hasCreatedAt","hasDeletedAt","some","field","name","trash","type","disabled","bulkEdit","hidden","index","label","t","defaultLabels","versions","drafts","maxPerDoc","autosave","validate","hasLocalizedFields","localization","localizeStatus","experimental","log","yellowBold","interval","autosaveInterval","localized","cacheTags","bulkUpload","staticDir","useAsTitle","uploadFields","disableDuplicate","loginWithUsername","loginWithUsernameWithDefaults","allowEmailLogin","requireUsername","pagination","limits","sanitizedConfig","flattenedFields","sanitizedIndexes","indexes"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizeCompoundIndexes.d.ts","sourceRoot":"","sources":["../../../src/collections/config/sanitizeCompoundIndexes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAKvE,eAAO,MAAM,uBAAuB,yBAGjC;IACD,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,OAAO,EAAE,aAAa,EAAE,CAAA;CACzB,KAAG,sBAAsB,EA2BzB,CAAA"}
1
+ {"version":3,"file":"sanitizeCompoundIndexes.d.ts","sourceRoot":"","sources":["../../../src/collections/config/sanitizeCompoundIndexes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAKvE,eAAO,MAAM,uBAAuB,GAAI,sBAGrC;IACD,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,OAAO,EAAE,aAAa,EAAE,CAAA;CACzB,KAAG,sBAAsB,EA2BzB,CAAA"}
@@ -1,15 +1,15 @@
1
1
  import type { GraphQLInputObjectType, GraphQLNonNull, GraphQLObjectType } from 'graphql';
2
2
  import type { DeepRequired, IsAny, MarkOptional } from 'ts-essentials';
3
- import type { AdminViewConfig, CustomStatus, CustomUpload, PublishButtonClientProps, PublishButtonServerProps, UnpublishButtonClientProps, UnpublishButtonServerProps, ViewTypes } from '../../admin/types.js';
3
+ import type { CustomUpload, ViewTypes } from '../../admin/types.js';
4
4
  import type { Arguments as MeArguments } from '../../auth/operations/me.js';
5
5
  import type { Arguments as RefreshArguments, Result as RefreshResult } from '../../auth/operations/refresh.js';
6
6
  import type { Auth, ClientUser, IncomingAuthType } from '../../auth/types.js';
7
- import type { Access, AfterErrorHookArgs, AfterErrorResult, CustomComponent, EditConfig, Endpoint, EntityDescription, EntityDescriptionComponent, GeneratePreviewURL, LabelFunction, LivePreviewConfig, MetaConfig, PayloadComponent, StaticLabel } from '../../config/types.js';
7
+ import type { Access, AfterErrorHookArgs, AfterErrorResult, CustomComponent, Endpoint, EntityDescription, GeneratePreviewURL, LabelFunction, LivePreviewConfig, MetaConfig, PayloadComponent, SharedAdminComponents, SharedEditViewComponents, SharedEntityViews, StaticLabel } from '../../config/types.js';
8
8
  import type { DBIdentifierName } from '../../database/types.js';
9
9
  import type { Field, FlattenedField, JoinField, RelationshipField, UploadField } from '../../fields/config/types.js';
10
- import type { CollectionFoldersConfiguration } from '../../folders/types.js';
10
+ import type { HierarchyConfig, HierarchyJoinFieldConfig, SanitizedHierarchyConfig } from '../../hierarchy/types.js';
11
11
  import type { CollectionAdminCustom, CollectionCustom, CollectionSlug, GeneratedTypes, JsonObject, RequestContext, TypedAuthOperations, TypedCollection, TypedCollectionSelect, TypedLocale } from '../../index.js';
12
- import type { PayloadRequest, SelectIncludeType, SelectType, Sort, TransformCollectionWithSelect, Where } from '../../types/index.js';
12
+ import type { PayloadRequest, SelectIncludeType, SelectType, Sort, TransformCollectionWithSelect, Where, WithSelectFn } from '../../types/index.js';
13
13
  import type { SanitizedUploadConfig, UploadConfig } from '../../uploads/types.js';
14
14
  import type { IncomingCollectionVersions, SanitizedCollectionVersions } from '../../versions/types.js';
15
15
  import type { AfterOperationArg, BeforeOperationArg, OperationMap } from '../operations/utilities/types.js';
@@ -223,6 +223,36 @@ export type AfterForgotPasswordHook = (args: {
223
223
  export type EnableFoldersOptions = {
224
224
  debug?: boolean;
225
225
  };
226
+ /**
227
+ * Configuration options for folder hierarchy preset.
228
+ * Subset of HierarchyConfig with folder-appropriate defaults applied.
229
+ */
230
+ export type FoldersConfig = {
231
+ admin?: {
232
+ components?: {
233
+ Icon?: PayloadComponent;
234
+ };
235
+ injectSidebarTab?: boolean;
236
+ treeLimit?: number;
237
+ useHeaderButton?: boolean;
238
+ };
239
+ collectionSpecific?: {
240
+ fieldName?: string;
241
+ } | boolean;
242
+ joinField?: HierarchyJoinFieldConfig;
243
+ parentFieldName?: string;
244
+ slugField?: string;
245
+ slugify?: (text: string) => string;
246
+ slugPathFieldName?: string;
247
+ titlePathFieldName?: string;
248
+ };
249
+ /**
250
+ * Configuration options for tags hierarchy preset.
251
+ * Same as FoldersConfig but allowHasMany can be overridden.
252
+ */
253
+ export type TagsConfig = {
254
+ allowHasMany?: boolean;
255
+ } & FoldersConfig;
226
256
  export type BaseFilter = (args: {
227
257
  limit: number;
228
258
  locale?: TypedLocale;
@@ -263,80 +293,18 @@ export type CollectionAdminOptions = {
263
293
  afterListTable?: CustomComponent[];
264
294
  beforeList?: CustomComponent[];
265
295
  beforeListTable?: CustomComponent[];
266
- Description?: EntityDescriptionComponent;
267
296
  /**
268
297
  * Components within the edit view
269
298
  */
270
299
  edit?: {
271
- /**
272
- * Inject custom components before the document controls
273
- */
274
- beforeDocumentControls?: CustomComponent[];
275
- /**
276
- * Inject custom components within the 3-dot menu dropdown
277
- */
278
- editMenuItems?: CustomComponent[];
279
- /**
280
- * Replaces the "Preview" button
281
- */
282
- PreviewButton?: CustomComponent;
283
- /**
284
- * Replaces the "Publish" button
285
- * + drafts must be enabled
286
- */
287
- PublishButton?: PayloadComponent<PublishButtonServerProps, PublishButtonClientProps>;
288
- /**
289
- * Replaces the "Save" button
290
- * + drafts must be disabled
291
- */
292
- SaveButton?: CustomComponent;
293
- /**
294
- * Replaces the "Save Draft" button
295
- * + drafts must be enabled
296
- * + autosave must be disabled
297
- */
298
- SaveDraftButton?: CustomComponent;
299
- /**
300
- * Replaces the "Status" section
301
- */
302
- Status?: CustomStatus;
303
- /**
304
- * Replaces the "Unpublish" button
305
- * + drafts must be enabled
306
- */
307
- UnpublishButton?: PayloadComponent<UnpublishButtonServerProps, UnpublishButtonClientProps>;
308
300
  /**
309
301
  * Replaces the "Upload" section
310
302
  * + upload must be enabled
311
303
  */
312
304
  Upload?: CustomUpload;
313
- };
305
+ } & SharedEditViewComponents;
314
306
  listMenuItems?: CustomComponent[];
315
307
  views?: {
316
- /**
317
- * Add custom collection views.
318
- * Any additional keys define custom collection views that are matched by path and rendered at the collection level.
319
- * @link https://payloadcms.com/docs/custom-components/custom-views
320
- * @example
321
- * ```ts
322
- * views: {
323
- * grid: {
324
- * Component: '/path/to/GridView',
325
- * path: '/grid',
326
- * exact: true,
327
- * }
328
- * }
329
- * ```
330
- */
331
- [key: string]: {
332
- actions?: CustomComponent[];
333
- Component?: PayloadComponent;
334
- } | AdminViewConfig | EditConfig | undefined;
335
- /**
336
- * Replace, modify, or add new "document" views.
337
- * @link https://payloadcms.com/docs/custom-components/document-views
338
- */
339
- edit?: EditConfig;
340
308
  /**
341
309
  * Replace or modify the "list" view.
342
310
  * @link https://payloadcms.com/docs/custom-components/list-view
@@ -345,8 +313,8 @@ export type CollectionAdminOptions = {
345
313
  actions?: CustomComponent[];
346
314
  Component?: PayloadComponent;
347
315
  };
348
- };
349
- };
316
+ } & SharedEntityViews;
317
+ } & Omit<SharedAdminComponents, 'edit' | 'views'>;
350
318
  /** Extension point to add your custom data. Available in server and client. */
351
319
  custom?: CollectionAdminCustom;
352
320
  /**
@@ -362,15 +330,6 @@ export type CollectionAdminOptions = {
362
330
  * @default false
363
331
  */
364
332
  disableCopyToLocale?: boolean;
365
- /**
366
- * Performance opt-in. If true, will use the [Select API](https://payloadcms.com/docs/queries/select) when
367
- * loading the list view to query only the active columns, as opposed to the entire documents.
368
- * If your cells require specific fields that may be unselected, such as within hooks, etc.,
369
- * use `forceSelect` in conjunction with this property.
370
- *
371
- * @experimental This is an experimental feature and may change in the future. Use at your own risk.
372
- */
373
- enableListViewSelectAPI?: boolean;
374
333
  enableRichTextLink?: boolean;
375
334
  enableRichTextRelationship?: boolean;
376
335
  /**
@@ -414,10 +373,6 @@ export type CollectionAdminOptions = {
414
373
  hidden?: ((args: {
415
374
  user: ClientUser;
416
375
  }) => boolean) | boolean;
417
- /**
418
- * Hide the API URL within the Edit view
419
- */
420
- hideAPIURL?: boolean;
421
376
  /**
422
377
  * Additional fields to be searched via the full text search
423
378
  */
@@ -507,13 +462,13 @@ export type CollectionConfig<TSlug extends CollectionSlug = any> = {
507
462
  endpoints?: false | Omit<Endpoint, 'root'>[];
508
463
  fields: Field[];
509
464
  /**
510
- * Enables folders for this collection
511
- */
512
- folders?: boolean | CollectionFoldersConfiguration;
513
- /**
514
- * Specify which fields should be selected always, regardless of the `select` query which can be useful that the field exists for access control / hooks
465
+ * Enable folder hierarchy preset for this collection.
466
+ * Sets hierarchy with folder defaults: allowHasMany: false, FolderIcon, useHeaderButton: true
467
+ *
468
+ * Use `true` for defaults, or object for customization.
469
+ * Cannot be used together with `tags` or `hierarchy`.
515
470
  */
516
- forceSelect?: IsAny<SelectFromCollectionSlug<TSlug>> extends true ? SelectIncludeType : SelectFromCollectionSlug<TSlug>;
471
+ folders?: boolean | FoldersConfig;
517
472
  /**
518
473
  * GraphQL configuration
519
474
  */
@@ -523,6 +478,25 @@ export type CollectionConfig<TSlug extends CollectionSlug = any> = {
523
478
  pluralName?: string;
524
479
  singularName?: string;
525
480
  } | false;
481
+ /**
482
+ * Enable hierarchical tree structure for this collection
483
+ *
484
+ * Use `true` to enable with defaults (auto-detects parent field)
485
+ * or provide configuration object
486
+ *
487
+ * @example
488
+ * // Enable with defaults
489
+ * hierarchy: true
490
+ *
491
+ * @example
492
+ * // Customize field names and slugify function
493
+ * hierarchy: {
494
+ * parentFieldName: 'parent',
495
+ * slugify: (text) => customSlugify(text),
496
+ * slugPathFieldName: '_breadcrumbPath'
497
+ * }
498
+ */
499
+ hierarchy?: boolean | HierarchyConfig;
526
500
  /**
527
501
  * Hooks to modify Payload functionality
528
502
  */
@@ -593,6 +567,14 @@ export type CollectionConfig<TSlug extends CollectionSlug = any> = {
593
567
  */
594
568
  orderable?: boolean;
595
569
  slug: string;
570
+ /**
571
+ * Enable tags hierarchy preset for this collection.
572
+ * Sets hierarchy with tag defaults: allowHasMany: true, TagIcon
573
+ *
574
+ * Use `true` for defaults, or object for customization.
575
+ * Cannot be used together with `folders` or `hierarchy`.
576
+ */
577
+ tags?: boolean | TagsConfig;
596
578
  /**
597
579
  * Add `createdAt`, `deletedAt` and `updatedAt` fields
598
580
  *
@@ -632,7 +614,7 @@ export type CollectionConfig<TSlug extends CollectionSlug = any> = {
632
614
  * @default false // disable versioning
633
615
  */
634
616
  versions?: boolean | IncomingCollectionVersions;
635
- };
617
+ } & Pick<WithSelectFn<IsAny<SelectFromCollectionSlug<TSlug>> extends true ? SelectIncludeType : SelectFromCollectionSlug<TSlug>>, 'select'>;
636
618
  export type SanitizedJoin = {
637
619
  /**
638
620
  * The field configuration defining the join
@@ -659,7 +641,7 @@ export type SanitizedJoins = {
659
641
  * @todo remove the `DeepRequired` in v4.
660
642
  * We don't actually guarantee that all properties are set when sanitizing configs.
661
643
  */
662
- export interface SanitizedCollectionConfig extends Omit<DeepRequired<CollectionConfig>, 'admin' | 'auth' | 'endpoints' | 'fields' | 'folders' | 'slug' | 'upload' | 'versions'> {
644
+ export interface SanitizedCollectionConfig extends Omit<DeepRequired<CollectionConfig>, 'admin' | 'auth' | 'endpoints' | 'fields' | 'folder' | 'folders' | 'hierarchy' | 'slug' | 'tags' | 'upload' | 'versions'> {
663
645
  admin: CollectionAdminOptions;
664
646
  auth: Auth;
665
647
  endpoints: Endpoint[] | false;
@@ -669,10 +651,13 @@ export interface SanitizedCollectionConfig extends Omit<DeepRequired<CollectionC
669
651
  * Rows / collapsible / tabs w/o name `fields` merged to top, UIs are excluded
670
652
  */
671
653
  flattenedFields: FlattenedField[];
654
+ /**
655
+ * Hierarchy configuration (when collection is a hierarchy type like folders or tags)
656
+ */
657
+ hierarchy: false | SanitizedHierarchyConfig;
672
658
  /**
673
659
  * Object of collections to join 'Join Fields object keyed by collection
674
660
  */
675
- folders: CollectionFoldersConfiguration | false;
676
661
  joins: SanitizedJoins;
677
662
  /**
678
663
  * List of all polymorphic join fields