payload 3.89.0 → 3.90.0

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 (439) hide show
  1. package/dist/admin/forms/Field.d.ts +2 -0
  2. package/dist/admin/forms/Field.d.ts.map +1 -1
  3. package/dist/admin/forms/Field.js.map +1 -1
  4. package/dist/admin/forms/Form.d.ts +2 -0
  5. package/dist/admin/forms/Form.d.ts.map +1 -1
  6. package/dist/admin/forms/Form.js.map +1 -1
  7. package/dist/admin/functions/index.d.ts +3 -1
  8. package/dist/admin/functions/index.d.ts.map +1 -1
  9. package/dist/admin/functions/index.js.map +1 -1
  10. package/dist/admin/views/dashboard.d.ts +1 -1
  11. package/dist/admin/views/dashboard.d.ts.map +1 -1
  12. package/dist/admin/views/dashboard.js.map +1 -1
  13. package/dist/auth/applyUserReadAccess.d.ts +15 -0
  14. package/dist/auth/applyUserReadAccess.d.ts.map +1 -0
  15. package/dist/auth/applyUserReadAccess.js +41 -0
  16. package/dist/auth/applyUserReadAccess.js.map +1 -0
  17. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.d.ts +4 -0
  18. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.d.ts.map +1 -0
  19. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.js +20 -0
  20. package/dist/auth/baseFields/apiKey/canCreateOrUpdateAPIKey.js.map +1 -0
  21. package/dist/auth/baseFields/apiKey/encryptAPIKey.d.ts +4 -0
  22. package/dist/auth/baseFields/apiKey/encryptAPIKey.d.ts.map +1 -0
  23. package/dist/auth/baseFields/apiKey/encryptAPIKey.js +16 -0
  24. package/dist/auth/baseFields/apiKey/encryptAPIKey.js.map +1 -0
  25. package/dist/auth/baseFields/apiKey/index.d.ts +6 -0
  26. package/dist/auth/baseFields/apiKey/index.d.ts.map +1 -0
  27. package/dist/auth/baseFields/apiKey/index.js +112 -0
  28. package/dist/auth/baseFields/apiKey/index.js.map +1 -0
  29. package/dist/auth/baseFields/apiKey/omitAPIKey.d.ts +4 -0
  30. package/dist/auth/baseFields/apiKey/omitAPIKey.d.ts.map +1 -0
  31. package/dist/auth/baseFields/apiKey/omitAPIKey.js +8 -0
  32. package/dist/auth/baseFields/apiKey/omitAPIKey.js.map +1 -0
  33. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.d.ts +4 -0
  34. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.d.ts.map +1 -0
  35. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.js +5 -0
  36. package/dist/auth/baseFields/apiKey/omitAPIKeyIndex.js.map +1 -0
  37. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.d.ts +4 -0
  38. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.d.ts.map +1 -0
  39. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.js +5 -0
  40. package/dist/auth/baseFields/apiKey/omitEncryptedAPIKey.js.map +1 -0
  41. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.d.ts +4 -0
  42. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.d.ts.map +1 -0
  43. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.js +17 -0
  44. package/dist/auth/baseFields/apiKey/setAPIKeyIndex.js.map +1 -0
  45. package/dist/auth/baseFields/auth.d.ts +1 -0
  46. package/dist/auth/baseFields/auth.d.ts.map +1 -1
  47. package/dist/auth/baseFields/auth.js +9 -0
  48. package/dist/auth/baseFields/auth.js.map +1 -1
  49. package/dist/auth/defaultUnlockAccess.d.ts +3 -0
  50. package/dist/auth/defaultUnlockAccess.d.ts.map +1 -0
  51. package/dist/auth/defaultUnlockAccess.js +8 -0
  52. package/dist/auth/defaultUnlockAccess.js.map +1 -0
  53. package/dist/auth/endpoints/index.d.ts +1 -0
  54. package/dist/auth/endpoints/index.d.ts.map +1 -1
  55. package/dist/auth/endpoints/index.js +8 -0
  56. package/dist/auth/endpoints/index.js.map +1 -1
  57. package/dist/auth/endpoints/revealAPIKey.d.ts +7 -0
  58. package/dist/auth/endpoints/revealAPIKey.d.ts.map +1 -0
  59. package/dist/auth/endpoints/revealAPIKey.js +120 -0
  60. package/dist/auth/endpoints/revealAPIKey.js.map +1 -0
  61. package/dist/auth/executeAccess.d.ts +3 -1
  62. package/dist/auth/executeAccess.d.ts.map +1 -1
  63. package/dist/auth/executeAccess.js +2 -1
  64. package/dist/auth/executeAccess.js.map +1 -1
  65. package/dist/auth/getAuthFields.d.ts +1 -1
  66. package/dist/auth/getAuthFields.d.ts.map +1 -1
  67. package/dist/auth/getAuthFields.js +7 -4
  68. package/dist/auth/getAuthFields.js.map +1 -1
  69. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  70. package/dist/auth/getFieldsToSign.js +17 -10
  71. package/dist/auth/getFieldsToSign.js.map +1 -1
  72. package/dist/auth/getFieldsToSign.spec.js +114 -0
  73. package/dist/auth/getFieldsToSign.spec.js.map +1 -0
  74. package/dist/auth/jwt.d.ts.map +1 -1
  75. package/dist/auth/jwt.js +2 -0
  76. package/dist/auth/jwt.js.map +1 -1
  77. package/dist/auth/jwt.spec.js +24 -0
  78. package/dist/auth/jwt.spec.js.map +1 -0
  79. package/dist/auth/jwtAuth.d.ts +9 -0
  80. package/dist/auth/jwtAuth.d.ts.map +1 -0
  81. package/dist/auth/jwtAuth.js +8 -0
  82. package/dist/auth/jwtAuth.js.map +1 -0
  83. package/dist/auth/operations/auth.d.ts.map +1 -1
  84. package/dist/auth/operations/auth.js +2 -1
  85. package/dist/auth/operations/auth.js.map +1 -1
  86. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  87. package/dist/auth/operations/forgotPassword.js +95 -7
  88. package/dist/auth/operations/forgotPassword.js.map +1 -1
  89. package/dist/auth/operations/local/auth.js +3 -1
  90. package/dist/auth/operations/local/auth.js.map +1 -1
  91. package/dist/auth/operations/login.d.ts.map +1 -1
  92. package/dist/auth/operations/login.js +48 -26
  93. package/dist/auth/operations/login.js.map +1 -1
  94. package/dist/auth/operations/refresh.d.ts.map +1 -1
  95. package/dist/auth/operations/refresh.js +32 -9
  96. package/dist/auth/operations/refresh.js.map +1 -1
  97. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  98. package/dist/auth/operations/registerFirstUser.js +3 -4
  99. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  100. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  101. package/dist/auth/operations/resetPassword.js +31 -22
  102. package/dist/auth/operations/resetPassword.js.map +1 -1
  103. package/dist/auth/operations/unlock.d.ts.map +1 -1
  104. package/dist/auth/operations/unlock.js +1 -0
  105. package/dist/auth/operations/unlock.js.map +1 -1
  106. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  107. package/dist/auth/strategies/apiKey.js +15 -1
  108. package/dist/auth/strategies/apiKey.js.map +1 -1
  109. package/dist/auth/strategies/jwt.d.ts.map +1 -1
  110. package/dist/auth/strategies/jwt.js +61 -10
  111. package/dist/auth/strategies/jwt.js.map +1 -1
  112. package/dist/auth/strategies/jwt.spec.js +281 -0
  113. package/dist/auth/strategies/jwt.spec.js.map +1 -0
  114. package/dist/auth/strategies/local/authenticate.d.ts +5 -1
  115. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  116. package/dist/auth/strategies/local/authenticate.js +8 -3
  117. package/dist/auth/strategies/local/authenticate.js.map +1 -1
  118. package/dist/auth/strategies/local/authenticate.spec.js +37 -10
  119. package/dist/auth/strategies/local/authenticate.spec.js.map +1 -1
  120. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts +9 -1
  121. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
  122. package/dist/auth/strategies/local/generatePasswordSaltHash.js +61 -34
  123. package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
  124. package/dist/auth/types.d.ts +16 -1
  125. package/dist/auth/types.d.ts.map +1 -1
  126. package/dist/auth/types.js.map +1 -1
  127. package/dist/collections/config/client.d.ts +1 -0
  128. package/dist/collections/config/client.d.ts.map +1 -1
  129. package/dist/collections/config/client.js +3 -0
  130. package/dist/collections/config/client.js.map +1 -1
  131. package/dist/collections/config/defaults.d.ts.map +1 -1
  132. package/dist/collections/config/defaults.js +4 -2
  133. package/dist/collections/config/defaults.js.map +1 -1
  134. package/dist/collections/config/sanitize.d.ts.map +1 -1
  135. package/dist/collections/config/sanitize.js +17 -6
  136. package/dist/collections/config/sanitize.js.map +1 -1
  137. package/dist/collections/endpoints/index.d.ts +1 -0
  138. package/dist/collections/endpoints/index.d.ts.map +1 -1
  139. package/dist/collections/endpoints/index.js +6 -5
  140. package/dist/collections/endpoints/index.js.map +1 -1
  141. package/dist/collections/operations/create.d.ts.map +1 -1
  142. package/dist/collections/operations/create.js +105 -8
  143. package/dist/collections/operations/create.js.map +1 -1
  144. package/dist/collections/operations/deleteByID.js +13 -13
  145. package/dist/collections/operations/deleteByID.js.map +1 -1
  146. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  147. package/dist/collections/operations/findDistinct.js +96 -18
  148. package/dist/collections/operations/findDistinct.js.map +1 -1
  149. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  150. package/dist/collections/operations/restoreVersion.js +47 -13
  151. package/dist/collections/operations/restoreVersion.js.map +1 -1
  152. package/dist/collections/operations/update.d.ts.map +1 -1
  153. package/dist/collections/operations/update.js +118 -18
  154. package/dist/collections/operations/update.js.map +1 -1
  155. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  156. package/dist/collections/operations/updateByID.js +62 -2
  157. package/dist/collections/operations/updateByID.js.map +1 -1
  158. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  159. package/dist/collections/operations/utilities/update.js +71 -15
  160. package/dist/collections/operations/utilities/update.js.map +1 -1
  161. package/dist/config/orderable/index.d.ts.map +1 -1
  162. package/dist/config/orderable/index.js +67 -14
  163. package/dist/config/orderable/index.js.map +1 -1
  164. package/dist/config/sanitize.d.ts.map +1 -1
  165. package/dist/config/sanitize.js +1 -1
  166. package/dist/config/sanitize.js.map +1 -1
  167. package/dist/config/types.d.ts +13 -1
  168. package/dist/config/types.d.ts.map +1 -1
  169. package/dist/config/types.js.map +1 -1
  170. package/dist/database/getLocalizedPaths.d.ts +2 -1
  171. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  172. package/dist/database/getLocalizedPaths.js +12 -3
  173. package/dist/database/getLocalizedPaths.js.map +1 -1
  174. package/dist/database/isNestedRelationshipQuery.d.ts +9 -0
  175. package/dist/database/isNestedRelationshipQuery.d.ts.map +1 -0
  176. package/dist/database/isNestedRelationshipQuery.js +14 -0
  177. package/dist/database/isNestedRelationshipQuery.js.map +1 -0
  178. package/dist/database/prefixWherePaths.d.ts +6 -0
  179. package/dist/database/prefixWherePaths.d.ts.map +1 -0
  180. package/dist/database/prefixWherePaths.js +19 -0
  181. package/dist/database/prefixWherePaths.js.map +1 -0
  182. package/dist/database/prefixWherePaths.spec.js +46 -0
  183. package/dist/database/prefixWherePaths.spec.js.map +1 -0
  184. package/dist/database/queryValidation/validateQueryPaths.d.ts +2 -1
  185. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  186. package/dist/database/queryValidation/validateQueryPaths.js +4 -1
  187. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  188. package/dist/database/queryValidation/validateSearchParams.d.ts +2 -1
  189. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  190. package/dist/database/queryValidation/validateSearchParams.js +82 -4
  191. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  192. package/dist/database/types.d.ts +5 -0
  193. package/dist/database/types.d.ts.map +1 -1
  194. package/dist/database/types.js.map +1 -1
  195. package/dist/email/normalizeSendEmailOptions.js.map +1 -1
  196. package/dist/email/types.d.ts +4 -1
  197. package/dist/email/types.d.ts.map +1 -1
  198. package/dist/email/types.js.map +1 -1
  199. package/dist/exports/internal.d.ts +7 -0
  200. package/dist/exports/internal.d.ts.map +1 -1
  201. package/dist/exports/internal.js +7 -1
  202. package/dist/exports/internal.js.map +1 -1
  203. package/dist/exports/shared.d.ts +3 -0
  204. package/dist/exports/shared.d.ts.map +1 -1
  205. package/dist/exports/shared.js +3 -0
  206. package/dist/exports/shared.js.map +1 -1
  207. package/dist/fields/config/types.d.ts +7 -5
  208. package/dist/fields/config/types.d.ts.map +1 -1
  209. package/dist/fields/config/types.js.map +1 -1
  210. package/dist/fields/hooks/beforeChange/index.d.ts +7 -1
  211. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  212. package/dist/fields/hooks/beforeChange/index.js +4 -2
  213. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  214. package/dist/fields/hooks/beforeChange/index.spec.js +206 -0
  215. package/dist/fields/hooks/beforeChange/index.spec.js.map +1 -0
  216. package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
  217. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  218. package/dist/fields/hooks/beforeChange/promise.js +51 -9
  219. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  220. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
  221. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  222. package/dist/fields/hooks/beforeChange/traverseFields.js +3 -2
  223. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  224. package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
  225. package/dist/fields/hooks/beforeDuplicate/promise.js +4 -0
  226. package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
  227. package/dist/fields/hooks/beforeValidate/getFallbackValue.d.ts +2 -1
  228. package/dist/fields/hooks/beforeValidate/getFallbackValue.d.ts.map +1 -1
  229. package/dist/fields/hooks/beforeValidate/getFallbackValue.js +2 -2
  230. package/dist/fields/hooks/beforeValidate/getFallbackValue.js.map +1 -1
  231. package/dist/fields/hooks/beforeValidate/index.d.ts +6 -1
  232. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  233. package/dist/fields/hooks/beforeValidate/index.js +3 -1
  234. package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
  235. package/dist/fields/hooks/beforeValidate/index.spec.js +90 -0
  236. package/dist/fields/hooks/beforeValidate/index.spec.js.map +1 -0
  237. package/dist/fields/hooks/beforeValidate/promise.d.ts +6 -1
  238. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  239. package/dist/fields/hooks/beforeValidate/promise.js +23 -8
  240. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  241. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +6 -1
  242. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  243. package/dist/fields/hooks/beforeValidate/traverseFields.js +3 -1
  244. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  245. package/dist/fields/validations.d.ts.map +1 -1
  246. package/dist/fields/validations.js +3 -1
  247. package/dist/fields/validations.js.map +1 -1
  248. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  249. package/dist/globals/operations/restoreVersion.js +45 -11
  250. package/dist/globals/operations/restoreVersion.js.map +1 -1
  251. package/dist/globals/operations/update.d.ts.map +1 -1
  252. package/dist/globals/operations/update.js +95 -16
  253. package/dist/globals/operations/update.js.map +1 -1
  254. package/dist/index.bundled.d.ts +102 -24
  255. package/dist/index.d.ts +3 -1
  256. package/dist/index.d.ts.map +1 -1
  257. package/dist/index.js +2 -2
  258. package/dist/index.js.map +1 -1
  259. package/dist/preferences/config.d.ts.map +1 -1
  260. package/dist/preferences/config.js +2 -1
  261. package/dist/preferences/config.js.map +1 -1
  262. package/dist/query-presets/access.d.ts.map +1 -1
  263. package/dist/query-presets/access.js +2 -1
  264. package/dist/query-presets/access.js.map +1 -1
  265. package/dist/queues/config/types/index.d.ts +2 -1
  266. package/dist/queues/config/types/index.d.ts.map +1 -1
  267. package/dist/queues/config/types/index.js.map +1 -1
  268. package/dist/uploads/assertClientUploadAccess.d.ts +7 -0
  269. package/dist/uploads/assertClientUploadAccess.d.ts.map +1 -0
  270. package/dist/uploads/assertClientUploadAccess.js +27 -0
  271. package/dist/uploads/assertClientUploadAccess.js.map +1 -0
  272. package/dist/uploads/assertClientUploadAllowed.d.ts +11 -0
  273. package/dist/uploads/assertClientUploadAllowed.d.ts.map +1 -0
  274. package/dist/uploads/assertClientUploadAllowed.js +46 -0
  275. package/dist/uploads/assertClientUploadAllowed.js.map +1 -0
  276. package/dist/uploads/assertClientUploadAllowed.spec.js +91 -0
  277. package/dist/uploads/assertClientUploadAllowed.spec.js.map +1 -0
  278. package/dist/uploads/checkFileRestrictions.d.ts +4 -1
  279. package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
  280. package/dist/uploads/checkFileRestrictions.js +66 -26
  281. package/dist/uploads/checkFileRestrictions.js.map +1 -1
  282. package/dist/uploads/clientUploadReceipt.d.ts +23 -0
  283. package/dist/uploads/clientUploadReceipt.d.ts.map +1 -0
  284. package/dist/uploads/clientUploadReceipt.js +55 -0
  285. package/dist/uploads/clientUploadReceipt.js.map +1 -0
  286. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  287. package/dist/uploads/deleteAssociatedFiles.js +33 -8
  288. package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
  289. package/dist/uploads/deleteAssociatedFiles.spec.js +124 -0
  290. package/dist/uploads/deleteAssociatedFiles.spec.js.map +1 -0
  291. package/dist/uploads/detectSvgFromXml.d.ts +1 -3
  292. package/dist/uploads/detectSvgFromXml.d.ts.map +1 -1
  293. package/dist/uploads/detectSvgFromXml.js +3 -40
  294. package/dist/uploads/detectSvgFromXml.js.map +1 -1
  295. package/dist/uploads/endpoints/getFile.d.ts.map +1 -1
  296. package/dist/uploads/endpoints/getFile.js +5 -3
  297. package/dist/uploads/endpoints/getFile.js.map +1 -1
  298. package/dist/uploads/fetchAPI-multipart/handlers.d.ts +2 -2
  299. package/dist/uploads/fetchAPI-multipart/handlers.d.ts.map +1 -1
  300. package/dist/uploads/fetchAPI-multipart/handlers.js +18 -5
  301. package/dist/uploads/fetchAPI-multipart/handlers.js.map +1 -1
  302. package/dist/uploads/fetchAPI-multipart/index.d.ts.map +1 -1
  303. package/dist/uploads/fetchAPI-multipart/index.js +24 -2
  304. package/dist/uploads/fetchAPI-multipart/index.js.map +1 -1
  305. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts +0 -6
  306. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
  307. package/dist/uploads/fetchAPI-multipart/processMultipart.js +146 -126
  308. package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
  309. package/dist/uploads/fetchAPI-multipart/processMultipart.spec.js +663 -0
  310. package/dist/uploads/fetchAPI-multipart/processMultipart.spec.js.map +1 -0
  311. package/dist/uploads/generateFileData.d.ts +3 -1
  312. package/dist/uploads/generateFileData.d.ts.map +1 -1
  313. package/dist/uploads/generateFileData.js +29 -16
  314. package/dist/uploads/generateFileData.js.map +1 -1
  315. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  316. package/dist/uploads/getBaseFields.js +3 -1
  317. package/dist/uploads/getBaseFields.js.map +1 -1
  318. package/dist/uploads/getExternalFile.d.ts +1 -1
  319. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  320. package/dist/uploads/getExternalFile.js +60 -15
  321. package/dist/uploads/getExternalFile.js.map +1 -1
  322. package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
  323. package/dist/uploads/getFileTypeFallback.js +3 -1
  324. package/dist/uploads/getFileTypeFallback.js.map +1 -1
  325. package/dist/uploads/getFileTypeIdentity.d.ts +19 -0
  326. package/dist/uploads/getFileTypeIdentity.d.ts.map +1 -0
  327. package/dist/uploads/getFileTypeIdentity.js +34 -0
  328. package/dist/uploads/getFileTypeIdentity.js.map +1 -0
  329. package/dist/uploads/getFileTypeIdentity.spec.js +43 -0
  330. package/dist/uploads/getFileTypeIdentity.spec.js.map +1 -0
  331. package/dist/uploads/isProcessableImage.d.ts +2 -0
  332. package/dist/uploads/isProcessableImage.d.ts.map +1 -0
  333. package/dist/uploads/isProcessableImage.js +7 -0
  334. package/dist/uploads/isProcessableImage.js.map +1 -0
  335. package/dist/uploads/safeFetch.d.ts.map +1 -1
  336. package/dist/uploads/safeFetch.js +3 -2
  337. package/dist/uploads/safeFetch.js.map +1 -1
  338. package/dist/uploads/sanitizeUploadData.d.ts +26 -0
  339. package/dist/uploads/sanitizeUploadData.d.ts.map +1 -0
  340. package/dist/uploads/sanitizeUploadData.js +159 -0
  341. package/dist/uploads/sanitizeUploadData.js.map +1 -0
  342. package/dist/uploads/sanitizeUploadData.spec.js +255 -0
  343. package/dist/uploads/sanitizeUploadData.spec.js.map +1 -0
  344. package/dist/uploads/types.d.ts +11 -3
  345. package/dist/uploads/types.d.ts.map +1 -1
  346. package/dist/uploads/types.js.map +1 -1
  347. package/dist/uploads/uploadContentSecurityPolicy.d.ts +2 -0
  348. package/dist/uploads/uploadContentSecurityPolicy.d.ts.map +1 -0
  349. package/dist/uploads/uploadContentSecurityPolicy.js +3 -0
  350. package/dist/uploads/uploadContentSecurityPolicy.js.map +1 -0
  351. package/dist/uploads/validateISOBaseMediaFile.d.ts +4 -0
  352. package/dist/uploads/validateISOBaseMediaFile.d.ts.map +1 -0
  353. package/dist/uploads/validateISOBaseMediaFile.js +91 -0
  354. package/dist/uploads/validateISOBaseMediaFile.js.map +1 -0
  355. package/dist/uploads/validateISOBaseMediaFile.spec.js +130 -0
  356. package/dist/uploads/validateISOBaseMediaFile.spec.js.map +1 -0
  357. package/dist/uploads/validateSvg.d.ts +10 -4
  358. package/dist/uploads/validateSvg.d.ts.map +1 -1
  359. package/dist/uploads/validateSvg.js +280 -40
  360. package/dist/uploads/validateSvg.js.map +1 -1
  361. package/dist/uploads/validateSvg.spec.js +123 -0
  362. package/dist/uploads/validateSvg.spec.js.map +1 -0
  363. package/dist/uploads/validateUploadFilename.d.ts +3 -0
  364. package/dist/uploads/validateUploadFilename.d.ts.map +1 -0
  365. package/dist/uploads/validateUploadFilename.js +13 -0
  366. package/dist/uploads/validateUploadFilename.js.map +1 -0
  367. package/dist/uploads/validateUploadFilename.spec.js +24 -0
  368. package/dist/uploads/validateUploadFilename.spec.js.map +1 -0
  369. package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
  370. package/dist/utilities/addDataAndFileToRequest.js +28 -1
  371. package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
  372. package/dist/utilities/addDataAndFileToRequest.spec.js +158 -0
  373. package/dist/utilities/addDataAndFileToRequest.spec.js.map +1 -1
  374. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  375. package/dist/utilities/createPayloadRequest.js +2 -1
  376. package/dist/utilities/createPayloadRequest.js.map +1 -1
  377. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  378. package/dist/utilities/deepCopyObject.js +110 -19
  379. package/dist/utilities/deepCopyObject.js.map +1 -1
  380. package/dist/utilities/deepCopyObject.spec.js +216 -0
  381. package/dist/utilities/deepCopyObject.spec.js.map +1 -0
  382. package/dist/utilities/fieldPath.d.ts +13 -0
  383. package/dist/utilities/fieldPath.d.ts.map +1 -0
  384. package/dist/utilities/fieldPath.js +51 -0
  385. package/dist/utilities/fieldPath.js.map +1 -0
  386. package/dist/utilities/fieldPath.spec.js +155 -0
  387. package/dist/utilities/fieldPath.spec.js.map +1 -0
  388. package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
  389. package/dist/utilities/getEntityPermissions/getEntityPermissions.js +2 -0
  390. package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
  391. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  392. package/dist/utilities/getObjectDotNotation.js +7 -1
  393. package/dist/utilities/getObjectDotNotation.js.map +1 -1
  394. package/dist/utilities/getObjectDotNotation.spec.js +33 -0
  395. package/dist/utilities/getObjectDotNotation.spec.js.map +1 -0
  396. package/dist/utilities/getSafeRedirect.spec.js +14 -0
  397. package/dist/utilities/getSafeRedirect.spec.js.map +1 -1
  398. package/dist/utilities/getTopLevelFieldNames.d.ts +2 -0
  399. package/dist/utilities/getTopLevelFieldNames.d.ts.map +1 -0
  400. package/dist/utilities/getTopLevelFieldNames.js +3 -0
  401. package/dist/utilities/getTopLevelFieldNames.js.map +1 -0
  402. package/dist/utilities/getTopLevelFieldNames.spec.js +18 -0
  403. package/dist/utilities/getTopLevelFieldNames.spec.js.map +1 -0
  404. package/dist/utilities/handleEndpoints.js +1 -1
  405. package/dist/utilities/handleEndpoints.js.map +1 -1
  406. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  407. package/dist/utilities/parseParams/index.js +3 -1
  408. package/dist/utilities/parseParams/index.js.map +1 -1
  409. package/dist/utilities/parseParams/index.spec.js +8 -0
  410. package/dist/utilities/parseParams/index.spec.js.map +1 -1
  411. package/dist/utilities/traverseFields.d.ts.map +1 -1
  412. package/dist/utilities/traverseFields.js +5 -14
  413. package/dist/utilities/traverseFields.js.map +1 -1
  414. package/dist/utilities/unflatten.d.ts.map +1 -1
  415. package/dist/utilities/unflatten.js +21 -9
  416. package/dist/utilities/unflatten.js.map +1 -1
  417. package/dist/utilities/unflatten.spec.js +38 -0
  418. package/dist/utilities/unflatten.spec.js.map +1 -0
  419. package/dist/versions/allLocalesPublicationStatus.d.ts +38 -0
  420. package/dist/versions/allLocalesPublicationStatus.d.ts.map +1 -0
  421. package/dist/versions/allLocalesPublicationStatus.js +57 -0
  422. package/dist/versions/allLocalesPublicationStatus.js.map +1 -0
  423. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  424. package/dist/versions/getLatestGlobalVersion.js +10 -2
  425. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  426. package/dist/versions/getRestoredStatusesToAuthorize.d.ts +9 -0
  427. package/dist/versions/getRestoredStatusesToAuthorize.d.ts.map +1 -0
  428. package/dist/versions/getRestoredStatusesToAuthorize.js +22 -0
  429. package/dist/versions/getRestoredStatusesToAuthorize.js.map +1 -0
  430. package/dist/versions/getRestoredStatusesToAuthorize.spec.js +50 -0
  431. package/dist/versions/getRestoredStatusesToAuthorize.spec.js.map +1 -0
  432. package/dist/versions/schedule/job.d.ts +2 -2
  433. package/dist/versions/schedule/job.d.ts.map +1 -1
  434. package/dist/versions/schedule/job.js +11 -7
  435. package/dist/versions/schedule/job.js.map +1 -1
  436. package/dist/versions/schedule/types.d.ts +5 -1
  437. package/dist/versions/schedule/types.d.ts.map +1 -1
  438. package/dist/versions/schedule/types.js.map +1 -1
  439. package/package.json +4 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { ValidationFieldError } from '../../../errors/index.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, Operation, PayloadRequest } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args = {\n /**\n * Data of the nearest parent block. If no parent block exists, this will be the `undefined`\n */\n blockData?: JsonObject\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: JsonObject\n /**\n * The original data (not modified by any hooks)\n */\n doc: JsonObject\n /**\n * The original data with locales (not modified by any hooks)\n */\n docWithLocales: JsonObject\n errors: ValidationFieldError[]\n /**\n * Built up labels of parent fields\n *\n * @example \"Group Field > Tab Field > Text Field\"\n */\n fieldLabelPath: string\n fields: (Field | TabAsField)[]\n global: null | SanitizedGlobalConfig\n id?: number | string\n mergeLocaleActions: (() => Promise<void> | void)[]\n operation: Operation\n overrideAccess: boolean\n parentIndexPath: string\n /**\n * @todo make required in v4.0\n */\n parentIsLocalized?: boolean\n parentPath: string\n parentSchemaPath: string\n req: PayloadRequest\n siblingData: JsonObject\n /**\n * The original siblingData (not modified by any hooks)\n */\n siblingDoc: JsonObject\n /**\n * The original siblingData with locales (not modified by any hooks)\n */\n siblingDocWithLocales: JsonObject\n skipValidation?: boolean\n}\n\n/**\n * This function is responsible for the following actions, in order:\n * - Run condition\n * - Execute field hooks\n * - Validate data\n * - Transform data for storage\n * - Unflatten locales. The input `data` is the normal document for one locale. The output result will become the document with locales.\n */\nexport const traverseFields = async ({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath,\n fields,\n global,\n mergeLocaleActions,\n operation,\n overrideAccess,\n parentIndexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n}: Args): Promise<void> => {\n const promises: Promise<void>[] = []\n\n fields.forEach((field, fieldIndex) => {\n promises.push(\n promise({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n field,\n fieldIndex,\n fieldLabelPath,\n global,\n mergeLocaleActions,\n operation,\n overrideAccess,\n parentIndexPath,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentSchemaPath,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n siblingFields: fields,\n skipValidation: skipValidation!,\n }),\n )\n })\n\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","blockData","collection","context","data","doc","docWithLocales","errors","fieldLabelPath","fields","global","mergeLocaleActions","operation","overrideAccess","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","promises","forEach","field","fieldIndex","push","siblingFields","Promise","all"],"mappings":"AAOA,SAASA,OAAO,QAAQ,eAAc;AAmDtC;;;;;;;CAOC,GACD,OAAO,MAAMC,iBAAiB,OAAO,EACnCC,EAAE,EACFC,SAAS,EACTC,UAAU,EACVC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,cAAc,EACdC,MAAM,EACNC,cAAc,EACdC,MAAM,EACNC,MAAM,EACNC,kBAAkB,EAClBC,SAAS,EACTC,cAAc,EACdC,eAAe,EACfC,iBAAiB,EACjBC,UAAU,EACVC,gBAAgB,EAChBC,GAAG,EACHC,WAAW,EACXC,UAAU,EACVC,qBAAqB,EACrBC,cAAc,EACT;IACL,MAAMC,WAA4B,EAAE;IAEpCd,OAAOe,OAAO,CAAC,CAACC,OAAOC;QACrBH,SAASI,IAAI,CACX7B,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAkB;YACAC;YACAlB;YACAE;YACAC;YACAC;YACAC;YACAC;YACAC,mBAAmBA;YACnBC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAO,eAAenB;YACfa,gBAAgBA;QAClB;IAEJ;IAEA,MAAMO,QAAQC,GAAG,CAACP;AACpB,EAAC"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { ValidationFieldError } from '../../../errors/index.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, Operation, PayloadRequest } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args = {\n /**\n * Data of the nearest parent block. If no parent block exists, this will be the `undefined`\n */\n blockData?: JsonObject\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: JsonObject\n /**\n * The original data (not modified by any hooks)\n */\n doc: JsonObject\n /**\n * The original data with locales (not modified by any hooks)\n */\n docWithLocales: JsonObject\n errors: ValidationFieldError[]\n /**\n * Built up labels of parent fields\n *\n * @example \"Group Field > Tab Field > Text Field\"\n */\n fieldLabelPath: string\n fields: (Field | TabAsField)[]\n global: null | SanitizedGlobalConfig\n id?: number | string\n mergeLocaleActions: (() => Promise<void> | void)[]\n operation: Operation\n overrideAccess: boolean\n parentIndexPath: string\n /**\n * @todo make required in v4.0\n */\n parentIsLocalized?: boolean\n parentPath: string\n parentSchemaPath: string\n req: PayloadRequest\n siblingData: JsonObject\n /**\n * The original siblingData (not modified by any hooks)\n */\n siblingDoc: JsonObject\n /**\n * The original siblingData with locales (not modified by any hooks)\n */\n siblingDocWithLocales: JsonObject\n skipValidation?: boolean\n submittedTopLevelFieldNames?: ReadonlySet<string>\n}\n\n/**\n * This function is responsible for the following actions, in order:\n * - Run condition\n * - Execute field hooks\n * - Validate data\n * - Transform data for storage\n * - Unflatten locales. The input `data` is the normal document for one locale. The output result will become the document with locales.\n */\nexport const traverseFields = async ({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n fieldLabelPath,\n fields,\n global,\n mergeLocaleActions,\n operation,\n overrideAccess,\n parentIndexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n submittedTopLevelFieldNames,\n}: Args): Promise<void> => {\n const promises: Promise<void>[] = []\n\n fields.forEach((field, fieldIndex) => {\n promises.push(\n promise({\n id,\n blockData,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n errors,\n field,\n fieldIndex,\n fieldLabelPath,\n global,\n mergeLocaleActions,\n operation,\n overrideAccess,\n parentIndexPath,\n parentIsLocalized: parentIsLocalized!,\n parentPath,\n parentSchemaPath,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n siblingFields: fields,\n skipValidation: skipValidation!,\n submittedTopLevelFieldNames,\n }),\n )\n })\n\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","blockData","collection","context","data","doc","docWithLocales","errors","fieldLabelPath","fields","global","mergeLocaleActions","operation","overrideAccess","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","submittedTopLevelFieldNames","promises","forEach","field","fieldIndex","push","siblingFields","Promise","all"],"mappings":"AAOA,SAASA,OAAO,QAAQ,eAAc;AAoDtC;;;;;;;CAOC,GACD,OAAO,MAAMC,iBAAiB,OAAO,EACnCC,EAAE,EACFC,SAAS,EACTC,UAAU,EACVC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,cAAc,EACdC,MAAM,EACNC,cAAc,EACdC,MAAM,EACNC,MAAM,EACNC,kBAAkB,EAClBC,SAAS,EACTC,cAAc,EACdC,eAAe,EACfC,iBAAiB,EACjBC,UAAU,EACVC,gBAAgB,EAChBC,GAAG,EACHC,WAAW,EACXC,UAAU,EACVC,qBAAqB,EACrBC,cAAc,EACdC,2BAA2B,EACtB;IACL,MAAMC,WAA4B,EAAE;IAEpCf,OAAOgB,OAAO,CAAC,CAACC,OAAOC;QACrBH,SAASI,IAAI,CACX9B,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAmB;YACAC;YACAnB;YACAE;YACAC;YACAC;YACAC;YACAC;YACAC,mBAAmBA;YACnBC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAQ,eAAepB;YACfa,gBAAgBA;YAChBC;QACF;IAEJ;IAEA,MAAMO,QAAQC,GAAG,CAACP;AACpB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeDuplicate/promise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,KAAK,EAAS,KAAK,EAAiB,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAMpF,KAAK,IAAI,CAAC,CAAC,IAAI;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,OAAO,GAAU,CAAC,qLAgB5B,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAuZxB,CAAA"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeDuplicate/promise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,KAAK,EAAS,KAAK,EAAiB,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAMpF,KAAK,IAAI,CAAC,CAAC,IAAI;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,OAAO,GAAU,CAAC,qLAgB5B,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CA4ZxB,CAAA"}
