payload 3.0.0-beta.107 → 3.0.0-beta.108

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 (206) hide show
  1. package/dist/admin/fields/Join.d.ts +18 -0
  2. package/dist/admin/fields/Join.d.ts.map +1 -0
  3. package/dist/admin/fields/Join.js +3 -0
  4. package/dist/admin/fields/Join.js.map +1 -0
  5. package/dist/admin/types.d.ts +1 -0
  6. package/dist/admin/types.d.ts.map +1 -1
  7. package/dist/admin/types.js.map +1 -1
  8. package/dist/auth/operations/login.d.ts.map +1 -1
  9. package/dist/auth/operations/login.js +1 -0
  10. package/dist/auth/operations/login.js.map +1 -1
  11. package/dist/auth/operations/me.d.ts.map +1 -1
  12. package/dist/auth/operations/me.js +1 -1
  13. package/dist/auth/operations/me.js.map +1 -1
  14. package/dist/auth/operations/refresh.d.ts.map +1 -1
  15. package/dist/auth/operations/refresh.js +1 -0
  16. package/dist/auth/operations/refresh.js.map +1 -1
  17. package/dist/auth/types.d.ts +7 -3
  18. package/dist/auth/types.d.ts.map +1 -1
  19. package/dist/auth/types.js.map +1 -1
  20. package/dist/checkPayloadDependencies.d.ts.map +1 -1
  21. package/dist/checkPayloadDependencies.js +1 -44
  22. package/dist/checkPayloadDependencies.js.map +1 -1
  23. package/dist/collections/config/client.d.ts +2 -2
  24. package/dist/collections/config/client.d.ts.map +1 -1
  25. package/dist/collections/config/client.js.map +1 -1
  26. package/dist/collections/config/sanitize.d.ts.map +1 -1
  27. package/dist/collections/config/sanitize.js +6 -1
  28. package/dist/collections/config/sanitize.js.map +1 -1
  29. package/dist/collections/config/types.d.ts +26 -1
  30. package/dist/collections/config/types.d.ts.map +1 -1
  31. package/dist/collections/config/types.js.map +1 -1
  32. package/dist/collections/operations/delete.d.ts +1 -0
  33. package/dist/collections/operations/delete.d.ts.map +1 -1
  34. package/dist/collections/operations/delete.js +12 -1
  35. package/dist/collections/operations/delete.js.map +1 -1
  36. package/dist/collections/operations/deleteByID.d.ts +1 -0
  37. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  38. package/dist/collections/operations/deleteByID.js +12 -1
  39. package/dist/collections/operations/deleteByID.js.map +1 -1
  40. package/dist/collections/operations/find.d.ts +3 -1
  41. package/dist/collections/operations/find.d.ts.map +1 -1
  42. package/dist/collections/operations/find.js +43 -2
  43. package/dist/collections/operations/find.js.map +1 -1
  44. package/dist/collections/operations/findByID.d.ts +3 -1
  45. package/dist/collections/operations/findByID.d.ts.map +1 -1
  46. package/dist/collections/operations/findByID.js +38 -1
  47. package/dist/collections/operations/findByID.js.map +1 -1
  48. package/dist/collections/operations/findVersions.js +1 -1
  49. package/dist/collections/operations/findVersions.js.map +1 -1
  50. package/dist/collections/operations/local/delete.d.ts +1 -0
  51. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  52. package/dist/collections/operations/local/delete.js +2 -1
  53. package/dist/collections/operations/local/delete.js.map +1 -1
  54. package/dist/collections/operations/local/find.d.ts +3 -1
  55. package/dist/collections/operations/local/find.d.ts.map +1 -1
  56. package/dist/collections/operations/local/find.js +3 -1
  57. package/dist/collections/operations/local/find.js.map +1 -1
  58. package/dist/collections/operations/local/findByID.d.ts +5 -3
  59. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  60. package/dist/collections/operations/local/findByID.js +3 -1
  61. package/dist/collections/operations/local/findByID.js.map +1 -1
  62. package/dist/collections/operations/local/update.d.ts +2 -0
  63. package/dist/collections/operations/local/update.d.ts.map +1 -1
  64. package/dist/collections/operations/local/update.js +3 -1
  65. package/dist/collections/operations/local/update.js.map +1 -1
  66. package/dist/collections/operations/update.d.ts +1 -0
  67. package/dist/collections/operations/update.d.ts.map +1 -1
  68. package/dist/collections/operations/update.js +13 -2
  69. package/dist/collections/operations/update.js.map +1 -1
  70. package/dist/collections/operations/updateByID.d.ts +2 -0
  71. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  72. package/dist/collections/operations/updateByID.js +44 -5
  73. package/dist/collections/operations/updateByID.js.map +1 -1
  74. package/dist/config/client.d.ts +1 -1
  75. package/dist/config/client.d.ts.map +1 -1
  76. package/dist/config/client.js +2 -1
  77. package/dist/config/client.js.map +1 -1
  78. package/dist/config/sanitize.d.ts.map +1 -1
  79. package/dist/config/sanitize.js +2 -0
  80. package/dist/config/sanitize.js.map +1 -1
  81. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  82. package/dist/database/queryValidation/validateSearchParams.js +6 -1
  83. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  84. package/dist/database/types.d.ts +12 -2
  85. package/dist/database/types.d.ts.map +1 -1
  86. package/dist/database/types.js.map +1 -1
  87. package/dist/errors/InvalidFieldJoin.d.ts +6 -0
  88. package/dist/errors/InvalidFieldJoin.d.ts.map +1 -0
  89. package/dist/errors/InvalidFieldJoin.js +8 -0
  90. package/dist/errors/InvalidFieldJoin.js.map +1 -0
  91. package/dist/errors/Locked.d.ts +5 -0
  92. package/dist/errors/Locked.d.ts.map +1 -0
  93. package/dist/errors/Locked.js +9 -0
  94. package/dist/errors/Locked.js.map +1 -0
  95. package/dist/errors/index.d.ts +1 -0
  96. package/dist/errors/index.d.ts.map +1 -1
  97. package/dist/errors/index.js +1 -0
  98. package/dist/errors/index.js.map +1 -1
  99. package/dist/exports/shared.d.ts +1 -1
  100. package/dist/exports/shared.d.ts.map +1 -1
  101. package/dist/exports/shared.js +1 -1
  102. package/dist/exports/shared.js.map +1 -1
  103. package/dist/fields/config/client.d.ts +1 -1
  104. package/dist/fields/config/client.d.ts.map +1 -1
  105. package/dist/fields/config/client.js.map +1 -1
  106. package/dist/fields/config/sanitize.d.ts +7 -2
  107. package/dist/fields/config/sanitize.d.ts.map +1 -1
  108. package/dist/fields/config/sanitize.js +27 -5
  109. package/dist/fields/config/sanitize.js.map +1 -1
  110. package/dist/fields/config/sanitizeJoinField.d.ts +10 -0
  111. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -0
  112. package/dist/fields/config/sanitizeJoinField.js +65 -0
  113. package/dist/fields/config/sanitizeJoinField.js.map +1 -0
  114. package/dist/fields/config/types.d.ts +107 -47
  115. package/dist/fields/config/types.d.ts.map +1 -1
  116. package/dist/fields/config/types.js +4 -1
  117. package/dist/fields/config/types.js.map +1 -1
  118. package/dist/fields/hooks/afterRead/promise.js +1 -1
  119. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  120. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts +2 -2
  121. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  122. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +16 -9
  123. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
  124. package/dist/fields/hooks/beforeChange/index.d.ts +1 -2
  125. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  126. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  127. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  128. package/dist/fields/hooks/beforeChange/promise.js +1 -1
  129. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  130. package/dist/fields/validations.d.ts +11 -1
  131. package/dist/fields/validations.d.ts.map +1 -1
  132. package/dist/fields/validations.js.map +1 -1
  133. package/dist/globals/config/types.d.ts +7 -0
  134. package/dist/globals/config/types.d.ts.map +1 -1
  135. package/dist/globals/config/types.js.map +1 -1
  136. package/dist/globals/operations/findOne.d.ts +1 -0
  137. package/dist/globals/operations/findOne.d.ts.map +1 -1
  138. package/dist/globals/operations/findOne.js +28 -1
  139. package/dist/globals/operations/findOne.js.map +1 -1
  140. package/dist/globals/operations/findVersions.js +1 -1
  141. package/dist/globals/operations/findVersions.js.map +1 -1
  142. package/dist/globals/operations/local/findOne.d.ts +1 -0
  143. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  144. package/dist/globals/operations/local/findOne.js +2 -1
  145. package/dist/globals/operations/local/findOne.js.map +1 -1
  146. package/dist/globals/operations/local/update.d.ts +2 -0
  147. package/dist/globals/operations/local/update.d.ts.map +1 -1
  148. package/dist/globals/operations/local/update.js +3 -1
  149. package/dist/globals/operations/local/update.js.map +1 -1
  150. package/dist/globals/operations/update.d.ts +2 -0
  151. package/dist/globals/operations/update.d.ts.map +1 -1
  152. package/dist/globals/operations/update.js +47 -7
  153. package/dist/globals/operations/update.js.map +1 -1
  154. package/dist/index.d.ts +12 -6
  155. package/dist/index.d.ts.map +1 -1
  156. package/dist/index.js +28 -10
  157. package/dist/index.js.map +1 -1
  158. package/dist/lockedDocuments/lockedDocumentsCollection.d.ts +4 -0
  159. package/dist/lockedDocuments/lockedDocumentsCollection.d.ts.map +1 -0
  160. package/dist/lockedDocuments/lockedDocumentsCollection.js +31 -0
  161. package/dist/lockedDocuments/lockedDocumentsCollection.js.map +1 -0
  162. package/dist/types/index.d.ts +11 -2
  163. package/dist/types/index.d.ts.map +1 -1
  164. package/dist/types/index.js.map +1 -1
  165. package/dist/utilities/checkDocumentLockStatus.d.ts +13 -0
  166. package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -0
  167. package/dist/utilities/checkDocumentLockStatus.js +66 -0
  168. package/dist/utilities/checkDocumentLockStatus.js.map +1 -0
  169. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  170. package/dist/utilities/configToJSONSchema.js +26 -0
  171. package/dist/utilities/configToJSONSchema.js.map +1 -1
  172. package/dist/utilities/traverseFields.d.ts +36 -0
  173. package/dist/utilities/traverseFields.d.ts.map +1 -0
  174. package/dist/utilities/traverseFields.js +81 -0
  175. package/dist/utilities/traverseFields.js.map +1 -0
  176. package/dist/versions/baseFields.d.ts +1 -0
  177. package/dist/versions/baseFields.d.ts.map +1 -1
  178. package/dist/versions/baseFields.js +14 -0
  179. package/dist/versions/baseFields.js.map +1 -1
  180. package/dist/versions/buildCollectionFields.d.ts +2 -1
  181. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  182. package/dist/versions/buildCollectionFields.js +27 -8
  183. package/dist/versions/buildCollectionFields.js.map +1 -1
  184. package/dist/versions/buildGlobalFields.d.ts +2 -1
  185. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  186. package/dist/versions/buildGlobalFields.js +27 -8
  187. package/dist/versions/buildGlobalFields.js.map +1 -1
  188. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  189. package/dist/versions/drafts/replaceWithDraftIfAvailable.js +12 -3
  190. package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
  191. package/dist/versions/getLatestCollectionVersion.d.ts +2 -1
  192. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  193. package/dist/versions/getLatestCollectionVersion.js +38 -13
  194. package/dist/versions/getLatestCollectionVersion.js.map +1 -1
  195. package/dist/versions/getLatestGlobalVersion.d.ts +2 -1
  196. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  197. package/dist/versions/getLatestGlobalVersion.js +12 -4
  198. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  199. package/dist/versions/saveVersion.d.ts +3 -1
  200. package/dist/versions/saveVersion.d.ts.map +1 -1
  201. package/dist/versions/saveVersion.js +44 -20
  202. package/dist/versions/saveVersion.js.map +1 -1
  203. package/dist/versions/types.d.ts +1 -0
  204. package/dist/versions/types.d.ts.map +1 -1
  205. package/dist/versions/types.js.map +1 -1
  206. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/collections/operations/local/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,uBAAuB,CAAA;AAQ9B,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,cAAc,IAAI;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,KAAK,CAAA;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,cAAc,CAAC,EAAE,WAAW,CAAA;IAC5B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,cAAc,IAAI;IACtD,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;AAEtB,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,cAAc,IAAI;IACtD,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,KAAK,EAAE,KAAK,CAAA;CACb,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;AAEtB,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,cAAc,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;AAE3F,iBAAe,WAAW,CAAC,KAAK,SAAS,cAAc,EACrD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,GAC1B,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;AACzC,iBAAe,WAAW,CAAC,KAAK,SAAS,cAAc,EACrD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,GAC1B,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;AACtC,iBAAe,WAAW,CAAC,KAAK,SAAS,cAAc,EACrD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GACtB,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;AAoDtE,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/collections/operations/local/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC7E,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,uBAAuB,CAAA;AAQ9B,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,cAAc,IAAI;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,KAAK,CAAA;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,cAAc,CAAC,EAAE,WAAW,CAAA;IAC5B,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,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,CAAC,EAAE,cAAc,CAAA;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,cAAc,IAAI;IACtD,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;AAEtB,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,cAAc,IAAI;IACtD,EAAE,CAAC,EAAE,KAAK,CAAA;IACV,KAAK,EAAE,KAAK,CAAA;CACb,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;AAEtB,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,cAAc,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;AAE3F,iBAAe,WAAW,CAAC,KAAK,SAAS,cAAc,EACrD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,GAC1B,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;AACzC,iBAAe,WAAW,CAAC,KAAK,SAAS,cAAc,EACrD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,GAC1B,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;AACtC,iBAAe,WAAW,CAAC,KAAK,SAAS,cAAc,EACrD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GACtB,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAA;AAwDtE,eAAe,WAAW,CAAA"}
