payload 3.85.0 → 4.0.0-internal.1f9ae9a

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/README.md +5 -5
  2. package/dist/admin/RichText.d.ts +2 -7
  3. package/dist/admin/RichText.d.ts.map +1 -1
  4. package/dist/admin/RichText.js.map +1 -1
  5. package/dist/admin/adapters/cookies.d.ts +21 -0
  6. package/dist/admin/adapters/cookies.d.ts.map +1 -0
  7. package/dist/admin/adapters/cookies.js +3 -0
  8. package/dist/admin/adapters/cookies.js.map +1 -0
  9. package/dist/admin/adapters/index.d.ts +4 -0
  10. package/dist/admin/adapters/index.d.ts.map +1 -0
  11. package/dist/admin/adapters/index.js +3 -0
  12. package/dist/admin/adapters/index.js.map +1 -0
  13. package/dist/admin/adapters/router.d.ts +56 -0
  14. package/dist/admin/adapters/router.d.ts.map +1 -0
  15. package/dist/admin/adapters/router.js +3 -0
  16. package/dist/admin/adapters/router.js.map +1 -0
  17. package/dist/admin/adapters/server.d.ts +23 -0
  18. package/dist/admin/adapters/server.d.ts.map +1 -0
  19. package/dist/admin/adapters/server.js +6 -0
  20. package/dist/admin/adapters/server.js.map +1 -0
  21. package/dist/admin/elements/Nav.d.ts +13 -0
  22. package/dist/admin/elements/Nav.d.ts.map +1 -1
  23. package/dist/admin/elements/Nav.js.map +1 -1
  24. package/dist/admin/elements/Table.d.ts +1 -0
  25. package/dist/admin/elements/Table.d.ts.map +1 -1
  26. package/dist/admin/elements/Table.js.map +1 -1
  27. package/dist/admin/functions/index.d.ts +1 -38
  28. package/dist/admin/functions/index.d.ts.map +1 -1
  29. package/dist/admin/functions/index.js.map +1 -1
  30. package/dist/admin/types.d.ts +5 -4
  31. package/dist/admin/types.d.ts.map +1 -1
  32. package/dist/admin/types.js.map +1 -1
  33. package/dist/admin/views/hierarchyList.d.ts +10 -0
  34. package/dist/admin/views/hierarchyList.d.ts.map +1 -0
  35. package/dist/admin/views/hierarchyList.js +3 -0
  36. package/dist/admin/views/hierarchyList.js.map +1 -0
  37. package/dist/admin/views/index.d.ts +1 -3
  38. package/dist/admin/views/index.d.ts.map +1 -1
  39. package/dist/admin/views/index.js.map +1 -1
  40. package/dist/admin/views/list.d.ts +47 -2
  41. package/dist/admin/views/list.d.ts.map +1 -1
  42. package/dist/admin/views/list.js.map +1 -1
  43. package/dist/auth/cookies.d.ts.map +1 -1
  44. package/dist/auth/defaultAccess.d.ts.map +1 -1
  45. package/dist/auth/ensureUsernameOrEmail.d.ts.map +1 -1
  46. package/dist/auth/executeAccess.d.ts.map +1 -1
  47. package/dist/auth/executeAuthStrategies.d.ts.map +1 -1
  48. package/dist/auth/extractAccessFromPermission.d.ts.map +1 -1
  49. package/dist/auth/extractJWT.d.ts.map +1 -1
  50. package/dist/auth/getAuthFields.d.ts.map +1 -1
  51. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  52. package/dist/auth/getLoginOptions.d.ts.map +1 -1
  53. package/dist/auth/isUserLocked.d.ts.map +1 -1
  54. package/dist/auth/jwt.d.ts.map +1 -1
  55. package/dist/auth/operations/access.d.ts.map +1 -1
  56. package/dist/auth/operations/auth.d.ts.map +1 -1
  57. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  58. package/dist/auth/operations/init.d.ts.map +1 -1
  59. package/dist/auth/operations/local/auth.d.ts.map +1 -1
  60. package/dist/auth/operations/login.d.ts.map +1 -1
  61. package/dist/auth/operations/logout.d.ts.map +1 -1
  62. package/dist/auth/operations/me.d.ts.map +1 -1
  63. package/dist/auth/operations/refresh.d.ts.map +1 -1
  64. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  65. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  66. package/dist/auth/operations/unlock.d.ts.map +1 -1
  67. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  68. package/dist/auth/sessions.d.ts.map +1 -1
  69. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  70. package/dist/auth/strategies/apiKey.js +6 -17
  71. package/dist/auth/strategies/apiKey.js.map +1 -1
  72. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  73. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
  74. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  75. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  76. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  77. package/dist/bin/build.d.ts +25 -0
  78. package/dist/bin/build.d.ts.map +1 -0
  79. package/dist/bin/build.js +80 -0
  80. package/dist/bin/build.js.map +1 -0
  81. package/dist/bin/build.spec.js +170 -0
  82. package/dist/bin/build.spec.js.map +1 -0
  83. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
  84. package/dist/bin/generateImportMap/iterateCollections.js +1 -0
  85. package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
  86. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
  87. package/dist/bin/generateImportMap/iterateConfig.js +7 -0
  88. package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
  89. package/dist/bin/generateImportMap/iterateFields.d.ts.map +1 -1
  90. package/dist/bin/generateImportMap/iterateFields.js +4 -1
  91. package/dist/bin/generateImportMap/iterateFields.js.map +1 -1
  92. package/dist/bin/generateImportMap/iterateGlobals.d.ts.map +1 -1
  93. package/dist/bin/generateImportMap/iterateGlobals.js +20 -8
  94. package/dist/bin/generateImportMap/iterateGlobals.js.map +1 -1
  95. package/dist/bin/generateImportMap/utilities/getFromImportMap.d.ts.map +1 -1
  96. package/dist/bin/index.d.ts.map +1 -1
  97. package/dist/bin/index.js +10 -3
  98. package/dist/bin/index.js.map +1 -1
  99. package/dist/bin/migrate.d.ts.map +1 -1
  100. package/dist/collections/config/client.d.ts +4 -2
  101. package/dist/collections/config/client.d.ts.map +1 -1
  102. package/dist/collections/config/client.js +13 -1
  103. package/dist/collections/config/client.js.map +1 -1
  104. package/dist/collections/config/defaults.d.ts.map +1 -1
  105. package/dist/collections/config/defaults.js +1 -1
  106. package/dist/collections/config/defaults.js.map +1 -1
  107. package/dist/collections/config/sanitize.d.ts +10 -1
  108. package/dist/collections/config/sanitize.d.ts.map +1 -1
  109. package/dist/collections/config/sanitize.js +51 -10
  110. package/dist/collections/config/sanitize.js.map +1 -1
  111. package/dist/collections/config/sanitizeCompoundIndexes.d.ts.map +1 -1
  112. package/dist/collections/config/types.d.ts +76 -91
  113. package/dist/collections/config/types.d.ts.map +1 -1
  114. package/dist/collections/config/types.js.map +1 -1
  115. package/dist/collections/config/useAsTitle.d.ts.map +1 -1
  116. package/dist/collections/dataloader.d.ts.map +1 -1
  117. package/dist/collections/operations/count.d.ts.map +1 -1
  118. package/dist/collections/operations/countVersions.d.ts.map +1 -1
  119. package/dist/collections/operations/create.d.ts.map +1 -1
  120. package/dist/collections/operations/create.js +25 -19
  121. package/dist/collections/operations/create.js.map +1 -1
  122. package/dist/collections/operations/delete.d.ts.map +1 -1
  123. package/dist/collections/operations/delete.js +7 -2
  124. package/dist/collections/operations/delete.js.map +1 -1
  125. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  126. package/dist/collections/operations/deleteByID.js +7 -2
  127. package/dist/collections/operations/deleteByID.js.map +1 -1
  128. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  129. package/dist/collections/operations/find.d.ts.map +1 -1
  130. package/dist/collections/operations/find.js +7 -2
  131. package/dist/collections/operations/find.js.map +1 -1
  132. package/dist/collections/operations/findByID.d.ts.map +1 -1
  133. package/dist/collections/operations/findByID.js +10 -5
  134. package/dist/collections/operations/findByID.js.map +1 -1
  135. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  136. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  137. package/dist/collections/operations/findVersionByID.js +6 -4
  138. package/dist/collections/operations/findVersionByID.js.map +1 -1
  139. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  140. package/dist/collections/operations/findVersions.js +6 -4
  141. package/dist/collections/operations/findVersions.js.map +1 -1
  142. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  143. package/dist/collections/operations/restoreVersion.js +7 -2
  144. package/dist/collections/operations/restoreVersion.js.map +1 -1
  145. package/dist/collections/operations/update.d.ts.map +1 -1
  146. package/dist/collections/operations/update.js +7 -2
  147. package/dist/collections/operations/update.js.map +1 -1
  148. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  149. package/dist/collections/operations/updateByID.js +7 -2
  150. package/dist/collections/operations/updateByID.js.map +1 -1
  151. package/dist/collections/operations/utilities/buildAfterOperation.d.ts.map +1 -1
  152. package/dist/collections/operations/utilities/sanitizeSortQuery.d.ts.map +1 -1
  153. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  154. package/dist/collections/operations/utilities/update.js +21 -12
  155. package/dist/collections/operations/utilities/update.js.map +1 -1
  156. package/dist/config/build.d.ts.map +1 -1
  157. package/dist/config/build.js +8 -0
  158. package/dist/config/build.js.map +1 -1
  159. package/dist/config/client.d.ts +1 -1
  160. package/dist/config/client.d.ts.map +1 -1
  161. package/dist/config/client.js +2 -11
  162. package/dist/config/client.js.map +1 -1
  163. package/dist/config/defaults.d.ts.map +1 -1
  164. package/dist/config/defaults.js +0 -15
  165. package/dist/config/defaults.js.map +1 -1
  166. package/dist/config/orderable/index.d.ts.map +1 -1
  167. package/dist/config/orderable/index.js +0 -4
  168. package/dist/config/orderable/index.js.map +1 -1
  169. package/dist/config/sanitize.d.ts.map +1 -1
  170. package/dist/config/sanitize.js +6 -53
  171. package/dist/config/sanitize.js.map +1 -1
  172. package/dist/config/types.d.ts +188 -32
  173. package/dist/config/types.d.ts.map +1 -1
  174. package/dist/config/types.js.map +1 -1
  175. package/dist/database/combineQueries.d.ts.map +1 -1
  176. package/dist/database/migrations/findMigrationDir.d.ts.map +1 -1
  177. package/dist/database/migrations/getPredefinedMigration.d.ts.map +1 -1
  178. package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
  179. package/dist/database/migrations/templates/localizeStatus.d.ts.map +1 -1
  180. package/dist/database/migrations/writeMigrationIndex.d.ts.map +1 -1
  181. package/dist/database/sanitizeJoinQuery.d.ts.map +1 -1
  182. package/dist/database/sanitizeWhereQuery.d.ts.map +1 -1
  183. package/dist/duplicateDocument/index.d.ts.map +1 -1
  184. package/dist/email/getStringifiedToAddress.d.ts.map +1 -1
  185. package/dist/email/types.d.ts +2 -7
  186. package/dist/email/types.d.ts.map +1 -1
  187. package/dist/email/types.js.map +1 -1
  188. package/dist/exports/shared.d.ts +6 -3
  189. package/dist/exports/shared.d.ts.map +1 -1
  190. package/dist/exports/shared.js +4 -2
  191. package/dist/exports/shared.js.map +1 -1
  192. package/dist/fields/baseFields/slug/countVersions.d.ts.map +1 -1
  193. package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
  194. package/dist/fields/baseFields/slug/index.d.ts.map +1 -1
  195. package/dist/fields/baseFields/slug/index.js +7 -5
  196. package/dist/fields/baseFields/slug/index.js.map +1 -1
  197. package/dist/fields/config/client.d.ts +1 -1
  198. package/dist/fields/config/client.d.ts.map +1 -1
  199. package/dist/fields/config/client.js +4 -3
  200. package/dist/fields/config/client.js.map +1 -1
  201. package/dist/fields/config/sanitize.d.ts.map +1 -1
  202. package/dist/fields/config/sanitize.js +13 -20
  203. package/dist/fields/config/sanitize.js.map +1 -1
  204. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
  205. package/dist/fields/config/sanitizeJoinField.js +3 -0
  206. package/dist/fields/config/sanitizeJoinField.js.map +1 -1
  207. package/dist/fields/config/types.d.ts +40 -114
  208. package/dist/fields/config/types.d.ts.map +1 -1
  209. package/dist/fields/config/types.js +12 -2
  210. package/dist/fields/config/types.js.map +1 -1
  211. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  212. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  213. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  214. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  215. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  216. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  217. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  218. package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.d.ts.map +1 -1
  219. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.d.ts.map +1 -1
  220. package/dist/fields/hooks/beforeChange/getExistingRowDoc.d.ts.map +1 -1
  221. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  222. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  223. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  224. package/dist/fields/hooks/beforeDuplicate/index.d.ts.map +1 -1
  225. package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
  226. package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -1
  227. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  228. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  229. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  230. package/dist/fields/isFieldDisabled.d.ts +12 -0
  231. package/dist/fields/isFieldDisabled.d.ts.map +1 -0
  232. package/dist/fields/isFieldDisabled.js +15 -0
  233. package/dist/fields/isFieldDisabled.js.map +1 -0
  234. package/dist/fields/isFieldDisabled.spec.js +134 -0
  235. package/dist/fields/isFieldDisabled.spec.js.map +1 -0
  236. package/dist/fields/mergeBaseFields.d.ts.map +1 -1
  237. package/dist/fields/setDefaultBeforeDuplicate.d.ts.map +1 -1
  238. package/dist/fields/validations.js +1 -1
  239. package/dist/fields/validations.js.map +1 -1
  240. package/dist/globals/config/client.d.ts +1 -1
  241. package/dist/globals/config/client.d.ts.map +1 -1
  242. package/dist/globals/config/client.js +2 -1
  243. package/dist/globals/config/client.js.map +1 -1
  244. package/dist/globals/config/sanitize.d.ts +6 -1
  245. package/dist/globals/config/sanitize.d.ts.map +1 -1
  246. package/dist/globals/config/sanitize.js +6 -2
  247. package/dist/globals/config/sanitize.js.map +1 -1
  248. package/dist/globals/config/types.d.ts +4 -57
  249. package/dist/globals/config/types.d.ts.map +1 -1
  250. package/dist/globals/config/types.js.map +1 -1
  251. package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -1
  252. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  253. package/dist/globals/operations/findOne.d.ts.map +1 -1
  254. package/dist/globals/operations/findOne.js +7 -2
  255. package/dist/globals/operations/findOne.js.map +1 -1
  256. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  257. package/dist/globals/operations/findVersionByID.js +6 -4
  258. package/dist/globals/operations/findVersionByID.js.map +1 -1
  259. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  260. package/dist/globals/operations/findVersions.js +6 -4
  261. package/dist/globals/operations/findVersions.js.map +1 -1
  262. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  263. package/dist/globals/operations/update.d.ts.map +1 -1
  264. package/dist/globals/operations/update.js +7 -2
  265. package/dist/globals/operations/update.js.map +1 -1
  266. package/dist/hierarchy/addHierarchyToCollection.d.ts +9 -0
  267. package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -0
  268. package/dist/hierarchy/addHierarchyToCollection.js +76 -0
  269. package/dist/hierarchy/addHierarchyToCollection.js.map +1 -0
  270. package/dist/hierarchy/buildParentField.d.ts +11 -0
  271. package/dist/hierarchy/buildParentField.d.ts.map +1 -0
  272. package/dist/hierarchy/buildParentField.js +42 -0
  273. package/dist/hierarchy/buildParentField.js.map +1 -0
  274. package/dist/hierarchy/constants.d.ts +15 -0
  275. package/dist/hierarchy/constants.d.ts.map +1 -0
  276. package/dist/hierarchy/constants.js +11 -0
  277. package/dist/hierarchy/constants.js.map +1 -0
  278. package/dist/hierarchy/createFolderField.d.ts +39 -0
  279. package/dist/hierarchy/createFolderField.d.ts.map +1 -0
  280. package/dist/hierarchy/createFolderField.js +54 -0
  281. package/dist/hierarchy/createFolderField.js.map +1 -0
  282. package/dist/hierarchy/createTagField.d.ts +44 -0
  283. package/dist/hierarchy/createTagField.d.ts.map +1 -0
  284. package/dist/hierarchy/createTagField.js +48 -0
  285. package/dist/hierarchy/createTagField.js.map +1 -0
  286. package/dist/hierarchy/getInitialTreeData.d.ts +27 -0
  287. package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -0
  288. package/dist/hierarchy/getInitialTreeData.js +125 -0
  289. package/dist/hierarchy/getInitialTreeData.js.map +1 -0
  290. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts +14 -0
  291. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts.map +1 -0
  292. package/dist/hierarchy/hooks/collectionAfterDelete.js +21 -0
  293. package/dist/hierarchy/hooks/collectionAfterDelete.js.map +1 -0
  294. package/dist/hierarchy/hooks/collectionAfterRead.d.ts +27 -0
  295. package/dist/hierarchy/hooks/collectionAfterRead.d.ts.map +1 -0
  296. package/dist/hierarchy/hooks/collectionAfterRead.js +72 -0
  297. package/dist/hierarchy/hooks/collectionAfterRead.js.map +1 -0
  298. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts +19 -0
  299. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts.map +1 -0
  300. package/dist/hierarchy/hooks/collectionBeforeChange.js +90 -0
  301. package/dist/hierarchy/hooks/collectionBeforeChange.js.map +1 -0
  302. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts +15 -0
  303. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts.map +1 -0
  304. package/dist/hierarchy/hooks/collectionBeforeDelete.js +20 -0
  305. package/dist/hierarchy/hooks/collectionBeforeDelete.js.map +1 -0
  306. package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts +33 -0
  307. package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts.map +1 -0
  308. package/dist/hierarchy/hooks/collectionBeforeOperation.js +66 -0
  309. package/dist/hierarchy/hooks/collectionBeforeOperation.js.map +1 -0
  310. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts +8 -0
  311. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts.map +1 -0
  312. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js +108 -0
  313. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js.map +1 -0
  314. package/dist/hierarchy/injectHierarchyButton.d.ts +14 -0
  315. package/dist/hierarchy/injectHierarchyButton.d.ts.map +1 -0
  316. package/dist/hierarchy/injectHierarchyButton.js +37 -0
  317. package/dist/hierarchy/injectHierarchyButton.js.map +1 -0
  318. package/dist/hierarchy/presets.d.ts +13 -0
  319. package/dist/hierarchy/presets.d.ts.map +1 -0
  320. package/dist/hierarchy/presets.js +52 -0
  321. package/dist/hierarchy/presets.js.map +1 -0
  322. package/dist/hierarchy/resolveHierarchyCollections.d.ts +23 -0
  323. package/dist/hierarchy/resolveHierarchyCollections.d.ts.map +1 -0
  324. package/dist/hierarchy/resolveHierarchyCollections.js +321 -0
  325. package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -0
  326. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts +14 -0
  327. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +1 -0
  328. package/dist/hierarchy/sanitizeHierarchyCollection.js +119 -0
  329. package/dist/hierarchy/sanitizeHierarchyCollection.js.map +1 -0
  330. package/dist/hierarchy/types.d.ts +162 -0
  331. package/dist/hierarchy/types.d.ts.map +1 -0
  332. package/dist/hierarchy/types.js +6 -0
  333. package/dist/hierarchy/types.js.map +1 -0
  334. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts +77 -0
  335. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts.map +1 -0
  336. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js +77 -0
  337. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js.map +1 -0
  338. package/dist/hierarchy/utils/computePaths.d.ts +31 -0
  339. package/dist/hierarchy/utils/computePaths.d.ts.map +1 -0
  340. package/dist/hierarchy/utils/computePaths.js +445 -0
  341. package/dist/hierarchy/utils/computePaths.js.map +1 -0
  342. package/dist/hierarchy/utils/findUseAsTitle.d.ts +14 -0
  343. package/dist/hierarchy/utils/findUseAsTitle.d.ts.map +1 -0
  344. package/dist/hierarchy/utils/findUseAsTitle.js +89 -0
  345. package/dist/hierarchy/utils/findUseAsTitle.js.map +1 -0
  346. package/dist/hierarchy/utils/getAncestors.d.ts +34 -0
  347. package/dist/hierarchy/utils/getAncestors.d.ts.map +1 -0
  348. package/dist/hierarchy/utils/getAncestors.js +94 -0
  349. package/dist/hierarchy/utils/getAncestors.js.map +1 -0
  350. package/dist/hierarchy/utils/getLocalizedValue.d.ts +30 -0
  351. package/dist/hierarchy/utils/getLocalizedValue.d.ts.map +1 -0
  352. package/dist/hierarchy/utils/getLocalizedValue.js +46 -0
  353. package/dist/hierarchy/utils/getLocalizedValue.js.map +1 -0
  354. package/dist/hierarchy/utils/getLocalizedValue.spec.js +250 -0
  355. package/dist/hierarchy/utils/getLocalizedValue.spec.js.map +1 -0
  356. package/dist/index.bundled.d.ts +968 -637
  357. package/dist/index.d.ts +31 -9
  358. package/dist/index.d.ts.map +1 -1
  359. package/dist/index.js +14 -14
  360. package/dist/index.js.map +1 -1
  361. package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
  362. package/dist/locked-documents/config.d.ts.map +1 -1
  363. package/dist/preferences/config.d.ts.map +1 -1
  364. package/dist/preferences/deleteUserPreferences.d.ts.map +1 -1
  365. package/dist/preferences/keys.d.ts +8 -4
  366. package/dist/preferences/keys.d.ts.map +1 -1
  367. package/dist/preferences/keys.js +7 -4
  368. package/dist/preferences/keys.js.map +1 -1
  369. package/dist/preferences/types.d.ts +1 -1
  370. package/dist/preferences/types.d.ts.map +1 -1
  371. package/dist/preferences/types.js.map +1 -1
  372. package/dist/query-presets/access.d.ts.map +1 -1
  373. package/dist/query-presets/config.d.ts.map +1 -1
  374. package/dist/query-presets/config.js +11 -7
  375. package/dist/query-presets/config.js.map +1 -1
  376. package/dist/query-presets/constraints.d.ts.map +1 -1
  377. package/dist/query-presets/constraints.js +1 -1
  378. package/dist/query-presets/constraints.js.map +1 -1
  379. package/dist/queues/config/types/index.d.ts +0 -21
  380. package/dist/queues/config/types/index.d.ts.map +1 -1
  381. package/dist/queues/config/types/index.js.map +1 -1
  382. package/dist/queues/config/types/taskTypes.d.ts +0 -20
  383. package/dist/queues/config/types/taskTypes.d.ts.map +1 -1
  384. package/dist/queues/config/types/taskTypes.js.map +1 -1
  385. package/dist/queues/endpoints/run.d.ts.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 +7 -27
  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 +2 -1
  424. package/dist/uploads/generateFileData.d.ts.map +1 -1
  425. package/dist/uploads/generateFileData.js +5 -2
  426. package/dist/uploads/generateFileData.js.map +1 -1
  427. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  428. package/dist/uploads/getBaseFields.js +24 -70
  429. package/dist/uploads/getBaseFields.js.map +1 -1
  430. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  431. package/dist/uploads/getFileByPath.d.ts.map +1 -1
  432. package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
  433. package/dist/uploads/getSafeFilename.d.ts.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.map +1 -1
  461. package/dist/utilities/configToJSONSchema.js +46 -28
  462. package/dist/utilities/configToJSONSchema.js.map +1 -1
  463. package/dist/utilities/configToJSONSchema.spec.js +86 -57
  464. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  465. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  466. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  467. package/dist/utilities/dependencies/resolveFrom.d.ts.map +1 -1
  468. package/dist/utilities/escapeRegExp.d.ts.map +1 -1
  469. package/dist/utilities/extractID.d.ts.map +1 -1
  470. package/dist/utilities/extractID.js +1 -1
  471. package/dist/utilities/extractID.js.map +1 -1
  472. package/dist/utilities/flattenAllFields.d.ts.map +1 -1
  473. package/dist/utilities/formatAdminURL.d.ts +13 -2
  474. package/dist/utilities/formatAdminURL.d.ts.map +1 -1
  475. package/dist/utilities/formatAdminURL.js.map +1 -1
  476. package/dist/utilities/formatErrors.d.ts.map +1 -1
  477. package/dist/utilities/formatLabels.d.ts.map +1 -1
  478. package/dist/utilities/getBestFitFromSizes.d.ts.map +1 -1
  479. package/dist/utilities/getBlockSelect.d.ts.map +1 -1
  480. package/dist/utilities/getDataByPath.d.ts.map +1 -1
  481. package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts.map +1 -1
  482. package/dist/utilities/getFieldByPath.d.ts.map +1 -1
  483. package/dist/utilities/getFieldPermissions.d.ts.map +1 -1
  484. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  485. package/dist/utilities/getRequestEntity.d.ts.map +1 -1
  486. package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
  487. package/dist/utilities/getRequestOrigin.d.ts.map +1 -1
  488. package/dist/utilities/getSafeRedirect.d.ts.map +1 -1
  489. package/dist/utilities/getSelectMode.d.ts.map +1 -1
  490. package/dist/utilities/getSiblingData.d.ts.map +1 -1
  491. package/dist/utilities/getTranslatedLabel.d.ts.map +1 -1
  492. package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
  493. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  494. package/dist/utilities/handleEndpoints.js +0 -2
  495. package/dist/utilities/handleEndpoints.js.map +1 -1
  496. package/dist/utilities/headersWithCors.d.ts.map +1 -1
  497. package/dist/utilities/isEntityHidden.d.ts.map +1 -1
  498. package/dist/utilities/isURLAllowed.d.ts.map +1 -1
  499. package/dist/utilities/isValidID.d.ts.map +1 -1
  500. package/dist/utilities/logError.d.ts.map +1 -1
  501. package/dist/utilities/logger.d.ts.map +1 -1
  502. package/dist/utilities/mergeHeaders.d.ts.map +1 -1
  503. package/dist/utilities/mergeListSearchAndWhere.d.ts.map +1 -1
  504. package/dist/utilities/optionsAreEqual.d.ts.map +1 -1
  505. package/dist/utilities/parseBooleanString.d.ts.map +1 -1
  506. package/dist/utilities/parseCookies.d.ts.map +1 -1
  507. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  508. package/dist/utilities/profiling.d.ts.map +1 -1
  509. package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -1
  510. package/dist/utilities/resolveSelect.d.ts +16 -0
  511. package/dist/utilities/resolveSelect.d.ts.map +1 -0
  512. package/dist/utilities/resolveSelect.js +19 -0
  513. package/dist/utilities/resolveSelect.js.map +1 -0
  514. package/dist/utilities/routeError.d.ts.map +1 -1
  515. package/dist/utilities/sanitizeFallbackLocale.d.ts.map +1 -1
  516. package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
  517. package/dist/utilities/sanitizeJoinParams.d.ts.map +1 -1
  518. package/dist/utilities/sanitizePopulateParam.d.ts.map +1 -1
  519. package/dist/utilities/sanitizeSelect.d.ts +1 -2
  520. package/dist/utilities/sanitizeSelect.d.ts.map +1 -1
  521. package/dist/utilities/sanitizeSelect.js +19 -25
  522. package/dist/utilities/sanitizeSelect.js.map +1 -1
  523. package/dist/utilities/sanitizeSelectParam.d.ts.map +1 -1
  524. package/dist/utilities/sanitizeSortParams.d.ts.map +1 -1
  525. package/dist/utilities/setsAreEqual.d.ts.map +1 -1
  526. package/dist/utilities/slugify.d.ts.map +1 -1
  527. package/dist/utilities/stripUnselectedFields.d.ts.map +1 -1
  528. package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
  529. package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
  530. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  531. package/dist/utilities/telemetry/oneWayHash.d.ts.map +1 -1
  532. package/dist/utilities/timestamp.d.ts.map +1 -1
  533. package/dist/utilities/toKebabCase.d.ts.map +1 -1
  534. package/dist/utilities/transformColumnPreferences.d.ts.map +1 -1
  535. package/dist/utilities/transformWhereQuery.d.ts.map +1 -1
  536. package/dist/utilities/traverseFields.d.ts.map +1 -1
  537. package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
  538. package/dist/utilities/unflatten.d.ts.map +1 -1
  539. package/dist/utilities/validateMimeType.d.ts.map +1 -1
  540. package/dist/utilities/validateTimezones.d.ts.map +1 -1
  541. package/dist/utilities/validateWhereQuery.d.ts.map +1 -1
  542. package/dist/utilities/wordBoundariesRegex.d.ts.map +1 -1
  543. package/dist/utilities/wrapInternalEndpoints.d.ts.map +1 -1
  544. package/dist/versions/baseFields.d.ts.map +1 -1
  545. package/dist/versions/baseFields.js +3 -2
  546. package/dist/versions/baseFields.js.map +1 -1
  547. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  548. package/dist/versions/buildCollectionFields.js +0 -1
  549. package/dist/versions/buildCollectionFields.js.map +1 -1
  550. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  551. package/dist/versions/buildGlobalFields.js +0 -1
  552. package/dist/versions/buildGlobalFields.js.map +1 -1
  553. package/dist/versions/buildVersionCompoundIndexes.d.ts.map +1 -1
  554. package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
  555. package/dist/versions/deleteScheduledPublishJobs.d.ts.map +1 -1
  556. package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
  557. package/dist/versions/drafts/getQueryDraftsSelect.d.ts.map +1 -1
  558. package/dist/versions/drafts/getQueryDraftsSort.d.ts.map +1 -1
  559. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  560. package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
  561. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  562. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  563. package/dist/versions/migrations/localizeStatus/shared.d.ts.map +1 -1
  564. package/dist/versions/payloadPackageList.d.ts.map +1 -1
  565. package/dist/versions/payloadPackageList.js +0 -1
  566. package/dist/versions/payloadPackageList.js.map +1 -1
  567. package/dist/versions/saveSnapshot.d.ts.map +1 -1
  568. package/dist/versions/schedule/job.d.ts.map +1 -1
  569. package/package.json +20 -20
  570. package/dist/admin/views/folderList.d.ts +0 -56
  571. package/dist/admin/views/folderList.d.ts.map +0 -1
  572. package/dist/admin/views/folderList.js +0 -3
  573. package/dist/admin/views/folderList.js.map +0 -1
  574. package/dist/email/normalizeSendEmailOptions.d.ts +0 -13
  575. package/dist/email/normalizeSendEmailOptions.d.ts.map +0 -1
  576. package/dist/email/normalizeSendEmailOptions.js +0 -20
  577. package/dist/email/normalizeSendEmailOptions.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
