payload 4.0.0-internal.ea6e8f8 → 4.0.0-internal.ee5d8bd

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 (703) hide show
  1. package/dist/admin/adapters/router.d.ts +1 -1
  2. package/dist/admin/adapters/router.d.ts.map +1 -1
  3. package/dist/admin/adapters/router.js.map +1 -1
  4. package/dist/admin/forms/Diff.d.ts +0 -4
  5. package/dist/admin/forms/Diff.d.ts.map +1 -1
  6. package/dist/admin/forms/Diff.js.map +1 -1
  7. package/dist/admin/forms/Form.d.ts +0 -2
  8. package/dist/admin/forms/Form.d.ts.map +1 -1
  9. package/dist/admin/forms/Form.js.map +1 -1
  10. package/dist/admin/initAdminContext.d.ts.map +1 -1
  11. package/dist/admin/initAdminContext.js +0 -10
  12. package/dist/admin/initAdminContext.js.map +1 -1
  13. package/dist/auth/createAuthToken.d.ts +26 -0
  14. package/dist/auth/createAuthToken.d.ts.map +1 -0
  15. package/dist/auth/createAuthToken.js +39 -0
  16. package/dist/auth/createAuthToken.js.map +1 -0
  17. package/dist/auth/endpoints/refresh.d.ts.map +1 -1
  18. package/dist/auth/endpoints/refresh.js +2 -1
  19. package/dist/auth/endpoints/refresh.js.map +1 -1
  20. package/dist/auth/getFieldsToSign.js.map +1 -1
  21. package/dist/auth/loginWithCookie.d.ts.map +1 -1
  22. package/dist/auth/loginWithCookie.js +1 -0
  23. package/dist/auth/loginWithCookie.js.map +1 -1
  24. package/dist/auth/operations/local/login.d.ts.map +1 -1
  25. package/dist/auth/operations/local/login.js +1 -0
  26. package/dist/auth/operations/local/login.js.map +1 -1
  27. package/dist/auth/operations/login.d.ts +2 -0
  28. package/dist/auth/operations/login.d.ts.map +1 -1
  29. package/dist/auth/operations/login.js +6 -19
  30. package/dist/auth/operations/login.js.map +1 -1
  31. package/dist/auth/operations/refresh.d.ts +8 -0
  32. package/dist/auth/operations/refresh.d.ts.map +1 -1
  33. package/dist/auth/operations/refresh.js +50 -19
  34. package/dist/auth/operations/refresh.js.map +1 -1
  35. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  36. package/dist/auth/operations/resetPassword.js +54 -20
  37. package/dist/auth/operations/resetPassword.js.map +1 -1
  38. package/dist/auth/refreshAuthToken.d.ts +32 -0
  39. package/dist/auth/refreshAuthToken.d.ts.map +1 -0
  40. package/dist/auth/refreshAuthToken.js +113 -0
  41. package/dist/auth/refreshAuthToken.js.map +1 -0
  42. package/dist/auth/serverFunctions/cookies.js.map +1 -1
  43. package/dist/auth/serverFunctions/login.js.map +1 -1
  44. package/dist/auth/sessions.d.ts +9 -2
  45. package/dist/auth/sessions.d.ts.map +1 -1
  46. package/dist/auth/sessions.js +6 -5
  47. package/dist/auth/sessions.js.map +1 -1
  48. package/dist/auth/types.d.ts +25 -1
  49. package/dist/auth/types.d.ts.map +1 -1
  50. package/dist/auth/types.js.map +1 -1
  51. package/dist/cli/commands/data/utilities.d.ts +1 -1
  52. package/dist/cli/commands/data/utilities.d.ts.map +1 -1
  53. package/dist/cli/commands/data/utilities.js.map +1 -1
  54. package/dist/cli/defineCLICommand.js +1 -1
  55. package/dist/cli/defineCLICommand.js.map +1 -1
  56. package/dist/collections/config/client.d.ts +1 -1
  57. package/dist/collections/config/client.d.ts.map +1 -1
  58. package/dist/collections/config/client.js +0 -1
  59. package/dist/collections/config/client.js.map +1 -1
  60. package/dist/collections/config/defaults.d.ts +2 -0
  61. package/dist/collections/config/defaults.d.ts.map +1 -1
  62. package/dist/collections/config/defaults.js +4 -0
  63. package/dist/collections/config/defaults.js.map +1 -1
  64. package/dist/collections/config/sanitize.d.ts.map +1 -1
  65. package/dist/collections/config/sanitize.js +3 -0
  66. package/dist/collections/config/sanitize.js.map +1 -1
  67. package/dist/collections/config/sanitizeCompoundIndexes.d.ts.map +1 -1
  68. package/dist/collections/config/sanitizeCompoundIndexes.js +0 -9
  69. package/dist/collections/config/sanitizeCompoundIndexes.js.map +1 -1
  70. package/dist/collections/config/types.d.ts +4 -21
  71. package/dist/collections/config/types.d.ts.map +1 -1
  72. package/dist/collections/config/types.js.map +1 -1
  73. package/dist/collections/dataloader.d.ts +1 -10
  74. package/dist/collections/dataloader.d.ts.map +1 -1
  75. package/dist/collections/dataloader.js +6 -14
  76. package/dist/collections/dataloader.js.map +1 -1
  77. package/dist/collections/operations/create.d.ts.map +1 -1
  78. package/dist/collections/operations/create.js +0 -13
  79. package/dist/collections/operations/create.js.map +1 -1
  80. package/dist/collections/operations/delete.d.ts.map +1 -1
  81. package/dist/collections/operations/delete.js +121 -638
  82. package/dist/collections/operations/delete.js.map +1 -1
  83. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  84. package/dist/collections/operations/deleteByID.js +32 -238
  85. package/dist/collections/operations/deleteByID.js.map +1 -1
  86. package/dist/collections/operations/findByID.d.ts.map +1 -1
  87. package/dist/collections/operations/findByID.js +0 -6
  88. package/dist/collections/operations/findByID.js.map +1 -1
  89. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  90. package/dist/collections/operations/findDistinct.js +6 -7
  91. package/dist/collections/operations/findDistinct.js.map +1 -1
  92. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  93. package/dist/collections/operations/findVersionByID.js +7 -0
  94. package/dist/collections/operations/findVersionByID.js.map +1 -1
  95. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  96. package/dist/collections/operations/findVersions.js +5 -0
  97. package/dist/collections/operations/findVersions.js.map +1 -1
  98. package/dist/collections/operations/local/count.d.ts +4 -9
  99. package/dist/collections/operations/local/count.d.ts.map +1 -1
  100. package/dist/collections/operations/local/count.js.map +1 -1
  101. package/dist/collections/operations/local/countVersions.d.ts +0 -4
  102. package/dist/collections/operations/local/countVersions.d.ts.map +1 -1
  103. package/dist/collections/operations/local/countVersions.js.map +1 -1
  104. package/dist/collections/operations/local/create.d.ts +4 -9
  105. package/dist/collections/operations/local/create.d.ts.map +1 -1
  106. package/dist/collections/operations/local/create.js.map +1 -1
  107. package/dist/collections/operations/local/delete.d.ts +4 -9
  108. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  109. package/dist/collections/operations/local/delete.js.map +1 -1
  110. package/dist/collections/operations/local/duplicate.d.ts +0 -5
  111. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  112. package/dist/collections/operations/local/duplicate.js.map +1 -1
  113. package/dist/collections/operations/local/find.d.ts +4 -9
  114. package/dist/collections/operations/local/find.d.ts.map +1 -1
  115. package/dist/collections/operations/local/find.js.map +1 -1
  116. package/dist/collections/operations/local/findByID.d.ts +4 -9
  117. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  118. package/dist/collections/operations/local/findByID.js.map +1 -1
  119. package/dist/collections/operations/local/findDistinct.d.ts +0 -5
  120. package/dist/collections/operations/local/findDistinct.d.ts.map +1 -1
  121. package/dist/collections/operations/local/findDistinct.js.map +1 -1
  122. package/dist/collections/operations/local/findVersionByID.d.ts +0 -5
  123. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  124. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  125. package/dist/collections/operations/local/findVersions.d.ts +0 -5
  126. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  127. package/dist/collections/operations/local/findVersions.js.map +1 -1
  128. package/dist/collections/operations/local/restoreVersion.d.ts +0 -5
  129. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  130. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  131. package/dist/collections/operations/local/update.d.ts +4 -9
  132. package/dist/collections/operations/local/update.d.ts.map +1 -1
  133. package/dist/collections/operations/local/update.js.map +1 -1
  134. package/dist/collections/operations/renameFile.js +1 -1
  135. package/dist/collections/operations/renameFile.js.map +1 -1
  136. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  137. package/dist/collections/operations/restoreVersion.js +76 -157
  138. package/dist/collections/operations/restoreVersion.js.map +1 -1
  139. package/dist/collections/operations/update.d.ts.map +1 -1
  140. package/dist/collections/operations/update.js +171 -357
  141. package/dist/collections/operations/update.js.map +1 -1
  142. package/dist/collections/operations/updateByID.d.ts +0 -15
  143. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  144. package/dist/collections/operations/updateByID.js +60 -265
  145. package/dist/collections/operations/updateByID.js.map +1 -1
  146. package/dist/collections/operations/utilities/buildBeforeOperation.d.ts.map +1 -1
  147. package/dist/collections/operations/utilities/buildBeforeOperation.js +0 -7
  148. package/dist/collections/operations/utilities/buildBeforeOperation.js.map +1 -1
  149. package/dist/collections/operations/utilities/update.d.ts +1 -14
  150. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  151. package/dist/collections/operations/utilities/update.js +20 -92
  152. package/dist/collections/operations/utilities/update.js.map +1 -1
  153. package/dist/collections/operations/validate.js +4 -4
  154. package/dist/collections/operations/validate.js.map +1 -1
  155. package/dist/config/client.d.ts +1 -3
  156. package/dist/config/client.d.ts.map +1 -1
  157. package/dist/config/client.js +1 -9
  158. package/dist/config/client.js.map +1 -1
  159. package/dist/config/defaults.d.ts.map +1 -1
  160. package/dist/config/defaults.js +1 -0
  161. package/dist/config/defaults.js.map +1 -1
  162. package/dist/config/definePlugin.js.map +1 -1
  163. package/dist/config/sanitize.d.ts.map +1 -1
  164. package/dist/config/sanitize.js +2 -40
  165. package/dist/config/sanitize.js.map +1 -1
  166. package/dist/config/types.d.ts +13 -21
  167. package/dist/config/types.d.ts.map +1 -1
  168. package/dist/config/types.js.map +1 -1
  169. package/dist/database/defaultCopy.d.ts.map +1 -1
  170. package/dist/database/defaultCopy.js +0 -1
  171. package/dist/database/defaultCopy.js.map +1 -1
  172. package/dist/database/types.d.ts +4 -75
  173. package/dist/database/types.d.ts.map +1 -1
  174. package/dist/database/types.js.map +1 -1
  175. package/dist/exports/build-config.d.ts +9 -0
  176. package/dist/exports/build-config.d.ts.map +1 -0
  177. package/dist/exports/build-config.js +38 -0
  178. package/dist/exports/build-config.js.map +1 -0
  179. package/dist/exports/shared.d.ts +0 -2
  180. package/dist/exports/shared.d.ts.map +1 -1
  181. package/dist/exports/shared.js +0 -2
  182. package/dist/exports/shared.js.map +1 -1
  183. package/dist/fields/baseFields/authorship/index.d.ts +1 -2
  184. package/dist/fields/baseFields/authorship/index.d.ts.map +1 -1
  185. package/dist/fields/baseFields/authorship/index.js +0 -12
  186. package/dist/fields/baseFields/authorship/index.js.map +1 -1
  187. package/dist/fields/config/client.js.map +1 -1
  188. package/dist/fields/config/reservedFieldNames.d.ts.map +1 -1
  189. package/dist/fields/config/reservedFieldNames.js.map +1 -1
  190. package/dist/fields/config/types.d.ts.map +1 -1
  191. package/dist/fields/config/types.js.map +1 -1
  192. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  193. package/dist/fields/hooks/afterRead/index.d.ts +0 -8
  194. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  195. package/dist/fields/hooks/afterRead/index.js +2 -6
  196. package/dist/fields/hooks/afterRead/index.js.map +1 -1
  197. package/dist/fields/hooks/afterRead/promise.d.ts +1 -3
  198. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  199. package/dist/fields/hooks/afterRead/promise.js +17 -41
  200. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  201. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  202. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +0 -2
  203. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
  204. package/dist/fields/hooks/afterRead/traverseFields.d.ts +1 -3
  205. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  206. package/dist/fields/hooks/afterRead/traverseFields.js +2 -4
  207. package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
  208. package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.d.ts.map +1 -1
  209. package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.js +0 -3
  210. package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.js.map +1 -1
  211. package/dist/fields/hooks/beforeChange/flattenValidationData.d.ts +14 -0
  212. package/dist/fields/hooks/beforeChange/flattenValidationData.d.ts.map +1 -0
  213. package/dist/fields/hooks/beforeChange/flattenValidationData.js +36 -0
  214. package/dist/fields/hooks/beforeChange/flattenValidationData.js.map +1 -0
  215. package/dist/fields/hooks/beforeChange/promise.d.ts +2 -1
  216. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  217. package/dist/fields/hooks/beforeChange/promise.js +96 -22
  218. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  219. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +2 -1
  220. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  221. package/dist/fields/hooks/beforeChange/traverseFields.js +2 -1
  222. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  223. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  224. package/dist/fields/hooks/beforeValidate/promise.js +0 -8
  225. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  226. package/dist/fields/validations.d.ts.map +1 -1
  227. package/dist/fields/validations.js +4 -1
  228. package/dist/fields/validations.js.map +1 -1
  229. package/dist/globals/config/types.d.ts +2 -6
  230. package/dist/globals/config/types.d.ts.map +1 -1
  231. package/dist/globals/config/types.js.map +1 -1
  232. package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -1
  233. package/dist/globals/operations/countGlobalVersions.js +0 -7
  234. package/dist/globals/operations/countGlobalVersions.js.map +1 -1
  235. package/dist/globals/operations/findOne.d.ts.map +1 -1
  236. package/dist/globals/operations/findOne.js +0 -7
  237. package/dist/globals/operations/findOne.js.map +1 -1
  238. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  239. package/dist/globals/operations/findVersionByID.js +6 -6
  240. package/dist/globals/operations/findVersionByID.js.map +1 -1
  241. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  242. package/dist/globals/operations/findVersions.js +4 -6
  243. package/dist/globals/operations/findVersions.js.map +1 -1
  244. package/dist/globals/operations/local/countVersions.d.ts +0 -5
  245. package/dist/globals/operations/local/countVersions.d.ts.map +1 -1
  246. package/dist/globals/operations/local/countVersions.js.map +1 -1
  247. package/dist/globals/operations/local/findOne.d.ts +0 -5
  248. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  249. package/dist/globals/operations/local/findOne.js.map +1 -1
  250. package/dist/globals/operations/local/findVersionByID.d.ts +0 -5
  251. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  252. package/dist/globals/operations/local/findVersionByID.js.map +1 -1
  253. package/dist/globals/operations/local/findVersions.d.ts +0 -5
  254. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  255. package/dist/globals/operations/local/findVersions.js.map +1 -1
  256. package/dist/globals/operations/local/restoreVersion.d.ts +0 -5
  257. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  258. package/dist/globals/operations/local/restoreVersion.js.map +1 -1
  259. package/dist/globals/operations/local/update.d.ts +0 -5
  260. package/dist/globals/operations/local/update.d.ts.map +1 -1
  261. package/dist/globals/operations/local/update.js +18 -61
  262. package/dist/globals/operations/local/update.js.map +1 -1
  263. package/dist/globals/operations/restoreVersion.d.ts +2 -3
  264. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  265. package/dist/globals/operations/restoreVersion.js +24 -61
  266. package/dist/globals/operations/restoreVersion.js.map +1 -1
  267. package/dist/globals/operations/update.d.ts.map +1 -1
  268. package/dist/globals/operations/update.js +8 -86
  269. package/dist/globals/operations/update.js.map +1 -1
  270. package/dist/globals/operations/validate.js +1 -1
  271. package/dist/globals/operations/validate.js.map +1 -1
  272. package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -1
  273. package/dist/hierarchy/addHierarchyToCollection.js +32 -21
  274. package/dist/hierarchy/addHierarchyToCollection.js.map +1 -1
  275. package/dist/hierarchy/createFolderField.js.map +1 -1
  276. package/dist/hierarchy/getInitialTreeData.d.ts +1 -3
  277. package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -1
  278. package/dist/hierarchy/getInitialTreeData.js +1 -4
  279. package/dist/hierarchy/getInitialTreeData.js.map +1 -1
  280. package/dist/hierarchy/resolveHierarchyCollections.js +9 -3
  281. package/dist/hierarchy/resolveHierarchyCollections.js.map +1 -1
  282. package/dist/hierarchy/utils/computePaths.d.ts.map +1 -1
  283. package/dist/hierarchy/utils/computePaths.js.map +1 -1
  284. package/dist/index.bundled.d.ts +4336 -5501
  285. package/dist/index.d.ts +27 -51
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/index.js +14 -37
  288. package/dist/index.js.map +1 -1
  289. package/dist/llm-instructions/getInstructionsCollection.d.ts.map +1 -1
  290. package/dist/llm-instructions/getInstructionsCollection.js +2 -0
  291. package/dist/llm-instructions/getInstructionsCollection.js.map +1 -1
  292. package/dist/preferences/keys.d.ts +4 -11
  293. package/dist/preferences/keys.d.ts.map +1 -1
  294. package/dist/preferences/keys.js +3 -10
  295. package/dist/preferences/keys.js.map +1 -1
  296. package/dist/preferences/types.d.ts +0 -19
  297. package/dist/preferences/types.d.ts.map +1 -1
  298. package/dist/preferences/types.js.map +1 -1
  299. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +1 -1
  300. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
  301. package/dist/types/index.d.ts +0 -13
  302. package/dist/types/index.d.ts.map +1 -1
  303. package/dist/types/index.js.map +1 -1
  304. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  305. package/dist/uploads/deleteAssociatedFiles.js +29 -108
  306. package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
  307. package/dist/uploads/endpoints/getFile.d.ts.map +1 -1
  308. package/dist/uploads/endpoints/getFile.js +0 -5
  309. package/dist/uploads/endpoints/getFile.js.map +1 -1
  310. package/dist/uploads/fileExists.d.ts.map +1 -1
  311. package/dist/uploads/fileExists.js +2 -5
  312. package/dist/uploads/fileExists.js.map +1 -1
  313. package/dist/uploads/fileVersioning/archive.d.ts.map +1 -1
  314. package/dist/uploads/fileVersioning/archive.js +1 -15
  315. package/dist/uploads/fileVersioning/archive.js.map +1 -1
  316. package/dist/uploads/fileVersioning/cleanup.d.ts +0 -7
  317. package/dist/uploads/fileVersioning/cleanup.d.ts.map +1 -1
  318. package/dist/uploads/fileVersioning/cleanup.js +0 -12
  319. package/dist/uploads/fileVersioning/cleanup.js.map +1 -1
  320. package/dist/uploads/fileVersioning/cloudStorage.d.ts.map +1 -1
  321. package/dist/uploads/fileVersioning/cloudStorage.js +1 -16
  322. package/dist/uploads/fileVersioning/cloudStorage.js.map +1 -1
  323. package/dist/uploads/fileVersioning/resolveHistoricalFile.js.map +1 -1
  324. package/dist/uploads/formatFilesize.js +1 -1
  325. package/dist/uploads/formatFilesize.js.map +1 -1
  326. package/dist/uploads/generateFileData.d.ts +0 -5
  327. package/dist/uploads/generateFileData.d.ts.map +1 -1
  328. package/dist/uploads/generateFileData.js +2 -74
  329. package/dist/uploads/generateFileData.js.map +1 -1
  330. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  331. package/dist/uploads/getBaseFields.js +29 -46
  332. package/dist/uploads/getBaseFields.js.map +1 -1
  333. package/dist/uploads/getFileContentRequirement.js.map +1 -1
  334. package/dist/uploads/getFileFromUploadInstructions.js.map +1 -1
  335. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  336. package/dist/uploads/getSafeFilename.js +3 -5
  337. package/dist/uploads/getSafeFilename.js.map +1 -1
  338. package/dist/uploads/safeFetch.js.map +1 -1
  339. package/dist/uploads/stagedUpload.js.map +1 -1
  340. package/dist/uploads/transformers/handleDynamicFileRequest.js +11 -2
  341. package/dist/uploads/transformers/handleDynamicFileRequest.js.map +1 -1
  342. package/dist/uploads/types.d.ts +0 -11
  343. package/dist/uploads/types.d.ts.map +1 -1
  344. package/dist/uploads/types.js.map +1 -1
  345. package/dist/uploads/uploadFiles.d.ts +1 -4
  346. package/dist/uploads/uploadFiles.d.ts.map +1 -1
  347. package/dist/uploads/uploadFiles.js +5 -29
  348. package/dist/uploads/uploadFiles.js.map +1 -1
  349. package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
  350. package/dist/utilities/addSelectGenericsToGeneretedTypes.js +0 -1
  351. package/dist/utilities/addSelectGenericsToGeneretedTypes.js.map +1 -1
  352. package/dist/utilities/appendDateTimezoneSelectFields.js.map +1 -1
  353. package/dist/utilities/assertNoValidationWrite.d.ts.map +1 -1
  354. package/dist/utilities/assertNoValidationWrite.js +0 -4
  355. package/dist/utilities/assertNoValidationWrite.js.map +1 -1
  356. package/dist/utilities/checkDocumentLockStatus.d.ts +6 -15
  357. package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -1
  358. package/dist/utilities/checkDocumentLockStatus.js +11 -44
  359. package/dist/utilities/checkDocumentLockStatus.js.map +1 -1
  360. package/dist/utilities/cloneValidationRequest.js.map +1 -1
  361. package/dist/utilities/commitTransaction.d.ts +0 -4
  362. package/dist/utilities/commitTransaction.d.ts.map +1 -1
  363. package/dist/utilities/commitTransaction.js +1 -41
  364. package/dist/utilities/commitTransaction.js.map +1 -1
  365. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  366. package/dist/utilities/configToJSONSchema.js +2 -18
  367. package/dist/utilities/configToJSONSchema.js.map +1 -1
  368. package/dist/utilities/createPayloadRequest.d.ts +0 -5
  369. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  370. package/dist/utilities/createPayloadRequest.js +3 -50
  371. package/dist/utilities/createPayloadRequest.js.map +1 -1
  372. package/dist/utilities/createPayloadRequestFromWebRequest.d.ts +12 -1
  373. package/dist/utilities/createPayloadRequestFromWebRequest.d.ts.map +1 -1
  374. package/dist/utilities/createPayloadRequestFromWebRequest.js +9 -5
  375. package/dist/utilities/createPayloadRequestFromWebRequest.js.map +1 -1
  376. package/dist/utilities/deepCopyObject.js.map +1 -1
  377. package/dist/utilities/documentMatchingWhereExists.js +1 -1
  378. package/dist/utilities/documentMatchingWhereExists.js.map +1 -1
  379. package/dist/utilities/entityInputSchema/validateEntityData.d.ts.map +1 -1
  380. package/dist/utilities/entityInputSchema/validateEntityData.js.map +1 -1
  381. package/dist/utilities/filterDataToSelectedLocales.js.map +1 -1
  382. package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
  383. package/dist/utilities/getEntityPermissions/getEntityPermissions.js +1 -0
  384. package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
  385. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
  386. package/dist/utilities/getVersionsConfig.d.ts +4 -0
  387. package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
  388. package/dist/utilities/getVersionsConfig.js +5 -0
  389. package/dist/utilities/getVersionsConfig.js.map +1 -1
  390. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  391. package/dist/utilities/handleEndpoints.js +10 -9
  392. package/dist/utilities/handleEndpoints.js.map +1 -1
  393. package/dist/utilities/httpStatus.d.ts +0 -2
  394. package/dist/utilities/httpStatus.d.ts.map +1 -1
  395. package/dist/utilities/httpStatus.js +1 -3
  396. package/dist/utilities/httpStatus.js.map +1 -1
  397. package/dist/utilities/initTransaction.d.ts.map +1 -1
  398. package/dist/utilities/initTransaction.js +7 -35
  399. package/dist/utilities/initTransaction.js.map +1 -1
  400. package/dist/utilities/killTransaction.d.ts.map +1 -1
  401. package/dist/utilities/killTransaction.js +0 -27
  402. package/dist/utilities/killTransaction.js.map +1 -1
  403. package/dist/utilities/parseParams/index.js.map +1 -1
  404. package/dist/utilities/parseValidationLocale.js.map +1 -1
  405. package/dist/utilities/sanitizePopulateParam.js.map +1 -1
  406. package/dist/utilities/telemetry/conf/index.d.ts +4 -1
  407. package/dist/utilities/telemetry/conf/index.d.ts.map +1 -1
  408. package/dist/utilities/telemetry/conf/index.js.map +1 -1
  409. package/dist/utilities/telemetry/featureInfo/getFeatureInfo.js.map +1 -1
  410. package/dist/versions/allLocalesPublicationStatus.js.map +1 -1
  411. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  412. package/dist/versions/buildCollectionFields.js +0 -23
  413. package/dist/versions/buildCollectionFields.js.map +1 -1
  414. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  415. package/dist/versions/buildGlobalFields.js +0 -14
  416. package/dist/versions/buildGlobalFields.js.map +1 -1
  417. package/dist/versions/buildVersionCompoundIndexes.d.ts.map +1 -1
  418. package/dist/versions/buildVersionCompoundIndexes.js +2 -8
  419. package/dist/versions/buildVersionCompoundIndexes.js.map +1 -1
  420. package/dist/versions/deleteCollectionVersions.d.ts +1 -2
  421. package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
  422. package/dist/versions/deleteCollectionVersions.js +8 -37
  423. package/dist/versions/deleteCollectionVersions.js.map +1 -1
  424. package/dist/versions/deleteScheduledPublishJobs.d.ts.map +1 -1
  425. package/dist/versions/deleteScheduledPublishJobs.js +0 -4
  426. package/dist/versions/deleteScheduledPublishJobs.js.map +1 -1
  427. package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
  428. package/dist/versions/drafts/appendVersionToQueryKey.js +1 -9
  429. package/dist/versions/drafts/appendVersionToQueryKey.js.map +1 -1
  430. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  431. package/dist/versions/drafts/replaceWithDraftIfAvailable.js +1 -8
  432. package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
  433. package/dist/versions/enforceMaxVersions.d.ts +0 -1
  434. package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
  435. package/dist/versions/enforceMaxVersions.js +6 -22
  436. package/dist/versions/enforceMaxVersions.js.map +1 -1
  437. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  438. package/dist/versions/getLatestCollectionVersion.js +2 -10
  439. package/dist/versions/getLatestCollectionVersion.js.map +1 -1
  440. package/dist/versions/getLatestGlobalVersion.d.ts +2 -6
  441. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  442. package/dist/versions/getLatestGlobalVersion.js +21 -65
  443. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  444. package/dist/versions/isInheritedReadVersionsAccess.js.map +1 -1
  445. package/dist/versions/saveVersion.d.ts +0 -7
  446. package/dist/versions/saveVersion.d.ts.map +1 -1
  447. package/dist/versions/saveVersion.js +4 -27
  448. package/dist/versions/saveVersion.js.map +1 -1
  449. package/dist/versions/updateLatestVersion.d.ts +0 -1
  450. package/dist/versions/updateLatestVersion.d.ts.map +1 -1
  451. package/dist/versions/updateLatestVersion.js +7 -24
  452. package/dist/versions/updateLatestVersion.js.map +1 -1
  453. package/package.json +30 -28
  454. package/skills/payload/reference/ENDPOINTS.md +3 -9
  455. package/skills/payload/reference/PLUGIN-DEVELOPMENT.md +4 -4
  456. package/dist/admin/getAdminPreferences.d.ts +0 -10
  457. package/dist/admin/getAdminPreferences.d.ts.map +0 -1
  458. package/dist/admin/getAdminPreferences.js +0 -53
  459. package/dist/admin/getAdminPreferences.js.map +0 -1
  460. package/dist/admin/getRequestBranch.d.ts +0 -6
  461. package/dist/admin/getRequestBranch.d.ts.map +0 -1
  462. package/dist/admin/getRequestBranch.js +0 -17
  463. package/dist/admin/getRequestBranch.js.map +0 -1
  464. package/dist/branching/appendBranchFilter.d.ts +0 -30
  465. package/dist/branching/appendBranchFilter.d.ts.map +0 -1
  466. package/dist/branching/appendBranchFilter.js +0 -105
  467. package/dist/branching/appendBranchFilter.js.map +0 -1
  468. package/dist/branching/assertBranchAccess.d.ts +0 -10
  469. package/dist/branching/assertBranchAccess.d.ts.map +0 -1
  470. package/dist/branching/assertBranchAccess.js +0 -36
  471. package/dist/branching/assertBranchAccess.js.map +0 -1
  472. package/dist/branching/assertBranchActionAccess.d.ts +0 -10
  473. package/dist/branching/assertBranchActionAccess.d.ts.map +0 -1
  474. package/dist/branching/assertBranchActionAccess.js +0 -15
  475. package/dist/branching/assertBranchActionAccess.js.map +0 -1
  476. package/dist/branching/assertBranchCreatedDocumentsUnreferenced.d.ts +0 -53
  477. package/dist/branching/assertBranchCreatedDocumentsUnreferenced.d.ts.map +0 -1
  478. package/dist/branching/assertBranchCreatedDocumentsUnreferenced.js +0 -833
  479. package/dist/branching/assertBranchCreatedDocumentsUnreferenced.js.map +0 -1
  480. package/dist/branching/assertBranchReadable.d.ts +0 -36
  481. package/dist/branching/assertBranchReadable.d.ts.map +0 -1
  482. package/dist/branching/assertBranchReadable.js +0 -83
  483. package/dist/branching/assertBranchReadable.js.map +0 -1
  484. package/dist/branching/assertBranchUpdateAccess.d.ts +0 -8
  485. package/dist/branching/assertBranchUpdateAccess.d.ts.map +0 -1
  486. package/dist/branching/assertBranchUpdateAccess.js +0 -12
  487. package/dist/branching/assertBranchUpdateAccess.js.map +0 -1
  488. package/dist/branching/assertBranchWritable.d.ts +0 -18
  489. package/dist/branching/assertBranchWritable.d.ts.map +0 -1
  490. package/dist/branching/assertBranchWritable.js +0 -46
  491. package/dist/branching/assertBranchWritable.js.map +0 -1
  492. package/dist/branching/branchIDs.d.ts +0 -38
  493. package/dist/branching/branchIDs.d.ts.map +0 -1
  494. package/dist/branching/branchIDs.js +0 -113
  495. package/dist/branching/branchIDs.js.map +0 -1
  496. package/dist/branching/branchSelect.d.ts +0 -42
  497. package/dist/branching/branchSelect.d.ts.map +0 -1
  498. package/dist/branching/branchSelect.js +0 -97
  499. package/dist/branching/branchSelect.js.map +0 -1
  500. package/dist/branching/checkFieldAccess.d.ts +0 -21
  501. package/dist/branching/checkFieldAccess.d.ts.map +0 -1
  502. package/dist/branching/checkFieldAccess.js +0 -238
  503. package/dist/branching/checkFieldAccess.js.map +0 -1
  504. package/dist/branching/collections.d.ts +0 -14
  505. package/dist/branching/collections.d.ts.map +0 -1
  506. package/dist/branching/collections.js +0 -713
  507. package/dist/branching/collections.js.map +0 -1
  508. package/dist/branching/combineBranchAccess.d.ts +0 -6
  509. package/dist/branching/combineBranchAccess.d.ts.map +0 -1
  510. package/dist/branching/combineBranchAccess.js +0 -22
  511. package/dist/branching/combineBranchAccess.js.map +0 -1
  512. package/dist/branching/copyUploadFilesToBranch.d.ts +0 -9
  513. package/dist/branching/copyUploadFilesToBranch.d.ts.map +0 -1
  514. package/dist/branching/copyUploadFilesToBranch.js +0 -126
  515. package/dist/branching/copyUploadFilesToBranch.js.map +0 -1
  516. package/dist/branching/createShadowRow.d.ts +0 -70
  517. package/dist/branching/createShadowRow.d.ts.map +0 -1
  518. package/dist/branching/createShadowRow.js +0 -296
  519. package/dist/branching/createShadowRow.js.map +0 -1
  520. package/dist/branching/discard.d.ts +0 -52
  521. package/dist/branching/discard.d.ts.map +0 -1
  522. package/dist/branching/discard.js +0 -428
  523. package/dist/branching/discard.js.map +0 -1
  524. package/dist/branching/effectiveOperations.d.ts +0 -55
  525. package/dist/branching/effectiveOperations.d.ts.map +0 -1
  526. package/dist/branching/effectiveOperations.js +0 -472
  527. package/dist/branching/effectiveOperations.js.map +0 -1
  528. package/dist/branching/endpoints/discard.d.ts +0 -15
  529. package/dist/branching/endpoints/discard.d.ts.map +0 -1
  530. package/dist/branching/endpoints/discard.js +0 -55
  531. package/dist/branching/endpoints/discard.js.map +0 -1
  532. package/dist/branching/endpoints/merge.d.ts +0 -34
  533. package/dist/branching/endpoints/merge.d.ts.map +0 -1
  534. package/dist/branching/endpoints/merge.js +0 -119
  535. package/dist/branching/endpoints/merge.js.map +0 -1
  536. package/dist/branching/forkDocument.d.ts +0 -20
  537. package/dist/branching/forkDocument.d.ts.map +0 -1
  538. package/dist/branching/forkDocument.js +0 -169
  539. package/dist/branching/forkDocument.js.map +0 -1
  540. package/dist/branching/globalMergeWrites.d.ts +0 -21
  541. package/dist/branching/globalMergeWrites.d.ts.map +0 -1
  542. package/dist/branching/globalMergeWrites.js +0 -146
  543. package/dist/branching/globalMergeWrites.js.map +0 -1
  544. package/dist/branching/globals.d.ts +0 -49
  545. package/dist/branching/globals.d.ts.map +0 -1
  546. package/dist/branching/globals.js +0 -197
  547. package/dist/branching/globals.js.map +0 -1
  548. package/dist/branching/hooks.d.ts +0 -24
  549. package/dist/branching/hooks.d.ts.map +0 -1
  550. package/dist/branching/hooks.js +0 -92
  551. package/dist/branching/hooks.js.map +0 -1
  552. package/dist/branching/injectBranchFields.d.ts +0 -40
  553. package/dist/branching/injectBranchFields.d.ts.map +0 -1
  554. package/dist/branching/injectBranchFields.js +0 -229
  555. package/dist/branching/injectBranchFields.js.map +0 -1
  556. package/dist/branching/merge/applyMergeChange.d.ts +0 -27
  557. package/dist/branching/merge/applyMergeChange.d.ts.map +0 -1
  558. package/dist/branching/merge/applyMergeChange.js +0 -853
  559. package/dist/branching/merge/applyMergeChange.js.map +0 -1
  560. package/dist/branching/merge/branchMergeStatus.d.ts +0 -12
  561. package/dist/branching/merge/branchMergeStatus.d.ts.map +0 -1
  562. package/dist/branching/merge/branchMergeStatus.js +0 -74
  563. package/dist/branching/merge/branchMergeStatus.js.map +0 -1
  564. package/dist/branching/merge/executeMerge.d.ts +0 -22
  565. package/dist/branching/merge/executeMerge.d.ts.map +0 -1
  566. package/dist/branching/merge/executeMerge.js +0 -600
  567. package/dist/branching/merge/executeMerge.js.map +0 -1
  568. package/dist/branching/merge/finalizeMerge.d.ts +0 -40
  569. package/dist/branching/merge/finalizeMerge.d.ts.map +0 -1
  570. package/dist/branching/merge/finalizeMerge.js +0 -237
  571. package/dist/branching/merge/finalizeMerge.js.map +0 -1
  572. package/dist/branching/merge/mergeLedger.d.ts +0 -40
  573. package/dist/branching/merge/mergeLedger.d.ts.map +0 -1
  574. package/dist/branching/merge/mergeLedger.js +0 -130
  575. package/dist/branching/merge/mergeLedger.js.map +0 -1
  576. package/dist/branching/merge/prepareMerge.d.ts +0 -41
  577. package/dist/branching/merge/prepareMerge.d.ts.map +0 -1
  578. package/dist/branching/merge/prepareMerge.js +0 -234
  579. package/dist/branching/merge/prepareMerge.js.map +0 -1
  580. package/dist/branching/merge/recoverMerge.d.ts +0 -16
  581. package/dist/branching/merge/recoverMerge.d.ts.map +0 -1
  582. package/dist/branching/merge/recoverMerge.js +0 -199
  583. package/dist/branching/merge/recoverMerge.js.map +0 -1
  584. package/dist/branching/merge/retryFailedCleanups.d.ts +0 -36
  585. package/dist/branching/merge/retryFailedCleanups.d.ts.map +0 -1
  586. package/dist/branching/merge/retryFailedCleanups.js +0 -335
  587. package/dist/branching/merge/retryFailedCleanups.js.map +0 -1
  588. package/dist/branching/merge/utilities.d.ts +0 -35
  589. package/dist/branching/merge/utilities.d.ts.map +0 -1
  590. package/dist/branching/merge/utilities.js +0 -54
  591. package/dist/branching/merge/utilities.js.map +0 -1
  592. package/dist/branching/merge.d.ts +0 -88
  593. package/dist/branching/merge.d.ts.map +0 -1
  594. package/dist/branching/merge.js +0 -163
  595. package/dist/branching/merge.js.map +0 -1
  596. package/dist/branching/mergeWriteGuard.d.ts +0 -20
  597. package/dist/branching/mergeWriteGuard.d.ts.map +0 -1
  598. package/dist/branching/mergeWriteGuard.js +0 -27
  599. package/dist/branching/mergeWriteGuard.js.map +0 -1
  600. package/dist/branching/preflight.d.ts +0 -71
  601. package/dist/branching/preflight.d.ts.map +0 -1
  602. package/dist/branching/preflight.js +0 -757
  603. package/dist/branching/preflight.js.map +0 -1
  604. package/dist/branching/readLocalizedBranchWrite.d.ts +0 -14
  605. package/dist/branching/readLocalizedBranchWrite.d.ts.map +0 -1
  606. package/dist/branching/readLocalizedBranchWrite.js +0 -90
  607. package/dist/branching/readLocalizedBranchWrite.js.map +0 -1
  608. package/dist/branching/readMergeSnapshot.d.ts +0 -18
  609. package/dist/branching/readMergeSnapshot.d.ts.map +0 -1
  610. package/dist/branching/readMergeSnapshot.js +0 -99
  611. package/dist/branching/readMergeSnapshot.js.map +0 -1
  612. package/dist/branching/resolveBranch.d.ts +0 -153
  613. package/dist/branching/resolveBranch.d.ts.map +0 -1
  614. package/dist/branching/resolveBranch.js +0 -363
  615. package/dist/branching/resolveBranch.js.map +0 -1
  616. package/dist/branching/resolveBranchActionAccess.d.ts +0 -8
  617. package/dist/branching/resolveBranchActionAccess.d.ts.map +0 -1
  618. package/dist/branching/resolveBranchActionAccess.js +0 -9
  619. package/dist/branching/resolveBranchActionAccess.js.map +0 -1
  620. package/dist/branching/resolveBranchQuery.d.ts +0 -48
  621. package/dist/branching/resolveBranchQuery.d.ts.map +0 -1
  622. package/dist/branching/resolveBranchQuery.js +0 -115
  623. package/dist/branching/resolveBranchQuery.js.map +0 -1
  624. package/dist/branching/resolveBranchRowID.d.ts +0 -22
  625. package/dist/branching/resolveBranchRowID.d.ts.map +0 -1
  626. package/dist/branching/resolveBranchRowID.js +0 -70
  627. package/dist/branching/resolveBranchRowID.js.map +0 -1
  628. package/dist/branching/sanitizeBranchingConfig.d.ts +0 -31
  629. package/dist/branching/sanitizeBranchingConfig.d.ts.map +0 -1
  630. package/dist/branching/sanitizeBranchingConfig.js +0 -110
  631. package/dist/branching/sanitizeBranchingConfig.js.map +0 -1
  632. package/dist/branching/schedule/job.d.ts +0 -51
  633. package/dist/branching/schedule/job.d.ts.map +0 -1
  634. package/dist/branching/schedule/job.js +0 -151
  635. package/dist/branching/schedule/job.js.map +0 -1
  636. package/dist/branching/selectBranchChanges.d.ts +0 -8
  637. package/dist/branching/selectBranchChanges.d.ts.map +0 -1
  638. package/dist/branching/selectBranchChanges.js +0 -9
  639. package/dist/branching/selectBranchChanges.js.map +0 -1
  640. package/dist/branching/stripBranchMergeData.d.ts +0 -11
  641. package/dist/branching/stripBranchMergeData.d.ts.map +0 -1
  642. package/dist/branching/stripBranchMergeData.js +0 -20
  643. package/dist/branching/stripBranchMergeData.js.map +0 -1
  644. package/dist/branching/tombstone.d.ts +0 -91
  645. package/dist/branching/tombstone.d.ts.map +0 -1
  646. package/dist/branching/tombstone.js +0 -546
  647. package/dist/branching/tombstone.js.map +0 -1
  648. package/dist/branching/types.d.ts +0 -158
  649. package/dist/branching/types.d.ts.map +0 -1
  650. package/dist/branching/types.js +0 -54
  651. package/dist/branching/types.js.map +0 -1
  652. package/dist/branching/validation.d.ts +0 -47
  653. package/dist/branching/validation.d.ts.map +0 -1
  654. package/dist/branching/validation.js +0 -272
  655. package/dist/branching/validation.js.map +0 -1
  656. package/dist/branching/versions.d.ts +0 -131
  657. package/dist/branching/versions.d.ts.map +0 -1
  658. package/dist/branching/versions.js +0 -572
  659. package/dist/branching/versions.js.map +0 -1
  660. package/dist/collections/operations/utilities/createOperationRetryRequest.d.ts +0 -23
  661. package/dist/collections/operations/utilities/createOperationRetryRequest.d.ts.map +0 -1
  662. package/dist/collections/operations/utilities/createOperationRetryRequest.js +0 -683
  663. package/dist/collections/operations/utilities/createOperationRetryRequest.js.map +0 -1
  664. package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.d.ts +0 -3
  665. package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.d.ts.map +0 -1
  666. package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.js +0 -3
  667. package/dist/fields/hooks/beforeValidate/throwOnAccessDenied.js.map +0 -1
  668. package/dist/uploads/appendBranchToFileURL.d.ts +0 -6
  669. package/dist/uploads/appendBranchToFileURL.d.ts.map +0 -1
  670. package/dist/uploads/appendBranchToFileURL.js +0 -24
  671. package/dist/uploads/appendBranchToFileURL.js.map +0 -1
  672. package/dist/uploads/deleteUploadFilesExclusiveToDocument.d.ts +0 -15
  673. package/dist/uploads/deleteUploadFilesExclusiveToDocument.d.ts.map +0 -1
  674. package/dist/uploads/deleteUploadFilesExclusiveToDocument.js +0 -62
  675. package/dist/uploads/deleteUploadFilesExclusiveToDocument.js.map +0 -1
  676. package/dist/uploads/fileIdentity.d.ts +0 -24
  677. package/dist/uploads/fileIdentity.d.ts.map +0 -1
  678. package/dist/uploads/fileIdentity.js +0 -36
  679. package/dist/uploads/fileIdentity.js.map +0 -1
  680. package/dist/uploads/fileQuarantine.d.ts +0 -17
  681. package/dist/uploads/fileQuarantine.d.ts.map +0 -1
  682. package/dist/uploads/fileQuarantine.js +0 -52
  683. package/dist/uploads/fileQuarantine.js.map +0 -1
  684. package/dist/uploads/linkFileWithoutOverwrite.d.ts +0 -13
  685. package/dist/uploads/linkFileWithoutOverwrite.d.ts.map +0 -1
  686. package/dist/uploads/linkFileWithoutOverwrite.js +0 -13
  687. package/dist/uploads/linkFileWithoutOverwrite.js.map +0 -1
  688. package/dist/uploads/uploadFileRollback.d.ts +0 -31
  689. package/dist/uploads/uploadFileRollback.d.ts.map +0 -1
  690. package/dist/uploads/uploadFileRollback.js +0 -269
  691. package/dist/uploads/uploadFileRollback.js.map +0 -1
  692. package/dist/utilities/extractRelationshipID.d.ts +0 -4
  693. package/dist/utilities/extractRelationshipID.d.ts.map +0 -1
  694. package/dist/utilities/extractRelationshipID.js +0 -14
  695. package/dist/utilities/extractRelationshipID.js.map +0 -1
  696. package/dist/utilities/transactionCallbacks.d.ts +0 -77
  697. package/dist/utilities/transactionCallbacks.d.ts.map +0 -1
  698. package/dist/utilities/transactionCallbacks.js +0 -299
  699. package/dist/utilities/transactionCallbacks.js.map +0 -1
  700. package/dist/utilities/transactionMutationTracker.d.ts +0 -21
  701. package/dist/utilities/transactionMutationTracker.d.ts.map +0 -1
  702. package/dist/utilities/transactionMutationTracker.js +0 -71
  703. package/dist/utilities/transactionMutationTracker.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/uploads/fileVersioning/cleanup.ts"],"sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\n\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { JsonObject, PayloadRequest, SelectType, Where } from '../../types/index.js'\nimport type { StagedObject } from './fileOperationManager.js'\nimport type { StoredFile, StoredFileList } from './types.js'\n\nimport { deferFileCleanup } from './fileOperationManager.js'\nimport { normalizeStorageKey } from './naming.js'\nimport {\n collectStoredFiles as collectStoredFileLocations,\n getStoredFileIdentity,\n withLegacyCloudUploadFileData,\n} from './storedFiles.js'\n\nconst pageSize = 100\n\nexport const collectStoredFiles = async ({\n collection,\n doc,\n req,\n}: {\n collection: SanitizedCollectionConfig\n doc: JsonObject\n req: PayloadRequest\n}): Promise<StoredFileList> => {\n const stored = await withLegacyCloudUploadFileData({\n collection,\n doc,\n req,\n })\n\n return collectStoredFileLocations({ collection, doc: stored, req })\n}\n\n/** Reads all saved versions in batches before a parent or its history is deleted. */\nexport const collectVersionFiles = async ({\n collection,\n parentID,\n req,\n where,\n}: {\n collection: SanitizedCollectionConfig\n parentID: number | string\n req: PayloadRequest\n where?: Where\n}): Promise<StoredFileList> => {\n const files: StoredFileList = []\n let page = 1\n\n while (true) {\n const versions = await req.payload.db.findVersions<JsonObject>({\n collection: collection.slug,\n limit: pageSize,\n page,\n req,\n where: where\n ? { and: [{ parent: { equals: parentID } }, where] }\n : { parent: { equals: parentID } },\n })\n\n for (const row of versions.docs) {\n files.push(...(await collectStoredFiles({ collection, doc: row.version, req })))\n }\n\n if (versions.docs.length < pageSize) {\n return files\n }\n page += 1\n }\n}\n\n/** Collects every stored file that can become unreferenced when a document is deleted. */\nexport const collectDocumentDeleteFileCandidates = async ({\n collection,\n doc,\n parentID,\n req,\n}: {\n collection: SanitizedCollectionConfig\n doc: JsonObject\n parentID: number | string\n req: PayloadRequest\n}): Promise<StoredFileList> => [\n ...(await collectStoredFiles({ collection, doc, req })),\n ...(collection.versions ? await collectVersionFiles({ collection, parentID, req }) : []),\n]\n\n/** Confirms that deleted references have no survivors before and after commit. */\nexport const scheduleUnreferencedFileCleanup = async ({\n candidates,\n collection,\n req,\n}: {\n candidates: StoredFileList\n collection: SanitizedCollectionConfig\n req: PayloadRequest\n}): Promise<void> => {\n const unique = new Map(candidates.map((file) => [getStoredFileIdentity(file), file]))\n\n if (!unique.size) {\n return\n }\n\n const unreferenced = await findUnreferenced({ candidates: [...unique.values()], collection, req })\n\n if (!unreferenced.length) {\n return\n }\n\n await deferFileCleanup({\n cleanup: async () => {\n const stillUnreferenced = await findUnreferenced({\n candidates: unreferenced,\n collection,\n req,\n })\n\n for (const file of stillUnreferenced) {\n try {\n await deleteStoredFile({ collection, file, req })\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Failed to delete unreferenced upload file ${file.key}. Verify the object is unreferenced and remove it manually.`,\n })\n }\n }\n },\n req,\n shouldCleanupAfterFailure: true,\n })\n}\n\n/** Removes objects staged by a failed write unless a persisted document or version references them. */\nexport const removeUnreferencedStagedObjects = async ({\n collection,\n objects,\n req,\n}: {\n collection: SanitizedCollectionConfig\n objects: StagedObject[]\n req: PayloadRequest\n}): Promise<void> => {\n const unreferenced = await findUnreferenced({\n candidates: objects.map(({ key }) => ({ key, roles: [] })),\n collection,\n req,\n })\n const identities = new Set(unreferenced.map(getStoredFileIdentity))\n\n for (const object of objects) {\n if (!identities.has(getStoredFileIdentity(object))) {\n continue\n }\n\n try {\n await object.remove()\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Failed to remove staged upload file ${object.key}`,\n })\n }\n }\n}\n\nconst findUnreferenced = async ({\n candidates,\n collection,\n req,\n}: {\n candidates: StoredFileList\n collection: SanitizedCollectionConfig\n req: PayloadRequest\n}): Promise<StoredFileList> => {\n const variantsField = collection.flattenedFields.find((field) => field.name === 'variants')\n const variantNames =\n variantsField?.type === 'group'\n ? variantsField.flattenedFields\n .filter(\n (field) =>\n field.type === 'group' &&\n field.flattenedFields.some((nested) => nested.name === 'filename'),\n )\n .map((field) => field.name)\n : []\n const filenamePaths = [\n 'filename',\n 'original.filename',\n ...variantNames.map((name) => `variants.${name}.filename`),\n ]\n // A removed schema field cannot prove the absence of historical references.\n // Retain those variant objects until their saved location data is migrated.\n const remaining = new Map(\n candidates\n .filter((file) =>\n file.roles.every((role) => role.type !== 'size' || variantNames.includes(role.sizeKey)),\n )\n .map((file) => [getStoredFileIdentity(file), file]),\n )\n const representationSelect: SelectType = {\n _objectKey: true,\n filename: true,\n prefix: true,\n url: true,\n }\n const select: SelectType = {\n ...representationSelect,\n filesize: true,\n mimeType: true,\n original: representationSelect,\n ...(variantNames.length\n ? { variants: Object.fromEntries(variantNames.map((name) => [name, representationSelect])) }\n : {}),\n }\n // Legacy filenames may include folders. Match every possible filename suffix,\n // then verify the adapter's complete key before accepting a reference.\n const filenames = [\n ...new Set(\n [...remaining.values()].flatMap(({ key }) => {\n const parts = normalizeStorageKey({ key }).split('/')\n return parts.map((_, index) => parts.slice(index).join('/'))\n }),\n ),\n ]\n\n for (let offset = 0; offset < filenames.length && remaining.size; offset += pageSize) {\n const batch = filenames.slice(offset, offset + pageSize)\n const where: Where = { or: filenamePaths.map((field) => ({ [field]: { in: batch } })) }\n let page = 1\n\n while (remaining.size) {\n const docs = await req.payload.db.find<JsonObject>({\n collection: collection.slug,\n limit: pageSize,\n page,\n pagination: true,\n req,\n select,\n sort: 'id',\n where,\n })\n\n for (const doc of docs.docs) {\n await removeReferenced({ collection, doc, remaining, req })\n }\n if (docs.docs.length < pageSize) {\n break\n }\n page += 1\n }\n\n if (collection.versions) {\n page = 1\n const versionWhere: Where = {\n or: filenamePaths.map((field) => ({ [`version.${field}`]: { in: batch } })),\n }\n\n while (remaining.size) {\n const versions = await req.payload.db.findVersions<JsonObject>({\n collection: collection.slug,\n limit: pageSize,\n page,\n pagination: true,\n req,\n select: { version: select },\n sort: 'id',\n where: versionWhere,\n })\n\n for (const row of versions.docs) {\n await removeReferenced({ collection, doc: row.version, remaining, req })\n }\n if (versions.docs.length < pageSize) {\n break\n }\n page += 1\n }\n }\n }\n\n return [...remaining.values()]\n}\n\nconst removeReferenced = async ({\n collection,\n doc,\n remaining,\n req,\n}: {\n collection: SanitizedCollectionConfig\n doc: JsonObject\n remaining: Map<string, StoredFile>\n req: PayloadRequest\n}): Promise<void> => {\n for (const file of await collectStoredFiles({ collection, doc, req })) {\n remaining.delete(getStoredFileIdentity(file))\n }\n}\n\nconst deleteStoredFile = async ({\n collection,\n file,\n req,\n}: {\n collection: SanitizedCollectionConfig\n file: StoredFile\n req: PayloadRequest\n}): Promise<void> => {\n const operations = collection.upload.fileOperations\n if (!operations) {\n const staticDir = collection.upload.staticDir\n\n if (!staticDir) {\n throw new Error(`No local storage directory is configured for ${collection.slug}`)\n }\n\n const key = normalizeStorageKey({ key: file.key })\n const directory = await fs.realpath(staticDir)\n const target = path.resolve(directory, key)\n const relative = path.relative(directory, target)\n\n if (!relative || relative.startsWith('..') || path.isAbsolute(relative)) {\n throw new Error(`Invalid local storage key: ${key}`)\n }\n\n try {\n const parent = await fs.realpath(path.dirname(target))\n const parentRelative = path.relative(directory, parent)\n\n if (parentRelative.startsWith('..') || path.isAbsolute(parentRelative)) {\n throw new Error(`Local storage key escapes its directory: ${key}`)\n }\n\n await fs.unlink(target)\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw err\n }\n }\n\n return\n }\n\n await operations.delete({ key: file.key, req })\n}\n"],"names":["fs","path","deferFileCleanup","normalizeStorageKey","collectStoredFiles","collectStoredFileLocations","getStoredFileIdentity","withLegacyCloudUploadFileData","pageSize","collection","doc","req","stored","collectVersionFiles","parentID","where","files","page","versions","payload","db","findVersions","slug","limit","and","parent","equals","row","docs","push","version","length","collectDocumentDeleteFileCandidates","scheduleUnreferencedFileCleanup","candidates","unique","Map","map","file","size","unreferenced","findUnreferenced","values","cleanup","stillUnreferenced","deleteStoredFile","err","logger","error","msg","key","shouldCleanupAfterFailure","removeUnreferencedStagedObjects","objects","roles","identities","Set","object","has","remove","variantsField","flattenedFields","find","field","name","variantNames","type","filter","some","nested","filenamePaths","remaining","every","role","includes","sizeKey","representationSelect","_objectKey","filename","prefix","url","select","filesize","mimeType","original","variants","Object","fromEntries","filenames","flatMap","parts","split","_","index","slice","join","offset","batch","or","in","pagination","sort","removeReferenced","versionWhere","delete","operations","upload","fileOperations","staticDir","Error","directory","realpath","target","resolve","relative","startsWith","isAbsolute","dirname","parentRelative","unlink","code"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/uploads/fileVersioning/cleanup.ts"],"sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\n\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { JsonObject, PayloadRequest, SelectType, Where } from '../../types/index.js'\nimport type { StagedObject } from './fileOperationManager.js'\nimport type { StoredFile, StoredFileList } from './types.js'\n\nimport { deferFileCleanup } from './fileOperationManager.js'\nimport { normalizeStorageKey } from './naming.js'\nimport {\n collectStoredFiles as collectStoredFileLocations,\n getStoredFileIdentity,\n withLegacyCloudUploadFileData,\n} from './storedFiles.js'\n\nconst pageSize = 100\n\nexport const collectStoredFiles = async ({\n collection,\n doc,\n req,\n}: {\n collection: SanitizedCollectionConfig\n doc: JsonObject\n req: PayloadRequest\n}): Promise<StoredFileList> => {\n const stored = await withLegacyCloudUploadFileData({\n collection,\n doc,\n req,\n })\n\n return collectStoredFileLocations({ collection, doc: stored, req })\n}\n\n/** Reads all saved versions in batches before a parent or its history is deleted. */\nexport const collectVersionFiles = async ({\n collection,\n parentID,\n req,\n where,\n}: {\n collection: SanitizedCollectionConfig\n parentID: number | string\n req: PayloadRequest\n where?: Where\n}): Promise<StoredFileList> => {\n const files: StoredFileList = []\n let page = 1\n\n while (true) {\n const versions = await req.payload.db.findVersions<JsonObject>({\n collection: collection.slug,\n limit: pageSize,\n page,\n req,\n where: where\n ? { and: [{ parent: { equals: parentID } }, where] }\n : { parent: { equals: parentID } },\n })\n\n for (const row of versions.docs) {\n files.push(...(await collectStoredFiles({ collection, doc: row.version, req })))\n }\n\n if (versions.docs.length < pageSize) {\n return files\n }\n page += 1\n }\n}\n\n/** Confirms that deleted references have no survivors before and after commit. */\nexport const scheduleUnreferencedFileCleanup = async ({\n candidates,\n collection,\n req,\n}: {\n candidates: StoredFileList\n collection: SanitizedCollectionConfig\n req: PayloadRequest\n}): Promise<void> => {\n const unique = new Map(candidates.map((file) => [getStoredFileIdentity(file), file]))\n\n if (!unique.size) {\n return\n }\n\n const unreferenced = await findUnreferenced({ candidates: [...unique.values()], collection, req })\n\n if (!unreferenced.length) {\n return\n }\n\n await deferFileCleanup({\n cleanup: async () => {\n const stillUnreferenced = await findUnreferenced({\n candidates: unreferenced,\n collection,\n req,\n })\n\n for (const file of stillUnreferenced) {\n try {\n await deleteStoredFile({ collection, file, req })\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Failed to delete unreferenced upload file ${file.key}. Verify the object is unreferenced and remove it manually.`,\n })\n }\n }\n },\n req,\n shouldCleanupAfterFailure: true,\n })\n}\n\n/** Removes objects staged by a failed write unless a persisted document or version references them. */\nexport const removeUnreferencedStagedObjects = async ({\n collection,\n objects,\n req,\n}: {\n collection: SanitizedCollectionConfig\n objects: StagedObject[]\n req: PayloadRequest\n}): Promise<void> => {\n const unreferenced = await findUnreferenced({\n candidates: objects.map(({ key }) => ({ key, roles: [] })),\n collection,\n req,\n })\n const identities = new Set(unreferenced.map(getStoredFileIdentity))\n\n for (const object of objects) {\n if (!identities.has(getStoredFileIdentity(object))) {\n continue\n }\n\n try {\n await object.remove()\n } catch (err) {\n req.payload.logger.error({\n err,\n msg: `Failed to remove staged upload file ${object.key}`,\n })\n }\n }\n}\n\nconst findUnreferenced = async ({\n candidates,\n collection,\n req,\n}: {\n candidates: StoredFileList\n collection: SanitizedCollectionConfig\n req: PayloadRequest\n}): Promise<StoredFileList> => {\n const variantsField = collection.flattenedFields.find((field) => field.name === 'variants')\n const variantNames =\n variantsField?.type === 'group'\n ? variantsField.flattenedFields\n .filter(\n (field) =>\n field.type === 'group' &&\n field.flattenedFields.some((nested) => nested.name === 'filename'),\n )\n .map((field) => field.name)\n : []\n const filenamePaths = [\n 'filename',\n 'original.filename',\n ...variantNames.map((name) => `variants.${name}.filename`),\n ]\n // A removed schema field cannot prove the absence of historical references.\n // Retain those variant objects until their saved location data is migrated.\n const remaining = new Map(\n candidates\n .filter((file) =>\n file.roles.every((role) => role.type !== 'size' || variantNames.includes(role.sizeKey)),\n )\n .map((file) => [getStoredFileIdentity(file), file]),\n )\n const representationSelect: SelectType = {\n _objectKey: true,\n filename: true,\n prefix: true,\n url: true,\n }\n const select: SelectType = {\n ...representationSelect,\n filesize: true,\n mimeType: true,\n original: representationSelect,\n ...(variantNames.length\n ? { variants: Object.fromEntries(variantNames.map((name) => [name, representationSelect])) }\n : {}),\n }\n // Legacy filenames may include folders. Match every possible filename suffix,\n // then verify the adapter's complete key before accepting a reference.\n const filenames = [\n ...new Set(\n [...remaining.values()].flatMap(({ key }) => {\n const parts = normalizeStorageKey({ key }).split('/')\n return parts.map((_, index) => parts.slice(index).join('/'))\n }),\n ),\n ]\n\n for (let offset = 0; offset < filenames.length && remaining.size; offset += pageSize) {\n const batch = filenames.slice(offset, offset + pageSize)\n const where: Where = { or: filenamePaths.map((field) => ({ [field]: { in: batch } })) }\n let page = 1\n\n while (remaining.size) {\n const docs = await req.payload.db.find<JsonObject>({\n collection: collection.slug,\n limit: pageSize,\n page,\n pagination: true,\n req,\n select,\n sort: 'id',\n where,\n })\n\n for (const doc of docs.docs) {\n await removeReferenced({ collection, doc, remaining, req })\n }\n if (docs.docs.length < pageSize) {\n break\n }\n page += 1\n }\n\n if (collection.versions) {\n page = 1\n const versionWhere: Where = {\n or: filenamePaths.map((field) => ({ [`version.${field}`]: { in: batch } })),\n }\n\n while (remaining.size) {\n const versions = await req.payload.db.findVersions<JsonObject>({\n collection: collection.slug,\n limit: pageSize,\n page,\n pagination: true,\n req,\n select: { version: select },\n sort: 'id',\n where: versionWhere,\n })\n\n for (const row of versions.docs) {\n await removeReferenced({ collection, doc: row.version, remaining, req })\n }\n if (versions.docs.length < pageSize) {\n break\n }\n page += 1\n }\n }\n }\n\n return [...remaining.values()]\n}\n\nconst removeReferenced = async ({\n collection,\n doc,\n remaining,\n req,\n}: {\n collection: SanitizedCollectionConfig\n doc: JsonObject\n remaining: Map<string, StoredFile>\n req: PayloadRequest\n}): Promise<void> => {\n for (const file of await collectStoredFiles({ collection, doc, req })) {\n remaining.delete(getStoredFileIdentity(file))\n }\n}\n\nconst deleteStoredFile = async ({\n collection,\n file,\n req,\n}: {\n collection: SanitizedCollectionConfig\n file: StoredFile\n req: PayloadRequest\n}): Promise<void> => {\n const operations = collection.upload.fileOperations\n if (!operations) {\n const staticDir = collection.upload.staticDir\n\n if (!staticDir) {\n throw new Error(`No local storage directory is configured for ${collection.slug}`)\n }\n\n const key = normalizeStorageKey({ key: file.key })\n const directory = await fs.realpath(staticDir)\n const target = path.resolve(directory, key)\n const relative = path.relative(directory, target)\n\n if (!relative || relative.startsWith('..') || path.isAbsolute(relative)) {\n throw new Error(`Invalid local storage key: ${key}`)\n }\n\n try {\n const parent = await fs.realpath(path.dirname(target))\n const parentRelative = path.relative(directory, parent)\n\n if (parentRelative.startsWith('..') || path.isAbsolute(parentRelative)) {\n throw new Error(`Local storage key escapes its directory: ${key}`)\n }\n\n await fs.unlink(target)\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw err\n }\n }\n\n return\n }\n\n await operations.delete({ key: file.key, req })\n}\n"],"names":["fs","path","deferFileCleanup","normalizeStorageKey","collectStoredFiles","collectStoredFileLocations","getStoredFileIdentity","withLegacyCloudUploadFileData","pageSize","collection","doc","req","stored","collectVersionFiles","parentID","where","files","page","versions","payload","db","findVersions","slug","limit","and","parent","equals","row","docs","push","version","length","scheduleUnreferencedFileCleanup","candidates","unique","Map","map","file","size","unreferenced","findUnreferenced","values","cleanup","stillUnreferenced","deleteStoredFile","err","logger","error","msg","key","shouldCleanupAfterFailure","removeUnreferencedStagedObjects","objects","roles","identities","Set","object","has","remove","variantsField","flattenedFields","find","field","name","variantNames","type","filter","some","nested","filenamePaths","remaining","every","role","includes","sizeKey","representationSelect","_objectKey","filename","prefix","url","select","filesize","mimeType","original","variants","Object","fromEntries","filenames","flatMap","parts","split","_","index","slice","join","offset","batch","or","in","pagination","sort","removeReferenced","versionWhere","delete","operations","upload","fileOperations","staticDir","Error","directory","realpath","target","resolve","relative","startsWith","isAbsolute","dirname","parentRelative","unlink","code"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cloudStorage.d.ts","sourceRoot":"","sources":["../../../src/uploads/fileVersioning/cloudStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAuB7C,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,YAAa;IAAE,GAAG,EAAE,cAAc,CAAA;CAAE,KAAG,CAAC,MAAM,IAAI,CAmBnF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAU,CAAC,4CAMzC;IACD,UAAU,EAAE,yBAAyB,CAAA;IACrC,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;IACnB,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;CACxB,KAAG,OAAO,CAAC,CAAC,CAqCZ,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,CAAC,yDAQvC;IACD,UAAU,EAAE,yBAAyB,CAAA;IACrC,OAAO,EAAE,UAAU,CAAA;IACnB,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;IACnB,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;CACxB,KAAG,OAAO,CAAC,CAAC,CAqEZ,CAAA"}
1
+ {"version":3,"file":"cloudStorage.d.ts","sourceRoot":"","sources":["../../../src/uploads/fileVersioning/cloudStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAgB7C,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,YAAa;IAAE,GAAG,EAAE,cAAc,CAAA;CAAE,KAAG,CAAC,MAAM,IAAI,CAmBnF,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAU,CAAC,4CAMzC;IACD,UAAU,EAAE,yBAAyB,CAAA;IACrC,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;IACnB,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;CACxB,KAAG,OAAO,CAAC,CAAC,CAqCZ,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,CAAC,yDAQvC;IACD,UAAU,EAAE,yBAAyB,CAAA;IACrC,OAAO,EAAE,UAAU,CAAA;IACnB,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;IACnB,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;CACxB,KAAG,OAAO,CAAC,CAAC,CAqEZ,CAAA"}
@@ -1,5 +1,3 @@
1
- import { resolveBranchRowID } from '../../branching/resolveBranchRowID.js';
2
- import { branchField, branchParentField } from '../../branching/types.js';
3
1
  import { saveVersion } from '../../versions/saveVersion.js';
4
2
  import { collectStoredFiles as collectSavedFiles, removeUnreferencedStagedObjects, scheduleUnreferencedFileCleanup } from './cleanup.js';
5
3
  import { runFileCreationPlan, runFileOperationPlan } from './fileOperationManager.js';
@@ -180,28 +178,21 @@ export const runCloudFileUpdate = async ({ id, collection, current, data, files,
180
178
  });
181
179
  };
182
180
  const persistLegacyCloudVersions = async ({ id, collection, current, req })=>{
183
- const versionParent = await resolveBranchRowID({
184
- id,
185
- collectionSlug: collection.slug,
186
- req
187
- });
188
181
  let page = 1;
189
182
  let hasVersions = false;
190
183
  while(true){
191
184
  const versions = await req.payload.db.findVersions({
192
- branch: false,
193
185
  collection: collection.slug,
194
186
  limit: 100,
195
187
  page,
196
188
  req,
197
189
  where: {
198
190
  parent: {
199
- equals: versionParent
191
+ equals: id
200
192
  }
201
193
  }
202
194
  });
203
195
  for (const row of versions.docs){
204
- const branchVersion = row;
205
196
  hasVersions = true;
206
197
  if (hasStoredOriginal({
207
198
  doc: row.version
@@ -223,12 +214,6 @@ const persistLegacyCloudVersions = async ({ id, collection, current, req })=>{
223
214
  collection: collection.slug,
224
215
  req,
225
216
  versionData: {
226
- ...branchVersion[branchField] !== undefined ? {
227
- [branchField]: branchVersion[branchField]
228
- } : {},
229
- ...branchVersion[branchParentField] !== undefined ? {
230
- [branchParentField]: branchVersion[branchParentField]
231
- } : {},
232
217
  createdAt: row.createdAt,
233
218
  latest: row.latest,
234
219
  parent: row.parent,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/uploads/fileVersioning/cloudStorage.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { JsonObject, PayloadRequest } from '../../types/index.js'\nimport type { FileToSave } from '../types.js'\nimport type { StagedObject } from './fileOperationManager.js'\n\nimport { resolveBranchRowID } from '../../branching/resolveBranchRowID.js'\nimport { branchField, branchParentField } from '../../branching/types.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport {\n collectStoredFiles as collectSavedFiles,\n removeUnreferencedStagedObjects,\n scheduleUnreferencedFileCleanup,\n} from './cleanup.js'\nimport { runFileCreationPlan, runFileOperationPlan } from './fileOperationManager.js'\nimport {\n collectStoredFiles,\n getStoredFileIdentity,\n withLegacyCloudUploadFileData,\n} from './storedFiles.js'\n\ntype BranchVersionMetadata = {\n [branchField]?: null | string\n [branchParentField]?: null | number | string\n}\n\n/** Preserve the caller's cloud flags; nested Local API calls can replace req.context. */\nexport const captureCloudHookState = ({ req }: { req: PayloadRequest }): (() => void) => {\n const previousState = ['_payloadManagedCloudStorage', '_payloadManagedCloudMetadata'].map(\n (key) => ({\n hasProperty: Object.hasOwn(req.context ?? {}, key),\n key,\n value: req.context?.[key],\n }),\n )\n\n return () => {\n req.context ??= {}\n for (const { hasProperty, key, value } of previousState) {\n if (hasProperty) {\n req.context[key] = value\n } else {\n delete req.context[key]\n }\n }\n }\n}\n\nexport const runCloudFileCreation = async <T>({\n collection,\n data,\n files,\n req,\n write,\n}: {\n collection: SanitizedCollectionConfig\n data: JsonObject\n files: FileToSave[]\n req: PayloadRequest\n write: () => Promise<T>\n}): Promise<T> => {\n const operations = collection.upload.fileOperations\n\n if (\n !operations ||\n req.context?.skipCloudStorage ||\n (files.length === 0 && !req.context?._payloadVerifiedProviderOriginal)\n ) {\n return write()\n }\n\n let metadata: Record<string, unknown> = {}\n\n return runFileCreationPlan({\n cleanupStagedAfterWriteFailure: (objects) =>\n removeUnreferencedStagedObjects({ collection, objects, req }),\n req,\n stage: async ({ trackStagedObject }) => {\n trackClientUploadOriginal({ collection, data, req, trackStagedObject })\n const staged = await operations.stage({\n data,\n files,\n req,\n trackStagedObject,\n })\n metadata = staged.metadata\n Object.assign(data, metadata)\n },\n // Create's version and afterChange hooks run after the database insert. The\n // outer create operation restores the previous guard after those hooks finish.\n write: () => {\n req.context ??= {}\n req.context._payloadManagedCloudStorage = true\n req.context._payloadManagedCloudMetadata = metadata\n return write()\n },\n })\n}\n\nexport const runCloudFileUpdate = async <T>({\n id,\n collection,\n current,\n data,\n files,\n req,\n write,\n}: {\n collection: SanitizedCollectionConfig\n current: JsonObject\n data: JsonObject\n files: FileToSave[]\n id: number | string\n req: PayloadRequest\n write: () => Promise<T>\n}): Promise<T> => {\n const operations = collection.upload.fileOperations\n const storedCurrent = operations\n ? await withLegacyCloudUploadFileData({ collection, doc: current, req })\n : current\n const nextFiles = collectStoredFiles({\n collection,\n doc: { ...storedCurrent, ...data },\n req,\n trustGenerated: true,\n })\n const currentFiles = collectStoredFiles({ collection, doc: storedCurrent, req })\n const nextIdentities = new Set(nextFiles.map(getStoredFileIdentity))\n const hasStoredFileChange =\n nextIdentities.size !== currentFiles.length ||\n currentFiles.some((file) => !nextIdentities.has(getStoredFileIdentity(file)))\n\n if (\n !operations ||\n req.context?.skipCloudStorage ||\n (files.length === 0 && !req.context?._payloadVerifiedProviderOriginal && !hasStoredFileChange)\n ) {\n return write()\n }\n\n let metadata: Record<string, unknown> = {}\n\n return runFileOperationPlan({\n cleanupStagedAfterWriteFailure: (objects) =>\n removeUnreferencedStagedObjects({ collection, objects, req }),\n req,\n stage: async ({ trackStagedObject }) => {\n if (files.length === 0 && !req.context?._payloadVerifiedProviderOriginal) {\n return\n }\n trackClientUploadOriginal({ collection, data, req, trackStagedObject })\n const staged = await operations.stage({\n data,\n files,\n req,\n trackStagedObject,\n })\n metadata = staged.metadata\n Object.assign(data, metadata)\n },\n write: async () => {\n if (\n collection.versions &&\n !hasStoredOriginal({ doc: current }) &&\n hasStoredOriginal({ doc: storedCurrent })\n ) {\n await persistLegacyCloudVersions({ id, collection, current: storedCurrent, req })\n }\n\n const result = await withCloudHookGuard({\n metadata,\n req,\n write,\n })\n\n await scheduleUnreferencedFileCleanup({\n candidates: await collectSavedFiles({ collection, doc: storedCurrent, req }),\n collection,\n req,\n })\n\n return result\n },\n })\n}\n\n/** Track a verified client-uploaded source, retaining it if another document still references it. */\nconst trackClientUploadOriginal = ({\n collection,\n data,\n req,\n trackStagedObject,\n}: {\n collection: SanitizedCollectionConfig\n data: JsonObject\n req: PayloadRequest\n trackStagedObject: (object: StagedObject) => void\n}): void => {\n const verifiedOriginal = req.context?._payloadVerifiedProviderOriginal as\n | { key: string }\n | undefined\n\n if (!verifiedOriginal) {\n return\n }\n\n const original = collectStoredFiles({ collection, doc: data, req, trustGenerated: true }).find(\n ({ key, roles }) =>\n key === verifiedOriginal.key && roles.some((role) => role.type === 'original'),\n )\n\n if (!original) {\n return\n }\n\n const object: StagedObject = {\n key: original.key,\n remove: () => collection.upload.fileOperations!.delete({ key: original.key, req }),\n }\n\n trackStagedObject({\n key: object.key,\n remove: () => removeUnreferencedStagedObjects({ collection, objects: [object], req }),\n })\n}\n\nconst persistLegacyCloudVersions = async ({\n id,\n collection,\n current,\n req,\n}: {\n collection: SanitizedCollectionConfig\n current: JsonObject\n id: number | string\n req: PayloadRequest\n}): Promise<void> => {\n const versionParent = await resolveBranchRowID({\n id,\n collectionSlug: collection.slug,\n req,\n })\n let page = 1\n let hasVersions = false\n\n while (true) {\n const versions = await req.payload.db.findVersions<JsonObject>({\n branch: false,\n collection: collection.slug,\n limit: 100,\n page,\n req,\n where: { parent: { equals: versionParent } },\n })\n\n for (const row of versions.docs) {\n const branchVersion = row as BranchVersionMetadata & typeof row\n\n hasVersions = true\n if (hasStoredOriginal({ doc: row.version })) {\n continue\n }\n\n const version = await withLegacyCloudUploadFileData({\n collection,\n doc: row.version,\n req,\n })\n if (!hasStoredOriginal({ doc: version })) {\n continue\n }\n\n await req.payload.db.updateVersion({\n id: row.id,\n collection: collection.slug,\n req,\n versionData: {\n ...(branchVersion[branchField] !== undefined\n ? { [branchField]: branchVersion[branchField] }\n : {}),\n ...(branchVersion[branchParentField] !== undefined\n ? { [branchParentField]: branchVersion[branchParentField] }\n : {}),\n createdAt: row.createdAt,\n latest: row.latest,\n parent: row.parent,\n publishedLocale: row.publishedLocale,\n updatedAt: row.updatedAt,\n version,\n },\n })\n }\n\n if (versions.docs.length < 100) {\n break\n }\n page += 1\n }\n\n if (!hasVersions && hasStoredOriginal({ doc: current })) {\n await saveVersion({\n id,\n collection,\n docWithLocales: current,\n draft: false,\n operation: 'update',\n payload: req.payload,\n req,\n })\n }\n}\n\nconst hasStoredOriginal = ({ doc }: { doc: JsonObject }): boolean =>\n Boolean(\n doc.original &&\n typeof doc.original === 'object' &&\n typeof (doc.original as Record<string, unknown>).filename === 'string',\n )\n\nconst withCloudHookGuard = async <T>({\n metadata,\n req,\n write,\n}: {\n metadata: Record<string, unknown>\n req: PayloadRequest\n write: () => Promise<T>\n}): Promise<T> => {\n const restoreCloudHookState = captureCloudHookState({ req })\n req.context ??= {}\n req.context._payloadManagedCloudStorage = true\n req.context._payloadManagedCloudMetadata = metadata\n\n try {\n return await write()\n } finally {\n restoreCloudHookState()\n }\n}\n"],"names":["resolveBranchRowID","branchField","branchParentField","saveVersion","collectStoredFiles","collectSavedFiles","removeUnreferencedStagedObjects","scheduleUnreferencedFileCleanup","runFileCreationPlan","runFileOperationPlan","getStoredFileIdentity","withLegacyCloudUploadFileData","captureCloudHookState","req","previousState","map","key","hasProperty","Object","hasOwn","context","value","runCloudFileCreation","collection","data","files","write","operations","upload","fileOperations","skipCloudStorage","length","_payloadVerifiedProviderOriginal","metadata","cleanupStagedAfterWriteFailure","objects","stage","trackStagedObject","trackClientUploadOriginal","staged","assign","_payloadManagedCloudStorage","_payloadManagedCloudMetadata","runCloudFileUpdate","id","current","storedCurrent","doc","nextFiles","trustGenerated","currentFiles","nextIdentities","Set","hasStoredFileChange","size","some","file","has","versions","hasStoredOriginal","persistLegacyCloudVersions","result","withCloudHookGuard","candidates","verifiedOriginal","original","find","roles","role","type","object","remove","delete","versionParent","collectionSlug","slug","page","hasVersions","payload","db","findVersions","branch","limit","where","parent","equals","row","docs","branchVersion","version","updateVersion","versionData","undefined","createdAt","latest","publishedLocale","updatedAt","docWithLocales","draft","operation","Boolean","filename","restoreCloudHookState"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/uploads/fileVersioning/cloudStorage.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { JsonObject, PayloadRequest } from '../../types/index.js'\nimport type { FileToSave } from '../types.js'\nimport type { StagedObject } from './fileOperationManager.js'\n\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport {\n collectStoredFiles as collectSavedFiles,\n removeUnreferencedStagedObjects,\n scheduleUnreferencedFileCleanup,\n} from './cleanup.js'\nimport { runFileCreationPlan, runFileOperationPlan } from './fileOperationManager.js'\nimport {\n collectStoredFiles,\n getStoredFileIdentity,\n withLegacyCloudUploadFileData,\n} from './storedFiles.js'\n\n/** Preserve the caller's cloud flags; nested Local API calls can replace req.context. */\nexport const captureCloudHookState = ({ req }: { req: PayloadRequest }): (() => void) => {\n const previousState = ['_payloadManagedCloudStorage', '_payloadManagedCloudMetadata'].map(\n (key) => ({\n hasProperty: Object.hasOwn(req.context ?? {}, key),\n key,\n value: req.context?.[key],\n }),\n )\n\n return () => {\n req.context ??= {}\n for (const { hasProperty, key, value } of previousState) {\n if (hasProperty) {\n req.context[key] = value\n } else {\n delete req.context[key]\n }\n }\n }\n}\n\nexport const runCloudFileCreation = async <T>({\n collection,\n data,\n files,\n req,\n write,\n}: {\n collection: SanitizedCollectionConfig\n data: JsonObject\n files: FileToSave[]\n req: PayloadRequest\n write: () => Promise<T>\n}): Promise<T> => {\n const operations = collection.upload.fileOperations\n\n if (\n !operations ||\n req.context?.skipCloudStorage ||\n (files.length === 0 && !req.context?._payloadVerifiedProviderOriginal)\n ) {\n return write()\n }\n\n let metadata: Record<string, unknown> = {}\n\n return runFileCreationPlan({\n cleanupStagedAfterWriteFailure: (objects) =>\n removeUnreferencedStagedObjects({ collection, objects, req }),\n req,\n stage: async ({ trackStagedObject }) => {\n trackClientUploadOriginal({ collection, data, req, trackStagedObject })\n const staged = await operations.stage({\n data,\n files,\n req,\n trackStagedObject,\n })\n metadata = staged.metadata\n Object.assign(data, metadata)\n },\n // Create's version and afterChange hooks run after the database insert. The\n // outer create operation restores the previous guard after those hooks finish.\n write: () => {\n req.context ??= {}\n req.context._payloadManagedCloudStorage = true\n req.context._payloadManagedCloudMetadata = metadata\n return write()\n },\n })\n}\n\nexport const runCloudFileUpdate = async <T>({\n id,\n collection,\n current,\n data,\n files,\n req,\n write,\n}: {\n collection: SanitizedCollectionConfig\n current: JsonObject\n data: JsonObject\n files: FileToSave[]\n id: number | string\n req: PayloadRequest\n write: () => Promise<T>\n}): Promise<T> => {\n const operations = collection.upload.fileOperations\n const storedCurrent = operations\n ? await withLegacyCloudUploadFileData({ collection, doc: current, req })\n : current\n const nextFiles = collectStoredFiles({\n collection,\n doc: { ...storedCurrent, ...data },\n req,\n trustGenerated: true,\n })\n const currentFiles = collectStoredFiles({ collection, doc: storedCurrent, req })\n const nextIdentities = new Set(nextFiles.map(getStoredFileIdentity))\n const hasStoredFileChange =\n nextIdentities.size !== currentFiles.length ||\n currentFiles.some((file) => !nextIdentities.has(getStoredFileIdentity(file)))\n\n if (\n !operations ||\n req.context?.skipCloudStorage ||\n (files.length === 0 && !req.context?._payloadVerifiedProviderOriginal && !hasStoredFileChange)\n ) {\n return write()\n }\n\n let metadata: Record<string, unknown> = {}\n\n return runFileOperationPlan({\n cleanupStagedAfterWriteFailure: (objects) =>\n removeUnreferencedStagedObjects({ collection, objects, req }),\n req,\n stage: async ({ trackStagedObject }) => {\n if (files.length === 0 && !req.context?._payloadVerifiedProviderOriginal) {\n return\n }\n trackClientUploadOriginal({ collection, data, req, trackStagedObject })\n const staged = await operations.stage({\n data,\n files,\n req,\n trackStagedObject,\n })\n metadata = staged.metadata\n Object.assign(data, metadata)\n },\n write: async () => {\n if (\n collection.versions &&\n !hasStoredOriginal({ doc: current }) &&\n hasStoredOriginal({ doc: storedCurrent })\n ) {\n await persistLegacyCloudVersions({ id, collection, current: storedCurrent, req })\n }\n\n const result = await withCloudHookGuard({\n metadata,\n req,\n write,\n })\n\n await scheduleUnreferencedFileCleanup({\n candidates: await collectSavedFiles({ collection, doc: storedCurrent, req }),\n collection,\n req,\n })\n\n return result\n },\n })\n}\n\n/** Track a verified client-uploaded source, retaining it if another document still references it. */\nconst trackClientUploadOriginal = ({\n collection,\n data,\n req,\n trackStagedObject,\n}: {\n collection: SanitizedCollectionConfig\n data: JsonObject\n req: PayloadRequest\n trackStagedObject: (object: StagedObject) => void\n}): void => {\n const verifiedOriginal = req.context?._payloadVerifiedProviderOriginal as\n | { key: string }\n | undefined\n\n if (!verifiedOriginal) {\n return\n }\n\n const original = collectStoredFiles({ collection, doc: data, req, trustGenerated: true }).find(\n ({ key, roles }) =>\n key === verifiedOriginal.key && roles.some((role) => role.type === 'original'),\n )\n\n if (!original) {\n return\n }\n\n const object: StagedObject = {\n key: original.key,\n remove: () => collection.upload.fileOperations!.delete({ key: original.key, req }),\n }\n\n trackStagedObject({\n key: object.key,\n remove: () => removeUnreferencedStagedObjects({ collection, objects: [object], req }),\n })\n}\n\nconst persistLegacyCloudVersions = async ({\n id,\n collection,\n current,\n req,\n}: {\n collection: SanitizedCollectionConfig\n current: JsonObject\n id: number | string\n req: PayloadRequest\n}): Promise<void> => {\n let page = 1\n let hasVersions = false\n\n while (true) {\n const versions = await req.payload.db.findVersions<JsonObject>({\n collection: collection.slug,\n limit: 100,\n page,\n req,\n where: { parent: { equals: id } },\n })\n\n for (const row of versions.docs) {\n hasVersions = true\n if (hasStoredOriginal({ doc: row.version })) {\n continue\n }\n\n const version = await withLegacyCloudUploadFileData({\n collection,\n doc: row.version,\n req,\n })\n if (!hasStoredOriginal({ doc: version })) {\n continue\n }\n\n await req.payload.db.updateVersion({\n id: row.id,\n collection: collection.slug,\n req,\n versionData: {\n createdAt: row.createdAt,\n latest: row.latest,\n parent: row.parent,\n publishedLocale: row.publishedLocale,\n updatedAt: row.updatedAt,\n version,\n },\n })\n }\n\n if (versions.docs.length < 100) {\n break\n }\n page += 1\n }\n\n if (!hasVersions && hasStoredOriginal({ doc: current })) {\n await saveVersion({\n id,\n collection,\n docWithLocales: current,\n draft: false,\n operation: 'update',\n payload: req.payload,\n req,\n })\n }\n}\n\nconst hasStoredOriginal = ({ doc }: { doc: JsonObject }): boolean =>\n Boolean(\n doc.original &&\n typeof doc.original === 'object' &&\n typeof (doc.original as Record<string, unknown>).filename === 'string',\n )\n\nconst withCloudHookGuard = async <T>({\n metadata,\n req,\n write,\n}: {\n metadata: Record<string, unknown>\n req: PayloadRequest\n write: () => Promise<T>\n}): Promise<T> => {\n const restoreCloudHookState = captureCloudHookState({ req })\n req.context ??= {}\n req.context._payloadManagedCloudStorage = true\n req.context._payloadManagedCloudMetadata = metadata\n\n try {\n return await write()\n } finally {\n restoreCloudHookState()\n }\n}\n"],"names":["saveVersion","collectStoredFiles","collectSavedFiles","removeUnreferencedStagedObjects","scheduleUnreferencedFileCleanup","runFileCreationPlan","runFileOperationPlan","getStoredFileIdentity","withLegacyCloudUploadFileData","captureCloudHookState","req","previousState","map","key","hasProperty","Object","hasOwn","context","value","runCloudFileCreation","collection","data","files","write","operations","upload","fileOperations","skipCloudStorage","length","_payloadVerifiedProviderOriginal","metadata","cleanupStagedAfterWriteFailure","objects","stage","trackStagedObject","trackClientUploadOriginal","staged","assign","_payloadManagedCloudStorage","_payloadManagedCloudMetadata","runCloudFileUpdate","id","current","storedCurrent","doc","nextFiles","trustGenerated","currentFiles","nextIdentities","Set","hasStoredFileChange","size","some","file","has","versions","hasStoredOriginal","persistLegacyCloudVersions","result","withCloudHookGuard","candidates","verifiedOriginal","original","find","roles","role","type","object","remove","delete","page","hasVersions","payload","db","findVersions","slug","limit","where","parent","equals","row","docs","version","updateVersion","versionData","createdAt","latest","publishedLocale","updatedAt","docWithLocales","draft","operation","Boolean","filename","restoreCloudHookState"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/uploads/fileVersioning/resolveHistoricalFile.ts"],"sourcesContent":["import type { Collection, TypeWithID } from '../../collections/config/types.js'\nimport type { JsonObject, PayloadRequest } from '../../types/index.js'\n\nimport { Forbidden } from '../../errors/Forbidden.js'\nimport { NotFound } from '../../errors/NotFound.js'\nimport { checkFileAccess } from '../checkFileAccess.js'\nimport { collectStoredFiles, withLegacyCloudUploadFileData } from './storedFiles.js'\n\ntype StoredVersion = {\n id: number | string\n parent: number | string\n version: JsonObject\n}\n\n/** Finds an exact saved object reference, including sizes removed from the current config. */\nexport const resolveHistoricalFile = async ({\n collection,\n filename,\n prefix,\n req,\n versionID,\n}: {\n collection: Collection\n filename: string\n prefix?: string\n req: PayloadRequest\n versionID: string\n}): Promise<TypeWithID> => {\n const { docs } = await req.payload.db.findVersions<JsonObject>({\n collection: collection.config.slug,\n limit: 1,\n req,\n where: { id: { equals: versionID } },\n })\n const matched = docs[0]\n\n // Check both policies before exposing a missing version or a filename mismatch.\n await checkFileAccess({ collection, documentID: matched?.parent, filename, req })\n const authorized = await req.payload.findVersionByID({\n id: versionID,\n collection: collection.config.slug,\n depth: 0,\n overrideAccess: false,\n req,\n showHiddenFields: true,\n })\n\n if (!authorized) {\n throw new Forbidden(req.t)\n }\n\n if (!matched) {\n throw new NotFound(req.t)\n }\n\n const historical = await resolveVersionFile({ collection, filename, prefix, req, row: matched })\n\n if (!historical) {\n throw new NotFound(req.t)\n }\n\n return historical\n}\n\nconst resolveVersionFile = async ({\n collection,\n filename,\n prefix,\n req,\n row,\n}: {\n collection: Collection\n filename: string\n prefix?: string\n req: PayloadRequest\n row: StoredVersion\n}): Promise<TypeWithID | undefined> => {\n const saved = await withLegacyCloudUploadFileData({\n collection: collection.config,\n doc: row.version,\n req,\n })\n const hasFile = collectStoredFiles({ collection: collection.config, doc: saved, req }).some(\n (file) =>\n file.roles.some((role) => {\n const representation =\n role.type === 'size'\n ? (saved.variants as Record<string, JsonObject> | undefined)?.[role.sizeKey]\n : role.type === 'original'\n ? (saved.original as JsonObject | undefined)\n : saved\n return (\n representation?.filename === filename && (!prefix || representation.prefix === prefix)\n )\n }),\n )\n\n if (!hasFile) {\n return\n }\n\n return { ...saved, id: row.parent } as TypeWithID\n}\n"],"names":["Forbidden","NotFound","checkFileAccess","collectStoredFiles","withLegacyCloudUploadFileData","resolveHistoricalFile","collection","filename","prefix","req","versionID","docs","payload","db","findVersions","config","slug","limit","where","id","equals","matched","documentID","parent","authorized","findVersionByID","depth","overrideAccess","showHiddenFields","t","historical","resolveVersionFile","row","saved","doc","version","hasFile","some","file","roles","role","representation","type","variants","sizeKey","original"],"mappings":"AAGA,SAASA,SAAS,QAAQ,4BAA2B;AACrD,SAASC,QAAQ,QAAQ,2BAA0B;AACnD,SAASC,eAAe,QAAQ,wBAAuB;AACvD,SAASC,kBAAkB,EAAEC,6BAA6B,QAAQ,mBAAkB;AAQpF,4FAA4F,GAC5F,OAAO,MAAMC,wBAAwB,OAAO,EAC1CC,UAAU,EACVC,QAAQ,EACRC,MAAM,EACNC,GAAG,EACHC,SAAS,EAOV;IACC,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAMF,IAAIG,OAAO,CAACC,EAAE,CAACC,YAAY,CAAa;QAC7DR,YAAYA,WAAWS,MAAM,CAACC,IAAI;QAClCC,OAAO;QACPR;QACAS,OAAO;YAAEC,IAAI;gBAAEC,QAAQV;YAAU;QAAE;IACrC;IACA,MAAMW,UAAUV,IAAI,CAAC,EAAE;IAEvB,gFAAgF;IAChF,MAAMT,gBAAgB;QAAEI;QAAYgB,YAAYD,SAASE;QAAQhB;QAAUE;IAAI;IAC/E,MAAMe,aAAa,MAAMf,IAAIG,OAAO,CAACa,eAAe,CAAC;QACnDN,IAAIT;QACJJ,YAAYA,WAAWS,MAAM,CAACC,IAAI;QAClCU,OAAO;QACPC,gBAAgB;QAChBlB;QACAmB,kBAAkB;IACpB;IAEA,IAAI,CAACJ,YAAY;QACf,MAAM,IAAIxB,UAAUS,IAAIoB,CAAC;IAC3B;IAEA,IAAI,CAACR,SAAS;QACZ,MAAM,IAAIpB,SAASQ,IAAIoB,CAAC;IAC1B;IAEA,MAAMC,aAAa,MAAMC,mBAAmB;QAAEzB;QAAYC;QAAUC;QAAQC;QAAKuB,KAAKX;IAAQ;IAE9F,IAAI,CAACS,YAAY;QACf,MAAM,IAAI7B,SAASQ,IAAIoB,CAAC;IAC1B;IAEA,OAAOC;AACT,EAAC;AAED,MAAMC,qBAAqB,OAAO,EAChCzB,UAAU,EACVC,QAAQ,EACRC,MAAM,EACNC,GAAG,EACHuB,GAAG,EAOJ;IACC,MAAMC,QAAQ,MAAM7B,8BAA8B;QAChDE,YAAYA,WAAWS,MAAM;QAC7BmB,KAAKF,IAAIG,OAAO;QAChB1B;IACF;IACA,MAAM2B,UAAUjC,mBAAmB;QAAEG,YAAYA,WAAWS,MAAM;QAAEmB,KAAKD;QAAOxB;IAAI,GAAG4B,IAAI,CACzF,CAACC,OACCA,KAAKC,KAAK,CAACF,IAAI,CAAC,CAACG;YACf,MAAMC,iBACJD,KAAKE,IAAI,KAAK,SACTT,MAAMU,QAAQ,EAA6C,CAACH,KAAKI,OAAO,CAAC,GAC1EJ,KAAKE,IAAI,KAAK,aACXT,MAAMY,QAAQ,GACfZ;YACR,OACEQ,gBAAgBlC,aAAaA,YAAa,CAAA,CAACC,UAAUiC,eAAejC,MAAM,KAAKA,MAAK;QAExF;IAGJ,IAAI,CAAC4B,SAAS;QACZ;IACF;IAEA,OAAO;QAAE,GAAGH,KAAK;QAAEd,IAAIa,IAAIT,MAAM;IAAC;AACpC"}
1
+ {"version":3,"sources":["../../../src/uploads/fileVersioning/resolveHistoricalFile.ts"],"sourcesContent":["import type { Collection, TypeWithID } from '../../collections/config/types.js'\nimport type { JsonObject, PayloadRequest } from '../../types/index.js'\n\nimport { Forbidden } from '../../errors/Forbidden.js'\nimport { NotFound } from '../../errors/NotFound.js'\nimport { checkFileAccess } from '../checkFileAccess.js'\nimport { collectStoredFiles, withLegacyCloudUploadFileData } from './storedFiles.js'\n\ntype StoredVersion = {\n id: number | string\n parent: number | string\n version: JsonObject\n}\n\n/** Finds an exact saved object reference, including sizes removed from the current config. */\nexport const resolveHistoricalFile = async ({\n collection,\n filename,\n prefix,\n req,\n versionID,\n}: {\n collection: Collection\n filename: string\n prefix?: string\n req: PayloadRequest\n versionID: string\n}): Promise<TypeWithID> => {\n const { docs } = await req.payload.db.findVersions<JsonObject>({\n collection: collection.config.slug,\n limit: 1,\n req,\n where: { id: { equals: versionID } },\n })\n const matched = docs[0]\n\n // Check both policies before exposing a missing version or a filename mismatch.\n await checkFileAccess({ collection, documentID: matched?.parent, filename, req })\n const authorized = await req.payload.findVersionByID({\n id: versionID,\n collection: collection.config.slug,\n depth: 0,\n overrideAccess: false,\n req,\n showHiddenFields: true,\n })\n\n if (!authorized) {\n throw new Forbidden(req.t)\n }\n\n if (!matched) {\n throw new NotFound(req.t)\n }\n\n const historical = await resolveVersionFile({ collection, filename, prefix, req, row: matched })\n\n if (!historical) {\n throw new NotFound(req.t)\n }\n\n return historical\n}\n\nconst resolveVersionFile = async ({\n collection,\n filename,\n prefix,\n req,\n row,\n}: {\n collection: Collection\n filename: string\n prefix?: string\n req: PayloadRequest\n row: StoredVersion\n}): Promise<TypeWithID | undefined> => {\n const saved = await withLegacyCloudUploadFileData({\n collection: collection.config,\n doc: row.version,\n req,\n })\n const hasFile = collectStoredFiles({ collection: collection.config, doc: saved, req }).some(\n (file) =>\n file.roles.some((role) => {\n const representation =\n role.type === 'size'\n ? (saved.variants as Record<string, JsonObject> | undefined)?.[role.sizeKey]\n : role.type === 'original'\n ? (saved.original as JsonObject | undefined)\n : saved\n return (\n representation?.filename === filename && (!prefix || representation.prefix === prefix)\n )\n }),\n )\n\n if (!hasFile) {\n return\n }\n\n return { ...saved, id: row.parent }\n}\n"],"names":["Forbidden","NotFound","checkFileAccess","collectStoredFiles","withLegacyCloudUploadFileData","resolveHistoricalFile","collection","filename","prefix","req","versionID","docs","payload","db","findVersions","config","slug","limit","where","id","equals","matched","documentID","parent","authorized","findVersionByID","depth","overrideAccess","showHiddenFields","t","historical","resolveVersionFile","row","saved","doc","version","hasFile","some","file","roles","role","representation","type","variants","sizeKey","original"],"mappings":"AAGA,SAASA,SAAS,QAAQ,4BAA2B;AACrD,SAASC,QAAQ,QAAQ,2BAA0B;AACnD,SAASC,eAAe,QAAQ,wBAAuB;AACvD,SAASC,kBAAkB,EAAEC,6BAA6B,QAAQ,mBAAkB;AAQpF,4FAA4F,GAC5F,OAAO,MAAMC,wBAAwB,OAAO,EAC1CC,UAAU,EACVC,QAAQ,EACRC,MAAM,EACNC,GAAG,EACHC,SAAS,EAOV;IACC,MAAM,EAAEC,IAAI,EAAE,GAAG,MAAMF,IAAIG,OAAO,CAACC,EAAE,CAACC,YAAY,CAAa;QAC7DR,YAAYA,WAAWS,MAAM,CAACC,IAAI;QAClCC,OAAO;QACPR;QACAS,OAAO;YAAEC,IAAI;gBAAEC,QAAQV;YAAU;QAAE;IACrC;IACA,MAAMW,UAAUV,IAAI,CAAC,EAAE;IAEvB,gFAAgF;IAChF,MAAMT,gBAAgB;QAAEI;QAAYgB,YAAYD,SAASE;QAAQhB;QAAUE;IAAI;IAC/E,MAAMe,aAAa,MAAMf,IAAIG,OAAO,CAACa,eAAe,CAAC;QACnDN,IAAIT;QACJJ,YAAYA,WAAWS,MAAM,CAACC,IAAI;QAClCU,OAAO;QACPC,gBAAgB;QAChBlB;QACAmB,kBAAkB;IACpB;IAEA,IAAI,CAACJ,YAAY;QACf,MAAM,IAAIxB,UAAUS,IAAIoB,CAAC;IAC3B;IAEA,IAAI,CAACR,SAAS;QACZ,MAAM,IAAIpB,SAASQ,IAAIoB,CAAC;IAC1B;IAEA,MAAMC,aAAa,MAAMC,mBAAmB;QAAEzB;QAAYC;QAAUC;QAAQC;QAAKuB,KAAKX;IAAQ;IAE9F,IAAI,CAACS,YAAY;QACf,MAAM,IAAI7B,SAASQ,IAAIoB,CAAC;IAC1B;IAEA,OAAOC;AACT,EAAC;AAED,MAAMC,qBAAqB,OAAO,EAChCzB,UAAU,EACVC,QAAQ,EACRC,MAAM,EACNC,GAAG,EACHuB,GAAG,EAOJ;IACC,MAAMC,QAAQ,MAAM7B,8BAA8B;QAChDE,YAAYA,WAAWS,MAAM;QAC7BmB,KAAKF,IAAIG,OAAO;QAChB1B;IACF;IACA,MAAM2B,UAAUjC,mBAAmB;QAAEG,YAAYA,WAAWS,MAAM;QAAEmB,KAAKD;QAAOxB;IAAI,GAAG4B,IAAI,CACzF,CAACC,OACCA,KAAKC,KAAK,CAACF,IAAI,CAAC,CAACG;YACf,MAAMC,iBACJD,KAAKE,IAAI,KAAK,SACTT,MAAMU,QAAQ,EAA6C,CAACH,KAAKI,OAAO,CAAC,GAC1EJ,KAAKE,IAAI,KAAK,aACXT,MAAMY,QAAQ,GACfZ;YACR,OACEQ,gBAAgBlC,aAAaA,YAAa,CAAA,CAACC,UAAUiC,eAAejC,MAAM,KAAKA,MAAK;QAExF;IAGJ,IAAI,CAAC4B,SAAS;QACZ;IACF;IAEA,OAAO;QAAE,GAAGH,KAAK;QAAEd,IAAIa,IAAIT,MAAM;IAAC;AACpC"}
@@ -1,4 +1,4 @@
1
- export function formatFilesize(bytes, decimals = 0) {
1
+ export function formatFilesize(bytes, decimals = 1) {
2
2
  if (bytes === 0) {
3
3
  return '0 bytes';
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/formatFilesize.ts"],"sourcesContent":["export function formatFilesize(bytes: number, decimals = 0): string {\n if (bytes === 0) {\n return '0 bytes'\n }\n\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = [' bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n return `${parseFloat((bytes / k ** i).toFixed(dm))}${sizes[i]}`\n}\n"],"names":["formatFilesize","bytes","decimals","k","dm","sizes","i","Math","floor","log","parseFloat","toFixed"],"mappings":"AAAA,OAAO,SAASA,eAAeC,KAAa,EAAEC,WAAW,CAAC;IACxD,IAAID,UAAU,GAAG;QACf,OAAO;IACT;IAEA,MAAME,IAAI;IACV,MAAMC,KAAKF,WAAW,IAAI,IAAIA;IAC9B,MAAMG,QAAQ;QAAC;QAAU;QAAM;QAAM;QAAM;QAAM;QAAM;QAAM;QAAM;KAAK;IAExE,MAAMC,IAAIC,KAAKC,KAAK,CAACD,KAAKE,GAAG,CAACR,SAASM,KAAKE,GAAG,CAACN;IAEhD,OAAO,GAAGO,WAAW,AAACT,CAAAA,QAAQE,KAAKG,CAAAA,EAAGK,OAAO,CAACP,OAAOC,KAAK,CAACC,EAAE,EAAE;AACjE"}
1
+ {"version":3,"sources":["../../src/uploads/formatFilesize.ts"],"sourcesContent":["export function formatFilesize(bytes: number, decimals = 1): string {\n if (bytes === 0) {\n return '0 bytes'\n }\n\n const k = 1024\n const dm = decimals < 0 ? 0 : decimals\n const sizes = [' bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n\n return `${parseFloat((bytes / k ** i).toFixed(dm))}${sizes[i]}`\n}\n"],"names":["formatFilesize","bytes","decimals","k","dm","sizes","i","Math","floor","log","parseFloat","toFixed"],"mappings":"AAAA,OAAO,SAASA,eAAeC,KAAa,EAAEC,WAAW,CAAC;IACxD,IAAID,UAAU,GAAG;QACf,OAAO;IACT;IAEA,MAAME,IAAI;IACV,MAAMC,KAAKF,WAAW,IAAI,IAAIA;IAC9B,MAAMG,QAAQ;QAAC;QAAU;QAAM;QAAM;QAAM;QAAM;QAAM;QAAM;QAAM;KAAK;IAExE,MAAMC,IAAIC,KAAKC,KAAK,CAACD,KAAKE,GAAG,CAACR,SAASM,KAAKE,GAAG,CAACN;IAEhD,OAAO,GAAGO,WAAW,AAACT,CAAAA,QAAQE,KAAKG,CAAAA,EAAGK,OAAO,CAACP,OAAOC,KAAK,CAACC,EAAE,EAAE;AACjE"}
@@ -49,10 +49,5 @@ export declare const resolveTempFileHandling: ({ disableLocalStorage, hasProcess
49
49
  * storage is disabled, and copies it straight to its destination when local storage is enabled.
50
50
  */
51
51
  export declare const generateFileData: <T>({ collection: { config: collectionConfig }, data, draft, externalUploadSource, isDuplicating, operation, originalDoc, overwriteExistingFiles, req, throwOnMissingFile, }: Args<T>) => Result<T>;
52
- /** Adds a stable branch suffix without exceeding the common filesystem filename byte limit. */
53
- export declare const getBranchUploadFilename: ({ branch, filename, }: {
54
- branch: string;
55
- filename: string;
56
- }) => string;
57
52
  export {};
58
53
  //# sourceMappingURL=generateFileData.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateFileData.d.ts","sourceRoot":"","sources":["../../src/uploads/generateFileData.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,gCAAgC,CAAA;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAY,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAEnE,OAAO,KAAK,EAAuB,UAAU,EAAe,MAAM,YAAY,CAAA;AA0B9E,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,WAAW,CAAC,EAAE,CAAC,CAAA;IACf,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB,CAAC,CAAA;AA6BF,MAAM,MAAM,gBAAgB,GACxB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAA;AAEzB;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,+DAIjC;IACD,mBAAmB,EAAE,OAAO,CAAA;IAC5B,kBAAkB,EAAE,OAAO,CAAA;IAC3B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;CACjC,KAAG,gBAQH,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAU,CAAC,4KAWrC,IAAI,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAmqBpB,CAAA;AAMD,+FAA+F;AAC/F,eAAO,MAAM,uBAAuB,0BAGjC;IACD,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,MA2CH,CAAA"}
1
+ {"version":3,"file":"generateFileData.d.ts","sourceRoot":"","sources":["../../src/uploads/generateFileData.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,gCAAgC,CAAA;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAY,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAEnE,OAAO,KAAK,EAAuB,UAAU,EAAe,MAAM,YAAY,CAAA;AAwB9E,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,WAAW,CAAC,EAAE,CAAC,CAAA;IACf,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,GAAG,EAAE,cAAc,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,KAAK,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB,CAAC,CAAA;AA6BF,MAAM,MAAM,gBAAgB,GACxB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAA;AAEzB;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,+DAIjC;IACD,mBAAmB,EAAE,OAAO,CAAA;IAC5B,kBAAkB,EAAE,OAAO,CAAA;IAC3B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;CACjC,KAAG,gBAQH,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAU,CAAC,4KAWrC,IAAI,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAooBpB,CAAA"}
@@ -1,9 +1,7 @@
1
1
  import { fileTypeFromBuffer } from 'file-type';
2
2
  import fs from 'fs/promises';
3
- import { createHash, randomUUID } from 'node:crypto';
3
+ import { randomUUID } from 'node:crypto';
4
4
  import { openAsBlob } from 'node:fs';
5
- import { resolveBranch } from '../branching/resolveBranch.js';
6
- import { MAIN_BRANCH } from '../branching/types.js';
7
5
  import { FileRetrievalError, FileUploadError, Forbidden, MissingFile } from '../errors/index.js';
8
6
  import { formatAdminURL } from '../utilities/formatAdminURL.js';
9
7
  import { isNumber } from '../utilities/isNumber.js';
@@ -273,7 +271,6 @@ const shouldReupload = (uploadEdits, fileData)=>{
273
271
  }
274
272
  const fileWasTransformed = Boolean(mainWebFile && mainWebFile !== originalWebFile);
275
273
  const hasReusableOriginalMain = Boolean(isResettingCrop && !fileWasTransformed && retainedOriginal);
276
- const hasReusableCurrentMain = Boolean(!hasReusableOriginalMain && !fileWasTransformed && retainedOriginal && currentFileData?.filename);
277
274
  if (hasReusableOriginalMain && !hasFocalPointChange && retainedOriginal) {
278
275
  return {
279
276
  data: {
@@ -335,16 +332,6 @@ const shouldReupload = (uploadEdits, fileData)=>{
335
332
  }
336
333
  }
337
334
  let fsSafeName = getSanitizedUploadFilename(outputName, ext);
338
- const branch = resolveBranch(req);
339
- const isIsolatedProviderUpload = Boolean(file.uploadReference && typeof file.uploadReference === 'object' && !Array.isArray(file.uploadReference) && '_objectKey' in file.uploadReference && typeof file.uploadReference._objectKey === 'string');
340
- const shouldIsolateBranchFile = branch !== MAIN_BRANCH && !isIsolatedProviderUpload;
341
- if (shouldIsolateBranchFile) {
342
- fsSafeName = getBranchUploadFilename({
343
- branch,
344
- filename: fsSafeName
345
- });
346
- overwriteExistingFiles = false;
347
- }
348
335
  const isDuplicatingAnOriginal = isDuplicating && file.name === originalDoc?.original?.filename;
349
336
  // A provider reference without a receipt names an object the client already stored; renaming
350
337
  // it would point the document at a key that was never uploaded.
@@ -356,8 +343,6 @@ const shouldReupload = (uploadEdits, fileData)=>{
356
343
  }
357
344
  if (hasReusableOriginalMain) {
358
345
  fsSafeName = retainedOriginal.filename;
359
- } else if (hasReusableCurrentMain) {
360
- fsSafeName = currentFileData.filename;
361
346
  } else if (!overwriteExistingFiles || !disableLocalStorage || shouldStageCloudFiles && retainedOriginal) {
362
347
  // Extract prefix if present (added by plugin-cloud-storage)
363
348
  const prefix = data?.prefix;
@@ -372,16 +357,6 @@ const shouldReupload = (uploadEdits, fileData)=>{
372
357
  fileData.filename = fsSafeName;
373
358
  if (hasReusableOriginalMain) {
374
359
  fileData.url = retainedOriginal.url;
375
- } else if (hasReusableCurrentMain) {
376
- fileData.filesize = currentFileData.filesize;
377
- fileData.height = currentFileData.height;
378
- fileData.mimeType = currentFileData.mimeType;
379
- fileData.url = currentFileData.url;
380
- fileData.width = currentFileData.width;
381
- req.file = {
382
- ...file,
383
- name: currentFileData.filename
384
- };
385
360
  }
386
361
  const hasGeneratedProviderRepresentations = Boolean(providerOriginal && (fileWasTransformed || sizeResults.some((result)=>Boolean(result.file))));
387
362
  const newObjectKey = hasManagedCloudStorage && (shouldStageCloudFiles || hasGeneratedProviderRepresentations) ? randomUUID() : undefined;
@@ -459,7 +434,7 @@ const shouldReupload = (uploadEdits, fileData)=>{
459
434
  size: mainBuffer.length
460
435
  };
461
436
  }
462
- } else if (!hasReusableOriginalMain && !hasReusableCurrentMain) {
437
+ } else if (!hasReusableOriginalMain) {
463
438
  // file.data is empty when useTempFiles is on, so the real content lives at
464
439
  // file.tempFilePath instead (see the function doc for why we avoid buffering it).
465
440
  const tempFileHandling = resolveTempFileHandling({
@@ -595,53 +570,6 @@ const shouldReupload = (uploadEdits, fileData)=>{
595
570
  files: filesToSave
596
571
  };
597
572
  };
598
- const maximumFilesystemFilenameByteLength = 255;
599
- // `getSafeFileName` can add a numeric suffix. Reserve `-` plus 11 digits for that step.
600
- const deduplicationSuffixByteReserve = 12;
601
- /** Adds a stable branch suffix without exceeding the common filesystem filename byte limit. */ export const getBranchUploadFilename = ({ branch, filename })=>{
602
- const maximumInitialFilenameByteLength = maximumFilesystemFilenameByteLength - deduplicationSuffixByteReserve;
603
- const ext = getFileExtension(filename);
604
- let extension = ext ? `.${ext}` : '';
605
- const name = extension ? filename.slice(0, -extension.length) : filename;
606
- const escapedBranch = branch.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
607
- const unscopedName = name.replace(new RegExp(`-${escapedBranch}(?:-\\d+)?$`), '');
608
- const branchHash = createHash('sha256').update(branch).digest('hex').slice(0, 12);
609
- const minimumBranchSuffix = `-${branchHash}`;
610
- const maximumExtensionByteLength = maximumInitialFilenameByteLength - Buffer.byteLength(minimumBranchSuffix) - 1;
611
- extension = truncateUtf8ByByteLength({
612
- maximumByteLength: maximumExtensionByteLength,
613
- value: extension
614
- });
615
- const maximumBranchSuffixByteLength = maximumInitialFilenameByteLength - Buffer.byteLength(extension) - 1;
616
- let branchSuffix = `-${branch}`;
617
- if (Buffer.byteLength(branchSuffix) > maximumBranchSuffixByteLength) {
618
- const maximumBranchPrefixByteLength = maximumBranchSuffixByteLength - Buffer.byteLength(minimumBranchSuffix) - 1;
619
- const branchPrefix = truncateUtf8ByByteLength({
620
- maximumByteLength: maximumBranchPrefixByteLength,
621
- value: branch
622
- });
623
- branchSuffix = branchPrefix ? `-${branchPrefix}${minimumBranchSuffix}` : minimumBranchSuffix;
624
- }
625
- const maximumNameByteLength = maximumInitialFilenameByteLength - Buffer.byteLength(branchSuffix) - Buffer.byteLength(extension);
626
- const truncatedName = truncateUtf8ByByteLength({
627
- maximumByteLength: maximumNameByteLength,
628
- value: unscopedName
629
- });
630
- return `${truncatedName}${branchSuffix}${extension}`;
631
- };
632
- const truncateUtf8ByByteLength = ({ maximumByteLength, value })=>{
633
- let byteLength = 0;
634
- let result = '';
635
- for (const character of value){
636
- const characterByteLength = Buffer.byteLength(character);
637
- if (byteLength + characterByteLength > maximumByteLength) {
638
- break;
639
- }
640
- byteLength += characterByteLength;
641
- result += character;
642
- }
643
- return result;
644
- };
645
573
  /**
646
574
  * Parse upload edits from req or incoming data
647
575
  */ function parseUploadEditsFromReqOrIncomingData(args) {