@@ -4,7 +4,7 @@ import { createLocalReq } from '../../../utilities/createLocalReq.js';
4
4
  import { updateOperation } from '../update.js';
5
5
  import { updateByIDOperation } from '../updateByID.js';
6
6
  async function updateLocal(payload, options) {
7
- const { id, autosave, collection: collectionSlug, data, depth, draft, file, filePath, overrideAccess = true, overwriteExistingFiles = false, showHiddenFields, where } = options;
7
+ const { id, autosave, collection: collectionSlug, data, depth, draft, file, filePath, overrideAccess = true, overrideLock, overwriteExistingFiles = false, publishSpecificLocale, showHiddenFields, where } = options;
8
8
  const collection = payload.collections[collectionSlug];
9
9
  if (!collection) {
10
10
  throw new APIError(`The collection with slug ${String(collectionSlug)} can't be found. Update Operation.`);
@@ -19,8 +19,10 @@ async function updateLocal(payload, options) {
19
19
  depth,
20
20
  draft,
21
21
  overrideAccess,
22
+ overrideLock,
22
23
  overwriteExistingFiles,
23
24
  payload,
25
+ publishSpecificLocale,
24
26
  req,
25
27
  showHiddenFields,
26
28
  where
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/collections/operations/local/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { CollectionSlug, Payload, TypedLocale } from '../../../index.js'\nimport type { Document, PayloadRequest, RequestContext, Where } from '../../../types/index.js'\nimport type { File } from '../../../uploads/types.js'\nimport type {\n BulkOperationResult,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n} from '../../config/types.js'\n\nimport { APIError } from '../../../errors/index.js'\nimport { getFileByPath } from '../../../uploads/getFileByPath.js'\nimport { createLocalReq } from '../../../utilities/createLocalReq.js'\nimport { updateOperation } from '../update.js'\nimport { updateByIDOperation } from '../updateByID.js'\n\nexport type BaseOptions<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: TSlug\n /**\n * context, which will then be passed to req.context, which can be read by hooks\n */\n context?: RequestContext\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n draft?: boolean\n fallbackLocale?: TypedLocale\n file?: File\n filePath?: string\n locale?: TypedLocale\n overrideAccess?: boolean\n overwriteExistingFiles?: boolean\n req?: PayloadRequest\n showHiddenFields?: boolean\n user?: Document\n}\n\nexport type ByIDOptions<TSlug extends CollectionSlug> = {\n id: number | string\n where?: never\n} & BaseOptions<TSlug>\n\nexport type ManyOptions<TSlug extends CollectionSlug> = {\n id?: never\n where: Where\n} & BaseOptions<TSlug>\n\nexport type Options<TSlug extends CollectionSlug> = ByIDOptions<TSlug> | ManyOptions<TSlug>\n\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: ByIDOptions<TSlug>,\n): Promise<DataFromCollectionSlug<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: ManyOptions<TSlug>,\n): Promise<BulkOperationResult<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: Options<TSlug>,\n): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: Options<TSlug>,\n): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>> {\n const {\n id,\n autosave,\n collection: collectionSlug,\n data,\n depth,\n draft,\n file,\n filePath,\n overrideAccess = true,\n overwriteExistingFiles = false,\n showHiddenFields,\n where,\n } = options\n\n const collection = payload.collections[collectionSlug]\n\n if (!collection) {\n throw new APIError(\n `The collection with slug ${String(collectionSlug)} can't be found. Update Operation.`,\n )\n }\n\n const req = await createLocalReq(options, payload)\n req.file = file ?? (await getFileByPath(filePath))\n\n const args = {\n id,\n autosave,\n collection,\n data,\n depth,\n draft,\n overrideAccess,\n overwriteExistingFiles,\n payload,\n req,\n showHiddenFields,\n where,\n }\n\n if (options.id) {\n return updateByIDOperation<TSlug>(args)\n }\n return updateOperation<TSlug>(args)\n}\n\nexport default updateLocal\n"],"names":["APIError","getFileByPath","createLocalReq","updateOperation","updateByIDOperation","updateLocal","payload","options","id","autosave","collection","collectionSlug","data","depth","draft","file","filePath","overrideAccess","overwriteExistingFiles","showHiddenFields","where","collections","String","req","args"],"mappings":"AAWA,SAASA,QAAQ,QAAQ,2BAA0B;AACnD,SAASC,aAAa,QAAQ,oCAAmC;AACjE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,eAAe,QAAQ,eAAc;AAC9C,SAASC,mBAAmB,QAAQ,mBAAkB;AA+CtD,eAAeC,YACbC,OAAgB,EAChBC,OAAuB;IAEvB,MAAM,EACJC,EAAE,EACFC,QAAQ,EACRC,YAAYC,cAAc,EAC1BC,IAAI,EACJC,KAAK,EACLC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,iBAAiB,IAAI,EACrBC,yBAAyB,KAAK,EAC9BC,gBAAgB,EAChBC,KAAK,EACN,GAAGb;IAEJ,MAAMG,aAAaJ,QAAQe,WAAW,CAACV,eAAe;IAEtD,IAAI,CAACD,YAAY;QACf,MAAM,IAAIV,SACR,CAAC,yBAAyB,EAAEsB,OAAOX,gBAAgB,kCAAkC,CAAC;IAE1F;IAEA,MAAMY,MAAM,MAAMrB,eAAeK,SAASD;IAC1CiB,IAAIR,IAAI,GAAGA,QAAS,MAAMd,cAAce;IAExC,MAAMQ,OAAO;QACXhB;QACAC;QACAC;QACAE;QACAC;QACAC;QACAG;QACAC;QACAZ;QACAiB;QACAJ;QACAC;IACF;IAEA,IAAIb,QAAQC,EAAE,EAAE;QACd,OAAOJ,oBAA2BoB;IACpC;IACA,OAAOrB,gBAAuBqB;AAChC;AAEA,eAAenB,YAAW"}
1
+ {"version":3,"sources":["../../../../src/collections/operations/local/update.ts"],"sourcesContent":["import type { DeepPartial } from 'ts-essentials'\n\nimport type { CollectionSlug, Payload, TypedLocale } from '../../../index.js'\nimport type { Document, PayloadRequest, RequestContext, Where } from '../../../types/index.js'\nimport type { File } from '../../../uploads/types.js'\nimport type {\n BulkOperationResult,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\n} from '../../config/types.js'\n\nimport { APIError } from '../../../errors/index.js'\nimport { getFileByPath } from '../../../uploads/getFileByPath.js'\nimport { createLocalReq } from '../../../utilities/createLocalReq.js'\nimport { updateOperation } from '../update.js'\nimport { updateByIDOperation } from '../updateByID.js'\n\nexport type BaseOptions<TSlug extends CollectionSlug> = {\n autosave?: boolean\n collection: TSlug\n /**\n * context, which will then be passed to req.context, which can be read by hooks\n */\n context?: RequestContext\n data: DeepPartial<RequiredDataFromCollectionSlug<TSlug>>\n depth?: number\n draft?: boolean\n fallbackLocale?: TypedLocale\n file?: File\n filePath?: string\n locale?: TypedLocale\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n publishSpecificLocale?: string\n req?: PayloadRequest\n showHiddenFields?: boolean\n user?: Document\n}\n\nexport type ByIDOptions<TSlug extends CollectionSlug> = {\n id: number | string\n where?: never\n} & BaseOptions<TSlug>\n\nexport type ManyOptions<TSlug extends CollectionSlug> = {\n id?: never\n where: Where\n} & BaseOptions<TSlug>\n\nexport type Options<TSlug extends CollectionSlug> = ByIDOptions<TSlug> | ManyOptions<TSlug>\n\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: ByIDOptions<TSlug>,\n): Promise<DataFromCollectionSlug<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: ManyOptions<TSlug>,\n): Promise<BulkOperationResult<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: Options<TSlug>,\n): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>>\nasync function updateLocal<TSlug extends CollectionSlug>(\n payload: Payload,\n options: Options<TSlug>,\n): Promise<BulkOperationResult<TSlug> | DataFromCollectionSlug<TSlug>> {\n const {\n id,\n autosave,\n collection: collectionSlug,\n data,\n depth,\n draft,\n file,\n filePath,\n overrideAccess = true,\n overrideLock,\n overwriteExistingFiles = false,\n publishSpecificLocale,\n showHiddenFields,\n where,\n } = options\n\n const collection = payload.collections[collectionSlug]\n\n if (!collection) {\n throw new APIError(\n `The collection with slug ${String(collectionSlug)} can't be found. Update Operation.`,\n )\n }\n\n const req = await createLocalReq(options, payload)\n req.file = file ?? (await getFileByPath(filePath))\n\n const args = {\n id,\n autosave,\n collection,\n data,\n depth,\n draft,\n overrideAccess,\n overrideLock,\n overwriteExistingFiles,\n payload,\n publishSpecificLocale,\n req,\n showHiddenFields,\n where,\n }\n\n if (options.id) {\n return updateByIDOperation<TSlug>(args)\n }\n return updateOperation<TSlug>(args)\n}\n\nexport default updateLocal\n"],"names":["APIError","getFileByPath","createLocalReq","updateOperation","updateByIDOperation","updateLocal","payload","options","id","autosave","collection","collectionSlug","data","depth","draft","file","filePath","overrideAccess","overrideLock","overwriteExistingFiles","publishSpecificLocale","showHiddenFields","where","collections","String","req","args"],"mappings":"AAWA,SAASA,QAAQ,QAAQ,2BAA0B;AACnD,SAASC,aAAa,QAAQ,oCAAmC;AACjE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,eAAe,QAAQ,eAAc;AAC9C,SAASC,mBAAmB,QAAQ,mBAAkB;AAiDtD,eAAeC,YACbC,OAAgB,EAChBC,OAAuB;IAEvB,MAAM,EACJC,EAAE,EACFC,QAAQ,EACRC,YAAYC,cAAc,EAC1BC,IAAI,EACJC,KAAK,EACLC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,iBAAiB,IAAI,EACrBC,YAAY,EACZC,yBAAyB,KAAK,EAC9BC,qBAAqB,EACrBC,gBAAgB,EAChBC,KAAK,EACN,GAAGf;IAEJ,MAAMG,aAAaJ,QAAQiB,WAAW,CAACZ,eAAe;IAEtD,IAAI,CAACD,YAAY;QACf,MAAM,IAAIV,SACR,CAAC,yBAAyB,EAAEwB,OAAOb,gBAAgB,kCAAkC,CAAC;IAE1F;IAEA,MAAMc,MAAM,MAAMvB,eAAeK,SAASD;IAC1CmB,IAAIV,IAAI,GAAGA,QAAS,MAAMd,cAAce;IAExC,MAAMU,OAAO;QACXlB;QACAC;QACAC;QACAE;QACAC;QACAC;QACAG;QACAC;QACAC;QACAb;QACAc;QACAK;QACAJ;QACAC;IACF;IAEA,IAAIf,QAAQC,EAAE,EAAE;QACd,OAAOJ,oBAA2BsB;IACpC;IACA,OAAOvB,gBAAuBuB;AAChC;AAEA,eAAerB,YAAW"}
@@ -9,6 +9,7 @@ export type Arguments<TSlug extends CollectionSlug> = {
9
9
  disableVerificationEmail?: boolean;
10
10
  draft?: boolean;
11
11
  overrideAccess?: boolean;
12
+ overrideLock?: boolean;
12
13
  overwriteExistingFiles?: boolean;
13
14
  req: PayloadRequest;
14
15
  showHiddenFields?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EAEV,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAuB3B,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,KAAK,SAAS,cAAc,gBAClD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAqYpC,CAAA"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/collections/operations/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EACV,mBAAmB,EACnB,UAAU,EAEV,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAwB3B,MAAM,MAAM,SAAS,CAAC,KAAK,SAAS,cAAc,IAAI;IACpD,UAAU,EAAE,UAAU,CAAA;IACtB,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,KAAK,SAAS,cAAc,gBAClD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAkZpC,CAAA"}