package/dist/bin/index.js CHANGED
@@ -4,6 +4,7 @@ import { pathToFileURL } from 'node:url';
4
4
  import path from 'path';
5
5
  import { findConfig } from '../config/find.js';
6
6
  import { getPayload } from '../index.js';
7
+ import { build } from './build.js';
7
8
  import { generateImportMap } from './generateImportMap/index.js';
8
9
  import { generateTypes } from './generateTypes.js';
9
10
  import { info } from './info.js';
@@ -11,6 +12,7 @@ import { loadEnv } from './loadEnv.js';
11
12
  import { migrate, availableCommands as migrateCommands } from './migrate.js';
12
13
  // Note: this does not account for any user bin scripts
13
14
  const availableScripts = [
15
+ 'build',
14
16
  'generate:db-schema',
15
17
  'generate:importmap',
16
18
  'generate:types',
@@ -36,9 +38,7 @@ export const bin = async ()=>{
36
38
  });
37
39
  }, {
38
40
  // Do not run consecutive crons if previous crons still ongoing
39
- protect: true,
40
- // TODO: Remove this compatibility option in 4.0. This only exists to ensure backwards-compatibility between Croner v9 and Croner v10 cron syntax
41
- sloppyRanges: true
41
+ protect: true
42
42
  });
43
43
  process.stdin.resume(); // Keep the process alive
