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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. package/dist/admin/RichText.d.ts +3 -16
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/adapters/cookies.d.ts +21 -0
  5. package/dist/admin/adapters/cookies.d.ts.map +1 -0
  6. package/dist/admin/adapters/cookies.js +3 -0
  7. package/dist/admin/adapters/cookies.js.map +1 -0
  8. package/dist/admin/adapters/index.d.ts +4 -0
  9. package/dist/admin/adapters/index.d.ts.map +1 -0
  10. package/dist/admin/adapters/index.js +3 -0
  11. package/dist/admin/adapters/index.js.map +1 -0
  12. package/dist/admin/adapters/router.d.ts +56 -0
  13. package/dist/admin/adapters/router.d.ts.map +1 -0
  14. package/dist/admin/adapters/router.js +3 -0
  15. package/dist/admin/adapters/router.js.map +1 -0
  16. package/dist/admin/adapters/server.d.ts +23 -0
  17. package/dist/admin/adapters/server.d.ts.map +1 -0
  18. package/dist/admin/adapters/server.js +6 -0
  19. package/dist/admin/adapters/server.js.map +1 -0
  20. package/dist/admin/elements/Nav.d.ts +13 -0
  21. package/dist/admin/elements/Nav.d.ts.map +1 -1
  22. package/dist/admin/elements/Nav.js.map +1 -1
  23. package/dist/admin/elements/Table.d.ts +1 -0
  24. package/dist/admin/elements/Table.d.ts.map +1 -1
  25. package/dist/admin/elements/Table.js.map +1 -1
  26. package/dist/admin/functions/index.d.ts +1 -38
  27. package/dist/admin/functions/index.d.ts.map +1 -1
  28. package/dist/admin/functions/index.js.map +1 -1
  29. package/dist/admin/types.d.ts +5 -4
  30. package/dist/admin/types.d.ts.map +1 -1
  31. package/dist/admin/types.js.map +1 -1
  32. package/dist/admin/views/hierarchyList.d.ts +10 -0
  33. package/dist/admin/views/hierarchyList.d.ts.map +1 -0
  34. package/dist/admin/views/hierarchyList.js +3 -0
  35. package/dist/admin/views/hierarchyList.js.map +1 -0
  36. package/dist/admin/views/index.d.ts +1 -3
  37. package/dist/admin/views/index.d.ts.map +1 -1
  38. package/dist/admin/views/index.js.map +1 -1
  39. package/dist/admin/views/list.d.ts +47 -2
  40. package/dist/admin/views/list.d.ts.map +1 -1
  41. package/dist/admin/views/list.js.map +1 -1
  42. package/dist/auth/cookies.d.ts.map +1 -1
  43. package/dist/auth/defaultAccess.d.ts.map +1 -1
  44. package/dist/auth/ensureUsernameOrEmail.d.ts.map +1 -1
  45. package/dist/auth/executeAccess.d.ts.map +1 -1
  46. package/dist/auth/executeAuthStrategies.d.ts.map +1 -1
  47. package/dist/auth/extractAccessFromPermission.d.ts.map +1 -1
  48. package/dist/auth/extractJWT.d.ts.map +1 -1
  49. package/dist/auth/getAuthFields.d.ts.map +1 -1
  50. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  51. package/dist/auth/getLoginOptions.d.ts.map +1 -1
  52. package/dist/auth/isUserLocked.d.ts.map +1 -1
  53. package/dist/auth/jwt.d.ts.map +1 -1
  54. package/dist/auth/operations/access.d.ts.map +1 -1
  55. package/dist/auth/operations/auth.d.ts.map +1 -1
  56. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  57. package/dist/auth/operations/init.d.ts.map +1 -1
  58. package/dist/auth/operations/local/auth.d.ts.map +1 -1
  59. package/dist/auth/operations/login.d.ts.map +1 -1
  60. package/dist/auth/operations/logout.d.ts.map +1 -1
  61. package/dist/auth/operations/me.d.ts.map +1 -1
  62. package/dist/auth/operations/refresh.d.ts.map +1 -1
  63. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  64. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  65. package/dist/auth/operations/unlock.d.ts.map +1 -1
  66. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  67. package/dist/auth/sessions.d.ts.map +1 -1
  68. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  69. package/dist/auth/strategies/apiKey.js +6 -17
  70. package/dist/auth/strategies/apiKey.js.map +1 -1
  71. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  72. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
  73. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  74. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  75. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  76. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -1
  77. package/dist/bin/generateImportMap/iterateCollections.js +1 -0
  78. package/dist/bin/generateImportMap/iterateCollections.js.map +1 -1
  79. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -1
  80. package/dist/bin/generateImportMap/iterateConfig.js +7 -0
  81. package/dist/bin/generateImportMap/iterateConfig.js.map +1 -1
  82. package/dist/bin/generateImportMap/iterateFields.d.ts.map +1 -1
  83. package/dist/bin/generateImportMap/iterateFields.js +4 -1
  84. package/dist/bin/generateImportMap/iterateFields.js.map +1 -1
  85. package/dist/bin/generateImportMap/iterateGlobals.d.ts.map +1 -1
  86. package/dist/bin/generateImportMap/iterateGlobals.js +20 -8
  87. package/dist/bin/generateImportMap/iterateGlobals.js.map +1 -1
  88. package/dist/bin/generateImportMap/utilities/getFromImportMap.d.ts.map +1 -1
  89. package/dist/bin/generateTypes.d.ts.map +1 -1
  90. package/dist/bin/generateTypes.js +7 -1
  91. package/dist/bin/generateTypes.js.map +1 -1
  92. package/dist/bin/index.d.ts.map +1 -1
  93. package/dist/bin/index.js +1 -3
  94. package/dist/bin/index.js.map +1 -1
  95. package/dist/bin/migrate.d.ts.map +1 -1
  96. package/dist/collections/config/client.d.ts +4 -2
  97. package/dist/collections/config/client.d.ts.map +1 -1
  98. package/dist/collections/config/client.js +13 -1
  99. package/dist/collections/config/client.js.map +1 -1
  100. package/dist/collections/config/defaults.d.ts.map +1 -1
  101. package/dist/collections/config/defaults.js +1 -1
  102. package/dist/collections/config/defaults.js.map +1 -1
  103. package/dist/collections/config/sanitize.d.ts +10 -1
  104. package/dist/collections/config/sanitize.d.ts.map +1 -1
  105. package/dist/collections/config/sanitize.js +51 -10
  106. package/dist/collections/config/sanitize.js.map +1 -1
  107. package/dist/collections/config/sanitizeCompoundIndexes.d.ts.map +1 -1
  108. package/dist/collections/config/types.d.ts +76 -91
  109. package/dist/collections/config/types.d.ts.map +1 -1
  110. package/dist/collections/config/types.js.map +1 -1
  111. package/dist/collections/config/useAsTitle.d.ts.map +1 -1
  112. package/dist/collections/dataloader.d.ts.map +1 -1
  113. package/dist/collections/operations/count.d.ts.map +1 -1
  114. package/dist/collections/operations/countVersions.d.ts.map +1 -1
  115. package/dist/collections/operations/create.d.ts.map +1 -1
  116. package/dist/collections/operations/create.js +24 -19
  117. package/dist/collections/operations/create.js.map +1 -1
  118. package/dist/collections/operations/delete.d.ts.map +1 -1
  119. package/dist/collections/operations/delete.js +7 -2
  120. package/dist/collections/operations/delete.js.map +1 -1
  121. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  122. package/dist/collections/operations/deleteByID.js +7 -2
  123. package/dist/collections/operations/deleteByID.js.map +1 -1
  124. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  125. package/dist/collections/operations/find.d.ts.map +1 -1
  126. package/dist/collections/operations/find.js +7 -2
  127. package/dist/collections/operations/find.js.map +1 -1
  128. package/dist/collections/operations/findByID.d.ts.map +1 -1
  129. package/dist/collections/operations/findByID.js +10 -5
  130. package/dist/collections/operations/findByID.js.map +1 -1
  131. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  132. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  133. package/dist/collections/operations/findVersionByID.js +6 -4
  134. package/dist/collections/operations/findVersionByID.js.map +1 -1
  135. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  136. package/dist/collections/operations/findVersions.js +6 -4
  137. package/dist/collections/operations/findVersions.js.map +1 -1
  138. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  139. package/dist/collections/operations/restoreVersion.js +7 -2
  140. package/dist/collections/operations/restoreVersion.js.map +1 -1
  141. package/dist/collections/operations/update.d.ts.map +1 -1
  142. package/dist/collections/operations/update.js +7 -2
  143. package/dist/collections/operations/update.js.map +1 -1
  144. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  145. package/dist/collections/operations/updateByID.js +7 -2
  146. package/dist/collections/operations/updateByID.js.map +1 -1
  147. package/dist/collections/operations/utilities/buildAfterOperation.d.ts.map +1 -1
  148. package/dist/collections/operations/utilities/sanitizeSortQuery.d.ts.map +1 -1
  149. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  150. package/dist/collections/operations/utilities/update.js +5 -4
  151. package/dist/collections/operations/utilities/update.js.map +1 -1
  152. package/dist/config/build.d.ts.map +1 -1
  153. package/dist/config/build.js +8 -0
  154. package/dist/config/build.js.map +1 -1
  155. package/dist/config/client.d.ts +1 -1
  156. package/dist/config/client.d.ts.map +1 -1
  157. package/dist/config/client.js +2 -11
  158. package/dist/config/client.js.map +1 -1
  159. package/dist/config/defaults.d.ts.map +1 -1
  160. package/dist/config/defaults.js +0 -15
  161. package/dist/config/defaults.js.map +1 -1
  162. package/dist/config/orderable/index.d.ts.map +1 -1
  163. package/dist/config/orderable/index.js +0 -4
  164. package/dist/config/orderable/index.js.map +1 -1
  165. package/dist/config/sanitize.d.ts.map +1 -1
  166. package/dist/config/sanitize.js +6 -53
  167. package/dist/config/sanitize.js.map +1 -1
  168. package/dist/config/types.d.ts +188 -32
  169. package/dist/config/types.d.ts.map +1 -1
  170. package/dist/config/types.js.map +1 -1
  171. package/dist/database/combineQueries.d.ts.map +1 -1
  172. package/dist/database/migrations/findMigrationDir.d.ts.map +1 -1
  173. package/dist/database/migrations/getPredefinedMigration.d.ts.map +1 -1
  174. package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
  175. package/dist/database/migrations/templates/localizeStatus.d.ts.map +1 -1
  176. package/dist/database/migrations/writeMigrationIndex.d.ts.map +1 -1
  177. package/dist/database/sanitizeJoinQuery.d.ts.map +1 -1
  178. package/dist/database/sanitizeWhereQuery.d.ts.map +1 -1
  179. package/dist/duplicateDocument/index.d.ts.map +1 -1
  180. package/dist/email/getStringifiedToAddress.d.ts.map +1 -1
  181. package/dist/exports/shared.d.ts +6 -3
  182. package/dist/exports/shared.d.ts.map +1 -1
  183. package/dist/exports/shared.js +4 -2
  184. package/dist/exports/shared.js.map +1 -1
  185. package/dist/fields/baseFields/slug/countVersions.d.ts.map +1 -1
  186. package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
  187. package/dist/fields/baseFields/slug/index.d.ts.map +1 -1
  188. package/dist/fields/baseFields/slug/index.js +7 -5
  189. package/dist/fields/baseFields/slug/index.js.map +1 -1
  190. package/dist/fields/config/client.d.ts +1 -1
  191. package/dist/fields/config/client.d.ts.map +1 -1
  192. package/dist/fields/config/client.js +4 -3
  193. package/dist/fields/config/client.js.map +1 -1
  194. package/dist/fields/config/sanitize.d.ts.map +1 -1
  195. package/dist/fields/config/sanitize.js +13 -20
  196. package/dist/fields/config/sanitize.js.map +1 -1
  197. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
  198. package/dist/fields/config/sanitizeJoinField.js +3 -0
  199. package/dist/fields/config/sanitizeJoinField.js.map +1 -1
  200. package/dist/fields/config/types.d.ts +44 -118
  201. package/dist/fields/config/types.d.ts.map +1 -1
  202. package/dist/fields/config/types.js +12 -2
  203. package/dist/fields/config/types.js.map +1 -1
  204. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  205. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  206. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  207. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  208. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  209. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  210. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  211. package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.d.ts.map +1 -1
  212. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.d.ts.map +1 -1
  213. package/dist/fields/hooks/beforeChange/getExistingRowDoc.d.ts.map +1 -1
  214. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  215. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  216. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  217. package/dist/fields/hooks/beforeDuplicate/index.d.ts.map +1 -1
  218. package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
  219. package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -1
  220. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  221. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  222. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  223. package/dist/fields/isFieldDisabled.d.ts +12 -0
  224. package/dist/fields/isFieldDisabled.d.ts.map +1 -0
  225. package/dist/fields/isFieldDisabled.js +15 -0
  226. package/dist/fields/isFieldDisabled.js.map +1 -0
  227. package/dist/fields/isFieldDisabled.spec.js +134 -0
  228. package/dist/fields/isFieldDisabled.spec.js.map +1 -0
  229. package/dist/fields/mergeBaseFields.d.ts.map +1 -1
  230. package/dist/fields/setDefaultBeforeDuplicate.d.ts.map +1 -1
  231. package/dist/fields/validations.js +1 -1
  232. package/dist/fields/validations.js.map +1 -1
  233. package/dist/globals/config/client.d.ts +1 -1
  234. package/dist/globals/config/client.d.ts.map +1 -1
  235. package/dist/globals/config/client.js +2 -1
  236. package/dist/globals/config/client.js.map +1 -1
  237. package/dist/globals/config/sanitize.d.ts +6 -1
  238. package/dist/globals/config/sanitize.d.ts.map +1 -1
  239. package/dist/globals/config/sanitize.js +6 -2
  240. package/dist/globals/config/sanitize.js.map +1 -1
  241. package/dist/globals/config/types.d.ts +4 -57
  242. package/dist/globals/config/types.d.ts.map +1 -1
  243. package/dist/globals/config/types.js.map +1 -1
  244. package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -1
  245. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  246. package/dist/globals/operations/findOne.d.ts.map +1 -1
  247. package/dist/globals/operations/findOne.js +7 -2
  248. package/dist/globals/operations/findOne.js.map +1 -1
  249. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  250. package/dist/globals/operations/findVersionByID.js +6 -4
  251. package/dist/globals/operations/findVersionByID.js.map +1 -1
  252. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  253. package/dist/globals/operations/findVersions.js +6 -4
  254. package/dist/globals/operations/findVersions.js.map +1 -1
  255. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  256. package/dist/globals/operations/update.d.ts.map +1 -1
  257. package/dist/globals/operations/update.js +7 -2
  258. package/dist/globals/operations/update.js.map +1 -1
  259. package/dist/hierarchy/addHierarchyToCollection.d.ts +9 -0
  260. package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -0
  261. package/dist/hierarchy/addHierarchyToCollection.js +76 -0
  262. package/dist/hierarchy/addHierarchyToCollection.js.map +1 -0
  263. package/dist/hierarchy/buildParentField.d.ts +11 -0
  264. package/dist/hierarchy/buildParentField.d.ts.map +1 -0
  265. package/dist/hierarchy/buildParentField.js +42 -0
  266. package/dist/hierarchy/buildParentField.js.map +1 -0
  267. package/dist/hierarchy/constants.d.ts +15 -0
  268. package/dist/hierarchy/constants.d.ts.map +1 -0
  269. package/dist/hierarchy/constants.js +11 -0
  270. package/dist/hierarchy/constants.js.map +1 -0
  271. package/dist/hierarchy/createFolderField.d.ts +39 -0
  272. package/dist/hierarchy/createFolderField.d.ts.map +1 -0
  273. package/dist/hierarchy/createFolderField.js +54 -0
  274. package/dist/hierarchy/createFolderField.js.map +1 -0
  275. package/dist/hierarchy/createTagField.d.ts +44 -0
  276. package/dist/hierarchy/createTagField.d.ts.map +1 -0
  277. package/dist/hierarchy/createTagField.js +48 -0
  278. package/dist/hierarchy/createTagField.js.map +1 -0
  279. package/dist/hierarchy/getInitialTreeData.d.ts +27 -0
  280. package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -0
  281. package/dist/hierarchy/getInitialTreeData.js +125 -0
  282. package/dist/hierarchy/getInitialTreeData.js.map +1 -0
  283. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts +14 -0
  284. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts.map +1 -0
  285. package/dist/hierarchy/hooks/collectionAfterDelete.js +21 -0
  286. package/dist/hierarchy/hooks/collectionAfterDelete.js.map +1 -0
  287. package/dist/hierarchy/hooks/collectionAfterRead.d.ts +27 -0
  288. package/dist/hierarchy/hooks/collectionAfterRead.d.ts.map +1 -0
  289. package/dist/hierarchy/hooks/collectionAfterRead.js +72 -0
  290. package/dist/hierarchy/hooks/collectionAfterRead.js.map +1 -0
  291. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts +19 -0
  292. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts.map +1 -0
  293. package/dist/hierarchy/hooks/collectionBeforeChange.js +90 -0
  294. package/dist/hierarchy/hooks/collectionBeforeChange.js.map +1 -0
  295. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts +15 -0
  296. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts.map +1 -0
  297. package/dist/hierarchy/hooks/collectionBeforeDelete.js +20 -0
  298. package/dist/hierarchy/hooks/collectionBeforeDelete.js.map +1 -0
  299. package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts +33 -0
  300. package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts.map +1 -0
  301. package/dist/hierarchy/hooks/collectionBeforeOperation.js +66 -0
  302. package/dist/hierarchy/hooks/collectionBeforeOperation.js.map +1 -0
  303. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts +8 -0
  304. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts.map +1 -0
  305. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js +108 -0
  306. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.js.map +1 -0
  307. package/dist/hierarchy/injectHierarchyButton.d.ts +14 -0
  308. package/dist/hierarchy/injectHierarchyButton.d.ts.map +1 -0
  309. package/dist/hierarchy/injectHierarchyButton.js +37 -0
  310. package/dist/hierarchy/injectHierarchyButton.js.map +1 -0
  311. package/dist/hierarchy/presets.d.ts +13 -0
  312. package/dist/hierarchy/presets.d.ts.map +1 -0
  313. package/dist/hierarchy/presets.js +52 -0
  314. package/dist/hierarchy/presets.js.map +1 -0
  315. package/dist/hierarchy/resolveHierarchyCollections.d.ts +23 -0
  316. package/dist/hierarchy/resolveHierarchyCollections.d.ts.map +1 -0
  317. package/dist/hierarchy/resolveHierarchyCollections.js +321 -0
  318. package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -0
  319. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts +14 -0
  320. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +1 -0
  321. package/dist/hierarchy/sanitizeHierarchyCollection.js +119 -0
  322. package/dist/hierarchy/sanitizeHierarchyCollection.js.map +1 -0
  323. package/dist/hierarchy/types.d.ts +162 -0
  324. package/dist/hierarchy/types.d.ts.map +1 -0
  325. package/dist/hierarchy/types.js +6 -0
  326. package/dist/hierarchy/types.js.map +1 -0
  327. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts +77 -0
  328. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.d.ts.map +1 -0
  329. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js +77 -0
  330. package/dist/hierarchy/utils/buildLocalizedHierarchyPaths.js.map +1 -0
  331. package/dist/hierarchy/utils/computePaths.d.ts +31 -0
  332. package/dist/hierarchy/utils/computePaths.d.ts.map +1 -0
  333. package/dist/hierarchy/utils/computePaths.js +445 -0
  334. package/dist/hierarchy/utils/computePaths.js.map +1 -0
  335. package/dist/hierarchy/utils/findUseAsTitle.d.ts +14 -0
  336. package/dist/hierarchy/utils/findUseAsTitle.d.ts.map +1 -0
  337. package/dist/hierarchy/utils/findUseAsTitle.js +89 -0
  338. package/dist/hierarchy/utils/findUseAsTitle.js.map +1 -0
  339. package/dist/hierarchy/utils/getAncestors.d.ts +34 -0
  340. package/dist/hierarchy/utils/getAncestors.d.ts.map +1 -0
  341. package/dist/hierarchy/utils/getAncestors.js +94 -0
  342. package/dist/hierarchy/utils/getAncestors.js.map +1 -0
  343. package/dist/hierarchy/utils/getLocalizedValue.d.ts +30 -0
  344. package/dist/hierarchy/utils/getLocalizedValue.d.ts.map +1 -0
  345. package/dist/hierarchy/utils/getLocalizedValue.js +46 -0
  346. package/dist/hierarchy/utils/getLocalizedValue.js.map +1 -0
  347. package/dist/hierarchy/utils/getLocalizedValue.spec.js +250 -0
  348. package/dist/hierarchy/utils/getLocalizedValue.spec.js.map +1 -0
  349. package/dist/index.bundled.d.ts +1017 -672
  350. package/dist/index.d.ts +32 -10
  351. package/dist/index.d.ts.map +1 -1
  352. package/dist/index.js +13 -8
  353. package/dist/index.js.map +1 -1
  354. package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
  355. package/dist/locked-documents/config.d.ts.map +1 -1
  356. package/dist/preferences/config.d.ts.map +1 -1
  357. package/dist/preferences/deleteUserPreferences.d.ts.map +1 -1
  358. package/dist/preferences/keys.d.ts +8 -4
  359. package/dist/preferences/keys.d.ts.map +1 -1
  360. package/dist/preferences/keys.js +7 -4
  361. package/dist/preferences/keys.js.map +1 -1
  362. package/dist/preferences/types.d.ts +1 -1
  363. package/dist/preferences/types.d.ts.map +1 -1
  364. package/dist/preferences/types.js.map +1 -1
  365. package/dist/query-presets/access.d.ts.map +1 -1
  366. package/dist/query-presets/config.d.ts.map +1 -1
  367. package/dist/query-presets/config.js +11 -7
  368. package/dist/query-presets/config.js.map +1 -1
  369. package/dist/query-presets/constraints.d.ts.map +1 -1
  370. package/dist/query-presets/constraints.js +1 -1
  371. package/dist/query-presets/constraints.js.map +1 -1
  372. package/dist/queues/config/generateJobsJSONSchemas.d.ts +1 -1
  373. package/dist/queues/config/generateJobsJSONSchemas.d.ts.map +1 -1
  374. package/dist/queues/config/generateJobsJSONSchemas.js +31 -10
  375. package/dist/queues/config/generateJobsJSONSchemas.js.map +1 -1
  376. package/dist/queues/config/types/index.d.ts +0 -21
  377. package/dist/queues/config/types/index.d.ts.map +1 -1
  378. package/dist/queues/config/types/index.js.map +1 -1
  379. package/dist/queues/config/types/taskTypes.d.ts +0 -20
  380. package/dist/queues/config/types/taskTypes.d.ts.map +1 -1
  381. package/dist/queues/config/types/taskTypes.js.map +1 -1
  382. package/dist/queues/endpoints/run.d.ts.map +1 -1
  383. package/dist/queues/errors/handleWorkflowError.d.ts.map +1 -1
  384. package/dist/queues/errors/handleWorkflowError.js +9 -1
  385. package/dist/queues/errors/handleWorkflowError.js.map +1 -1
  386. package/dist/queues/localAPI.d.ts.map +1 -1
  387. package/dist/queues/localAPI.js +26 -67
  388. package/dist/queues/localAPI.js.map +1 -1
  389. package/dist/queues/operations/handleSchedules/getQueuesWithSchedules.d.ts.map +1 -1
  390. package/dist/queues/operations/handleSchedules/index.d.ts.map +1 -1
  391. package/dist/queues/operations/handleSchedules/index.js +1 -4
  392. package/dist/queues/operations/handleSchedules/index.js.map +1 -1
  393. package/dist/queues/operations/runJobs/index.d.ts.map +1 -1
  394. package/dist/queues/operations/runJobs/index.js +40 -37
  395. package/dist/queues/operations/runJobs/index.js.map +1 -1
  396. package/dist/queues/operations/runJobs/runJSONJob/index.d.ts.map +1 -1
  397. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.d.ts.map +1 -1
  398. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +3 -22
  399. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
  400. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts.map +1 -1
  401. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js +0 -2
  402. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js.map +1 -1
  403. package/dist/queues/operations/runJobs/runJob/index.d.ts.map +1 -1
  404. package/dist/queues/utilities/getJobTaskStatus.d.ts.map +1 -1
  405. package/dist/queues/utilities/updateJob.d.ts +1 -3
  406. package/dist/queues/utilities/updateJob.d.ts.map +1 -1
  407. package/dist/queues/utilities/updateJob.js +2 -18
  408. package/dist/queues/utilities/updateJob.js.map +1 -1
  409. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  410. package/dist/types/index.d.ts +54 -5
  411. package/dist/types/index.d.ts.map +1 -1
  412. package/dist/types/index.js.map +1 -1
  413. package/dist/uploads/checkFileAccess.d.ts.map +1 -1
  414. package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
  415. package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
  416. package/dist/uploads/endpoints/getFileFromURL.d.ts.map +1 -1
  417. package/dist/uploads/endpoints/getFileFromURL.js +9 -5
  418. package/dist/uploads/endpoints/getFileFromURL.js.map +1 -1
  419. package/dist/uploads/fetchAPI-multipart/isEligibleRequest.d.ts.map +1 -1
  420. package/dist/uploads/fetchAPI-multipart/processNested.d.ts.map +1 -1
  421. package/dist/uploads/fetchAPI-multipart/utilities.d.ts.map +1 -1
  422. package/dist/uploads/fileExists.d.ts.map +1 -1
  423. package/dist/uploads/generateFileData.d.ts.map +1 -1
  424. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  425. package/dist/uploads/getBaseFields.js +24 -70
  426. package/dist/uploads/getBaseFields.js.map +1 -1
  427. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  428. package/dist/uploads/getFileByPath.d.ts.map +1 -1
  429. package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
  430. package/dist/uploads/getSafeFilename.d.ts +9 -4
  431. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  432. package/dist/uploads/getSafeFilename.js +5 -5
  433. package/dist/uploads/getSafeFilename.js.map +1 -1
  434. package/dist/uploads/image-resizing/createImageSize.d.ts.map +1 -1
  435. package/dist/uploads/image-resizing/generateImageSizeFilename.d.ts.map +1 -1
  436. package/dist/uploads/image-resizing/getImageResizeAction.d.ts.map +1 -1
  437. package/dist/uploads/image-resizing/parseFilename.d.ts.map +1 -1
  438. package/dist/uploads/image-resizing/sanitizeResizeConfig.d.ts.map +1 -1
  439. package/dist/uploads/mimeTypeValidator.d.ts.map +1 -1
  440. package/dist/uploads/safeFetch.d.ts +1 -1
  441. package/dist/uploads/safeFetch.d.ts.map +1 -1
  442. package/dist/uploads/saveBufferToFile.d.ts.map +1 -1
  443. package/dist/uploads/tempFile.d.ts.map +1 -1
  444. package/dist/uploads/types.d.ts +12 -29
  445. package/dist/uploads/types.d.ts.map +1 -1
  446. package/dist/uploads/types.js.map +1 -1
  447. package/dist/uploads/uploadFiles.d.ts.map +1 -1
  448. package/dist/utilities/addLocalesToRequest.d.ts.map +1 -1
  449. package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
  450. package/dist/utilities/appendDateTimezoneSelectFields.d.ts +13 -0
  451. package/dist/utilities/appendDateTimezoneSelectFields.d.ts.map +1 -0
  452. package/dist/utilities/appendDateTimezoneSelectFields.js +47 -0
  453. package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -0
  454. package/dist/utilities/appendNonTrashedFilter.d.ts.map +1 -1
  455. package/dist/utilities/appendUploadSelectFields.d.ts.map +1 -1
  456. package/dist/utilities/appendUploadSelectFields.js +3 -0
  457. package/dist/utilities/appendUploadSelectFields.js.map +1 -1
  458. package/dist/utilities/canAccessAdmin.d.ts.map +1 -1
  459. package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -1
  460. package/dist/utilities/configToJSONSchema.d.ts +34 -16
  461. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  462. package/dist/utilities/configToJSONSchema.js +127 -52
  463. package/dist/utilities/configToJSONSchema.js.map +1 -1
  464. package/dist/utilities/configToJSONSchema.spec.js +94 -65
  465. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  466. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  467. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  468. package/dist/utilities/dependencies/resolveFrom.d.ts.map +1 -1
  469. package/dist/utilities/escapeRegExp.d.ts.map +1 -1
  470. package/dist/utilities/extractID.d.ts.map +1 -1
  471. package/dist/utilities/extractID.js +1 -1
  472. package/dist/utilities/extractID.js.map +1 -1
  473. package/dist/utilities/flattenAllFields.d.ts.map +1 -1
  474. package/dist/utilities/formatAdminURL.d.ts +13 -2
  475. package/dist/utilities/formatAdminURL.d.ts.map +1 -1
  476. package/dist/utilities/formatAdminURL.js +3 -15
  477. package/dist/utilities/formatAdminURL.js.map +1 -1
  478. package/dist/utilities/formatAdminURL.spec.js +1 -90
  479. package/dist/utilities/formatAdminURL.spec.js.map +1 -1
  480. package/dist/utilities/formatErrors.d.ts.map +1 -1
  481. package/dist/utilities/formatLabels.d.ts.map +1 -1
  482. package/dist/utilities/getBestFitFromSizes.d.ts.map +1 -1
  483. package/dist/utilities/getBlockSelect.d.ts.map +1 -1
  484. package/dist/utilities/getDataByPath.d.ts.map +1 -1
  485. package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts.map +1 -1
  486. package/dist/utilities/getFieldByPath.d.ts.map +1 -1
  487. package/dist/utilities/getFieldPermissions.d.ts.map +1 -1
  488. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  489. package/dist/utilities/getRequestEntity.d.ts.map +1 -1
  490. package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
  491. package/dist/utilities/getRequestOrigin.d.ts.map +1 -1
  492. package/dist/utilities/getSafeRedirect.d.ts.map +1 -1
  493. package/dist/utilities/getSelectMode.d.ts.map +1 -1
  494. package/dist/utilities/getSiblingData.d.ts.map +1 -1
  495. package/dist/utilities/getTranslatedLabel.d.ts.map +1 -1
  496. package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
  497. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  498. package/dist/utilities/handleEndpoints.js +2 -6
  499. package/dist/utilities/handleEndpoints.js.map +1 -1
  500. package/dist/utilities/headersWithCors.d.ts.map +1 -1
  501. package/dist/utilities/isEntityHidden.d.ts.map +1 -1
  502. package/dist/utilities/isURLAllowed.d.ts.map +1 -1
  503. package/dist/utilities/isValidID.d.ts.map +1 -1
  504. package/dist/utilities/logError.d.ts.map +1 -1
  505. package/dist/utilities/logger.d.ts.map +1 -1
  506. package/dist/utilities/mergeHeaders.d.ts.map +1 -1
  507. package/dist/utilities/mergeListSearchAndWhere.d.ts.map +1 -1
  508. package/dist/utilities/optionsAreEqual.d.ts.map +1 -1
  509. package/dist/utilities/parseBooleanString.d.ts.map +1 -1
  510. package/dist/utilities/parseCookies.d.ts.map +1 -1
  511. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  512. package/dist/utilities/profiling.d.ts.map +1 -1
  513. package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -1
  514. package/dist/utilities/resolveSelect.d.ts +16 -0
  515. package/dist/utilities/resolveSelect.d.ts.map +1 -0
  516. package/dist/utilities/resolveSelect.js +19 -0
  517. package/dist/utilities/resolveSelect.js.map +1 -0
  518. package/dist/utilities/routeError.d.ts.map +1 -1
  519. package/dist/utilities/sanitizeFallbackLocale.d.ts.map +1 -1
  520. package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
  521. package/dist/utilities/sanitizeJoinParams.d.ts.map +1 -1
  522. package/dist/utilities/sanitizePopulateParam.d.ts.map +1 -1
  523. package/dist/utilities/sanitizeSelect.d.ts +1 -2
  524. package/dist/utilities/sanitizeSelect.d.ts.map +1 -1
  525. package/dist/utilities/sanitizeSelect.js +19 -25
  526. package/dist/utilities/sanitizeSelect.js.map +1 -1
  527. package/dist/utilities/sanitizeSelectParam.d.ts.map +1 -1
  528. package/dist/utilities/sanitizeSortParams.d.ts.map +1 -1
  529. package/dist/utilities/setsAreEqual.d.ts.map +1 -1
  530. package/dist/utilities/slugify.d.ts.map +1 -1
  531. package/dist/utilities/stripUnselectedFields.d.ts.map +1 -1
  532. package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
  533. package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
  534. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  535. package/dist/utilities/telemetry/oneWayHash.d.ts.map +1 -1
  536. package/dist/utilities/timestamp.d.ts.map +1 -1
  537. package/dist/utilities/toKebabCase.d.ts.map +1 -1
  538. package/dist/utilities/transformColumnPreferences.d.ts.map +1 -1
  539. package/dist/utilities/transformWhereQuery.d.ts.map +1 -1
  540. package/dist/utilities/traverseFields.d.ts.map +1 -1
  541. package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
  542. package/dist/utilities/unflatten.d.ts.map +1 -1
  543. package/dist/utilities/validateMimeType.d.ts.map +1 -1
  544. package/dist/utilities/validateTimezones.d.ts.map +1 -1
  545. package/dist/utilities/validateWhereQuery.d.ts.map +1 -1
  546. package/dist/utilities/wordBoundariesRegex.d.ts.map +1 -1
  547. package/dist/utilities/wrapInternalEndpoints.d.ts.map +1 -1
  548. package/dist/versions/baseFields.d.ts.map +1 -1
  549. package/dist/versions/baseFields.js +3 -2
  550. package/dist/versions/baseFields.js.map +1 -1
  551. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  552. package/dist/versions/buildCollectionFields.js +0 -1
  553. package/dist/versions/buildCollectionFields.js.map +1 -1
  554. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  555. package/dist/versions/buildGlobalFields.js +0 -1
  556. package/dist/versions/buildGlobalFields.js.map +1 -1
  557. package/dist/versions/buildVersionCompoundIndexes.d.ts.map +1 -1
  558. package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
  559. package/dist/versions/deleteScheduledPublishJobs.d.ts.map +1 -1
  560. package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
  561. package/dist/versions/drafts/getQueryDraftsSelect.d.ts.map +1 -1
  562. package/dist/versions/drafts/getQueryDraftsSort.d.ts.map +1 -1
  563. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  564. package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
  565. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  566. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  567. package/dist/versions/migrations/localizeStatus/shared.d.ts.map +1 -1
  568. package/dist/versions/payloadPackageList.d.ts.map +1 -1
  569. package/dist/versions/payloadPackageList.js +0 -1
  570. package/dist/versions/payloadPackageList.js.map +1 -1
  571. package/dist/versions/saveSnapshot.d.ts.map +1 -1
  572. package/dist/versions/schedule/job.d.ts.map +1 -1
  573. package/package.json +20 -20
  574. package/dist/admin/views/folderList.d.ts +0 -56
  575. package/dist/admin/views/folderList.d.ts.map +0 -1
  576. package/dist/admin/views/folderList.js +0 -3
  577. package/dist/admin/views/folderList.js.map +0 -1
  578. package/dist/folders/addFolderCollection.d.ts +0 -10
  579. package/dist/folders/addFolderCollection.d.ts.map +0 -1
  580. package/dist/folders/addFolderCollection.js +0 -26
  581. package/dist/folders/addFolderCollection.js.map +0 -1
  582. package/dist/folders/addFolderFieldToCollection.d.ts +0 -8
  583. package/dist/folders/addFolderFieldToCollection.d.ts.map +0 -1
  584. package/dist/folders/addFolderFieldToCollection.js +0 -20
  585. package/dist/folders/addFolderFieldToCollection.js.map +0 -1
  586. package/dist/folders/buildFolderField.d.ts +0 -8
  587. package/dist/folders/buildFolderField.d.ts.map +0 -1
  588. package/dist/folders/buildFolderField.js +0 -87
  589. package/dist/folders/buildFolderField.js.map +0 -1
  590. package/dist/folders/constants.d.ts +0 -3
  591. package/dist/folders/constants.d.ts.map +0 -1
  592. package/dist/folders/constants.js +0 -4
  593. package/dist/folders/constants.js.map +0 -1
  594. package/dist/folders/createFolderCollection.d.ts +0 -11
  595. package/dist/folders/createFolderCollection.d.ts.map +0 -1
  596. package/dist/folders/createFolderCollection.js +0 -115
  597. package/dist/folders/createFolderCollection.js.map +0 -1
  598. package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts +0 -8
  599. package/dist/folders/hooks/deleteSubfoldersAfterDelete.d.ts.map +0 -1
  600. package/dist/folders/hooks/deleteSubfoldersAfterDelete.js +0 -15
  601. package/dist/folders/hooks/deleteSubfoldersAfterDelete.js.map +0 -1
  602. package/dist/folders/hooks/dissasociateAfterDelete.d.ts +0 -8
  603. package/dist/folders/hooks/dissasociateAfterDelete.d.ts.map +0 -1
  604. package/dist/folders/hooks/dissasociateAfterDelete.js +0 -20
  605. package/dist/folders/hooks/dissasociateAfterDelete.js.map +0 -1
  606. package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts +0 -5
  607. package/dist/folders/hooks/ensureSafeCollectionsChange.d.ts.map +0 -1
  608. package/dist/folders/hooks/ensureSafeCollectionsChange.js +0 -107
  609. package/dist/folders/hooks/ensureSafeCollectionsChange.js.map +0 -1
  610. package/dist/folders/hooks/reparentChildFolder.d.ts +0 -24
  611. package/dist/folders/hooks/reparentChildFolder.d.ts.map +0 -1
  612. package/dist/folders/hooks/reparentChildFolder.js +0 -72
  613. package/dist/folders/hooks/reparentChildFolder.js.map +0 -1
  614. package/dist/folders/types.d.ts +0 -118
  615. package/dist/folders/types.d.ts.map +0 -1
  616. package/dist/folders/types.js +0 -3
  617. package/dist/folders/types.js.map +0 -1
  618. package/dist/folders/utils/buildFolderWhereConstraints.d.ts +0 -13
  619. package/dist/folders/utils/buildFolderWhereConstraints.d.ts.map +0 -1
  620. package/dist/folders/utils/buildFolderWhereConstraints.js +0 -45
  621. package/dist/folders/utils/buildFolderWhereConstraints.js.map +0 -1
  622. package/dist/folders/utils/formatFolderOrDocumentItem.d.ts +0 -12
  623. package/dist/folders/utils/formatFolderOrDocumentItem.d.ts.map +0 -1
  624. package/dist/folders/utils/formatFolderOrDocumentItem.js +0 -30
  625. package/dist/folders/utils/formatFolderOrDocumentItem.js.map +0 -1
  626. package/dist/folders/utils/getFolderBreadcrumbs.d.ts +0 -14
  627. package/dist/folders/utils/getFolderBreadcrumbs.d.ts.map +0 -1
  628. package/dist/folders/utils/getFolderBreadcrumbs.js +0 -45
  629. package/dist/folders/utils/getFolderBreadcrumbs.js.map +0 -1
  630. package/dist/folders/utils/getFolderData.d.ts +0 -33
  631. package/dist/folders/utils/getFolderData.d.ts.map +0 -1
  632. package/dist/folders/utils/getFolderData.js +0 -88
  633. package/dist/folders/utils/getFolderData.js.map +0 -1
  634. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts +0 -24
  635. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.d.ts.map +0 -1
  636. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js +0 -66
  637. package/dist/folders/utils/getFoldersAndDocumentsFromJoin.js.map +0 -1
  638. package/dist/folders/utils/getOrphanedDocs.d.ts +0 -15
  639. package/dist/folders/utils/getOrphanedDocs.d.ts.map +0 -1
  640. package/dist/folders/utils/getOrphanedDocs.js +0 -40
  641. package/dist/folders/utils/getOrphanedDocs.js.map +0 -1
