payload 3.0.0-beta.124 → 3.0.0-beta.126

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 (208) hide show
  1. package/dist/admin/RichText.d.ts +4 -1
  2. package/dist/admin/RichText.d.ts.map +1 -1
  3. package/dist/admin/RichText.js.map +1 -1
  4. package/dist/collections/config/types.d.ts +2 -2
  5. package/dist/collections/config/types.d.ts.map +1 -1
  6. package/dist/collections/config/types.js.map +1 -1
  7. package/dist/collections/operations/create.d.ts +2 -1
  8. package/dist/collections/operations/create.d.ts.map +1 -1
  9. package/dist/collections/operations/create.js +2 -1
  10. package/dist/collections/operations/create.js.map +1 -1
  11. package/dist/collections/operations/delete.d.ts +2 -1
  12. package/dist/collections/operations/delete.d.ts.map +1 -1
  13. package/dist/collections/operations/delete.js +2 -1
  14. package/dist/collections/operations/delete.js.map +1 -1
  15. package/dist/collections/operations/deleteByID.d.ts +2 -1
  16. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  17. package/dist/collections/operations/deleteByID.js +2 -1
  18. package/dist/collections/operations/deleteByID.js.map +1 -1
  19. package/dist/collections/operations/duplicate.d.ts +2 -1
  20. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  21. package/dist/collections/operations/duplicate.js +2 -1
  22. package/dist/collections/operations/duplicate.js.map +1 -1
  23. package/dist/collections/operations/find.d.ts +2 -1
  24. package/dist/collections/operations/find.d.ts.map +1 -1
  25. package/dist/collections/operations/find.js +11 -3
  26. package/dist/collections/operations/find.js.map +1 -1
  27. package/dist/collections/operations/findByID.d.ts +2 -1
  28. package/dist/collections/operations/findByID.d.ts.map +1 -1
  29. package/dist/collections/operations/findByID.js +23 -7
  30. package/dist/collections/operations/findByID.js.map +1 -1
  31. package/dist/collections/operations/findVersionByID.d.ts +2 -1
  32. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  33. package/dist/collections/operations/findVersionByID.js +2 -1
  34. package/dist/collections/operations/findVersionByID.js.map +1 -1
  35. package/dist/collections/operations/findVersions.d.ts +2 -1
  36. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  37. package/dist/collections/operations/findVersions.js +2 -1
  38. package/dist/collections/operations/findVersions.js.map +1 -1
  39. package/dist/collections/operations/local/count.d.ts +2 -2
  40. package/dist/collections/operations/local/count.d.ts.map +1 -1
  41. package/dist/collections/operations/local/count.js.map +1 -1
  42. package/dist/collections/operations/local/create.d.ts +3 -2
  43. package/dist/collections/operations/local/create.d.ts.map +1 -1
  44. package/dist/collections/operations/local/create.js +2 -1
  45. package/dist/collections/operations/local/create.js.map +1 -1
  46. package/dist/collections/operations/local/delete.d.ts +3 -2
  47. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  48. package/dist/collections/operations/local/delete.js +2 -1
  49. package/dist/collections/operations/local/delete.js.map +1 -1
  50. package/dist/collections/operations/local/duplicate.d.ts +3 -2
  51. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  52. package/dist/collections/operations/local/duplicate.js +2 -1
  53. package/dist/collections/operations/local/duplicate.js.map +1 -1
  54. package/dist/collections/operations/local/find.d.ts +4 -3
  55. package/dist/collections/operations/local/find.d.ts.map +1 -1
  56. package/dist/collections/operations/local/find.js.map +1 -1
  57. package/dist/collections/operations/local/findByID.d.ts +4 -3
  58. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  59. package/dist/collections/operations/local/findByID.js +2 -1
  60. package/dist/collections/operations/local/findByID.js.map +1 -1
  61. package/dist/collections/operations/local/findVersionByID.d.ts +3 -2
  62. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  63. package/dist/collections/operations/local/findVersionByID.js +2 -1
  64. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  65. package/dist/collections/operations/local/findVersions.d.ts +3 -2
  66. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  67. package/dist/collections/operations/local/findVersions.js +2 -1
  68. package/dist/collections/operations/local/findVersions.js.map +1 -1
  69. package/dist/collections/operations/local/restoreVersion.d.ts +3 -2
  70. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  71. package/dist/collections/operations/local/restoreVersion.js +2 -1
  72. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  73. package/dist/collections/operations/local/update.d.ts +3 -2
  74. package/dist/collections/operations/local/update.d.ts.map +1 -1
  75. package/dist/collections/operations/local/update.js +2 -1
  76. package/dist/collections/operations/local/update.js.map +1 -1
  77. package/dist/collections/operations/restoreVersion.d.ts +2 -1
  78. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  79. package/dist/collections/operations/restoreVersion.js +2 -1
  80. package/dist/collections/operations/restoreVersion.js.map +1 -1
  81. package/dist/collections/operations/update.d.ts +2 -1
  82. package/dist/collections/operations/update.d.ts.map +1 -1
  83. package/dist/collections/operations/update.js +2 -1
  84. package/dist/collections/operations/update.js.map +1 -1
  85. package/dist/collections/operations/updateByID.d.ts +2 -1
  86. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  87. package/dist/collections/operations/updateByID.js +8 -6
  88. package/dist/collections/operations/updateByID.js.map +1 -1
  89. package/dist/database/sanitizeJoinQuery.d.ts +22 -0
  90. package/dist/database/sanitizeJoinQuery.d.ts.map +1 -0
  91. package/dist/database/sanitizeJoinQuery.js +61 -0
  92. package/dist/database/sanitizeJoinQuery.js.map +1 -0
  93. package/dist/fields/config/types.d.ts +6 -3
  94. package/dist/fields/config/types.d.ts.map +1 -1
  95. package/dist/fields/config/types.js.map +1 -1
  96. package/dist/fields/hooks/afterChange/index.d.ts +2 -1
  97. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  98. package/dist/fields/hooks/afterChange/index.js.map +1 -1
  99. package/dist/fields/hooks/afterChange/promise.d.ts +2 -1
  100. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  101. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  102. package/dist/fields/hooks/afterChange/traverseFields.d.ts +2 -1
  103. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  104. package/dist/fields/hooks/afterChange/traverseFields.js.map +1 -1
  105. package/dist/fields/hooks/afterRead/index.d.ts +3 -1
  106. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  107. package/dist/fields/hooks/afterRead/index.js +2 -1
  108. package/dist/fields/hooks/afterRead/index.js.map +1 -1
  109. package/dist/fields/hooks/afterRead/promise.d.ts +4 -2
  110. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  111. package/dist/fields/hooks/afterRead/promise.js +12 -1
  112. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  113. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts +3 -2
  114. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  115. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +7 -3
  116. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
  117. package/dist/fields/hooks/afterRead/traverseFields.d.ts +4 -2
  118. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  119. package/dist/fields/hooks/afterRead/traverseFields.js +2 -1
  120. package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
  121. package/dist/fields/hooks/beforeChange/index.d.ts +2 -1
  122. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  123. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  124. package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
  125. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  126. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  127. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
  128. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  129. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  130. package/dist/fields/hooks/beforeDuplicate/index.d.ts +2 -1
  131. package/dist/fields/hooks/beforeDuplicate/index.d.ts.map +1 -1
  132. package/dist/fields/hooks/beforeDuplicate/index.js.map +1 -1
  133. package/dist/fields/hooks/beforeDuplicate/promise.d.ts +2 -1
  134. package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
  135. package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -1
  136. package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts +2 -1
  137. package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -1
  138. package/dist/fields/hooks/beforeDuplicate/traverseFields.js.map +1 -1
  139. package/dist/fields/hooks/beforeValidate/index.d.ts +2 -1
  140. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  141. package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
  142. package/dist/fields/hooks/beforeValidate/promise.d.ts +2 -1
  143. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  144. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  145. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +2 -1
  146. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  147. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  148. package/dist/globals/config/types.d.ts +2 -2
  149. package/dist/globals/config/types.d.ts.map +1 -1
  150. package/dist/globals/config/types.js.map +1 -1
  151. package/dist/globals/operations/findOne.d.ts +2 -1
  152. package/dist/globals/operations/findOne.d.ts.map +1 -1
  153. package/dist/globals/operations/findOne.js +2 -1
  154. package/dist/globals/operations/findOne.js.map +1 -1
  155. package/dist/globals/operations/findVersionByID.d.ts +2 -1
  156. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  157. package/dist/globals/operations/findVersionByID.js +2 -1
  158. package/dist/globals/operations/findVersionByID.js.map +1 -1
  159. package/dist/globals/operations/findVersions.d.ts +2 -1
  160. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  161. package/dist/globals/operations/findVersions.js +2 -1
  162. package/dist/globals/operations/findVersions.js.map +1 -1
  163. package/dist/globals/operations/local/findOne.d.ts +2 -1
  164. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  165. package/dist/globals/operations/local/findOne.js +2 -1
  166. package/dist/globals/operations/local/findOne.js.map +1 -1
  167. package/dist/globals/operations/local/findVersionByID.d.ts +2 -1
  168. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  169. package/dist/globals/operations/local/findVersionByID.js +2 -1
  170. package/dist/globals/operations/local/findVersionByID.js.map +1 -1
  171. package/dist/globals/operations/local/findVersions.d.ts +2 -1
  172. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  173. package/dist/globals/operations/local/findVersions.js +2 -1
  174. package/dist/globals/operations/local/findVersions.js.map +1 -1
  175. package/dist/globals/operations/local/restoreVersion.d.ts +2 -1
  176. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  177. package/dist/globals/operations/local/restoreVersion.js +2 -1
  178. package/dist/globals/operations/local/restoreVersion.js.map +1 -1
  179. package/dist/globals/operations/local/update.d.ts +2 -1
  180. package/dist/globals/operations/local/update.d.ts.map +1 -1
  181. package/dist/globals/operations/local/update.js +2 -1
  182. package/dist/globals/operations/local/update.js.map +1 -1
  183. package/dist/globals/operations/restoreVersion.d.ts +2 -1
  184. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  185. package/dist/globals/operations/restoreVersion.js +2 -1
  186. package/dist/globals/operations/restoreVersion.js.map +1 -1
  187. package/dist/globals/operations/update.d.ts +2 -1
  188. package/dist/globals/operations/update.d.ts.map +1 -1
  189. package/dist/globals/operations/update.js +2 -1
  190. package/dist/globals/operations/update.js.map +1 -1
  191. package/dist/index.d.ts +7 -0
  192. package/dist/index.d.ts.map +1 -1
  193. package/dist/index.js.map +1 -1
  194. package/dist/queues/config/jobsCollection.d.ts.map +1 -1
  195. package/dist/queues/config/jobsCollection.js +15 -13
  196. package/dist/queues/config/jobsCollection.js.map +1 -1
  197. package/dist/queues/config/types/index.d.ts +1 -1
  198. package/dist/queues/config/types/index.d.ts.map +1 -1
  199. package/dist/queues/config/types/index.js.map +1 -1
  200. package/dist/queues/operations/runJobs/index.js +1 -1
  201. package/dist/queues/operations/runJobs/index.js.map +1 -1
  202. package/dist/types/index.d.ts +6 -8
  203. package/dist/types/index.d.ts.map +1 -1
  204. package/dist/types/index.js.map +1 -1
  205. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  206. package/dist/utilities/configToJSONSchema.js +35 -0
  207. package/dist/utilities/configToJSONSchema.js.map +1 -1
  208. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/operations/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { AccessResult } from '../../config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, SelectType, Where } from '../../types/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { APIError } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n limit?: number\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n where: Where\n}\n\nexport const updateOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<BulkOperationResult<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation: 'update',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n limit = 0,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select,\n showHiddenFields,\n where,\n } = args\n\n if (!where) {\n throw new APIError(\"Missing 'where' query of documents to update.\", httpStatus.BAD_REQUEST)\n }\n\n const { data: bulkUpdateData } = args\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n if (!overrideAccess) {\n accessResult = await executeAccess({ req }, collectionConfig.access.update)\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n // /////////////////////////////////////\n // Retrieve documents\n // /////////////////////////////////////\n\n const fullWhere = combineQueries(where, accessResult)\n\n let docs\n\n if (collectionConfig.versions?.drafts && shouldSaveDraft) {\n const versionsWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config),\n where: versionsWhere,\n })\n\n const query = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n limit,\n locale,\n pagination: false,\n req,\n where: versionsWhere,\n })\n\n docs = query.docs\n } else {\n const query = await payload.db.find({\n collection: collectionConfig.slug,\n limit,\n locale,\n pagination: false,\n req,\n where: fullWhere,\n })\n\n docs = query.docs\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data: bulkUpdateData,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n const errors = []\n\n const promises = docs.map(async (doc) => {\n const { id } = doc\n let data = {\n ...newFileData,\n ...bulkUpdateData,\n }\n\n try {\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n if (args.collection.config.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'update',\n originalDoc,\n req: args.req,\n })\n }\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeValidate.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let result = await beforeChange({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docWithLocales: doc,\n global: null,\n operation: 'update',\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate &&\n data._status !== 'published',\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft || data._status === 'published') {\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: result,\n locale,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n collection: collectionConfig,\n docWithLocales: result,\n payload,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: result,\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale,\n overrideAccess,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })) || result\n }, Promise.resolve())\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error) {\n errors.push({\n id,\n message: error.message,\n })\n }\n return null\n })\n\n const awaitedDocs = await Promise.all(promises)\n\n let result = {\n docs: awaitedDocs.filter(Boolean),\n errors,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'update',\n result,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["httpStatus","ensureUsernameOrEmail","executeAccess","combineQueries","validateQueryPaths","APIError","afterChange","afterRead","beforeChange","beforeValidate","deleteAssociatedFiles","generateFileData","unlinkTempFiles","uploadFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","saveVersion","buildAfterOperation","updateOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","depth","draft","draftArg","limit","overrideAccess","overrideLock","overwriteExistingFiles","fallbackLocale","locale","payload","select","showHiddenFields","where","BAD_REQUEST","data","bulkUpdateData","shouldSaveDraft","Boolean","versions","drafts","accessResult","access","update","fullWhere","docs","versionsWhere","versionFields","query","db","queryDrafts","slug","pagination","find","newFileData","files","filesToUpload","throwOnMissingFile","errors","promises","map","doc","id","collectionSlug","lockErrorMessage","originalDoc","global","overrideDelete","auth","authOptions","upload","disableLocalStorage","result","docWithLocales","skipValidation","validate","_status","updateOne","previousDoc","error","push","message","awaitedDocs","all","filter"],"mappings":"AAEA,OAAOA,gBAAgB,cAAa;AAapC,SAASC,qBAAqB,QAAQ,sCAAqC;AAC3E,OAAOC,mBAAmB,8BAA6B;AACvD,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,kBAAkB,QAAQ,uDAAsD;AACzF,SAASC,QAAQ,QAAQ,wBAAuB;AAChD,SAASC,WAAW,QAAQ,0CAAyC;AACrE,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,YAAY,QAAQ,2CAA0C;AACvE,SAASC,cAAc,QAAQ,6CAA4C;AAC3E,SAASC,qBAAqB,QAAQ,yCAAwC;AAC9E,SAASC,gBAAgB,QAAQ,oCAAmC;AACpE,SAASC,eAAe,QAAQ,mCAAkC;AAClE,SAASC,WAAW,QAAQ,+BAA8B;AAC1D,SAASC,uBAAuB,QAAQ,6CAA4C;AACpF,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,4BAA4B,QAAQ,0CAAyC;AACtF,SAASC,uBAAuB,QAAQ,mDAAkD;AAC1F,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,mBAAmB,QAAQ,aAAY;AAmBhD,OAAO,MAAMC,kBAAkB,OAI7BC;IAEA,IAAIC,OAAOD;IAEX,IAAI;QACF,MAAME,eAAe,CAACD,KAAKE,kBAAkB,IAAK,MAAMV,gBAAgBQ,KAAKG,GAAG;QAEhF,wCAAwC;QACxC,+BAA+B;QAC/B,wCAAwC;QAExC,MAAMH,KAAKI,UAAU,CAACC,MAAM,CAACC,KAAK,CAACC,eAAe,CAACC,MAAM,CAAC,OAAOC,WAAWC;YAC1E,MAAMD;YAENT,OACE,AAAC,MAAMU,KAAK;gBACVV;gBACAI,YAAYJ,KAAKI,UAAU,CAACC,MAAM;gBAClCM,SAASX,KAAKG,GAAG,CAACQ,OAAO;gBACzBC,WAAW;gBACXT,KAAKH,KAAKG,GAAG;YACf,MAAOH;QACX,GAAGa,QAAQC,OAAO;QAElB,MAAM,EACJV,YAAY,EAAEC,QAAQU,gBAAgB,EAAE,EACxCX,UAAU,EACVY,KAAK,EACLC,OAAOC,WAAW,KAAK,EACvBC,QAAQ,CAAC,EACTC,cAAc,EACdC,YAAY,EACZC,yBAAyB,KAAK,EAC9BnB,KAAK,EACHoB,cAAc,EACdC,MAAM,EACNC,SAAS,EAAEpB,MAAM,EAAE,EACnBoB,OAAO,EACR,EACDtB,GAAG,EACHuB,MAAM,EACNC,gBAAgB,EAChBC,KAAK,EACN,GAAG5B;QAEJ,IAAI,CAAC4B,OAAO;YACV,MAAM,IAAI/C,SAAS,iDAAiDL,WAAWqD,WAAW;QAC5F;QAEA,MAAM,EAAEC,MAAMC,cAAc,EAAE,GAAG/B;QACjC,MAAMgC,kBAAkBC,QAAQf,YAAYH,iBAAiBmB,QAAQ,CAACC,MAAM;QAE5E,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,IAAIC;QACJ,IAAI,CAAChB,gBAAgB;YACnBgB,eAAe,MAAM1D,cAAc;gBAAEyB;YAAI,GAAGY,iBAAiBsB,MAAM,CAACC,MAAM;QAC5E;QAEA,MAAM1D,mBAAmB;YACvBmC;YACAK;YACAjB;YACAyB;QACF;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExC,MAAMW,YAAY5D,eAAeiD,OAAOQ;QAExC,IAAII;QAEJ,IAAIzB,iBAAiBmB,QAAQ,EAAEC,UAAUH,iBAAiB;YACxD,MAAMS,gBAAgB9C,wBAAwB4C;YAE9C,MAAM3D,mBAAmB;gBACvBmC,kBAAkBX,WAAWC,MAAM;gBACnCe;gBACAjB;gBACAuC,eAAehD,6BAA6B+B,QAAQpB,MAAM,EAAED,WAAWC,MAAM;gBAC7EuB,OAAOa;YACT;YAEA,MAAME,QAAQ,MAAMlB,QAAQmB,EAAE,CAACC,WAAW,CAAgC;gBACxEzC,YAAYW,iBAAiB+B,IAAI;gBACjC3B;gBACAK;gBACAuB,YAAY;gBACZ5C;gBACAyB,OAAOa;YACT;YAEAD,OAAOG,MAAMH,IAAI;QACnB,OAAO;YACL,MAAMG,QAAQ,MAAMlB,QAAQmB,EAAE,CAACI,IAAI,CAAC;gBAClC5C,YAAYW,iBAAiB+B,IAAI;gBACjC3B;gBACAK;gBACAuB,YAAY;gBACZ5C;gBACAyB,OAAOW;YACT;YAEAC,OAAOG,MAAMH,IAAI;QACnB;QAEA,wCAAwC;QACxC,wCAAwC;QACxC,wCAAwC;QAExC,MAAM,EAAEV,MAAMmB,WAAW,EAAEC,OAAOC,aAAa,EAAE,GAAG,MAAMhE,iBAAiB;YACzEiB;YACAC;YACAyB,MAAMC;YACNnB,WAAW;YACXU;YACAnB;YACAiD,oBAAoB;QACtB;QAEA,MAAMC,SAAS,EAAE;QAEjB,MAAMC,WAAWd,KAAKe,GAAG,CAAC,OAAOC;YAC/B,MAAM,EAAEC,EAAE,EAAE,GAAGD;YACf,IAAI1B,OAAO;gBACT,GAAGmB,WAAW;gBACd,GAAGlB,cAAc;YACnB;YAEA,IAAI;gBACF,wCAAwC;gBACxC,sCAAsC;gBACtC,wCAAwC;gBAExC,MAAMzC,wBAAwB;oBAC5BmE;oBACAC,gBAAgB3C,iBAAiB+B,IAAI;oBACrCa,kBAAkB,CAAC,iBAAiB,EAAEF,GAAG,2DAA2D,CAAC;oBACrGpC;oBACAlB;gBACF;gBAEA,MAAMyD,cAAc,MAAM7E,UAAU;oBAClCqB,YAAYW;oBACZJ,SAASR,IAAIQ,OAAO;oBACpBK,OAAO;oBACPwC;oBACAvC,OAAOC;oBACPK;oBACAsC,QAAQ;oBACRrC;oBACAJ,gBAAgB;oBAChBjB;oBACAwB,kBAAkB;gBACpB;gBAEA,MAAMzC,sBAAsB;oBAC1B6B;oBACAV;oBACAmD;oBACAN,OAAOC;oBACPW,gBAAgB;oBAChB3D;gBACF;gBAEA,IAAIH,KAAKI,UAAU,CAACC,MAAM,CAAC0D,IAAI,EAAE;oBAC/BtF,sBAA6B;wBAC3BuF,aAAahE,KAAKI,UAAU,CAACC,MAAM,CAAC0D,IAAI;wBACxCL,gBAAgB1D,KAAKI,UAAU,CAACC,MAAM,CAACyC,IAAI;wBAC3ChB,MAAM9B,KAAK8B,IAAI;wBACflB,WAAW;wBACXgD;wBACAzD,KAAKH,KAAKG,GAAG;oBACf;gBACF;gBAEA,wCAAwC;gBACxC,0BAA0B;gBAC1B,wCAAwC;gBAExC2B,OAAO,MAAM7C,eAA2D;oBACtEwE;oBACArD,YAAYW;oBACZJ,SAASR,IAAIQ,OAAO;oBACpBmB;oBACA0B,KAAKI;oBACLC,QAAQ;oBACRjD,WAAW;oBACXQ;oBACAjB;gBACF;gBAEA,wCAAwC;gBACxC,8BAA8B;gBAC9B,wCAAwC;gBAExC,MAAMY,iBAAiBT,KAAK,CAACrB,cAAc,CAACuB,MAAM,CAAC,OAAOC,WAAWC;oBACnE,MAAMD;oBAENqB,OACE,AAAC,MAAMpB,KAAK;wBACVN,YAAYW;wBACZJ,SAASR,IAAIQ,OAAO;wBACpBmB;wBACAlB,WAAW;wBACXgD;wBACAzD;oBACF,MAAO2B;gBACX,GAAGjB,QAAQC,OAAO;gBAElB,wCAAwC;gBACxC,+BAA+B;gBAC/B,wCAAwC;gBAExC,IAAI,CAACC,iBAAiBkD,MAAM,CAACC,mBAAmB,EAAE;oBAChD,MAAM7E,YAAYoC,SAAS0B,eAAehD;gBAC5C;gBAEA,wCAAwC;gBACxC,4BAA4B;gBAC5B,wCAAwC;gBAExC,MAAMY,iBAAiBT,KAAK,CAACtB,YAAY,CAACwB,MAAM,CAAC,OAAOC,WAAWC;oBACjE,MAAMD;oBAENqB,OACE,AAAC,MAAMpB,KAAK;wBACVN,YAAYW;wBACZJ,SAASR,IAAIQ,OAAO;wBACpBmB;wBACAlB,WAAW;wBACXgD;wBACAzD;oBACF,MAAO2B;gBACX,GAAGjB,QAAQC,OAAO;gBAElB,wCAAwC;gBACxC,wBAAwB;gBACxB,wCAAwC;gBAExC,IAAIqD,SAAS,MAAMnF,aAAa;oBAC9ByE;oBACArD,YAAYW;oBACZJ,SAASR,IAAIQ,OAAO;oBACpBmB;oBACA0B,KAAKI;oBACLQ,gBAAgBZ;oBAChBK,QAAQ;oBACRjD,WAAW;oBACXT;oBACAkE,gBACErC,mBACAjB,iBAAiBmB,QAAQ,CAACC,MAAM,IAChC,CAACpB,iBAAiBmB,QAAQ,CAACC,MAAM,CAACmC,QAAQ,IAC1CxC,KAAKyC,OAAO,KAAK;gBACrB;gBAEA,wCAAwC;gBACxC,SAAS;gBACT,wCAAwC;gBAExC,IAAI,CAACvC,mBAAmBF,KAAKyC,OAAO,KAAK,aAAa;oBACpDJ,SAAS,MAAMhE,IAAIsB,OAAO,CAACmB,EAAE,CAAC4B,SAAS,CAAC;wBACtCf;wBACArD,YAAYW,iBAAiB+B,IAAI;wBACjChB,MAAMqC;wBACN3C;wBACArB;wBACAuB;oBACF;gBACF;gBAEA,wCAAwC;gBACxC,iBAAiB;gBACjB,wCAAwC;gBAExC,IAAIX,iBAAiBmB,QAAQ,EAAE;oBAC7BiC,SAAS,MAAMvE,YAAY;wBACzB6D;wBACArD,YAAYW;wBACZqD,gBAAgBD;wBAChB1C;wBACAtB;wBACAuB;oBACF;gBACF;gBAEA,wCAAwC;gBACxC,qBAAqB;gBACrB,wCAAwC;gBAExCyC,SAAS,MAAMpF,UAAU;oBACvBqB,YAAYW;oBACZJ,SAASR,IAAIQ,OAAO;oBACpBK;oBACAwC,KAAKW;oBACLlD,OAAOC;oBACPK,gBAAgB;oBAChBsC,QAAQ;oBACRrC;oBACAJ;oBACAjB;oBACAuB;oBACAC;gBACF;gBAEA,wCAAwC;gBACxC,yBAAyB;gBACzB,wCAAwC;gBAExC,MAAMZ,iBAAiBT,KAAK,CAACvB,SAAS,CAACyB,MAAM,CAAC,OAAOC,WAAWC;oBAC9D,MAAMD;oBAEN0D,SACE,AAAC,MAAMzD,KAAK;wBACVN,YAAYW;wBACZJ,SAASR,IAAIQ,OAAO;wBACpB6C,KAAKW;wBACLhE;oBACF,MAAOgE;gBACX,GAAGtD,QAAQC,OAAO;gBAElB,wCAAwC;gBACxC,uBAAuB;gBACvB,wCAAwC;gBAExCqD,SAAS,MAAMrF,YAAY;oBACzBsB,YAAYW;oBACZJ,SAASR,IAAIQ,OAAO;oBACpBmB;oBACA0B,KAAKW;oBACLN,QAAQ;oBACRjD,WAAW;oBACX6D,aAAab;oBACbzD;gBACF;gBAEA,wCAAwC;gBACxC,2BAA2B;gBAC3B,wCAAwC;gBAExC,MAAMY,iBAAiBT,KAAK,CAACxB,WAAW,CAAC0B,MAAM,CAAC,OAAOC,WAAWC;oBAChE,MAAMD;oBAEN0D,SACE,AAAC,MAAMzD,KAAK;wBACVN,YAAYW;wBACZJ,SAASR,IAAIQ,OAAO;wBACpB6C,KAAKW;wBACLvD,WAAW;wBACX6D,aAAab;wBACbzD;oBACF,MAAOgE;gBACX,GAAGtD,QAAQC,OAAO;gBAElB,MAAM1B,gBAAgB;oBACpB2B;oBACAV;oBACAF;gBACF;gBAEA,wCAAwC;gBACxC,iBAAiB;gBACjB,wCAAwC;gBAExC,OAAOgE;YACT,EAAE,OAAOO,OAAO;gBACdrB,OAAOsB,IAAI,CAAC;oBACVlB;oBACAmB,SAASF,MAAME,OAAO;gBACxB;YACF;YACA,OAAO;QACT;QAEA,MAAMC,cAAc,MAAMhE,QAAQiE,GAAG,CAACxB;QAEtC,IAAIa,SAAS;YACX3B,MAAMqC,YAAYE,MAAM,CAAC9C;YACzBoB;QACF;QAEA,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExCc,SAAS,MAAMtE,oBAAoB;YACjCG;YACAI,YAAYW;YACZH,WAAW;YACXuD;QACF;QAEA,IAAIlE,cAAc;YAChB,MAAMV,kBAAkBY;QAC1B;QAEA,OAAOgE;IACT,EAAE,OAAOO,OAAgB;QACvB,MAAMjF,gBAAgBO,KAAKG,GAAG;QAC9B,MAAMuE;IACR;AACF,EAAC"}
1
+ {"version":3,"sources":["../../../src/collections/operations/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { AccessResult } from '../../config/types.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest, PopulateType, SelectType, Where } from '../../types/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths.js'\nimport { APIError } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { buildVersionCollectionFields } from '../../versions/buildCollectionFields.js'\nimport { appendVersionToQueryKey } from '../../versions/drafts/appendVersionToQueryKey.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n limit?: number\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n populate?: PopulateType\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n where: Where\n}\n\nexport const updateOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug>,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<BulkOperationResult<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation: 'update',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n const {\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n limit = 0,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n populate,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select,\n showHiddenFields,\n where,\n } = args\n\n if (!where) {\n throw new APIError(\"Missing 'where' query of documents to update.\", httpStatus.BAD_REQUEST)\n }\n\n const { data: bulkUpdateData } = args\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n let accessResult: AccessResult\n if (!overrideAccess) {\n accessResult = await executeAccess({ req }, collectionConfig.access.update)\n }\n\n await validateQueryPaths({\n collectionConfig,\n overrideAccess,\n req,\n where,\n })\n\n // /////////////////////////////////////\n // Retrieve documents\n // /////////////////////////////////////\n\n const fullWhere = combineQueries(where, accessResult)\n\n let docs\n\n if (collectionConfig.versions?.drafts && shouldSaveDraft) {\n const versionsWhere = appendVersionToQueryKey(fullWhere)\n\n await validateQueryPaths({\n collectionConfig: collection.config,\n overrideAccess,\n req,\n versionFields: buildVersionCollectionFields(payload.config, collection.config),\n where: versionsWhere,\n })\n\n const query = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\n limit,\n locale,\n pagination: false,\n req,\n where: versionsWhere,\n })\n\n docs = query.docs\n } else {\n const query = await payload.db.find({\n collection: collectionConfig.slug,\n limit,\n locale,\n pagination: false,\n req,\n where: fullWhere,\n })\n\n docs = query.docs\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data: bulkUpdateData,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n const errors = []\n\n const promises = docs.map(async (doc) => {\n const { id } = doc\n let data = {\n ...newFileData,\n ...bulkUpdateData,\n }\n\n try {\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n if (args.collection.config.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'update',\n originalDoc,\n req: args.req,\n })\n }\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeValidate.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let result = await beforeChange({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docWithLocales: doc,\n global: null,\n operation: 'update',\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate &&\n data._status !== 'published',\n })\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft || data._status === 'published') {\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: result,\n locale,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n collection: collectionConfig,\n docWithLocales: result,\n payload,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: result,\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })) || result\n }, Promise.resolve())\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n return result\n } catch (error) {\n errors.push({\n id,\n message: error.message,\n })\n }\n return null\n })\n\n const awaitedDocs = await Promise.all(promises)\n\n let result = {\n docs: awaitedDocs.filter(Boolean),\n errors,\n }\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'update',\n result,\n })\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["httpStatus","ensureUsernameOrEmail","executeAccess","combineQueries","validateQueryPaths","APIError","afterChange","afterRead","beforeChange","beforeValidate","deleteAssociatedFiles","generateFileData","unlinkTempFiles","uploadFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","saveVersion","buildAfterOperation","updateOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","depth","draft","draftArg","limit","overrideAccess","overrideLock","overwriteExistingFiles","populate","fallbackLocale","locale","payload","select","showHiddenFields","where","BAD_REQUEST","data","bulkUpdateData","shouldSaveDraft","Boolean","versions","drafts","accessResult","access","update","fullWhere","docs","versionsWhere","versionFields","query","db","queryDrafts","slug","pagination","find","newFileData","files","filesToUpload","throwOnMissingFile","errors","promises","map","doc","id","collectionSlug","lockErrorMessage","originalDoc","global","overrideDelete","auth","authOptions","upload","disableLocalStorage","result","docWithLocales","skipValidation","validate","_status","updateOne","previousDoc","error","push","message","awaitedDocs","all","filter"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { DeepPartial } from 'ts-essentials';
2
2
  import type { CollectionSlug } from '../../index.js';
3
- import type { PayloadRequest, SelectType, TransformCollectionWithSelect } from '../../types/index.js';
3
+ import type { PayloadRequest, PopulateType, SelectType, TransformCollectionWithSelect } from '../../types/index.js';
4
4
  import type { Collection, RequiredDataFromCollectionSlug, SelectFromCollectionSlug } from '../config/types.js';
5
5
  export type Arguments<TSlug extends CollectionSlug> = {
6
6
  autosave?: boolean;
@@ -14,6 +14,7 @@ export type Arguments<TSlug extends CollectionSlug> = {
14
14
  overrideAccess?: boolean;
15
15
  overrideLock?: boolean;
16
16
  overwriteExistingFiles?: boolean;
17
+ populate?: PopulateType;
17
18
  publishSpecificLocale?: string;
18
19
  req: PayloadRequest;
19
20
  select?: SelectType;
@@ -1 +1 @@
1
- {"version":3,"file":"updateByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/updateByID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAMhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EACV,cAAc,EACd,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,8BAA8B,EAC9B,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAwB3B,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,6BAEjC,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CA8ZvD,CAAA"}
1
+ {"version":3,"file":"updateByID.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/updateByID.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAMhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,UAAU,EACV,6BAA6B,EAC9B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EACV,UAAU,EAEV,8BAA8B,EAC9B,wBAAwB,EACzB,MAAM,oBAAoB,CAAA;AAwB3B,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,GAAG,EAAE,cAAc,CAAA;IACnB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,KAAK,SAAS,cAAc,EAC5B,OAAO,SAAS,wBAAwB,CAAC,KAAK,CAAC,6BAEjC,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,6BAA6B,CAAC,KAAK,EAAE,OAAO,CAAC,CAkavD,CAAA"}
@@ -40,7 +40,7 @@ export const updateByIDOperation = async (incomingArgs)=>{
40
40
  if (args.publishSpecificLocale) {
41
41
  args.req.locale = args.publishSpecificLocale;
42
42
  }
43
- const { id, autosave = false, collection: { config: collectionConfig }, collection, depth, draft: draftArg = false, overrideAccess, overrideLock, overwriteExistingFiles = false, publishSpecificLocale, req: { fallbackLocale, locale, payload: { config }, payload }, req, select, showHiddenFields } = args;
43
+ const { id, autosave = false, collection: { config: collectionConfig }, collection, depth, draft: draftArg = false, overrideAccess, overrideLock, overwriteExistingFiles = false, populate, publishSpecificLocale, req: { fallbackLocale, locale, payload: { config }, payload }, req, select, showHiddenFields } = args;
44
44
  if (!id) {
45
45
  throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST);
46
46
  }
@@ -209,7 +209,11 @@ export const updateByIDOperation = async (incomingArgs)=>{
209
209
  skipValidation: shouldSaveDraft && collectionConfig.versions.drafts && !collectionConfig.versions.drafts.validate && data._status !== 'published'
210
210
  };
211
211
  if (publishSpecificLocale) {
212
- publishedDocWithLocales = await getLatestCollectionVersion({
212
+ versionSnapshotResult = await beforeChange({
213
+ ...beforeChangeArgs,
214
+ docWithLocales
215
+ });
216
+ const lastPublished = await getLatestCollectionVersion({
213
217
  id,
214
218
  config: collectionConfig,
215
219
  payload,
@@ -217,10 +221,7 @@ export const updateByIDOperation = async (incomingArgs)=>{
217
221
  query: findOneArgs,
218
222
  req
219
223
  });
220
- versionSnapshotResult = await beforeChange({
221
- ...beforeChangeArgs,
222
- docWithLocales
223
- });
224
+ publishedDocWithLocales = lastPublished ? lastPublished : {};
224
225
  }
225
226
  let result = await beforeChange({
226
227
  ...beforeChangeArgs,
@@ -286,6 +287,7 @@ export const updateByIDOperation = async (incomingArgs)=>{
286
287
  global: null,
287
288
  locale,
288
289
  overrideAccess,
290
+ populate,
289
291
  req,
290
292
  select,
291
293
  showHiddenFields
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/collections/operations/updateByID.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { Args } from '../../fields/hooks/beforeChange/index.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type {\n PayloadRequest,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport { generatePasswordSaltHash } from '../../auth/strategies/local/generatePasswordSaltHash.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n publishSpecificLocale?: string\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n}\n\nexport const updateByIDOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation: 'update',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n if (args.publishSpecificLocale) {\n args.req.locale = args.publishSpecificLocale\n }\n\n const {\n id,\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n publishSpecificLocale,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select,\n showHiddenFields,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST)\n }\n\n let { data } = args\n const password = data?.password\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n const shouldSavePassword = Boolean(password && collectionConfig.auth && !shouldSaveDraft)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, data, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale,\n req,\n where: combineQueries({ id: { equals: id } }, accessResults),\n }\n\n const docWithLocales = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n if (!docWithLocales && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!docWithLocales && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: docWithLocales,\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n if (args.collection.config.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'update',\n originalDoc,\n req: args.req,\n })\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n data = newFileData\n\n // /////////////////////////////////////\n // Delete any associated files\n // /////////////////////////////////////\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docWithLocales,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeValidate.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let publishedDocWithLocales = docWithLocales\n let versionSnapshotResult\n\n const beforeChangeArgs: Args<DataFromCollectionSlug<TSlug>> = {\n id,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id },\n doc: originalDoc,\n docWithLocales: undefined,\n global: null,\n operation: 'update',\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate &&\n data._status !== 'published',\n }\n\n if (publishSpecificLocale) {\n publishedDocWithLocales = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n published: true,\n query: findOneArgs,\n req,\n })\n\n versionSnapshotResult = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales,\n })\n }\n\n let result = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales: publishedDocWithLocales,\n })\n\n // /////////////////////////////////////\n // Handle potential password update\n // /////////////////////////////////////\n\n const dataToUpdate: Record<string, unknown> = { ...result }\n\n if (shouldSavePassword && typeof password === 'string') {\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password,\n req,\n })\n dataToUpdate.salt = salt\n dataToUpdate.hash = hash\n delete dataToUpdate.password\n delete data.password\n }\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft || data._status === 'published') {\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n autosave,\n collection: collectionConfig,\n docWithLocales: result,\n draft: shouldSaveDraft,\n payload,\n publishSpecificLocale,\n req,\n select,\n snapshot: versionSnapshotResult,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: result,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'updateByID',\n result,\n })\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["httpStatus","ensureUsernameOrEmail","executeAccess","generatePasswordSaltHash","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeValidate","deleteAssociatedFiles","generateFileData","unlinkTempFiles","uploadFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","getLatestCollectionVersion","saveVersion","buildAfterOperation","updateByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","publishSpecificLocale","locale","id","autosave","collectionConfig","depth","draft","draftArg","overrideAccess","overrideLock","overwriteExistingFiles","fallbackLocale","payload","select","showHiddenFields","BAD_REQUEST","data","password","shouldSaveDraft","Boolean","versions","drafts","shouldSavePassword","auth","accessResults","access","update","hasWherePolicy","findOneArgs","slug","where","equals","docWithLocales","query","t","collectionSlug","lockErrorMessage","originalDoc","doc","global","authOptions","newFileData","files","filesToUpload","throwOnMissingFile","overrideDelete","upload","disableLocalStorage","publishedDocWithLocales","versionSnapshotResult","beforeChangeArgs","undefined","skipValidation","validate","_status","published","result","dataToUpdate","hash","salt","db","updateOne","snapshot","previousDoc","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/collections/operations/updateByID.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport httpStatus from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { Args } from '../../fields/hooks/beforeChange/index.js'\nimport type { CollectionSlug } from '../../index.js'\nimport type {\n PayloadRequest,\n PopulateType,\n SelectType,\n TransformCollectionWithSelect,\n} from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n SelectFromCollectionSlug,\n} from '../config/types.js'\n\nimport { ensureUsernameOrEmail } from '../../auth/ensureUsernameOrEmail.js'\nimport executeAccess from '../../auth/executeAccess.js'\nimport { generatePasswordSaltHash } from '../../auth/strategies/local/generatePasswordSaltHash.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js'\nimport { generateFileData } from '../../uploads/generateFileData.js'\nimport { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js'\nimport { uploadFiles } from '../../uploads/uploadFiles.js'\nimport { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utils.js'\n\nexport type Arguments<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: Collection\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n disableTransaction?: boolean\n disableVerificationEmail?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n populate?: PopulateType\n publishSpecificLocale?: string\n req: PayloadRequest\n select?: SelectType\n showHiddenFields?: boolean\n}\n\nexport const updateByIDOperation = async <\n TSlug extends CollectionSlug,\n TSelect extends SelectFromCollectionSlug<TSlug> = SelectType,\n>(\n incomingArgs: Arguments<TSlug>,\n): Promise<TransformCollectionWithSelect<TSlug, TSelect>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n // /////////////////////////////////////\n // beforeOperation - Collection\n // /////////////////////////////////////\n\n await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook) => {\n await priorHook\n\n args =\n (await hook({\n args,\n collection: args.collection.config,\n context: args.req.context,\n operation: 'update',\n req: args.req,\n })) || args\n }, Promise.resolve())\n\n if (args.publishSpecificLocale) {\n args.req.locale = args.publishSpecificLocale\n }\n\n const {\n id,\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n populate,\n publishSpecificLocale,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\n select,\n showHiddenFields,\n } = args\n\n if (!id) {\n throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST)\n }\n\n let { data } = args\n const password = data?.password\n const shouldSaveDraft = Boolean(draftArg && collectionConfig.versions.drafts)\n const shouldSavePassword = Boolean(password && collectionConfig.auth && !shouldSaveDraft)\n\n // /////////////////////////////////////\n // Access\n // /////////////////////////////////////\n\n const accessResults = !overrideAccess\n ? await executeAccess({ id, data, req }, collectionConfig.access.update)\n : true\n const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n // /////////////////////////////////////\n // Retrieve document\n // /////////////////////////////////////\n\n const findOneArgs: FindOneArgs = {\n collection: collectionConfig.slug,\n locale,\n req,\n where: combineQueries({ id: { equals: id } }, accessResults),\n }\n\n const docWithLocales = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n query: findOneArgs,\n req,\n })\n\n if (!docWithLocales && !hasWherePolicy) {\n throw new NotFound(req.t)\n }\n if (!docWithLocales && hasWherePolicy) {\n throw new Forbidden(req.t)\n }\n\n // /////////////////////////////////////\n // Handle potentially locked documents\n // /////////////////////////////////////\n\n await checkDocumentLockStatus({\n id,\n collectionSlug: collectionConfig.slug,\n lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,\n overrideLock,\n req,\n })\n\n const originalDoc = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth: 0,\n doc: docWithLocales,\n draft: draftArg,\n fallbackLocale: null,\n global: null,\n locale,\n overrideAccess: true,\n req,\n showHiddenFields: true,\n })\n\n if (args.collection.config.auth) {\n ensureUsernameOrEmail<TSlug>({\n authOptions: args.collection.config.auth,\n collectionSlug: args.collection.config.slug,\n data: args.data,\n operation: 'update',\n originalDoc,\n req: args.req,\n })\n }\n\n // /////////////////////////////////////\n // Generate data for all files and sizes\n // /////////////////////////////////////\n\n const { data: newFileData, files: filesToUpload } = await generateFileData({\n collection,\n config,\n data,\n operation: 'update',\n overwriteExistingFiles,\n req,\n throwOnMissingFile: false,\n })\n\n data = newFileData\n\n // /////////////////////////////////////\n // Delete any associated files\n // /////////////////////////////////////\n\n await deleteAssociatedFiles({\n collectionConfig,\n config,\n doc: docWithLocales,\n files: filesToUpload,\n overrideDelete: false,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Fields\n // /////////////////////////////////////\n\n data = await beforeValidate<DeepPartial<DataFromCollectionSlug<TSlug>>>({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n global: null,\n operation: 'update',\n overrideAccess,\n req,\n })\n\n // /////////////////////////////////////\n // beforeValidate - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeValidate.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // Write files to local storage\n // /////////////////////////////////////\n\n if (!collectionConfig.upload.disableLocalStorage) {\n await uploadFiles(payload, filesToUpload, req)\n }\n\n // /////////////////////////////////////\n // beforeChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.beforeChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n data =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n data,\n operation: 'update',\n originalDoc,\n req,\n })) || data\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // beforeChange - Fields\n // /////////////////////////////////////\n\n let publishedDocWithLocales = docWithLocales\n let versionSnapshotResult\n\n const beforeChangeArgs: Args<DataFromCollectionSlug<TSlug>> = {\n id,\n collection: collectionConfig,\n context: req.context,\n data: { ...data, id },\n doc: originalDoc,\n docWithLocales: undefined,\n global: null,\n operation: 'update',\n req,\n skipValidation:\n shouldSaveDraft &&\n collectionConfig.versions.drafts &&\n !collectionConfig.versions.drafts.validate &&\n data._status !== 'published',\n }\n\n if (publishSpecificLocale) {\n versionSnapshotResult = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales,\n })\n\n const lastPublished = await getLatestCollectionVersion({\n id,\n config: collectionConfig,\n payload,\n published: true,\n query: findOneArgs,\n req,\n })\n\n publishedDocWithLocales = lastPublished ? lastPublished : {}\n }\n\n let result = await beforeChange({\n ...beforeChangeArgs,\n docWithLocales: publishedDocWithLocales,\n })\n\n // /////////////////////////////////////\n // Handle potential password update\n // /////////////////////////////////////\n\n const dataToUpdate: Record<string, unknown> = { ...result }\n\n if (shouldSavePassword && typeof password === 'string') {\n const { hash, salt } = await generatePasswordSaltHash({\n collection: collectionConfig,\n password,\n req,\n })\n dataToUpdate.salt = salt\n dataToUpdate.hash = hash\n delete dataToUpdate.password\n delete data.password\n }\n\n // /////////////////////////////////////\n // Update\n // /////////////////////////////////////\n\n if (!shouldSaveDraft || data._status === 'published') {\n result = await req.payload.db.updateOne({\n id,\n collection: collectionConfig.slug,\n data: dataToUpdate,\n locale,\n req,\n select,\n })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n autosave,\n collection: collectionConfig,\n docWithLocales: result,\n draft: shouldSaveDraft,\n payload,\n publishSpecificLocale,\n req,\n select,\n snapshot: versionSnapshotResult,\n })\n }\n\n // /////////////////////////////////////\n // afterRead - Fields\n // /////////////////////////////////////\n\n result = await afterRead({\n collection: collectionConfig,\n context: req.context,\n depth,\n doc: result,\n draft: draftArg,\n fallbackLocale,\n global: null,\n locale,\n overrideAccess,\n populate,\n req,\n select,\n showHiddenFields,\n })\n\n // /////////////////////////////////////\n // afterRead - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterChange - Fields\n // /////////////////////////////////////\n\n result = await afterChange({\n collection: collectionConfig,\n context: req.context,\n data,\n doc: result,\n global: null,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })\n\n // /////////////////////////////////////\n // afterChange - Collection\n // /////////////////////////////////////\n\n await collectionConfig.hooks.afterChange.reduce(async (priorHook, hook) => {\n await priorHook\n\n result =\n (await hook({\n collection: collectionConfig,\n context: req.context,\n doc: result,\n operation: 'update',\n previousDoc: originalDoc,\n req,\n })) || result\n }, Promise.resolve())\n\n // /////////////////////////////////////\n // afterOperation - Collection\n // /////////////////////////////////////\n\n result = await buildAfterOperation({\n args,\n collection: collectionConfig,\n operation: 'updateByID',\n result,\n })\n\n await unlinkTempFiles({\n collectionConfig,\n config,\n req,\n })\n\n // /////////////////////////////////////\n // Return results\n // /////////////////////////////////////\n\n if (shouldCommit) {\n await commitTransaction(req)\n }\n\n return result as TransformCollectionWithSelect<TSlug, TSelect>\n } catch (error: unknown) {\n await killTransaction(args.req)\n throw error\n }\n}\n"],"names":["httpStatus","ensureUsernameOrEmail","executeAccess","generatePasswordSaltHash","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeValidate","deleteAssociatedFiles","generateFileData","unlinkTempFiles","uploadFiles","checkDocumentLockStatus","commitTransaction","initTransaction","killTransaction","getLatestCollectionVersion","saveVersion","buildAfterOperation","updateByIDOperation","incomingArgs","args","shouldCommit","disableTransaction","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","publishSpecificLocale","locale","id","autosave","collectionConfig","depth","draft","draftArg","overrideAccess","overrideLock","overwriteExistingFiles","populate","fallbackLocale","payload","select","showHiddenFields","BAD_REQUEST","data","password","shouldSaveDraft","Boolean","versions","drafts","shouldSavePassword","auth","accessResults","access","update","hasWherePolicy","findOneArgs","slug","where","equals","docWithLocales","query","t","collectionSlug","lockErrorMessage","originalDoc","doc","global","authOptions","newFileData","files","filesToUpload","throwOnMissingFile","overrideDelete","upload","disableLocalStorage","publishedDocWithLocales","versionSnapshotResult","beforeChangeArgs","undefined","skipValidation","validate","_status","lastPublished","published","result","dataToUpdate","hash","salt","db","updateOne","snapshot","previousDoc","error"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { SanitizedCollectionConfig } from '../collections/config/types.js';
2
+ import type { JoinQuery, PayloadRequest } from '../types/index.js';
3
+ type Args = {
4
+ collectionConfig: SanitizedCollectionConfig;
5
+ joins?: JoinQuery;
6
+ overrideAccess: boolean;
7
+ req: PayloadRequest;
8
+ };
9
+ /**
10
+ * * Validates `where` for each join
11
+ * * Combines the access result for joined collection
12
+ * * Combines the default join's `where`
13
+ */
14
+ export declare const sanitizeJoinQuery: ({ collectionConfig, joins: joinsQuery, overrideAccess, req, }: Args) => Promise<false | Partial<{
15
+ [x: string]: false | {
16
+ limit?: number;
17
+ sort?: string;
18
+ where?: import("../types/index.js").Where;
19
+ };
20
+ }>>;
21
+ export {};
22
+ //# sourceMappingURL=sanitizeJoinQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizeJoinQuery.d.ts","sourceRoot":"","sources":["../../src/database/sanitizeJoinQuery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAOlE,KAAK,IAAI,GAAG;IACV,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,kEAK3B,IAAI;;;;;;GAkEN,CAAA"}
@@ -0,0 +1,61 @@
1
+ import executeAccess from '../auth/executeAccess.js';
2
+ import { QueryError } from '../errors/QueryError.js';
3
+ import { combineQueries } from './combineQueries.js';
4
+ import { validateQueryPaths } from './queryValidation/validateQueryPaths.js';
5
+ /**
6
+ * * Validates `where` for each join
7
+ * * Combines the access result for joined collection
8
+ * * Combines the default join's `where`
9
+ */ export const sanitizeJoinQuery = async ({ collectionConfig, joins: joinsQuery, overrideAccess, req })=>{
10
+ if (joinsQuery === false) {
11
+ return false;
12
+ }
13
+ if (!joinsQuery) {
14
+ joinsQuery = {};
15
+ }
16
+ const errors = [];
17
+ const promises = [];
18
+ for(const collectionSlug in collectionConfig.joins){
19
+ for (const { field, schemaPath } of collectionConfig.joins[collectionSlug]){
20
+ if (joinsQuery[schemaPath] === false) {
21
+ continue;
22
+ }
23
+ const joinCollectionConfig = req.payload.collections[collectionSlug].config;
24
+ const accessResult = !overrideAccess ? await executeAccess({
25
+ disableErrors: true,
26
+ req
27
+ }, joinCollectionConfig.access.read) : true;
28
+ if (accessResult === false) {
29
+ joinsQuery[schemaPath] = false;
30
+ continue;
31
+ }
32
+ if (!joinsQuery[schemaPath]) {
33
+ joinsQuery[schemaPath] = {};
34
+ }
35
+ const joinQuery = joinsQuery[schemaPath];
36
+ if (!joinQuery.where) {
37
+ joinQuery.where = {};
38
+ }
39
+ if (field.where) {
40
+ joinQuery.where = combineQueries(joinQuery.where, field.where);
41
+ }
42
+ if (typeof accessResult === 'object') {
43
+ joinQuery.where = combineQueries(joinQuery.where, accessResult);
44
+ }
45
+ promises.push(validateQueryPaths({
46
+ collectionConfig: joinCollectionConfig,
47
+ errors,
48
+ overrideAccess,
49
+ req,
50
+ where: joinQuery.where
51
+ }));
52
+ }
53
+ }
54
+ await Promise.all(promises);
55
+ if (errors.length > 0) {
56
+ throw new QueryError(errors);
57
+ }
58
+ return joinsQuery;
59
+ };
60
+
61
+ //# sourceMappingURL=sanitizeJoinQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/database/sanitizeJoinQuery.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { JoinQuery, PayloadRequest } from '../types/index.js'\n\nimport executeAccess from '../auth/executeAccess.js'\nimport { QueryError } from '../errors/QueryError.js'\nimport { combineQueries } from './combineQueries.js'\nimport { validateQueryPaths } from './queryValidation/validateQueryPaths.js'\n\ntype Args = {\n collectionConfig: SanitizedCollectionConfig\n joins?: JoinQuery\n overrideAccess: boolean\n req: PayloadRequest\n}\n\n/**\n * * Validates `where` for each join\n * * Combines the access result for joined collection\n * * Combines the default join's `where`\n */\nexport const sanitizeJoinQuery = async ({\n collectionConfig,\n joins: joinsQuery,\n overrideAccess,\n req,\n}: Args) => {\n if (joinsQuery === false) {\n return false\n }\n\n if (!joinsQuery) {\n joinsQuery = {}\n }\n\n const errors: { path: string }[] = []\n const promises: Promise<void>[] = []\n\n for (const collectionSlug in collectionConfig.joins) {\n for (const { field, schemaPath } of collectionConfig.joins[collectionSlug]) {\n if (joinsQuery[schemaPath] === false) {\n continue\n }\n\n const joinCollectionConfig = req.payload.collections[collectionSlug].config\n\n const accessResult = !overrideAccess\n ? await executeAccess({ disableErrors: true, req }, joinCollectionConfig.access.read)\n : true\n\n if (accessResult === false) {\n joinsQuery[schemaPath] = false\n continue\n }\n\n if (!joinsQuery[schemaPath]) {\n joinsQuery[schemaPath] = {}\n }\n\n const joinQuery = joinsQuery[schemaPath]\n\n if (!joinQuery.where) {\n joinQuery.where = {}\n }\n\n if (field.where) {\n joinQuery.where = combineQueries(joinQuery.where, field.where)\n }\n\n if (typeof accessResult === 'object') {\n joinQuery.where = combineQueries(joinQuery.where, accessResult)\n }\n\n promises.push(\n validateQueryPaths({\n collectionConfig: joinCollectionConfig,\n errors,\n overrideAccess,\n req,\n where: joinQuery.where,\n }),\n )\n }\n }\n\n await Promise.all(promises)\n\n if (errors.length > 0) {\n throw new QueryError(errors)\n }\n\n return joinsQuery\n}\n"],"names":["executeAccess","QueryError","combineQueries","validateQueryPaths","sanitizeJoinQuery","collectionConfig","joins","joinsQuery","overrideAccess","req","errors","promises","collectionSlug","field","schemaPath","joinCollectionConfig","payload","collections","config","accessResult","disableErrors","access","read","joinQuery","where","push","Promise","all","length"],"mappings":"AAGA,OAAOA,mBAAmB,2BAA0B;AACpD,SAASC,UAAU,QAAQ,0BAAyB;AACpD,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,kBAAkB,QAAQ,0CAAyC;AAS5E;;;;CAIC,GACD,OAAO,MAAMC,oBAAoB,OAAO,EACtCC,gBAAgB,EAChBC,OAAOC,UAAU,EACjBC,cAAc,EACdC,GAAG,EACE;IACL,IAAIF,eAAe,OAAO;QACxB,OAAO;IACT;IAEA,IAAI,CAACA,YAAY;QACfA,aAAa,CAAC;IAChB;IAEA,MAAMG,SAA6B,EAAE;IACrC,MAAMC,WAA4B,EAAE;IAEpC,IAAK,MAAMC,kBAAkBP,iBAAiBC,KAAK,CAAE;QACnD,KAAK,MAAM,EAAEO,KAAK,EAAEC,UAAU,EAAE,IAAIT,iBAAiBC,KAAK,CAACM,eAAe,CAAE;YAC1E,IAAIL,UAAU,CAACO,WAAW,KAAK,OAAO;gBACpC;YACF;YAEA,MAAMC,uBAAuBN,IAAIO,OAAO,CAACC,WAAW,CAACL,eAAe,CAACM,MAAM;YAE3E,MAAMC,eAAe,CAACX,iBAClB,MAAMR,cAAc;gBAAEoB,eAAe;gBAAMX;YAAI,GAAGM,qBAAqBM,MAAM,CAACC,IAAI,IAClF;YAEJ,IAAIH,iBAAiB,OAAO;gBAC1BZ,UAAU,CAACO,WAAW,GAAG;gBACzB;YACF;YAEA,IAAI,CAACP,UAAU,CAACO,WAAW,EAAE;gBAC3BP,UAAU,CAACO,WAAW,GAAG,CAAC;YAC5B;YAEA,MAAMS,YAAYhB,UAAU,CAACO,WAAW;YAExC,IAAI,CAACS,UAAUC,KAAK,EAAE;gBACpBD,UAAUC,KAAK,GAAG,CAAC;YACrB;YAEA,IAAIX,MAAMW,KAAK,EAAE;gBACfD,UAAUC,KAAK,GAAGtB,eAAeqB,UAAUC,KAAK,EAAEX,MAAMW,KAAK;YAC/D;YAEA,IAAI,OAAOL,iBAAiB,UAAU;gBACpCI,UAAUC,KAAK,GAAGtB,eAAeqB,UAAUC,KAAK,EAAEL;YACpD;YAEAR,SAASc,IAAI,CACXtB,mBAAmB;gBACjBE,kBAAkBU;gBAClBL;gBACAF;gBACAC;gBACAe,OAAOD,UAAUC,KAAK;YACxB;QAEJ;IACF;IAEA,MAAME,QAAQC,GAAG,CAAChB;IAElB,IAAID,OAAOkB,MAAM,GAAG,GAAG;QACrB,MAAM,IAAI3B,WAAWS;IACvB;IAEA,OAAOH;AACT,EAAC"}
@@ -10,9 +10,9 @@ import type { SanitizedCollectionConfig, TypeWithID } from '../../collections/co
10
10
  import type { CustomComponent, LabelFunction, PayloadComponent, StaticLabel } from '../../config/types.js';
11
11
  import type { DBIdentifierName } from '../../database/types.js';
12
12
  import type { SanitizedGlobalConfig } from '../../globals/config/types.js';
13
- import type { ArrayFieldValidation, BlocksFieldValidation, CheckboxFieldValidation, CodeFieldValidation, CollectionSlug, DateFieldValidation, EmailFieldValidation, JSONFieldValidation, PointFieldValidation, RadioFieldValidation, Sort, TextareaFieldValidation } from '../../index.js';
13
+ import type { ArrayFieldValidation, BlocksFieldValidation, CheckboxFieldValidation, CodeFieldValidation, CollectionSlug, DateFieldValidation, EmailFieldValidation, JSONFieldValidation, PointFieldValidation, RadioFieldValidation, RequestContext, Sort, TextareaFieldValidation } from '../../index.js';
14
14
  import type { DocumentPreferences } from '../../preferences/types.js';
15
- import type { Operation, PayloadRequest, RequestContext, Where } from '../../types/index.js';
15
+ import type { Operation, PayloadRequest, Where } from '../../types/index.js';
16
16
  import type { NumberFieldManyValidation, NumberFieldSingleValidation, RelationshipFieldManyValidation, RelationshipFieldSingleValidation, SelectFieldManyValidation, SelectFieldSingleValidation, TextFieldManyValidation, TextFieldSingleValidation, UploadFieldManyValidation, UploadFieldSingleValidation } from '../validations.js';
17
17
  export type FieldHookArgs<TData extends TypeWithID = any, TValue = any, TSiblingData = any> = {
18
18
  /** The collection which the field belongs to. If the field belongs to a global, this will be null. */
@@ -754,6 +754,7 @@ export type JSONField = {
754
754
  Label?: CustomComponent<JSONFieldLabelClientComponent | JSONFieldLabelServerComponent>;
755
755
  } & Admin['components'];
756
756
  editorOptions?: EditorProps['options'];
757
+ maxHeight?: number;
757
758
  } & Admin;
758
759
  jsonSchema?: {
759
760
  fileMatch: string[];
@@ -771,6 +772,7 @@ export type JSONFieldClient = {
771
772
  Error?: MappedComponent;
772
773
  Label?: MappedComponent;
773
774
  } & AdminClient['components'];
775
+ maxHeight?: number;
774
776
  } & AdminClient & Pick<JSONField['admin'], 'editorOptions'>;
775
777
  } & Omit<FieldBaseClient, 'admin'> & Pick<JSONField, 'jsonSchema' | 'type'>;
776
778
  export type SelectField = {
@@ -1137,6 +1139,7 @@ export type JoinField = {
1137
1139
  on: string;
1138
1140
  type: 'join';
1139
1141
  validate?: never;
1142
+ where?: Where;
1140
1143
  } & FieldBase;
1141
1144
  export type JoinFieldClient = {
1142
1145
  admin?: {
@@ -1145,7 +1148,7 @@ export type JoinFieldClient = {
1145
1148
  Label?: MappedComponent;
1146
1149
  } & AdminClient['components'];
1147
1150
  } & AdminClient & Pick<JoinField['admin'], 'disableBulkEdit' | 'readOnly'>;
1148
- } & FieldBaseClient & Pick<JoinField, 'collection' | 'index' | 'maxDepth' | 'on' | 'type'>;
1151
+ } & FieldBaseClient & Pick<JoinField, 'collection' | 'index' | 'maxDepth' | 'on' | 'type' | 'where'>;
1149
1152
  export type Field = ArrayField | BlocksField | CheckboxField | CodeField | CollapsibleField | DateField | EmailField | GroupField | JoinField | JSONField | NumberField | PointField | RadioField | RelationshipField | RichTextField | RowField | SelectField | TabsField | TextareaField | TextField | UIField | UploadField;
1150
1153
  export type ClientField = ArrayFieldClient | BlocksFieldClient | CheckboxFieldClient | CodeFieldClient | CollapsibleFieldClient | DateFieldClient | EmailFieldClient | GroupFieldClient | JoinFieldClient | JSONFieldClient | NumberFieldClient | PointFieldClient | RadioFieldClient | RelationshipFieldClient | RichTextFieldClient | RowFieldClient | SelectFieldClient | TabsFieldClient | TextareaFieldClient | TextFieldClient | UIFieldClient | UploadFieldClient;
1151
1154
  export type ClientFieldProps = ArrayFieldClientProps | BlocksFieldClientProps | CheckboxFieldClientProps | CodeFieldClientProps | CollapsibleFieldClientProps | DateFieldClientProps | EmailFieldClientProps | GroupFieldClientProps | HiddenFieldProps | JSONFieldClientProps | NumberFieldClientProps | PointFieldClientProps | RadioFieldClientProps | RelationshipFieldClientProps | RichTextFieldClientProps | RowFieldClientProps | SelectFieldClientProps | TabsFieldClientProps | TextareaFieldClientProps | UploadFieldClientProps;