@@ -12,6 +12,7 @@ import { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js';
12
12
  import { generateFileData } from '../../uploads/generateFileData.js';
13
13
  import { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js';
14
14
  import { uploadFiles } from '../../uploads/uploadFiles.js';
15
+ import { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js';
15
16
  import { commitTransaction } from '../../utilities/commitTransaction.js';
16
17
  import { initTransaction } from '../../utilities/initTransaction.js';
17
18
  import { killTransaction } from '../../utilities/killTransaction.js';
@@ -36,7 +37,7 @@ export const updateOperation = async (incomingArgs)=>{
36
37
  req: args.req
37
38
  }) || args;
38
39
  }, Promise.resolve());
39
- const { collection: { config: collectionConfig }, collection, depth, draft: draftArg = false, overrideAccess, overwriteExistingFiles = false, req: { fallbackLocale, locale, payload: { config }, payload }, req, showHiddenFields, where } = args;
40
+ const { collection: { config: collectionConfig }, collection, depth, draft: draftArg = false, overrideAccess, overrideLock, overwriteExistingFiles = false, req: { fallbackLocale, locale, payload: { config }, payload }, req, showHiddenFields, where } = args;
40
41
  if (!where) {
41
42
  throw new APIError("Missing 'where' query of documents to update.", httpStatus.BAD_REQUEST);
42
43
  }