@@ -3,7 +3,7 @@ import type { Block, ClientBlock, ClientField, Field, FieldBase } from '../../fi
3
3
  import type { Payload } from '../../types/index.js';
4
4
  import { type ImportMap } from '../../index.js';
5
5
  export { ClientField };
6
- export type ServerOnlyFieldProperties = 'dbName' | 'editor' | 'enumName' | 'filterOptions' | 'graphQL' | 'label' | 'typescriptSchema' | 'validate' | keyof Pick<FieldBase, 'access' | 'custom' | 'defaultValue' | 'hooks'>;
6
+ export type ServerOnlyFieldProperties = 'dbName' | 'editor' | 'enumName' | 'filterOptions' | 'graphQL' | 'jsonSchema' | 'label' | 'validate' | keyof Pick<FieldBase, 'access' | 'custom' | 'defaultValue' | 'hooks'>;
7
7
  export type ServerOnlyFieldAdminProperties = keyof Pick<FieldBase['admin'], 'components' | 'condition'>;
8
8
  export declare const createClientBlocks: ({ blocks, defaultIDType, i18n, importMap, }: {
9
9
  blocks: (Block | string)[];
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/fields/config/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAA;AAErE,OAAO,KAAK,EAGV,KAAK,EAGL,WAAW,EACX,WAAW,EAEX,KAAK,EACL,SAAS,EAOV,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAKnD,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAKtE,OAAO,EAAE,WAAW,EAAE,CAAA;AAEtB,MAAM,MAAM,yBAAyB,GACjC,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,eAAe,GACf,SAAS,GACT,OAAO,GACP,kBAAkB,GAClB,UAAU,GACV,MAAM,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,CAAC,CAAA;AAEzE,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,SAAS,CAAC,OAAO,CAAC,EAElB,YAAY,GAAG,WAAW,CAC3B,CAAA;AA+BD,eAAO,MAAM,kBAAkB,gDAK5B;IACD,MAAM,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,GAAG,WAAW,EAiFzC,CAAA;AAED,eAAO,MAAM,iBAAiB,8DAK3B;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,WAoSH,CAAA;AAED,eAAO,MAAM,kBAAkB,iEAM5B;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,WAAW,EAkCd,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/fields/config/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,0BAA0B,CAAA;AAErE,OAAO,KAAK,EAGV,KAAK,EAGL,WAAW,EACX,WAAW,EAEX,KAAK,EACL,SAAS,EAOV,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAKnD,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAKtE,OAAO,EAAE,WAAW,EAAE,CAAA;AAEtB,MAAM,MAAM,yBAAyB,GACjC,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,eAAe,GACf,SAAS,GACT,YAAY,GACZ,OAAO,GACP,UAAU,GACV,MAAM,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,CAAC,CAAA;AAEzE,MAAM,MAAM,8BAA8B,GAAG,MAAM,IAAI,CACrD,SAAS,CAAC,OAAO,CAAC,EAElB,YAAY,GAAG,WAAW,CAC3B,CAAA;AA+BD,eAAO,MAAM,kBAAkB,GAAI,6CAKhC;IACD,MAAM,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,GAAG,WAAW,EAiFzC,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,2DAK/B;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,WAoSH,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,8DAMhC;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;IACvD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,IAAI,EAAE,UAAU,CAAA;IAChB,SAAS,EAAE,SAAS,CAAA;CACrB,KAAG,WAAW,EAiCd,CAAA"}
@@ -12,7 +12,7 @@ const serverOnlyFieldProperties = [
12
12
  'filterOptions',
13
13
  'editor',
14
14
  'custom',
15
- 'typescriptSchema',
15
+ 'jsonSchema',
16
16
  'dbName',
17
17
  'enumName',
18
18
  'graphQL'
@@ -384,8 +384,9 @@ export const createClientFields = ({ defaultIDType, disableAddingID, fields, i18
384
384
  type: defaultIDType,
385
385
  admin: {
386
386
  description: 'The unique identifier for this document',
387
- disableBulkEdit: true,
388
- disabled: true,
387
+ disabled: {
388
+ bulkEdit: true
389
+ },
389
390
  hidden: true
390
391
  },
391
392
  hidden: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/config/client.ts"],"sourcesContent":["// @ts-strict-ignore\n/* eslint-disable perfectionist/sort-switch-case */\n// Keep perfectionist/sort-switch-case disabled - it incorrectly messes up the ordering of the switch cases, causing it to break\nimport type { I18nClient, TFunction } from '@payloadcms/translations'\n\nimport type {\n AdminClient,\n ArrayFieldClient,\n Block,\n BlockJSX,\n BlocksFieldClient,\n ClientBlock,\n ClientField,\n DateFieldClient,\n Field,\n FieldBase,\n JoinFieldClient,\n LabelsClient,\n RadioFieldClient,\n RowFieldClient,\n SelectFieldClient,\n TabsFieldClient,\n} from '../../fields/config/types.js'\nimport type { Payload } from '../../types/index.js'\n\nimport { getFromImportMap } from '../../bin/generateImportMap/utilities/getFromImportMap.js'\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { flattenTopLevelFields, type ImportMap } from '../../index.js'\n\n// Should not be used - ClientField should be used instead. This is why we don't export ClientField, we don't want people\n// to accidentally use it instead of ClientField and get confused\n\nexport { ClientField }\n\nexport type ServerOnlyFieldProperties =\n | 'dbName' // can be a function\n | 'editor' // This is a `richText` only property\n | 'enumName' // can be a function\n | 'filterOptions' // This is a `relationship`, `upload`, and `select` only property\n | 'graphQL'\n | 'label'\n | 'typescriptSchema'\n | 'validate'\n | keyof Pick<FieldBase, 'access' | 'custom' | 'defaultValue' | 'hooks'>\n\nexport type ServerOnlyFieldAdminProperties = keyof Pick<\n FieldBase['admin'],\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n 'components' | 'condition'\n>\n\nconst serverOnlyFieldProperties: Partial<ServerOnlyFieldProperties>[] = [\n 'hooks',\n 'access',\n 'validate',\n 'defaultValue',\n 'filterOptions', // This is a `relationship`, `upload`, and `select` only property\n 'editor', // This is a `richText` only property\n 'custom',\n 'typescriptSchema',\n 'dbName', // can be a function\n 'enumName', // can be a function\n 'graphQL', // client does not need graphQL\n // the following props are handled separately (see below):\n // `label`\n // `fields`\n // `blocks`\n // `tabs`\n // `admin`\n]\n\nconst serverOnlyFieldAdminProperties: Partial<ServerOnlyFieldAdminProperties>[] = [\n 'condition',\n 'components',\n]\n\ntype FieldWithDescription = {\n admin: AdminClient\n} & ClientField\n\nexport const createClientBlocks = ({\n blocks,\n defaultIDType,\n i18n,\n importMap,\n}: {\n blocks: (Block | string)[]\n defaultIDType: Payload['config']['db']['defaultIDType']\n i18n: I18nClient\n importMap: ImportMap\n}): (ClientBlock | string)[] | ClientBlock[] => {\n const clientBlocks: (ClientBlock | string)[] = []\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i]!\n\n if (typeof block === 'string') {\n // Do not process blocks that are just strings - they are processed once in the client config\n clientBlocks.push(block)\n continue\n }\n\n const clientBlock: ClientBlock = {\n slug: block.slug,\n fields: [],\n }\n if (block.imageAltText) {\n clientBlock.imageAltText = block.imageAltText\n }\n if (block.imageURL) {\n clientBlock.imageURL = block.imageURL\n }\n\n if (block.admin?.custom || block.admin?.group || block.admin?.images) {\n clientBlock.admin = {}\n if (block.admin.custom) {\n clientBlock.admin.custom = block.admin.custom\n }\n if (block.admin.group) {\n clientBlock.admin.group = block.admin.group\n }\n if (block.admin.images) {\n clientBlock.admin.images = block.admin.images\n }\n }\n\n if (block?.admin?.jsx) {\n const jsxResolved = getFromImportMap<BlockJSX>({\n importMap,\n PayloadComponent: block.admin.jsx,\n schemaPath: '',\n })\n clientBlock.jsx = jsxResolved\n }\n\n if (block?.admin?.disableBlockName) {\n // Check for existing admin object, this way we don't have to spread it in\n if (clientBlock.admin) {\n clientBlock.admin.disableBlockName = block.admin.disableBlockName\n } else {\n clientBlock.admin = { disableBlockName: block.admin.disableBlockName }\n }\n }\n\n if (block.labels) {\n clientBlock.labels = {} as unknown as LabelsClient\n\n if (block.labels.singular) {\n if (typeof block.labels.singular === 'function') {\n clientBlock.labels.singular = block.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n clientBlock.labels.singular = block.labels.singular\n }\n if (typeof block.labels.plural === 'function') {\n clientBlock.labels.plural = block.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n clientBlock.labels.plural = block.labels.plural\n }\n }\n }\n\n clientBlock.fields = createClientFields({\n defaultIDType,\n fields: block.fields,\n i18n,\n importMap,\n })\n\n clientBlocks.push(clientBlock)\n }\n\n return clientBlocks\n}\n\nexport const createClientField = ({\n defaultIDType,\n field: incomingField,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n field: Field\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField => {\n const clientField: ClientField = {} as ClientField\n\n for (const key in incomingField) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n switch (key) {\n case 'admin':\n if (!incomingField.admin) {\n break\n }\n\n clientField.admin = {} as AdminClient\n\n for (const adminKey in incomingField.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in incomingField.admin) {\n if (typeof incomingField.admin?.description !== 'function') {\n ;(clientField as FieldWithDescription).admin.description =\n incomingField.admin.description\n }\n }\n\n break\n\n default:\n ;(clientField.admin as any)[adminKey] =\n incomingField.admin[adminKey as keyof typeof incomingField.admin]\n }\n }\n\n break\n\n case 'blocks':\n case 'fields':\n case 'tabs':\n // Skip - we handle sub-fields in the switch below\n break\n\n case 'options':\n // Skip - we handle options in the radio/select switch below to avoid mutating the global config\n break\n\n case 'label':\n //@ts-expect-error - would need to type narrow\n if (typeof incomingField.label === 'function') {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label({ i18n, t: i18n.t })\n } else {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label\n }\n\n break\n\n default:\n ;(clientField as any)[key] = incomingField[key as keyof Field]\n }\n }\n\n switch (incomingField.type) {\n case 'array': {\n if (incomingField.labels) {\n const field = clientField as unknown as ArrayFieldClient\n\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n }\n // falls through\n case 'collapsible':\n case 'group':\n case 'row': {\n const field = clientField as unknown as RowFieldClient\n\n if (!field.fields) {\n field.fields = []\n }\n\n field.fields = createClientFields({\n defaultIDType,\n disableAddingID: incomingField.type !== 'array',\n fields: incomingField.fields,\n i18n,\n importMap,\n })\n\n break\n }\n\n case 'blocks': {\n const field = clientField as unknown as BlocksFieldClient\n\n if (incomingField.labels) {\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n\n if (incomingField.blockReferences?.length) {\n field.blockReferences = createClientBlocks({\n blocks: incomingField.blockReferences,\n defaultIDType,\n i18n,\n importMap,\n })\n }\n\n if (incomingField.blocks?.length) {\n field.blocks = createClientBlocks({\n blocks: incomingField.blocks,\n defaultIDType,\n i18n,\n importMap,\n }) as ClientBlock[]\n }\n\n break\n }\n\n case 'date': {\n // Strip the `override` function from timezone config as it cannot be serialized\n if (\n incomingField.timezone &&\n typeof incomingField.timezone === 'object' &&\n 'override' in incomingField.timezone\n ) {\n const field = clientField as DateFieldClient\n const { override: _, ...timezoneConfigWithoutOverride } = incomingField.timezone\n field.timezone = timezoneConfigWithoutOverride\n }\n\n break\n }\n\n case 'join': {\n const field = clientField as JoinFieldClient\n\n field.targetField = {\n relationTo: field.targetField?.relationTo,\n }\n\n break\n }\n\n case 'radio':\n // falls through\n case 'select': {\n const field = clientField as RadioFieldClient | SelectFieldClient\n\n if (incomingField.options?.length) {\n field.options = [] // Create new array to avoid mutating global config\n\n for (let i = 0; i < incomingField.options.length; i++) {\n const option = incomingField.options[i]\n\n if (typeof option === 'object' && typeof option.label === 'function') {\n field.options[i] = {\n label: option.label({ i18n, t: i18n.t as TFunction }),\n value: option.value,\n }\n } else if (typeof option === 'object') {\n field.options[i] = {\n label: option.label,\n value: option.value,\n }\n } else if (typeof option === 'string') {\n field.options[i] = option\n }\n }\n }\n\n break\n }\n\n case 'richText': {\n if (!incomingField?.editor) {\n throw new MissingEditorProp(incomingField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof incomingField?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n break\n }\n\n case 'tabs': {\n const field = clientField as unknown as TabsFieldClient\n\n if (incomingField.tabs?.length) {\n field.tabs = []\n\n for (let i = 0; i < incomingField.tabs.length; i++) {\n const tab = incomingField.tabs[i]\n const clientTab = {} as unknown as TabsFieldClient['tabs'][0]\n\n for (const key in tab) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n const tabProp = tab[key as keyof typeof tab]\n\n if (key === 'fields') {\n clientTab.fields = createClientFields({\n defaultIDType,\n disableAddingID: true,\n fields: tab.fields,\n i18n,\n importMap,\n })\n } else if (\n (key === 'label' || key === 'description') &&\n typeof tabProp === 'function'\n ) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n clientTab[key] = tabProp({ t: i18n.t })\n } else if (key === 'admin') {\n clientTab.admin = {} as AdminClient\n\n for (const adminKey in tab.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in tab.admin) {\n if (typeof tab.admin?.description === 'function') {\n clientTab.admin.description = tab.admin.description({\n i18n,\n t: i18n.t as TFunction,\n })\n } else {\n clientTab.admin.description = tab.admin.description\n }\n }\n\n break\n\n default:\n ;(clientTab.admin as any)[adminKey] =\n tab.admin[adminKey as keyof typeof tab.admin]\n }\n }\n } else {\n ;(clientTab as any)[key] = tabProp\n }\n }\n field.tabs[i] = clientTab\n }\n }\n\n break\n }\n\n default:\n break\n }\n\n return clientField\n}\n\nexport const createClientFields = ({\n defaultIDType,\n disableAddingID,\n fields,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n disableAddingID?: boolean\n fields: Field[]\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField[] => {\n const clientFields: ClientField[] = []\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]!\n\n const clientField = createClientField({\n defaultIDType,\n field,\n i18n,\n importMap,\n })\n\n clientFields.push(clientField)\n }\n\n const hasID = flattenTopLevelFields(fields).some((f) => fieldAffectsData(f) && f.name === 'id')\n\n if (!disableAddingID && !hasID) {\n clientFields.push({\n name: 'id',\n type: defaultIDType,\n admin: {\n description: 'The unique identifier for this document',\n disableBulkEdit: true,\n disabled: true,\n hidden: true,\n },\n hidden: true,\n label: 'ID',\n } as ClientField)\n }\n\n return clientFields\n}\n"],"names":["getFromImportMap","MissingEditorProp","fieldAffectsData","flattenTopLevelFields","serverOnlyFieldProperties","serverOnlyFieldAdminProperties","createClientBlocks","blocks","defaultIDType","i18n","importMap","clientBlocks","i","length","block","push","clientBlock","slug","fields","imageAltText","imageURL","admin","custom","group","images","jsx","jsxResolved","PayloadComponent","schemaPath","disableBlockName","labels","singular","t","plural","createClientFields","createClientField","field","incomingField","clientField","key","includes","adminKey","description","label","type","disableAddingID","blockReferences","timezone","override","_","timezoneConfigWithoutOverride","targetField","relationTo","options","option","value","editor","Error","tabs","tab","clientTab","tabProp","clientFields","hasID","some","f","name","disableBulkEdit","disabled","hidden"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/config/client.ts"],"sourcesContent":["// @ts-strict-ignore\n/* eslint-disable perfectionist/sort-switch-case */\n// Keep perfectionist/sort-switch-case disabled - it incorrectly messes up the ordering of the switch cases, causing it to break\nimport type { I18nClient, TFunction } from '@payloadcms/translations'\n\nimport type {\n AdminClient,\n ArrayFieldClient,\n Block,\n BlockJSX,\n BlocksFieldClient,\n ClientBlock,\n ClientField,\n DateFieldClient,\n Field,\n FieldBase,\n JoinFieldClient,\n LabelsClient,\n RadioFieldClient,\n RowFieldClient,\n SelectFieldClient,\n TabsFieldClient,\n} from '../../fields/config/types.js'\nimport type { Payload } from '../../types/index.js'\n\nimport { getFromImportMap } from '../../bin/generateImportMap/utilities/getFromImportMap.js'\nimport { MissingEditorProp } from '../../errors/MissingEditorProp.js'\nimport { fieldAffectsData } from '../../fields/config/types.js'\nimport { flattenTopLevelFields, type ImportMap } from '../../index.js'\n\n// Should not be used - ClientField should be used instead. This is why we don't export ClientField, we don't want people\n// to accidentally use it instead of ClientField and get confused\n\nexport { ClientField }\n\nexport type ServerOnlyFieldProperties =\n | 'dbName' // can be a function\n | 'editor' // This is a `richText` only property\n | 'enumName' // can be a function\n | 'filterOptions' // This is a `relationship`, `upload`, and `select` only property\n | 'graphQL'\n | 'jsonSchema'\n | 'label'\n | 'validate'\n | keyof Pick<FieldBase, 'access' | 'custom' | 'defaultValue' | 'hooks'>\n\nexport type ServerOnlyFieldAdminProperties = keyof Pick<\n FieldBase['admin'],\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n 'components' | 'condition'\n>\n\nconst serverOnlyFieldProperties: Partial<ServerOnlyFieldProperties>[] = [\n 'hooks',\n 'access',\n 'validate',\n 'defaultValue',\n 'filterOptions', // This is a `relationship`, `upload`, and `select` only property\n 'editor', // This is a `richText` only property\n 'custom',\n 'jsonSchema',\n 'dbName', // can be a function\n 'enumName', // can be a function\n 'graphQL', // client does not need graphQL\n // the following props are handled separately (see below):\n // `label`\n // `fields`\n // `blocks`\n // `tabs`\n // `admin`\n]\n\nconst serverOnlyFieldAdminProperties: Partial<ServerOnlyFieldAdminProperties>[] = [\n 'condition',\n 'components',\n]\n\ntype FieldWithDescription = {\n admin: AdminClient\n} & ClientField\n\nexport const createClientBlocks = ({\n blocks,\n defaultIDType,\n i18n,\n importMap,\n}: {\n blocks: (Block | string)[]\n defaultIDType: Payload['config']['db']['defaultIDType']\n i18n: I18nClient\n importMap: ImportMap\n}): (ClientBlock | string)[] | ClientBlock[] => {\n const clientBlocks: (ClientBlock | string)[] = []\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i]!\n\n if (typeof block === 'string') {\n // Do not process blocks that are just strings - they are processed once in the client config\n clientBlocks.push(block)\n continue\n }\n\n const clientBlock: ClientBlock = {\n slug: block.slug,\n fields: [],\n }\n if (block.imageAltText) {\n clientBlock.imageAltText = block.imageAltText\n }\n if (block.imageURL) {\n clientBlock.imageURL = block.imageURL\n }\n\n if (block.admin?.custom || block.admin?.group || block.admin?.images) {\n clientBlock.admin = {}\n if (block.admin.custom) {\n clientBlock.admin.custom = block.admin.custom\n }\n if (block.admin.group) {\n clientBlock.admin.group = block.admin.group\n }\n if (block.admin.images) {\n clientBlock.admin.images = block.admin.images\n }\n }\n\n if (block?.admin?.jsx) {\n const jsxResolved = getFromImportMap<BlockJSX>({\n importMap,\n PayloadComponent: block.admin.jsx,\n schemaPath: '',\n })\n clientBlock.jsx = jsxResolved\n }\n\n if (block?.admin?.disableBlockName) {\n // Check for existing admin object, this way we don't have to spread it in\n if (clientBlock.admin) {\n clientBlock.admin.disableBlockName = block.admin.disableBlockName\n } else {\n clientBlock.admin = { disableBlockName: block.admin.disableBlockName }\n }\n }\n\n if (block.labels) {\n clientBlock.labels = {} as unknown as LabelsClient\n\n if (block.labels.singular) {\n if (typeof block.labels.singular === 'function') {\n clientBlock.labels.singular = block.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n clientBlock.labels.singular = block.labels.singular\n }\n if (typeof block.labels.plural === 'function') {\n clientBlock.labels.plural = block.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n clientBlock.labels.plural = block.labels.plural\n }\n }\n }\n\n clientBlock.fields = createClientFields({\n defaultIDType,\n fields: block.fields,\n i18n,\n importMap,\n })\n\n clientBlocks.push(clientBlock)\n }\n\n return clientBlocks\n}\n\nexport const createClientField = ({\n defaultIDType,\n field: incomingField,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n field: Field\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField => {\n const clientField: ClientField = {} as ClientField\n\n for (const key in incomingField) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n switch (key) {\n case 'admin':\n if (!incomingField.admin) {\n break\n }\n\n clientField.admin = {} as AdminClient\n\n for (const adminKey in incomingField.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in incomingField.admin) {\n if (typeof incomingField.admin?.description !== 'function') {\n ;(clientField as FieldWithDescription).admin.description =\n incomingField.admin.description\n }\n }\n\n break\n\n default:\n ;(clientField.admin as any)[adminKey] =\n incomingField.admin[adminKey as keyof typeof incomingField.admin]\n }\n }\n\n break\n\n case 'blocks':\n case 'fields':\n case 'tabs':\n // Skip - we handle sub-fields in the switch below\n break\n\n case 'options':\n // Skip - we handle options in the radio/select switch below to avoid mutating the global config\n break\n\n case 'label':\n //@ts-expect-error - would need to type narrow\n if (typeof incomingField.label === 'function') {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label({ i18n, t: i18n.t })\n } else {\n //@ts-expect-error - would need to type narrow\n clientField.label = incomingField.label\n }\n\n break\n\n default:\n ;(clientField as any)[key] = incomingField[key as keyof Field]\n }\n }\n\n switch (incomingField.type) {\n case 'array': {\n if (incomingField.labels) {\n const field = clientField as unknown as ArrayFieldClient\n\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n }\n // falls through\n case 'collapsible':\n case 'group':\n case 'row': {\n const field = clientField as unknown as RowFieldClient\n\n if (!field.fields) {\n field.fields = []\n }\n\n field.fields = createClientFields({\n defaultIDType,\n disableAddingID: incomingField.type !== 'array',\n fields: incomingField.fields,\n i18n,\n importMap,\n })\n\n break\n }\n\n case 'blocks': {\n const field = clientField as unknown as BlocksFieldClient\n\n if (incomingField.labels) {\n field.labels = {} as unknown as LabelsClient\n\n if (incomingField.labels.singular) {\n if (typeof incomingField.labels.singular === 'function') {\n field.labels.singular = incomingField.labels.singular({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.singular = incomingField.labels.singular\n }\n if (typeof incomingField.labels.plural === 'function') {\n field.labels.plural = incomingField.labels.plural({ i18n, t: i18n.t as TFunction })\n } else {\n field.labels.plural = incomingField.labels.plural\n }\n }\n }\n\n if (incomingField.blockReferences?.length) {\n field.blockReferences = createClientBlocks({\n blocks: incomingField.blockReferences,\n defaultIDType,\n i18n,\n importMap,\n })\n }\n\n if (incomingField.blocks?.length) {\n field.blocks = createClientBlocks({\n blocks: incomingField.blocks,\n defaultIDType,\n i18n,\n importMap,\n }) as ClientBlock[]\n }\n\n break\n }\n\n case 'date': {\n // Strip the `override` function from timezone config as it cannot be serialized\n if (\n incomingField.timezone &&\n typeof incomingField.timezone === 'object' &&\n 'override' in incomingField.timezone\n ) {\n const field = clientField as DateFieldClient\n const { override: _, ...timezoneConfigWithoutOverride } = incomingField.timezone\n field.timezone = timezoneConfigWithoutOverride\n }\n\n break\n }\n\n case 'join': {\n const field = clientField as JoinFieldClient\n\n field.targetField = {\n relationTo: field.targetField?.relationTo,\n }\n\n break\n }\n\n case 'radio':\n // falls through\n case 'select': {\n const field = clientField as RadioFieldClient | SelectFieldClient\n\n if (incomingField.options?.length) {\n field.options = [] // Create new array to avoid mutating global config\n\n for (let i = 0; i < incomingField.options.length; i++) {\n const option = incomingField.options[i]\n\n if (typeof option === 'object' && typeof option.label === 'function') {\n field.options[i] = {\n label: option.label({ i18n, t: i18n.t as TFunction }),\n value: option.value,\n }\n } else if (typeof option === 'object') {\n field.options[i] = {\n label: option.label,\n value: option.value,\n }\n } else if (typeof option === 'string') {\n field.options[i] = option\n }\n }\n }\n\n break\n }\n\n case 'richText': {\n if (!incomingField?.editor) {\n throw new MissingEditorProp(incomingField) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n\n if (typeof incomingField?.editor === 'function') {\n throw new Error('Attempted to access unsanitized rich text editor.')\n }\n\n break\n }\n\n case 'tabs': {\n const field = clientField as unknown as TabsFieldClient\n\n if (incomingField.tabs?.length) {\n field.tabs = []\n\n for (let i = 0; i < incomingField.tabs.length; i++) {\n const tab = incomingField.tabs[i]\n const clientTab = {} as unknown as TabsFieldClient['tabs'][0]\n\n for (const key in tab) {\n if (serverOnlyFieldProperties.includes(key as any)) {\n continue\n }\n\n const tabProp = tab[key as keyof typeof tab]\n\n if (key === 'fields') {\n clientTab.fields = createClientFields({\n defaultIDType,\n disableAddingID: true,\n fields: tab.fields,\n i18n,\n importMap,\n })\n } else if (\n (key === 'label' || key === 'description') &&\n typeof tabProp === 'function'\n ) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n clientTab[key] = tabProp({ t: i18n.t })\n } else if (key === 'admin') {\n clientTab.admin = {} as AdminClient\n\n for (const adminKey in tab.admin) {\n if (serverOnlyFieldAdminProperties.includes(adminKey as any)) {\n continue\n }\n\n switch (adminKey) {\n case 'description':\n if ('description' in tab.admin) {\n if (typeof tab.admin?.description === 'function') {\n clientTab.admin.description = tab.admin.description({\n i18n,\n t: i18n.t as TFunction,\n })\n } else {\n clientTab.admin.description = tab.admin.description\n }\n }\n\n break\n\n default:\n ;(clientTab.admin as any)[adminKey] =\n tab.admin[adminKey as keyof typeof tab.admin]\n }\n }\n } else {\n ;(clientTab as any)[key] = tabProp\n }\n }\n field.tabs[i] = clientTab\n }\n }\n\n break\n }\n\n default:\n break\n }\n\n return clientField\n}\n\nexport const createClientFields = ({\n defaultIDType,\n disableAddingID,\n fields,\n i18n,\n importMap,\n}: {\n defaultIDType: Payload['config']['db']['defaultIDType']\n disableAddingID?: boolean\n fields: Field[]\n i18n: I18nClient\n importMap: ImportMap\n}): ClientField[] => {\n const clientFields: ClientField[] = []\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]!\n\n const clientField = createClientField({\n defaultIDType,\n field,\n i18n,\n importMap,\n })\n\n clientFields.push(clientField)\n }\n\n const hasID = flattenTopLevelFields(fields).some((f) => fieldAffectsData(f) && f.name === 'id')\n\n if (!disableAddingID && !hasID) {\n clientFields.push({\n name: 'id',\n type: defaultIDType,\n admin: {\n description: 'The unique identifier for this document',\n disabled: { bulkEdit: true },\n hidden: true,\n },\n hidden: true,\n label: 'ID',\n } as ClientField)\n }\n\n return clientFields\n}\n"],"names":["getFromImportMap","MissingEditorProp","fieldAffectsData","flattenTopLevelFields","serverOnlyFieldProperties","serverOnlyFieldAdminProperties","createClientBlocks","blocks","defaultIDType","i18n","importMap","clientBlocks","i","length","block","push","clientBlock","slug","fields","imageAltText","imageURL","admin","custom","group","images","jsx","jsxResolved","PayloadComponent","schemaPath","disableBlockName","labels","singular","t","plural","createClientFields","createClientField","field","incomingField","clientField","key","includes","adminKey","description","label","type","disableAddingID","blockReferences","timezone","override","_","timezoneConfigWithoutOverride","targetField","relationTo","options","option","value","editor","Error","tabs","tab","clientTab","tabProp","clientFields","hasID","some","f","name","disabled","bulkEdit","hidden"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitize.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,cAAc,EACf,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AA8BvC,KAAK,kBAAkB,GAAG;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACpC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,OAAO,CAAA;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAA;IAClC;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC;;;OAGG;IACH,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAChF;;;OAGG;IACH,kBAAkB,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,KAAK,EAAE,KAAK,CAAA;IACZ,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACpC,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAA;IAClC,+BAA+B,EAAE,OAAO,CAAA;IACxC,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAChF,kBAAkB,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,KAAK,mBAAmB,GAAG;IACzB;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,EAAE,CAAA;CACzB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,+RAkBvB,iBAAiB,KAAG,OAAO,CAAC,mBAAmB,CA4cjD,CAAA;AAED,eAAO,MAAM,cAAc,yRAiBxB,kBAAkB,KAAG,OAAO,CAAC,KAAK,EAAE,CAqCtC,CAAA"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,cAAc,EACf,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AA8BvC,KAAK,kBAAkB,GAAG;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACpC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,OAAO,CAAA;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAA;IAClC;;;;OAIG;IACH,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC;;;OAGG;IACH,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAChF;;;OAGG;IACH,kBAAkB,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,KAAK,EAAE,KAAK,CAAA;IACZ,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACpC,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAA;IAClC,+BAA+B,EAAE,OAAO,CAAA;IACxC,4BAA4B,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAChF,kBAAkB,EAAE,IAAI,GAAG,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,KAAK,mBAAmB,GAAG;IACzB;;OAEG;IACH,cAAc,CAAC,EAAE,KAAK,EAAE,CAAA;CACzB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAU,4RAkBjC,iBAAiB,KAAG,OAAO,CAAC,mBAAmB,CAwbjD,CAAA;AAED,eAAO,MAAM,cAAc,GAAU,sRAiBlC,kBAAkB,KAAG,OAAO,CAAC,KAAK,EAAE,CAqCtC,CAAA"}
@@ -1,4 +1,3 @@
1
- import { deepMergeSimple } from '@payloadcms/translations/utilities';
2
1
  import { DuplicateFieldName, InvalidConfiguration, InvalidFieldName, InvalidFieldRelationship, MissingEditorProp, MissingFieldType } from '../../errors/index.js';
3
2
  import { ReservedFieldName } from '../../errors/ReservedFieldName.js';
4
3
  import { flattenAllFields } from '../../utilities/flattenAllFields.js';
@@ -102,14 +101,6 @@ import { fieldAffectsData as _fieldAffectsData, fieldIsLocalized, tabHasName } f
102
101
  }
103
102
  });
104
103
  }
105
- if (field.min && !field.minRows) {
106
- console.warn(`(payload): The "min" property is deprecated for the Relationship field "${field.name}" and will be removed in a future version. Please use "minRows" instead.`);
107
- field.minRows = field.min;
108
- }
109
- if (field.max && !field.maxRows) {
110
- console.warn(`(payload): The "max" property is deprecated for the Relationship field "${field.name}" and will be removed in a future version. Please use "maxRows" instead.`);
111
- field.maxRows = field.max;
112
- }
113
104
  }