44
44
  return;
@@ -123,6 +123,13 @@ async function runBinScript({ args, script }) {
123
123
  await generateImportMap(config);
124
124
  return {};
125
125
  }
126
+ if (script === 'build') {
127
+ await build({
128
+ config
129
+ });
130
+ return {} // build() awaits next build and owns process exit, propagating its code
131
+ ;
132
+ }
126
133
  if (script === 'jobs:run') {
127
134
  const payload = await getPayload({
128
135
  config
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bin/index.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { Cron } from 'croner'\nimport minimist from 'minimist'\nimport { pathToFileURL } from 'node:url'\nimport path from 'path'\n\nimport { findConfig } from '../config/find.js'\nimport { getPayload, type Payload } from '../index.js'\nimport { generateImportMap } from './generateImportMap/index.js'\nimport { generateTypes } from './generateTypes.js'\nimport { info } from './info.js'\nimport { loadEnv } from './loadEnv.js'\nimport { migrate, availableCommands as migrateCommands } from './migrate.js'\n\n// Note: this does not account for any user bin scripts\nconst availableScripts = [\n 'generate:db-schema',\n 'generate:importmap',\n 'generate:types',\n 'info',\n 'jobs:run',\n 'jobs:handle-schedules',\n 'run',\n ...migrateCommands,\n] as const\n\nexport const bin = async () => {\n loadEnv()\n process.env.DISABLE_PAYLOAD_HMR = 'true'\n\n const args = minimist(process.argv.slice(2))\n const script = (typeof args._[0] === 'string' ? args._[0] : '').toLowerCase()\n\n if (args.cron) {\n new Cron(\n args.cron,\n async () => {\n // If the bin script initializes payload (getPayload), this will only happen once, as getPayload\n // caches the payload instance on the module scope => no need to manually cache and manage getPayload initialization\n // outside the Cron here.\n await runBinScript({ args, script })\n },\n {\n // Do not run consecutive crons if previous crons still ongoing\n protect: true,\n // TODO: Remove this compatibility option in 4.0. This only exists to ensure backwards-compatibility between Croner v9 and Croner v10 cron syntax\n sloppyRanges: true,\n },\n )\n\n process.stdin.resume() // Keep the process alive\n\n return\n } else {\n const { payload } = await runBinScript({ args, script })\n if (payload) {\n await payload.destroy() // close database connections after running jobs so process can exit cleanly\n }\n process.exit(0)\n }\n}\n\nasync function runBinScript({\n args,\n script,\n}: {\n args: minimist.ParsedArgs\n script: string\n}): Promise<{\n /**\n * Scripts can return a payload instance if it exists. The bin script runner can then safely\n * shut off the instance, depending on if it's running in a cron job or not.\n */\n payload?: Payload\n}> {\n if (script === 'info') {\n await info()\n return {}\n }\n\n if (script === 'run') {\n const scriptPath = args._[1]\n if (!scriptPath) {\n console.error('Please provide a script path to run.')\n process.exit(1)\n }\n\n const absoluteScriptPath = path.resolve(process.cwd(), scriptPath)\n\n // Modify process.argv to remove 'run' and the script path\n const originalArgv = process.argv\n process.argv = [process.argv[0]!, process.argv[1]!, ...args._.slice(2)]\n\n try {\n await import(pathToFileURL(absoluteScriptPath).toString())\n } catch (error) {\n console.error(`Error running script: ${absoluteScriptPath}`)\n console.error(error)\n process.exit(1)\n } finally {\n // Restore original process.argv\n process.argv = originalArgv\n }\n return {}\n }\n\n const configPath = findConfig()\n const configPromise = await import(pathToFileURL(configPath).toString())\n let config = await configPromise\n if (config.default) {\n config = await config.default\n }\n\n const userBinScript = Array.isArray(config.bin)\n ? config.bin.find(({ key }: { key: string }) => key === script)\n : false\n\n if (userBinScript) {\n try {\n const module = await import(pathToFileURL(userBinScript.scriptPath).toString())\n\n if (!module.script || typeof module.script !== 'function') {\n console.error(\n `Could not find \"script\" function export for script ${userBinScript.key} in ${userBinScript.scriptPath}`,\n )\n } else {\n await module.script(config).catch((err: unknown) => {\n console.log(`Script ${userBinScript.key} failed, details:`)\n console.error(err)\n })\n }\n } catch (err) {\n console.log(`Could not find associated bin script for the ${userBinScript.key} command`)\n console.error(err)\n }\n\n return {}\n }\n\n if (script.startsWith('migrate')) {\n await migrate({ config, parsedArgs: args })\n return {}\n }\n\n if (script === 'generate:types') {\n await generateTypes(config)\n return {}\n }\n\n if (script === 'generate:importmap') {\n await generateImportMap(config)\n return {}\n }\n\n if (script === 'jobs:run') {\n const payload = await getPayload({ config }) // Do not setup crons here - this bin script can set up its own crons\n const limit = args.limit ? parseInt(args.limit, 10) : undefined\n const queue = args.queue ? args.queue : undefined\n const allQueues = !!args['all-queues']\n const handleSchedules = !!args['handle-schedules']\n\n if (handleSchedules) {\n await payload.jobs.handleSchedules({\n allQueues,\n queue,\n })\n }\n\n await payload.jobs.run({\n allQueues,\n limit,\n queue,\n })\n\n return { payload }\n }\n\n if (script === 'jobs:handle-schedules') {\n const payload = await getPayload({ config }) // Do not setup crons here - this bin script can set up its own crons\n const queue = args.queue ? args.queue : undefined\n const allQueues = !!args['all-queues']\n\n await payload.jobs.handleSchedules({\n allQueues,\n queue,\n })\n\n return { payload }\n }\n\n if (script === 'generate:db-schema') {\n // Barebones instance to access database adapter, without connecting to the DB\n const payload = await getPayload({ config, disableDBConnect: true, disableOnInit: true }) // Do not setup crons here\n\n if (typeof payload.db.generateSchema !== 'function') {\n payload.logger.error({\n msg: `${payload.db.packageName} does not support database schema generation`,\n })\n\n await payload.destroy()\n process.exit(1)\n }\n\n await payload.db.generateSchema({\n log: args.log === 'false' ? false : true,\n prettify: args.prettify === 'false' ? false : true,\n })\n\n return { payload }\n }\n\n console.error(script ? `Unknown command: \"${script}\"` : 'Please provide a command to run')\n console.log(`\\nAvailable commands:\\n${availableScripts.map((c) => ` - ${c}`).join('\\n')}`)\n\n process.exit(1)\n}\n"],"names":["Cron","minimist","pathToFileURL","path","findConfig","getPayload","generateImportMap","generateTypes","info","loadEnv","migrate","availableCommands","migrateCommands","availableScripts","bin","process","env","DISABLE_PAYLOAD_HMR","args","argv","slice","script","_","toLowerCase","cron","runBinScript","protect","sloppyRanges","stdin","resume","payload","destroy","exit","scriptPath","console","error","absoluteScriptPath","resolve","cwd","originalArgv","toString","configPath","configPromise","config","default","userBinScript","Array","isArray","find","key","module","catch","err","log","startsWith","parsedArgs","limit","parseInt","undefined","queue","allQueues","handleSchedules","jobs","run","disableDBConnect","disableOnInit","db","generateSchema","logger","msg","packageName","prettify","map","c","join"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/bin/index.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { Cron } from 'croner'\nimport minimist from 'minimist'\nimport { pathToFileURL } from 'node:url'\nimport path from 'path'\n\nimport { findConfig } from '../config/find.js'\nimport { getPayload, type Payload } from '../index.js'\nimport { build } from './build.js'\nimport { generateImportMap } from './generateImportMap/index.js'\nimport { generateTypes } from './generateTypes.js'\nimport { info } from './info.js'\nimport { loadEnv } from './loadEnv.js'\nimport { migrate, availableCommands as migrateCommands } from './migrate.js'\n\n// Note: this does not account for any user bin scripts\nconst availableScripts = [\n 'build',\n 'generate:db-schema',\n 'generate:importmap',\n 'generate:types',\n 'info',\n 'jobs:run',\n 'jobs:handle-schedules',\n 'run',\n ...migrateCommands,\n] as const\n\nexport const bin = async () => {\n loadEnv()\n process.env.DISABLE_PAYLOAD_HMR = 'true'\n\n const args = minimist(process.argv.slice(2))\n const script = (typeof args._[0] === 'string' ? args._[0] : '').toLowerCase()\n\n if (args.cron) {\n new Cron(\n args.cron,\n async () => {\n // If the bin script initializes payload (getPayload), this will only happen once, as getPayload\n // caches the payload instance on the module scope => no need to manually cache and manage getPayload initialization\n // outside the Cron here.\n await runBinScript({ args, script })\n },\n {\n // Do not run consecutive crons if previous crons still ongoing\n protect: true,\n },\n )\n\n process.stdin.resume() // Keep the process alive\n\n return\n } else {\n const { payload } = await runBinScript({ args, script })\n if (payload) {\n await payload.destroy() // close database connections after running jobs so process can exit cleanly\n }\n process.exit(0)\n }\n}\n\nasync function runBinScript({\n args,\n script,\n}: {\n args: minimist.ParsedArgs\n script: string\n}): Promise<{\n /**\n * Scripts can return a payload instance if it exists. The bin script runner can then safely\n * shut off the instance, depending on if it's running in a cron job or not.\n */\n payload?: Payload\n}> {\n if (script === 'info') {\n await info()\n return {}\n }\n\n if (script === 'run') {\n const scriptPath = args._[1]\n if (!scriptPath) {\n console.error('Please provide a script path to run.')\n process.exit(1)\n }\n\n const absoluteScriptPath = path.resolve(process.cwd(), scriptPath)\n\n // Modify process.argv to remove 'run' and the script path\n const originalArgv = process.argv\n process.argv = [process.argv[0]!, process.argv[1]!, ...args._.slice(2)]\n\n try {\n await import(pathToFileURL(absoluteScriptPath).toString())\n } catch (error) {\n console.error(`Error running script: ${absoluteScriptPath}`)\n console.error(error)\n process.exit(1)\n } finally {\n // Restore original process.argv\n process.argv = originalArgv\n }\n return {}\n }\n\n const configPath = findConfig()\n const configPromise = await import(pathToFileURL(configPath).toString())\n let config = await configPromise\n if (config.default) {\n config = await config.default\n }\n\n const userBinScript = Array.isArray(config.bin)\n ? config.bin.find(({ key }: { key: string }) => key === script)\n : false\n\n if (userBinScript) {\n try {\n const module = await import(pathToFileURL(userBinScript.scriptPath).toString())\n\n if (!module.script || typeof module.script !== 'function') {\n console.error(\n `Could not find \"script\" function export for script ${userBinScript.key} in ${userBinScript.scriptPath}`,\n )\n } else {\n await module.script(config).catch((err: unknown) => {\n console.log(`Script ${userBinScript.key} failed, details:`)\n console.error(err)\n })\n }\n } catch (err) {\n console.log(`Could not find associated bin script for the ${userBinScript.key} command`)\n console.error(err)\n }\n\n return {}\n }\n\n if (script.startsWith('migrate')) {\n await migrate({ config, parsedArgs: args })\n return {}\n }\n\n if (script === 'generate:types') {\n await generateTypes(config)\n return {}\n }\n\n if (script === 'generate:importmap') {\n await generateImportMap(config)\n return {}\n }\n\n if (script === 'build') {\n await build({ config })\n return {} // build() awaits next build and owns process exit, propagating its code\n }\n\n if (script === 'jobs:run') {\n const payload = await getPayload({ config }) // Do not setup crons here - this bin script can set up its own crons\n const limit = args.limit ? parseInt(args.limit, 10) : undefined\n const queue = args.queue ? args.queue : undefined\n const allQueues = !!args['all-queues']\n const handleSchedules = !!args['handle-schedules']\n\n if (handleSchedules) {\n await payload.jobs.handleSchedules({\n allQueues,\n queue,\n })\n }\n\n await payload.jobs.run({\n allQueues,\n limit,\n queue,\n })\n\n return { payload }\n }\n\n if (script === 'jobs:handle-schedules') {\n const payload = await getPayload({ config }) // Do not setup crons here - this bin script can set up its own crons\n const queue = args.queue ? args.queue : undefined\n const allQueues = !!args['all-queues']\n\n await payload.jobs.handleSchedules({\n allQueues,\n queue,\n })\n\n return { payload }\n }\n\n if (script === 'generate:db-schema') {\n // Barebones instance to access database adapter, without connecting to the DB\n const payload = await getPayload({ config, disableDBConnect: true, disableOnInit: true }) // Do not setup crons here\n\n if (typeof payload.db.generateSchema !== 'function') {\n payload.logger.error({\n msg: `${payload.db.packageName} does not support database schema generation`,\n })\n\n await payload.destroy()\n process.exit(1)\n }\n\n await payload.db.generateSchema({\n log: args.log === 'false' ? false : true,\n prettify: args.prettify === 'false' ? false : true,\n })\n\n return { payload }\n }\n\n console.error(script ? `Unknown command: \"${script}\"` : 'Please provide a command to run')\n console.log(`\\nAvailable commands:\\n${availableScripts.map((c) => ` - ${c}`).join('\\n')}`)\n\n process.exit(1)\n}\n"],"names":["Cron","minimist","pathToFileURL","path","findConfig","getPayload","build","generateImportMap","generateTypes","info","loadEnv","migrate","availableCommands","migrateCommands","availableScripts","bin","process","env","DISABLE_PAYLOAD_HMR","args","argv","slice","script","_","toLowerCase","cron","runBinScript","protect","stdin","resume","payload","destroy","exit","scriptPath","console","error","absoluteScriptPath","resolve","cwd","originalArgv","toString","configPath","configPromise","config","default","userBinScript","Array","isArray","find","key","module","catch","err","log","startsWith","parsedArgs","limit","parseInt","undefined","queue","allQueues","handleSchedules","jobs","run","disableDBConnect","disableOnInit","db","generateSchema","logger","msg","packageName","prettify","map","c","join"],"mappings":"AAAA,6BAA6B,GAC7B,SAASA,IAAI,QAAQ,SAAQ;AAC7B,OAAOC,cAAc,WAAU;AAC/B,SAASC,aAAa,QAAQ,WAAU;AACxC,OAAOC,UAAU,OAAM;AAEvB,SAASC,UAAU,QAAQ,oBAAmB;AAC9C,SAASC,UAAU,QAAsB,cAAa;AACtD,SAASC,KAAK,QAAQ,aAAY;AAClC,SAASC,iBAAiB,QAAQ,+BAA8B;AAChE,SAASC,aAAa,QAAQ,qBAAoB;AAClD,SAASC,IAAI,QAAQ,YAAW;AAChC,SAASC,OAAO,QAAQ,eAAc;AACtC,SAASC,OAAO,EAAEC,qBAAqBC,eAAe,QAAQ,eAAc;AAE5E,uDAAuD;AACvD,MAAMC,mBAAmB;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;OACGD;CACJ;AAED,OAAO,MAAME,MAAM;IACjBL;IACAM,QAAQC,GAAG,CAACC,mBAAmB,GAAG;IAElC,MAAMC,OAAOlB,SAASe,QAAQI,IAAI,CAACC,KAAK,CAAC;IACzC,MAAMC,SAAS,AAAC,CAAA,OAAOH,KAAKI,CAAC,CAAC,EAAE,KAAK,WAAWJ,KAAKI,CAAC,CAAC,EAAE,GAAG,EAAC,EAAGC,WAAW;IAE3E,IAAIL,KAAKM,IAAI,EAAE;QACb,IAAIzB,KACFmB,KAAKM,IAAI,EACT;YACE,gGAAgG;YAChG,oHAAoH;YACpH,yBAAyB;YACzB,MAAMC,aAAa;gBAAEP;gBAAMG;YAAO;QACpC,GACA;YACE,+DAA+D;YAC/DK,SAAS;QACX;QAGFX,QAAQY,KAAK,CAACC,MAAM,IAAG,yBAAyB;QAEhD;IACF,OAAO;QACL,MAAM,EAAEC,OAAO,EAAE,GAAG,MAAMJ,aAAa;YAAEP;YAAMG;QAAO;QACtD,IAAIQ,SAAS;YACX,MAAMA,QAAQC,OAAO,IAAG,4EAA4E;QACtG;QACAf,QAAQgB,IAAI,CAAC;IACf;AACF,EAAC;AAED,eAAeN,aAAa,EAC1BP,IAAI,EACJG,MAAM,EAIP;IAOC,IAAIA,WAAW,QAAQ;QACrB,MAAMb;QACN,OAAO,CAAC;IACV;IAEA,IAAIa,WAAW,OAAO;QACpB,MAAMW,aAAad,KAAKI,CAAC,CAAC,EAAE;QAC5B,IAAI,CAACU,YAAY;YACfC,QAAQC,KAAK,CAAC;YACdnB,QAAQgB,IAAI,CAAC;QACf;QAEA,MAAMI,qBAAqBjC,KAAKkC,OAAO,CAACrB,QAAQsB,GAAG,IAAIL;QAEvD,0DAA0D;QAC1D,MAAMM,eAAevB,QAAQI,IAAI;QACjCJ,QAAQI,IAAI,GAAG;YAACJ,QAAQI,IAAI,CAAC,EAAE;YAAGJ,QAAQI,IAAI,CAAC,EAAE;eAAMD,KAAKI,CAAC,CAACF,KAAK,CAAC;SAAG;QAEvE,IAAI;YACF,MAAM,MAAM,CAACnB,cAAckC,oBAAoBI,QAAQ;QACzD,EAAE,OAAOL,OAAO;YACdD,QAAQC,KAAK,CAAC,CAAC,sBAAsB,EAAEC,oBAAoB;YAC3DF,QAAQC,KAAK,CAACA;YACdnB,QAAQgB,IAAI,CAAC;QACf,SAAU;YACR,gCAAgC;YAChChB,QAAQI,IAAI,GAAGmB;QACjB;QACA,OAAO,CAAC;IACV;IAEA,MAAME,aAAarC;IACnB,MAAMsC,gBAAgB,MAAM,MAAM,CAACxC,cAAcuC,YAAYD,QAAQ;IACrE,IAAIG,SAAS,MAAMD;IACnB,IAAIC,OAAOC,OAAO,EAAE;QAClBD,SAAS,MAAMA,OAAOC,OAAO;IAC/B;IAEA,MAAMC,gBAAgBC,MAAMC,OAAO,CAACJ,OAAO5B,GAAG,IAC1C4B,OAAO5B,GAAG,CAACiC,IAAI,CAAC,CAAC,EAAEC,GAAG,EAAmB,GAAKA,QAAQ3B,UACtD;IAEJ,IAAIuB,eAAe;QACjB,IAAI;YACF,MAAMK,SAAS,MAAM,MAAM,CAAChD,cAAc2C,cAAcZ,UAAU,EAAEO,QAAQ;YAE5E,IAAI,CAACU,OAAO5B,MAAM,IAAI,OAAO4B,OAAO5B,MAAM,KAAK,YAAY;gBACzDY,QAAQC,KAAK,CACX,CAAC,mDAAmD,EAAEU,cAAcI,GAAG,CAAC,IAAI,EAAEJ,cAAcZ,UAAU,EAAE;YAE5G,OAAO;gBACL,MAAMiB,OAAO5B,MAAM,CAACqB,QAAQQ,KAAK,CAAC,CAACC;oBACjClB,QAAQmB,GAAG,CAAC,CAAC,OAAO,EAAER,cAAcI,GAAG,CAAC,iBAAiB,CAAC;oBAC1Df,QAAQC,KAAK,CAACiB;gBAChB;YACF;QACF,EAAE,OAAOA,KAAK;YACZlB,QAAQmB,GAAG,CAAC,CAAC,6CAA6C,EAAER,cAAcI,GAAG,CAAC,QAAQ,CAAC;YACvFf,QAAQC,KAAK,CAACiB;QAChB;QAEA,OAAO,CAAC;IACV;IAEA,IAAI9B,OAAOgC,UAAU,CAAC,YAAY;QAChC,MAAM3C,QAAQ;YAAEgC;YAAQY,YAAYpC;QAAK;QACzC,OAAO,CAAC;IACV;IAEA,IAAIG,WAAW,kBAAkB;QAC/B,MAAMd,cAAcmC;QACpB,OAAO,CAAC;IACV;IAEA,IAAIrB,WAAW,sBAAsB;QACnC,MAAMf,kBAAkBoC;QACxB,OAAO,CAAC;IACV;IAEA,IAAIrB,WAAW,SAAS;QACtB,MAAMhB,MAAM;YAAEqC;QAAO;QACrB,OAAO,CAAC,EAAE,wEAAwE;;IACpF;IAEA,IAAIrB,WAAW,YAAY;QACzB,MAAMQ,UAAU,MAAMzB,WAAW;YAAEsC;QAAO,GAAG,qEAAqE;;QAClH,MAAMa,QAAQrC,KAAKqC,KAAK,GAAGC,SAAStC,KAAKqC,KAAK,EAAE,MAAME;QACtD,MAAMC,QAAQxC,KAAKwC,KAAK,GAAGxC,KAAKwC,KAAK,GAAGD;QACxC,MAAME,YAAY,CAAC,CAACzC,IAAI,CAAC,aAAa;QACtC,MAAM0C,kBAAkB,CAAC,CAAC1C,IAAI,CAAC,mBAAmB;QAElD,IAAI0C,iBAAiB;YACnB,MAAM/B,QAAQgC,IAAI,CAACD,eAAe,CAAC;gBACjCD;gBACAD;YACF;QACF;QAEA,MAAM7B,QAAQgC,IAAI,CAACC,GAAG,CAAC;YACrBH;YACAJ;YACAG;QACF;QAEA,OAAO;YAAE7B;QAAQ;IACnB;IAEA,IAAIR,WAAW,yBAAyB;QACtC,MAAMQ,UAAU,MAAMzB,WAAW;YAAEsC;QAAO,GAAG,qEAAqE;;QAClH,MAAMgB,QAAQxC,KAAKwC,KAAK,GAAGxC,KAAKwC,KAAK,GAAGD;QACxC,MAAME,YAAY,CAAC,CAACzC,IAAI,CAAC,aAAa;QAEtC,MAAMW,QAAQgC,IAAI,CAACD,eAAe,CAAC;YACjCD;YACAD;QACF;QAEA,OAAO;YAAE7B;QAAQ;IACnB;IAEA,IAAIR,WAAW,sBAAsB;QACnC,8EAA8E;QAC9E,MAAMQ,UAAU,MAAMzB,WAAW;YAAEsC;YAAQqB,kBAAkB;YAAMC,eAAe;QAAK,GAAG,0BAA0B;;QAEpH,IAAI,OAAOnC,QAAQoC,EAAE,CAACC,cAAc,KAAK,YAAY;YACnDrC,QAAQsC,MAAM,CAACjC,KAAK,CAAC;gBACnBkC,KAAK,GAAGvC,QAAQoC,EAAE,CAACI,WAAW,CAAC,4CAA4C,CAAC;YAC9E;YAEA,MAAMxC,QAAQC,OAAO;YACrBf,QAAQgB,IAAI,CAAC;QACf;QAEA,MAAMF,QAAQoC,EAAE,CAACC,cAAc,CAAC;YAC9Bd,KAAKlC,KAAKkC,GAAG,KAAK,UAAU,QAAQ;YACpCkB,UAAUpD,KAAKoD,QAAQ,KAAK,UAAU,QAAQ;QAChD;QAEA,OAAO;YAAEzC;QAAQ;IACnB;IAEAI,QAAQC,KAAK,CAACb,SAAS,CAAC,kBAAkB,EAAEA,OAAO,CAAC,CAAC,GAAG;IACxDY,QAAQmB,GAAG,CAAC,CAAC,uBAAuB,EAAEvC,iBAAiB0D,GAAG,CAAC,CAACC,IAAM,CAAC,IAAI,EAAEA,GAAG,EAAEC,IAAI,CAAC,OAAO;IAE1F1D,QAAQgB,IAAI,CAAC;AACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/bin/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAczD,eAAO,MAAM,iBAAiB,UAQ7B,CAAA;AAID,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,OAAO,yCAAgD,IAAI,KAAG,OAAO,CAAC,IAAI,CAkGtF,CAAA"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/bin/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAczD,eAAO,MAAM,iBAAiB,UAQ7B,CAAA;AAID,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,UAAU,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,OAAO,GAAU,sCAAsC,IAAI,KAAG,OAAO,CAAC,IAAI,CAkGtF,CAAA"}
@@ -3,9 +3,10 @@ import type { StaticDescription } from '../../admin/types.js';
3
3
  import type { ImportMap } from '../../bin/generateImportMap/index.js';
4
4
  import type { LivePreviewConfig, ServerOnlyLivePreviewProperties, StaticLabel } from '../../config/types.js';
5
5
  import type { ClientField } from '../../fields/config/client.js';
6
+ import type { ClientHierarchyConfig } from '../../hierarchy/types.js';
6
7
  import type { Payload } from '../../types/index.js';
7
8
  import type { SanitizedCollectionConfig } from './types.js';
8
- export type ServerOnlyCollectionProperties = keyof Pick<SanitizedCollectionConfig, 'access' | 'custom' | 'endpoints' | 'flattenedFields' | 'hooks' | 'indexes' | 'joins' | 'polymorphicJoins' | 'sanitizedIndexes'>;
9
+ export type ServerOnlyCollectionProperties = keyof Pick<SanitizedCollectionConfig, 'access' | 'custom' | 'endpoints' | 'flattenedFields' | 'hooks' | 'indexes' | 'joins' | 'polymorphicJoins' | 'sanitizedIndexes' | 'select'>;
9
10
  export type ServerOnlyCollectionAdminProperties = keyof Pick<SanitizedCollectionConfig['admin'], 'baseFilter' | 'baseListFilter' | 'components' | 'formatDocURL' | 'hidden'>;
10
11
  export type ServerOnlyUploadProperties = keyof Pick<SanitizedCollectionConfig['upload'], 'adminThumbnail' | 'externalFileHeaderFilter' | 'handlers' | 'modifyResponseHeaders' | 'withMetadata'>;
11
12
  export type ClientCollectionConfig = {
@@ -18,11 +19,12 @@ export type ClientCollectionConfig = {
18
19
  verify?: true;
19
20
  } & Omit<SanitizedCollectionConfig['auth'], 'forgotPassword' | 'strategies' | 'verify'>;
20
21
  fields: ClientField[];
22
+ hierarchy?: ClientHierarchyConfig | false;
21
23
  labels: {
22
24
  plural: StaticLabel;
23
25
  singular: StaticLabel;
24
26
  };
25
- } & Omit<SanitizedCollectionConfig, 'admin' | 'auth' | 'fields' | 'labels' | ServerOnlyCollectionProperties>;
27
+ } & Omit<SanitizedCollectionConfig, 'admin' | 'auth' | 'fields' | 'hierarchy' | 'labels' | ServerOnlyCollectionProperties>;
26
28
  export declare const createClientCollectionConfig: ({ collection, defaultIDType, i18n, importMap, }: {
27
29
  collection: SanitizedCollectionConfig;
28
30
  defaultIDType: Payload["config"]["db"]["defaultIDType"];
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/collections/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAA;AAErE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EACV,iBAAiB,EACjB,+BAA+B,EAC/B,WAAW,EACZ,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAI3D,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,yBAAyB,EACvB,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,OAAO,GACP,SAAS,GACT,OAAO,GACP,kBAAkB,GAClB,kBAAkB,CACrB,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG,MAAM,IAAI,CAC1D,yBAAyB,CAAC,OAAO,CAAC,EAClC,YAAY,GAAG,gBAAgB,GAAG,YAAY,GAAG,cAAc,GAAG,QAAQ,CAC3E,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,MAAM,IAAI,CACjD,yBAAyB,CAAC,QAAQ,CAAC,EACjC,gBAAgB,GAChB,0BAA0B,GAC1B,UAAU,GACV,uBAAuB,GACvB,cAAc,CACjB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE;QACL,WAAW,CAAC,EAAE,iBAAiB,CAAA;QAC/B,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;QACtE,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,GAAG,IAAI,CACN,yBAAyB,CAAC,OAAO,CAAC,EAChC,YAAY,GACZ,aAAa,GACb,cAAc,GACd,OAAO,GACP,aAAa,GACb,SAAS,GACT,mCAAmC,CACtC,CAAA;IACD,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAC7B,yBAAyB,CAAC,MAAM,CAAC,EACjC,gBAAgB,GAAG,YAAY,GAAG,QAAQ,CAC3C,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,MAAM,EAAE;QACN,MAAM,EAAE,WAAW,CAAA;QACnB,QAAQ,EAAE,WAAW,CAAA;KACtB,CAAA;CACF,GAAG,IAAI,CACN,yBAAyB,EACzB,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,8BAA8B,CACxE,CAAA;AAmCD,eAAO,MAAM,4BAA4B,oDAKtC;IACD,UAAU,EAAE,yBAAyB,CAAA;IACrC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,sBA6KH,CAAA;AAED,eAAO,MAAM,6BAA6B,qDAKvC;IACD,WAAW,EAAE,yBAAyB,EAAE,CAAA;IACxC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,sBAAsB,EAezB,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/collections/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAA;AAErE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EACV,iBAAiB,EACjB,+BAA+B,EAC/B,WAAW,EACZ,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAI3D,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,yBAAyB,EACvB,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,OAAO,GACP,SAAS,GACT,OAAO,GACP,kBAAkB,GAClB,kBAAkB,GAClB,QAAQ,CACX,CAAA;AAED,MAAM,MAAM,mCAAmC,GAAG,MAAM,IAAI,CAC1D,yBAAyB,CAAC,OAAO,CAAC,EAClC,YAAY,GAAG,gBAAgB,GAAG,YAAY,GAAG,cAAc,GAAG,QAAQ,CAC3E,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG,MAAM,IAAI,CACjD,yBAAyB,CAAC,QAAQ,CAAC,EACjC,gBAAgB,GAChB,0BAA0B,GAC1B,UAAU,GACV,uBAAuB,GACvB,cAAc,CACjB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE;QACL,WAAW,CAAC,EAAE,iBAAiB,CAAA;QAC/B,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;QACtE,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,GAAG,IAAI,CACN,yBAAyB,CAAC,OAAO,CAAC,EAChC,YAAY,GACZ,aAAa,GACb,cAAc,GACd,OAAO,GACP,aAAa,GACb,SAAS,GACT,mCAAmC,CACtC,CAAA;IACD,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAC7B,yBAAyB,CAAC,MAAM,CAAC,EACjC,gBAAgB,GAAG,YAAY,GAAG,QAAQ,CAC3C,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,SAAS,CAAC,EAAE,qBAAqB,GAAG,KAAK,CAAA;IACzC,MAAM,EAAE;QACN,MAAM,EAAE,WAAW,CAAA;QACnB,QAAQ,EAAE,WAAW,CAAA;KACtB,CAAA;CACF,GAAG,IAAI,CACN,yBAAyB,EACzB,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,8BAA8B,CACtF,CAAA;AAoCD,eAAO,MAAM,4BAA4B,GAAI,iDAK1C;IACD,UAAU,EAAE,yBAAyB,CAAA;IACrC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,sBA0LH,CAAA;AAED,eAAO,MAAM,6BAA6B,GAAI,kDAK3C;IACD,WAAW,EAAE,yBAAyB,EAAE,CAAA;IACxC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,sBAAsB,EAezB,CAAA"}
@@ -8,7 +8,8 @@ const serverOnlyCollectionProperties = [
8
8
  'polymorphicJoins',
9
9
  'flattenedFields',
10
10
  'indexes',
11
- 'sanitizedIndexes'
11
+ 'sanitizedIndexes',
12
+ 'select'
12
13
  ];
13
14
  const serverOnlyUploadProperties = [
14
15
  'adminThumbnail',
@@ -119,6 +120,17 @@ export const createClientCollectionConfig = ({ collection, defaultIDType, i18n,
119
120
  importMap
120
121
  });
121
122
  break;
123
+ case 'hierarchy':
124
+ {
125
+ if (!collection.hierarchy || typeof collection.hierarchy !== 'object') {
126
+ clientCollection.hierarchy = false;
127
+ break;
128
+ }
129
+ // Strip slugify function as it can't cross server-client boundary
130
+ const { slugify: _slugify, ...clientHierarchy } = collection.hierarchy;
131
+ clientCollection.hierarchy = clientHierarchy;
132
+ break;
133
+ }
122
134
  case 'labels':
123
135
  clientCollection.labels = {
124
136
  plural: typeof collection.labels.plural === 'function' ? collection.labels.plural({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/config/client.ts"],"sourcesContent":["import type { I18nClient, TFunction } from '@payloadcms/translations'\n\nimport type { StaticDescription } from '../../admin/types.js'\nimport type { ImportMap } from '../../bin/generateImportMap/index.js'\nimport type {\n LivePreviewConfig,\n ServerOnlyLivePreviewProperties,\n StaticLabel,\n} from '../../config/types.js'\nimport type { ClientField } from '../../fields/config/client.js'\nimport type { Payload } from '../../types/index.js'\nimport type { SanitizedUploadConfig } from '../../uploads/types.js'\nimport type { SanitizedCollectionConfig } from './types.js'\n\nimport { createClientFields } from '../../fields/config/client.js'\n\nexport type ServerOnlyCollectionProperties = keyof Pick<\n SanitizedCollectionConfig,\n | 'access'\n | 'custom'\n | 'endpoints'\n | 'flattenedFields'\n | 'hooks'\n | 'indexes'\n | 'joins'\n | 'polymorphicJoins'\n | 'sanitizedIndexes'\n>\n\nexport type ServerOnlyCollectionAdminProperties = keyof Pick<\n SanitizedCollectionConfig['admin'],\n 'baseFilter' | 'baseListFilter' | 'components' | 'formatDocURL' | 'hidden'\n>\n\nexport type ServerOnlyUploadProperties = keyof Pick<\n SanitizedCollectionConfig['upload'],\n | 'adminThumbnail'\n | 'externalFileHeaderFilter'\n | 'handlers'\n | 'modifyResponseHeaders'\n | 'withMetadata'\n>\n\nexport type ClientCollectionConfig = {\n admin: {\n description?: StaticDescription\n livePreview?: Omit<LivePreviewConfig, ServerOnlyLivePreviewProperties>\n preview?: boolean\n } & Omit<\n SanitizedCollectionConfig['admin'],\n | 'components'\n | 'description'\n | 'formatDocURL'\n | 'joins'\n | 'livePreview'\n | 'preview'\n | ServerOnlyCollectionAdminProperties\n >\n auth?: { verify?: true } & Omit<\n SanitizedCollectionConfig['auth'],\n 'forgotPassword' | 'strategies' | 'verify'\n >\n fields: ClientField[]\n labels: {\n plural: StaticLabel\n singular: StaticLabel\n }\n} & Omit<\n SanitizedCollectionConfig,\n 'admin' | 'auth' | 'fields' | 'labels' | ServerOnlyCollectionProperties\n>\n\nconst serverOnlyCollectionProperties: Partial<ServerOnlyCollectionProperties>[] = [\n 'hooks',\n 'access',\n 'endpoints',\n 'custom',\n 'joins',\n 'polymorphicJoins',\n 'flattenedFields',\n 'indexes',\n 'sanitizedIndexes',\n // `upload`\n // `admin`\n // are all handled separately\n]\n\nconst serverOnlyUploadProperties: Partial<ServerOnlyUploadProperties>[] = [\n 'adminThumbnail',\n 'externalFileHeaderFilter',\n 'handlers',\n 'modifyResponseHeaders',\n 'withMetadata',\n]\n\nconst serverOnlyCollectionAdminProperties: Partial<ServerOnlyCollectionAdminProperties>[] = [\n 'hidden',\n 'baseFilter',\n 'baseListFilter',\n 'components',\n 'formatDocURL',\n // 'preview' is handled separately\n // `livePreview` is handled separately\n]\n\nexport const createClientCollectionConfig = ({\n collection,\n defaultIDType,\n i18n,\n importMap,\n}: {\n collection: SanitizedCollectionConfig\n defaultIDType: Payload['config']['db']['defaultIDType']\n i18n: I18nClient\n importMap: ImportMap\n}): ClientCollectionConfig => {\n const clientCollection = {} as Partial<ClientCollectionConfig>\n\n for (const key in collection) {\n if (serverOnlyCollectionProperties.includes(key as any)) {\n continue\n }\n switch (key) {\n case 'admin':\n if (!collection.admin) {\n break\n }\n\n clientCollection.admin = {} as ClientCollectionConfig['admin']\n\n for (const adminKey in collection.admin) {\n if (serverOnlyCollectionAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if (\n typeof collection.admin.description === 'string' ||\n typeof collection.admin.description === 'object'\n ) {\n if (collection.admin.description) {\n clientCollection.admin.description = collection.admin.description\n }\n } else if (typeof collection.admin.description === 'function') {\n const description = collection.admin.description({ t: i18n.t as TFunction })\n\n if (description) {\n clientCollection.admin.description = description\n }\n }\n break\n\n case 'livePreview':\n clientCollection.admin.livePreview = {}\n\n if (collection.admin.livePreview?.breakpoints) {\n clientCollection.admin.livePreview.breakpoints =\n collection.admin.livePreview.breakpoints\n }\n\n break\n\n case 'preview':\n if (collection.admin.preview) {\n clientCollection.admin.preview = true\n }\n\n break\n\n default:\n ;(clientCollection as any).admin[adminKey] =\n collection.admin[adminKey as keyof SanitizedCollectionConfig['admin']]\n }\n }\n\n break\n\n case 'auth':\n if (!collection.auth) {\n break\n }\n\n clientCollection.auth = {} as { verify?: true } & SanitizedCollectionConfig['auth']\n\n if (collection.auth.cookies) {\n clientCollection.auth.cookies = collection.auth.cookies\n }\n\n if (collection.auth.depth !== undefined) {\n // Check for undefined as it can be a number (0)\n clientCollection.auth.depth = collection.auth.depth\n }\n\n if (collection.auth.disableLocalStrategy) {\n clientCollection.auth.disableLocalStrategy = collection.auth.disableLocalStrategy\n }\n\n if (collection.auth.lockTime !== undefined) {\n // Check for undefined as it can be a number (0)\n clientCollection.auth.lockTime = collection.auth.lockTime\n }\n\n if (collection.auth.loginWithUsername) {\n clientCollection.auth.loginWithUsername = collection.auth.loginWithUsername\n }\n\n if (collection.auth.maxLoginAttempts !== undefined) {\n // Check for undefined as it can be a number (0)\n clientCollection.auth.maxLoginAttempts = collection.auth.maxLoginAttempts\n }\n\n if (collection.auth.removeTokenFromResponses) {\n clientCollection.auth.removeTokenFromResponses = collection.auth.removeTokenFromResponses\n }\n\n if (collection.auth.useAPIKey) {\n clientCollection.auth.useAPIKey = collection.auth.useAPIKey\n }\n\n if (collection.auth.tokenExpiration) {\n clientCollection.auth.tokenExpiration = collection.auth.tokenExpiration\n }\n\n if (collection.auth.verify) {\n clientCollection.auth.verify = true\n }\n\n break\n\n case 'fields':\n clientCollection.fields = createClientFields({\n defaultIDType,\n fields: collection.fields,\n i18n,\n importMap,\n })\n\n break\n\n case 'labels':\n clientCollection.labels = {\n plural:\n typeof collection.labels.plural === 'function'\n ? collection.labels.plural({ i18n, t: i18n.t as TFunction })\n : collection.labels.plural,\n singular:\n typeof collection.labels.singular === 'function'\n ? collection.labels.singular({ i18n, t: i18n.t as TFunction })\n : collection.labels.singular,\n }\n\n break\n\n case 'upload':\n if (!collection.upload) {\n break\n }\n\n clientCollection.upload = {} as SanitizedUploadConfig\n\n for (const uploadKey in collection.upload) {\n if (serverOnlyUploadProperties.includes(uploadKey as any)) {\n continue\n }\n\n if (uploadKey === 'imageSizes') {\n clientCollection.upload.imageSizes = collection.upload.imageSizes?.map((size) => {\n const sanitizedSize = { ...size }\n if ('generateImageName' in sanitizedSize) {\n delete sanitizedSize.generateImageName\n }\n return sanitizedSize\n })\n } else {\n ;(clientCollection.upload as any)[uploadKey] =\n collection.upload[uploadKey as keyof SanitizedUploadConfig]\n }\n }\n\n break\n\n default:\n ;(clientCollection as any)[key] = collection[key as keyof SanitizedCollectionConfig]\n }\n }\n\n return clientCollection as ClientCollectionConfig\n}\n\nexport const createClientCollectionConfigs = ({\n collections,\n defaultIDType,\n i18n,\n importMap,\n}: {\n collections: SanitizedCollectionConfig[]\n defaultIDType: Payload['config']['db']['defaultIDType']\n i18n: I18nClient\n importMap: ImportMap\n}): ClientCollectionConfig[] => {\n const clientCollections = new Array(collections.length)\n\n for (let i = 0; i < collections.length; i++) {\n const collection = collections[i]!\n\n clientCollections[i] = createClientCollectionConfig({\n collection,\n defaultIDType,\n i18n,\n importMap,\n })\n }\n\n return clientCollections\n}\n"],"names":["createClientFields","serverOnlyCollectionProperties","serverOnlyUploadProperties","serverOnlyCollectionAdminProperties","createClientCollectionConfig","collection","defaultIDType","i18n","importMap","clientCollection","key","includes","admin","adminKey","description","t","livePreview","breakpoints","preview","auth","cookies","depth","undefined","disableLocalStrategy","lockTime","loginWithUsername","maxLoginAttempts","removeTokenFromResponses","useAPIKey","tokenExpiration","verify","fields","labels","plural","singular","upload","uploadKey","imageSizes","map","size","sanitizedSize","generateImageName","createClientCollectionConfigs","collections","clientCollections","Array","length","i"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/collections/config/client.ts"],"sourcesContent":["import type { I18nClient, TFunction } from '@payloadcms/translations'\n\nimport type { StaticDescription } from '../../admin/types.js'\nimport type { ImportMap } from '../../bin/generateImportMap/index.js'\nimport type {\n LivePreviewConfig,\n ServerOnlyLivePreviewProperties,\n StaticLabel,\n} from '../../config/types.js'\nimport type { ClientField } from '../../fields/config/client.js'\nimport type { ClientHierarchyConfig } from '../../hierarchy/types.js'\nimport type { Payload } from '../../types/index.js'\nimport type { SanitizedUploadConfig } from '../../uploads/types.js'\nimport type { SanitizedCollectionConfig } from './types.js'\n\nimport { createClientFields } from '../../fields/config/client.js'\n\nexport type ServerOnlyCollectionProperties = keyof Pick<\n SanitizedCollectionConfig,\n | 'access'\n | 'custom'\n | 'endpoints'\n | 'flattenedFields'\n | 'hooks'\n | 'indexes'\n | 'joins'\n | 'polymorphicJoins'\n | 'sanitizedIndexes'\n | 'select'\n>\n\nexport type ServerOnlyCollectionAdminProperties = keyof Pick<\n SanitizedCollectionConfig['admin'],\n 'baseFilter' | 'baseListFilter' | 'components' | 'formatDocURL' | 'hidden'\n>\n\nexport type ServerOnlyUploadProperties = keyof Pick<\n SanitizedCollectionConfig['upload'],\n | 'adminThumbnail'\n | 'externalFileHeaderFilter'\n | 'handlers'\n | 'modifyResponseHeaders'\n | 'withMetadata'\n>\n\nexport type ClientCollectionConfig = {\n admin: {\n description?: StaticDescription\n livePreview?: Omit<LivePreviewConfig, ServerOnlyLivePreviewProperties>\n preview?: boolean\n } & Omit<\n SanitizedCollectionConfig['admin'],\n | 'components'\n | 'description'\n | 'formatDocURL'\n | 'joins'\n | 'livePreview'\n | 'preview'\n | ServerOnlyCollectionAdminProperties\n >\n auth?: { verify?: true } & Omit<\n SanitizedCollectionConfig['auth'],\n 'forgotPassword' | 'strategies' | 'verify'\n >\n fields: ClientField[]\n hierarchy?: ClientHierarchyConfig | false\n labels: {\n plural: StaticLabel\n singular: StaticLabel\n }\n} & Omit<\n SanitizedCollectionConfig,\n 'admin' | 'auth' | 'fields' | 'hierarchy' | 'labels' | ServerOnlyCollectionProperties\n>\n\nconst serverOnlyCollectionProperties: Partial<ServerOnlyCollectionProperties>[] = [\n 'hooks',\n 'access',\n 'endpoints',\n 'custom',\n 'joins',\n 'polymorphicJoins',\n 'flattenedFields',\n 'indexes',\n 'sanitizedIndexes',\n 'select',\n // `upload`\n // `admin`\n // are all handled separately\n]\n\nconst serverOnlyUploadProperties: Partial<ServerOnlyUploadProperties>[] = [\n 'adminThumbnail',\n 'externalFileHeaderFilter',\n 'handlers',\n 'modifyResponseHeaders',\n 'withMetadata',\n]\n\nconst serverOnlyCollectionAdminProperties: Partial<ServerOnlyCollectionAdminProperties>[] = [\n 'hidden',\n 'baseFilter',\n 'baseListFilter',\n 'components',\n 'formatDocURL',\n // 'preview' is handled separately\n // `livePreview` is handled separately\n]\n\nexport const createClientCollectionConfig = ({\n collection,\n defaultIDType,\n i18n,\n importMap,\n}: {\n collection: SanitizedCollectionConfig\n defaultIDType: Payload['config']['db']['defaultIDType']\n i18n: I18nClient\n importMap: ImportMap\n}): ClientCollectionConfig => {\n const clientCollection = {} as Partial<ClientCollectionConfig>\n\n for (const key in collection) {\n if (serverOnlyCollectionProperties.includes(key as any)) {\n continue\n }\n switch (key) {\n case 'admin':\n if (!collection.admin) {\n break\n }\n\n clientCollection.admin = {} as ClientCollectionConfig['admin']\n\n for (const adminKey in collection.admin) {\n if (serverOnlyCollectionAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if (\n typeof collection.admin.description === 'string' ||\n typeof collection.admin.description === 'object'\n ) {\n if (collection.admin.description) {\n clientCollection.admin.description = collection.admin.description\n }\n } else if (typeof collection.admin.description === 'function') {\n const description = collection.admin.description({ t: i18n.t as TFunction })\n\n if (description) {\n clientCollection.admin.description = description\n }\n }\n break\n\n case 'livePreview':\n clientCollection.admin.livePreview = {}\n\n if (collection.admin.livePreview?.breakpoints) {\n clientCollection.admin.livePreview.breakpoints =\n collection.admin.livePreview.breakpoints\n }\n\n break\n\n case 'preview':\n if (collection.admin.preview) {\n clientCollection.admin.preview = true\n }\n\n break\n\n default:\n ;(clientCollection as any).admin[adminKey] =\n collection.admin[adminKey as keyof SanitizedCollectionConfig['admin']]\n }\n }\n\n break\n\n case 'auth':\n if (!collection.auth) {\n break\n }\n\n clientCollection.auth = {} as { verify?: true } & SanitizedCollectionConfig['auth']\n\n if (collection.auth.cookies) {\n clientCollection.auth.cookies = collection.auth.cookies\n }\n\n if (collection.auth.depth !== undefined) {\n // Check for undefined as it can be a number (0)\n clientCollection.auth.depth = collection.auth.depth\n }\n\n if (collection.auth.disableLocalStrategy) {\n clientCollection.auth.disableLocalStrategy = collection.auth.disableLocalStrategy\n }\n\n if (collection.auth.lockTime !== undefined) {\n // Check for undefined as it can be a number (0)\n clientCollection.auth.lockTime = collection.auth.lockTime\n }\n\n if (collection.auth.loginWithUsername) {\n clientCollection.auth.loginWithUsername = collection.auth.loginWithUsername\n }\n\n if (collection.auth.maxLoginAttempts !== undefined) {\n // Check for undefined as it can be a number (0)\n clientCollection.auth.maxLoginAttempts = collection.auth.maxLoginAttempts\n }\n\n if (collection.auth.removeTokenFromResponses) {\n clientCollection.auth.removeTokenFromResponses = collection.auth.removeTokenFromResponses\n }\n\n if (collection.auth.useAPIKey) {\n clientCollection.auth.useAPIKey = collection.auth.useAPIKey\n }\n\n if (collection.auth.tokenExpiration) {\n clientCollection.auth.tokenExpiration = collection.auth.tokenExpiration\n }\n\n if (collection.auth.verify) {\n clientCollection.auth.verify = true\n }\n\n break\n\n case 'fields':\n clientCollection.fields = createClientFields({\n defaultIDType,\n fields: collection.fields,\n i18n,\n importMap,\n })\n\n break\n\n case 'hierarchy': {\n if (!collection.hierarchy || typeof collection.hierarchy !== 'object') {\n clientCollection.hierarchy = false\n break\n }\n\n // Strip slugify function as it can't cross server-client boundary\n const { slugify: _slugify, ...clientHierarchy } = collection.hierarchy\n clientCollection.hierarchy = clientHierarchy as ClientHierarchyConfig\n\n break\n }\n\n case 'labels':\n clientCollection.labels = {\n plural:\n typeof collection.labels.plural === 'function'\n ? collection.labels.plural({ i18n, t: i18n.t as TFunction })\n : collection.labels.plural,\n singular:\n typeof collection.labels.singular === 'function'\n ? collection.labels.singular({ i18n, t: i18n.t as TFunction })\n : collection.labels.singular,\n }\n\n break\n\n case 'upload':\n if (!collection.upload) {\n break\n }\n\n clientCollection.upload = {} as SanitizedUploadConfig\n\n for (const uploadKey in collection.upload) {\n if (serverOnlyUploadProperties.includes(uploadKey as any)) {\n continue\n }\n\n if (uploadKey === 'imageSizes') {\n clientCollection.upload.imageSizes = collection.upload.imageSizes?.map((size) => {\n const sanitizedSize = { ...size }\n if ('generateImageName' in sanitizedSize) {\n delete sanitizedSize.generateImageName\n }\n return sanitizedSize\n })\n } else {\n ;(clientCollection.upload as any)[uploadKey] =\n collection.upload[uploadKey as keyof SanitizedUploadConfig]\n }\n }\n\n break\n\n default:\n ;(clientCollection as any)[key] = collection[key as keyof SanitizedCollectionConfig]\n }\n }\n\n return clientCollection as ClientCollectionConfig\n}\n\nexport const createClientCollectionConfigs = ({\n collections,\n defaultIDType,\n i18n,\n importMap,\n}: {\n collections: SanitizedCollectionConfig[]\n defaultIDType: Payload['config']['db']['defaultIDType']\n i18n: I18nClient\n importMap: ImportMap\n}): ClientCollectionConfig[] => {\n const clientCollections = new Array(collections.length)\n\n for (let i = 0; i < collections.length; i++) {\n const collection = collections[i]!\n\n clientCollections[i] = createClientCollectionConfig({\n collection,\n defaultIDType,\n i18n,\n importMap,\n })\n }\n\n return clientCollections\n}\n"],"names":["createClientFields","serverOnlyCollectionProperties","serverOnlyUploadProperties","serverOnlyCollectionAdminProperties","createClientCollectionConfig","collection","defaultIDType","i18n","importMap","clientCollection","key","includes","admin","adminKey","description","t","livePreview","breakpoints","preview","auth","cookies","depth","undefined","disableLocalStrategy","lockTime","loginWithUsername","maxLoginAttempts","removeTokenFromResponses","useAPIKey","tokenExpiration","verify","fields","hierarchy","slugify","_slugify","clientHierarchy","labels","plural","singular","upload","uploadKey","imageSizes","map","size","sanitizedSize","generateImageName","createClientCollectionConfigs","collections","clientCollections","Array","length","i"],"mappings":"AAeA,SAASA,kBAAkB,QAAQ,gCAA+B;AA4DlE,MAAMC,iCAA4E;IAChF;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CAID;AAED,MAAMC,6BAAoE;IACxE;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,sCAAsF;IAC1F;IACA;IACA;IACA;IACA;CAGD;AAED,OAAO,MAAMC,+BAA+B,CAAC,EAC3CC,UAAU,EACVC,aAAa,EACbC,IAAI,EACJC,SAAS,EAMV;IACC,MAAMC,mBAAmB,CAAC;IAE1B,IAAK,MAAMC,OAAOL,WAAY;QAC5B,IAAIJ,+BAA+BU,QAAQ,CAACD,MAAa;YACvD;QACF;QACA,OAAQA;YACN,KAAK;gBACH,IAAI,CAACL,WAAWO,KAAK,EAAE;oBACrB;gBACF;gBAEAH,iBAAiBG,KAAK,GAAG,CAAC;gBAE1B,IAAK,MAAMC,YAAYR,WAAWO,KAAK,CAAE;oBACvC,IAAIT,oCAAoCQ,QAAQ,CAACE,WAAkB;wBACjE;oBACF;oBAEA,OAAQA;wBACN,KAAK;4BACH,IACE,OAAOR,WAAWO,KAAK,CAACE,WAAW,KAAK,YACxC,OAAOT,WAAWO,KAAK,CAACE,WAAW,KAAK,UACxC;gCACA,IAAIT,WAAWO,KAAK,CAACE,WAAW,EAAE;oCAChCL,iBAAiBG,KAAK,CAACE,WAAW,GAAGT,WAAWO,KAAK,CAACE,WAAW;gCACnE;4BACF,OAAO,IAAI,OAAOT,WAAWO,KAAK,CAACE,WAAW,KAAK,YAAY;gCAC7D,MAAMA,cAAcT,WAAWO,KAAK,CAACE,WAAW,CAAC;oCAAEC,GAAGR,KAAKQ,CAAC;gCAAc;gCAE1E,IAAID,aAAa;oCACfL,iBAAiBG,KAAK,CAACE,WAAW,GAAGA;gCACvC;4BACF;4BACA;wBAEF,KAAK;4BACHL,iBAAiBG,KAAK,CAACI,WAAW,GAAG,CAAC;4BAEtC,IAAIX,WAAWO,KAAK,CAACI,WAAW,EAAEC,aAAa;gCAC7CR,iBAAiBG,KAAK,CAACI,WAAW,CAACC,WAAW,GAC5CZ,WAAWO,KAAK,CAACI,WAAW,CAACC,WAAW;4BAC5C;4BAEA;wBAEF,KAAK;4BACH,IAAIZ,WAAWO,KAAK,CAACM,OAAO,EAAE;gCAC5BT,iBAAiBG,KAAK,CAACM,OAAO,GAAG;4BACnC;4BAEA;wBAEF;;4BACIT,iBAAyBG,KAAK,CAACC,SAAS,GACxCR,WAAWO,KAAK,CAACC,SAAqD;oBAC5E;gBACF;gBAEA;YAEF,KAAK;gBACH,IAAI,CAACR,WAAWc,IAAI,EAAE;oBACpB;gBACF;gBAEAV,iBAAiBU,IAAI,GAAG,CAAC;gBAEzB,IAAId,WAAWc,IAAI,CAACC,OAAO,EAAE;oBAC3BX,iBAAiBU,IAAI,CAACC,OAAO,GAAGf,WAAWc,IAAI,CAACC,OAAO;gBACzD;gBAEA,IAAIf,WAAWc,IAAI,CAACE,KAAK,KAAKC,WAAW;oBACvC,gDAAgD;oBAChDb,iBAAiBU,IAAI,CAACE,KAAK,GAAGhB,WAAWc,IAAI,CAACE,KAAK;gBACrD;gBAEA,IAAIhB,WAAWc,IAAI,CAACI,oBAAoB,EAAE;oBACxCd,iBAAiBU,IAAI,CAACI,oBAAoB,GAAGlB,WAAWc,IAAI,CAACI,oBAAoB;gBACnF;gBAEA,IAAIlB,WAAWc,IAAI,CAACK,QAAQ,KAAKF,WAAW;oBAC1C,gDAAgD;oBAChDb,iBAAiBU,IAAI,CAACK,QAAQ,GAAGnB,WAAWc,IAAI,CAACK,QAAQ;gBAC3D;gBAEA,IAAInB,WAAWc,IAAI,CAACM,iBAAiB,EAAE;oBACrChB,iBAAiBU,IAAI,CAACM,iBAAiB,GAAGpB,WAAWc,IAAI,CAACM,iBAAiB;gBAC7E;gBAEA,IAAIpB,WAAWc,IAAI,CAACO,gBAAgB,KAAKJ,WAAW;oBAClD,gDAAgD;oBAChDb,iBAAiBU,IAAI,CAACO,gBAAgB,GAAGrB,WAAWc,IAAI,CAACO,gBAAgB;gBAC3E;gBAEA,IAAIrB,WAAWc,IAAI,CAACQ,wBAAwB,EAAE;oBAC5ClB,iBAAiBU,IAAI,CAACQ,wBAAwB,GAAGtB,WAAWc,IAAI,CAACQ,wBAAwB;gBAC3F;gBAEA,IAAItB,WAAWc,IAAI,CAACS,SAAS,EAAE;oBAC7BnB,iBAAiBU,IAAI,CAACS,SAAS,GAAGvB,WAAWc,IAAI,CAACS,SAAS;gBAC7D;gBAEA,IAAIvB,WAAWc,IAAI,CAACU,eAAe,EAAE;oBACnCpB,iBAAiBU,IAAI,CAACU,eAAe,GAAGxB,WAAWc,IAAI,CAACU,eAAe;gBACzE;gBAEA,IAAIxB,WAAWc,IAAI,CAACW,MAAM,EAAE;oBAC1BrB,iBAAiBU,IAAI,CAACW,MAAM,GAAG;gBACjC;gBAEA;YAEF,KAAK;gBACHrB,iBAAiBsB,MAAM,GAAG/B,mBAAmB;oBAC3CM;oBACAyB,QAAQ1B,WAAW0B,MAAM;oBACzBxB;oBACAC;gBACF;gBAEA;YAEF,KAAK;gBAAa;oBAChB,IAAI,CAACH,WAAW2B,SAAS,IAAI,OAAO3B,WAAW2B,SAAS,KAAK,UAAU;wBACrEvB,iBAAiBuB,SAAS,GAAG;wBAC7B;oBACF;oBAEA,kEAAkE;oBAClE,MAAM,EAAEC,SAASC,QAAQ,EAAE,GAAGC,iBAAiB,GAAG9B,WAAW2B,SAAS;oBACtEvB,iBAAiBuB,SAAS,GAAGG;oBAE7B;gBACF;YAEA,KAAK;gBACH1B,iBAAiB2B,MAAM,GAAG;oBACxBC,QACE,OAAOhC,WAAW+B,MAAM,CAACC,MAAM,KAAK,aAChChC,WAAW+B,MAAM,CAACC,MAAM,CAAC;wBAAE9B;wBAAMQ,GAAGR,KAAKQ,CAAC;oBAAc,KACxDV,WAAW+B,MAAM,CAACC,MAAM;oBAC9BC,UACE,OAAOjC,WAAW+B,MAAM,CAACE,QAAQ,KAAK,aAClCjC,WAAW+B,MAAM,CAACE,QAAQ,CAAC;wBAAE/B;wBAAMQ,GAAGR,KAAKQ,CAAC;oBAAc,KAC1DV,WAAW+B,MAAM,CAACE,QAAQ;gBAClC;gBAEA;YAEF,KAAK;gBACH,IAAI,CAACjC,WAAWkC,MAAM,EAAE;oBACtB;gBACF;gBAEA9B,iBAAiB8B,MAAM,GAAG,CAAC;gBAE3B,IAAK,MAAMC,aAAanC,WAAWkC,MAAM,CAAE;oBACzC,IAAIrC,2BAA2BS,QAAQ,CAAC6B,YAAmB;wBACzD;oBACF;oBAEA,IAAIA,cAAc,cAAc;wBAC9B/B,iBAAiB8B,MAAM,CAACE,UAAU,GAAGpC,WAAWkC,MAAM,CAACE,UAAU,EAAEC,IAAI,CAACC;4BACtE,MAAMC,gBAAgB;gCAAE,GAAGD,IAAI;4BAAC;4BAChC,IAAI,uBAAuBC,eAAe;gCACxC,OAAOA,cAAcC,iBAAiB;4BACxC;4BACA,OAAOD;wBACT;oBACF,OAAO;;wBACHnC,iBAAiB8B,MAAM,AAAQ,CAACC,UAAU,GAC1CnC,WAAWkC,MAAM,CAACC,UAAyC;oBAC/D;gBACF;gBAEA;YAEF;;gBACI/B,gBAAwB,CAACC,IAAI,GAAGL,UAAU,CAACK,IAAuC;QACxF;IACF;IAEA,OAAOD;AACT,EAAC;AAED,OAAO,MAAMqC,gCAAgC,CAAC,EAC5CC,WAAW,EACXzC,aAAa,EACbC,IAAI,EACJC,SAAS,EAMV;IACC,MAAMwC,oBAAoB,IAAIC,MAAMF,YAAYG,MAAM;IAEtD,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,YAAYG,MAAM,EAAEC,IAAK;QAC3C,MAAM9C,aAAa0C,WAAW,CAACI,EAAE;QAEjCH,iBAAiB,CAACG,EAAE,GAAG/C,6BAA6B;YAClDC;YACAC;YACAC;YACAC;QACF;IACF;IAEA,OAAOwC;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/collections/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAIlD;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CA8C9C,CAAA;AAED,eAAO,MAAM,6BAA6B,eAAgB,gBAAgB,KAAG,gBA0D5E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,gBAY1B,CAAA;AAED,eAAO,MAAM,uBAAuB,SAAU,gBAAgB,KAAG,gBAqBhE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,wBAIvC,CAAA;AAED,eAAO,MAAM,oCAAoC,sBAC5B,wBAAwB,KAC1C,wBAM6B,CAAA"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../src/collections/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAIlD;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CA8C9C,CAAA;AAED,eAAO,MAAM,6BAA6B,GAAI,YAAY,gBAAgB,KAAG,gBA0D5E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,gBAY1B,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,MAAM,gBAAgB,KAAG,gBAqBhE,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,wBAIvC,CAAA;AAED,eAAO,MAAM,oCAAoC,GAC/C,mBAAmB,wBAAwB,KAC1C,wBAM6B,CAAA"}
@@ -86,7 +86,7 @@ export const addDefaultsToCollectionConfig = (collection)=>{
86
86
  collection.custom = collection.custom ?? {};
87
87
  collection.endpoints = collection.endpoints ?? [];
88
88
  collection.fields = collection.fields ?? [];
89
- collection.folders = collection.folders ?? false;
89
+ collection.hierarchy = collection.hierarchy ?? false;
90
90
  collection.hooks = {
91
91
  afterChange: [],
92
92
  afterDelete: [],
@@ -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":"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"}
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":"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"}
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"}