payload 3.84.1 → 4.0.0-internal.38b7f1d

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 (441) hide show
  1. package/README.md +5 -5
  2. package/dist/admin/elements/Nav.d.ts +13 -0
  3. package/dist/admin/elements/Nav.d.ts.map +1 -1
  4. package/dist/admin/elements/Nav.js.map +1 -1
  5. package/dist/admin/functions/index.d.ts +1 -38
  6. package/dist/admin/functions/index.d.ts.map +1 -1
  7. package/dist/admin/functions/index.js.map +1 -1
  8. package/dist/admin/types.d.ts +5 -4
  9. package/dist/admin/types.d.ts.map +1 -1
  10. package/dist/admin/types.js.map +1 -1
  11. package/dist/admin/views/hierarchyList.d.ts +9 -0
  12. package/dist/admin/views/hierarchyList.d.ts.map +1 -0
  13. package/dist/admin/views/hierarchyList.js +3 -0
  14. package/dist/admin/views/hierarchyList.js.map +1 -0
  15. package/dist/admin/views/index.d.ts +1 -3
  16. package/dist/admin/views/index.d.ts.map +1 -1
  17. package/dist/admin/views/index.js.map +1 -1
  18. package/dist/admin/views/list.d.ts +43 -2
  19. package/dist/admin/views/list.d.ts.map +1 -1
  20. package/dist/admin/views/list.js.map +1 -1
  21. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
  22. package/dist/bin/generateImportMap/iterateCollections.js +1 -0
  23. package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
  24. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
  25. package/dist/bin/generateImportMap/iterateConfig.js +7 -0
  26. package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
  27. package/dist/bin/generateImportMap/iterateGlobals.d.ts.map +1 -1
  28. package/dist/bin/generateImportMap/iterateGlobals.js +20 -8
  29. package/dist/bin/generateImportMap/iterateGlobals.js.map +1 -1
  30. package/dist/bin/index.d.ts.map +1 -1
  31. package/dist/bin/index.js +1 -3
  32. package/dist/bin/index.js.map +1 -1
  33. package/dist/collections/config/client.d.ts +4 -2
  34. package/dist/collections/config/client.d.ts.map +1 -1
  35. package/dist/collections/config/client.js +13 -1
  36. package/dist/collections/config/client.js.map +1 -1
  37. package/dist/collections/config/defaults.js +1 -1
  38. package/dist/collections/config/defaults.js.map +1 -1
  39. package/dist/collections/config/sanitize.d.ts.map +1 -1
  40. package/dist/collections/config/sanitize.js +51 -10
  41. package/dist/collections/config/sanitize.js.map +1 -1
  42. package/dist/collections/config/types.d.ts +76 -91
  43. package/dist/collections/config/types.d.ts.map +1 -1
  44. package/dist/collections/config/types.js.map +1 -1
  45. package/dist/collections/operations/create.d.ts.map +1 -1
  46. package/dist/collections/operations/create.js +24 -19
  47. package/dist/collections/operations/create.js.map +1 -1
  48. package/dist/collections/operations/delete.d.ts.map +1 -1
  49. package/dist/collections/operations/delete.js +7 -2
  50. package/dist/collections/operations/delete.js.map +1 -1
  51. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  52. package/dist/collections/operations/deleteByID.js +7 -2
  53. package/dist/collections/operations/deleteByID.js.map +1 -1
  54. package/dist/collections/operations/find.d.ts.map +1 -1
  55. package/dist/collections/operations/find.js +7 -2
  56. package/dist/collections/operations/find.js.map +1 -1
  57. package/dist/collections/operations/findByID.d.ts.map +1 -1
  58. package/dist/collections/operations/findByID.js +10 -5
  59. package/dist/collections/operations/findByID.js.map +1 -1
  60. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  61. package/dist/collections/operations/findVersionByID.js +6 -4
  62. package/dist/collections/operations/findVersionByID.js.map +1 -1
  63. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  64. package/dist/collections/operations/findVersions.js +6 -4
  65. package/dist/collections/operations/findVersions.js.map +1 -1
  66. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  67. package/dist/collections/operations/restoreVersion.js +7 -2
  68. package/dist/collections/operations/restoreVersion.js.map +1 -1
  69. package/dist/collections/operations/update.d.ts.map +1 -1
  70. package/dist/collections/operations/update.js +7 -2
  71. package/dist/collections/operations/update.js.map +1 -1
  72. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  73. package/dist/collections/operations/updateByID.js +7 -2
  74. package/dist/collections/operations/updateByID.js.map +1 -1
  75. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  76. package/dist/collections/operations/utilities/update.js +5 -4
  77. package/dist/collections/operations/utilities/update.js.map +1 -1
  78. package/dist/config/client.d.ts.map +1 -1
  79. package/dist/config/client.js +0 -10
  80. package/dist/config/client.js.map +1 -1
  81. package/dist/config/defaults.d.ts.map +1 -1
  82. package/dist/config/defaults.js +0 -15
  83. package/dist/config/defaults.js.map +1 -1
  84. package/dist/config/orderable/index.d.ts.map +1 -1
  85. package/dist/config/orderable/index.js +0 -4
  86. package/dist/config/orderable/index.js.map +1 -1
  87. package/dist/config/sanitize.d.ts.map +1 -1
  88. package/dist/config/sanitize.js +3 -38
  89. package/dist/config/sanitize.js.map +1 -1
  90. package/dist/config/types.d.ts +120 -13
  91. package/dist/config/types.d.ts.map +1 -1
  92. package/dist/config/types.js.map +1 -1
  93. package/dist/database/migrations/config/batchTransform.d.ts +16 -0
  94. package/dist/database/migrations/config/batchTransform.d.ts.map +1 -0
  95. package/dist/database/migrations/config/batchTransform.js +17 -0
  96. package/dist/database/migrations/config/batchTransform.js.map +1 -0
  97. package/dist/database/migrations/config/batchTransform.spec.js +68 -0
  98. package/dist/database/migrations/config/batchTransform.spec.js.map +1 -0
  99. package/dist/database/migrations/config/bootstrapConfigState.d.ts +4 -0
  100. package/dist/database/migrations/config/bootstrapConfigState.d.ts.map +1 -0
  101. package/dist/database/migrations/config/bootstrapConfigState.js +10 -0
  102. package/dist/database/migrations/config/bootstrapConfigState.js.map +1 -0
  103. package/dist/database/migrations/config/configStateStore.d.ts +4 -0
  104. package/dist/database/migrations/config/configStateStore.d.ts.map +1 -0
  105. package/dist/database/migrations/config/configStateStore.js +29 -0
  106. package/dist/database/migrations/config/configStateStore.js.map +1 -0
  107. package/dist/database/migrations/config/diffConfig.d.ts +3 -0
  108. package/dist/database/migrations/config/diffConfig.d.ts.map +1 -0
  109. package/dist/database/migrations/config/diffConfig.js +123 -0
  110. package/dist/database/migrations/config/diffConfig.js.map +1 -0
  111. package/dist/database/migrations/config/diffConfig.spec.js +136 -0
  112. package/dist/database/migrations/config/diffConfig.spec.js.map +1 -0
  113. package/dist/database/migrations/config/generateDataMigrationCode.d.ts +11 -0
  114. package/dist/database/migrations/config/generateDataMigrationCode.d.ts.map +1 -0
  115. package/dist/database/migrations/config/generateDataMigrationCode.js +28 -0
  116. package/dist/database/migrations/config/generateDataMigrationCode.js.map +1 -0
  117. package/dist/database/migrations/config/generateDataMigrationCode.spec.js +52 -0
  118. package/dist/database/migrations/config/generateDataMigrationCode.spec.js.map +1 -0
  119. package/dist/database/migrations/config/index.d.ts +9 -0
  120. package/dist/database/migrations/config/index.d.ts.map +1 -0
  121. package/dist/database/migrations/config/index.js +9 -0
  122. package/dist/database/migrations/config/index.js.map +1 -0
  123. package/dist/database/migrations/config/prompts.d.ts +5 -0
  124. package/dist/database/migrations/config/prompts.d.ts.map +1 -0
  125. package/dist/database/migrations/config/prompts.js +49 -0
  126. package/dist/database/migrations/config/prompts.js.map +1 -0
  127. package/dist/database/migrations/config/serializeConfig.d.ts +4 -0
  128. package/dist/database/migrations/config/serializeConfig.d.ts.map +1 -0
  129. package/dist/database/migrations/config/serializeConfig.js +65 -0
  130. package/dist/database/migrations/config/serializeConfig.js.map +1 -0
  131. package/dist/database/migrations/config/serializeConfig.spec.js +146 -0
  132. package/dist/database/migrations/config/serializeConfig.spec.js.map +1 -0
  133. package/dist/database/migrations/config/types.d.ts +66 -0
  134. package/dist/database/migrations/config/types.d.ts.map +1 -0
  135. package/dist/database/migrations/config/types.js.map +1 -0
  136. package/dist/database/migrations/migrate.d.ts.map +1 -1
  137. package/dist/database/migrations/migrate.js +3 -0
  138. package/dist/database/migrations/migrate.js.map +1 -1
  139. package/dist/database/types.d.ts +29 -0
  140. package/dist/database/types.d.ts.map +1 -1
  141. package/dist/database/types.js.map +1 -1
  142. package/dist/exports/migrations.d.ts +1 -0
  143. package/dist/exports/migrations.d.ts.map +1 -1
  144. package/dist/exports/migrations.js +2 -1
  145. package/dist/exports/migrations.js.map +1 -1
  146. package/dist/exports/shared.d.ts +6 -3
  147. package/dist/exports/shared.d.ts.map +1 -1
  148. package/dist/exports/shared.js +4 -2
  149. package/dist/exports/shared.js.map +1 -1
  150. package/dist/fields/baseFields/slug/index.d.ts.map +1 -1
  151. package/dist/fields/baseFields/slug/index.js +6 -4
  152. package/dist/fields/baseFields/slug/index.js.map +1 -1
  153. package/dist/fields/config/client.d.ts.map +1 -1
  154. package/dist/fields/config/client.js +3 -2
  155. package/dist/fields/config/client.js.map +1 -1
  156. package/dist/fields/config/sanitize.d.ts.map +1 -1
  157. package/dist/fields/config/sanitize.js +12 -10
  158. package/dist/fields/config/sanitize.js.map +1 -1
  159. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
  160. package/dist/fields/config/sanitizeJoinField.js +3 -0
  161. package/dist/fields/config/sanitizeJoinField.js.map +1 -1
  162. package/dist/fields/config/types.d.ts +17 -73
  163. package/dist/fields/config/types.d.ts.map +1 -1
  164. package/dist/fields/config/types.js +11 -1
  165. package/dist/fields/config/types.js.map +1 -1
  166. package/dist/fields/isFieldDisabled.d.ts +12 -0
  167. package/dist/fields/isFieldDisabled.d.ts.map +1 -0
  168. package/dist/fields/isFieldDisabled.js +15 -0
  169. package/dist/fields/isFieldDisabled.js.map +1 -0
  170. package/dist/fields/isFieldDisabled.spec.js +134 -0
  171. package/dist/fields/isFieldDisabled.spec.js.map +1 -0
  172. package/dist/fields/validations.js +1 -1
  173. package/dist/fields/validations.js.map +1 -1
  174. package/dist/globals/config/client.d.ts +1 -1
  175. package/dist/globals/config/client.d.ts.map +1 -1
  176. package/dist/globals/config/client.js +2 -1
  177. package/dist/globals/config/client.js.map +1 -1
  178. package/dist/globals/config/sanitize.js +6 -2
  179. package/dist/globals/config/sanitize.js.map +1 -1
  180. package/dist/globals/config/types.d.ts +4 -57
  181. package/dist/globals/config/types.d.ts.map +1 -1
  182. package/dist/globals/config/types.js.map +1 -1
  183. package/dist/globals/operations/findOne.d.ts.map +1 -1
  184. package/dist/globals/operations/findOne.js +7 -2
  185. package/dist/globals/operations/findOne.js.map +1 -1
  186. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  187. package/dist/globals/operations/findVersionByID.js +6 -4
  188. package/dist/globals/operations/findVersionByID.js.map +1 -1
  189. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  190. package/dist/globals/operations/findVersions.js +6 -4
  191. package/dist/globals/operations/findVersions.js.map +1 -1
  192. package/dist/globals/operations/update.d.ts.map +1 -1
  193. package/dist/globals/operations/update.js +7 -2
  194. package/dist/globals/operations/update.js.map +1 -1
  195. package/dist/hierarchy/addHierarchyToCollection.d.ts +9 -0
  196. package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -0
  197. package/dist/hierarchy/addHierarchyToCollection.js +76 -0
  198. package/dist/hierarchy/addHierarchyToCollection.js.map +1 -0
  199. package/dist/hierarchy/buildParentField.d.ts +11 -0
  200. package/dist/hierarchy/buildParentField.d.ts.map +1 -0
  201. package/dist/hierarchy/buildParentField.js +42 -0
  202. package/dist/hierarchy/buildParentField.js.map +1 -0
  203. package/dist/hierarchy/constants.d.ts +15 -0
  204. package/dist/hierarchy/constants.d.ts.map +1 -0
  205. package/dist/hierarchy/constants.js +11 -0
  206. package/dist/hierarchy/constants.js.map +1 -0
  207. package/dist/hierarchy/createFolderField.d.ts +39 -0
  208. package/dist/hierarchy/createFolderField.d.ts.map +1 -0
  209. package/dist/hierarchy/createFolderField.js +54 -0
  210. package/dist/hierarchy/createFolderField.js.map +1 -0
  211. package/dist/hierarchy/createTagField.d.ts +44 -0
  212. package/dist/hierarchy/createTagField.d.ts.map +1 -0
  213. package/dist/hierarchy/createTagField.js +48 -0
  214. package/dist/hierarchy/createTagField.js.map +1 -0
  215. package/dist/hierarchy/getInitialTreeData.d.ts +27 -0
  216. package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -0
  217. package/dist/hierarchy/getInitialTreeData.js +125 -0
  218. package/dist/hierarchy/getInitialTreeData.js.map +1 -0
  219. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts +14 -0
  220. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts.map +1 -0
  221. package/dist/hierarchy/hooks/collectionAfterDelete.js +21 -0
  222. package/dist/hierarchy/hooks/collectionAfterDelete.js.map +1 -0
  223. package/dist/hierarchy/hooks/collectionAfterRead.d.ts +27 -0
  224. package/dist/hierarchy/hooks/collectionAfterRead.d.ts.map +1 -0
  225. package/dist/hierarchy/hooks/collectionAfterRead.js +72 -0
  226. package/dist/hierarchy/hooks/collectionAfterRead.js.map +1 -0
  227. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts +19 -0
  228. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts.map +1 -0
  229. package/dist/hierarchy/hooks/collectionBeforeChange.js +90 -0
  230. package/dist/hierarchy/hooks/collectionBeforeChange.js.map +1 -0
  231. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts +15 -0
  232. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts.map +1 -0
  233. package/dist/hierarchy/hooks/collectionBeforeDelete.js +20 -0
  234. package/dist/hierarchy/hooks/collectionBeforeDelete.js.map +1 -0
  235. package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts +33 -0
  236. package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts.map +1 -0
  237. package/dist/hierarchy/hooks/collectionBeforeOperation.js +66 -0
  238. package/dist/hierarchy/hooks/collectionBeforeOperation.js.map +1 -0
  239. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts +8 -0
  240. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts.map +1 -0
  241. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js +108 -0
  242. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js.map +1 -0
  243. package/dist/hierarchy/injectHierarchyButton.d.ts +14 -0
  244. package/dist/hierarchy/injectHierarchyButton.d.ts.map +1 -0
  245. package/dist/hierarchy/injectHierarchyButton.js +37 -0
  246. package/dist/hierarchy/injectHierarchyButton.js.map +1 -0
  247. package/dist/hierarchy/presets.d.ts +13 -0
  248. package/dist/hierarchy/presets.d.ts.map +1 -0
  249. package/dist/hierarchy/presets.js +52 -0
  250. package/dist/hierarchy/presets.js.map +1 -0
  251. package/dist/hierarchy/resolveHierarchyCollections.d.ts +23 -0
  252. package/dist/hierarchy/resolveHierarchyCollections.d.ts.map +1 -0
  253. package/dist/hierarchy/resolveHierarchyCollections.js +321 -0
  254. package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -0
  255. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts +14 -0
  256. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +1 -0
  257. package/dist/hierarchy/sanitizeHierarchyCollection.js +117 -0
  258. package/dist/hierarchy/sanitizeHierarchyCollection.js.map +1 -0
  259. package/dist/hierarchy/types.d.ts +155 -0
  260. package/dist/hierarchy/types.d.ts.map +1 -0
  261. package/dist/hierarchy/types.js +6 -0
  262. package/dist/hierarchy/types.js.map +1 -0
  263. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts +77 -0
  264. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts.map +1 -0
  265. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js +77 -0
  266. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js.map +1 -0
  267. package/dist/hierarchy/utils/computePaths.d.ts +31 -0
  268. package/dist/hierarchy/utils/computePaths.d.ts.map +1 -0
  269. package/dist/hierarchy/utils/computePaths.js +445 -0
  270. package/dist/hierarchy/utils/computePaths.js.map +1 -0
  271. package/dist/hierarchy/utils/findUseAsTitle.d.ts +14 -0
  272. package/dist/hierarchy/utils/findUseAsTitle.d.ts.map +1 -0
  273. package/dist/hierarchy/utils/findUseAsTitle.js +89 -0
  274. package/dist/hierarchy/utils/findUseAsTitle.js.map +1 -0
  275. package/dist/hierarchy/utils/getAncestors.d.ts +34 -0
  276. package/dist/hierarchy/utils/getAncestors.d.ts.map +1 -0
  277. package/dist/hierarchy/utils/getAncestors.js +94 -0
  278. package/dist/hierarchy/utils/getAncestors.js.map +1 -0
  279. package/dist/hierarchy/utils/getLocalizedValue.d.ts +30 -0
  280. package/dist/hierarchy/utils/getLocalizedValue.d.ts.map +1 -0
  281. package/dist/hierarchy/utils/getLocalizedValue.js +46 -0
  282. package/dist/hierarchy/utils/getLocalizedValue.js.map +1 -0
  283. package/dist/hierarchy/utils/getLocalizedValue.spec.js +250 -0
  284. package/dist/hierarchy/utils/getLocalizedValue.spec.js.map +1 -0
  285. package/dist/index.bundled.d.ts +856 -558
  286. package/dist/index.d.ts +29 -8
  287. package/dist/index.d.ts.map +1 -1
  288. package/dist/index.js +13 -8
  289. package/dist/index.js.map +1 -1
  290. package/dist/preferences/keys.d.ts +8 -4
  291. package/dist/preferences/keys.d.ts.map +1 -1
  292. package/dist/preferences/keys.js +7 -4
  293. package/dist/preferences/keys.js.map +1 -1
  294. package/dist/preferences/types.d.ts +1 -1
  295. package/dist/preferences/types.d.ts.map +1 -1
  296. package/dist/preferences/types.js.map +1 -1
  297. package/dist/query-presets/config.d.ts.map +1 -1
  298. package/dist/query-presets/config.js +5 -1
  299. package/dist/query-presets/config.js.map +1 -1
  300. package/dist/queues/config/types/index.d.ts +0 -21
  301. package/dist/queues/config/types/index.d.ts.map +1 -1
  302. package/dist/queues/config/types/index.js.map +1 -1
  303. package/dist/queues/config/types/taskTypes.d.ts +0 -20
  304. package/dist/queues/config/types/taskTypes.d.ts.map +1 -1
  305. package/dist/queues/config/types/taskTypes.js.map +1 -1
  306. package/dist/queues/errors/handleWorkflowError.d.ts.map +1 -1
  307. package/dist/queues/errors/handleWorkflowError.js +9 -1
  308. package/dist/queues/errors/handleWorkflowError.js.map +1 -1
  309. package/dist/queues/localAPI.d.ts.map +1 -1
  310. package/dist/queues/localAPI.js +26 -67
  311. package/dist/queues/localAPI.js.map +1 -1
  312. package/dist/queues/operations/handleSchedules/index.d.ts.map +1 -1
  313. package/dist/queues/operations/handleSchedules/index.js +1 -4
  314. package/dist/queues/operations/handleSchedules/index.js.map +1 -1
  315. package/dist/queues/operations/runJobs/index.d.ts.map +1 -1
  316. package/dist/queues/operations/runJobs/index.js +40 -37
  317. package/dist/queues/operations/runJobs/index.js.map +1 -1
  318. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.d.ts.map +1 -1
  319. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +3 -22
  320. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
  321. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts.map +1 -1
  322. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js +0 -2
  323. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js.map +1 -1
  324. package/dist/queues/utilities/updateJob.d.ts +1 -3
  325. package/dist/queues/utilities/updateJob.d.ts.map +1 -1
  326. package/dist/queues/utilities/updateJob.js +2 -18
  327. package/dist/queues/utilities/updateJob.js.map +1 -1
  328. package/dist/types/index.d.ts +44 -0
  329. package/dist/types/index.d.ts.map +1 -1
  330. package/dist/types/index.js.map +1 -1
  331. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  332. package/dist/uploads/getBaseFields.js +35 -69
  333. package/dist/uploads/getBaseFields.js.map +1 -1
  334. package/dist/uploads/getSafeFilename.d.ts +9 -4
  335. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  336. package/dist/uploads/getSafeFilename.js +5 -5
  337. package/dist/uploads/getSafeFilename.js.map +1 -1
  338. package/dist/utilities/appendDateTimezoneSelectFields.d.ts +13 -0
  339. package/dist/utilities/appendDateTimezoneSelectFields.d.ts.map +1 -0
  340. package/dist/utilities/appendDateTimezoneSelectFields.js +47 -0
  341. package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -0
  342. package/dist/utilities/appendUploadSelectFields.d.ts.map +1 -1
  343. package/dist/utilities/appendUploadSelectFields.js +3 -0
  344. package/dist/utilities/appendUploadSelectFields.js.map +1 -1
  345. package/dist/utilities/extractID.js +1 -1
  346. package/dist/utilities/extractID.js.map +1 -1
  347. package/dist/utilities/formatAdminURL.d.ts +13 -2
  348. package/dist/utilities/formatAdminURL.d.ts.map +1 -1
  349. package/dist/utilities/formatAdminURL.js.map +1 -1
  350. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  351. package/dist/utilities/handleEndpoints.js +0 -1
  352. package/dist/utilities/handleEndpoints.js.map +1 -1
  353. package/dist/utilities/resolveSelect.d.ts +16 -0
  354. package/dist/utilities/resolveSelect.d.ts.map +1 -0
  355. package/dist/utilities/resolveSelect.js +19 -0
  356. package/dist/utilities/resolveSelect.js.map +1 -0
  357. package/dist/utilities/sanitizeSelect.d.ts +1 -2
  358. package/dist/utilities/sanitizeSelect.d.ts.map +1 -1
  359. package/dist/utilities/sanitizeSelect.js +19 -25
  360. package/dist/utilities/sanitizeSelect.js.map +1 -1
  361. package/dist/versions/baseFields.d.ts.map +1 -1
  362. package/dist/versions/baseFields.js +3 -2
  363. package/dist/versions/baseFields.js.map +1 -1
  364. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  365. package/dist/versions/buildCollectionFields.js +0 -1
  366. package/dist/versions/buildCollectionFields.js.map +1 -1
  367. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  368. package/dist/versions/buildGlobalFields.js +0 -1
  369. package/dist/versions/buildGlobalFields.js.map +1 -1
  370. package/dist/versions/payloadPackageList.d.ts.map +1 -1
  371. package/dist/versions/payloadPackageList.js +0 -1
  372. package/dist/versions/payloadPackageList.js.map +1 -1
  373. package/package.json +4 -4
  374. package/dist/admin/views/folderList.d.ts +0 -56
  375. package/dist/admin/views/folderList.d.ts.map +0 -1
  376. package/dist/admin/views/folderList.js +0 -3
  377. package/dist/admin/views/folderList.js.map +0 -1
  378. package/dist/folders/addFolderCollection.d.ts +0 -10
  379. package/dist/folders/addFolderCollection.d.ts.map +0 -1
  380. package/dist/folders/addFolderCollection.js +0 -26
  381. package/dist/folders/addFolderCollection.js.map +0 -1
  382. package/dist/folders/addFolderFieldToCollection.d.ts +0 -8
  383. package/dist/folders/addFolderFieldToCollection.d.ts.map +0 -1
  384. package/dist/folders/addFolderFieldToCollection.js +0 -20
  385. package/dist/folders/addFolderFieldToCollection.js.map +0 -1
  386. package/dist/folders/buildFolderField.d.ts +0 -8
  387. package/dist/folders/buildFolderField.d.ts.map +0 -1
  388. package/dist/folders/buildFolderField.js +0 -87
  389. package/dist/folders/buildFolderField.js.map +0 -1
  390. package/dist/folders/constants.d.ts +0 -3
  391. package/dist/folders/constants.d.ts.map +0 -1
  392. package/dist/folders/constants.js +0 -4
  393. package/dist/folders/constants.js.map +0 -1
  394. package/dist/folders/createFolderCollection.d.ts +0 -11
  395. package/dist/folders/createFolderCollection.d.ts.map +0 -1
  396. package/dist/folders/createFolderCollection.js +0 -115
  397. package/dist/folders/createFolderCollection.js.map +0 -1
  398. package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts +0 -8
  399. package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts.map +0 -1
  400. package/dist/folders/hooks/deleteSubfoldersAfterDelete.js +0 -15
  401. package/dist/folders/hooks/deleteSubfoldersAfterDelete.js.map +0 -1
  402. package/dist/folders/hooks/dissasociateAfterDelete.d.ts +0 -8
  403. package/dist/folders/hooks/dissasociateAfterDelete.d.ts.map +0 -1
  404. package/dist/folders/hooks/dissasociateAfterDelete.js +0 -20
  405. package/dist/folders/hooks/dissasociateAfterDelete.js.map +0 -1
  406. package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts +0 -5
  407. package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts.map +0 -1
  408. package/dist/folders/hooks/ensureSafeCollectionsChange.js +0 -107
  409. package/dist/folders/hooks/ensureSafeCollectionsChange.js.map +0 -1
  410. package/dist/folders/hooks/reparentChildFolder.d.ts +0 -24
  411. package/dist/folders/hooks/reparentChildFolder.d.ts.map +0 -1
  412. package/dist/folders/hooks/reparentChildFolder.js +0 -72
  413. package/dist/folders/hooks/reparentChildFolder.js.map +0 -1
  414. package/dist/folders/types.d.ts +0 -118
  415. package/dist/folders/types.d.ts.map +0 -1
  416. package/dist/folders/types.js.map +0 -1
  417. package/dist/folders/utils/buildFolderWhereConstraints.d.ts +0 -13
  418. package/dist/folders/utils/buildFolderWhereConstraints.d.ts.map +0 -1
  419. package/dist/folders/utils/buildFolderWhereConstraints.js +0 -45
  420. package/dist/folders/utils/buildFolderWhereConstraints.js.map +0 -1
  421. package/dist/folders/utils/formatFolderOrDocumentItem.d.ts +0 -12
  422. package/dist/folders/utils/formatFolderOrDocumentItem.d.ts.map +0 -1
  423. package/dist/folders/utils/formatFolderOrDocumentItem.js +0 -30
  424. package/dist/folders/utils/formatFolderOrDocumentItem.js.map +0 -1
  425. package/dist/folders/utils/getFolderBreadcrumbs.d.ts +0 -14
  426. package/dist/folders/utils/getFolderBreadcrumbs.d.ts.map +0 -1
  427. package/dist/folders/utils/getFolderBreadcrumbs.js +0 -45
  428. package/dist/folders/utils/getFolderBreadcrumbs.js.map +0 -1
  429. package/dist/folders/utils/getFolderData.d.ts +0 -33
  430. package/dist/folders/utils/getFolderData.d.ts.map +0 -1
  431. package/dist/folders/utils/getFolderData.js +0 -88
  432. package/dist/folders/utils/getFolderData.js.map +0 -1
  433. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts +0 -24
  434. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts.map +0 -1
  435. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js +0 -66
  436. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js.map +0 -1
  437. package/dist/folders/utils/getOrphanedDocs.d.ts +0 -15
  438. package/dist/folders/utils/getOrphanedDocs.d.ts.map +0 -1
  439. package/dist/folders/utils/getOrphanedDocs.js +0 -40
  440. package/dist/folders/utils/getOrphanedDocs.js.map +0 -1
  441. /package/dist/{folders → database/migrations/config}/types.js +0 -0