@@ -68,7 +69,7 @@ export const updateOperation = async (incomingArgs)=>{
68
69
  collectionConfig: collection.config,
69
70
  overrideAccess,
70
71
  req,
71
- versionFields: buildVersionCollectionFields(collection.config),
72
+ versionFields: buildVersionCollectionFields(payload.config, collection.config),
72
73
  where: versionsWhere
73
74
  });
74
75
  const query = await payload.db.queryDrafts({
@@ -110,6 +111,16 @@ export const updateOperation = async (incomingArgs)=>{
110
111
  ...bulkUpdateData
111
112
  };
112
113
  try {
114
+ // /////////////////////////////////////
115
+ // Handle potentially locked documents
116
+ // /////////////////////////////////////
117
+ await checkDocumentLockStatus({
118
+ id,
119
+ collectionSlug: collectionConfig.slug,
120
+ lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,
121
+ overrideLock,
122
+ req
123
+ });
113
124
  const originalDoc = await afterRead({
114
125
  collection: collectionConfig,
115
126
  context: req.context,
@@ -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, Where } from '../../types/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\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 { 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 disableVerificationEmail?: boolean\n draft?: boolean\n overrideAccess?: boolean\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n where: Where\n}\n\nexport const updateOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<BulkOperationResult<TSlug>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = 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 overrideAccess,\n overwriteExistingFiles = false,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\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(collection.config),\n where: versionsWhere,\n })\n\n const query = await payload.db.queryDrafts<DataFromCollectionSlug<TSlug>>({\n collection: collectionConfig.slug,\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: 0,\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 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 })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n collection: collectionConfig,\n docWithLocales: {\n ...result,\n createdAt: doc.createdAt,\n },\n payload,\n req,\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 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","commitTransaction","initTransaction","killTransaction","buildVersionCollectionFields","appendVersionToQueryKey","saveVersion","buildAfterOperation","updateOperation","incomingArgs","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","depth","draft","draftArg","overrideAccess","overwriteExistingFiles","fallbackLocale","locale","payload","showHiddenFields","where","BAD_REQUEST","data","bulkUpdateData","shouldSaveDraft","Boolean","versions","drafts","accessResult","access","update","fullWhere","docs","versionsWhere","versionFields","query","db","queryDrafts","slug","pagination","find","limit","newFileData","files","filesToUpload","throwOnMissingFile","errors","promises","map","doc","id","originalDoc","global","overrideDelete","auth","authOptions","collectionSlug","upload","disableLocalStorage","result","docWithLocales","skipValidation","validate","_status","updateOne","createdAt","previousDoc","error","push","message","awaitedDocs","all","filter"],"mappings":"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"}
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, Where } from '../../types/index.js'\nimport type {\n BulkOperationResult,\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\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 disableVerificationEmail?: boolean\n draft?: boolean\n overrideAccess?: boolean\n overrideLock?: boolean\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n where: Where\n}\n\nexport const updateOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<BulkOperationResult<TSlug>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = 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 overrideAccess,\n overrideLock,\n overwriteExistingFiles = false,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\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 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: 0,\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 })\n }\n\n // /////////////////////////////////////\n // Create version\n // /////////////////////////////////////\n\n if (collectionConfig.versions) {\n result = await saveVersion({\n id,\n collection: collectionConfig,\n docWithLocales: {\n ...result,\n createdAt: doc.createdAt,\n },\n payload,\n req,\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 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","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","collectionConfig","depth","draft","draftArg","overrideAccess","overrideLock","overwriteExistingFiles","fallbackLocale","locale","payload","showHiddenFields","where","BAD_REQUEST","data","bulkUpdateData","shouldSaveDraft","Boolean","versions","drafts","accessResult","access","update","fullWhere","docs","versionsWhere","versionFields","query","db","queryDrafts","slug","pagination","find","limit","newFileData","files","filesToUpload","throwOnMissingFile","errors","promises","map","doc","id","collectionSlug","lockErrorMessage","originalDoc","global","overrideDelete","auth","authOptions","upload","disableLocalStorage","result","docWithLocales","skipValidation","validate","_status","updateOne","createdAt","previousDoc","error","push","message","awaitedDocs","all","filter"],"mappings":"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"}
@@ -11,7 +11,9 @@ export type Arguments<TSlug extends CollectionSlug> = {
11
11
  draft?: boolean;
12
12
  id: number | string;
13
13
  overrideAccess?: boolean;
14
+ overrideLock?: boolean;
14
15
  overwriteExistingFiles?: boolean;
16
+ publishSpecificLocale?: string;
15
17
  req: PayloadRequest;
16
18
  showHiddenFields?: boolean;
17
19
  };