@@ -14,6 +14,10 @@ export const promise = async ({ id, blockData, collection, context, doc, field,
14
14
  const schemaPathSegments = schemaPath ? schemaPath.split('.') : [];
15
15
  const indexPathSegments = indexPath ? indexPath.split('-').filter(Boolean)?.map(Number) : [];
16
16
  if (fieldAffectsData(field)) {
17
+ if ('disableDuplicate' in field && field.disableDuplicate) {
18
+ delete siblingDoc[field.name];
19
+ return;
20
+ }
17
21
  let fieldData = siblingDoc?.[field.name];
18
22
  const fieldIsLocalized = localization && fieldShouldBeLocalized({
19
23
  field,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeDuplicate/promise.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Block, Field, FieldHookArgs, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, fieldShouldBeLocalized } from '../../config/types.js'\nimport { getFieldPaths } from '../../getFieldPaths.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n /**\n * Data of the nearest parent block. If no parent block exists, this will be the `undefined`\n */\n blockData?: JsonObject\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n doc: T\n field: Field | TabAsField\n fieldIndex: number\n id?: number | string\n overrideAccess: boolean\n parentIndexPath: string\n parentIsLocalized: boolean\n parentPath: string\n parentSchemaPath: string\n req: PayloadRequest\n siblingDoc: JsonObject\n siblingFields?: (Field | TabAsField)[]\n}\n\nexport const promise = async <T>({\n id,\n blockData,\n collection,\n context,\n doc,\n field,\n fieldIndex,\n overrideAccess,\n parentIndexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n req,\n siblingDoc,\n siblingFields,\n}: Args<T>): Promise<void> => {\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: fieldIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n const { localization } = req.payload.config\n\n const pathSegments = path ? path.split('.') : []\n const schemaPathSegments = schemaPath ? schemaPath.split('.') : []\n const indexPathSegments = indexPath ? indexPath.split('-').filter(Boolean)?.map(Number) : []\n\n if (fieldAffectsData(field)) {\n let fieldData = siblingDoc?.[field.name!]\n const fieldIsLocalized = localization && fieldShouldBeLocalized({ field, parentIsLocalized })\n\n // Run field beforeDuplicate hooks.\n // These hooks are responsible for resetting the `id` field values of array and block rows. See `baseIDField`.\n if (Array.isArray('hooks' in field && field.hooks?.beforeDuplicate)) {\n if (fieldIsLocalized) {\n const localeData: JsonObject = {}\n\n for (const locale of localization.localeCodes) {\n const beforeDuplicateArgs: FieldHookArgs = {\n blockData,\n collection,\n context,\n data: doc as Partial<T>,\n field,\n global: undefined!,\n indexPath: indexPathSegments,\n path: pathSegments,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name!]?.[locale],\n req,\n schemaPath: schemaPathSegments,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n siblingFields: siblingFields!,\n value: siblingDoc[field.name!]?.[locale],\n }\n\n let hookResult\n if ('hooks' in field && field.hooks?.beforeDuplicate) {\n for (const hook of field.hooks.beforeDuplicate) {\n hookResult = await hook(beforeDuplicateArgs)\n }\n }\n\n if (typeof hookResult !== 'undefined') {\n localeData[locale] = hookResult\n }\n }\n\n siblingDoc[field.name!] = localeData\n } else {\n const beforeDuplicateArgs: FieldHookArgs = {\n blockData,\n collection,\n context,\n data: doc as Partial<T>,\n field,\n global: undefined!,\n indexPath: indexPathSegments,\n path: pathSegments,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name!]!,\n req,\n schemaPath: schemaPathSegments,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n siblingFields: siblingFields!,\n value: siblingDoc[field.name!]!,\n }\n\n let hookResult\n if ('hooks' in field && field.hooks?.beforeDuplicate) {\n for (const hook of field.hooks.beforeDuplicate) {\n hookResult = await hook(beforeDuplicateArgs)\n }\n }\n\n if (typeof hookResult !== 'undefined') {\n siblingDoc[field.name!] = hookResult\n }\n }\n }\n\n // First, for any localized fields, we will loop over locales\n // and if locale data is present, traverse the sub fields.\n // There are only a few different fields where this is possible.\n if (fieldIsLocalized) {\n if (typeof fieldData !== 'object' || fieldData === null) {\n siblingDoc[field.name!] = {}\n fieldData = siblingDoc[field.name!]\n }\n\n const promises: Promise<void>[] = []\n\n localization.localeCodes.forEach((locale) => {\n if (fieldData[locale]) {\n switch (field.type) {\n case 'array': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n\n rows.forEach((row, rowIndex) => {\n promises.push(\n traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc: row,\n }),\n )\n })\n }\n\n break\n }\n\n case 'blocks': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n\n rows.forEach((row, rowIndex) => {\n const blockTypeToMatch = row.blockType\n\n const block: Block | undefined =\n req.payload.blocks[blockTypeToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (curBlock) =>\n typeof curBlock !== 'string' && curBlock.slug === blockTypeToMatch,\n ) as Block | undefined)\n\n promises.push(\n traverseFields({\n id,\n blockData: row,\n collection,\n context,\n doc,\n fields: block!.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath + '.' + block!.slug,\n req,\n siblingDoc: row,\n }),\n )\n })\n }\n break\n }\n\n case 'group':\n case 'tab': {\n promises.push(\n traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc: fieldData[locale],\n }),\n )\n\n break\n }\n }\n }\n })\n\n await Promise.all(promises)\n } else {\n // If the field is not localized, but it affects data,\n // we need to further traverse its children\n // so the child fields can run beforeDuplicate hooks\n switch (field.type) {\n case 'array': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n\n rows.forEach((row, rowIndex) => {\n promises.push(\n traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc: row,\n }),\n )\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'blocks': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n\n rows.forEach((row, rowIndex) => {\n const blockTypeToMatch = row.blockType\n\n const block: Block | undefined =\n req.payload.blocks[blockTypeToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (curBlock) => typeof curBlock !== 'string' && curBlock.slug === blockTypeToMatch,\n ) as Block | undefined)\n\n if (block) {\n ;(row as JsonObject).blockType = blockTypeToMatch\n\n promises.push(\n traverseFields({\n id,\n blockData: row,\n collection,\n context,\n doc,\n fields: block.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath + '.' + block.slug,\n req,\n siblingDoc: row,\n }),\n )\n }\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'group': {\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n\n const groupDoc = siblingDoc[field.name] as JsonObject\n\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc: groupDoc,\n })\n\n break\n }\n\n case 'tab': {\n if (typeof siblingDoc[field.name!] !== 'object') {\n siblingDoc[field.name!] = {}\n }\n\n const tabDoc = siblingDoc[field.name!] as JsonObject\n\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc: tabDoc,\n })\n\n break\n }\n }\n }\n } else {\n // Finally, we traverse fields which do not affect data here - collapsibles, rows, unnamed groups\n switch (field.type) {\n case 'collapsible':\n case 'group':\n case 'row': {\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc,\n })\n\n break\n }\n\n // Unnamed Tab\n // @ts-expect-error `fieldAffectsData` inferred return type doesn't account for TabAsField\n case 'tab': {\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n // @ts-expect-error `fieldAffectsData` inferred return type doesn't account for TabAsField\n fields: field.fields,\n overrideAccess,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n overrideAccess,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n }\n}\n"],"names":["fieldAffectsData","fieldShouldBeLocalized","getFieldPaths","traverseFields","promise","id","blockData","collection","context","doc","field","fieldIndex","overrideAccess","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","req","siblingDoc","siblingFields","indexPath","path","schemaPath","index","localization","payload","config","pathSegments","split","schemaPathSegments","indexPathSegments","filter","Boolean","map","Number","fieldData","name","fieldIsLocalized","Array","isArray","hooks","beforeDuplicate","localeData","locale","localeCodes","beforeDuplicateArgs","data","global","undefined","previousSiblingDoc","previousValue","siblingData","siblingDocWithLocales","value","hookResult","hook","promises","forEach","type","rows","row","rowIndex","push","fields","localized","blockTypeToMatch","blockType","block","blocks","blockReferences","find","curBlock","slug","Promise","all","groupDoc","tabDoc","tabs","tab"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeDuplicate/promise.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { RequestContext } from '../../../index.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Block, Field, FieldHookArgs, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, fieldShouldBeLocalized } from '../../config/types.js'\nimport { getFieldPaths } from '../../getFieldPaths.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n /**\n * Data of the nearest parent block. If no parent block exists, this will be the `undefined`\n */\n blockData?: JsonObject\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n doc: T\n field: Field | TabAsField\n fieldIndex: number\n id?: number | string\n overrideAccess: boolean\n parentIndexPath: string\n parentIsLocalized: boolean\n parentPath: string\n parentSchemaPath: string\n req: PayloadRequest\n siblingDoc: JsonObject\n siblingFields?: (Field | TabAsField)[]\n}\n\nexport const promise = async <T>({\n id,\n blockData,\n collection,\n context,\n doc,\n field,\n fieldIndex,\n overrideAccess,\n parentIndexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath,\n req,\n siblingDoc,\n siblingFields,\n}: Args<T>): Promise<void> => {\n const { indexPath, path, schemaPath } = getFieldPaths({\n field,\n index: fieldIndex,\n parentIndexPath,\n parentPath,\n parentSchemaPath,\n })\n\n const { localization } = req.payload.config\n\n const pathSegments = path ? path.split('.') : []\n const schemaPathSegments = schemaPath ? schemaPath.split('.') : []\n const indexPathSegments = indexPath ? indexPath.split('-').filter(Boolean)?.map(Number) : []\n\n if (fieldAffectsData(field)) {\n if ('disableDuplicate' in field && field.disableDuplicate) {\n delete siblingDoc[field.name]\n return\n }\n\n let fieldData = siblingDoc?.[field.name!]\n const fieldIsLocalized = localization && fieldShouldBeLocalized({ field, parentIsLocalized })\n\n // Run field beforeDuplicate hooks.\n // These hooks are responsible for resetting the `id` field values of array and block rows. See `baseIDField`.\n if (Array.isArray('hooks' in field && field.hooks?.beforeDuplicate)) {\n if (fieldIsLocalized) {\n const localeData: JsonObject = {}\n\n for (const locale of localization.localeCodes) {\n const beforeDuplicateArgs: FieldHookArgs = {\n blockData,\n collection,\n context,\n data: doc as Partial<T>,\n field,\n global: undefined!,\n indexPath: indexPathSegments,\n path: pathSegments,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name!]?.[locale],\n req,\n schemaPath: schemaPathSegments,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n siblingFields: siblingFields!,\n value: siblingDoc[field.name!]?.[locale],\n }\n\n let hookResult\n if ('hooks' in field && field.hooks?.beforeDuplicate) {\n for (const hook of field.hooks.beforeDuplicate) {\n hookResult = await hook(beforeDuplicateArgs)\n }\n }\n\n if (typeof hookResult !== 'undefined') {\n localeData[locale] = hookResult\n }\n }\n\n siblingDoc[field.name!] = localeData\n } else {\n const beforeDuplicateArgs: FieldHookArgs = {\n blockData,\n collection,\n context,\n data: doc as Partial<T>,\n field,\n global: undefined!,\n indexPath: indexPathSegments,\n path: pathSegments,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name!]!,\n req,\n schemaPath: schemaPathSegments,\n siblingData: siblingDoc,\n siblingDocWithLocales: siblingDoc,\n siblingFields: siblingFields!,\n value: siblingDoc[field.name!]!,\n }\n\n let hookResult\n if ('hooks' in field && field.hooks?.beforeDuplicate) {\n for (const hook of field.hooks.beforeDuplicate) {\n hookResult = await hook(beforeDuplicateArgs)\n }\n }\n\n if (typeof hookResult !== 'undefined') {\n siblingDoc[field.name!] = hookResult\n }\n }\n }\n\n // First, for any localized fields, we will loop over locales\n // and if locale data is present, traverse the sub fields.\n // There are only a few different fields where this is possible.\n if (fieldIsLocalized) {\n if (typeof fieldData !== 'object' || fieldData === null) {\n siblingDoc[field.name!] = {}\n fieldData = siblingDoc[field.name!]\n }\n\n const promises: Promise<void>[] = []\n\n localization.localeCodes.forEach((locale) => {\n if (fieldData[locale]) {\n switch (field.type) {\n case 'array': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n\n rows.forEach((row, rowIndex) => {\n promises.push(\n traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc: row,\n }),\n )\n })\n }\n\n break\n }\n\n case 'blocks': {\n const rows = fieldData[locale]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n\n rows.forEach((row, rowIndex) => {\n const blockTypeToMatch = row.blockType\n\n const block: Block | undefined =\n req.payload.blocks[blockTypeToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (curBlock) =>\n typeof curBlock !== 'string' && curBlock.slug === blockTypeToMatch,\n ) as Block | undefined)\n\n promises.push(\n traverseFields({\n id,\n blockData: row,\n collection,\n context,\n doc,\n fields: block!.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath + '.' + block!.slug,\n req,\n siblingDoc: row,\n }),\n )\n })\n }\n break\n }\n\n case 'group':\n case 'tab': {\n promises.push(\n traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc: fieldData[locale],\n }),\n )\n\n break\n }\n }\n }\n })\n\n await Promise.all(promises)\n } else {\n // If the field is not localized, but it affects data,\n // we need to further traverse its children\n // so the child fields can run beforeDuplicate hooks\n switch (field.type) {\n case 'array': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n\n rows.forEach((row, rowIndex) => {\n promises.push(\n traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc: row,\n }),\n )\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'blocks': {\n const rows = siblingDoc[field.name]\n\n if (Array.isArray(rows)) {\n const promises: Promise<void>[] = []\n\n rows.forEach((row, rowIndex) => {\n const blockTypeToMatch = row.blockType\n\n const block: Block | undefined =\n req.payload.blocks[blockTypeToMatch] ??\n ((field.blockReferences ?? field.blocks).find(\n (curBlock) => typeof curBlock !== 'string' && curBlock.slug === blockTypeToMatch,\n ) as Block | undefined)\n\n if (block) {\n ;(row as JsonObject).blockType = blockTypeToMatch\n\n promises.push(\n traverseFields({\n id,\n blockData: row,\n collection,\n context,\n doc,\n fields: block.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path + '.' + rowIndex,\n parentSchemaPath: schemaPath + '.' + block.slug,\n req,\n siblingDoc: row,\n }),\n )\n }\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'group': {\n if (typeof siblingDoc[field.name] !== 'object') {\n siblingDoc[field.name] = {}\n }\n\n const groupDoc = siblingDoc[field.name] as JsonObject\n\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc: groupDoc,\n })\n\n break\n }\n\n case 'tab': {\n if (typeof siblingDoc[field.name!] !== 'object') {\n siblingDoc[field.name!] = {}\n }\n\n const tabDoc = siblingDoc[field.name!] as JsonObject\n\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: parentIsLocalized || field.localized!,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc: tabDoc,\n })\n\n break\n }\n }\n }\n } else {\n // Finally, we traverse fields which do not affect data here - collapsibles, rows, unnamed groups\n switch (field.type) {\n case 'collapsible':\n case 'group':\n case 'row': {\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.fields,\n overrideAccess,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc,\n })\n\n break\n }\n\n // Unnamed Tab\n // @ts-expect-error `fieldAffectsData` inferred return type doesn't account for TabAsField\n case 'tab': {\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n // @ts-expect-error `fieldAffectsData` inferred return type doesn't account for TabAsField\n fields: field.fields,\n overrideAccess,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n blockData,\n collection,\n context,\n doc,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n overrideAccess,\n parentIndexPath: indexPath,\n parentIsLocalized,\n parentPath: path,\n parentSchemaPath: schemaPath,\n req,\n siblingDoc,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n }\n}\n"],"names":["fieldAffectsData","fieldShouldBeLocalized","getFieldPaths","traverseFields","promise","id","blockData","collection","context","doc","field","fieldIndex","overrideAccess","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","req","siblingDoc","siblingFields","indexPath","path","schemaPath","index","localization","payload","config","pathSegments","split","schemaPathSegments","indexPathSegments","filter","Boolean","map","Number","disableDuplicate","name","fieldData","fieldIsLocalized","Array","isArray","hooks","beforeDuplicate","localeData","locale","localeCodes","beforeDuplicateArgs","data","global","undefined","previousSiblingDoc","previousValue","siblingData","siblingDocWithLocales","value","hookResult","hook","promises","forEach","type","rows","row","rowIndex","push","fields","localized","blockTypeToMatch","blockType","block","blocks","blockReferences","find","curBlock","slug","Promise","all","groupDoc","tabDoc","tabs","tab"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import type { JsonObject, JsonValue, PayloadRequest } from '../../../types/index.js';
2
2
  import type { FieldAffectingData } from '../../config/types.js';
3
- export declare function getFallbackValue({ field, req, siblingDoc, }: {
3
+ export declare function getFallbackValue({ field, isDocumentValueAllowed, req, siblingDoc, }: {
4
4
  field: FieldAffectingData;
5
+ isDocumentValueAllowed?: boolean;
5
6
  req: PayloadRequest;
6
7
  siblingDoc: JsonObject;
7
8
  }): Promise<JsonValue>;
@@ -1 +1 @@
1
- {"version":3,"file":"getFallbackValue.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/getFallbackValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAK/D,wBAAsB,gBAAgB,CAAC,EACrC,KAAK,EACL,GAAG,EACH,UAAU,GACX,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAA;IACzB,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,UAAU,CAAA;CACvB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgBrB"}
1
+ {"version":3,"file":"getFallbackValue.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/getFallbackValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAK/D,wBAAsB,gBAAgB,CAAC,EACrC,KAAK,EACL,sBAA6B,EAC7B,GAAG,EACH,UAAU,GACX,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAA;IACzB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,UAAU,EAAE,UAAU,CAAA;CACvB,GAAG,OAAO,CAAC,SAAS,CAAC,CAgBrB"}
@@ -1,9 +1,9 @@
1
1
  import { getDefaultValue } from '../../getDefaultValue.js';
2
2
  import { cloneDataFromOriginalDoc } from '../beforeChange/cloneDataFromOriginalDoc.js';
3
- export async function getFallbackValue({ field, req, siblingDoc }) {
3
+ export async function getFallbackValue({ field, isDocumentValueAllowed = true, req, siblingDoc }) {
4
4
  let fallbackValue = undefined;
5
5
  if ('name' in field && field.name) {
6
- if (typeof siblingDoc[field.name] !== 'undefined') {
6
+ if (isDocumentValueAllowed && typeof siblingDoc[field.name] !== 'undefined') {
7
7
  fallbackValue = cloneDataFromOriginalDoc(siblingDoc[field.name]);
8
8
  } else if ('defaultValue' in field && typeof field.defaultValue !== 'undefined') {
9
9
  fallbackValue = await getDefaultValue({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/getFallbackValue.ts"],"sourcesContent":["import type { JsonObject, JsonValue, PayloadRequest } from '../../../types/index.js'\nimport type { FieldAffectingData } from '../../config/types.js'\n\nimport { getDefaultValue } from '../../getDefaultValue.js'\nimport { cloneDataFromOriginalDoc } from '../beforeChange/cloneDataFromOriginalDoc.js'\n\nexport async function getFallbackValue({\n field,\n req,\n siblingDoc,\n}: {\n field: FieldAffectingData\n req: PayloadRequest\n siblingDoc: JsonObject\n}): Promise<JsonValue> {\n let fallbackValue: JsonValue = undefined\n if ('name' in field && field.name) {\n if (typeof siblingDoc[field.name] !== 'undefined') {\n fallbackValue = cloneDataFromOriginalDoc(siblingDoc[field.name])\n } else if ('defaultValue' in field && typeof field.defaultValue !== 'undefined') {\n fallbackValue = await getDefaultValue({\n defaultValue: field.defaultValue,\n locale: req.locale || '',\n req,\n user: req.user,\n })\n }\n }\n\n return fallbackValue\n}\n"],"names":["getDefaultValue","cloneDataFromOriginalDoc","getFallbackValue","field","req","siblingDoc","fallbackValue","undefined","name","defaultValue","locale","user"],"mappings":"AAGA,SAASA,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,wBAAwB,QAAQ,8CAA6C;AAEtF,OAAO,eAAeC,iBAAiB,EACrCC,KAAK,EACLC,GAAG,EACHC,UAAU,EAKX;IACC,IAAIC,gBAA2BC;IAC/B,IAAI,UAAUJ,SAASA,MAAMK,IAAI,EAAE;QACjC,IAAI,OAAOH,UAAU,CAACF,MAAMK,IAAI,CAAC,KAAK,aAAa;YACjDF,gBAAgBL,yBAAyBI,UAAU,CAACF,MAAMK,IAAI,CAAC;QACjE,OAAO,IAAI,kBAAkBL,SAAS,OAAOA,MAAMM,YAAY,KAAK,aAAa;YAC/EH,gBAAgB,MAAMN,gBAAgB;gBACpCS,cAAcN,MAAMM,YAAY;gBAChCC,QAAQN,IAAIM,MAAM,IAAI;gBACtBN;gBACAO,MAAMP,IAAIO,IAAI;YAChB;QACF;IACF;IAEA,OAAOL;AACT"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/getFallbackValue.ts"],"sourcesContent":["import type { JsonObject, JsonValue, PayloadRequest } from '../../../types/index.js'\nimport type { FieldAffectingData } from '../../config/types.js'\n\nimport { getDefaultValue } from '../../getDefaultValue.js'\nimport { cloneDataFromOriginalDoc } from '../beforeChange/cloneDataFromOriginalDoc.js'\n\nexport async function getFallbackValue({\n field,\n isDocumentValueAllowed = true,\n req,\n siblingDoc,\n}: {\n field: FieldAffectingData\n isDocumentValueAllowed?: boolean\n req: PayloadRequest\n siblingDoc: JsonObject\n}): Promise<JsonValue> {\n let fallbackValue: JsonValue = undefined\n if ('name' in field && field.name) {\n if (isDocumentValueAllowed && typeof siblingDoc[field.name] !== 'undefined') {\n fallbackValue = cloneDataFromOriginalDoc(siblingDoc[field.name])\n } else if ('defaultValue' in field && typeof field.defaultValue !== 'undefined') {\n fallbackValue = await getDefaultValue({\n defaultValue: field.defaultValue,\n locale: req.locale || '',\n req,\n user: req.user,\n })\n }\n }\n\n return fallbackValue\n}\n"],"names":["getDefaultValue","cloneDataFromOriginalDoc","getFallbackValue","field","isDocumentValueAllowed","req","siblingDoc","fallbackValue","undefined","name","defaultValue","locale","user"],"mappings":"AAGA,SAASA,eAAe,QAAQ,2BAA0B;AAC1D,SAASC,wBAAwB,QAAQ,8CAA6C;AAEtF,OAAO,eAAeC,iBAAiB,EACrCC,KAAK,EACLC,yBAAyB,IAAI,EAC7BC,GAAG,EACHC,UAAU,EAMX;IACC,IAAIC,gBAA2BC;IAC/B,IAAI,UAAUL,SAASA,MAAMM,IAAI,EAAE;QACjC,IAAIL,0BAA0B,OAAOE,UAAU,CAACH,MAAMM,IAAI,CAAC,KAAK,aAAa;YAC3EF,gBAAgBN,yBAAyBK,UAAU,CAACH,MAAMM,IAAI,CAAC;QACjE,OAAO,IAAI,kBAAkBN,SAAS,OAAOA,MAAMO,YAAY,KAAK,aAAa;YAC/EH,gBAAgB,MAAMP,gBAAgB;gBACpCU,cAAcP,MAAMO,YAAY;gBAChCC,QAAQN,IAAIM,MAAM,IAAI;gBACtBN;gBACAO,MAAMP,IAAIO,IAAI;YAChB;QACF;IACF;IAEA,OAAOL;AACT"}
@@ -7,9 +7,14 @@ type Args<T extends JsonObject> = {
7
7
  context: RequestContext;
8
8
  data: T;
9
9
  doc?: T;
10
+ docForHooks?: T;
10
11
  duplicate?: boolean;
11
12
  global: null | SanitizedGlobalConfig;
12
13
  id?: number | string;
14
+ onFieldAccess?: (args: {
15
+ accessResult: boolean;
16
+ path: string;
17
+ }) => void;
13
18
  operation: 'create' | 'update';
14
19
  overrideAccess: boolean;
15
20
  req: PayloadRequest;
@@ -22,6 +27,6 @@ type Args<T extends JsonObject> = {
22
27
  * - Merge original document data into incoming data
23
28
  * - Compute default values for undefined fields
24
29
  */
25
- export declare const beforeValidate: <T extends JsonObject>({ id, collection, context, data: incomingData, doc, global, operation, overrideAccess, req, }: Args<T>) => Promise<T>;
30
+ export declare const beforeValidate: <T extends JsonObject>({ id, collection, context, data: incomingData, doc, docForHooks, global, onFieldAccess, operation, overrideAccess, req, }: Args<T>) => Promise<T>;
26
31
  export {};
27
32
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAEzE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGvD,KAAK,IAAI,CAAC,CAAC,SAAS,UAAU,IAAI;IAChC,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,CAAC,EAAE,CAAC,CAAA;IACP,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,IAAI,GAAG,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,UAAU,iGAUtD,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAqBrB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAA;AACrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAEzE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGvD,KAAK,IAAI,CAAC,CAAC,SAAS,UAAU,IAAI;IAChC,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,CAAC,EAAE,CAAC,CAAA;IACP,WAAW,CAAC,EAAE,CAAC,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,EAAE,IAAI,GAAG,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACvE,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,UAAU,6HAYtD,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAuBrB,CAAA"}
@@ -6,15 +6,17 @@ import { traverseFields } from './traverseFields.js';
6
6
  * - Execute field access control
7
7
  * - Merge original document data into incoming data
8
8
  * - Compute default values for undefined fields
9
- */ export const beforeValidate = async ({ id, collection, context, data: incomingData, doc, global, operation, overrideAccess, req })=>{
9
+ */ export const beforeValidate = async ({ id, collection, context, data: incomingData, doc, docForHooks, global, onFieldAccess, operation, overrideAccess, req })=>{
10
10
  await traverseFields({
11
11
  id,
12
12
  collection,
13
13
  context,
14
14
  data: incomingData,
15
15
  doc,
16
+ docForHooks,
16
17
  fields: collection?.fields || global?.fields,
17
18
  global,
19
+ onFieldAccess,
18
20
  operation,
19
21
  overrideAccess,
20
22
  parentIndexPath: '',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/index.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\n\nimport { type RequestContext } from '../../../index.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T extends JsonObject> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: T\n doc?: T\n duplicate?: boolean\n global: null | SanitizedGlobalConfig\n id?: number | string\n operation: 'create' | 'update'\n overrideAccess: boolean\n req: PayloadRequest\n}\n\n/**\n * This function is responsible for the following actions, in order:\n * - Sanitize incoming data\n * - Execute field hooks\n * - Execute field access control\n * - Merge original document data into incoming data\n * - Compute default values for undefined fields\n */\nexport const beforeValidate = async <T extends JsonObject>({\n id,\n collection,\n context,\n data: incomingData,\n doc,\n global,\n operation,\n overrideAccess,\n req,\n}: Args<T>): Promise<T> => {\n await traverseFields({\n id,\n collection,\n context,\n data: incomingData,\n doc,\n fields: (collection?.fields || global?.fields)!,\n global,\n operation,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: false,\n parentPath: '',\n parentSchemaPath: '',\n req,\n siblingData: incomingData,\n siblingDoc: doc!,\n })\n\n return incomingData\n}\n"],"names":["traverseFields","beforeValidate","id","collection","context","data","incomingData","doc","global","operation","overrideAccess","req","fields","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","siblingData","siblingDoc"],"mappings":"AAKA,SAASA,cAAc,QAAQ,sBAAqB;AAepD;;;;;;;CAOC,GACD,OAAO,MAAMC,iBAAiB,OAA6B,EACzDC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAMC,YAAY,EAClBC,GAAG,EACHC,MAAM,EACNC,SAAS,EACTC,cAAc,EACdC,GAAG,EACK;IACR,MAAMX,eAAe;QACnBE;QACAC;QACAC;QACAC,MAAMC;QACNC;QACAK,QAAST,YAAYS,UAAUJ,QAAQI;QACvCJ;QACAC;QACAC;QACAG,iBAAiB;QACjBC,mBAAmB;QACnBC,YAAY;QACZC,kBAAkB;QAClBL;QACAM,aAAaX;QACbY,YAAYX;IACd;IAEA,OAAOD;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/index.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\n\nimport { type RequestContext } from '../../../index.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T extends JsonObject> = {\n collection: null | SanitizedCollectionConfig\n context: RequestContext\n data: T\n doc?: T\n docForHooks?: T\n duplicate?: boolean\n global: null | SanitizedGlobalConfig\n id?: number | string\n onFieldAccess?: (args: { accessResult: boolean; path: string }) => void\n operation: 'create' | 'update'\n overrideAccess: boolean\n req: PayloadRequest\n}\n\n/**\n * This function is responsible for the following actions, in order:\n * - Sanitize incoming data\n * - Execute field hooks\n * - Execute field access control\n * - Merge original document data into incoming data\n * - Compute default values for undefined fields\n */\nexport const beforeValidate = async <T extends JsonObject>({\n id,\n collection,\n context,\n data: incomingData,\n doc,\n docForHooks,\n global,\n onFieldAccess,\n operation,\n overrideAccess,\n req,\n}: Args<T>): Promise<T> => {\n await traverseFields({\n id,\n collection,\n context,\n data: incomingData,\n doc,\n docForHooks,\n fields: (collection?.fields || global?.fields)!,\n global,\n onFieldAccess,\n operation,\n overrideAccess,\n parentIndexPath: '',\n parentIsLocalized: false,\n parentPath: '',\n parentSchemaPath: '',\n req,\n siblingData: incomingData,\n siblingDoc: doc!,\n })\n\n return incomingData\n}\n"],"names":["traverseFields","beforeValidate","id","collection","context","data","incomingData","doc","docForHooks","global","onFieldAccess","operation","overrideAccess","req","fields","parentIndexPath","parentIsLocalized","parentPath","parentSchemaPath","siblingData","siblingDoc"],"mappings":"AAKA,SAASA,cAAc,QAAQ,sBAAqB;AAiBpD;;;;;;;CAOC,GACD,OAAO,MAAMC,iBAAiB,OAA6B,EACzDC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAMC,YAAY,EAClBC,GAAG,EACHC,WAAW,EACXC,MAAM,EACNC,aAAa,EACbC,SAAS,EACTC,cAAc,EACdC,GAAG,EACK;IACR,MAAMb,eAAe;QACnBE;QACAC;QACAC;QACAC,MAAMC;QACNC;QACAC;QACAM,QAASX,YAAYW,UAAUL,QAAQK;QACvCL;QACAC;QACAC;QACAC;QACAG,iBAAiB;QACjBC,mBAAmB;QACnBC,YAAY;QACZC,kBAAkB;QAClBL;QACAM,aAAab;QACbc,YAAYb;IACd;IAEA,OAAOD;AACT,EAAC"}
@@ -0,0 +1,90 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { beforeValidate } from './index.js';
3
+ const runBeforeValidate = async ({ fields, overrideAccess = false })=>{
4
+ const fieldAccessResults = [];
5
+ await beforeValidate({
6
+ collection: {
7
+ fields
8
+ },
9
+ context: {},
10
+ data: Object.fromEntries(fields.map((field)=>[
11
+ 'name' in field ? field.name : '',
12
+ 'value'
13
+ ])),
14
+ doc: {},
15
+ global: null,
16
+ onFieldAccess: (fieldAccessResult)=>{
17
+ fieldAccessResults.push(fieldAccessResult);
18
+ },
19
+ operation: 'create',
20
+ overrideAccess,
21
+ req: {
22
+ context: {},
23
+ payload: {}
24
+ }
25
+ });
26
+ return fieldAccessResults;
27
+ };
28
+ describe('beforeValidate field access results', ()=>{
29
+ it('should report explicit and implicit field access results', async ()=>{
30
+ const fieldAccessResults = await runBeforeValidate({
31
+ fields: [
32
+ {
33
+ name: 'explicitlyAllowed',
34
+ type: 'text',
35
+ access: {
36
+ create: ()=>true
37
+ }
38
+ },
39
+ {
40
+ name: 'explicitlyDenied',
41
+ type: 'text',
42
+ access: {
43
+ create: ()=>false
44
+ }
45
+ },
46
+ {
47
+ name: 'implicitlyAllowed',
48
+ type: 'text'
49
+ }
50
+ ]
51
+ });
52
+ expect(fieldAccessResults).toHaveLength(3);
53
+ expect(fieldAccessResults).toEqual(expect.arrayContaining([
54
+ {
55
+ accessResult: true,
56
+ path: 'explicitlyAllowed'
57
+ },
58
+ {
59
+ accessResult: false,
60
+ path: 'explicitlyDenied'
61
+ },
62
+ {
63
+ accessResult: true,
64
+ path: 'implicitlyAllowed'
65
+ }
66
+ ]));
67
+ });
68
+ it('should report access as allowed when access control is overridden', async ()=>{
69
+ const fieldAccessResults = await runBeforeValidate({
70
+ fields: [
71
+ {
72
+ name: 'overridden',
73
+ type: 'text',
74
+ access: {
75
+ create: ()=>false
76
+ }
77
+ }
78
+ ],
79
+ overrideAccess: true
80
+ });
81
+ expect(fieldAccessResults).toEqual([
82
+ {
83
+ accessResult: true,
84
+ path: 'overridden'
85
+ }
86
+ ]);
87
+ });
88
+ });
89
+
90
+ //# sourceMappingURL=index.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/index.spec.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { JsonObject, PayloadRequest } from '../../../types/index.js'\nimport type { Field } from '../../config/types.js'\n\nimport { describe, expect, it } from 'vitest'\n\nimport { beforeValidate } from './index.js'\n\ntype FieldAccessResult = {\n accessResult: boolean\n path: string\n}\n\nconst runBeforeValidate = async ({\n fields,\n overrideAccess = false,\n}: {\n fields: Field[]\n overrideAccess?: boolean\n}): Promise<FieldAccessResult[]> => {\n const fieldAccessResults: FieldAccessResult[] = []\n\n await beforeValidate({\n collection: { fields } as SanitizedCollectionConfig,\n context: {},\n data: Object.fromEntries(fields.map((field) => ['name' in field ? field.name : '', 'value'])),\n doc: {} as JsonObject,\n global: null,\n onFieldAccess: (fieldAccessResult) => {\n fieldAccessResults.push(fieldAccessResult)\n },\n operation: 'create',\n overrideAccess,\n req: { context: {}, payload: {} } as PayloadRequest,\n })\n\n return fieldAccessResults\n}\n\ndescribe('beforeValidate field access results', () => {\n it('should report explicit and implicit field access results', async () => {\n const fieldAccessResults = await runBeforeValidate({\n fields: [\n {\n name: 'explicitlyAllowed',\n type: 'text',\n access: { create: () => true },\n },\n {\n name: 'explicitlyDenied',\n type: 'text',\n access: { create: () => false },\n },\n {\n name: 'implicitlyAllowed',\n type: 'text',\n },\n ],\n })\n\n expect(fieldAccessResults).toHaveLength(3)\n expect(fieldAccessResults).toEqual(\n expect.arrayContaining([\n { accessResult: true, path: 'explicitlyAllowed' },\n { accessResult: false, path: 'explicitlyDenied' },\n { accessResult: true, path: 'implicitlyAllowed' },\n ]),\n )\n })\n\n it('should report access as allowed when access control is overridden', async () => {\n const fieldAccessResults = await runBeforeValidate({\n fields: [\n {\n name: 'overridden',\n type: 'text',\n access: { create: () => false },\n },\n ],\n overrideAccess: true,\n })\n\n expect(fieldAccessResults).toEqual([{ accessResult: true, path: 'overridden' }])\n })\n})\n"],"names":["describe","expect","it","beforeValidate","runBeforeValidate","fields","overrideAccess","fieldAccessResults","collection","context","data","Object","fromEntries","map","field","name","doc","global","onFieldAccess","fieldAccessResult","push","operation","req","payload","type","access","create","toHaveLength","toEqual","arrayContaining","accessResult","path"],"mappings":"AAIA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,SAAQ;AAE7C,SAASC,cAAc,QAAQ,aAAY;AAO3C,MAAMC,oBAAoB,OAAO,EAC/BC,MAAM,EACNC,iBAAiB,KAAK,EAIvB;IACC,MAAMC,qBAA0C,EAAE;IAElD,MAAMJ,eAAe;QACnBK,YAAY;YAAEH;QAAO;QACrBI,SAAS,CAAC;QACVC,MAAMC,OAAOC,WAAW,CAACP,OAAOQ,GAAG,CAAC,CAACC,QAAU;gBAAC,UAAUA,QAAQA,MAAMC,IAAI,GAAG;gBAAI;aAAQ;QAC3FC,KAAK,CAAC;QACNC,QAAQ;QACRC,eAAe,CAACC;YACdZ,mBAAmBa,IAAI,CAACD;QAC1B;QACAE,WAAW;QACXf;QACAgB,KAAK;YAAEb,SAAS,CAAC;YAAGc,SAAS,CAAC;QAAE;IAClC;IAEA,OAAOhB;AACT;AAEAP,SAAS,uCAAuC;IAC9CE,GAAG,4DAA4D;QAC7D,MAAMK,qBAAqB,MAAMH,kBAAkB;YACjDC,QAAQ;gBACN;oBACEU,MAAM;oBACNS,MAAM;oBACNC,QAAQ;wBAAEC,QAAQ,IAAM;oBAAK;gBAC/B;gBACA;oBACEX,MAAM;oBACNS,MAAM;oBACNC,QAAQ;wBAAEC,QAAQ,IAAM;oBAAM;gBAChC;gBACA;oBACEX,MAAM;oBACNS,MAAM;gBACR;aACD;QACH;QAEAvB,OAAOM,oBAAoBoB,YAAY,CAAC;QACxC1B,OAAOM,oBAAoBqB,OAAO,CAChC3B,OAAO4B,eAAe,CAAC;YACrB;gBAAEC,cAAc;gBAAMC,MAAM;YAAoB;YAChD;gBAAED,cAAc;gBAAOC,MAAM;YAAmB;YAChD;gBAAED,cAAc;gBAAMC,MAAM;YAAoB;SACjD;IAEL;IAEA7B,GAAG,qEAAqE;QACtE,MAAMK,qBAAqB,MAAMH,kBAAkB;YACjDC,QAAQ;gBACN;oBACEU,MAAM;oBACNS,MAAM;oBACNC,QAAQ;wBAAEC,QAAQ,IAAM;oBAAM;gBAChC;aACD;YACDpB,gBAAgB;QAClB;QAEAL,OAAOM,oBAAoBqB,OAAO,CAAC;YAAC;gBAAEE,cAAc;gBAAMC,MAAM;YAAa;SAAE;IACjF;AACF"}
@@ -15,10 +15,15 @@ type Args<T> = {
15
15
  * The original data (not modified by any hooks)
16
16
  */
17
17
  doc: T;
18
+ docForHooks?: T;
18
19
  field: Field | TabAsField;
19
20
  fieldIndex: number;
20
21
  global: null | SanitizedGlobalConfig;
21
22
  id?: number | string;
23
+ onFieldAccess?: (args: {
24
+ accessResult: boolean;
25
+ path: string;
26
+ }) => void;
22
27
  operation: 'create' | 'update';
23
28
  overrideAccess: boolean;
24
29
  parentIndexPath: string;
@@ -33,6 +38,6 @@ type Args<T> = {
33
38
  siblingDoc: JsonObject;
34
39
  siblingFields?: (Field | TabAsField)[];
35
40
  };
36
- export declare const promise: <T>({ id, blockData, collection, context, data, doc, field, fieldIndex, global, operation, overrideAccess, parentIndexPath, parentIsLocalized, parentPath, parentSchemaPath, req, siblingData, siblingDoc, siblingFields, }: Args<T>) => Promise<void>;
41
+ export declare const promise: <T>({ id, blockData, collection, context, data, doc, docForHooks, field, fieldIndex, global, onFieldAccess, operation, overrideAccess, parentIndexPath, parentIsLocalized, parentPath, parentSchemaPath, req, siblingData, siblingDoc, siblingFields, }: Args<T>) => Promise<void>;
37
42
  export {};
38
43
  //# sourceMappingURL=promise.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/promise.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAc,MAAM,sCAAsC,CAAA;AACjG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,KAAK,EAAS,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAUrE,KAAK,IAAI,CAAC,CAAC,IAAI;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP;;OAEG;IACH,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,IAAI,GAAG,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,UAAU,CAAA;IACvB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;CACvC,CAAA;AASD,eAAO,MAAM,OAAO,GAAU,CAAC,2NAoB5B,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAwiBxB,CAAA"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/promise.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAc,MAAM,sCAAsC,CAAA;AACjG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAa,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACpF,OAAO,KAAK,EAAS,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAUrE,KAAK,IAAI,CAAC,CAAC,IAAI;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,UAAU,EAAE,IAAI,GAAG,yBAAyB,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP;;OAEG;IACH,GAAG,EAAE,CAAC,CAAA;IACN,WAAW,CAAC,EAAE,CAAC,CAAA;IACf,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,IAAI,GAAG,qBAAqB,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACvE,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,UAAU,CAAA;IACvB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;CACvC,CAAA;AASD,eAAO,MAAM,OAAO,GAAU,CAAC,uPAsB5B,IAAI,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,IAAI,CAwjBxB,CAAA"}
@@ -11,7 +11,7 @@ import { traverseFields } from './traverseFields.js';
11
11
  // - Execute field access control
12
12
  // - Merge original document data into incoming data
13
13
  // - Compute default values for undefined fields
14
- export const promise = async ({ id, blockData, collection, context, data, doc, field, fieldIndex, global, operation, overrideAccess, parentIndexPath, parentIsLocalized, parentPath, parentSchemaPath, req, siblingData, siblingDoc, siblingFields })=>{
14
+ export const promise = async ({ id, blockData, collection, context, data, doc, docForHooks, field, fieldIndex, global, onFieldAccess, operation, overrideAccess, parentIndexPath, parentIsLocalized, parentPath, parentSchemaPath, req, siblingData, siblingDoc, siblingFields })=>{
15
15
  const { indexPath, path, schemaPath } = getFieldPaths({
16
16
  field,
17
17
  index: fieldIndex,
@@ -22,6 +22,8 @@ export const promise = async ({ id, blockData, collection, context, data, doc, f
22
22
  const pathSegments = path ? path.split('.') : [];
23
23
  const schemaPathSegments = schemaPath ? schemaPath.split('.') : [];
24
24
  const indexPathSegments = indexPath ? indexPath.split('-').filter(Boolean)?.map(Number) : [];
25
+ const policyDoc = path === '_status' && docForHooks ? docForHooks : doc;
26
+ const policySiblingDoc = path === '_status' && docForHooks ? docForHooks : siblingDoc;
25
27
  if (fieldAffectsData(field)) {
26
28
  if (field.name === 'id') {
27
29
  if (field.type === 'number' && typeof siblingData[field.name] === 'string') {
@@ -197,11 +199,11 @@ export const promise = async ({ id, blockData, collection, context, data, doc, f
197
199
  global,
198
200
  indexPath: indexPathSegments,
199
201
  operation,
200
- originalDoc: doc,
202
+ originalDoc: policyDoc,
201
203
  overrideAccess,
202
204
  path: pathSegments,
203
- previousSiblingDoc: siblingDoc,
204
- previousValue: siblingDoc[field.name],
205
+ previousSiblingDoc: policySiblingDoc,
206
+ previousValue: policySiblingDoc[field.name],
205
207
  req,
206
208
  schemaPath: schemaPathSegments,
207
209
  siblingData,
@@ -213,23 +215,30 @@ export const promise = async ({ id, blockData, collection, context, data, doc, f
213
215
  }
214
216
  }
215
217
  }
218
+ let accessResult = true;
216
219
  // Execute access control
217
220
  if (field.access && field.access[operation]) {
218
- const result = overrideAccess ? true : await field.access[operation]({
221
+ accessResult = overrideAccess ? true : await field.access[operation]({
219
222
  id,
220
223
  blockData,
221
224
  data: data,
222
- doc,
225
+ doc: policyDoc,
223
226
  req,
224
227
  siblingData
225
228
  });
226
- if (!result) {
229
+ if (!accessResult) {
227
230
  delete siblingData[field.name];
228
231
  }
229
232
  }
233
+ onFieldAccess?.({
234
+ accessResult,
235
+ path
236
+ });
230
237
  if (typeof siblingData[field.name] === 'undefined' && !req.context?.isRestoringVersion) {
231
- siblingData[field.name] = !fallbackResult.executed ? await getFallbackValue({
238
+ const isDocumentValueAllowed = operation === 'update' || accessResult;
239
+ siblingData[field.name] = !fallbackResult.executed || !isDocumentValueAllowed ? await getFallbackValue({
232
240
  field,
241
+ isDocumentValueAllowed,
233
242
  req,
234
243
  siblingDoc
235
244
  }) : fallbackResult.value;
@@ -253,6 +262,7 @@ export const promise = async ({ id, blockData, collection, context, data, doc, f
253
262
  doc,
254
263
  fields: field.fields,
255
264
  global,
265
+ onFieldAccess,
256
266
  operation,
257
267
  overrideAccess,
258
268
  parentIndexPath: '',
@@ -289,6 +299,7 @@ export const promise = async ({ id, blockData, collection, context, data, doc, f
289
299
  doc,
290
300
  fields: block.fields,
291
301
  global,
302
+ onFieldAccess,
292
303
  operation,
293
304
  overrideAccess,
294
305
  parentIndexPath: '',
@@ -317,6 +328,7 @@ export const promise = async ({ id, blockData, collection, context, data, doc, f
317
328
  doc,
318
329
  fields: field.fields,
319
330
  global,
331
+ onFieldAccess,
320
332
  operation,
321
333
  overrideAccess,
322
334
  parentIndexPath: indexPath,
@@ -353,6 +365,7 @@ export const promise = async ({ id, blockData, collection, context, data, doc, f
353
365
  doc,
354
366
  fields: field.fields,
355
367
  global,
368
+ onFieldAccess,
356
369
  operation,
357
370
  overrideAccess,
358
371
  parentIndexPath: isNamedGroup ? '' : indexPath,
@@ -430,6 +443,7 @@ export const promise = async ({ id, blockData, collection, context, data, doc, f
430
443
  doc,
431
444
  fields: field.fields,
432
445
  global,
446
+ onFieldAccess,
433
447
  operation,
434
448
  overrideAccess,
435
449
  parentIndexPath: isNamedTab ? '' : indexPath,
@@ -456,6 +470,7 @@ export const promise = async ({ id, blockData, collection, context, data, doc, f
456
470
  type: 'tab'
457
471
  })),
458
472
  global,
473
+ onFieldAccess,
459
474
  operation,
460
475
  overrideAccess,
461
476
  parentIndexPath: indexPath,