payload 3.0.0-alpha.60 → 3.0.0-alpha.61

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 (393) hide show
  1. package/dist/admin/RichText.d.ts +3 -0
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/admin/elements/Cell.js.map +1 -1
  5. package/dist/admin/elements/DatePicker.js.map +1 -1
  6. package/dist/admin/elements/PreviewButton.js.map +1 -1
  7. package/dist/admin/elements/PublishButton.js.map +1 -1
  8. package/dist/admin/elements/SaveButton.js.map +1 -1
  9. package/dist/admin/elements/SaveDraftButton.js.map +1 -1
  10. package/dist/admin/elements/Tab.js.map +1 -1
  11. package/dist/admin/forms/Error.js.map +1 -1
  12. package/dist/admin/forms/FieldDescription.d.ts +2 -1
  13. package/dist/admin/forms/FieldDescription.d.ts.map +1 -1
  14. package/dist/admin/forms/FieldDescription.js.map +1 -1
  15. package/dist/admin/forms/FieldTypes.js.map +1 -1
  16. package/dist/admin/forms/Form.js.map +1 -1
  17. package/dist/admin/forms/Label.d.ts +2 -1
  18. package/dist/admin/forms/Label.d.ts.map +1 -1
  19. package/dist/admin/forms/Label.js.map +1 -1
  20. package/dist/admin/forms/RowLabel.js.map +1 -1
  21. package/dist/admin/types.js.map +1 -1
  22. package/dist/admin/views/types.d.ts +2 -2
  23. package/dist/admin/views/types.d.ts.map +1 -1
  24. package/dist/admin/views/types.js.map +1 -1
  25. package/dist/assets/assets.d.js.map +1 -1
  26. package/dist/auth/baseFields/accountLock.js.map +1 -1
  27. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  28. package/dist/auth/baseFields/apiKey.js +3 -7
  29. package/dist/auth/baseFields/apiKey.js.map +1 -1
  30. package/dist/auth/baseFields/auth.d.ts.map +1 -1
  31. package/dist/auth/baseFields/auth.js +1 -5
  32. package/dist/auth/baseFields/auth.js.map +1 -1
  33. package/dist/auth/baseFields/verification.d.ts.map +1 -1
  34. package/dist/auth/baseFields/verification.js +1 -5
  35. package/dist/auth/baseFields/verification.js.map +1 -1
  36. package/dist/auth/cookies.js.map +1 -1
  37. package/dist/auth/crypto.js.map +1 -1
  38. package/dist/auth/defaultAccess.js.map +1 -1
  39. package/dist/auth/defaultUser.d.ts.map +1 -1
  40. package/dist/auth/defaultUser.js +2 -7
  41. package/dist/auth/defaultUser.js.map +1 -1
  42. package/dist/auth/executeAccess.js.map +1 -1
  43. package/dist/auth/executeAuthStrategies.js.map +1 -1
  44. package/dist/auth/extractJWT.js.map +1 -1
  45. package/dist/auth/getAccessResults.js.map +1 -1
  46. package/dist/auth/getFieldsToSign.js.map +1 -1
  47. package/dist/auth/index.js.map +1 -1
  48. package/dist/auth/isLocked.js.map +1 -1
  49. package/dist/auth/operations/access.js.map +1 -1
  50. package/dist/auth/operations/auth.js.map +1 -1
  51. package/dist/auth/operations/forgotPassword.js.map +1 -1
  52. package/dist/auth/operations/init.js.map +1 -1
  53. package/dist/auth/operations/local/auth.js +1 -1
  54. package/dist/auth/operations/local/auth.js.map +1 -1
  55. package/dist/auth/operations/local/forgotPassword.js.map +1 -1
  56. package/dist/auth/operations/local/index.js.map +1 -1
  57. package/dist/auth/operations/local/login.js.map +1 -1
  58. package/dist/auth/operations/local/resetPassword.js.map +1 -1
  59. package/dist/auth/operations/local/unlock.js.map +1 -1
  60. package/dist/auth/operations/local/verifyEmail.js.map +1 -1
  61. package/dist/auth/operations/login.js.map +1 -1
  62. package/dist/auth/operations/logout.js.map +1 -1
  63. package/dist/auth/operations/me.js.map +1 -1
  64. package/dist/auth/operations/refresh.js.map +1 -1
  65. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  66. package/dist/auth/operations/resetPassword.js.map +1 -1
  67. package/dist/auth/operations/unlock.js.map +1 -1
  68. package/dist/auth/operations/verifyEmail.js.map +1 -1
  69. package/dist/auth/sendVerificationEmail.js.map +1 -1
  70. package/dist/auth/strategies/apiKey.js.map +1 -1
  71. package/dist/auth/strategies/jwt.js.map +1 -1
  72. package/dist/auth/strategies/local/authenticate.js.map +1 -1
  73. package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
  74. package/dist/auth/strategies/local/incrementLoginAttempts.js.map +1 -1
  75. package/dist/auth/strategies/local/register.js.map +1 -1
  76. package/dist/auth/strategies/local/resetLoginAttempts.js.map +1 -1
  77. package/dist/auth/types.js.map +1 -1
  78. package/dist/bin/generateTypes.js.map +1 -1
  79. package/dist/bin/index.js.map +1 -1
  80. package/dist/bin/loadEnv.js.map +1 -1
  81. package/dist/bin/loader/clientExtensions.js.map +1 -1
  82. package/dist/bin/loader/compile.js.map +1 -1
  83. package/dist/bin/loader/index.d.ts.map +1 -1
  84. package/dist/bin/loader/index.js +0 -1
  85. package/dist/bin/loader/index.js.map +1 -1
  86. package/dist/bin/loader/read-default-tsconfig.js.map +1 -1
  87. package/dist/bin/migrate.js.map +1 -1
  88. package/dist/collections/config/build.js.map +1 -1
  89. package/dist/collections/config/client.d.ts +11 -4
  90. package/dist/collections/config/client.d.ts.map +1 -1
  91. package/dist/collections/config/client.js +18 -3
  92. package/dist/collections/config/client.js.map +1 -1
  93. package/dist/collections/config/defaults.js.map +1 -1
  94. package/dist/collections/config/sanitize.d.ts.map +1 -1
  95. package/dist/collections/config/sanitize.js +2 -7
  96. package/dist/collections/config/sanitize.js.map +1 -1
  97. package/dist/collections/config/schema.js +2 -2
  98. package/dist/collections/config/schema.js.map +1 -1
  99. package/dist/collections/config/types.d.ts +3 -3
  100. package/dist/collections/config/types.d.ts.map +1 -1
  101. package/dist/collections/config/types.js.map +1 -1
  102. package/dist/collections/dataloader.js.map +1 -1
  103. package/dist/collections/operations/create.js.map +1 -1
  104. package/dist/collections/operations/delete.js.map +1 -1
  105. package/dist/collections/operations/deleteByID.js.map +1 -1
  106. package/dist/collections/operations/docAccess.js.map +1 -1
  107. package/dist/collections/operations/duplicate.js.map +1 -1
  108. package/dist/collections/operations/find.js.map +1 -1
  109. package/dist/collections/operations/findByID.js.map +1 -1
  110. package/dist/collections/operations/findVersionByID.js.map +1 -1
  111. package/dist/collections/operations/findVersions.js.map +1 -1
  112. package/dist/collections/operations/local/create.d.ts.map +1 -1
  113. package/dist/collections/operations/local/create.js +2 -1
  114. package/dist/collections/operations/local/create.js.map +1 -1
  115. package/dist/collections/operations/local/delete.js.map +1 -1
  116. package/dist/collections/operations/local/duplicate.js +1 -1
  117. package/dist/collections/operations/local/duplicate.js.map +1 -1
  118. package/dist/collections/operations/local/find.js.map +1 -1
  119. package/dist/collections/operations/local/findByID.js.map +1 -1
  120. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  121. package/dist/collections/operations/local/findVersions.js.map +1 -1
  122. package/dist/collections/operations/local/index.js.map +1 -1
  123. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  124. package/dist/collections/operations/local/update.js.map +1 -1
  125. package/dist/collections/operations/restoreVersion.js.map +1 -1
  126. package/dist/collections/operations/update.js.map +1 -1
  127. package/dist/collections/operations/updateByID.js.map +1 -1
  128. package/dist/collections/operations/utils.js.map +1 -1
  129. package/dist/config/build.js.map +1 -1
  130. package/dist/config/client.d.ts +5 -1
  131. package/dist/config/client.d.ts.map +1 -1
  132. package/dist/config/client.js +9 -4
  133. package/dist/config/client.js.map +1 -1
  134. package/dist/config/defaults.js.map +1 -1
  135. package/dist/config/find.js.map +1 -1
  136. package/dist/config/sanitize.d.ts.map +1 -1
  137. package/dist/config/sanitize.js +5 -3
  138. package/dist/config/sanitize.js.map +1 -1
  139. package/dist/config/schema.js.map +1 -1
  140. package/dist/config/shared/adminViewSchema.js.map +1 -1
  141. package/dist/config/shared/componentSchema.js.map +1 -1
  142. package/dist/config/types.d.ts +6 -2
  143. package/dist/config/types.d.ts.map +1 -1
  144. package/dist/config/types.js.map +1 -1
  145. package/dist/config/validate.js.map +1 -1
  146. package/dist/database/combineQueries.js.map +1 -1
  147. package/dist/database/createDatabaseAdapter.js.map +1 -1
  148. package/dist/database/flattenWhereToOperators.js.map +1 -1
  149. package/dist/database/getLocalizedPaths.js.map +1 -1
  150. package/dist/database/migrations/createMigration.js.map +1 -1
  151. package/dist/database/migrations/getMigrations.js.map +1 -1
  152. package/dist/database/migrations/migrate.js.map +1 -1
  153. package/dist/database/migrations/migrateDown.js.map +1 -1
  154. package/dist/database/migrations/migrateRefresh.js.map +1 -1
  155. package/dist/database/migrations/migrateReset.js.map +1 -1
  156. package/dist/database/migrations/migrateStatus.js.map +1 -1
  157. package/dist/database/migrations/migrationTemplate.js.map +1 -1
  158. package/dist/database/migrations/migrationsCollection.js.map +1 -1
  159. package/dist/database/migrations/readMigrationFiles.js.map +1 -1
  160. package/dist/database/queryValidation/types.js.map +1 -1
  161. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  162. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  163. package/dist/database/types.js.map +1 -1
  164. package/dist/email/build.js.map +1 -1
  165. package/dist/email/defaults.js.map +1 -1
  166. package/dist/email/mockHandler.js.map +1 -1
  167. package/dist/email/sendEmail.js.map +1 -1
  168. package/dist/email/types.js.map +1 -1
  169. package/dist/errors/APIError.js.map +1 -1
  170. package/dist/errors/AuthenticationError.js +2 -2
  171. package/dist/errors/AuthenticationError.js.map +1 -1
  172. package/dist/errors/DuplicateCollection.js.map +1 -1
  173. package/dist/errors/DuplicateFieldName.js.map +1 -1
  174. package/dist/errors/DuplicateGlobal.js.map +1 -1
  175. package/dist/errors/ErrorDeletingFile.js +2 -2
  176. package/dist/errors/ErrorDeletingFile.js.map +1 -1
  177. package/dist/errors/FileUploadError.js +2 -2
  178. package/dist/errors/FileUploadError.js.map +1 -1
  179. package/dist/errors/Forbidden.js +2 -2
  180. package/dist/errors/Forbidden.js.map +1 -1
  181. package/dist/errors/InvalidConfiguration.js.map +1 -1
  182. package/dist/errors/InvalidFieldName.js.map +1 -1
  183. package/dist/errors/InvalidFieldRelationship.js.map +1 -1
  184. package/dist/errors/InvalidSchema.js.map +1 -1
  185. package/dist/errors/LockedAuth.js +2 -2
  186. package/dist/errors/LockedAuth.js.map +1 -1
  187. package/dist/errors/MissingCollectionLabel.js.map +1 -1
  188. package/dist/errors/MissingEditorProp.js.map +1 -1
  189. package/dist/errors/MissingFieldInputOptions.js.map +1 -1
  190. package/dist/errors/MissingFieldType.js.map +1 -1
  191. package/dist/errors/MissingFile.js +2 -2
  192. package/dist/errors/MissingFile.js.map +1 -1
  193. package/dist/errors/NotFound.js +2 -2
  194. package/dist/errors/NotFound.js.map +1 -1
  195. package/dist/errors/QueryError.js.map +1 -1
  196. package/dist/errors/TimestampsRequired.js.map +1 -1
  197. package/dist/errors/UnathorizedError.js +2 -2
  198. package/dist/errors/UnathorizedError.js.map +1 -1
  199. package/dist/errors/ValidationError.js +2 -2
  200. package/dist/errors/ValidationError.js.map +1 -1
  201. package/dist/errors/index.js.map +1 -1
  202. package/dist/errors/types.js.map +1 -1
  203. package/dist/exports/auth.js.map +1 -1
  204. package/dist/exports/components/utilities.js.map +1 -1
  205. package/dist/exports/config.js.map +1 -1
  206. package/dist/exports/database.js.map +1 -1
  207. package/dist/exports/errors.js.map +1 -1
  208. package/dist/exports/fields/index.js.map +1 -1
  209. package/dist/exports/fields/validations.js.map +1 -1
  210. package/dist/exports/node.d.ts +1 -0
  211. package/dist/exports/node.d.ts.map +1 -1
  212. package/dist/exports/node.js +1 -0
  213. package/dist/exports/node.js.map +1 -1
  214. package/dist/exports/operations.js.map +1 -1
  215. package/dist/exports/types.js.map +1 -1
  216. package/dist/exports/uploads.js.map +1 -1
  217. package/dist/exports/utilities.d.ts +0 -1
  218. package/dist/exports/utilities.d.ts.map +1 -1
  219. package/dist/exports/utilities.js +0 -1
  220. package/dist/exports/utilities.js.map +1 -1
  221. package/dist/exports/versions.js.map +1 -1
  222. package/dist/fields/baseFields/baseBlockFields.js.map +1 -1
  223. package/dist/fields/baseFields/baseIDField.js.map +1 -1
  224. package/dist/fields/config/client.d.ts +32 -25
  225. package/dist/fields/config/client.d.ts.map +1 -1
  226. package/dist/fields/config/client.js +31 -6
  227. package/dist/fields/config/client.js.map +1 -1
  228. package/dist/fields/config/sanitize.js.map +1 -1
  229. package/dist/fields/config/sanitize.spec.js.map +1 -1
  230. package/dist/fields/config/schema.d.ts.map +1 -1
  231. package/dist/fields/config/schema.js +3 -3
  232. package/dist/fields/config/schema.js.map +1 -1
  233. package/dist/fields/config/types.d.ts +6 -5
  234. package/dist/fields/config/types.d.ts.map +1 -1
  235. package/dist/fields/config/types.js.map +1 -1
  236. package/dist/fields/getDefaultValue.js.map +1 -1
  237. package/dist/fields/hooks/afterChange/index.js.map +1 -1
  238. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  239. package/dist/fields/hooks/afterChange/traverseFields.js.map +1 -1
  240. package/dist/fields/hooks/afterRead/index.js.map +1 -1
  241. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  242. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
  243. package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
  244. package/dist/fields/hooks/beforeChange/beforeDuplicate.js.map +1 -1
  245. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.js.map +1 -1
  246. package/dist/fields/hooks/beforeChange/getExistingRowDoc.js.map +1 -1
  247. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  248. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  249. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  250. package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
  251. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  252. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  253. package/dist/fields/mergeBaseFields.js.map +1 -1
  254. package/dist/fields/setDefaultBeforeDuplicate.d.ts.map +1 -1
  255. package/dist/fields/setDefaultBeforeDuplicate.js +2 -6
  256. package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
  257. package/dist/fields/sortableFieldTypes.js.map +1 -1
  258. package/dist/fields/validations.js.map +1 -1
  259. package/dist/fields/validations.spec.js.map +1 -1
  260. package/dist/globals/config/client.d.ts +9 -2
  261. package/dist/globals/config/client.d.ts.map +1 -1
  262. package/dist/globals/config/client.js +9 -3
  263. package/dist/globals/config/client.js.map +1 -1
  264. package/dist/globals/config/sanitize.d.ts.map +1 -1
  265. package/dist/globals/config/sanitize.js +2 -7
  266. package/dist/globals/config/sanitize.js.map +1 -1
  267. package/dist/globals/config/schema.d.ts.map +1 -1
  268. package/dist/globals/config/schema.js +1 -1
  269. package/dist/globals/config/schema.js.map +1 -1
  270. package/dist/globals/config/types.js.map +1 -1
  271. package/dist/globals/operations/docAccess.js.map +1 -1
  272. package/dist/globals/operations/findOne.js.map +1 -1
  273. package/dist/globals/operations/findVersionByID.js.map +1 -1
  274. package/dist/globals/operations/findVersions.js.map +1 -1
  275. package/dist/globals/operations/local/findOne.js.map +1 -1
  276. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  277. package/dist/globals/operations/local/findVersionByID.js +1 -0
  278. package/dist/globals/operations/local/findVersionByID.js.map +1 -1
  279. package/dist/globals/operations/local/findVersions.js.map +1 -1
  280. package/dist/globals/operations/local/index.js.map +1 -1
  281. package/dist/globals/operations/local/restoreVersion.js.map +1 -1
  282. package/dist/globals/operations/local/update.js.map +1 -1
  283. package/dist/globals/operations/restoreVersion.js.map +1 -1
  284. package/dist/globals/operations/update.js.map +1 -1
  285. package/dist/index.js.map +1 -1
  286. package/dist/preferences/deleteUserPreferences.js.map +1 -1
  287. package/dist/preferences/operations/delete.js.map +1 -1
  288. package/dist/preferences/operations/findOne.js.map +1 -1
  289. package/dist/preferences/operations/update.js.map +1 -1
  290. package/dist/preferences/preferencesCollection.js.map +1 -1
  291. package/dist/preferences/requestHandlers/delete.js.map +1 -1
  292. package/dist/preferences/requestHandlers/findOne.js.map +1 -1
  293. package/dist/preferences/requestHandlers/update.js.map +1 -1
  294. package/dist/preferences/types.js.map +1 -1
  295. package/dist/translations/getLocalI18n.d.ts +3 -2
  296. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  297. package/dist/translations/getLocalI18n.js +2 -4
  298. package/dist/translations/getLocalI18n.js.map +1 -1
  299. package/dist/types/constants.js.map +1 -1
  300. package/dist/types/index.js.map +1 -1
  301. package/dist/uploads/canResizeImage.js.map +1 -1
  302. package/dist/uploads/cropImage.js.map +1 -1
  303. package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
  304. package/dist/uploads/docWithFilenameExists.js.map +1 -1
  305. package/dist/uploads/fileExists.js.map +1 -1
  306. package/dist/uploads/formatFilesize.js.map +1 -1
  307. package/dist/uploads/generateFileData.js.map +1 -1
  308. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  309. package/dist/uploads/getBaseFields.js +5 -13
  310. package/dist/uploads/getBaseFields.js.map +1 -1
  311. package/dist/uploads/getExternalFile.js.map +1 -1
  312. package/dist/uploads/getFileByPath.js.map +1 -1
  313. package/dist/uploads/getImageSize.js.map +1 -1
  314. package/dist/uploads/getSafeFilename.js.map +1 -1
  315. package/dist/uploads/imageResizer.js.map +1 -1
  316. package/dist/uploads/isImage.js.map +1 -1
  317. package/dist/uploads/mimeTypeValidator.js.map +1 -1
  318. package/dist/uploads/mimeTypeValidator.spec.js.map +1 -1
  319. package/dist/uploads/saveBufferToFile.js.map +1 -1
  320. package/dist/uploads/types.js.map +1 -1
  321. package/dist/uploads/unlinkTempFiles.js.map +1 -1
  322. package/dist/uploads/uploadFiles.js.map +1 -1
  323. package/dist/utilities/checkDuplicateCollections.js.map +1 -1
  324. package/dist/utilities/combineMerge.js.map +1 -1
  325. package/dist/utilities/commitTransaction.js.map +1 -1
  326. package/dist/utilities/configToJSONSchema.js.map +1 -1
  327. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  328. package/dist/utilities/convertData.js.map +1 -1
  329. package/dist/utilities/createArrayFromCommaDelineated.js.map +1 -1
  330. package/dist/utilities/createLocalReq.d.ts +1 -1
  331. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  332. package/dist/utilities/createLocalReq.js +2 -2
  333. package/dist/utilities/createLocalReq.js.map +1 -1
  334. package/dist/utilities/deepCopyObject.js.map +1 -1
  335. package/dist/utilities/deepMerge.js.map +1 -1
  336. package/dist/utilities/fieldSchemaToJSON.js.map +1 -1
  337. package/dist/utilities/flattenTopLevelFields.js.map +1 -1
  338. package/dist/utilities/formatLabels.js.map +1 -1
  339. package/dist/utilities/formatLabels.spec.js.map +1 -1
  340. package/dist/utilities/getCSSVariable.js.map +1 -1
  341. package/dist/utilities/getCollectionIDFieldTypes.js.map +1 -1
  342. package/dist/utilities/getEntityPolicies.js.map +1 -1
  343. package/dist/utilities/getIDType.js.map +1 -1
  344. package/dist/utilities/getObjectDotNotation.js.map +1 -1
  345. package/dist/utilities/getUniqueListBy.js.map +1 -1
  346. package/dist/utilities/importWithoutClientFiles.js.map +1 -1
  347. package/dist/utilities/initTransaction.js.map +1 -1
  348. package/dist/utilities/isEntityHidden.js.map +1 -1
  349. package/dist/utilities/isNumber.js.map +1 -1
  350. package/dist/utilities/isPlainObject.js.map +1 -1
  351. package/dist/utilities/isReactComponent.js.map +1 -1
  352. package/dist/utilities/isValidID.js.map +1 -1
  353. package/dist/utilities/isolateObjectProperty.js.map +1 -1
  354. package/dist/utilities/killTransaction.js.map +1 -1
  355. package/dist/utilities/logger.js.map +1 -1
  356. package/dist/utilities/mapAsync.js.map +1 -1
  357. package/dist/utilities/mergeListSearchAndWhere.js.map +1 -1
  358. package/dist/utilities/overwriteMerge.js.map +1 -1
  359. package/dist/utilities/parseCookies.js.map +1 -1
  360. package/dist/utilities/sanitizeInternalFields.js.map +1 -1
  361. package/dist/utilities/setsAreEqual.js.map +1 -1
  362. package/dist/utilities/telemetry/events/adminInit.js.map +1 -1
  363. package/dist/utilities/telemetry/events/serverInit.js.map +1 -1
  364. package/dist/utilities/telemetry/index.js.map +1 -1
  365. package/dist/utilities/telemetry/oneWayHash.js.map +1 -1
  366. package/dist/utilities/timestamp.js.map +1 -1
  367. package/dist/utilities/toKebabCase.js.map +1 -1
  368. package/dist/utilities/wait.js.map +1 -1
  369. package/dist/utilities/wordBoundariesRegex.js.map +1 -1
  370. package/dist/versions/baseFields.d.ts +3 -1
  371. package/dist/versions/baseFields.d.ts.map +1 -1
  372. package/dist/versions/baseFields.js +3 -9
  373. package/dist/versions/baseFields.js.map +1 -1
  374. package/dist/versions/buildCollectionFields.js.map +1 -1
  375. package/dist/versions/buildGlobalFields.js.map +1 -1
  376. package/dist/versions/deleteCollectionVersions.js.map +1 -1
  377. package/dist/versions/drafts/appendVersionToQueryKey.js.map +1 -1
  378. package/dist/versions/drafts/getQueryDraftsSort.js.map +1 -1
  379. package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
  380. package/dist/versions/enforceMaxVersions.js.map +1 -1
  381. package/dist/versions/getLatestCollectionVersion.js.map +1 -1
  382. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  383. package/dist/versions/saveVersion.js.map +1 -1
  384. package/dist/versions/types.js.map +1 -1
  385. package/node.d.ts +1 -0
  386. package/node.js +1 -0
  387. package/package.json +2 -2
  388. package/utilities.d.ts +0 -1
  389. package/utilities.js +0 -1
  390. package/dist/translations/extractTranslations.d.ts +0 -2
  391. package/dist/translations/extractTranslations.d.ts.map +0 -1
  392. package/dist/translations/extractTranslations.js +0 -20
  393. package/dist/translations/extractTranslations.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/promise.ts"],"sourcesContent":["import merge from 'deepmerge'\n\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, FieldHookArgs, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { beforeDuplicate } from './beforeDuplicate.js'\nimport { getExistingRowDoc } from './getExistingRowDoc.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown>\n doc: Record<string, unknown>\n docWithLocales: Record<string, unknown>\n duplicate: boolean\n errors: { field: string; message: string }[]\n field: Field | TabAsField\n global: SanitizedGlobalConfig | null\n id?: number | string\n mergeLocaleActions: (() => Promise<void>)[]\n operation: Operation\n path: string\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\n siblingDocWithLocales?: Record<string, unknown>\n skipValidation: boolean\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// - beforeDuplicate hooks (if duplicate)\n// - Unflatten locales\n\nexport const promise = async ({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n}: Args): Promise<void> => {\n const passesCondition = field.admin?.condition\n ? Boolean(field.admin.condition(data, siblingData, { user: req.user }))\n : true\n let skipValidationFromHere = skipValidation || !passesCondition\n const { localization } = req.payload.config\n const defaultLocale = localization ? localization?.defaultLocale : 'en'\n const operationLocale = req.locale || defaultLocale\n\n if (fieldAffectsData(field)) {\n // skip validation if the field is localized and the incoming data is null\n if (field.localized && operationLocale !== defaultLocale) {\n if (['array', 'blocks'].includes(field.type) && siblingData[field.name] === null) {\n skipValidationFromHere = true\n }\n }\n\n // Execute hooks\n if (field.hooks?.beforeChange) {\n await field.hooks.beforeChange.reduce(async (priorHook, currentHook) => {\n await priorHook\n\n const hookedValue = await currentHook({\n collection,\n context,\n data,\n field,\n global,\n operation,\n originalDoc: doc,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n siblingData,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }, Promise.resolve())\n }\n\n // Validate\n if (!skipValidationFromHere && field.validate) {\n const valueToValidate = siblingData[field.name]\n let jsonError\n\n if (field.type === 'json' && typeof siblingData[field.name] === 'string') {\n try {\n JSON.parse(siblingData[field.name] as string)\n } catch (e) {\n jsonError = e\n }\n }\n\n const validationResult = await field.validate(valueToValidate, {\n ...field,\n id,\n data: merge(doc, data, { arrayMerge: (_, source) => source }),\n // @ts-expect-error-next-line\n jsonError,\n operation,\n req,\n siblingData: merge(siblingDoc, siblingData, { arrayMerge: (_, source) => source }),\n })\n\n if (typeof validationResult === 'string') {\n errors.push({\n field: `${path}${field.name}`,\n message: validationResult,\n })\n }\n }\n\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data,\n field,\n global: undefined,\n req,\n siblingData,\n value: siblingData[field.name],\n }\n\n // Push merge locale action if applicable\n if (localization && field.localized) {\n mergeLocaleActions.push(async () => {\n const localeData = await localization.localeCodes.reduce(\n async (localizedValuesPromise: Promise<Record<string, unknown>>, locale) => {\n const localizedValues = await localizedValuesPromise\n let fieldValue =\n locale === req.locale\n ? siblingData[field.name]\n : siblingDocWithLocales?.[field.name]?.[locale]\n\n if (duplicate && field.hooks?.beforeDuplicate?.length) {\n beforeDuplicateArgs.value = fieldValue\n fieldValue = await beforeDuplicate(beforeDuplicateArgs)\n }\n\n // const result = await localizedValues\n // update locale value if it's not undefined\n if (typeof fieldValue !== 'undefined') {\n return {\n ...localizedValues,\n [locale]: fieldValue,\n }\n }\n\n return localizedValuesPromise\n },\n Promise.resolve({}),\n )\n\n // If there are locales with data, set the data\n if (Object.keys(localeData).length > 0) {\n siblingData[field.name] = localeData\n }\n })\n } else if (duplicate && field.hooks?.beforeDuplicate?.length) {\n mergeLocaleActions.push(async () => {\n siblingData[field.name] = await beforeDuplicate(beforeDuplicateArgs)\n })\n }\n }\n\n switch (field.type) {\n case 'point': {\n // Transform point data for storage\n if (\n Array.isArray(siblingData[field.name]) &&\n siblingData[field.name][0] !== null &&\n siblingData[field.name][1] !== null\n ) {\n siblingData[field.name] = {\n type: 'Point',\n coordinates: [\n parseFloat(siblingData[field.name][0]),\n parseFloat(siblingData[field.name][1]),\n ],\n }\n }\n\n break\n }\n\n case 'group': {\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n if (typeof siblingDocWithLocales[field.name] !== 'object')\n siblingDocWithLocales[field.name] = {}\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.`,\n req,\n siblingData: siblingData[field.name] as Record<string, unknown>,\n siblingDoc: siblingDoc[field.name] as Record<string, unknown>,\n siblingDocWithLocales: siblingDocWithLocales[field.name] as Record<string, unknown>,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'array': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.${i}.`,\n req,\n siblingData: row,\n siblingDoc: getExistingRowDoc(row, siblingDoc[field.name]),\n siblingDocWithLocales: getExistingRowDoc(row, siblingDocWithLocales[field.name]),\n skipValidation: skipValidationFromHere,\n }),\n )\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'blocks': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const rowSiblingDoc = getExistingRowDoc(row, siblingDoc[field.name])\n const rowSiblingDocWithLocales = getExistingRowDoc(row, siblingDocWithLocales[field.name])\n\n const blockTypeToMatch = row.blockType || rowSiblingDoc.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: block.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.${i}.`,\n req,\n siblingData: row,\n siblingDoc: rowSiblingDoc,\n siblingDocWithLocales: rowSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n }),\n )\n }\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'row':\n case 'collapsible': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tab': {\n let tabPath = path\n let tabSiblingData = siblingData\n let tabSiblingDoc = siblingDoc\n let tabSiblingDocWithLocales = siblingDocWithLocales\n\n if (tabHasName(field)) {\n tabPath = `${path}${field.name}.`\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n if (typeof siblingDocWithLocales[field.name] !== 'object')\n siblingDocWithLocales[field.name] = {}\n\n tabSiblingData = siblingData[field.name] as Record<string, unknown>\n tabSiblingDoc = siblingDoc[field.name] as Record<string, unknown>\n tabSiblingDocWithLocales = siblingDocWithLocales[field.name] as Record<string, unknown>\n }\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: tabPath,\n req,\n siblingData: tabSiblingData,\n siblingDoc: tabSiblingDoc,\n siblingDocWithLocales: tabSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["merge","fieldAffectsData","tabHasName","beforeDuplicate","getExistingRowDoc","traverseFields","promise","id","collection","context","data","doc","docWithLocales","duplicate","errors","field","global","mergeLocaleActions","operation","path","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","passesCondition","admin","condition","Boolean","user","skipValidationFromHere","localization","payload","config","defaultLocale","operationLocale","locale","localized","includes","type","name","hooks","beforeChange","reduce","priorHook","currentHook","hookedValue","originalDoc","previousSiblingDoc","previousValue","value","undefined","Promise","resolve","validate","valueToValidate","jsonError","JSON","parse","e","validationResult","arrayMerge","_","source","push","message","beforeDuplicateArgs","localeData","localeCodes","localizedValuesPromise","localizedValues","fieldValue","length","Object","keys","Array","isArray","coordinates","parseFloat","fields","rows","promises","forEach","row","i","all","rowSiblingDoc","rowSiblingDocWithLocales","blockTypeToMatch","blockType","block","blocks","find","slug","tabPath","tabSiblingData","tabSiblingDoc","tabSiblingDocWithLocales","tabs","map","tab"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/promise.ts"],"sourcesContent":["import merge from 'deepmerge'\n\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, FieldHookArgs, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, tabHasName } from '../../config/types.js'\nimport { beforeDuplicate } from './beforeDuplicate.js'\nimport { getExistingRowDoc } from './getExistingRowDoc.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown>\n doc: Record<string, unknown>\n docWithLocales: Record<string, unknown>\n duplicate: boolean\n errors: { field: string; message: string }[]\n field: Field | TabAsField\n global: SanitizedGlobalConfig | null\n id?: number | string\n mergeLocaleActions: (() => Promise<void>)[]\n operation: Operation\n path: string\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\n siblingDocWithLocales?: Record<string, unknown>\n skipValidation: boolean\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// - beforeDuplicate hooks (if duplicate)\n// - Unflatten locales\n\nexport const promise = async ({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n}: Args): Promise<void> => {\n const passesCondition = field.admin?.condition\n ? Boolean(field.admin.condition(data, siblingData, { user: req.user }))\n : true\n let skipValidationFromHere = skipValidation || !passesCondition\n const { localization } = req.payload.config\n const defaultLocale = localization ? localization?.defaultLocale : 'en'\n const operationLocale = req.locale || defaultLocale\n\n if (fieldAffectsData(field)) {\n // skip validation if the field is localized and the incoming data is null\n if (field.localized && operationLocale !== defaultLocale) {\n if (['array', 'blocks'].includes(field.type) && siblingData[field.name] === null) {\n skipValidationFromHere = true\n }\n }\n\n // Execute hooks\n if (field.hooks?.beforeChange) {\n await field.hooks.beforeChange.reduce(async (priorHook, currentHook) => {\n await priorHook\n\n const hookedValue = await currentHook({\n collection,\n context,\n data,\n field,\n global,\n operation,\n originalDoc: doc,\n previousSiblingDoc: siblingDoc,\n previousValue: siblingDoc[field.name],\n req,\n siblingData,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }, Promise.resolve())\n }\n\n // Validate\n if (!skipValidationFromHere && field.validate) {\n const valueToValidate = siblingData[field.name]\n let jsonError\n\n if (field.type === 'json' && typeof siblingData[field.name] === 'string') {\n try {\n JSON.parse(siblingData[field.name] as string)\n } catch (e) {\n jsonError = e\n }\n }\n\n const validationResult = await field.validate(valueToValidate, {\n ...field,\n id,\n data: merge(doc, data, { arrayMerge: (_, source) => source }),\n // @ts-expect-error-next-line\n jsonError,\n operation,\n req,\n siblingData: merge(siblingDoc, siblingData, { arrayMerge: (_, source) => source }),\n })\n\n if (typeof validationResult === 'string') {\n errors.push({\n field: `${path}${field.name}`,\n message: validationResult,\n })\n }\n }\n\n const beforeDuplicateArgs: FieldHookArgs = {\n collection,\n context,\n data,\n field,\n global: undefined,\n req,\n siblingData,\n value: siblingData[field.name],\n }\n\n // Push merge locale action if applicable\n if (localization && field.localized) {\n mergeLocaleActions.push(async () => {\n const localeData = await localization.localeCodes.reduce(\n async (localizedValuesPromise: Promise<Record<string, unknown>>, locale) => {\n const localizedValues = await localizedValuesPromise\n let fieldValue =\n locale === req.locale\n ? siblingData[field.name]\n : siblingDocWithLocales?.[field.name]?.[locale]\n\n if (duplicate && field.hooks?.beforeDuplicate?.length) {\n beforeDuplicateArgs.value = fieldValue\n fieldValue = await beforeDuplicate(beforeDuplicateArgs)\n }\n\n // const result = await localizedValues\n // update locale value if it's not undefined\n if (typeof fieldValue !== 'undefined') {\n return {\n ...localizedValues,\n [locale]: fieldValue,\n }\n }\n\n return localizedValuesPromise\n },\n Promise.resolve({}),\n )\n\n // If there are locales with data, set the data\n if (Object.keys(localeData).length > 0) {\n siblingData[field.name] = localeData\n }\n })\n } else if (duplicate && field.hooks?.beforeDuplicate?.length) {\n mergeLocaleActions.push(async () => {\n siblingData[field.name] = await beforeDuplicate(beforeDuplicateArgs)\n })\n }\n }\n\n switch (field.type) {\n case 'point': {\n // Transform point data for storage\n if (\n Array.isArray(siblingData[field.name]) &&\n siblingData[field.name][0] !== null &&\n siblingData[field.name][1] !== null\n ) {\n siblingData[field.name] = {\n type: 'Point',\n coordinates: [\n parseFloat(siblingData[field.name][0]),\n parseFloat(siblingData[field.name][1]),\n ],\n }\n }\n\n break\n }\n\n case 'group': {\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n if (typeof siblingDocWithLocales[field.name] !== 'object')\n siblingDocWithLocales[field.name] = {}\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.`,\n req,\n siblingData: siblingData[field.name] as Record<string, unknown>,\n siblingDoc: siblingDoc[field.name] as Record<string, unknown>,\n siblingDocWithLocales: siblingDocWithLocales[field.name] as Record<string, unknown>,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'array': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.${i}.`,\n req,\n siblingData: row,\n siblingDoc: getExistingRowDoc(row, siblingDoc[field.name]),\n siblingDocWithLocales: getExistingRowDoc(row, siblingDocWithLocales[field.name]),\n skipValidation: skipValidationFromHere,\n }),\n )\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'blocks': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row, i) => {\n const rowSiblingDoc = getExistingRowDoc(row, siblingDoc[field.name])\n const rowSiblingDocWithLocales = getExistingRowDoc(row, siblingDocWithLocales[field.name])\n\n const blockTypeToMatch = row.blockType || rowSiblingDoc.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: block.fields,\n global,\n mergeLocaleActions,\n operation,\n path: `${path}${field.name}.${i}.`,\n req,\n siblingData: row,\n siblingDoc: rowSiblingDoc,\n siblingDocWithLocales: rowSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n }),\n )\n }\n })\n\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'row':\n case 'collapsible': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tab': {\n let tabPath = path\n let tabSiblingData = siblingData\n let tabSiblingDoc = siblingDoc\n let tabSiblingDocWithLocales = siblingDocWithLocales\n\n if (tabHasName(field)) {\n tabPath = `${path}${field.name}.`\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n if (typeof siblingDocWithLocales[field.name] !== 'object')\n siblingDocWithLocales[field.name] = {}\n\n tabSiblingData = siblingData[field.name] as Record<string, unknown>\n tabSiblingDoc = siblingDoc[field.name] as Record<string, unknown>\n tabSiblingDocWithLocales = siblingDocWithLocales[field.name] as Record<string, unknown>\n }\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.fields,\n global,\n mergeLocaleActions,\n operation,\n path: tabPath,\n req,\n siblingData: tabSiblingData,\n siblingDoc: tabSiblingDoc,\n siblingDocWithLocales: tabSiblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation: skipValidationFromHere,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["merge","fieldAffectsData","tabHasName","beforeDuplicate","getExistingRowDoc","traverseFields","promise","id","collection","context","data","doc","docWithLocales","duplicate","errors","field","global","mergeLocaleActions","operation","path","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","passesCondition","admin","condition","Boolean","user","skipValidationFromHere","localization","payload","config","defaultLocale","operationLocale","locale","localized","includes","type","name","hooks","beforeChange","reduce","priorHook","currentHook","hookedValue","originalDoc","previousSiblingDoc","previousValue","value","undefined","Promise","resolve","validate","valueToValidate","jsonError","JSON","parse","e","validationResult","arrayMerge","_","source","push","message","beforeDuplicateArgs","localeData","localeCodes","localizedValuesPromise","localizedValues","fieldValue","length","Object","keys","Array","isArray","coordinates","parseFloat","fields","rows","promises","forEach","row","i","all","rowSiblingDoc","rowSiblingDocWithLocales","blockTypeToMatch","blockType","block","blocks","find","slug","tabPath","tabSiblingData","tabSiblingDoc","tabSiblingDocWithLocales","tabs","map","tab"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown>\n doc: Record<string, unknown>\n docWithLocales: Record<string, unknown>\n duplicate: boolean\n errors: { field: string; message: string }[]\n fields: (Field | TabAsField)[]\n global: SanitizedGlobalConfig | null\n id?: number | string\n mergeLocaleActions: (() => Promise<void>)[]\n operation: Operation\n path: string\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\n siblingDocWithLocales: Record<string, unknown>\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\n */\nexport const traverseFields = async ({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n}: Args): Promise<void> => {\n const promises = []\n\n fields.forEach((field) => {\n promises.push(\n promise({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n }),\n )\n })\n\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","collection","context","data","doc","docWithLocales","duplicate","errors","fields","global","mergeLocaleActions","operation","path","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","promises","forEach","field","push","Promise","all"],"mappings":"AAKA,SAASA,OAAO,QAAQ,eAAc;AAuBtC;;;;;;;CAOC,GACD,OAAO,MAAMC,iBAAiB,OAAO,EACnCC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,cAAc,EACdC,SAAS,EACTC,MAAM,EACNC,MAAM,EACNC,MAAM,EACNC,kBAAkB,EAClBC,SAAS,EACTC,IAAI,EACJC,GAAG,EACHC,WAAW,EACXC,UAAU,EACVC,qBAAqB,EACrBC,cAAc,EACT;IACL,MAAMC,WAAW,EAAE;IAEnBV,OAAOW,OAAO,CAAC,CAACC;QACdF,SAASG,IAAI,CACXvB,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAa;YACAX;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;IAEJ;IAEA,MAAMK,QAAQC,GAAG,CAACL;AACpB,EAAC"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeChange/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { Operation, PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown>\n doc: Record<string, unknown>\n docWithLocales: Record<string, unknown>\n duplicate: boolean\n errors: { field: string; message: string }[]\n fields: (Field | TabAsField)[]\n global: SanitizedGlobalConfig | null\n id?: number | string\n mergeLocaleActions: (() => Promise<void>)[]\n operation: Operation\n path: string\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\n siblingDocWithLocales: Record<string, unknown>\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\n */\nexport const traverseFields = async ({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n fields,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n}: Args): Promise<void> => {\n const promises = []\n\n fields.forEach((field) => {\n promises.push(\n promise({\n id,\n collection,\n context,\n data,\n doc,\n docWithLocales,\n duplicate,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n siblingData,\n siblingDoc,\n siblingDocWithLocales,\n skipValidation,\n }),\n )\n })\n\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","collection","context","data","doc","docWithLocales","duplicate","errors","fields","global","mergeLocaleActions","operation","path","req","siblingData","siblingDoc","siblingDocWithLocales","skipValidation","promises","forEach","field","push","Promise","all"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAKA,SAASA,OAAO,QAAQ,eAAc;AAuBtC;;;;;;;CAOC,GACD,OAAO,MAAMC,iBAAiB,OAAO,EACnCC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,cAAc,EACdC,SAAS,EACTC,MAAM,EACNC,MAAM,EACNC,MAAM,EACNC,kBAAkB,EAClBC,SAAS,EACTC,IAAI,EACJC,GAAG,EACHC,WAAW,EACXC,UAAU,EACVC,qBAAqB,EACrBC,cAAc,EACT;IACL,MAAMC,WAAW,EAAE;IAEnBV,OAAOW,OAAO,CAAC,CAACC;QACdF,SAASG,IAAI,CACXvB,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAa;YACAX;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;IAEJ;IAEA,MAAMK,QAAQC,GAAG,CAACL;AACpB,EAAC"}