114
105
  // Upload isSortable default
115
106
  if (field.type === 'upload') {
@@ -141,12 +132,7 @@ import { fieldAffectsData as _fieldAffectsData, fieldIsLocalized, tabHasName } f
141
132
  existingFieldNames.add(field.name);
142
133
  }
143
134
  if (typeof field.localized !== 'undefined') {
144
- let shouldDisableLocalized = !config.localization;
145
- if (process.env.NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized !== 'true' && parentIsLocalized && // @todo PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY=true will be the default in 4.0
146
- process.env.PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY !== 'true') {
147
- shouldDisableLocalized = true;
148
- }
149
- if (shouldDisableLocalized) {
135
+ if (!config.localization) {
150
136
  delete field.localized;
151
137
  }
152
138
  }
@@ -198,9 +184,6 @@ import { fieldAffectsData as _fieldAffectsData, fieldIsLocalized, tabHasName } f
198
184
  parentIsLocalized: parentIsLocalized || field.localized
199
185
  });
200
186
  }
201
- if (field.editor.i18n && Object.keys(field.editor.i18n).length >= 0) {
202
- config.i18n.translations = deepMergeSimple(config.i18n.translations, field.editor.i18n);
203
- }
204
187
  };
205
188
  if (richTextSanitizationPromises) {
206
189
  richTextSanitizationPromises.push(sanitizeRichText);
@@ -298,8 +281,18 @@ import { fieldAffectsData as _fieldAffectsData, fieldIsLocalized, tabHasName } f
298
281
  field.tabs[j] = tab;
299
282
  }