@@ -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;AAKhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EACV,UAAU,EACV,sBAAsB,EACtB,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAuB3B,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,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,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,KAAK,SAAS,cAAc,gBACtD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAiXvC,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,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EACV,UAAU,EACV,sBAAsB,EACtB,8BAA8B,EAC/B,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,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,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAU,KAAK,SAAS,cAAc,gBACtD,SAAS,CAAC,KAAK,CAAC,KAC7B,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,CA6ZvC,CAAA"}
@@ -13,6 +13,7 @@ import { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles.js';
13
13
  import { generateFileData } from '../../uploads/generateFileData.js';
14
14
  import { unlinkTempFiles } from '../../uploads/unlinkTempFiles.js';
15
15
  import { uploadFiles } from '../../uploads/uploadFiles.js';
16
+ import { checkDocumentLockStatus } from '../../utilities/checkDocumentLockStatus.js';
16
17
  import { commitTransaction } from '../../utilities/commitTransaction.js';
17
18
  import { initTransaction } from '../../utilities/initTransaction.js';
18
19
  import { killTransaction } from '../../utilities/killTransaction.js';
@@ -36,7 +37,10 @@ export const updateByIDOperation = async (incomingArgs)=>{
36
37
  req: args.req
37
38
  }) || args;
38
39
  }, Promise.resolve());
39
- const { id, autosave = false, collection: { config: collectionConfig }, collection, depth, draft: draftArg = false, overrideAccess, overwriteExistingFiles = false, req: { fallbackLocale, locale, payload: { config }, payload }, req, showHiddenFields } = args;
40
+ if (args.publishSpecificLocale) {
41
+ args.req.locale = args.publishSpecificLocale;
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, showHiddenFields } = args;
40
44
  if (!id) {
41
45
  throw new APIError('Missing ID of document to update.', httpStatus.BAD_REQUEST);
42
46
  }