@@ -0,0 +1,11 @@
1
+ import type { SingleRelationshipField } from '../fields/config/types.js';
2
+ export declare const buildParentField: ({ collectionSlug, injectHeaderButton, overrides, parentFieldName, }: {
3
+ collectionSlug: string;
4
+ /**
5
+ * When true, uses NullField and injects a header button for parent selection
6
+ */
7
+ injectHeaderButton?: boolean;
8
+ overrides?: Partial<SingleRelationshipField>;
9
+ parentFieldName: string;
10
+ }) => SingleRelationshipField;
11
+ //# sourceMappingURL=buildParentField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildParentField.d.ts","sourceRoot":"","sources":["../../src/hierarchy/buildParentField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAExE,eAAO,MAAM,gBAAgB,wEAK1B;IACD,cAAc,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAC5C,eAAe,EAAE,MAAM,CAAA;CACxB,KAAG,uBA0CH,CAAA"}
@@ -0,0 +1,42 @@
1
+ export const buildParentField = ({ collectionSlug, injectHeaderButton = false, overrides = {}, parentFieldName })=>{
2
+ const field = {
3
+ name: parentFieldName,
4
+ type: 'relationship',
5
+ admin: {
6
+ ...injectHeaderButton && {
7
+ components: {
8
+ Field: '@payloadcms/ui#NullField'
9
+ }
10
+ },
11
+ position: 'sidebar'
12
+ },
13
+ hasMany: false,
14
+ index: true,
15
+ label: 'Parent',
16
+ localized: false,
17
+ relationTo: collectionSlug,
18
+ ...injectHeaderButton && {
19
+ custom: {
20
+ hierarchy: {
21
+ // Inform hierarchy UI to inject the header button for this parent field
22
+ injectHeaderButton: true
23
+ }
24
+ }
25
+ }
26
+ };
27
+ if (overrides?.admin) {
28
+ field.admin = {
29
+ ...field.admin || {},
30
+ ...overrides.admin
31
+ };
32
+ if (overrides.admin.components && field.admin) {
33
+ field.admin.components = {
34
+ ...field.admin.components || {},
35
+ ...overrides.admin.components
36
+ };
37
+ }
38
+ }
39
+ return field;
40
+ };
41
+
42
+ //# sourceMappingURL=buildParentField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hierarchy/buildParentField.ts"],"sourcesContent":["import type { SingleRelationshipField } from '../fields/config/types.js'\n\nexport const buildParentField = ({\n collectionSlug,\n injectHeaderButton = false,\n overrides = {},\n parentFieldName,\n}: {\n collectionSlug: string\n /**\n * When true, uses NullField and injects a header button for parent selection\n */\n injectHeaderButton?: boolean\n overrides?: Partial<SingleRelationshipField>\n parentFieldName: string\n}): SingleRelationshipField => {\n const field: SingleRelationshipField = {\n name: parentFieldName,\n type: 'relationship',\n admin: {\n ...(injectHeaderButton && {\n components: {\n Field: '@payloadcms/ui#NullField',\n },\n }),\n position: 'sidebar',\n },\n hasMany: false,\n index: true,\n label: 'Parent',\n localized: false,\n relationTo: collectionSlug, // Always self-referential\n ...(injectHeaderButton && {\n custom: {\n hierarchy: {\n // Inform hierarchy UI to inject the header button for this parent field\n injectHeaderButton: true,\n },\n },\n }),\n }\n\n if (overrides?.admin) {\n field.admin = {\n ...(field.admin || {}),\n ...overrides.admin,\n }\n\n if (overrides.admin.components && field.admin) {\n field.admin.components = {\n ...(field.admin.components || {}),\n ...overrides.admin.components,\n }\n }\n }\n\n return field\n}\n"],"names":["buildParentField","collectionSlug","injectHeaderButton","overrides","parentFieldName","field","name","type","admin","components","Field","position","hasMany","index","label","localized","relationTo","custom","hierarchy"],"mappings":"AAEA,OAAO,MAAMA,mBAAmB,CAAC,EAC/BC,cAAc,EACdC,qBAAqB,KAAK,EAC1BC,YAAY,CAAC,CAAC,EACdC,eAAe,EAShB;IACC,MAAMC,QAAiC;QACrCC,MAAMF;QACNG,MAAM;QACNC,OAAO;YACL,GAAIN,sBAAsB;gBACxBO,YAAY;oBACVC,OAAO;gBACT;YACF,CAAC;YACDC,UAAU;QACZ;QACAC,SAAS;QACTC,OAAO;QACPC,OAAO;QACPC,WAAW;QACXC,YAAYf;QACZ,GAAIC,sBAAsB;YACxBe,QAAQ;gBACNC,WAAW;oBACT,wEAAwE;oBACxEhB,oBAAoB;gBACtB;YACF;QACF,CAAC;IACH;IAEA,IAAIC,WAAWK,OAAO;QACpBH,MAAMG,KAAK,GAAG;YACZ,GAAIH,MAAMG,KAAK,IAAI,CAAC,CAAC;YACrB,GAAGL,UAAUK,KAAK;QACpB;QAEA,IAAIL,UAAUK,KAAK,CAACC,UAAU,IAAIJ,MAAMG,KAAK,EAAE;YAC7CH,MAAMG,KAAK,CAACC,UAAU,GAAG;gBACvB,GAAIJ,MAAMG,KAAK,CAACC,UAAU,IAAI,CAAC,CAAC;gBAChC,GAAGN,UAAUK,KAAK,CAACC,UAAU;YAC/B;QACF;IACF;IAEA,OAAOJ;AACT,EAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Default field names and constants for hierarchy feature
3
+ */
4
+ export declare const HIERARCHY_SLUG_PATH_FIELD = "_h_slugPath";
5
+ export declare const HIERARCHY_TITLE_PATH_FIELD = "_h_titlePath";
6
+ export declare const HIERARCHY_DEFAULT_LOCALE = "en";
7
+ /** Default limit for hierarchy tree queries */
8
+ export declare const DEFAULT_HIERARCHY_TREE_LIMIT = 100;
9
+ /** Default limit for hierarchy list view table queries */
10
+ export declare const DEFAULT_HIERARCHY_LIST_LIMIT = 25;
11
+ /** Default value for allowing hasMany on hierarchy fields */
12
+ export declare const DEFAULT_ALLOW_HAS_MANY = true;
13
+ /** Generate a hierarchy field name from a hierarchy slug (e.g., 'folders' -> '_h_folders') */
14
+ export declare const getHierarchyFieldName: (hierarchySlug: string) => string;
15
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/hierarchy/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,yBAAyB,gBAAgB,CAAA;AACtD,eAAO,MAAM,0BAA0B,iBAAiB,CAAA;AACxD,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAE5C,+CAA+C;AAC/C,eAAO,MAAM,4BAA4B,MAAM,CAAA;AAE/C,0DAA0D;AAC1D,eAAO,MAAM,4BAA4B,KAAK,CAAA;AAE9C,6DAA6D;AAC7D,eAAO,MAAM,sBAAsB,OAAO,CAAA;AAE1C,8FAA8F;AAC9F,eAAO,MAAM,qBAAqB,kBAAmB,MAAM,KAAG,MAA+B,CAAA"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Default field names and constants for hierarchy feature
3
+ */ export const HIERARCHY_SLUG_PATH_FIELD = '_h_slugPath';
4
+ export const HIERARCHY_TITLE_PATH_FIELD = '_h_titlePath';
5
+ export const HIERARCHY_DEFAULT_LOCALE = 'en';
6
+ /** Default limit for hierarchy tree queries */ export const DEFAULT_HIERARCHY_TREE_LIMIT = 100;
7
+ /** Default limit for hierarchy list view table queries */ export const DEFAULT_HIERARCHY_LIST_LIMIT = 25;
8
+ /** Default value for allowing hasMany on hierarchy fields */ export const DEFAULT_ALLOW_HAS_MANY = true;
9
+ /** Generate a hierarchy field name from a hierarchy slug (e.g., 'folders' -> '_h_folders') */ export const getHierarchyFieldName = (hierarchySlug)=>`_h_${hierarchySlug}`;
10
+
11
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hierarchy/constants.ts"],"sourcesContent":["/**\n * Default field names and constants for hierarchy feature\n */\n\nexport const HIERARCHY_SLUG_PATH_FIELD = '_h_slugPath'\nexport const HIERARCHY_TITLE_PATH_FIELD = '_h_titlePath'\nexport const HIERARCHY_DEFAULT_LOCALE = 'en'\n\n/** Default limit for hierarchy tree queries */\nexport const DEFAULT_HIERARCHY_TREE_LIMIT = 100\n\n/** Default limit for hierarchy list view table queries */\nexport const DEFAULT_HIERARCHY_LIST_LIMIT = 25\n\n/** Default value for allowing hasMany on hierarchy fields */\nexport const DEFAULT_ALLOW_HAS_MANY = true\n\n/** Generate a hierarchy field name from a hierarchy slug (e.g., 'folders' -> '_h_folders') */\nexport const getHierarchyFieldName = (hierarchySlug: string): string => `_h_${hierarchySlug}`\n"],"names":["HIERARCHY_SLUG_PATH_FIELD","HIERARCHY_TITLE_PATH_FIELD","HIERARCHY_DEFAULT_LOCALE","DEFAULT_HIERARCHY_TREE_LIMIT","DEFAULT_HIERARCHY_LIST_LIMIT","DEFAULT_ALLOW_HAS_MANY","getHierarchyFieldName","hierarchySlug"],"mappings":"AAAA;;CAEC,GAED,OAAO,MAAMA,4BAA4B,cAAa;AACtD,OAAO,MAAMC,6BAA6B,eAAc;AACxD,OAAO,MAAMC,2BAA2B,KAAI;AAE5C,6CAA6C,GAC7C,OAAO,MAAMC,+BAA+B,IAAG;AAE/C,wDAAwD,GACxD,OAAO,MAAMC,+BAA+B,GAAE;AAE9C,2DAA2D,GAC3D,OAAO,MAAMC,yBAAyB,KAAI;AAE1C,4FAA4F,GAC5F,OAAO,MAAMC,wBAAwB,CAACC,gBAAkC,CAAC,GAAG,EAAEA,eAAe,CAAA"}
@@ -0,0 +1,39 @@
1
+ import type { RelationshipField, SingleRelationshipField } from '../fields/config/types.js';
2
+ /**
3
+ * Options for creating a folder relationship field.
4
+ * All SingleRelationshipField properties are available except name, type, relationTo, and hasMany
5
+ * which are managed by the folder system.
6
+ */
7
+ export type CreateFolderFieldOptions = {
8
+ /**
9
+ * The slug of the hierarchy collection this field references (e.g., 'folders')
10
+ */
11
+ relationTo: string;
12
+ } & Pick<Partial<SingleRelationshipField>, 'admin' | 'label' | 'required'>;
13
+ /**
14
+ * Creates a relationship field for folder-style hierarchies (single-select).
15
+ *
16
+ * This field:
17
+ * - Has hasMany:false (single folder selection)
18
+ * - Uses NullField to render nothing in the form (no DOM output)
19
+ * - Injects a header button for folder selection via miller columns UI
20
+ *
21
+ * Use this in your collection's fields array to add a folder relationship.
22
+ * The field name is automatically generated based on the hierarchy slug.
23
+ *
24
+ * @example
25
+ * import { createFolderField } from 'payload'
26
+ *
27
+ * const Posts: CollectionConfig = {
28
+ * slug: 'posts',
29
+ * fields: [
30
+ * { name: 'title', type: 'text' },
31
+ * createFolderField({
32
+ * relationTo: 'folders',
33
+ * label: 'Folder',
34
+ * }),
35
+ * ],
36
+ * }
37
+ */
38
+ export declare function createFolderField(options: CreateFolderFieldOptions): RelationshipField;
39
+ //# sourceMappingURL=createFolderField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFolderField.d.ts","sourceRoot":"","sources":["../../src/hierarchy/createFolderField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAI3F;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC,CAAA;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CA2BtF"}
@@ -0,0 +1,54 @@
1
+ import { getHierarchyFieldName } from './constants.js';
2
+ /**
3
+ * Creates a relationship field for folder-style hierarchies (single-select).
4
+ *
5
+ * This field:
6
+ * - Has hasMany:false (single folder selection)
7
+ * - Uses NullField to render nothing in the form (no DOM output)
8
+ * - Injects a header button for folder selection via miller columns UI
9
+ *
10
+ * Use this in your collection's fields array to add a folder relationship.
11
+ * The field name is automatically generated based on the hierarchy slug.
12
+ *
13
+ * @example
14
+ * import { createFolderField } from 'payload'
15
+ *
16
+ * const Posts: CollectionConfig = {
17
+ * slug: 'posts',
18
+ * fields: [
19
+ * { name: 'title', type: 'text' },
20
+ * createFolderField({
21
+ * relationTo: 'folders',
22
+ * label: 'Folder',
23
+ * }),
24
+ * ],
25
+ * }
26
+ */ export function createFolderField(options) {
27
+ const { admin: adminOverrides, label, relationTo, ...restOptions } = options;
28
+ const { components: componentOverrides, ...restAdminOverrides } = adminOverrides || {};
29
+ return {
30
+ name: getHierarchyFieldName(relationTo),
31
+ type: 'relationship',
32
+ admin: {
33
+ position: 'sidebar',
34
+ ...restAdminOverrides,
35
+ components: {
36
+ // NullField renders nothing - the header button handles the UI
37
+ Field: '@payloadcms/ui#NullField',
38
+ ...componentOverrides
39
+ }
40
+ },
41
+ custom: {
42
+ hierarchy: {
43
+ injectHeaderButton: true
44
+ }
45
+ },
46
+ hasMany: false,
47
+ index: true,
48
+ label: label ?? 'Folder',
49
+ relationTo,
50
+ ...restOptions
51
+ };
52
+ }
53
+
54
+ //# sourceMappingURL=createFolderField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hierarchy/createFolderField.ts"],"sourcesContent":["import type { RelationshipField, SingleRelationshipField } from '../fields/config/types.js'\n\nimport { getHierarchyFieldName } from './constants.js'\n\n/**\n * Options for creating a folder relationship field.\n * All SingleRelationshipField properties are available except name, type, relationTo, and hasMany\n * which are managed by the folder system.\n */\nexport type CreateFolderFieldOptions = {\n /**\n * The slug of the hierarchy collection this field references (e.g., 'folders')\n */\n relationTo: string\n} & Pick<Partial<SingleRelationshipField>, 'admin' | 'label' | 'required'>\n\n/**\n * Creates a relationship field for folder-style hierarchies (single-select).\n *\n * This field:\n * - Has hasMany:false (single folder selection)\n * - Uses NullField to render nothing in the form (no DOM output)\n * - Injects a header button for folder selection via miller columns UI\n *\n * Use this in your collection's fields array to add a folder relationship.\n * The field name is automatically generated based on the hierarchy slug.\n *\n * @example\n * import { createFolderField } from 'payload'\n *\n * const Posts: CollectionConfig = {\n * slug: 'posts',\n * fields: [\n * { name: 'title', type: 'text' },\n * createFolderField({\n * relationTo: 'folders',\n * label: 'Folder',\n * }),\n * ],\n * }\n */\nexport function createFolderField(options: CreateFolderFieldOptions): RelationshipField {\n const { admin: adminOverrides, label, relationTo, ...restOptions } = options\n const { components: componentOverrides, ...restAdminOverrides } = adminOverrides || {}\n\n return {\n name: getHierarchyFieldName(relationTo),\n type: 'relationship',\n admin: {\n position: 'sidebar',\n ...restAdminOverrides,\n components: {\n // NullField renders nothing - the header button handles the UI\n Field: '@payloadcms/ui#NullField',\n ...componentOverrides,\n },\n },\n custom: {\n hierarchy: {\n injectHeaderButton: true,\n },\n },\n hasMany: false,\n index: true,\n label: label ?? 'Folder',\n relationTo,\n ...restOptions,\n } as RelationshipField\n}\n"],"names":["getHierarchyFieldName","createFolderField","options","admin","adminOverrides","label","relationTo","restOptions","components","componentOverrides","restAdminOverrides","name","type","position","Field","custom","hierarchy","injectHeaderButton","hasMany","index"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,iBAAgB;AActD;;;;;;;;;;;;;;;;;;;;;;;;CAwBC,GACD,OAAO,SAASC,kBAAkBC,OAAiC;IACjE,MAAM,EAAEC,OAAOC,cAAc,EAAEC,KAAK,EAAEC,UAAU,EAAE,GAAGC,aAAa,GAAGL;IACrE,MAAM,EAAEM,YAAYC,kBAAkB,EAAE,GAAGC,oBAAoB,GAAGN,kBAAkB,CAAC;IAErF,OAAO;QACLO,MAAMX,sBAAsBM;QAC5BM,MAAM;QACNT,OAAO;YACLU,UAAU;YACV,GAAGH,kBAAkB;YACrBF,YAAY;gBACV,+DAA+D;gBAC/DM,OAAO;gBACP,GAAGL,kBAAkB;YACvB;QACF;QACAM,QAAQ;YACNC,WAAW;gBACTC,oBAAoB;YACtB;QACF;QACAC,SAAS;QACTC,OAAO;QACPd,OAAOA,SAAS;QAChBC;QACA,GAAGC,WAAW;IAChB;AACF"}
@@ -0,0 +1,44 @@
1
+ import type { RelationshipField } from '../fields/config/types.js';
2
+ /**
3
+ * Options for creating a tag relationship field.
4
+ * All RelationshipFieldMany properties are available except name, type, and relationTo
5
+ * which are managed by the tag system.
6
+ */
7
+ export type CreateTagFieldOptions = {
8
+ /**
9
+ * Whether to allow multiple tags (defaults to true)
10
+ * @default true
11
+ */
12
+ hasMany?: boolean;
13
+ /**
14
+ * The slug of the hierarchy collection this field references (e.g., 'tags')
15
+ */
16
+ relationTo: string;
17
+ } & Pick<Partial<RelationshipField>, 'admin' | 'label' | 'required'>;
18
+ /**
19
+ * Creates a relationship field for tag-style hierarchies (multi-select by default).
20
+ *
21
+ * This field:
22
+ * - Has hasMany:true by default (multiple tag selection)
23
+ * - Is positioned in the sidebar by default
24
+ * - Does NOT inject a header button (tags use standard relationship UI)
25
+ *
26
+ * Use this in your collection's fields array to add a tag relationship.
27
+ * The field name is automatically generated based on the hierarchy slug.
28
+ *
29
+ * @example
30
+ * import { createTagField } from 'payload'
31
+ *
32
+ * const Posts: CollectionConfig = {
33
+ * slug: 'posts',
34
+ * fields: [
35
+ * { name: 'title', type: 'text' },
36
+ * createTagField({
37
+ * relationTo: 'tags',
38
+ * label: 'Tags',
39
+ * }),
40
+ * ],
41
+ * }
42
+ */
43
+ export declare function createTagField(options: CreateTagFieldOptions): RelationshipField;
44
+ //# sourceMappingURL=createTagField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTagField.d.ts","sourceRoot":"","sources":["../../src/hierarchy/createTagField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAIlE;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC,CAAA;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,iBAAiB,CAqBhF"}
@@ -0,0 +1,48 @@
1
+ import { getHierarchyFieldName } from './constants.js';
2
+ /**
3
+ * Creates a relationship field for tag-style hierarchies (multi-select by default).
4
+ *
5
+ * This field:
6
+ * - Has hasMany:true by default (multiple tag selection)
7
+ * - Is positioned in the sidebar by default
8
+ * - Does NOT inject a header button (tags use standard relationship UI)
9
+ *
10
+ * Use this in your collection's fields array to add a tag relationship.
11
+ * The field name is automatically generated based on the hierarchy slug.
12
+ *
13
+ * @example
14
+ * import { createTagField } from 'payload'
15
+ *
16
+ * const Posts: CollectionConfig = {
17
+ * slug: 'posts',
18
+ * fields: [
19
+ * { name: 'title', type: 'text' },
20
+ * createTagField({
21
+ * relationTo: 'tags',
22
+ * label: 'Tags',
23
+ * }),
24
+ * ],
25
+ * }
26
+ */ export function createTagField(options) {
27
+ const { admin: adminOverrides, hasMany = true, label, relationTo, ...restOptions } = options;
28
+ const { components: componentOverrides, ...restAdminOverrides } = adminOverrides || {};
29
+ return {
30
+ name: getHierarchyFieldName(relationTo),
31
+ type: 'relationship',
32
+ admin: {
33
+ position: 'sidebar',
34
+ ...restAdminOverrides,
35
+ components: {
36
+ Field: '@payloadcms/ui/rsc#HierarchyField',
37
+ ...componentOverrides
38
+ }
39
+ },
40
+ hasMany,
41
+ index: true,
42
+ label: label ?? 'Tags',
43
+ relationTo,
44
+ ...restOptions
45
+ };
46
+ }
47
+
48
+ //# sourceMappingURL=createTagField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hierarchy/createTagField.ts"],"sourcesContent":["import type { RelationshipField } from '../fields/config/types.js'\n\nimport { getHierarchyFieldName } from './constants.js'\n\n/**\n * Options for creating a tag relationship field.\n * All RelationshipFieldMany properties are available except name, type, and relationTo\n * which are managed by the tag system.\n */\nexport type CreateTagFieldOptions = {\n /**\n * Whether to allow multiple tags (defaults to true)\n * @default true\n */\n hasMany?: boolean\n /**\n * The slug of the hierarchy collection this field references (e.g., 'tags')\n */\n relationTo: string\n} & Pick<Partial<RelationshipField>, 'admin' | 'label' | 'required'>\n\n/**\n * Creates a relationship field for tag-style hierarchies (multi-select by default).\n *\n * This field:\n * - Has hasMany:true by default (multiple tag selection)\n * - Is positioned in the sidebar by default\n * - Does NOT inject a header button (tags use standard relationship UI)\n *\n * Use this in your collection's fields array to add a tag relationship.\n * The field name is automatically generated based on the hierarchy slug.\n *\n * @example\n * import { createTagField } from 'payload'\n *\n * const Posts: CollectionConfig = {\n * slug: 'posts',\n * fields: [\n * { name: 'title', type: 'text' },\n * createTagField({\n * relationTo: 'tags',\n * label: 'Tags',\n * }),\n * ],\n * }\n */\nexport function createTagField(options: CreateTagFieldOptions): RelationshipField {\n const { admin: adminOverrides, hasMany = true, label, relationTo, ...restOptions } = options\n const { components: componentOverrides, ...restAdminOverrides } = adminOverrides || {}\n\n return {\n name: getHierarchyFieldName(relationTo),\n type: 'relationship',\n admin: {\n position: 'sidebar',\n ...restAdminOverrides,\n components: {\n Field: '@payloadcms/ui/rsc#HierarchyField',\n ...componentOverrides,\n },\n },\n hasMany,\n index: true,\n label: label ?? 'Tags',\n relationTo,\n ...restOptions,\n } as RelationshipField\n}\n"],"names":["getHierarchyFieldName","createTagField","options","admin","adminOverrides","hasMany","label","relationTo","restOptions","components","componentOverrides","restAdminOverrides","name","type","position","Field","index"],"mappings":"AAEA,SAASA,qBAAqB,QAAQ,iBAAgB;AAmBtD;;;;;;;;;;;;;;;;;;;;;;;;CAwBC,GACD,OAAO,SAASC,eAAeC,OAA8B;IAC3D,MAAM,EAAEC,OAAOC,cAAc,EAAEC,UAAU,IAAI,EAAEC,KAAK,EAAEC,UAAU,EAAE,GAAGC,aAAa,GAAGN;IACrF,MAAM,EAAEO,YAAYC,kBAAkB,EAAE,GAAGC,oBAAoB,GAAGP,kBAAkB,CAAC;IAErF,OAAO;QACLQ,MAAMZ,sBAAsBO;QAC5BM,MAAM;QACNV,OAAO;YACLW,UAAU;YACV,GAAGH,kBAAkB;YACrBF,YAAY;gBACVM,OAAO;gBACP,GAAGL,kBAAkB;YACvB;QACF;QACAL;QACAW,OAAO;QACPV,OAAOA,SAAS;QAChBC;QACA,GAAGC,WAAW;IAChB;AACF"}
@@ -0,0 +1,27 @@
1
+ import type { TypeWithID } from '../collections/config/types.js';
2
+ import type { PayloadRequest, Where } from '../types/index.js';
3
+ export type GetInitialTreeDataArgs = {
4
+ /** Base filter to apply to all queries (e.g., tenant filter) */
5
+ baseFilter?: null | Where;
6
+ collectionSlug: string;
7
+ expandedNodeIds?: (number | string)[];
8
+ /** Filter tree to only show folders that allow these collection types (or are unrestricted) */
9
+ filterByCollections?: string[];
10
+ limit?: number;
11
+ payload: PayloadRequest['payload'];
12
+ /** The currently selected node ID. When provided, ensures siblings are loaded to include this node. */
13
+ selectedNodeId?: null | number | string;
14
+ /** The parent ID of the selected node. Required when selectedNodeId is provided. */
15
+ selectedNodeParentId?: null | number | string;
16
+ user: PayloadRequest['user'];
17
+ };
18
+ export type InitialTreeData = {
19
+ docs: TypeWithID[];
20
+ loadedParents: Record<string, {
21
+ hasMore: boolean;
22
+ loadedCount?: number;
23
+ totalDocs: number;
24
+ }>;
25
+ };
26
+ export declare const getInitialTreeData: ({ baseFilter, collectionSlug, expandedNodeIds, filterByCollections, limit, payload, selectedNodeId, selectedNodeParentId, user, }: GetInitialTreeDataArgs) => Promise<InitialTreeData>;
27
+ //# sourceMappingURL=getInitialTreeData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getInitialTreeData.d.ts","sourceRoot":"","sources":["../../src/hierarchy/getInitialTreeData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAI9D,MAAM,MAAM,sBAAsB,GAAG;IACnC,gEAAgE;IAChE,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACrC,+FAA+F;IAC/F,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;IAClC,uGAAuG;IACvG,cAAc,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;IACvC,oFAAoF;IACpF,oBAAoB,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;IAC7C,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,UAAU,EAAE,CAAA;IAElB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC7F,CAAA;AAED,eAAO,MAAM,kBAAkB,sIAU5B,sBAAsB,KAAG,OAAO,CAAC,eAAe,CA0IlD,CAAA"}
@@ -0,0 +1,125 @@
1
+ import { DEFAULT_HIERARCHY_TREE_LIMIT } from '../hierarchy/constants.js';
2
+ export const getInitialTreeData = async ({ baseFilter, collectionSlug, expandedNodeIds = [], filterByCollections, limit, payload, selectedNodeId, selectedNodeParentId, user })=>{
3
+ const collectionConfig = payload.collections[collectionSlug]?.config;
4
+ if (!collectionConfig || !collectionConfig.hierarchy) {
5
+ throw new Error(`Collection ${collectionSlug} is not a hierarchy`);
6
+ }
7
+ const hierarchyConfig = collectionConfig.hierarchy;
8
+ const parentFieldName = hierarchyConfig.parentFieldName;
9
+ const useAsTitle = collectionConfig.admin?.useAsTitle ?? 'id';
10
+ // Get typeFieldName for filtering
11
+ const typeFieldName = hierarchyConfig.collectionSpecific && typeof hierarchyConfig.collectionSpecific === 'object' ? hierarchyConfig.collectionSpecific.fieldName : undefined;
12
+ // Build filter condition if filterByCollections is provided
13
+ // Exclude the hierarchy collection itself (folders always show folders)
14
+ const filteredTypes = filterByCollections?.filter((t)=>t !== collectionSlug);
15
+ // Get all possible type values from relatedCollections for detecting empty arrays
16
+ const allPossibleTypes = hierarchyConfig.relatedCollections ? Object.keys(hierarchyConfig.relatedCollections) : [];
17
+ const filterCondition = filteredTypes?.length && typeFieldName ? {
18
+ or: [
19
+ {
20
+ [typeFieldName]: {
21
+ in: filteredTypes
22
+ }
23
+ },
24
+ {
25
+ [typeFieldName]: {
26
+ exists: false
27
+ }
28
+ },
29
+ // Include unrestricted folders with empty allowedTypes array
30
+ // Using not_in with all possible values matches empty arrays in both MongoDB and Postgres
31
+ ...allPossibleTypes.length > 0 ? [
32
+ {
33
+ [typeFieldName]: {
34
+ not_in: allPossibleTypes
35
+ }
36
+ }
37
+ ] : []
38
+ ]
39
+ } : null;
40
+ // Use limit from config if not provided, fallback to config's treeLimit
41
+ const effectiveLimit = limit ?? hierarchyConfig.admin?.treeLimit ?? DEFAULT_HIERARCHY_TREE_LIMIT;
42
+ const allDocs = [];
43
+ const loadedParents = {};
44
+ // Normalize selectedNodeParentId: treat null/undefined as 'null' (root level)
45
+ const normalizedSelectedParentId = selectedNodeParentId === null || selectedNodeParentId === undefined ? 'null' : String(selectedNodeParentId);
46
+ // Helper to check if selectedNodeId is among siblings at a given parent level
47
+ const needsSelectedNodeIncluded = (parentKey)=>{
48
+ return !!selectedNodeId && normalizedSelectedParentId === parentKey;
49
+ };
50
+ // Helper to fetch children with optional selectedNodeId inclusion
51
+ const fetchChildrenForParent = async (parentKey, parentCondition)=>{
52
+ const mustIncludeSelected = needsSelectedNodeIncluded(parentKey);
53
+ let accumulatedDocs = [];
54
+ let currentPage = 1;
55
+ let hasMore = true;
56
+ let totalDocs = 0;
57
+ let foundSelected = false;
58
+ // Combine parent condition with filter condition and baseFilter
59
+ const conditions = [
60
+ parentCondition
61
+ ];
62
+ if (filterCondition) {
63
+ conditions.push(filterCondition);
64
+ }
65
+ if (baseFilter) {
66
+ conditions.push(baseFilter);
67
+ }
68
+ const whereClause = conditions.length > 1 ? {
69
+ and: conditions
70
+ } : parentCondition;
71
+ while(hasMore){
72
+ const result = await payload.find({
73
+ collection: collectionSlug,
74
+ depth: 0,
75
+ limit: effectiveLimit,
76
+ overrideAccess: false,
77
+ page: currentPage,
78
+ sort: useAsTitle,
79
+ user,
80
+ where: whereClause
81
+ });
82
+ accumulatedDocs = [
83
+ ...accumulatedDocs,
84
+ ...result.docs
85
+ ];
86
+ totalDocs = result.totalDocs;
87
+ hasMore = result.hasNextPage;
88
+ // Check if selectedNodeId is in this page's results
89
+ if (mustIncludeSelected && !foundSelected) {
90
+ foundSelected = result.docs.some((doc)=>String(doc.id) === String(selectedNodeId));
91
+ }
92
+ // Stop if we've found the selected node OR we only need first page
93
+ if (!mustIncludeSelected || foundSelected || !hasMore) {
94
+ break;
95
+ }
96
+ currentPage++;
97
+ }
98
+ allDocs.push(...accumulatedDocs);
99
+ loadedParents[parentKey] = {
100
+ hasMore,
101
+ loadedCount: accumulatedDocs.length,
102
+ totalDocs
103
+ };
104
+ };
105
+ // Query 1: Fetch root nodes
106
+ await fetchChildrenForParent('null', {
107
+ [parentFieldName]: {
108
+ exists: false
109
+ }
110
+ });
111
+ // Query 2: For each expanded node, fetch its children
112
+ for (const parentId of expandedNodeIds){
113
+ await fetchChildrenForParent(String(parentId), {
114
+ [parentFieldName]: {
115
+ equals: parentId
116
+ }
117
+ });
118
+ }
119
+ return {
120
+ docs: allDocs,
121
+ loadedParents
122
+ };
123
+ };
124
+
125
+ //# sourceMappingURL=getInitialTreeData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/hierarchy/getInitialTreeData.ts"],"sourcesContent":["import type { TypeWithID } from '../collections/config/types.js'\nimport type { PayloadRequest, Where } from '../types/index.js'\n\nimport { DEFAULT_HIERARCHY_TREE_LIMIT } from '../hierarchy/constants.js'\n\nexport type GetInitialTreeDataArgs = {\n /** Base filter to apply to all queries (e.g., tenant filter) */\n baseFilter?: null | Where\n collectionSlug: string\n expandedNodeIds?: (number | string)[]\n /** Filter tree to only show folders that allow these collection types (or are unrestricted) */\n filterByCollections?: string[]\n limit?: number\n payload: PayloadRequest['payload']\n /** The currently selected node ID. When provided, ensures siblings are loaded to include this node. */\n selectedNodeId?: null | number | string\n /** The parent ID of the selected node. Required when selectedNodeId is provided. */\n selectedNodeParentId?: null | number | string\n user: PayloadRequest['user']\n}\n\nexport type InitialTreeData = {\n docs: TypeWithID[]\n // Metadata about what was loaded - keyed by parent ID ('null' for root)\n loadedParents: Record<string, { hasMore: boolean; loadedCount?: number; totalDocs: number }>\n}\n\nexport const getInitialTreeData = async ({\n baseFilter,\n collectionSlug,\n expandedNodeIds = [],\n filterByCollections,\n limit,\n payload,\n selectedNodeId,\n selectedNodeParentId,\n user,\n}: GetInitialTreeDataArgs): Promise<InitialTreeData> => {\n const collectionConfig = payload.collections[collectionSlug]?.config\n\n if (!collectionConfig || !collectionConfig.hierarchy) {\n throw new Error(`Collection ${collectionSlug} is not a hierarchy`)\n }\n\n const hierarchyConfig = collectionConfig.hierarchy\n const parentFieldName = hierarchyConfig.parentFieldName\n const useAsTitle = collectionConfig.admin?.useAsTitle ?? 'id'\n\n // Get typeFieldName for filtering\n const typeFieldName =\n hierarchyConfig.collectionSpecific && typeof hierarchyConfig.collectionSpecific === 'object'\n ? hierarchyConfig.collectionSpecific.fieldName\n : undefined\n\n // Build filter condition if filterByCollections is provided\n // Exclude the hierarchy collection itself (folders always show folders)\n const filteredTypes = filterByCollections?.filter((t) => t !== collectionSlug)\n\n // Get all possible type values from relatedCollections for detecting empty arrays\n const allPossibleTypes = hierarchyConfig.relatedCollections\n ? Object.keys(hierarchyConfig.relatedCollections)\n : []\n\n const filterCondition =\n filteredTypes?.length && typeFieldName\n ? {\n or: [\n { [typeFieldName]: { in: filteredTypes } },\n { [typeFieldName]: { exists: false } }, // Include unrestricted folders (field doesn't exist)\n // Include unrestricted folders with empty allowedTypes array\n // Using not_in with all possible values matches empty arrays in both MongoDB and Postgres\n ...(allPossibleTypes.length > 0\n ? [{ [typeFieldName]: { not_in: allPossibleTypes } }]\n : []),\n ],\n }\n : null\n\n // Use limit from config if not provided, fallback to config's treeLimit\n const effectiveLimit = limit ?? hierarchyConfig.admin?.treeLimit ?? DEFAULT_HIERARCHY_TREE_LIMIT\n\n const allDocs: TypeWithID[] = []\n const loadedParents: Record<\n string,\n { hasMore: boolean; loadedCount: number; totalDocs: number }\n > = {}\n\n // Normalize selectedNodeParentId: treat null/undefined as 'null' (root level)\n const normalizedSelectedParentId =\n selectedNodeParentId === null || selectedNodeParentId === undefined\n ? 'null'\n : String(selectedNodeParentId)\n\n // Helper to check if selectedNodeId is among siblings at a given parent level\n const needsSelectedNodeIncluded = (parentKey: string): boolean => {\n return !!selectedNodeId && normalizedSelectedParentId === parentKey\n }\n\n // Helper to fetch children with optional selectedNodeId inclusion\n const fetchChildrenForParent = async (\n parentKey: string,\n parentCondition: Where,\n ): Promise<void> => {\n const mustIncludeSelected = needsSelectedNodeIncluded(parentKey)\n let accumulatedDocs: TypeWithID[] = []\n let currentPage = 1\n let hasMore = true\n let totalDocs = 0\n let foundSelected = false\n\n // Combine parent condition with filter condition and baseFilter\n const conditions: Where[] = [parentCondition]\n if (filterCondition) {\n conditions.push(filterCondition)\n }\n if (baseFilter) {\n conditions.push(baseFilter)\n }\n const whereClause = conditions.length > 1 ? { and: conditions } : parentCondition\n\n while (hasMore) {\n const result = await payload.find({\n collection: collectionSlug,\n depth: 0,\n limit: effectiveLimit,\n overrideAccess: false,\n page: currentPage,\n sort: useAsTitle,\n user,\n where: whereClause,\n })\n\n accumulatedDocs = [...accumulatedDocs, ...result.docs]\n totalDocs = result.totalDocs\n hasMore = result.hasNextPage\n\n // Check if selectedNodeId is in this page's results\n if (mustIncludeSelected && !foundSelected) {\n foundSelected = result.docs.some(\n (doc: TypeWithID) => String(doc.id) === String(selectedNodeId),\n )\n }\n\n // Stop if we've found the selected node OR we only need first page\n if (!mustIncludeSelected || foundSelected || !hasMore) {\n break\n }\n\n currentPage++\n }\n\n allDocs.push(...accumulatedDocs)\n loadedParents[parentKey] = {\n hasMore,\n loadedCount: accumulatedDocs.length,\n totalDocs,\n }\n }\n\n // Query 1: Fetch root nodes\n await fetchChildrenForParent('null', {\n [parentFieldName]: { exists: false },\n })\n\n // Query 2: For each expanded node, fetch its children\n for (const parentId of expandedNodeIds) {\n await fetchChildrenForParent(String(parentId), {\n [parentFieldName]: { equals: parentId },\n })\n }\n\n return {\n docs: allDocs,\n loadedParents,\n }\n}\n"],"names":["DEFAULT_HIERARCHY_TREE_LIMIT","getInitialTreeData","baseFilter","collectionSlug","expandedNodeIds","filterByCollections","limit","payload","selectedNodeId","selectedNodeParentId","user","collectionConfig","collections","config","hierarchy","Error","hierarchyConfig","parentFieldName","useAsTitle","admin","typeFieldName","collectionSpecific","fieldName","undefined","filteredTypes","filter","t","allPossibleTypes","relatedCollections","Object","keys","filterCondition","length","or","in","exists","not_in","effectiveLimit","treeLimit","allDocs","loadedParents","normalizedSelectedParentId","String","needsSelectedNodeIncluded","parentKey","fetchChildrenForParent","parentCondition","mustIncludeSelected","accumulatedDocs","currentPage","hasMore","totalDocs","foundSelected","conditions","push","whereClause","and","result","find","collection","depth","overrideAccess","page","sort","where","docs","hasNextPage","some","doc","id","loadedCount","parentId","equals"],"mappings":"AAGA,SAASA,4BAA4B,QAAQ,4BAA2B;AAwBxE,OAAO,MAAMC,qBAAqB,OAAO,EACvCC,UAAU,EACVC,cAAc,EACdC,kBAAkB,EAAE,EACpBC,mBAAmB,EACnBC,KAAK,EACLC,OAAO,EACPC,cAAc,EACdC,oBAAoB,EACpBC,IAAI,EACmB;IACvB,MAAMC,mBAAmBJ,QAAQK,WAAW,CAACT,eAAe,EAAEU;IAE9D,IAAI,CAACF,oBAAoB,CAACA,iBAAiBG,SAAS,EAAE;QACpD,MAAM,IAAIC,MAAM,CAAC,WAAW,EAAEZ,eAAe,mBAAmB,CAAC;IACnE;IAEA,MAAMa,kBAAkBL,iBAAiBG,SAAS;IAClD,MAAMG,kBAAkBD,gBAAgBC,eAAe;IACvD,MAAMC,aAAaP,iBAAiBQ,KAAK,EAAED,cAAc;IAEzD,kCAAkC;IAClC,MAAME,gBACJJ,gBAAgBK,kBAAkB,IAAI,OAAOL,gBAAgBK,kBAAkB,KAAK,WAChFL,gBAAgBK,kBAAkB,CAACC,SAAS,GAC5CC;IAEN,4DAA4D;IAC5D,wEAAwE;IACxE,MAAMC,gBAAgBnB,qBAAqBoB,OAAO,CAACC,IAAMA,MAAMvB;IAE/D,kFAAkF;IAClF,MAAMwB,mBAAmBX,gBAAgBY,kBAAkB,GACvDC,OAAOC,IAAI,CAACd,gBAAgBY,kBAAkB,IAC9C,EAAE;IAEN,MAAMG,kBACJP,eAAeQ,UAAUZ,gBACrB;QACEa,IAAI;YACF;gBAAE,CAACb,cAAc,EAAE;oBAAEc,IAAIV;gBAAc;YAAE;YACzC;gBAAE,CAACJ,cAAc,EAAE;oBAAEe,QAAQ;gBAAM;YAAE;YACrC,6DAA6D;YAC7D,0FAA0F;eACtFR,iBAAiBK,MAAM,GAAG,IAC1B;gBAAC;oBAAE,CAACZ,cAAc,EAAE;wBAAEgB,QAAQT;oBAAiB;gBAAE;aAAE,GACnD,EAAE;SACP;IACH,IACA;IAEN,wEAAwE;IACxE,MAAMU,iBAAiB/B,SAASU,gBAAgBG,KAAK,EAAEmB,aAAatC;IAEpE,MAAMuC,UAAwB,EAAE;IAChC,MAAMC,gBAGF,CAAC;IAEL,8EAA8E;IAC9E,MAAMC,6BACJhC,yBAAyB,QAAQA,yBAAyBc,YACtD,SACAmB,OAAOjC;IAEb,8EAA8E;IAC9E,MAAMkC,4BAA4B,CAACC;QACjC,OAAO,CAAC,CAACpC,kBAAkBiC,+BAA+BG;IAC5D;IAEA,kEAAkE;IAClE,MAAMC,yBAAyB,OAC7BD,WACAE;QAEA,MAAMC,sBAAsBJ,0BAA0BC;QACtD,IAAII,kBAAgC,EAAE;QACtC,IAAIC,cAAc;QAClB,IAAIC,UAAU;QACd,IAAIC,YAAY;QAChB,IAAIC,gBAAgB;QAEpB,gEAAgE;QAChE,MAAMC,aAAsB;YAACP;SAAgB;QAC7C,IAAIf,iBAAiB;YACnBsB,WAAWC,IAAI,CAACvB;QAClB;QACA,IAAI7B,YAAY;YACdmD,WAAWC,IAAI,CAACpD;QAClB;QACA,MAAMqD,cAAcF,WAAWrB,MAAM,GAAG,IAAI;YAAEwB,KAAKH;QAAW,IAAIP;QAElE,MAAOI,QAAS;YACd,MAAMO,SAAS,MAAMlD,QAAQmD,IAAI,CAAC;gBAChCC,YAAYxD;gBACZyD,OAAO;gBACPtD,OAAO+B;gBACPwB,gBAAgB;gBAChBC,MAAMb;gBACNc,MAAM7C;gBACNR;gBACAsD,OAAOT;YACT;YAEAP,kBAAkB;mBAAIA;mBAAoBS,OAAOQ,IAAI;aAAC;YACtDd,YAAYM,OAAON,SAAS;YAC5BD,UAAUO,OAAOS,WAAW;YAE5B,oDAAoD;YACpD,IAAInB,uBAAuB,CAACK,eAAe;gBACzCA,gBAAgBK,OAAOQ,IAAI,CAACE,IAAI,CAC9B,CAACC,MAAoB1B,OAAO0B,IAAIC,EAAE,MAAM3B,OAAOlC;YAEnD;YAEA,mEAAmE;YACnE,IAAI,CAACuC,uBAAuBK,iBAAiB,CAACF,SAAS;gBACrD;YACF;YAEAD;QACF;QAEAV,QAAQe,IAAI,IAAIN;QAChBR,aAAa,CAACI,UAAU,GAAG;YACzBM;YACAoB,aAAatB,gBAAgBhB,MAAM;YACnCmB;QACF;IACF;IAEA,4BAA4B;IAC5B,MAAMN,uBAAuB,QAAQ;QACnC,CAAC5B,gBAAgB,EAAE;YAAEkB,QAAQ;QAAM;IACrC;IAEA,sDAAsD;IACtD,KAAK,MAAMoC,YAAYnE,gBAAiB;QACtC,MAAMyC,uBAAuBH,OAAO6B,WAAW;YAC7C,CAACtD,gBAAgB,EAAE;gBAAEuD,QAAQD;YAAS;QACxC;IACF;IAEA,OAAO;QACLN,MAAM1B;QACNC;IACF;AACF,EAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * afterDelete Hook Responsibilities:
3
+ * - Clear folder references from related documents when folder is deleted
4
+ */
5
+ import type { CollectionAfterDeleteHook } from '../../index.js';
6
+ type Args = {
7
+ /**
8
+ * Map of collection slugs to their field names
9
+ */
10
+ relatedCollections: Record<string, string>;
11
+ };
12
+ export declare const hierarchyCollectionAfterDelete: ({ relatedCollections }: Args) => CollectionAfterDeleteHook;
13
+ export {};
14
+ //# sourceMappingURL=collectionAfterDelete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectionAfterDelete.d.ts","sourceRoot":"","sources":["../../../src/hierarchy/hooks/collectionAfterDelete.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAA;AAE/D,KAAK,IAAI,GAAG;IACV;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC3C,CAAA;AAED,eAAO,MAAM,8BAA8B,2BAChB,IAAI,KAAG,yBAgB/B,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * afterDelete Hook Responsibilities:
3
+ * - Clear folder references from related documents when folder is deleted
4
+ */ export const hierarchyCollectionAfterDelete = ({ relatedCollections })=>async ({ id, req })=>{
5
+ for (const [collectionSlug, fieldName] of Object.entries(relatedCollections)){
6
+ await req.payload.update({
7
+ collection: collectionSlug,
8
+ data: {
9
+ [fieldName]: null
10
+ },
11
+ req,
12
+ where: {
13
+ [fieldName]: {
14
+ equals: id
15
+ }
16
+ }
17
+ });
18
+ }
19
+ };
20
+
21
+ //# sourceMappingURL=collectionAfterDelete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hierarchy/hooks/collectionAfterDelete.ts"],"sourcesContent":["/**\n * afterDelete Hook Responsibilities:\n * - Clear folder references from related documents when folder is deleted\n */\n\nimport type { CollectionAfterDeleteHook } from '../../index.js'\n\ntype Args = {\n /**\n * Map of collection slugs to their field names\n */\n relatedCollections: Record<string, string>\n}\n\nexport const hierarchyCollectionAfterDelete =\n ({ relatedCollections }: Args): CollectionAfterDeleteHook =>\n async ({ id, req }) => {\n for (const [collectionSlug, fieldName] of Object.entries(relatedCollections)) {\n await req.payload.update({\n collection: collectionSlug,\n data: {\n [fieldName]: null,\n },\n req,\n where: {\n [fieldName]: {\n equals: id,\n },\n },\n })\n }\n }\n"],"names":["hierarchyCollectionAfterDelete","relatedCollections","id","req","collectionSlug","fieldName","Object","entries","payload","update","collection","data","where","equals"],"mappings":"AAAA;;;CAGC,GAWD,OAAO,MAAMA,iCACX,CAAC,EAAEC,kBAAkB,EAAQ,GAC7B,OAAO,EAAEC,EAAE,EAAEC,GAAG,EAAE;QAChB,KAAK,MAAM,CAACC,gBAAgBC,UAAU,IAAIC,OAAOC,OAAO,CAACN,oBAAqB;YAC5E,MAAME,IAAIK,OAAO,CAACC,MAAM,CAAC;gBACvBC,YAAYN;gBACZO,MAAM;oBACJ,CAACN,UAAU,EAAE;gBACf;gBACAF;gBACAS,OAAO;oBACL,CAACP,UAAU,EAAE;wBACXQ,QAAQX;oBACV;gBACF;YACF;QACF;IACF,EAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * afterRead Hook Responsibilities:
3
+ * - Automatically compute and attach _h_slugPath and _h_titlePath to documents
4
+ * - Use cached ancestors to optimize queries when reading multiple documents
5
+ * - Only computes when explicitly requested via:
6
+ * 1. context.computeHierarchyPaths flag
7
+ * 2. ?computeHierarchyPaths=true query param
8
+ * 3. Selecting path fields in query (select parameter)
9
+ */
10
+ import type { CollectionAfterReadHook } from '../../index.js';
11
+ type Args = {
12
+ /**
13
+ * The name of the field that contains the parent document ID
14
+ */
15
+ parentFieldName: string;
16
+ /**
17
+ * The name of the field to populate with the slug-based path
18
+ */
19
+ slugPathFieldName: string;
20
+ /**
21
+ * The name of the field to populate with the title-based path
22
+ */
23
+ titlePathFieldName: string;
24
+ };
25
+ export declare const hierarchyCollectionAfterRead: ({ parentFieldName, slugPathFieldName, titlePathFieldName }: Args) => CollectionAfterReadHook;
26
+ export {};
27
+ //# sourceMappingURL=collectionAfterRead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collectionAfterRead.d.ts","sourceRoot":"","sources":["../../../src/hierarchy/hooks/collectionAfterRead.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAkB,MAAM,gBAAgB,CAAA;AAgC7E,KAAK,IAAI,GAAG;IACV;;OAEG;IACH,eAAe,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,4BAA4B,+DACsB,IAAI,KAAG,uBAuDnE,CAAA"}