300
283
  }
301
- if (field.type === 'ui' && typeof field.admin.disableBulkEdit === 'undefined') {
302
- field.admin.disableBulkEdit = true;
284
+ if (field.type === 'ui') {
285
+ const existing = field.admin.disabled;
286
+ if (existing === undefined) {
287
+ field.admin.disabled = {
288
+ bulkEdit: true
289
+ };
290
+ } else if (existing !== true && typeof existing === 'object' && existing.bulkEdit === undefined) {
291
+ field.admin.disabled = {
292
+ ...existing,
293
+ bulkEdit: true
294
+ };
295
+ }
303
296
  }
304
297
  // Timezone field insertion
305
298
  if (field.type === 'date' && field.timezone) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/config/sanitize.ts"],"sourcesContent":["import { deepMergeSimple } from '@payloadcms/translations/utilities'\n\nimport type {\n CollectionConfig,\n SanitizedJoin,\n SanitizedJoins,\n} from '../../collections/config/types.js'\nimport type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { GlobalConfig } from '../../globals/config/types.js'\nimport type { OrderableJoinInfo } from './sanitizeJoinField.js'\nimport type { Field } from './types.js'\n\nimport {\n DuplicateFieldName,\n InvalidConfiguration,\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingEditorProp,\n MissingFieldType,\n} from '../../errors/index.js'\nimport { ReservedFieldName } from '../../errors/ReservedFieldName.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { formatLabels, toWords } from '../../utilities/formatLabels.js'\nimport { validateTimezones } from '../../utilities/validateTimezones.js'\nimport { baseBlockFields } from '../baseFields/baseBlockFields.js'\nimport { baseIDField } from '../baseFields/baseIDField.js'\nimport { baseTimezoneField } from '../baseFields/timezone/baseField.js'\nimport { defaultTimezones } from '../baseFields/timezone/defaultTimezones.js'\nimport { getFieldPaths } from '../getFieldPaths.js'\nimport { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js'\nimport { validations } from '../validations.js'\nimport {\n reservedAPIKeyFieldNames,\n reservedBaseAuthFieldNames,\n reservedBaseUploadFieldNames,\n reservedVerifyFieldNames,\n} from './reservedFieldNames.js'\nimport { sanitizeJoinField } from './sanitizeJoinField.js'\nimport { fieldAffectsData as _fieldAffectsData, fieldIsLocalized, tabHasName } from './types.js'\n\ntype SanitizeFieldsArgs = {\n collectionConfig?: CollectionConfig\n config: Config\n existingFieldNames?: Set<string>\n fields: Field[]\n globalConfig?: GlobalConfig\n /**\n * Used to prevent unnecessary sanitization of fields that are not top-level.\n */\n isTopLevelField?: boolean\n joinPath?: string\n /**\n * When not passed in, assume that join are not supported (globals, arrays, blocks)\n */\n joins?: SanitizedJoins\n /**\n * Tracker for orderable join fields - populated during sanitization\n */\n orderableJoins?: OrderableJoinInfo[]\n /**\n * A string of '-' separated indexes representing where\n * to find this field in a given field schema array.\n */\n parentIndexPath?: string\n parentIsLocalized: boolean\n /**\n * Path for parent fields relative to their position in the schema.\n */\n parentSchemaPath?: string\n polymorphicJoins?: SanitizedJoin[]\n /**\n * If true, a richText field will require an editor property to be set, as the sanitizeFields function will not add it from the payload config if not present.\n *\n * @default false\n */\n requireFieldLevelRichTextEditor?: boolean\n /**\n * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises\n * so that you can sanitize them together, after the config has been sanitized.\n */\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>\n /**\n * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.\n * This validation will be skipped if validRelationships is null.\n */\n validRelationships: null | string[]\n}\n\nexport type SanitizeFieldArgs = {\n collectionConfig?: CollectionConfig\n config: Config\n existingFieldNames: Set<string>\n field: Field\n globalConfig?: GlobalConfig\n /**\n * The index of this field in the parent fields array\n */\n index: number\n /**\n * Used to prevent unnecessary sanitization of fields that are not top-level.\n */\n isTopLevelField: boolean\n joinPath: string\n /**\n * When not passed in, assume that joins are not supported (globals, arrays, blocks)\n */\n joins?: SanitizedJoins\n /**\n * Tracker for orderable join fields - populated during sanitization\n */\n orderableJoins?: OrderableJoinInfo[]\n parentIndexPath: string\n parentIsLocalized: boolean\n parentSchemaPath: string\n polymorphicJoins?: SanitizedJoin[]\n requireFieldLevelRichTextEditor: boolean\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>\n validRelationships: null | string[]\n}\n\ntype SanitizeFieldResult = {\n /**\n * Fields to insert after this field (e.g., timezone field)\n */\n fieldsToInsert?: Field[]\n}\n\n/**\n * Sanitize a single field. Handles all per-field logic including:\n * - Validation setup\n * - Hooks/access/admin defaults\n * - Type-specific handling\n * - Recursive sanitization of nested fields\n *\n * @returns Result containing any fields to insert after this one\n */\nexport const sanitizeField = async ({\n collectionConfig,\n config,\n existingFieldNames,\n field,\n globalConfig,\n index,\n isTopLevelField,\n joinPath,\n joins,\n orderableJoins,\n parentIndexPath,\n parentIsLocalized,\n parentSchemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n}: SanitizeFieldArgs): Promise<SanitizeFieldResult> => {\n const result: SanitizeFieldResult = {}\n\n if ('_sanitized' in field && field._sanitized === true) {\n return result\n }\n\n if ('_sanitized' in field) {\n field._sanitized = true\n }\n\n if (!field.type) {\n throw new MissingFieldType(field)\n }\n\n const fieldAffectsData = _fieldAffectsData(field)\n\n const { indexPath, schemaPath } = getFieldPaths({\n field,\n index,\n parentIndexPath,\n parentSchemaPath,\n })\n\n // Reserved field name checks\n if (isTopLevelField && fieldAffectsData && field.name) {\n if (collectionConfig && collectionConfig.upload) {\n if (reservedBaseUploadFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n }\n\n if (\n collectionConfig &&\n collectionConfig.auth &&\n typeof collectionConfig.auth === 'object' &&\n !collectionConfig.auth.disableLocalStrategy\n ) {\n if (reservedBaseAuthFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n\n if (collectionConfig.auth.verify) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n if (reservedAPIKeyFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n if (reservedVerifyFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n }\n }\n }\n\n // Invalid field name check\n if (fieldAffectsData && field.name.includes('.')) {\n throw new InvalidFieldName(field, field.name)\n }\n\n // Auto-label\n if (\n 'name' in field &&\n field.name &&\n typeof field.label !== 'object' &&\n typeof field.label !== 'string' &&\n typeof field.label !== 'function' &&\n field.label !== false\n ) {\n field.label = toWords(field.name)\n }\n\n // Checkbox default\n if (\n field.type === 'checkbox' &&\n typeof field.defaultValue === 'undefined' &&\n field.required === true\n ) {\n field.defaultValue = false\n }\n\n // Join field sanitization\n if (field.type === 'join') {\n sanitizeJoinField({\n config,\n field,\n joinPath,\n joins,\n orderableJoins,\n parentIsLocalized,\n polymorphicJoins,\n })\n }\n\n // Relationship/upload validation\n if (field.type === 'relationship' || field.type === 'upload') {\n if (Array.isArray(field.relationTo) && field.relationTo.length === 0) {\n throw new Error(\n `Field \"${field.name}\" of type \"${field.type}\" has an empty relationTo array. At least one collection must be specified.`,\n )\n }\n\n if (validRelationships) {\n const relationships = Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]\n\n relationships.forEach((relationship: string) => {\n if (!validRelationships.includes(relationship)) {\n throw new InvalidFieldRelationship(field, relationship)\n }\n })\n }\n\n if (field.min && !field.minRows) {\n console.warn(\n `(payload): The \"min\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"minRows\" instead.`,\n )\n field.minRows = field.min\n }\n\n if (field.max && !field.maxRows) {\n console.warn(\n `(payload): The \"max\" property is deprecated for the Relationship field \"${field.name}\" and will be removed in a future version. Please use \"maxRows\" instead.`,\n )\n field.maxRows = field.max\n }\n }\n\n // Upload isSortable default\n if (field.type === 'upload') {\n if (!field.admin || !('isSortable' in field.admin)) {\n field.admin = {\n isSortable: true,\n ...field.admin,\n }\n }\n }\n\n // Array ID field\n if (field.type === 'array' && field.fields) {\n const hasCustomID = field.fields.some((f) => 'name' in f && f.name === 'id')\n if (!hasCustomID) {\n field.fields.push(baseIDField)\n }\n }\n\n // Blocks/array labels\n if ((field.type === 'blocks' || field.type === 'array') && field.label) {\n field.labels = field.labels || formatLabels(field.name)\n }\n\n if (fieldAffectsData) {\n if (existingFieldNames.has(field.name)) {\n throw new DuplicateFieldName(field.name)\n } else if (!['blockName', 'id'].includes(field.name)) {\n existingFieldNames.add(field.name)\n }\n\n if (typeof field.localized !== 'undefined') {\n let shouldDisableLocalized = !config.localization\n\n if (\n process.env.NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized !== 'true' &&\n parentIsLocalized &&\n // @todo PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY=true will be the default in 4.0\n process.env.PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY !== 'true'\n ) {\n shouldDisableLocalized = true\n }\n\n if (shouldDisableLocalized) {\n delete field.localized\n }\n }\n\n if (typeof field.validate === 'undefined') {\n if ('virtual' in field && field.virtual) {\n field.validate = (): true => true\n } else {\n const defaultValidate = validations[field.type as keyof typeof validations]\n if (defaultValidate) {\n field.validate = (val: any, options: any) =>\n defaultValidate(val, { ...field, ...options })\n } else {\n field.validate = (): true => true\n }\n }\n }\n\n if (!field.hooks) {\n field.hooks = {}\n }\n\n if (!field.access) {\n field.access = {}\n }\n\n setDefaultBeforeDuplicate(field, parentIsLocalized)\n }\n\n if (!field.admin) {\n field.admin = {}\n }\n\n if ('virtual' in field && field.virtual && field.admin.readOnly !== false && fieldAffectsData) {\n field.admin.readOnly = true\n }\n\n // Make sure that the richText field has an editor\n if (field.type === 'richText') {\n const sanitizeRichText = async (_config: SanitizedConfig) => {\n if (!field.editor) {\n if (_config.editor && !requireFieldLevelRichTextEditor) {\n // config.editor should be sanitized at this point\n field.editor = _config.editor\n } else {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n }\n\n if (typeof field.editor === 'function') {\n field.editor = await field.editor({\n config: _config,\n isRoot: requireFieldLevelRichTextEditor,\n parentIsLocalized: (parentIsLocalized || field.localized)!,\n })\n }\n\n if (field.editor.i18n && Object.keys(field.editor.i18n).length >= 0) {\n config.i18n!.translations = deepMergeSimple(config.i18n!.translations!, field.editor.i18n)\n }\n }\n if (richTextSanitizationPromises) {\n richTextSanitizationPromises.push(sanitizeRichText)\n } else {\n await sanitizeRichText(config as unknown as SanitizedConfig)\n }\n }\n\n if (field.type === 'blocks' && field.blocks) {\n if (field.blockReferences && field.blocks?.length) {\n throw new Error('You cannot have both blockReferences and blocks in the same blocks field')\n }\n\n const blockSlugs: string[] = []\n\n for (const block of field.blockReferences ?? field.blocks) {\n const blockSlug = typeof block === 'string' ? block : block.slug\n\n if (blockSlugs.includes(blockSlug)) {\n throw new DuplicateFieldName(blockSlug)\n }\n\n blockSlugs.push(blockSlug)\n\n if (typeof block === 'string') {\n continue\n }\n\n if (block._sanitized === true) {\n continue\n }\n\n block._sanitized = true\n block.fields = block.fields.concat(baseBlockFields)\n block.labels = !block.labels ? formatLabels(block.slug) : block.labels\n\n block.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: new Set(),\n fields: block.fields,\n isTopLevelField: false,\n parentIndexPath: '',\n parentIsLocalized: (parentIsLocalized || field.localized)!,\n parentSchemaPath: schemaPath + '.' + block.slug,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n }\n\n if ('fields' in field && field.fields) {\n field.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: fieldAffectsData ? new Set() : existingFieldNames,\n fields: field.fields,\n isTopLevelField: isTopLevelField && !fieldAffectsData,\n joinPath: fieldAffectsData ? `${joinPath ? joinPath + '.' : ''}${field.name}` : joinPath,\n joins,\n orderableJoins,\n parentIndexPath: fieldAffectsData ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || fieldIsLocalized(field),\n parentSchemaPath: schemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n\n if (field.type === 'tabs') {\n for (let j = 0; j < field.tabs.length; j++) {\n const tab = field.tabs[j]!\n\n const isNamedTab = tabHasName(tab)\n\n if (isNamedTab && typeof tab.label === 'undefined') {\n tab.label = toWords(tab.name)\n }\n\n const { indexPath: tabIndexPath, schemaPath: tabSchemaPath } = getFieldPaths({\n field: tab,\n index: j,\n parentIndexPath: indexPath,\n parentSchemaPath: schemaPath,\n })\n\n if (\n 'admin' in tab &&\n tab.admin?.condition &&\n typeof tab.admin.condition === 'function' &&\n !tab.id\n ) {\n tab.id = tabSchemaPath\n }\n\n tab.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: isNamedTab ? new Set() : existingFieldNames,\n fields: tab.fields,\n isTopLevelField: isTopLevelField && !isNamedTab,\n joinPath: isNamedTab ? `${joinPath ? joinPath + '.' : ''}${tab.name}` : joinPath,\n joins,\n orderableJoins,\n parentIndexPath: isNamedTab ? '' : tabIndexPath,\n parentIsLocalized: parentIsLocalized || (isNamedTab && tab.localized)!,\n parentSchemaPath: tabSchemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n field.tabs[j] = tab\n }\n }\n\n if (field.type === 'ui' && typeof field.admin.disableBulkEdit === 'undefined') {\n field.admin.disableBulkEdit = true\n }\n\n // Timezone field insertion\n if (field.type === 'date' && field.timezone) {\n const name = field.name + '_tz'\n\n let defaultTimezone =\n field.timezone && typeof field.timezone === 'object'\n ? field.timezone.defaultTimezone\n : config.admin?.timezones?.defaultTimezone\n\n const required =\n field.required ||\n (field.timezone && typeof field.timezone === 'object' && field.timezone.required)\n\n const supportedTimezones =\n field.timezone && typeof field.timezone === 'object' && field.timezone.supportedTimezones\n ? field.timezone.supportedTimezones\n : config.admin?.timezones?.supportedTimezones\n\n const options =\n typeof supportedTimezones === 'function'\n ? supportedTimezones({ defaultTimezones })\n : supportedTimezones\n\n validateTimezones({\n source: `field \"${field.name}\" timezone.supportedTimezones`,\n timezones: options,\n })\n\n if (options && options.length === 1 && options[0]?.value) {\n defaultTimezone = options[0].value\n }\n\n // Generate label for timezone field\n const timezoneLabel = typeof field.label === 'string' ? `${field.label} Tz` : toWords(name)\n\n const baseField = baseTimezoneField({\n name,\n defaultValue: defaultTimezone,\n label: timezoneLabel,\n options,\n required,\n })\n\n // Apply override if provided\n const timezoneField =\n typeof field.timezone === 'object' && typeof field.timezone.override === 'function'\n ? field.timezone.override({ baseField })\n : baseField\n\n result.fieldsToInsert = [timezoneField]\n }\n\n // Virtual field handling\n if ('virtual' in field && typeof field.virtual === 'string') {\n const virtualField = field\n const configFields = (collectionConfig || globalConfig)?.fields\n if (configFields) {\n let flattenFields = flattenAllFields({ fields: configFields })\n const paths = field.virtual.split('.')\n let isHasMany = false\n\n for (const [idx, segment] of paths.entries()) {\n const foundField = flattenFields.find((e) => e.name === segment)\n if (!foundField) {\n break\n }\n\n if (\n foundField.type === 'group' ||\n foundField.type === 'tab' ||\n foundField.type === 'array'\n ) {\n flattenFields = foundField.flattenedFields\n } else if (\n (foundField.type === 'relationship' || foundField.type === 'upload') &&\n idx !== paths.length - 1 &&\n typeof foundField.relationTo === 'string'\n ) {\n if (\n foundField.hasMany &&\n (virtualField.type === 'text' ||\n virtualField.type === 'number' ||\n virtualField.type === 'select')\n ) {\n if (isHasMany) {\n throw new InvalidConfiguration(\n `Virtual field ${virtualField.name} in ${globalConfig ? `global ${globalConfig.slug}` : `collection ${collectionConfig?.slug}`} references 2 or more hasMany relationships on the path ${virtualField.virtual} which is not allowed.`,\n )\n }\n\n isHasMany = true\n virtualField.hasMany = true\n }\n const relatedCollection = config.collections?.find(\n (e) => e.slug === foundField.relationTo,\n )\n if (relatedCollection) {\n flattenFields = flattenAllFields({ fields: relatedCollection.fields })\n }\n }\n }\n }\n }\n\n return result\n}\n\nexport const sanitizeFields = async ({\n collectionConfig,\n config,\n existingFieldNames = new Set(),\n fields,\n globalConfig,\n isTopLevelField = true,\n joinPath = '',\n joins,\n orderableJoins,\n parentIndexPath = '',\n parentIsLocalized,\n parentSchemaPath = '',\n polymorphicJoins,\n requireFieldLevelRichTextEditor = false,\n richTextSanitizationPromises,\n validRelationships,\n}: SanitizeFieldsArgs): Promise<Field[]> => {\n if (!fields) {\n return []\n }\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]!\n\n const result = await sanitizeField({\n collectionConfig,\n config,\n existingFieldNames,\n field,\n globalConfig,\n index: i,\n isTopLevelField,\n joinPath,\n joins,\n orderableJoins,\n parentIndexPath,\n parentIsLocalized,\n parentSchemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n fields[i] = field\n\n if (result.fieldsToInsert?.length) {\n fields.splice(i + 1, 0, ...result.fieldsToInsert)\n i += result.fieldsToInsert.length\n }\n }\n\n return fields\n}\n"],"names":["deepMergeSimple","DuplicateFieldName","InvalidConfiguration","InvalidFieldName","InvalidFieldRelationship","MissingEditorProp","MissingFieldType","ReservedFieldName","flattenAllFields","formatLabels","toWords","validateTimezones","baseBlockFields","baseIDField","baseTimezoneField","defaultTimezones","getFieldPaths","setDefaultBeforeDuplicate","validations","reservedAPIKeyFieldNames","reservedBaseAuthFieldNames","reservedBaseUploadFieldNames","reservedVerifyFieldNames","sanitizeJoinField","fieldAffectsData","_fieldAffectsData","fieldIsLocalized","tabHasName","sanitizeField","collectionConfig","config","existingFieldNames","field","globalConfig","index","isTopLevelField","joinPath","joins","orderableJoins","parentIndexPath","parentIsLocalized","parentSchemaPath","polymorphicJoins","requireFieldLevelRichTextEditor","richTextSanitizationPromises","validRelationships","result","_sanitized","type","indexPath","schemaPath","name","upload","includes","auth","disableLocalStrategy","verify","label","defaultValue","required","Array","isArray","relationTo","length","Error","relationships","forEach","relationship","min","minRows","console","warn","max","maxRows","admin","isSortable","fields","hasCustomID","some","f","push","labels","has","add","localized","shouldDisableLocalized","localization","process","env","NEXT_PUBLIC_PAYLOAD_COMPATIBILITY_allowLocalizedWithinLocalized","PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY","validate","virtual","defaultValidate","val","options","hooks","access","readOnly","sanitizeRichText","_config","editor","isRoot","i18n","Object","keys","translations","blocks","blockReferences","blockSlugs","block","blockSlug","slug","concat","sanitizeFields","Set","j","tabs","tab","isNamedTab","tabIndexPath","tabSchemaPath","condition","id","disableBulkEdit","timezone","defaultTimezone","timezones","supportedTimezones","source","value","timezoneLabel","baseField","timezoneField","override","fieldsToInsert","virtualField","configFields","flattenFields","paths","split","isHasMany","idx","segment","entries","foundField","find","e","flattenedFields","hasMany","relatedCollection","collections","i","splice"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/config/sanitize.ts"],"sourcesContent":["import type {\n CollectionConfig,\n SanitizedJoin,\n SanitizedJoins,\n} from '../../collections/config/types.js'\nimport type { Config, SanitizedConfig } from '../../config/types.js'\nimport type { GlobalConfig } from '../../globals/config/types.js'\nimport type { OrderableJoinInfo } from './sanitizeJoinField.js'\nimport type { Field } from './types.js'\n\nimport {\n DuplicateFieldName,\n InvalidConfiguration,\n InvalidFieldName,\n InvalidFieldRelationship,\n MissingEditorProp,\n MissingFieldType,\n} from '../../errors/index.js'\nimport { ReservedFieldName } from '../../errors/ReservedFieldName.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { formatLabels, toWords } from '../../utilities/formatLabels.js'\nimport { validateTimezones } from '../../utilities/validateTimezones.js'\nimport { baseBlockFields } from '../baseFields/baseBlockFields.js'\nimport { baseIDField } from '../baseFields/baseIDField.js'\nimport { baseTimezoneField } from '../baseFields/timezone/baseField.js'\nimport { defaultTimezones } from '../baseFields/timezone/defaultTimezones.js'\nimport { getFieldPaths } from '../getFieldPaths.js'\nimport { setDefaultBeforeDuplicate } from '../setDefaultBeforeDuplicate.js'\nimport { validations } from '../validations.js'\nimport {\n reservedAPIKeyFieldNames,\n reservedBaseAuthFieldNames,\n reservedBaseUploadFieldNames,\n reservedVerifyFieldNames,\n} from './reservedFieldNames.js'\nimport { sanitizeJoinField } from './sanitizeJoinField.js'\nimport { fieldAffectsData as _fieldAffectsData, fieldIsLocalized, tabHasName } from './types.js'\n\ntype SanitizeFieldsArgs = {\n collectionConfig?: CollectionConfig\n config: Config\n existingFieldNames?: Set<string>\n fields: Field[]\n globalConfig?: GlobalConfig\n /**\n * Used to prevent unnecessary sanitization of fields that are not top-level.\n */\n isTopLevelField?: boolean\n joinPath?: string\n /**\n * When not passed in, assume that join are not supported (globals, arrays, blocks)\n */\n joins?: SanitizedJoins\n /**\n * Tracker for orderable join fields - populated during sanitization\n */\n orderableJoins?: OrderableJoinInfo[]\n /**\n * A string of '-' separated indexes representing where\n * to find this field in a given field schema array.\n */\n parentIndexPath?: string\n parentIsLocalized: boolean\n /**\n * Path for parent fields relative to their position in the schema.\n */\n parentSchemaPath?: string\n polymorphicJoins?: SanitizedJoin[]\n /**\n * If true, a richText field will require an editor property to be set, as the sanitizeFields function will not add it from the payload config if not present.\n *\n * @default false\n */\n requireFieldLevelRichTextEditor?: boolean\n /**\n * If this property is set, RichText fields won't be sanitized immediately. Instead, they will be added to this array as promises\n * so that you can sanitize them together, after the config has been sanitized.\n */\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>\n /**\n * If not null, will validate that upload and relationship fields do not relate to a collection that is not in this array.\n * This validation will be skipped if validRelationships is null.\n */\n validRelationships: null | string[]\n}\n\nexport type SanitizeFieldArgs = {\n collectionConfig?: CollectionConfig\n config: Config\n existingFieldNames: Set<string>\n field: Field\n globalConfig?: GlobalConfig\n /**\n * The index of this field in the parent fields array\n */\n index: number\n /**\n * Used to prevent unnecessary sanitization of fields that are not top-level.\n */\n isTopLevelField: boolean\n joinPath: string\n /**\n * When not passed in, assume that joins are not supported (globals, arrays, blocks)\n */\n joins?: SanitizedJoins\n /**\n * Tracker for orderable join fields - populated during sanitization\n */\n orderableJoins?: OrderableJoinInfo[]\n parentIndexPath: string\n parentIsLocalized: boolean\n parentSchemaPath: string\n polymorphicJoins?: SanitizedJoin[]\n requireFieldLevelRichTextEditor: boolean\n richTextSanitizationPromises?: Array<(config: SanitizedConfig) => Promise<void>>\n validRelationships: null | string[]\n}\n\ntype SanitizeFieldResult = {\n /**\n * Fields to insert after this field (e.g., timezone field)\n */\n fieldsToInsert?: Field[]\n}\n\n/**\n * Sanitize a single field. Handles all per-field logic including:\n * - Validation setup\n * - Hooks/access/admin defaults\n * - Type-specific handling\n * - Recursive sanitization of nested fields\n *\n * @returns Result containing any fields to insert after this one\n */\nexport const sanitizeField = async ({\n collectionConfig,\n config,\n existingFieldNames,\n field,\n globalConfig,\n index,\n isTopLevelField,\n joinPath,\n joins,\n orderableJoins,\n parentIndexPath,\n parentIsLocalized,\n parentSchemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n}: SanitizeFieldArgs): Promise<SanitizeFieldResult> => {\n const result: SanitizeFieldResult = {}\n\n if ('_sanitized' in field && field._sanitized === true) {\n return result\n }\n\n if ('_sanitized' in field) {\n field._sanitized = true\n }\n\n if (!field.type) {\n throw new MissingFieldType(field)\n }\n\n const fieldAffectsData = _fieldAffectsData(field)\n\n const { indexPath, schemaPath } = getFieldPaths({\n field,\n index,\n parentIndexPath,\n parentSchemaPath,\n })\n\n // Reserved field name checks\n if (isTopLevelField && fieldAffectsData && field.name) {\n if (collectionConfig && collectionConfig.upload) {\n if (reservedBaseUploadFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n }\n\n if (\n collectionConfig &&\n collectionConfig.auth &&\n typeof collectionConfig.auth === 'object' &&\n !collectionConfig.auth.disableLocalStrategy\n ) {\n if (reservedBaseAuthFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n\n if (collectionConfig.auth.verify) {\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n if (reservedAPIKeyFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n if (reservedVerifyFieldNames.includes(field.name)) {\n throw new ReservedFieldName(field, field.name)\n }\n }\n }\n }\n\n // Invalid field name check\n if (fieldAffectsData && field.name.includes('.')) {\n throw new InvalidFieldName(field, field.name)\n }\n\n // Auto-label\n if (\n 'name' in field &&\n field.name &&\n typeof field.label !== 'object' &&\n typeof field.label !== 'string' &&\n typeof field.label !== 'function' &&\n field.label !== false\n ) {\n field.label = toWords(field.name)\n }\n\n // Checkbox default\n if (\n field.type === 'checkbox' &&\n typeof field.defaultValue === 'undefined' &&\n field.required === true\n ) {\n field.defaultValue = false\n }\n\n // Join field sanitization\n if (field.type === 'join') {\n sanitizeJoinField({\n config,\n field,\n joinPath,\n joins,\n orderableJoins,\n parentIsLocalized,\n polymorphicJoins,\n })\n }\n\n // Relationship/upload validation\n if (field.type === 'relationship' || field.type === 'upload') {\n if (Array.isArray(field.relationTo) && field.relationTo.length === 0) {\n throw new Error(\n `Field \"${field.name}\" of type \"${field.type}\" has an empty relationTo array. At least one collection must be specified.`,\n )\n }\n\n if (validRelationships) {\n const relationships = Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]\n\n relationships.forEach((relationship: string) => {\n if (!validRelationships.includes(relationship)) {\n throw new InvalidFieldRelationship(field, relationship)\n }\n })\n }\n }\n\n // Upload isSortable default\n if (field.type === 'upload') {\n if (!field.admin || !('isSortable' in field.admin)) {\n field.admin = {\n isSortable: true,\n ...field.admin,\n }\n }\n }\n\n // Array ID field\n if (field.type === 'array' && field.fields) {\n const hasCustomID = field.fields.some((f) => 'name' in f && f.name === 'id')\n if (!hasCustomID) {\n field.fields.push(baseIDField)\n }\n }\n\n // Blocks/array labels\n if ((field.type === 'blocks' || field.type === 'array') && field.label) {\n field.labels = field.labels || formatLabels(field.name)\n }\n\n if (fieldAffectsData) {\n if (existingFieldNames.has(field.name)) {\n throw new DuplicateFieldName(field.name)\n } else if (!['blockName', 'id'].includes(field.name)) {\n existingFieldNames.add(field.name)\n }\n\n if (typeof field.localized !== 'undefined') {\n if (!config.localization) {\n delete field.localized\n }\n }\n\n if (typeof field.validate === 'undefined') {\n if ('virtual' in field && field.virtual) {\n field.validate = (): true => true\n } else {\n const defaultValidate = validations[field.type as keyof typeof validations]\n if (defaultValidate) {\n field.validate = (val: any, options: any) =>\n defaultValidate(val, { ...field, ...options })\n } else {\n field.validate = (): true => true\n }\n }\n }\n\n if (!field.hooks) {\n field.hooks = {}\n }\n\n if (!field.access) {\n field.access = {}\n }\n\n setDefaultBeforeDuplicate(field, parentIsLocalized)\n }\n\n if (!field.admin) {\n field.admin = {}\n }\n\n if ('virtual' in field && field.virtual && field.admin.readOnly !== false && fieldAffectsData) {\n field.admin.readOnly = true\n }\n\n // Make sure that the richText field has an editor\n if (field.type === 'richText') {\n const sanitizeRichText = async (_config: SanitizedConfig) => {\n if (!field.editor) {\n if (_config.editor && !requireFieldLevelRichTextEditor) {\n // config.editor should be sanitized at this point\n field.editor = _config.editor\n } else {\n throw new MissingEditorProp(field) // while we allow disabling editor functionality, you should not have any richText fields defined if you do not have an editor\n }\n }\n\n if (typeof field.editor === 'function') {\n field.editor = await field.editor({\n config: _config,\n isRoot: requireFieldLevelRichTextEditor,\n parentIsLocalized: (parentIsLocalized || field.localized)!,\n })\n }\n }\n if (richTextSanitizationPromises) {\n richTextSanitizationPromises.push(sanitizeRichText)\n } else {\n await sanitizeRichText(config as unknown as SanitizedConfig)\n }\n }\n\n if (field.type === 'blocks' && field.blocks) {\n if (field.blockReferences && field.blocks?.length) {\n throw new Error('You cannot have both blockReferences and blocks in the same blocks field')\n }\n\n const blockSlugs: string[] = []\n\n for (const block of field.blockReferences ?? field.blocks) {\n const blockSlug = typeof block === 'string' ? block : block.slug\n\n if (blockSlugs.includes(blockSlug)) {\n throw new DuplicateFieldName(blockSlug)\n }\n\n blockSlugs.push(blockSlug)\n\n if (typeof block === 'string') {\n continue\n }\n\n if (block._sanitized === true) {\n continue\n }\n\n block._sanitized = true\n block.fields = block.fields.concat(baseBlockFields)\n block.labels = !block.labels ? formatLabels(block.slug) : block.labels\n\n block.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: new Set(),\n fields: block.fields,\n isTopLevelField: false,\n parentIndexPath: '',\n parentIsLocalized: (parentIsLocalized || field.localized)!,\n parentSchemaPath: schemaPath + '.' + block.slug,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n }\n\n if ('fields' in field && field.fields) {\n field.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: fieldAffectsData ? new Set() : existingFieldNames,\n fields: field.fields,\n isTopLevelField: isTopLevelField && !fieldAffectsData,\n joinPath: fieldAffectsData ? `${joinPath ? joinPath + '.' : ''}${field.name}` : joinPath,\n joins,\n orderableJoins,\n parentIndexPath: fieldAffectsData ? '' : indexPath,\n parentIsLocalized: parentIsLocalized || fieldIsLocalized(field),\n parentSchemaPath: schemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n }\n\n if (field.type === 'tabs') {\n for (let j = 0; j < field.tabs.length; j++) {\n const tab = field.tabs[j]!\n\n const isNamedTab = tabHasName(tab)\n\n if (isNamedTab && typeof tab.label === 'undefined') {\n tab.label = toWords(tab.name)\n }\n\n const { indexPath: tabIndexPath, schemaPath: tabSchemaPath } = getFieldPaths({\n field: tab,\n index: j,\n parentIndexPath: indexPath,\n parentSchemaPath: schemaPath,\n })\n\n if (\n 'admin' in tab &&\n tab.admin?.condition &&\n typeof tab.admin.condition === 'function' &&\n !tab.id\n ) {\n tab.id = tabSchemaPath\n }\n\n tab.fields = await sanitizeFields({\n collectionConfig,\n config,\n existingFieldNames: isNamedTab ? new Set() : existingFieldNames,\n fields: tab.fields,\n isTopLevelField: isTopLevelField && !isNamedTab,\n joinPath: isNamedTab ? `${joinPath ? joinPath + '.' : ''}${tab.name}` : joinPath,\n joins,\n orderableJoins,\n parentIndexPath: isNamedTab ? '' : tabIndexPath,\n parentIsLocalized: parentIsLocalized || (isNamedTab && tab.localized)!,\n parentSchemaPath: tabSchemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n field.tabs[j] = tab\n }\n }\n\n if (field.type === 'ui') {\n const existing = field.admin.disabled\n if (existing === undefined) {\n field.admin.disabled = { bulkEdit: true }\n } else if (\n existing !== true &&\n typeof existing === 'object' &&\n existing.bulkEdit === undefined\n ) {\n field.admin.disabled = { ...existing, bulkEdit: true }\n }\n }\n\n // Timezone field insertion\n if (field.type === 'date' && field.timezone) {\n const name = field.name + '_tz'\n\n let defaultTimezone =\n field.timezone && typeof field.timezone === 'object'\n ? field.timezone.defaultTimezone\n : config.admin?.timezones?.defaultTimezone\n\n const required =\n field.required ||\n (field.timezone && typeof field.timezone === 'object' && field.timezone.required)\n\n const supportedTimezones =\n field.timezone && typeof field.timezone === 'object' && field.timezone.supportedTimezones\n ? field.timezone.supportedTimezones\n : config.admin?.timezones?.supportedTimezones\n\n const options =\n typeof supportedTimezones === 'function'\n ? supportedTimezones({ defaultTimezones })\n : supportedTimezones\n\n validateTimezones({\n source: `field \"${field.name}\" timezone.supportedTimezones`,\n timezones: options,\n })\n\n if (options && options.length === 1 && options[0]?.value) {\n defaultTimezone = options[0].value\n }\n\n // Generate label for timezone field\n const timezoneLabel = typeof field.label === 'string' ? `${field.label} Tz` : toWords(name)\n\n const baseField = baseTimezoneField({\n name,\n defaultValue: defaultTimezone,\n label: timezoneLabel,\n options,\n required,\n })\n\n // Apply override if provided\n const timezoneField =\n typeof field.timezone === 'object' && typeof field.timezone.override === 'function'\n ? field.timezone.override({ baseField })\n : baseField\n\n result.fieldsToInsert = [timezoneField]\n }\n\n // Virtual field handling\n if ('virtual' in field && typeof field.virtual === 'string') {\n const virtualField = field\n const configFields = (collectionConfig || globalConfig)?.fields\n if (configFields) {\n let flattenFields = flattenAllFields({ fields: configFields })\n const paths = field.virtual.split('.')\n let isHasMany = false\n\n for (const [idx, segment] of paths.entries()) {\n const foundField = flattenFields.find((e) => e.name === segment)\n if (!foundField) {\n break\n }\n\n if (\n foundField.type === 'group' ||\n foundField.type === 'tab' ||\n foundField.type === 'array'\n ) {\n flattenFields = foundField.flattenedFields\n } else if (\n (foundField.type === 'relationship' || foundField.type === 'upload') &&\n idx !== paths.length - 1 &&\n typeof foundField.relationTo === 'string'\n ) {\n if (\n foundField.hasMany &&\n (virtualField.type === 'text' ||\n virtualField.type === 'number' ||\n virtualField.type === 'select')\n ) {\n if (isHasMany) {\n throw new InvalidConfiguration(\n `Virtual field ${virtualField.name} in ${globalConfig ? `global ${globalConfig.slug}` : `collection ${collectionConfig?.slug}`} references 2 or more hasMany relationships on the path ${virtualField.virtual} which is not allowed.`,\n )\n }\n\n isHasMany = true\n virtualField.hasMany = true\n }\n const relatedCollection = config.collections?.find(\n (e) => e.slug === foundField.relationTo,\n )\n if (relatedCollection) {\n flattenFields = flattenAllFields({ fields: relatedCollection.fields })\n }\n }\n }\n }\n }\n\n return result\n}\n\nexport const sanitizeFields = async ({\n collectionConfig,\n config,\n existingFieldNames = new Set(),\n fields,\n globalConfig,\n isTopLevelField = true,\n joinPath = '',\n joins,\n orderableJoins,\n parentIndexPath = '',\n parentIsLocalized,\n parentSchemaPath = '',\n polymorphicJoins,\n requireFieldLevelRichTextEditor = false,\n richTextSanitizationPromises,\n validRelationships,\n}: SanitizeFieldsArgs): Promise<Field[]> => {\n if (!fields) {\n return []\n }\n\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i]!\n\n const result = await sanitizeField({\n collectionConfig,\n config,\n existingFieldNames,\n field,\n globalConfig,\n index: i,\n isTopLevelField,\n joinPath,\n joins,\n orderableJoins,\n parentIndexPath,\n parentIsLocalized,\n parentSchemaPath,\n polymorphicJoins,\n requireFieldLevelRichTextEditor,\n richTextSanitizationPromises,\n validRelationships,\n })\n\n fields[i] = field\n\n if (result.fieldsToInsert?.length) {\n fields.splice(i + 1, 0, ...result.fieldsToInsert)\n i += result.fieldsToInsert.length\n }\n }\n\n return fields\n}\n"],"names":["DuplicateFieldName","InvalidConfiguration","InvalidFieldName","InvalidFieldRelationship","MissingEditorProp","MissingFieldType","ReservedFieldName","flattenAllFields","formatLabels","toWords","validateTimezones","baseBlockFields","baseIDField","baseTimezoneField","defaultTimezones","getFieldPaths","setDefaultBeforeDuplicate","validations","reservedAPIKeyFieldNames","reservedBaseAuthFieldNames","reservedBaseUploadFieldNames","reservedVerifyFieldNames","sanitizeJoinField","fieldAffectsData","_fieldAffectsData","fieldIsLocalized","tabHasName","sanitizeField","collectionConfig","config","existingFieldNames","field","globalConfig","index","isTopLevelField","joinPath","joins","orderableJoins","parentIndexPath","parentIsLocalized","parentSchemaPath","polymorphicJoins","requireFieldLevelRichTextEditor","richTextSanitizationPromises","validRelationships","result","_sanitized","type","indexPath","schemaPath","name","upload","includes","auth","disableLocalStrategy","verify","label","defaultValue","required","Array","isArray","relationTo","length","Error","relationships","forEach","relationship","admin","isSortable","fields","hasCustomID","some","f","push","labels","has","add","localized","localization","validate","virtual","defaultValidate","val","options","hooks","access","readOnly","sanitizeRichText","_config","editor","isRoot","blocks","blockReferences","blockSlugs","block","blockSlug","slug","concat","sanitizeFields","Set","j","tabs","tab","isNamedTab","tabIndexPath","tabSchemaPath","condition","id","existing","disabled","undefined","bulkEdit","timezone","defaultTimezone","timezones","supportedTimezones","source","value","timezoneLabel","baseField","timezoneField","override","fieldsToInsert","virtualField","configFields","flattenFields","paths","split","isHasMany","idx","segment","entries","foundField","find","e","flattenedFields","hasMany","relatedCollection","collections","i","splice"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitizeJoinField.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitizeJoinField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACtF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAI/D;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAA;IACtB,uDAAuD;IACvD,oBAAoB,EAAE,MAAM,CAAA;CAC7B,CAAA;AAKD,eAAO,MAAM,iBAAiB,2GAS3B;IACD,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,wEAAwE;IACxE,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACpC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAA;IAClC,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,SA8GA,CAAA"}
1
+ {"version":3,"file":"sanitizeJoinField.d.ts","sourceRoot":"","sources":["../../../src/fields/config/sanitizeJoinField.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AACtF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAI/D;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAA;IACtB,uDAAuD;IACvD,oBAAoB,EAAE,MAAM,CAAA;CAC7B,CAAA;AAKD,eAAO,MAAM,iBAAiB,GAAI,wGAS/B;IACD,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,cAAc,CAAA;IACtB,wEAAwE;IACxE,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACpC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,gBAAgB,CAAC,EAAE,aAAa,EAAE,CAAA;IAClC,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,SAiHA,CAAA"}
@@ -7,6 +7,9 @@ export const sanitizeJoinField = ({ config, field, joinPath, joins, orderableJoi
7
7
  if (typeof joins === 'undefined') {
8
8
  throw new APIError('Join fields cannot be added to arrays, blocks or globals.');
9
9
  }
10
+ if (!field.admin) {
11
+ field.admin = {};
12
+ }
10
13
  if (typeof field.maxDepth === 'undefined') {
11
14
  field.maxDepth = 1;
12
15
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/fields/config/sanitizeJoinField.ts"],"sourcesContent":["import type { SanitizedJoin, SanitizedJoins } from '../../collections/config/types.js'\nimport type { Config } from '../../config/types.js'\nimport type { FlattenedJoinField, JoinField } from './types.js'\n\nimport { APIError } from '../../errors/index.js'\n\n/**\n * Info about an orderable join field, collected during sanitization\n * and processed after all collections are sanitized.\n */\nexport type OrderableJoinInfo = {\n /** The `on` path of the join field */\n joinFieldOn: string\n /** The name of the order field to add (e.g., `_posts_myJoin_order`) */\n orderFieldName: string\n /** The collection that will receive the order field */\n targetCollectionSlug: string\n}\nimport { InvalidFieldJoin } from '../../errors/InvalidFieldJoin.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { getFieldByPath } from '../../utilities/getFieldByPath.js'\n\nexport const sanitizeJoinField = ({\n config,\n field,\n joinPath,\n joins,\n orderableJoins,\n parentIsLocalized,\n polymorphicJoins,\n validateOnly,\n}: {\n config: Config\n field: FlattenedJoinField | JoinField\n joinPath?: string\n joins?: SanitizedJoins\n /** Tracker for orderable join fields - populated during sanitization */\n orderableJoins?: OrderableJoinInfo[]\n parentIsLocalized: boolean\n polymorphicJoins?: SanitizedJoin[]\n validateOnly?: boolean\n}) => {\n // the `joins` arg is not passed for globals or when recursing on fields that do not allow a join field\n if (typeof joins === 'undefined') {\n throw new APIError('Join fields cannot be added to arrays, blocks or globals.')\n }\n if (typeof field.maxDepth === 'undefined') {\n field.maxDepth = 1\n }\n const join: SanitizedJoin = {\n field,\n joinPath: `${joinPath ? joinPath + '.' : ''}${field.name}`,\n parentIsLocalized,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n targetField: undefined,\n }\n\n // Orderable joins must target a single collection\n if (field.orderable && Array.isArray(field.collection)) {\n throw new APIError('Orderable joins must target a single collection')\n }\n\n if (Array.isArray(field.collection)) {\n for (const collection of field.collection) {\n const sanitizedField = {\n ...field,\n collection,\n } as FlattenedJoinField\n\n sanitizeJoinField({\n config,\n field: sanitizedField,\n joinPath,\n joins,\n parentIsLocalized,\n polymorphicJoins,\n validateOnly: true,\n })\n }\n\n if (Array.isArray(polymorphicJoins)) {\n polymorphicJoins.push(join)\n }\n\n return\n }\n\n const joinCollection = config.collections?.find(\n (collection) => collection.slug === field.collection,\n )\n if (!joinCollection) {\n throw new InvalidFieldJoin(field)\n }\n\n const relationshipField = getFieldByPath({\n fields: flattenAllFields({ cache: true, fields: joinCollection.fields }),\n path: field.on,\n })\n\n if (\n !relationshipField ||\n (relationshipField.field.type !== 'relationship' && relationshipField.field.type !== 'upload')\n ) {\n throw new InvalidFieldJoin(join.field)\n }\n\n if (relationshipField.pathHasLocalized) {\n join.getForeignPath = ({ locale }) => {\n return relationshipField.localizedPath.replace('<locale>', locale!)\n }\n }\n\n if (!relationshipField.field.index && !relationshipField.field.unique) {\n relationshipField.field.index = true\n }\n\n if (validateOnly) {\n return\n }\n\n // Track orderable joins for post-sanitization processing\n if (field.orderable && orderableJoins) {\n const prefix = joinPath ? joinPath.replace(/\\./g, '_') + '_' : ''\n const orderFieldName = `_${field.collection}_${prefix}${field.name}_order`\n\n // Set defaultSort on the join field\n field.defaultSort = field.defaultSort ?? orderFieldName\n\n orderableJoins.push({\n joinFieldOn: field.on,\n orderFieldName,\n targetCollectionSlug: field.collection,\n })\n }\n\n join.targetField = relationshipField.field\n\n // override the join field localized property to use whatever the relationship field has\n // or if it's nested to a localized array / blocks / tabs / group\n field.localized = relationshipField.field.localized\n // override the join field hasMany property to use whatever the relationship field has\n field.hasMany = relationshipField.field.hasMany\n\n // @ts-expect-error converting JoinField to FlattenedJoinField to track targetField\n field.targetField = join.targetField\n\n if (!joins[field.collection]) {\n joins[field.collection] = [join]\n } else {\n joins[field.collection]?.push(join)\n }\n}\n"],"names":["APIError","InvalidFieldJoin","flattenAllFields","getFieldByPath","sanitizeJoinField","config","field","joinPath","joins","orderableJoins","parentIsLocalized","polymorphicJoins","validateOnly","maxDepth","join","name","targetField","undefined","orderable","Array","isArray","collection","sanitizedField","push","joinCollection","collections","find","slug","relationshipField","fields","cache","path","on","type","pathHasLocalized","getForeignPath","locale","localizedPath","replace","index","unique","prefix","orderFieldName","defaultSort","joinFieldOn","targetCollectionSlug","localized","hasMany"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/fields/config/sanitizeJoinField.ts"],"sourcesContent":["import type { SanitizedJoin, SanitizedJoins } from '../../collections/config/types.js'\nimport type { Config } from '../../config/types.js'\nimport type { FlattenedJoinField, JoinField } from './types.js'\n\nimport { APIError } from '../../errors/index.js'\n\n/**\n * Info about an orderable join field, collected during sanitization\n * and processed after all collections are sanitized.\n */\nexport type OrderableJoinInfo = {\n /** The `on` path of the join field */\n joinFieldOn: string\n /** The name of the order field to add (e.g., `_posts_myJoin_order`) */\n orderFieldName: string\n /** The collection that will receive the order field */\n targetCollectionSlug: string\n}\nimport { InvalidFieldJoin } from '../../errors/InvalidFieldJoin.js'\nimport { flattenAllFields } from '../../utilities/flattenAllFields.js'\nimport { getFieldByPath } from '../../utilities/getFieldByPath.js'\n\nexport const sanitizeJoinField = ({\n config,\n field,\n joinPath,\n joins,\n orderableJoins,\n parentIsLocalized,\n polymorphicJoins,\n validateOnly,\n}: {\n config: Config\n field: FlattenedJoinField | JoinField\n joinPath?: string\n joins?: SanitizedJoins\n /** Tracker for orderable join fields - populated during sanitization */\n orderableJoins?: OrderableJoinInfo[]\n parentIsLocalized: boolean\n polymorphicJoins?: SanitizedJoin[]\n validateOnly?: boolean\n}) => {\n // the `joins` arg is not passed for globals or when recursing on fields that do not allow a join field\n if (typeof joins === 'undefined') {\n throw new APIError('Join fields cannot be added to arrays, blocks or globals.')\n }\n if (!field.admin) {\n field.admin = {}\n }\n if (typeof field.maxDepth === 'undefined') {\n field.maxDepth = 1\n }\n const join: SanitizedJoin = {\n field,\n joinPath: `${joinPath ? joinPath + '.' : ''}${field.name}`,\n parentIsLocalized,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n targetField: undefined,\n }\n\n // Orderable joins must target a single collection\n if (field.orderable && Array.isArray(field.collection)) {\n throw new APIError('Orderable joins must target a single collection')\n }\n\n if (Array.isArray(field.collection)) {\n for (const collection of field.collection) {\n const sanitizedField = {\n ...field,\n collection,\n } as FlattenedJoinField\n\n sanitizeJoinField({\n config,\n field: sanitizedField,\n joinPath,\n joins,\n parentIsLocalized,\n polymorphicJoins,\n validateOnly: true,\n })\n }\n\n if (Array.isArray(polymorphicJoins)) {\n polymorphicJoins.push(join)\n }\n\n return\n }\n\n const joinCollection = config.collections?.find(\n (collection) => collection.slug === field.collection,\n )\n if (!joinCollection) {\n throw new InvalidFieldJoin(field)\n }\n\n const relationshipField = getFieldByPath({\n fields: flattenAllFields({ cache: true, fields: joinCollection.fields }),\n path: field.on,\n })\n\n if (\n !relationshipField ||\n (relationshipField.field.type !== 'relationship' && relationshipField.field.type !== 'upload')\n ) {\n throw new InvalidFieldJoin(join.field)\n }\n\n if (relationshipField.pathHasLocalized) {\n join.getForeignPath = ({ locale }) => {\n return relationshipField.localizedPath.replace('<locale>', locale!)\n }\n }\n\n if (!relationshipField.field.index && !relationshipField.field.unique) {\n relationshipField.field.index = true\n }\n\n if (validateOnly) {\n return\n }\n\n // Track orderable joins for post-sanitization processing\n if (field.orderable && orderableJoins) {\n const prefix = joinPath ? joinPath.replace(/\\./g, '_') + '_' : ''\n const orderFieldName = `_${field.collection}_${prefix}${field.name}_order`\n\n // Set defaultSort on the join field\n field.defaultSort = field.defaultSort ?? orderFieldName\n\n orderableJoins.push({\n joinFieldOn: field.on,\n orderFieldName,\n targetCollectionSlug: field.collection,\n })\n }\n\n join.targetField = relationshipField.field\n\n // override the join field localized property to use whatever the relationship field has\n // or if it's nested to a localized array / blocks / tabs / group\n field.localized = relationshipField.field.localized\n // override the join field hasMany property to use whatever the relationship field has\n field.hasMany = relationshipField.field.hasMany\n\n // @ts-expect-error converting JoinField to FlattenedJoinField to track targetField\n field.targetField = join.targetField\n\n if (!joins[field.collection]) {\n joins[field.collection] = [join]\n } else {\n joins[field.collection]?.push(join)\n }\n}\n"],"names":["APIError","InvalidFieldJoin","flattenAllFields","getFieldByPath","sanitizeJoinField","config","field","joinPath","joins","orderableJoins","parentIsLocalized","polymorphicJoins","validateOnly","admin","maxDepth","join","name","targetField","undefined","orderable","Array","isArray","collection","sanitizedField","push","joinCollection","collections","find","slug","relationshipField","fields","cache","path","on","type","pathHasLocalized","getForeignPath","locale","localizedPath","replace","index","unique","prefix","orderFieldName","defaultSort","joinFieldOn","targetCollectionSlug","localized","hasMany"],"mappings":"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"}