@@ -79,6 +83,16 @@ export const updateByIDOperation = async (incomingArgs)=>{
79
83
  if (!docWithLocales && hasWherePolicy) {
80
84
  throw new Forbidden(req.t);
81
85
  }
86
+ // /////////////////////////////////////
87
+ // Handle potentially locked documents
88
+ // /////////////////////////////////////
89
+ await checkDocumentLockStatus({
90
+ id,
91
+ collectionSlug: collectionConfig.slug,
92
+ lockErrorMessage: `Document with ID ${id} is currently locked by another user and cannot be updated.`,
93
+ overrideLock,
94
+ req
95
+ });
82
96
  const originalDoc = await afterRead({
83
97
  collection: collectionConfig,
84
98
  context: req.context,
@@ -177,17 +191,40 @@ export const updateByIDOperation = async (incomingArgs)=>{
177
191
  // /////////////////////////////////////
178
192
  // beforeChange - Fields
179
193
  // /////////////////////////////////////
180
- let result = await beforeChange({
194
+ let publishedDocWithLocales = docWithLocales;
195
+ let versionSnapshotResult;
196
+ const beforeChangeArgs = {
181
197
  id,
182
198
  collection: collectionConfig,
183
199
  context: req.context,
184
- data,
200
+ data: {
201
+ ...data,
202
+ id
203
+ },
185
204
  doc: originalDoc,
186
- docWithLocales,
205
+ docWithLocales: undefined,
187
206
  global: null,
188
207
  operation: 'update',
189
208
  req,
190
209
  skipValidation: shouldSaveDraft && collectionConfig.versions.drafts && !collectionConfig.versions.drafts.validate && data._status !== 'published'
210
+ };
211
+ if (publishSpecificLocale) {
212
+ publishedDocWithLocales = await getLatestCollectionVersion({
213
+ id,
214
+ config: collectionConfig,
215
+ payload,
216
+ published: true,
217
+ query: findOneArgs,
218
+ req
219
+ });
220
+ versionSnapshotResult = await beforeChange({
221
+ ...beforeChangeArgs,
222
+ docWithLocales
223
+ });
224
+ }
225
+ let result = await beforeChange({
226
+ ...beforeChangeArgs,
227
+ docWithLocales: publishedDocWithLocales
191
228
  });
192
229
  // /////////////////////////////////////
193
230
  // Handle potential password update
@@ -232,7 +269,9 @@ export const updateByIDOperation = async (incomingArgs)=>{
232
269
  },
233
270
  draft: shouldSaveDraft,
234
271
  payload,
235
- req
272
+ publishSpecificLocale,
273
+ req,
274
+ snapshot: versionSnapshotResult
236
275
  });
237
276
  }
238
277
  // /////////////////////////////////////
@@ -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 { CollectionSlug } from '../../index.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\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 { 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 disableVerificationEmail?: boolean\n draft?: boolean\n id: number | string\n overrideAccess?: boolean\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n showHiddenFields?: boolean\n}\n\nexport const updateByIDOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<DataFromCollectionSlug<TSlug>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = 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 id,\n autosave = false,\n collection: { config: collectionConfig },\n collection,\n depth,\n draft: draftArg = false,\n overrideAccess,\n overwriteExistingFiles = false,\n req: {\n fallbackLocale,\n locale,\n payload: { config },\n payload,\n },\n req,\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 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 result = await beforeChange({\n id,\n collection: collectionConfig,\n context: req.context,\n data,\n doc: originalDoc,\n docWithLocales,\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 // 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 })\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: {\n ...result,\n createdAt: docWithLocales.createdAt,\n },\n draft: shouldSaveDraft,\n payload,\n req,\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 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\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","commitTransaction","initTransaction","killTransaction","getLatestCollectionVersion","saveVersion","buildAfterOperation","updateByIDOperation","incomingArgs","args","shouldCommit","req","collection","config","hooks","beforeOperation","reduce","priorHook","hook","context","operation","Promise","resolve","id","autosave","collectionConfig","depth","draft","draftArg","overrideAccess","overwriteExistingFiles","fallbackLocale","locale","payload","showHiddenFields","BAD_REQUEST","data","password","shouldSaveDraft","Boolean","versions","drafts","shouldSavePassword","auth","accessResults","access","update","hasWherePolicy","findOneArgs","slug","where","equals","docWithLocales","query","t","originalDoc","doc","global","authOptions","collectionSlug","newFileData","files","filesToUpload","throwOnMissingFile","overrideDelete","upload","disableLocalStorage","result","skipValidation","validate","_status","dataToUpdate","hash","salt","db","updateOne","createdAt","previousDoc","error"],"mappings":"AAEA,OAAOA,gBAAgB,cAAa;AAWpC,SAASC,qBAAqB,QAAQ,sCAAqC;AAC3E,OAAOC,mBAAmB,8BAA6B;AACvD,SAASC,wBAAwB,QAAQ,0DAAyD;AAClG,SAASC,oBAAoB,QAAQ,sBAAqB;AAC1D,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,wBAAuB;AACrE,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,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,0BAA0B,QAAQ,+CAA8C;AACzF,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,mBAAmB,QAAQ,aAAY;AAgBhD,OAAO,MAAMC,sBAAsB,OACjCC;IAEA,IAAIC,OAAOD;IAEX,IAAI;QACF,MAAME,eAAe,MAAMR,gBAAgBO,KAAKE,GAAG;QAEnD,wCAAwC;QACxC,+BAA+B;QAC/B,wCAAwC;QAExC,MAAMF,KAAKG,UAAU,CAACC,MAAM,CAACC,KAAK,CAACC,eAAe,CAACC,MAAM,CAAC,OAAOC,WAAWC;YAC1E,MAAMD;YAENR,OACE,AAAC,MAAMS,KAAK;gBACVT;gBACAG,YAAYH,KAAKG,UAAU,CAACC,MAAM;gBAClCM,SAASV,KAAKE,GAAG,CAACQ,OAAO;gBACzBC,WAAW;gBACXT,KAAKF,KAAKE,GAAG;YACf,MAAOF;QACX,GAAGY,QAAQC,OAAO;QAElB,MAAM,EACJC,EAAE,EACFC,WAAW,KAAK,EAChBZ,YAAY,EAAEC,QAAQY,gBAAgB,EAAE,EACxCb,UAAU,EACVc,KAAK,EACLC,OAAOC,WAAW,KAAK,EACvBC,cAAc,EACdC,yBAAyB,KAAK,EAC9BnB,KAAK,EACHoB,cAAc,EACdC,MAAM,EACNC,SAAS,EAAEpB,MAAM,EAAE,EACnBoB,OAAO,EACR,EACDtB,GAAG,EACHuB,gBAAgB,EACjB,GAAGzB;QAEJ,IAAI,CAACc,IAAI;YACP,MAAM,IAAIjC,SAAS,qCAAqCN,WAAWmD,WAAW;QAChF;QAEA,IAAI,EAAEC,IAAI,EAAE,GAAG3B;QACf,MAAM4B,WAAWD,MAAMC;QACvB,MAAMC,kBAAkBC,QAAQX,YAAYH,iBAAiBe,QAAQ,CAACC,MAAM;QAC5E,MAAMC,qBAAqBH,QAAQF,YAAYZ,iBAAiBkB,IAAI,IAAI,CAACL;QAEzE,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,MAAMM,gBAAgB,CAACf,iBACnB,MAAM3C,cAAc;YAAEqC;YAAIa;YAAMzB;QAAI,GAAGc,iBAAiBoB,MAAM,CAACC,MAAM,IACrE;QACJ,MAAMC,iBAAiB3D,qBAAqBwD;QAE5C,wCAAwC;QACxC,oBAAoB;QACpB,wCAAwC;QAExC,MAAMI,cAA2B;YAC/BpC,YAAYa,iBAAiBwB,IAAI;YACjCjB;YACArB;YACAuC,OAAO7D,eAAe;gBAAEkC,IAAI;oBAAE4B,QAAQ5B;gBAAG;YAAE,GAAGqB;QAChD;QAEA,MAAMQ,iBAAiB,MAAMhD,2BAA2B;YACtDmB;YACAV,QAAQY;YACRQ;YACAoB,OAAOL;YACPrC;QACF;QAEA,IAAI,CAACyC,kBAAkB,CAACL,gBAAgB;YACtC,MAAM,IAAIvD,SAASmB,IAAI2C,CAAC;QAC1B;QACA,IAAI,CAACF,kBAAkBL,gBAAgB;YACrC,MAAM,IAAIxD,UAAUoB,IAAI2C,CAAC;QAC3B;QAEA,MAAMC,cAAc,MAAM7D,UAAU;YAClCkB,YAAYa;YACZN,SAASR,IAAIQ,OAAO;YACpBO,OAAO;YACP8B,KAAKJ;YACLzB,OAAOC;YACPG,gBAAgB;YAChB0B,QAAQ;YACRzB;YACAH,gBAAgB;YAChBlB;YACAuB,kBAAkB;QACpB;QAEA,IAAIzB,KAAKG,UAAU,CAACC,MAAM,CAAC8B,IAAI,EAAE;YAC/B1D,sBAA6B;gBAC3ByE,aAAajD,KAAKG,UAAU,CAACC,MAAM,CAAC8B,IAAI;gBACxCgB,gBAAgBlD,KAAKG,UAAU,CAACC,MAAM,CAACoC,IAAI;gBAC3Cb,MAAM3B,KAAK2B,IAAI;gBACfhB,WAAW;gBACXmC;gBACA5C,KAAKF,KAAKE,GAAG;YACf;QACF;QAEA,wCAAwC;QACxC,wCAAwC;QACxC,wCAAwC;QAExC,MAAM,EAAEyB,MAAMwB,WAAW,EAAEC,OAAOC,aAAa,EAAE,GAAG,MAAMhE,iBAAiB;YACzEc;YACAC;YACAuB;YACAhB,WAAW;YACXU;YACAnB;YACAoD,oBAAoB;QACtB;QAEA3B,OAAOwB;QAEP,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExC,MAAM/D,sBAAsB;YAC1B4B;YACAZ;YACA2C,KAAKJ;YACLS,OAAOC;YACPE,gBAAgB;YAChBrD;QACF;QAEA,wCAAwC;QACxC,0BAA0B;QAC1B,wCAAwC;QAExCyB,OAAO,MAAMxC,eAA2D;YACtE2B;YACAX,YAAYa;YACZN,SAASR,IAAIQ,OAAO;YACpBiB;YACAoB,KAAKD;YACLE,QAAQ;YACRrC,WAAW;YACXS;YACAlB;QACF;QAEA,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExC,MAAMc,iBAAiBX,KAAK,CAAClB,cAAc,CAACoB,MAAM,CAAC,OAAOC,WAAWC;YACnE,MAAMD;YAENmB,OACE,AAAC,MAAMlB,KAAK;gBACVN,YAAYa;gBACZN,SAASR,IAAIQ,OAAO;gBACpBiB;gBACAhB,WAAW;gBACXmC;gBACA5C;YACF,MAAOyB;QACX,GAAGf,QAAQC,OAAO;QAElB,wCAAwC;QACxC,+BAA+B;QAC/B,wCAAwC;QAExC,IAAI,CAACG,iBAAiBwC,MAAM,CAACC,mBAAmB,EAAE;YAChD,MAAMlE,YAAYiC,SAAS6B,eAAenD;QAC5C;QAEA,wCAAwC;QACxC,4BAA4B;QAC5B,wCAAwC;QAExC,MAAMc,iBAAiBX,KAAK,CAACnB,YAAY,CAACqB,MAAM,CAAC,OAAOC,WAAWC;YACjE,MAAMD;YAENmB,OACE,AAAC,MAAMlB,KAAK;gBACVN,YAAYa;gBACZN,SAASR,IAAIQ,OAAO;gBACpBiB;gBACAhB,WAAW;gBACXmC;gBACA5C;YACF,MAAOyB;QACX,GAAGf,QAAQC,OAAO;QAElB,wCAAwC;QACxC,wBAAwB;QACxB,wCAAwC;QAExC,IAAI6C,SAAS,MAAMxE,aAAa;YAC9B4B;YACAX,YAAYa;YACZN,SAASR,IAAIQ,OAAO;YACpBiB;YACAoB,KAAKD;YACLH;YACAK,QAAQ;YACRrC,WAAW;YACXT;YACAyD,gBACE9B,mBACAb,iBAAiBe,QAAQ,CAACC,MAAM,IAChC,CAAChB,iBAAiBe,QAAQ,CAACC,MAAM,CAAC4B,QAAQ,IAC1CjC,KAAKkC,OAAO,KAAK;QACrB;QAEA,wCAAwC;QACxC,mCAAmC;QACnC,wCAAwC;QAExC,MAAMC,eAAwC;YAAE,GAAGJ,MAAM;QAAC;QAE1D,IAAIzB,sBAAsB,OAAOL,aAAa,UAAU;YACtD,MAAM,EAAEmC,IAAI,EAAEC,IAAI,EAAE,GAAG,MAAMtF,yBAAyB;gBACpDyB,YAAYa;gBACZY;gBACA1B;YACF;YACA4D,aAAaE,IAAI,GAAGA;YACpBF,aAAaC,IAAI,GAAGA;YACpB,OAAOD,aAAalC,QAAQ;YAC5B,OAAOD,KAAKC,QAAQ;QACtB;QAEA,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,IAAI,CAACC,mBAAmBF,KAAKkC,OAAO,KAAK,aAAa;YACpDH,SAAS,MAAMxD,IAAIsB,OAAO,CAACyC,EAAE,CAACC,SAAS,CAAC;gBACtCpD;gBACAX,YAAYa,iBAAiBwB,IAAI;gBACjCb,MAAMmC;gBACNvC;gBACArB;YACF;QACF;QAEA,wCAAwC;QACxC,iBAAiB;QACjB,wCAAwC;QAExC,IAAIc,iBAAiBe,QAAQ,EAAE;YAC7B2B,SAAS,MAAM9D,YAAY;gBACzBkB;gBACAC;gBACAZ,YAAYa;gBACZ2B,gBAAgB;oBACd,GAAGe,MAAM;oBACTS,WAAWxB,eAAewB,SAAS;gBACrC;gBACAjD,OAAOW;gBACPL;gBACAtB;YACF;QACF;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExCwD,SAAS,MAAMzE,UAAU;YACvBkB,YAAYa;YACZN,SAASR,IAAIQ,OAAO;YACpBO;YACA8B,KAAKW;YACLxC,OAAOC;YACPG;YACA0B,QAAQ;YACRzB;YACAH;YACAlB;YACAuB;QACF;QAEA,wCAAwC;QACxC,yBAAyB;QACzB,wCAAwC;QAExC,MAAMT,iBAAiBX,KAAK,CAACpB,SAAS,CAACsB,MAAM,CAAC,OAAOC,WAAWC;YAC9D,MAAMD;YAENkD,SACE,AAAC,MAAMjD,KAAK;gBACVN,YAAYa;gBACZN,SAASR,IAAIQ,OAAO;gBACpBqC,KAAKW;gBACLxD;YACF,MAAOwD;QACX,GAAG9C,QAAQC,OAAO;QAElB,wCAAwC;QACxC,uBAAuB;QACvB,wCAAwC;QAExC6C,SAAS,MAAM1E,YAAY;YACzBmB,YAAYa;YACZN,SAASR,IAAIQ,OAAO;YACpBiB;YACAoB,KAAKW;YACLV,QAAQ;YACRrC,WAAW;YACXyD,aAAatB;YACb5C;QACF;QAEA,wCAAwC;QACxC,2BAA2B;QAC3B,wCAAwC;QAExC,MAAMc,iBAAiBX,KAAK,CAACrB,WAAW,CAACuB,MAAM,CAAC,OAAOC,WAAWC;YAChE,MAAMD;YAENkD,SACE,AAAC,MAAMjD,KAAK;gBACVN,YAAYa;gBACZN,SAASR,IAAIQ,OAAO;gBACpBqC,KAAKW;gBACL/C,WAAW;gBACXyD,aAAatB;gBACb5C;YACF,MAAOwD;QACX,GAAG9C,QAAQC,OAAO;QAElB,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExC6C,SAAS,MAAM7D,oBAAoB;YACjCG;YACAG,YAAYa;YACZL,WAAW;YACX+C;QACF;QAEA,MAAMpE,gBAAgB;YACpB0B;YACAZ;YACAF;QACF;QAEA,wCAAwC;QACxC,iBAAiB;QACjB,wCAAwC;QAExC,IAAID,cAAc;YAChB,MAAMT,kBAAkBU;QAC1B;QAEA,OAAOwD;IACT,EAAE,OAAOW,OAAgB;QACvB,MAAM3E,gBAAgBM,KAAKE,GAAG;QAC9B,MAAMmE;IACR;AACF,EAAC"}
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 { PayloadRequest } from '../../types/index.js'\nimport type {\n Collection,\n DataFromCollectionSlug,\n RequiredDataFromCollectionSlug,\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 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 showHiddenFields?: boolean\n}\n\nexport const updateByIDOperation = async <TSlug extends CollectionSlug>(\n incomingArgs: Arguments<TSlug>,\n): Promise<DataFromCollectionSlug<TSlug>> => {\n let args = incomingArgs\n\n try {\n const shouldCommit = 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 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 })\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: {\n ...result,\n createdAt: docWithLocales.createdAt,\n },\n draft: shouldSaveDraft,\n payload,\n publishSpecificLocale,\n req,\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 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\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","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","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","createdAt","snapshot","previousDoc","error"],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { MappedComponent } from '../admin/types.js';
2
2
  import type { ClientCollectionConfig } from '../collections/config/client.js';
3
3
  import type { ClientGlobalConfig } from '../globals/config/client.js';
4
4
  import type { LivePreviewConfig, SanitizedConfig, ServerOnlyLivePreviewProperties } from './types.js';
5
- export type ServerOnlyRootProperties = keyof Pick<SanitizedConfig, 'bin' | 'cors' | 'csrf' | 'custom' | 'db' | 'editor' | 'email' | 'endpoints' | 'graphQL' | 'hooks' | 'onInit' | 'plugins' | 'secret' | 'sharp' | 'typescript'>;
5
+ export type ServerOnlyRootProperties = keyof Pick<SanitizedConfig, 'bin' | 'cors' | 'csrf' | 'custom' | 'db' | 'editor' | 'email' | 'endpoints' | 'graphQL' | 'hooks' | 'logger' | 'onInit' | 'plugins' | 'secret' | 'sharp' | 'typescript'>;
6
6
  export type ServerOnlyRootAdminProperties = keyof Pick<SanitizedConfig['admin'], 'components'>;
7
7
  export type ClientConfig = {
8
8
  admin: {
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAC7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,+BAA+B,EAChC,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,wBAAwB,GAAG,MAAM,IAAI,CAC/C,eAAe,EACb,KAAK,GACL,MAAM,GACN,MAAM,GACN,QAAQ,GACR,IAAI,GACJ,QAAQ,GACR,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,YAAY,CACf,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAAA;AAE9F,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE;QACL,UAAU,EAAE;YACV,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;YAC3B,MAAM,EAAE,eAAe,CAAA;YACvB,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe,CAAA;gBACrB,IAAI,EAAE,eAAe,CAAA;aACtB,CAAA;YACD,YAAY,CAAC,EAAE,eAAe,CAAA;SAC/B,CAAA;QACD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;QAC9C,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;KACvE,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,cAAc,GAAG,aAAa,CAAC,CAAA;IACjF,WAAW,EAAE,sBAAsB,EAAE,CAAA;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,OAAO,EAAE,kBAAkB,EAAE,CAAA;CAC9B,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,GAAG,wBAAwB,CAAC,CAAA;AAEzF,eAAO,MAAM,0BAA0B,EAAE,SAAS,OAAO,CAAC,wBAAwB,CAAC,EAiBlF,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/config/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAC7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,+BAA+B,EAChC,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,wBAAwB,GAAG,MAAM,IAAI,CAC/C,eAAe,EACb,KAAK,GACL,MAAM,GACN,MAAM,GACN,QAAQ,GACR,IAAI,GACJ,QAAQ,GACR,OAAO,GACP,WAAW,GACX,SAAS,GACT,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,YAAY,CACf,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAAA;AAE9F,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE;QACL,UAAU,EAAE;YACV,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;YAC3B,MAAM,EAAE,eAAe,CAAA;YACvB,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe,CAAA;gBACrB,IAAI,EAAE,eAAe,CAAA;aACtB,CAAA;YACD,YAAY,CAAC,EAAE,eAAe,CAAA;SAC/B,CAAA;QACD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;QAC9C,WAAW,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,+BAA+B,CAAC,CAAA;KACvE,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,cAAc,GAAG,aAAa,CAAC,CAAA;IACjF,WAAW,EAAE,sBAAsB,EAAE,CAAA;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5B,OAAO,EAAE,kBAAkB,EAAE,CAAA;CAC9B,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,GAAG,wBAAwB,CAAC,CAAA;AAEzF,eAAO,MAAM,0BAA0B,EAAE,SAAS,OAAO,CAAC,wBAAwB,CAAC,EAkBlF,CAAA"}
@@ -13,7 +13,8 @@ export const serverOnlyConfigProperties = [
13
13
  'csrf',
14
14
  'email',
15
15
  'custom',
16
- 'graphQL'
16
+ 'graphQL',
17
+ 'logger'
17
18
  ];
18
19
 
19
20
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/client.ts"],"sourcesContent":["import type { MappedComponent } from '../admin/types.js'\nimport type { ClientCollectionConfig } from '../collections/config/client.js'\nimport type { ClientGlobalConfig } from '../globals/config/client.js'\nimport type {\n LivePreviewConfig,\n SanitizedConfig,\n ServerOnlyLivePreviewProperties,\n} from './types.js'\n\nexport type ServerOnlyRootProperties = keyof Pick<\n SanitizedConfig,\n | 'bin'\n | 'cors'\n | 'csrf'\n | 'custom'\n | 'db'\n | 'editor'\n | 'email'\n | 'endpoints'\n | 'graphQL'\n | 'hooks'\n | 'onInit'\n | 'plugins'\n | 'secret'\n | 'sharp'\n | 'typescript'\n>\n\nexport type ServerOnlyRootAdminProperties = keyof Pick<SanitizedConfig['admin'], 'components'>\n\nexport type ClientConfig = {\n admin: {\n components: {\n actions?: MappedComponent[]\n Avatar: MappedComponent\n graphics: {\n Icon: MappedComponent\n Logo: MappedComponent\n }\n LogoutButton?: MappedComponent\n }\n dependencies?: Record<string, MappedComponent>\n livePreview?: Omit<LivePreviewConfig, ServerOnlyLivePreviewProperties>\n } & Omit<SanitizedConfig['admin'], 'components' | 'dependencies' | 'livePreview'>\n collections: ClientCollectionConfig[]\n custom?: Record<string, any>\n globals: ClientGlobalConfig[]\n} & Omit<SanitizedConfig, 'admin' | 'collections' | 'globals' | ServerOnlyRootProperties>\n\nexport const serverOnlyConfigProperties: readonly Partial<ServerOnlyRootProperties>[] = [\n 'endpoints',\n 'db',\n 'editor',\n 'plugins',\n 'sharp',\n 'onInit',\n 'secret',\n 'hooks',\n 'bin',\n 'typescript',\n 'cors',\n 'csrf',\n 'email',\n 'custom',\n 'graphQL',\n // `admin`, `onInit`, `localization`, `collections`, and `globals` are all handled separately\n]\n"],"names":["serverOnlyConfigProperties"],"mappings":"AAiDA,OAAO,MAAMA,6BAA2E;IACtF;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CAED,CAAA"}
1
+ {"version":3,"sources":["../../src/config/client.ts"],"sourcesContent":["import type { MappedComponent } from '../admin/types.js'\nimport type { ClientCollectionConfig } from '../collections/config/client.js'\nimport type { ClientGlobalConfig } from '../globals/config/client.js'\nimport type {\n LivePreviewConfig,\n SanitizedConfig,\n ServerOnlyLivePreviewProperties,\n} from './types.js'\n\nexport type ServerOnlyRootProperties = keyof Pick<\n SanitizedConfig,\n | 'bin'\n | 'cors'\n | 'csrf'\n | 'custom'\n | 'db'\n | 'editor'\n | 'email'\n | 'endpoints'\n | 'graphQL'\n | 'hooks'\n | 'logger'\n | 'onInit'\n | 'plugins'\n | 'secret'\n | 'sharp'\n | 'typescript'\n>\n\nexport type ServerOnlyRootAdminProperties = keyof Pick<SanitizedConfig['admin'], 'components'>\n\nexport type ClientConfig = {\n admin: {\n components: {\n actions?: MappedComponent[]\n Avatar: MappedComponent\n graphics: {\n Icon: MappedComponent\n Logo: MappedComponent\n }\n LogoutButton?: MappedComponent\n }\n dependencies?: Record<string, MappedComponent>\n livePreview?: Omit<LivePreviewConfig, ServerOnlyLivePreviewProperties>\n } & Omit<SanitizedConfig['admin'], 'components' | 'dependencies' | 'livePreview'>\n collections: ClientCollectionConfig[]\n custom?: Record<string, any>\n globals: ClientGlobalConfig[]\n} & Omit<SanitizedConfig, 'admin' | 'collections' | 'globals' | ServerOnlyRootProperties>\n\nexport const serverOnlyConfigProperties: readonly Partial<ServerOnlyRootProperties>[] = [\n 'endpoints',\n 'db',\n 'editor',\n 'plugins',\n 'sharp',\n 'onInit',\n 'secret',\n 'hooks',\n 'bin',\n 'typescript',\n 'cors',\n 'csrf',\n 'email',\n 'custom',\n 'graphQL',\n 'logger'\n // `admin`, `onInit`, `localization`, `collections`, and `globals` are all handled separately\n]\n"],"names":["serverOnlyConfigProperties"],"mappings":"AAkDA,OAAO,MAAMA,6BAA2E;IACtF;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CAED,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/config/sanitize.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,MAAM,EAGN,eAAe,EAChB,MAAM,YAAY,CAAA;AAqCnB,eAAO,MAAM,cAAc,mBAA0B,MAAM,KAAG,OAAO,CAAC,eAAe,CAgKpF,CAAA"}
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/config/sanitize.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,MAAM,EAGN,eAAe,EAChB,MAAM,YAAY,CAAA;AAsCnB,eAAO,MAAM,cAAc,mBAA0B,MAAM,KAAG,OAAO,CAAC,eAAe,CAiKpF,CAAA"}
@@ -5,6 +5,7 @@ import { sanitizeCollection } from '../collections/config/sanitize.js';
5
5
  import { migrationsCollection } from '../database/migrations/migrationsCollection.js';
6
6
  import { InvalidConfiguration } from '../errors/index.js';
7
7
  import { sanitizeGlobals } from '../globals/config/sanitize.js';
8
+ import { getLockedDocumentsCollection } from '../lockedDocuments/lockedDocumentsCollection.js';
8
9
  import getPreferencesCollection from '../preferences/preferencesCollection.js';
9
10
  import checkDuplicateCollections from '../utilities/checkDuplicateCollections.js';
10
11
  import { defaults } from './defaults.js';
@@ -108,6 +109,7 @@ export const sanitizeConfig = async (incomingConfig)=>{
108
109
  i18nConfig.translations = incomingConfig.i18n?.translations || i18nConfig.translations;
109
110
  }
110
111
  config.i18n = i18nConfig;
112
+ configWithDefaults.collections.push(getLockedDocumentsCollection(config));
111
113
  configWithDefaults.collections.push(getPreferencesCollection(config));
112
114
  configWithDefaults.collections.push(migrationsCollection);
113
115
  const richTextSanitizationPromises = [];