@@ -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 { PayloadRequest, RequestContext } from '../../../types/index.js'\n\nimport { deepCopyObject } from '../../../utilities/deepCopyObject.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown> | T\n doc?: Record<string, unknown> | T\n duplicate?: boolean\n global: SanitizedGlobalConfig | null\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 Record<string, unknown>>({\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 const data = deepCopyObject(incomingData)\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: collection?.fields || global?.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: data,\n siblingDoc: doc,\n })\n\n return data\n}\n"],"names":["deepCopyObject","traverseFields","beforeValidate","id","collection","context","data","incomingData","doc","global","operation","overrideAccess","req","fields","siblingData","siblingDoc"],"mappings":"AAIA,SAASA,cAAc,QAAQ,uCAAsC;AACrE,SAASC,cAAc,QAAQ,sBAAqB;AAepD;;;;;;;CAOC,GACD,OAAO,MAAMC,iBAAiB,OAA0C,EACtEC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAMC,YAAY,EAClBC,GAAG,EACHC,MAAM,EACNC,SAAS,EACTC,cAAc,EACdC,GAAG,EACK;IACR,MAAMN,OAAON,eAAeO;IAE5B,MAAMN,eAAe;QACnBE;QACAC;QACAC;QACAC;QACAE;QACAK,QAAQT,YAAYS,UAAUJ,QAAQI;QACtCJ;QACAC;QACAC;QACAC;QACAE,aAAaR;QACbS,YAAYP;IACd;IAEA,OAAOF;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 { PayloadRequest, RequestContext } from '../../../types/index.js'\n\nimport { deepCopyObject } from '../../../utilities/deepCopyObject.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: Record<string, unknown> | T\n doc?: Record<string, unknown> | T\n duplicate?: boolean\n global: SanitizedGlobalConfig | null\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 Record<string, unknown>>({\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 const data = deepCopyObject(incomingData)\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: collection?.fields || global?.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: data,\n siblingDoc: doc,\n })\n\n return data\n}\n"],"names":["deepCopyObject","traverseFields","beforeValidate","id","collection","context","data","incomingData","doc","global","operation","overrideAccess","req","fields","siblingData","siblingDoc"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAIA,SAASA,cAAc,QAAQ,uCAAsC;AACrE,SAASC,cAAc,QAAQ,sBAAqB;AAepD;;;;;;;CAOC,GACD,OAAO,MAAMC,iBAAiB,OAA0C,EACtEC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,MAAMC,YAAY,EAClBC,GAAG,EACHC,MAAM,EACNC,SAAS,EACTC,cAAc,EACdC,GAAG,EACK;IACR,MAAMN,OAAON,eAAeO;IAE5B,MAAMN,eAAe;QACnBE;QACAC;QACAC;QACAC;QACAE;QACAK,QAAQT,YAAYS,UAAUJ,QAAQI;QACtCJ;QACAC;QACAC;QACAC;QACAE,aAAaR;QACbS,YAAYP;IACd;IAEA,OAAOF;AACT,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/promise.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, tabHasName, valueIsValueWithRelation } from '../../config/types.js'\nimport getValueWithDefault from '../../getDefaultValue.js'\nimport { cloneDataFromOriginalDoc } from '../beforeChange/cloneDataFromOriginalDoc.js'\nimport { getExistingRowDoc } from '../beforeChange/getExistingRowDoc.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: T\n doc: T\n field: Field | TabAsField\n global: SanitizedGlobalConfig | null\n id?: number | string\n operation: 'create' | 'update'\n overrideAccess: boolean\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\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 promise = async <T>({\n id,\n collection,\n context,\n data,\n doc,\n field,\n global,\n operation,\n overrideAccess,\n req,\n siblingData,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n if (fieldAffectsData(field)) {\n if (field.name === 'id') {\n if (field.type === 'number' && typeof siblingData[field.name] === 'string') {\n const value = siblingData[field.name] as string\n\n siblingData[field.name] = parseFloat(value)\n }\n\n if (\n field.type === 'text' &&\n typeof siblingData[field.name]?.toString === 'function' &&\n typeof siblingData[field.name] !== 'string'\n ) {\n siblingData[field.name] = siblingData[field.name].toString()\n }\n }\n\n // Sanitize incoming data\n switch (field.type) {\n case 'number': {\n if (typeof siblingData[field.name] === 'string') {\n const value = siblingData[field.name] as string\n const trimmed = value.trim()\n siblingData[field.name] = trimmed.length === 0 ? null : parseFloat(trimmed)\n }\n\n break\n }\n\n case 'point': {\n if (Array.isArray(siblingData[field.name])) {\n siblingData[field.name] = (siblingData[field.name] as string[]).map((coordinate, i) => {\n if (typeof coordinate === 'string') {\n const value = siblingData[field.name][i] as string\n const trimmed = value.trim()\n return trimmed.length === 0 ? null : parseFloat(trimmed)\n }\n return coordinate\n })\n }\n\n break\n }\n\n case 'checkbox': {\n if (siblingData[field.name] === 'true') siblingData[field.name] = true\n if (siblingData[field.name] === 'false') siblingData[field.name] = false\n if (siblingData[field.name] === '') siblingData[field.name] = false\n\n break\n }\n\n case 'richText': {\n if (typeof siblingData[field.name] === 'string') {\n try {\n const richTextJSON = JSON.parse(siblingData[field.name] as string)\n siblingData[field.name] = richTextJSON\n } catch {\n // Disregard this data as it is not valid.\n // Will be reported to user by field validation\n }\n }\n\n break\n }\n\n case 'relationship':\n case 'upload': {\n if (\n siblingData[field.name] === '' ||\n siblingData[field.name] === 'none' ||\n siblingData[field.name] === 'null' ||\n siblingData[field.name] === null\n ) {\n if (field.type === 'relationship' && field.hasMany === true) {\n siblingData[field.name] = []\n } else {\n siblingData[field.name] = null\n }\n }\n\n const value = siblingData[field.name]\n\n if (Array.isArray(field.relationTo)) {\n if (Array.isArray(value)) {\n value.forEach((relatedDoc: { relationTo: string; value: unknown }, i) => {\n const relatedCollection = req.payload.config.collections.find(\n (collection) => collection.slug === relatedDoc.relationTo,\n )\n const relationshipIDField = relatedCollection.fields.find(\n (collectionField) =>\n fieldAffectsData(collectionField) && collectionField.name === 'id',\n )\n if (relationshipIDField?.type === 'number') {\n siblingData[field.name][i] = {\n ...relatedDoc,\n value: parseFloat(relatedDoc.value as string),\n }\n }\n })\n }\n if (\n field.type === 'relationship' &&\n field.hasMany !== true &&\n valueIsValueWithRelation(value)\n ) {\n const relatedCollection = req.payload.config.collections.find(\n (collection) => collection.slug === value.relationTo,\n )\n const relationshipIDField = relatedCollection.fields.find(\n (collectionField) =>\n fieldAffectsData(collectionField) && collectionField.name === 'id',\n )\n if (relationshipIDField?.type === 'number') {\n siblingData[field.name] = { ...value, value: parseFloat(value.value as string) }\n }\n }\n } else {\n if (Array.isArray(value)) {\n value.forEach((relatedDoc: unknown, i) => {\n const relatedCollection = req.payload.config.collections.find(\n (collection) => collection.slug === field.relationTo,\n )\n const relationshipIDField = relatedCollection.fields.find(\n (collectionField) =>\n fieldAffectsData(collectionField) && collectionField.name === 'id',\n )\n if (relationshipIDField?.type === 'number') {\n siblingData[field.name][i] = parseFloat(relatedDoc as string)\n }\n })\n }\n if (field.type === 'relationship' && field.hasMany !== true && value) {\n const relatedCollection = req.payload.config.collections.find(\n (collection) => collection.slug === field.relationTo,\n )\n const relationshipIDField = relatedCollection.fields.find(\n (collectionField) =>\n fieldAffectsData(collectionField) && collectionField.name === 'id',\n )\n if (relationshipIDField?.type === 'number') {\n siblingData[field.name] = parseFloat(value as string)\n }\n }\n }\n break\n }\n\n case 'array':\n case 'blocks': {\n // Handle cases of arrays being intentionally set to 0\n if (siblingData[field.name] === '0' || siblingData[field.name] === 0) {\n siblingData[field.name] = []\n }\n\n break\n }\n\n default: {\n break\n }\n }\n\n // Execute hooks\n if (field.hooks?.beforeValidate) {\n await field.hooks.beforeValidate.reduce(async (priorHook, currentHook) => {\n await priorHook\n\n const hookedValue = await currentHook({\n collection,\n context,\n data,\n field,\n global,\n operation,\n originalDoc: doc,\n req,\n siblingData,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }, Promise.resolve())\n }\n\n // Execute access control\n if (field.access && field.access[operation]) {\n const result = overrideAccess\n ? true\n : await field.access[operation]({ id, data, doc, req, siblingData })\n\n if (!result) {\n delete siblingData[field.name]\n }\n }\n\n if (typeof siblingData[field.name] === 'undefined') {\n // If no incoming data, but existing document data is found, merge it in\n if (typeof siblingDoc[field.name] !== 'undefined') {\n siblingData[field.name] = cloneDataFromOriginalDoc(siblingDoc[field.name])\n\n // Otherwise compute default value\n } else if (typeof field.defaultValue !== 'undefined') {\n siblingData[field.name] = await getValueWithDefault({\n defaultValue: field.defaultValue,\n locale: req.locale,\n user: req.user,\n value: siblingData[field.name],\n })\n }\n }\n }\n\n // Traverse subfields\n switch (field.type) {\n case 'group': {\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n\n const groupData = siblingData[field.name] as Record<string, unknown>\n const groupDoc = siblingDoc[field.name] as Record<string, unknown>\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: groupData,\n siblingDoc: groupDoc,\n })\n\n break\n }\n\n case 'array': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: row,\n siblingDoc: getExistingRowDoc(row, siblingDoc[field.name]),\n }),\n )\n })\n await Promise.all(promises)\n }\n break\n }\n\n case 'blocks': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row) => {\n const rowSiblingDoc = getExistingRowDoc(row, siblingDoc[field.name])\n const blockTypeToMatch = row.blockType || rowSiblingDoc.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n row.blockType = blockTypeToMatch\n\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: block.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: row,\n siblingDoc: rowSiblingDoc,\n }),\n )\n }\n })\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'row':\n case 'collapsible': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData,\n siblingDoc,\n })\n\n break\n }\n\n case 'tab': {\n let tabSiblingData\n let tabSiblingDoc\n if (tabHasName(field)) {\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n\n tabSiblingData = siblingData[field.name] as Record<string, unknown>\n tabSiblingDoc = siblingDoc[field.name] as Record<string, unknown>\n } else {\n tabSiblingData = siblingData\n tabSiblingDoc = siblingDoc\n }\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: tabSiblingData,\n siblingDoc: tabSiblingDoc,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n global,\n operation,\n overrideAccess,\n req,\n siblingData,\n siblingDoc,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["fieldAffectsData","tabHasName","valueIsValueWithRelation","getValueWithDefault","cloneDataFromOriginalDoc","getExistingRowDoc","traverseFields","promise","id","collection","context","data","doc","field","global","operation","overrideAccess","req","siblingData","siblingDoc","name","type","value","parseFloat","toString","trimmed","trim","length","Array","isArray","map","coordinate","i","richTextJSON","JSON","parse","hasMany","relationTo","forEach","relatedDoc","relatedCollection","payload","config","collections","find","slug","relationshipIDField","fields","collectionField","hooks","beforeValidate","reduce","priorHook","currentHook","hookedValue","originalDoc","undefined","Promise","resolve","access","result","defaultValue","locale","user","groupData","groupDoc","rows","promises","row","push","all","rowSiblingDoc","blockTypeToMatch","blockType","block","blocks","tabSiblingData","tabSiblingDoc","tabs","tab"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/promise.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { fieldAffectsData, tabHasName, valueIsValueWithRelation } from '../../config/types.js'\nimport getValueWithDefault from '../../getDefaultValue.js'\nimport { cloneDataFromOriginalDoc } from '../beforeChange/cloneDataFromOriginalDoc.js'\nimport { getExistingRowDoc } from '../beforeChange/getExistingRowDoc.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args<T> = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: T\n doc: T\n field: Field | TabAsField\n global: SanitizedGlobalConfig | null\n id?: number | string\n operation: 'create' | 'update'\n overrideAccess: boolean\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\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 promise = async <T>({\n id,\n collection,\n context,\n data,\n doc,\n field,\n global,\n operation,\n overrideAccess,\n req,\n siblingData,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n if (fieldAffectsData(field)) {\n if (field.name === 'id') {\n if (field.type === 'number' && typeof siblingData[field.name] === 'string') {\n const value = siblingData[field.name] as string\n\n siblingData[field.name] = parseFloat(value)\n }\n\n if (\n field.type === 'text' &&\n typeof siblingData[field.name]?.toString === 'function' &&\n typeof siblingData[field.name] !== 'string'\n ) {\n siblingData[field.name] = siblingData[field.name].toString()\n }\n }\n\n // Sanitize incoming data\n switch (field.type) {\n case 'number': {\n if (typeof siblingData[field.name] === 'string') {\n const value = siblingData[field.name] as string\n const trimmed = value.trim()\n siblingData[field.name] = trimmed.length === 0 ? null : parseFloat(trimmed)\n }\n\n break\n }\n\n case 'point': {\n if (Array.isArray(siblingData[field.name])) {\n siblingData[field.name] = (siblingData[field.name] as string[]).map((coordinate, i) => {\n if (typeof coordinate === 'string') {\n const value = siblingData[field.name][i] as string\n const trimmed = value.trim()\n return trimmed.length === 0 ? null : parseFloat(trimmed)\n }\n return coordinate\n })\n }\n\n break\n }\n\n case 'checkbox': {\n if (siblingData[field.name] === 'true') siblingData[field.name] = true\n if (siblingData[field.name] === 'false') siblingData[field.name] = false\n if (siblingData[field.name] === '') siblingData[field.name] = false\n\n break\n }\n\n case 'richText': {\n if (typeof siblingData[field.name] === 'string') {\n try {\n const richTextJSON = JSON.parse(siblingData[field.name] as string)\n siblingData[field.name] = richTextJSON\n } catch {\n // Disregard this data as it is not valid.\n // Will be reported to user by field validation\n }\n }\n\n break\n }\n\n case 'relationship':\n case 'upload': {\n if (\n siblingData[field.name] === '' ||\n siblingData[field.name] === 'none' ||\n siblingData[field.name] === 'null' ||\n siblingData[field.name] === null\n ) {\n if (field.type === 'relationship' && field.hasMany === true) {\n siblingData[field.name] = []\n } else {\n siblingData[field.name] = null\n }\n }\n\n const value = siblingData[field.name]\n\n if (Array.isArray(field.relationTo)) {\n if (Array.isArray(value)) {\n value.forEach((relatedDoc: { relationTo: string; value: unknown }, i) => {\n const relatedCollection = req.payload.config.collections.find(\n (collection) => collection.slug === relatedDoc.relationTo,\n )\n const relationshipIDField = relatedCollection.fields.find(\n (collectionField) =>\n fieldAffectsData(collectionField) && collectionField.name === 'id',\n )\n if (relationshipIDField?.type === 'number') {\n siblingData[field.name][i] = {\n ...relatedDoc,\n value: parseFloat(relatedDoc.value as string),\n }\n }\n })\n }\n if (\n field.type === 'relationship' &&\n field.hasMany !== true &&\n valueIsValueWithRelation(value)\n ) {\n const relatedCollection = req.payload.config.collections.find(\n (collection) => collection.slug === value.relationTo,\n )\n const relationshipIDField = relatedCollection.fields.find(\n (collectionField) =>\n fieldAffectsData(collectionField) && collectionField.name === 'id',\n )\n if (relationshipIDField?.type === 'number') {\n siblingData[field.name] = { ...value, value: parseFloat(value.value as string) }\n }\n }\n } else {\n if (Array.isArray(value)) {\n value.forEach((relatedDoc: unknown, i) => {\n const relatedCollection = req.payload.config.collections.find(\n (collection) => collection.slug === field.relationTo,\n )\n const relationshipIDField = relatedCollection.fields.find(\n (collectionField) =>\n fieldAffectsData(collectionField) && collectionField.name === 'id',\n )\n if (relationshipIDField?.type === 'number') {\n siblingData[field.name][i] = parseFloat(relatedDoc as string)\n }\n })\n }\n if (field.type === 'relationship' && field.hasMany !== true && value) {\n const relatedCollection = req.payload.config.collections.find(\n (collection) => collection.slug === field.relationTo,\n )\n const relationshipIDField = relatedCollection.fields.find(\n (collectionField) =>\n fieldAffectsData(collectionField) && collectionField.name === 'id',\n )\n if (relationshipIDField?.type === 'number') {\n siblingData[field.name] = parseFloat(value as string)\n }\n }\n }\n break\n }\n\n case 'array':\n case 'blocks': {\n // Handle cases of arrays being intentionally set to 0\n if (siblingData[field.name] === '0' || siblingData[field.name] === 0) {\n siblingData[field.name] = []\n }\n\n break\n }\n\n default: {\n break\n }\n }\n\n // Execute hooks\n if (field.hooks?.beforeValidate) {\n await field.hooks.beforeValidate.reduce(async (priorHook, currentHook) => {\n await priorHook\n\n const hookedValue = await currentHook({\n collection,\n context,\n data,\n field,\n global,\n operation,\n originalDoc: doc,\n req,\n siblingData,\n value: siblingData[field.name],\n })\n\n if (hookedValue !== undefined) {\n siblingData[field.name] = hookedValue\n }\n }, Promise.resolve())\n }\n\n // Execute access control\n if (field.access && field.access[operation]) {\n const result = overrideAccess\n ? true\n : await field.access[operation]({ id, data, doc, req, siblingData })\n\n if (!result) {\n delete siblingData[field.name]\n }\n }\n\n if (typeof siblingData[field.name] === 'undefined') {\n // If no incoming data, but existing document data is found, merge it in\n if (typeof siblingDoc[field.name] !== 'undefined') {\n siblingData[field.name] = cloneDataFromOriginalDoc(siblingDoc[field.name])\n\n // Otherwise compute default value\n } else if (typeof field.defaultValue !== 'undefined') {\n siblingData[field.name] = await getValueWithDefault({\n defaultValue: field.defaultValue,\n locale: req.locale,\n user: req.user,\n value: siblingData[field.name],\n })\n }\n }\n }\n\n // Traverse subfields\n switch (field.type) {\n case 'group': {\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n\n const groupData = siblingData[field.name] as Record<string, unknown>\n const groupDoc = siblingDoc[field.name] as Record<string, unknown>\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: groupData,\n siblingDoc: groupDoc,\n })\n\n break\n }\n\n case 'array': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row) => {\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: row,\n siblingDoc: getExistingRowDoc(row, siblingDoc[field.name]),\n }),\n )\n })\n await Promise.all(promises)\n }\n break\n }\n\n case 'blocks': {\n const rows = siblingData[field.name]\n\n if (Array.isArray(rows)) {\n const promises = []\n rows.forEach((row) => {\n const rowSiblingDoc = getExistingRowDoc(row, siblingDoc[field.name])\n const blockTypeToMatch = row.blockType || rowSiblingDoc.blockType\n const block = field.blocks.find((blockType) => blockType.slug === blockTypeToMatch)\n\n if (block) {\n row.blockType = blockTypeToMatch\n\n promises.push(\n traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: block.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: row,\n siblingDoc: rowSiblingDoc,\n }),\n )\n }\n })\n await Promise.all(promises)\n }\n\n break\n }\n\n case 'row':\n case 'collapsible': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData,\n siblingDoc,\n })\n\n break\n }\n\n case 'tab': {\n let tabSiblingData\n let tabSiblingDoc\n if (tabHasName(field)) {\n if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {}\n if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {}\n\n tabSiblingData = siblingData[field.name] as Record<string, unknown>\n tabSiblingDoc = siblingDoc[field.name] as Record<string, unknown>\n } else {\n tabSiblingData = siblingData\n tabSiblingDoc = siblingDoc\n }\n\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: field.fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData: tabSiblingData,\n siblingDoc: tabSiblingDoc,\n })\n\n break\n }\n\n case 'tabs': {\n await traverseFields({\n id,\n collection,\n context,\n data,\n doc,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n global,\n operation,\n overrideAccess,\n req,\n siblingData,\n siblingDoc,\n })\n\n break\n }\n\n default: {\n break\n }\n }\n}\n"],"names":["fieldAffectsData","tabHasName","valueIsValueWithRelation","getValueWithDefault","cloneDataFromOriginalDoc","getExistingRowDoc","traverseFields","promise","id","collection","context","data","doc","field","global","operation","overrideAccess","req","siblingData","siblingDoc","name","type","value","parseFloat","toString","trimmed","trim","length","Array","isArray","map","coordinate","i","richTextJSON","JSON","parse","hasMany","relationTo","forEach","relatedDoc","relatedCollection","payload","config","collections","find","slug","relationshipIDField","fields","collectionField","hooks","beforeValidate","reduce","priorHook","currentHook","hookedValue","originalDoc","undefined","Promise","resolve","access","result","defaultValue","locale","user","groupData","groupDoc","rows","promises","row","push","all","rowSiblingDoc","blockTypeToMatch","blockType","block","blocks","tabSiblingData","tabSiblingDoc","tabs","tab"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args<T> = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: T\n doc: T\n fields: (Field | TabAsField)[]\n global: SanitizedGlobalConfig | null\n id?: number | string\n operation: 'create' | 'update'\n overrideAccess: boolean\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\n}\n\nexport const traverseFields = async <T>({\n id,\n collection,\n context,\n data,\n doc,\n fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n const promises = []\n fields.forEach((field) => {\n promises.push(\n promise({\n id,\n collection,\n context,\n data,\n doc,\n field,\n global,\n operation,\n overrideAccess,\n req,\n siblingData,\n siblingDoc,\n }),\n )\n })\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","collection","context","data","doc","fields","global","operation","overrideAccess","req","siblingData","siblingDoc","promises","forEach","field","push","Promise","all"],"mappings":"AAKA,SAASA,OAAO,QAAQ,eAAc;AAiBtC,OAAO,MAAMC,iBAAiB,OAAU,EACtCC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,MAAM,EACNC,MAAM,EACNC,SAAS,EACTC,cAAc,EACdC,GAAG,EACHC,WAAW,EACXC,UAAU,EACF;IACR,MAAMC,WAAW,EAAE;IACnBP,OAAOQ,OAAO,CAAC,CAACC;QACdF,SAASG,IAAI,CACXjB,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAC;YACAU;YACAR;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;IAEJ;IACA,MAAMK,QAAQC,GAAG,CAACL;AACpB,EAAC"}
1
+ {"version":3,"sources":["../../../../src/fields/hooks/beforeValidate/traverseFields.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../../collections/config/types.js'\nimport type { SanitizedGlobalConfig } from '../../../globals/config/types.js'\nimport type { PayloadRequest, RequestContext } from '../../../types/index.js'\nimport type { Field, TabAsField } from '../../config/types.js'\n\nimport { promise } from './promise.js'\n\ntype Args<T> = {\n collection: SanitizedCollectionConfig | null\n context: RequestContext\n data: T\n doc: T\n fields: (Field | TabAsField)[]\n global: SanitizedGlobalConfig | null\n id?: number | string\n operation: 'create' | 'update'\n overrideAccess: boolean\n req: PayloadRequest\n siblingData: Record<string, unknown>\n siblingDoc: Record<string, unknown>\n}\n\nexport const traverseFields = async <T>({\n id,\n collection,\n context,\n data,\n doc,\n fields,\n global,\n operation,\n overrideAccess,\n req,\n siblingData,\n siblingDoc,\n}: Args<T>): Promise<void> => {\n const promises = []\n fields.forEach((field) => {\n promises.push(\n promise({\n id,\n collection,\n context,\n data,\n doc,\n field,\n global,\n operation,\n overrideAccess,\n req,\n siblingData,\n siblingDoc,\n }),\n )\n })\n await Promise.all(promises)\n}\n"],"names":["promise","traverseFields","id","collection","context","data","doc","fields","global","operation","overrideAccess","req","siblingData","siblingDoc","promises","forEach","field","push","Promise","all"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;","mappings":"AAKA,SAASA,OAAO,QAAQ,eAAc;AAiBtC,OAAO,MAAMC,iBAAiB,OAAU,EACtCC,EAAE,EACFC,UAAU,EACVC,OAAO,EACPC,IAAI,EACJC,GAAG,EACHC,MAAM,EACNC,MAAM,EACNC,SAAS,EACTC,cAAc,EACdC,GAAG,EACHC,WAAW,EACXC,UAAU,EACF;IACR,MAAMC,WAAW,EAAE;IACnBP,OAAOQ,OAAO,CAAC,CAACC;QACdF,SAASG,IAAI,CACXjB,QAAQ;YACNE;YACAC;YACAC;YACAC;YACAC;YACAU;YACAR;YACAC;YACAC;YACAC;YACAC;YACAC;QACF;IAEJ;IACA,MAAMK,QAAQC,GAAG,CAACL;AACpB,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/mergeBaseFields.ts"],"sourcesContent":["import merge from 'deepmerge'\n\nimport type { Field, FieldWithSubFields } from './config/types.js'\n\nimport { fieldAffectsData, fieldHasSubFields } from './config/types.js'\n\nconst mergeBaseFields = (fields: Field[], baseFields: Field[]): Field[] => {\n const mergedFields = [...(fields || [])]\n\n baseFields.forEach((baseField) => {\n let matchedIndex = null\n\n if (fieldAffectsData(baseField)) {\n const match = mergedFields.find((field, i) => {\n if (fieldAffectsData(field) && field.name === baseField.name) {\n matchedIndex = i\n return true\n }\n\n return false\n })\n\n if (match) {\n const matchCopy: Field = { ...match }\n mergedFields.splice(matchedIndex, 1)\n\n const mergedField = merge<Field>(baseField, matchCopy)\n\n if (fieldHasSubFields(baseField) && fieldHasSubFields(matchCopy)) {\n ;(mergedField as FieldWithSubFields).fields = mergeBaseFields(\n matchCopy.fields,\n baseField.fields,\n )\n }\n\n mergedFields.push(mergedField)\n } else {\n mergedFields.push(baseField)\n }\n }\n })\n\n return mergedFields\n}\n\nexport default mergeBaseFields\n"],"names":["merge","fieldAffectsData","fieldHasSubFields","mergeBaseFields","fields","baseFields","mergedFields","forEach","baseField","matchedIndex","match","find","field","i","name","matchCopy","splice","mergedField","push"],"mappings":"AAAA,OAAOA,WAAW,YAAW;AAI7B,SAASC,gBAAgB,EAAEC,iBAAiB,QAAQ,oBAAmB;AAEvE,MAAMC,kBAAkB,CAACC,QAAiBC;IACxC,MAAMC,eAAe;WAAKF,UAAU,EAAE;KAAE;IAExCC,WAAWE,OAAO,CAAC,CAACC;QAClB,IAAIC,eAAe;QAEnB,IAAIR,iBAAiBO,YAAY;YAC/B,MAAME,QAAQJ,aAAaK,IAAI,CAAC,CAACC,OAAOC;gBACtC,IAAIZ,iBAAiBW,UAAUA,MAAME,IAAI,KAAKN,UAAUM,IAAI,EAAE;oBAC5DL,eAAeI;oBACf,OAAO;gBACT;gBAEA,OAAO;YACT;YAEA,IAAIH,OAAO;gBACT,MAAMK,YAAmB;oBAAE,GAAGL,KAAK;gBAAC;gBACpCJ,aAAaU,MAAM,CAACP,cAAc;gBAElC,MAAMQ,cAAcjB,MAAaQ,WAAWO;gBAE5C,IAAIb,kBAAkBM,cAAcN,kBAAkBa,YAAY;oBAC9DE,YAAmCb,MAAM,GAAGD,gBAC5CY,UAAUX,MAAM,EAChBI,UAAUJ,MAAM;gBAEpB;gBAEAE,aAAaY,IAAI,CAACD;YACpB,OAAO;gBACLX,aAAaY,IAAI,CAACV;YACpB;QACF;IACF;IAEA,OAAOF;AACT;AAEA,eAAeH,gBAAe"}
1
+ {"version":3,"sources":["../../src/fields/mergeBaseFields.ts"],"sourcesContent":["import merge from 'deepmerge'\n\nimport type { Field, FieldWithSubFields } from './config/types.js'\n\nimport { fieldAffectsData, fieldHasSubFields } from './config/types.js'\n\nconst mergeBaseFields = (fields: Field[], baseFields: Field[]): Field[] => {\n const mergedFields = [...(fields || [])]\n\n baseFields.forEach((baseField) => {\n let matchedIndex = null\n\n if (fieldAffectsData(baseField)) {\n const match = mergedFields.find((field, i) => {\n if (fieldAffectsData(field) && field.name === baseField.name) {\n matchedIndex = i\n return true\n }\n\n return false\n })\n\n if (match) {\n const matchCopy: Field = { ...match }\n mergedFields.splice(matchedIndex, 1)\n\n const mergedField = merge<Field>(baseField, matchCopy)\n\n if (fieldHasSubFields(baseField) && fieldHasSubFields(matchCopy)) {\n ;(mergedField as FieldWithSubFields).fields = mergeBaseFields(\n matchCopy.fields,\n baseField.fields,\n )\n }\n\n mergedFields.push(mergedField)\n } else {\n mergedFields.push(baseField)\n }\n }\n })\n\n return mergedFields\n}\n\nexport default mergeBaseFields\n"],"names":["merge","fieldAffectsData","fieldHasSubFields","mergeBaseFields","fields","baseFields","mergedFields","forEach","baseField","matchedIndex","match","find","field","i","name","matchCopy","splice","mergedField","push"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,WAAW,YAAW;AAI7B,SAASC,gBAAgB,EAAEC,iBAAiB,QAAQ,oBAAmB;AAEvE,MAAMC,kBAAkB,CAACC,QAAiBC;IACxC,MAAMC,eAAe;WAAKF,UAAU,EAAE;KAAE;IAExCC,WAAWE,OAAO,CAAC,CAACC;QAClB,IAAIC,eAAe;QAEnB,IAAIR,iBAAiBO,YAAY;YAC/B,MAAME,QAAQJ,aAAaK,IAAI,CAAC,CAACC,OAAOC;gBACtC,IAAIZ,iBAAiBW,UAAUA,MAAME,IAAI,KAAKN,UAAUM,IAAI,EAAE;oBAC5DL,eAAeI;oBACf,OAAO;gBACT;gBAEA,OAAO;YACT;YAEA,IAAIH,OAAO;gBACT,MAAMK,YAAmB;oBAAE,GAAGL,KAAK;gBAAC;gBACpCJ,aAAaU,MAAM,CAACP,cAAc;gBAElC,MAAMQ,cAAcjB,MAAaQ,WAAWO;gBAE5C,IAAIb,kBAAkBM,cAAcN,kBAAkBa,YAAY;oBAC9DE,YAAmCb,MAAM,GAAGD,gBAC5CY,UAAUX,MAAM,EAChBI,UAAUJ,MAAM;gBAEpB;gBAEAE,aAAaY,IAAI,CAACD;YACpB,OAAO;gBACLX,aAAaY,IAAI,CAACV;YACpB;QACF;IACF;IAEA,OAAOF;AACT;AAEA,eAAeH,gBAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"setDefaultBeforeDuplicate.d.ts","sourceRoot":"","sources":["../../src/fields/setDefaultBeforeDuplicate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAa,MAAM,mBAAmB,CAAA;AAatE,eAAO,MAAM,yBAAyB,UAAW,kBAAkB,SAYlE,CAAA"}
1
+ {"version":3,"file":"setDefaultBeforeDuplicate.d.ts","sourceRoot":"","sources":["../../src/fields/setDefaultBeforeDuplicate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAa,MAAM,mBAAmB,CAAA;AAStE,eAAO,MAAM,yBAAyB,UAAW,kBAAkB,SAYlE,CAAA"}
@@ -1,12 +1,8 @@
1
1
  // default beforeDuplicate hook for required and unique fields
2
- import { extractTranslations } from '../translations/extractTranslations.js';
3
- const copyTranslations = extractTranslations([
4
- 'general:copy'
5
- ]);
6
2
  const unique = ({ value })=>typeof value === 'string' ? `${value} - Copy` : undefined;
7
- const localizedUnique = ({ req, value })=>value ? `${value} - ${copyTranslations?.[req.locale]?.['general:copy'] ?? 'Copy'}` : undefined;
3
+ const localizedUnique = ({ req, value })=>value ? `${value} - ${req?.t('general:copy') ?? 'Copy'}` : undefined;
8
4
  const uniqueRequired = ({ value })=>`${value} - Copy`;
9
- const localizedUniqueRequired = ({ req, value })=>`${value} - ${copyTranslations?.[req.locale]?.['general:copy'] ?? 'Copy'}`;
5
+ const localizedUniqueRequired = ({ req, value })=>`${value} - ${req?.t('general:copy') ?? 'Copy'}`;
10
6
  export const setDefaultBeforeDuplicate = (field)=>{
11
7
  if (('required' in field && field.required || field.unique) && (!field.hooks?.beforeDuplicate || Array.isArray(field.hooks.beforeDuplicate) && field.hooks.beforeDuplicate.length === 0)) {
12
8
  if ((field.type === 'text' || field.type === 'textarea') && field.required && field.unique) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/setDefaultBeforeDuplicate.ts"],"sourcesContent":["// default beforeDuplicate hook for required and unique fields\nimport type { FieldAffectingData, FieldHook } from './config/types.js'\n\nimport { extractTranslations } from '../translations/extractTranslations.js'\n\nconst copyTranslations = extractTranslations(['general:copy'])\n\nconst unique: FieldHook = ({ value }) => (typeof value === 'string' ? `${value} - Copy` : undefined)\nconst localizedUnique: FieldHook = ({ req, value }) =>\n value ? `${value} - ${copyTranslations?.[req.locale]?.['general:copy'] ?? 'Copy'}` : undefined\nconst uniqueRequired: FieldHook = ({ value }) => `${value} - Copy`\nconst localizedUniqueRequired: FieldHook = ({ req, value }) =>\n `${value} - ${copyTranslations?.[req.locale]?.['general:copy'] ?? 'Copy'}`\n\nexport const setDefaultBeforeDuplicate = (field: FieldAffectingData) => {\n if (\n (('required' in field && field.required) || field.unique) &&\n (!field.hooks?.beforeDuplicate ||\n (Array.isArray(field.hooks.beforeDuplicate) && field.hooks.beforeDuplicate.length === 0))\n ) {\n if ((field.type === 'text' || field.type === 'textarea') && field.required && field.unique) {\n field.hooks.beforeDuplicate = [field.localized ? localizedUniqueRequired : uniqueRequired]\n } else if (field.unique) {\n field.hooks.beforeDuplicate = [field.localized ? localizedUnique : unique]\n }\n }\n}\n"],"names":["extractTranslations","copyTranslations","unique","value","undefined","localizedUnique","req","locale","uniqueRequired","localizedUniqueRequired","setDefaultBeforeDuplicate","field","required","hooks","beforeDuplicate","Array","isArray","length","type","localized"],"mappings":"AAAA,8DAA8D;AAG9D,SAASA,mBAAmB,QAAQ,yCAAwC;AAE5E,MAAMC,mBAAmBD,oBAAoB;IAAC;CAAe;AAE7D,MAAME,SAAoB,CAAC,EAAEC,KAAK,EAAE,GAAM,OAAOA,UAAU,WAAW,CAAC,EAAEA,MAAM,OAAO,CAAC,GAAGC;AAC1F,MAAMC,kBAA6B,CAAC,EAAEC,GAAG,EAAEH,KAAK,EAAE,GAChDA,QAAQ,CAAC,EAAEA,MAAM,GAAG,EAAEF,kBAAkB,CAACK,IAAIC,MAAM,CAAC,EAAE,CAAC,eAAe,IAAI,OAAO,CAAC,GAAGH;AACvF,MAAMI,iBAA4B,CAAC,EAAEL,KAAK,EAAE,GAAK,CAAC,EAAEA,MAAM,OAAO,CAAC;AAClE,MAAMM,0BAAqC,CAAC,EAAEH,GAAG,EAAEH,KAAK,EAAE,GACxD,CAAC,EAAEA,MAAM,GAAG,EAAEF,kBAAkB,CAACK,IAAIC,MAAM,CAAC,EAAE,CAAC,eAAe,IAAI,OAAO,CAAC;AAE5E,OAAO,MAAMG,4BAA4B,CAACC;IACxC,IACE,AAAC,CAAA,AAAC,cAAcA,SAASA,MAAMC,QAAQ,IAAKD,MAAMT,MAAM,AAAD,KACtD,CAAA,CAACS,MAAME,KAAK,EAAEC,mBACZC,MAAMC,OAAO,CAACL,MAAME,KAAK,CAACC,eAAe,KAAKH,MAAME,KAAK,CAACC,eAAe,CAACG,MAAM,KAAK,CAAC,GACzF;QACA,IAAI,AAACN,CAAAA,MAAMO,IAAI,KAAK,UAAUP,MAAMO,IAAI,KAAK,UAAS,KAAMP,MAAMC,QAAQ,IAAID,MAAMT,MAAM,EAAE;YAC1FS,MAAME,KAAK,CAACC,eAAe,GAAG;gBAACH,MAAMQ,SAAS,GAAGV,0BAA0BD;aAAe;QAC5F,OAAO,IAAIG,MAAMT,MAAM,EAAE;YACvBS,MAAME,KAAK,CAACC,eAAe,GAAG;gBAACH,MAAMQ,SAAS,GAAGd,kBAAkBH;aAAO;QAC5E;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/fields/setDefaultBeforeDuplicate.ts"],"sourcesContent":["// default beforeDuplicate hook for required and unique fields\nimport type { FieldAffectingData, FieldHook } from './config/types.js'\n\nconst unique: FieldHook = ({ value }) => (typeof value === 'string' ? `${value} - Copy` : undefined)\nconst localizedUnique: FieldHook = ({ req, value }) =>\n value ? `${value} - ${req?.t('general:copy') ?? 'Copy'}` : undefined\nconst uniqueRequired: FieldHook = ({ value }) => `${value} - Copy`\nconst localizedUniqueRequired: FieldHook = ({ req, value }) =>\n `${value} - ${req?.t('general:copy') ?? 'Copy'}`\n\nexport const setDefaultBeforeDuplicate = (field: FieldAffectingData) => {\n if (\n (('required' in field && field.required) || field.unique) &&\n (!field.hooks?.beforeDuplicate ||\n (Array.isArray(field.hooks.beforeDuplicate) && field.hooks.beforeDuplicate.length === 0))\n ) {\n if ((field.type === 'text' || field.type === 'textarea') && field.required && field.unique) {\n field.hooks.beforeDuplicate = [field.localized ? localizedUniqueRequired : uniqueRequired]\n } else if (field.unique) {\n field.hooks.beforeDuplicate = [field.localized ? localizedUnique : unique]\n }\n }\n}\n"],"names":["unique","value","undefined","localizedUnique","req","t","uniqueRequired","localizedUniqueRequired","setDefaultBeforeDuplicate","field","required","hooks","beforeDuplicate","Array","isArray","length","type","localized"],"rangeMappings":";;;;;;;;;;;;;;;;;","mappings":"AAAA,8DAA8D;AAG9D,MAAMA,SAAoB,CAAC,EAAEC,KAAK,EAAE,GAAM,OAAOA,UAAU,WAAW,CAAC,EAAEA,MAAM,OAAO,CAAC,GAAGC;AAC1F,MAAMC,kBAA6B,CAAC,EAAEC,GAAG,EAAEH,KAAK,EAAE,GAChDA,QAAQ,CAAC,EAAEA,MAAM,GAAG,EAAEG,KAAKC,EAAE,mBAAmB,OAAO,CAAC,GAAGH;AAC7D,MAAMI,iBAA4B,CAAC,EAAEL,KAAK,EAAE,GAAK,CAAC,EAAEA,MAAM,OAAO,CAAC;AAClE,MAAMM,0BAAqC,CAAC,EAAEH,GAAG,EAAEH,KAAK,EAAE,GACxD,CAAC,EAAEA,MAAM,GAAG,EAAEG,KAAKC,EAAE,mBAAmB,OAAO,CAAC;AAElD,OAAO,MAAMG,4BAA4B,CAACC;IACxC,IACE,AAAC,CAAA,AAAC,cAAcA,SAASA,MAAMC,QAAQ,IAAKD,MAAMT,MAAM,AAAD,KACtD,CAAA,CAACS,MAAME,KAAK,EAAEC,mBACZC,MAAMC,OAAO,CAACL,MAAME,KAAK,CAACC,eAAe,KAAKH,MAAME,KAAK,CAACC,eAAe,CAACG,MAAM,KAAK,CAAC,GACzF;QACA,IAAI,AAACN,CAAAA,MAAMO,IAAI,KAAK,UAAUP,MAAMO,IAAI,KAAK,UAAS,KAAMP,MAAMC,QAAQ,IAAID,MAAMT,MAAM,EAAE;YAC1FS,MAAME,KAAK,CAACC,eAAe,GAAG;gBAACH,MAAMQ,SAAS,GAAGV,0BAA0BD;aAAe;QAC5F,OAAO,IAAIG,MAAMT,MAAM,EAAE;YACvBS,MAAME,KAAK,CAACC,eAAe,GAAG;gBAACH,MAAMQ,SAAS,GAAGd,kBAAkBH;aAAO;QAC5E;IACF;AACF,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/sortableFieldTypes.ts"],"sourcesContent":["export default ['text', 'textarea', 'code', 'json', 'number', 'email', 'radio', 'select', 'date']\n"],"names":[],"mappings":"AAAA,eAAe;IAAC;IAAQ;IAAY;IAAQ;IAAQ;IAAU;IAAS;IAAS;IAAU;CAAO,CAAA"}
1
+ {"version":3,"sources":["../../src/fields/sortableFieldTypes.ts"],"sourcesContent":["export default ['text', 'textarea', 'code', 'json', 'number', 'email', 'radio', 'select', 'date']\n"],"names":[],"rangeMappings":";;;;;;;;;;","mappings":"AAAA,eAAe;IAAC;IAAQ;IAAY;IAAQ;IAAQ;IAAU;IAAS;IAAS;IAAU;CAAO,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/fields/validations.ts"],"sourcesContent":["import type { RichTextAdapter } from '../admin/types.js'\nimport type { Where } from '../types/index.js'\nimport type {\n ArrayField,\n BlockField,\n CheckboxField,\n CodeField,\n DateField,\n EmailField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RelationshipValue,\n RichTextField,\n SelectField,\n TextField,\n TextareaField,\n UploadField,\n Validate,\n} from './config/types.js'\n\nimport { getIDType } from '../utilities/getIDType.js'\nimport { isNumber } from '../utilities/isNumber.js'\nimport { isValidID } from '../utilities/isValidID.js'\nimport { fieldAffectsData } from './config/types.js'\n\nexport const text: Validate<string | string[], unknown, unknown, TextField> = (\n value,\n {\n hasMany,\n maxLength: fieldMaxLength,\n maxRows,\n minLength,\n minRows,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (!required) {\n if (!value) return true\n }\n\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') return lengthValidationResult\n }\n\n if (typeof config?.defaultMaxTextLength === 'number') maxLength = config.defaultMaxTextLength\n if (typeof fieldMaxLength === 'number') maxLength = fieldMaxLength\n\n const stringsToValidate: string[] = Array.isArray(value) ? value : [value]\n\n for (const stringValue of stringsToValidate) {\n const length = stringValue?.length || 0\n\n if (typeof maxLength === 'number' && length > maxLength) {\n return t('validation:shorterThanMax', { label: t('value'), maxLength, stringValue })\n }\n\n if (typeof minLength === 'number' && length < minLength) {\n return t('validation:longerThanMin', { label: t('value'), minLength, stringValue })\n }\n }\n\n if (required) {\n if (!(typeof value === 'string' || Array.isArray(value)) || value?.length === 0) {\n return t('validation:required')\n }\n }\n\n return true\n}\n\nexport const password: Validate<string, unknown, unknown, TextField> = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (typeof config?.defaultMaxTextLength === 'number') maxLength = config.defaultMaxTextLength\n if (typeof fieldMaxLength === 'number') maxLength = fieldMaxLength\n\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport const email: Validate<string, unknown, unknown, EmailField> = (\n value,\n { req: { t }, required },\n) => {\n if ((value && !/\\S[^\\s@]*@\\S+\\.\\S+/.test(value)) || (!value && required)) {\n return t('validation:emailAddress')\n }\n\n return true\n}\n\nexport const textarea: Validate<string, unknown, unknown, TextareaField> = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (typeof config?.defaultMaxTextLength === 'number') maxLength = config.defaultMaxTextLength\n if (typeof fieldMaxLength === 'number') maxLength = fieldMaxLength\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport const code: Validate<string, unknown, unknown, CodeField> = (\n value,\n { req: { t }, required },\n) => {\n if (required && value === undefined) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport const json: Validate<string, unknown, unknown, JSONField & { jsonError?: string }> = (\n value,\n { jsonError, req: { t }, required },\n) => {\n if (required && !value) {\n return t('validation:required')\n }\n\n if (jsonError !== undefined) {\n return t('validation:invalidInput')\n }\n\n return true\n}\n\nexport const checkbox: Validate<boolean, unknown, unknown, CheckboxField> = (\n value,\n { req: { t }, required },\n) => {\n if ((value && typeof value !== 'boolean') || (required && typeof value !== 'boolean')) {\n return t('validation:trueOrFalse')\n }\n\n return true\n}\n\nexport const date: Validate<Date, unknown, unknown, DateField> = (\n value,\n { req: { t }, required },\n) => {\n if (value && !isNaN(Date.parse(value.toString()))) {\n /* eslint-disable-line */\n return true\n }\n\n if (value) {\n return t('validation:notValidDate', { value })\n }\n\n if (required) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport const richText: Validate<object, unknown, unknown, RichTextField> = async (\n value,\n options,\n) => {\n const editor: RichTextAdapter = options?.editor\n\n return editor.validate(value, options)\n}\n\nconst validateArrayLength = (\n value,\n options: {\n maxRows?: number\n minRows?: number\n required?: boolean\n t: (key: string, options?: { [key: string]: number | string }) => string\n },\n) => {\n const { maxRows, minRows, required, t } = options\n\n const arrayLength = Array.isArray(value) ? value.length : value || 0\n\n if (!required && arrayLength === 0) return true\n\n if (minRows && arrayLength < minRows) {\n return t('validation:requiresAtLeast', { count: minRows, label: t('general:rows') })\n }\n\n if (maxRows && arrayLength > maxRows) {\n return t('validation:requiresNoMoreThan', { count: maxRows, label: t('general:rows') })\n }\n\n if (required && !arrayLength) {\n return t('validation:requiresAtLeast', { count: 1, label: t('general:row') })\n }\n\n return true\n}\n\nexport const number: Validate<number | number[], unknown, unknown, NumberField> = (\n value,\n { hasMany, max, maxRows, min, minRows, req: { t }, required },\n) => {\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') return lengthValidationResult\n }\n\n if (!value && !isNumber(value)) {\n // if no value is present, validate based on required\n if (required) return t('validation:required')\n if (!required) return true\n }\n\n const numbersToValidate: number[] = Array.isArray(value) ? value : [value]\n\n for (const number of numbersToValidate) {\n if (!isNumber(number)) return t('validation:enterNumber')\n\n const numberValue = parseFloat(number as unknown as string)\n\n if (typeof max === 'number' && numberValue > max) {\n return t('validation:greaterThanMax', { label: t('general:value'), max, value })\n }\n\n if (typeof min === 'number' && numberValue < min) {\n return t('validation:lessThanMin', { label: t('general:value'), min, value })\n }\n }\n\n return true\n}\n\nexport const array: Validate<unknown[], unknown, unknown, ArrayField> = (\n value,\n { maxRows, minRows, req: { t }, required },\n) => {\n return validateArrayLength(value, { maxRows, minRows, required, t })\n}\n\nexport const blocks: Validate<unknown, unknown, unknown, BlockField> = (\n value,\n { maxRows, minRows, req: { t }, required },\n) => {\n return validateArrayLength(value, { maxRows, minRows, required, t })\n}\n\nconst validateFilterOptions: Validate<\n unknown,\n unknown,\n unknown,\n RelationshipField | UploadField\n> = async (\n value,\n { id, data, filterOptions, relationTo, req, req: { payload, t, user }, siblingData },\n) => {\n if (typeof filterOptions !== 'undefined' && value) {\n const options: {\n [collection: string]: (number | string)[]\n } = {}\n\n const falseCollections: string[] = []\n const collections = typeof relationTo === 'string' ? [relationTo] : relationTo\n const values = Array.isArray(value) ? value : [value]\n\n for (const collection of collections) {\n try {\n let optionFilter =\n typeof filterOptions === 'function'\n ? await filterOptions({\n id,\n data,\n relationTo: collection,\n siblingData,\n user,\n })\n : filterOptions\n\n if (optionFilter === true) {\n optionFilter = null\n }\n\n const valueIDs: (number | string)[] = []\n\n values.forEach((val) => {\n if (typeof val === 'object' && val?.value) {\n valueIDs.push(val.value)\n }\n\n if (typeof val === 'string' || typeof val === 'number') {\n valueIDs.push(val)\n }\n })\n\n if (valueIDs.length > 0) {\n const findWhere: Where = {\n and: [{ id: { in: valueIDs } }],\n }\n\n if (optionFilter && optionFilter !== true) findWhere.and.push(optionFilter)\n\n if (optionFilter === false) {\n falseCollections.push(collection)\n }\n\n const result = await payload.find({\n collection,\n depth: 0,\n limit: 0,\n pagination: false,\n req,\n where: findWhere,\n })\n\n options[collection] = result.docs.map((doc) => doc.id)\n } else {\n options[collection] = []\n }\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Error validating filter options for collection ${collection}`,\n })\n options[collection] = []\n }\n }\n\n const invalidRelationships = values.filter((val) => {\n let collection: string\n let requestedID: number | string\n\n if (typeof relationTo === 'string') {\n collection = relationTo\n\n if (typeof val === 'string' || typeof val === 'number') {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collection = val.relationTo\n requestedID = val.value\n }\n\n if (falseCollections.find((slug) => relationTo === slug)) {\n return true\n }\n\n if (!options[collection]) return true\n\n return options[collection].indexOf(requestedID) === -1\n })\n\n if (invalidRelationships.length > 0) {\n return invalidRelationships.reduce((err, invalid, i) => {\n return `${err} ${JSON.stringify(invalid)}${\n invalidRelationships.length === i + 1 ? ',' : ''\n } `\n }, t('validation:invalidSelections')) as string\n }\n\n return true\n }\n\n return true\n}\n\nexport const upload: Validate<unknown, unknown, unknown, UploadField> = (\n value: string,\n options,\n) => {\n if (!value && options.required) {\n return options?.req?.t('validation:required')\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const idField = options?.req?.payload?.config?.collections\n ?.find((collection) => collection.slug === options.relationTo)\n ?.fields?.find((field) => fieldAffectsData(field) && field.name === 'id')\n\n const type = getIDType(idField, options?.req?.payload?.db?.defaultIDType)\n\n if (!isValidID(value, type)) {\n return options.req?.t('validation:validUploadID')\n }\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport const relationship: Validate<\n RelationshipValue,\n unknown,\n unknown,\n RelationshipField\n> = async (value, options) => {\n const {\n maxRows,\n minRows,\n relationTo,\n req: {\n payload,\n payload: { config },\n t,\n },\n required,\n } = options\n\n if ((!value || (Array.isArray(value) && value.length === 0)) && required) {\n return t('validation:required')\n }\n\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length,\n })\n }\n\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length,\n })\n }\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [value]\n\n const invalidRelationships = values.filter((val) => {\n let collectionSlug: string\n let requestedID\n\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo\n\n // custom id\n if (val) {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo\n requestedID = val.value\n }\n\n if (requestedID === null) return false\n\n const idField = config?.collections\n ?.find((collection) => collection.slug === collectionSlug)\n ?.fields?.find((field) => fieldAffectsData(field) && field.name === 'id')\n\n const type = getIDType(idField, payload?.db?.defaultIDType)\n\n return !isValidID(requestedID, type)\n })\n\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships\n .map((err, invalid) => {\n return `${err} ${JSON.stringify(invalid)}`\n })\n .join(', ')}`\n }\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport const select: Validate<unknown, unknown, unknown, SelectField> = (\n value,\n { hasMany, options, req: { t }, required },\n) => {\n if (\n Array.isArray(value) &&\n value.some(\n (input) =>\n !options.some(\n (option) => option === input || (typeof option !== 'string' && option?.value === input),\n ),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n if (\n typeof value === 'string' &&\n !options.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n if (\n required &&\n (typeof value === 'undefined' ||\n value === null ||\n (hasMany && Array.isArray(value) && (value as [])?.length === 0))\n ) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport const radio: Validate<unknown, unknown, unknown, RadioField> = (\n value,\n { options, req: { t }, required },\n) => {\n if (value) {\n const valueMatchesOption = options.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n return valueMatchesOption || t('validation:invalidSelection')\n }\n\n return required ? t('validation:required') : true\n}\n\nexport const point: Validate<[number | string, number | string], unknown, unknown, PointField> = (\n value = ['', ''],\n { req: { t }, required },\n) => {\n const lng = parseFloat(String(value[0]))\n const lat = parseFloat(String(value[1]))\n if (\n required &&\n ((value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number') ||\n Number.isNaN(lng) ||\n Number.isNaN(lat) ||\n (Array.isArray(value) && value.length !== 2))\n ) {\n return t('validation:requiresTwoNumbers')\n }\n\n if ((value[1] && Number.isNaN(lng)) || (value[0] && Number.isNaN(lat))) {\n return t('validation:invalidInput')\n }\n\n return true\n}\n\nexport default {\n array,\n blocks,\n checkbox,\n code,\n date,\n email,\n json,\n number,\n password,\n point,\n radio,\n relationship,\n richText,\n select,\n text,\n textarea,\n upload,\n}\n"],"names":["getIDType","isNumber","isValidID","fieldAffectsData","text","value","hasMany","maxLength","fieldMaxLength","maxRows","minLength","minRows","req","payload","config","t","required","lengthValidationResult","validateArrayLength","defaultMaxTextLength","stringsToValidate","Array","isArray","stringValue","length","label","password","email","test","textarea","code","undefined","json","jsonError","checkbox","date","isNaN","Date","parse","toString","richText","options","editor","validate","arrayLength","count","number","max","min","numbersToValidate","numberValue","parseFloat","array","blocks","validateFilterOptions","id","data","filterOptions","relationTo","user","siblingData","falseCollections","collections","values","collection","optionFilter","valueIDs","forEach","val","push","findWhere","and","in","result","find","depth","limit","pagination","where","docs","map","doc","err","logger","error","msg","invalidRelationships","filter","requestedID","slug","indexOf","reduce","invalid","i","JSON","stringify","upload","idField","fields","field","name","type","db","defaultIDType","relationship","collectionSlug","join","select","some","input","option","radio","valueMatchesOption","point","lng","String","lat","Number"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/fields/validations.ts"],"sourcesContent":["import type { RichTextAdapter } from '../admin/types.js'\nimport type { Where } from '../types/index.js'\nimport type {\n ArrayField,\n BlockField,\n CheckboxField,\n CodeField,\n DateField,\n EmailField,\n JSONField,\n NumberField,\n PointField,\n RadioField,\n RelationshipField,\n RelationshipValue,\n RichTextField,\n SelectField,\n TextField,\n TextareaField,\n UploadField,\n Validate,\n} from './config/types.js'\n\nimport { getIDType } from '../utilities/getIDType.js'\nimport { isNumber } from '../utilities/isNumber.js'\nimport { isValidID } from '../utilities/isValidID.js'\nimport { fieldAffectsData } from './config/types.js'\n\nexport const text: Validate<string | string[], unknown, unknown, TextField> = (\n value,\n {\n hasMany,\n maxLength: fieldMaxLength,\n maxRows,\n minLength,\n minRows,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (!required) {\n if (!value) return true\n }\n\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') return lengthValidationResult\n }\n\n if (typeof config?.defaultMaxTextLength === 'number') maxLength = config.defaultMaxTextLength\n if (typeof fieldMaxLength === 'number') maxLength = fieldMaxLength\n\n const stringsToValidate: string[] = Array.isArray(value) ? value : [value]\n\n for (const stringValue of stringsToValidate) {\n const length = stringValue?.length || 0\n\n if (typeof maxLength === 'number' && length > maxLength) {\n return t('validation:shorterThanMax', { label: t('value'), maxLength, stringValue })\n }\n\n if (typeof minLength === 'number' && length < minLength) {\n return t('validation:longerThanMin', { label: t('value'), minLength, stringValue })\n }\n }\n\n if (required) {\n if (!(typeof value === 'string' || Array.isArray(value)) || value?.length === 0) {\n return t('validation:required')\n }\n }\n\n return true\n}\n\nexport const password: Validate<string, unknown, unknown, TextField> = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (typeof config?.defaultMaxTextLength === 'number') maxLength = config.defaultMaxTextLength\n if (typeof fieldMaxLength === 'number') maxLength = fieldMaxLength\n\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport const email: Validate<string, unknown, unknown, EmailField> = (\n value,\n { req: { t }, required },\n) => {\n if ((value && !/\\S[^\\s@]*@\\S+\\.\\S+/.test(value)) || (!value && required)) {\n return t('validation:emailAddress')\n }\n\n return true\n}\n\nexport const textarea: Validate<string, unknown, unknown, TextareaField> = (\n value,\n {\n maxLength: fieldMaxLength,\n minLength,\n req: {\n payload: { config },\n t,\n },\n required,\n },\n) => {\n let maxLength: number\n\n if (typeof config?.defaultMaxTextLength === 'number') maxLength = config.defaultMaxTextLength\n if (typeof fieldMaxLength === 'number') maxLength = fieldMaxLength\n if (value && maxLength && value.length > maxLength) {\n return t('validation:shorterThanMax', { maxLength })\n }\n\n if (value && minLength && value.length < minLength) {\n return t('validation:longerThanMin', { minLength })\n }\n\n if (required && !value) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport const code: Validate<string, unknown, unknown, CodeField> = (\n value,\n { req: { t }, required },\n) => {\n if (required && value === undefined) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport const json: Validate<string, unknown, unknown, JSONField & { jsonError?: string }> = (\n value,\n { jsonError, req: { t }, required },\n) => {\n if (required && !value) {\n return t('validation:required')\n }\n\n if (jsonError !== undefined) {\n return t('validation:invalidInput')\n }\n\n return true\n}\n\nexport const checkbox: Validate<boolean, unknown, unknown, CheckboxField> = (\n value,\n { req: { t }, required },\n) => {\n if ((value && typeof value !== 'boolean') || (required && typeof value !== 'boolean')) {\n return t('validation:trueOrFalse')\n }\n\n return true\n}\n\nexport const date: Validate<Date, unknown, unknown, DateField> = (\n value,\n { req: { t }, required },\n) => {\n if (value && !isNaN(Date.parse(value.toString()))) {\n /* eslint-disable-line */\n return true\n }\n\n if (value) {\n return t('validation:notValidDate', { value })\n }\n\n if (required) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport const richText: Validate<object, unknown, unknown, RichTextField> = async (\n value,\n options,\n) => {\n const editor: RichTextAdapter = options?.editor\n\n return editor.validate(value, options)\n}\n\nconst validateArrayLength = (\n value,\n options: {\n maxRows?: number\n minRows?: number\n required?: boolean\n t: (key: string, options?: { [key: string]: number | string }) => string\n },\n) => {\n const { maxRows, minRows, required, t } = options\n\n const arrayLength = Array.isArray(value) ? value.length : value || 0\n\n if (!required && arrayLength === 0) return true\n\n if (minRows && arrayLength < minRows) {\n return t('validation:requiresAtLeast', { count: minRows, label: t('general:rows') })\n }\n\n if (maxRows && arrayLength > maxRows) {\n return t('validation:requiresNoMoreThan', { count: maxRows, label: t('general:rows') })\n }\n\n if (required && !arrayLength) {\n return t('validation:requiresAtLeast', { count: 1, label: t('general:row') })\n }\n\n return true\n}\n\nexport const number: Validate<number | number[], unknown, unknown, NumberField> = (\n value,\n { hasMany, max, maxRows, min, minRows, req: { t }, required },\n) => {\n if (hasMany === true) {\n const lengthValidationResult = validateArrayLength(value, { maxRows, minRows, required, t })\n if (typeof lengthValidationResult === 'string') return lengthValidationResult\n }\n\n if (!value && !isNumber(value)) {\n // if no value is present, validate based on required\n if (required) return t('validation:required')\n if (!required) return true\n }\n\n const numbersToValidate: number[] = Array.isArray(value) ? value : [value]\n\n for (const number of numbersToValidate) {\n if (!isNumber(number)) return t('validation:enterNumber')\n\n const numberValue = parseFloat(number as unknown as string)\n\n if (typeof max === 'number' && numberValue > max) {\n return t('validation:greaterThanMax', { label: t('general:value'), max, value })\n }\n\n if (typeof min === 'number' && numberValue < min) {\n return t('validation:lessThanMin', { label: t('general:value'), min, value })\n }\n }\n\n return true\n}\n\nexport const array: Validate<unknown[], unknown, unknown, ArrayField> = (\n value,\n { maxRows, minRows, req: { t }, required },\n) => {\n return validateArrayLength(value, { maxRows, minRows, required, t })\n}\n\nexport const blocks: Validate<unknown, unknown, unknown, BlockField> = (\n value,\n { maxRows, minRows, req: { t }, required },\n) => {\n return validateArrayLength(value, { maxRows, minRows, required, t })\n}\n\nconst validateFilterOptions: Validate<\n unknown,\n unknown,\n unknown,\n RelationshipField | UploadField\n> = async (\n value,\n { id, data, filterOptions, relationTo, req, req: { payload, t, user }, siblingData },\n) => {\n if (typeof filterOptions !== 'undefined' && value) {\n const options: {\n [collection: string]: (number | string)[]\n } = {}\n\n const falseCollections: string[] = []\n const collections = typeof relationTo === 'string' ? [relationTo] : relationTo\n const values = Array.isArray(value) ? value : [value]\n\n for (const collection of collections) {\n try {\n let optionFilter =\n typeof filterOptions === 'function'\n ? await filterOptions({\n id,\n data,\n relationTo: collection,\n siblingData,\n user,\n })\n : filterOptions\n\n if (optionFilter === true) {\n optionFilter = null\n }\n\n const valueIDs: (number | string)[] = []\n\n values.forEach((val) => {\n if (typeof val === 'object' && val?.value) {\n valueIDs.push(val.value)\n }\n\n if (typeof val === 'string' || typeof val === 'number') {\n valueIDs.push(val)\n }\n })\n\n if (valueIDs.length > 0) {\n const findWhere: Where = {\n and: [{ id: { in: valueIDs } }],\n }\n\n if (optionFilter && optionFilter !== true) findWhere.and.push(optionFilter)\n\n if (optionFilter === false) {\n falseCollections.push(collection)\n }\n\n const result = await payload.find({\n collection,\n depth: 0,\n limit: 0,\n pagination: false,\n req,\n where: findWhere,\n })\n\n options[collection] = result.docs.map((doc) => doc.id)\n } else {\n options[collection] = []\n }\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Error validating filter options for collection ${collection}`,\n })\n options[collection] = []\n }\n }\n\n const invalidRelationships = values.filter((val) => {\n let collection: string\n let requestedID: number | string\n\n if (typeof relationTo === 'string') {\n collection = relationTo\n\n if (typeof val === 'string' || typeof val === 'number') {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collection = val.relationTo\n requestedID = val.value\n }\n\n if (falseCollections.find((slug) => relationTo === slug)) {\n return true\n }\n\n if (!options[collection]) return true\n\n return options[collection].indexOf(requestedID) === -1\n })\n\n if (invalidRelationships.length > 0) {\n return invalidRelationships.reduce((err, invalid, i) => {\n return `${err} ${JSON.stringify(invalid)}${\n invalidRelationships.length === i + 1 ? ',' : ''\n } `\n }, t('validation:invalidSelections')) as string\n }\n\n return true\n }\n\n return true\n}\n\nexport const upload: Validate<unknown, unknown, unknown, UploadField> = (\n value: string,\n options,\n) => {\n if (!value && options.required) {\n return options?.req?.t('validation:required')\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const idField = options?.req?.payload?.config?.collections\n ?.find((collection) => collection.slug === options.relationTo)\n ?.fields?.find((field) => fieldAffectsData(field) && field.name === 'id')\n\n const type = getIDType(idField, options?.req?.payload?.db?.defaultIDType)\n\n if (!isValidID(value, type)) {\n return options.req?.t('validation:validUploadID')\n }\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport const relationship: Validate<\n RelationshipValue,\n unknown,\n unknown,\n RelationshipField\n> = async (value, options) => {\n const {\n maxRows,\n minRows,\n relationTo,\n req: {\n payload,\n payload: { config },\n t,\n },\n required,\n } = options\n\n if ((!value || (Array.isArray(value) && value.length === 0)) && required) {\n return t('validation:required')\n }\n\n if (Array.isArray(value) && value.length > 0) {\n if (minRows && value.length < minRows) {\n return t('validation:lessThanMin', {\n label: t('general:rows'),\n min: minRows,\n value: value.length,\n })\n }\n\n if (maxRows && value.length > maxRows) {\n return t('validation:greaterThanMax', {\n label: t('general:rows'),\n max: maxRows,\n value: value.length,\n })\n }\n }\n\n if (typeof value !== 'undefined' && value !== null) {\n const values = Array.isArray(value) ? value : [value]\n\n const invalidRelationships = values.filter((val) => {\n let collectionSlug: string\n let requestedID\n\n if (typeof relationTo === 'string') {\n collectionSlug = relationTo\n\n // custom id\n if (val) {\n requestedID = val\n }\n }\n\n if (Array.isArray(relationTo) && typeof val === 'object' && val?.relationTo) {\n collectionSlug = val.relationTo\n requestedID = val.value\n }\n\n if (requestedID === null) return false\n\n const idField = config?.collections\n ?.find((collection) => collection.slug === collectionSlug)\n ?.fields?.find((field) => fieldAffectsData(field) && field.name === 'id')\n\n const type = getIDType(idField, payload?.db?.defaultIDType)\n\n return !isValidID(requestedID, type)\n })\n\n if (invalidRelationships.length > 0) {\n return `This relationship field has the following invalid relationships: ${invalidRelationships\n .map((err, invalid) => {\n return `${err} ${JSON.stringify(invalid)}`\n })\n .join(', ')}`\n }\n }\n\n return validateFilterOptions(value, options)\n}\n\nexport const select: Validate<unknown, unknown, unknown, SelectField> = (\n value,\n { hasMany, options, req: { t }, required },\n) => {\n if (\n Array.isArray(value) &&\n value.some(\n (input) =>\n !options.some(\n (option) => option === input || (typeof option !== 'string' && option?.value === input),\n ),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n if (\n typeof value === 'string' &&\n !options.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n ) {\n return t('validation:invalidSelection')\n }\n\n if (\n required &&\n (typeof value === 'undefined' ||\n value === null ||\n (hasMany && Array.isArray(value) && (value as [])?.length === 0))\n ) {\n return t('validation:required')\n }\n\n return true\n}\n\nexport const radio: Validate<unknown, unknown, unknown, RadioField> = (\n value,\n { options, req: { t }, required },\n) => {\n if (value) {\n const valueMatchesOption = options.some(\n (option) => option === value || (typeof option !== 'string' && option.value === value),\n )\n return valueMatchesOption || t('validation:invalidSelection')\n }\n\n return required ? t('validation:required') : true\n}\n\nexport const point: Validate<[number | string, number | string], unknown, unknown, PointField> = (\n value = ['', ''],\n { req: { t }, required },\n) => {\n const lng = parseFloat(String(value[0]))\n const lat = parseFloat(String(value[1]))\n if (\n required &&\n ((value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number') ||\n Number.isNaN(lng) ||\n Number.isNaN(lat) ||\n (Array.isArray(value) && value.length !== 2))\n ) {\n return t('validation:requiresTwoNumbers')\n }\n\n if ((value[1] && Number.isNaN(lng)) || (value[0] && Number.isNaN(lat))) {\n return t('validation:invalidInput')\n }\n\n return true\n}\n\nexport default {\n array,\n blocks,\n checkbox,\n code,\n date,\n email,\n json,\n number,\n password,\n point,\n radio,\n relationship,\n richText,\n select,\n text,\n textarea,\n upload,\n}\n"],"names":["getIDType","isNumber","isValidID","fieldAffectsData","text","value","hasMany","maxLength","fieldMaxLength","maxRows","minLength","minRows","req","payload","config","t","required","lengthValidationResult","validateArrayLength","defaultMaxTextLength","stringsToValidate","Array","isArray","stringValue","length","label","password","email","test","textarea","code","undefined","json","jsonError","checkbox","date","isNaN","Date","parse","toString","richText","options","editor","validate","arrayLength","count","number","max","min","numbersToValidate","numberValue","parseFloat","array","blocks","validateFilterOptions","id","data","filterOptions","relationTo","user","siblingData","falseCollections","collections","values","collection","optionFilter","valueIDs","forEach","val","push","findWhere","and","in","result","find","depth","limit","pagination","where","docs","map","doc","err","logger","error","msg","invalidRelationships","filter","requestedID","slug","indexOf","reduce","invalid","i","JSON","stringify","upload","idField","fields","field","name","type","db","defaultIDType","relationship","collectionSlug","join","select","some","input","option","radio","valueMatchesOption","point","lng","String","lat","Number"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}