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/generateFileData.ts"],"sourcesContent":["import { fileTypeFromBuffer } from 'file-type'\nimport fs from 'fs/promises'\nimport { createHash, randomUUID } from 'node:crypto'\nimport { openAsBlob } from 'node:fs'\n\nimport type { Collection, TypeWithID } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { Document, PayloadRequest } from '../types/index.js'\nimport type { ExternalUploadSource } from './sanitizeUploadData.js'\nimport type { PreparedUploadTransformation } from './transformers/uploadTransformerBridge.js'\nimport type { FileData, FileSizes, FileToSave, UploadEdits } from './types.js'\n\nimport { resolveBranch } from '../branching/resolveBranch.js'\nimport { MAIN_BRANCH } from '../branching/types.js'\nimport { FileRetrievalError, FileUploadError, Forbidden, MissingFile } from '../errors/index.js'\nimport { formatAdminURL } from '../utilities/formatAdminURL.js'\nimport { isNumber } from '../utilities/isNumber.js'\nimport { canResizeImage } from './canResizeImage.js'\nimport { checkFileRestrictions } from './checkFileRestrictions.js'\nimport { downloadFileToBuffer } from './downloadFileToBuffer.js'\nimport { getOriginalFilename } from './fileVersioning/naming.js'\nimport { generateImageSizeFilename } from './generateImageSizeFilename.js'\nimport { getFileByPath } from './getFileByPath.js'\nimport { getFileExtension, getSanitizedUploadFilename } from './getFileTypeIdentity.js'\nimport { getImageSize } from './getImageSize.js'\nimport { getSafeFileName, incrementName } from './getSafeFilename.js'\nimport { hasCropOrResizeEdit } from './hasCropOrResizeEdit.js'\nimport { hasFullFileContents } from './hasFullFileContents.js'\nimport { isProcessableImage } from './isProcessableImage.js'\nimport { parseFilename } from './parseFilename.js'\nimport { planTransformerPipeline } from './transformers/planTransformerPipeline.js'\nimport { transformUploadFile } from './transformers/transformUploadFile.js'\nimport {\n getUploadTransformerInternal,\n setUploadFilePath,\n} from './transformers/uploadTransformerBridge.js'\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n draft?: boolean\n externalUploadSource?: ExternalUploadSource\n isDuplicating?: boolean\n operation: 'create' | 'update'\n originalDoc?: T\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n throwOnMissingFile?: boolean\n}\n\ntype Result<T> = Promise<{\n data: T\n files: FileToSave[]\n}>\n\nconst shouldReupload = (\n uploadEdits: undefined | UploadEdits,\n fileData: Record<string, unknown> | undefined,\n) => {\n if (!fileData || !uploadEdits) {\n return false\n }\n\n if (hasCropOrResizeEdit(uploadEdits)) {\n return true\n }\n\n // Since uploadEdits always has focalPoint, compare to the value in the data if it was changed\n if (uploadEdits.focalPoint) {\n const incomingFocalX = uploadEdits.focalPoint.x\n const incomingFocalY = uploadEdits.focalPoint.y\n\n const currentFocalX = 'focalX' in fileData && fileData.focalX\n const currentFocalY = 'focalY' in fileData && fileData.focalY\n\n const isEqual = incomingFocalX === currentFocalX && incomingFocalY === currentFocalY\n return !isEqual\n }\n\n return false\n}\n\nexport type TempFileHandling =\n | { sourcePath: string; type: 'copyFromTempFile' }\n | { type: 'skip' }\n | { type: 'useBuffer' }\n\n/**\n * Decides how to get a file's bytes onto disk when no transformer rewrote it (a transformed\n * file is already an in-memory buffer, so it always takes the `useBuffer` path). Copies straight\n * from the temp file when possible, rather than reading a potentially large temp file into memory\n * just to write it back out - see the `generateFileData` function doc for why.\n */\nexport const resolveTempFileHandling = ({\n disableLocalStorage,\n hasProcessedBuffer,\n tempFilePath,\n}: {\n disableLocalStorage: boolean\n hasProcessedBuffer: boolean\n tempFilePath: string | undefined\n}): TempFileHandling => {\n if (hasProcessedBuffer || !tempFilePath) {\n return { type: 'useBuffer' }\n }\n\n return disableLocalStorage\n ? { type: 'skip' }\n : { type: 'copyFromTempFile', sourcePath: tempFilePath }\n}\n\n/**\n * Builds the document's file metadata and the list of files to write to disk.\n *\n * A large client upload may arrive as a temp file instead of an in-memory buffer (see\n * getFileFromUploadInstructions.ts), and `file.data` can hold only a partial probe rather than\n * the full file. To avoid loading such files into memory unnecessarily, no transformer runs\n * unless the full bytes are available, this skips reading a temp file entirely when local\n * storage is disabled, and copies it straight to its destination when local storage is enabled.\n */\nexport const generateFileData = async <T>({\n collection: { config: collectionConfig },\n data,\n draft,\n externalUploadSource,\n isDuplicating,\n operation,\n originalDoc,\n overwriteExistingFiles,\n req,\n throwOnMissingFile,\n}: Args<T>): Result<T> => {\n if (!collectionConfig.upload) {\n return {\n data,\n files: [],\n }\n }\n\n const { serverURL } = req.payload.config\n\n let file = isDuplicating ? undefined : req.file\n\n const uploadEdits = parseUploadEditsFromReqOrIncomingData({\n data,\n isDuplicating,\n operation,\n // Only a duplication source informs edit parsing. Updates now also pass `originalDoc` so the\n // stored file can be reprocessed, and that must not change which edits are applied.\n originalDoc: isDuplicating ? originalDoc : undefined,\n req,\n })\n\n const {\n disableLocalStorage,\n focalPoint: focalPointEnabled = true,\n staticDir,\n } = collectionConfig.upload\n const hasManagedCloudStorage = Boolean(collectionConfig.upload.fileOperations)\n const uploadReference = file?.uploadReference\n const hasProviderDirectReference =\n uploadReference && typeof uploadReference === 'object' && !('uploadId' in uploadReference)\n const verifiedOriginal = req.context?._payloadVerifiedProviderOriginal as\n | {\n _objectKey?: string\n filename: string\n key: string\n prefix?: string\n signedReceipt: string\n }\n | undefined\n const providerOriginal =\n hasProviderDirectReference &&\n 'signedReceipt' in uploadReference &&\n uploadReference.signedReceipt === verifiedOriginal?.signedReceipt &&\n verifiedOriginal &&\n typeof collectionConfig.upload.adapter === 'string'\n ? {\n _objectKey: verifiedOriginal._objectKey,\n filename: verifiedOriginal.filename,\n key: verifiedOriginal.key,\n prefix: verifiedOriginal.prefix,\n }\n : undefined\n const shouldStageCloudFiles = hasManagedCloudStorage && !hasProviderDirectReference\n\n const staticPath = staticDir\n\n const incomingFileData: Document = isDuplicating ? originalDoc : data\n const currentFileData = (operation === 'update' ? originalDoc : incomingFileData) as\n | FileData\n | undefined\n const retainedOriginal =\n operation === 'update' &&\n !file &&\n !externalUploadSource &&\n typeof currentFileData?.original?.filename === 'string' &&\n typeof currentFileData.original.url === 'string'\n ? currentFileData.original\n : undefined\n const fileSourceData = externalUploadSource ?? retainedOriginal ?? currentFileData\n let isLocalFile = false\n\n if (\n !file &&\n fileSourceData &&\n (externalUploadSource ||\n isDuplicating ||\n shouldReupload(uploadEdits, incomingFileData as Record<string, unknown>))\n ) {\n const { filename, url } = fileSourceData\n if (filename && (filename.includes('../') || filename.includes('..\\\\'))) {\n throw new Forbidden(req.t)\n }\n\n if ((serverURL && url?.startsWith(serverURL)) || url?.startsWith('/')) {\n isLocalFile = true\n }\n\n try {\n if (!externalUploadSource && !disableLocalStorage && isLocalFile) {\n // File is stored locally\n const filePath = `${staticPath}/${filename}`\n const response = await getFileByPath(filePath)\n file = response\n overwriteExistingFiles = true\n } else if (filename && retainedOriginal && hasManagedCloudStorage) {\n const { retrieveFileResponse } = await import('./endpoints/getFile.js')\n const response = await retrieveFileResponse({\n collection: { config: collectionConfig },\n doc: originalDoc as TypeWithID,\n filename,\n operation: 'transform',\n req,\n })\n if (!response.ok) {\n throw new Error(`Unable to read retained original ${filename}`)\n }\n const buffer = Buffer.from(await response.arrayBuffer())\n file = {\n name: filename,\n data: buffer,\n mimetype: retainedOriginal.mimeType,\n size: buffer.length,\n }\n overwriteExistingFiles = true\n } else if (filename && url) {\n // File is remote\n file = await downloadFileToBuffer({\n data: fileSourceData,\n req,\n uploadConfig: collectionConfig.upload,\n })\n overwriteExistingFiles = !externalUploadSource\n }\n } catch (err: unknown) {\n throw new FileRetrievalError(req.t, err instanceof Error ? err.message : undefined)\n }\n\n if (file && retainedOriginal && currentFileData?.filename) {\n file = { ...file, name: currentFileData.filename }\n }\n }\n\n if (isDuplicating) {\n overwriteExistingFiles = false\n }\n\n if (!file) {\n if (throwOnMissingFile) {\n throw new MissingFile(req.t)\n }\n\n return {\n data: incomingFileData!,\n files: [],\n }\n }\n\n const detectedFileType = await checkFileRestrictions({\n collection: collectionConfig,\n file,\n req,\n })\n\n const shouldUseDetectedFileType =\n detectedFileType &&\n (isProcessableImage(file.mimetype) || isProcessableImage(detectedFileType.mime))\n\n if (shouldUseDetectedFileType && detectedFileType.mime !== file.mimetype) {\n file = { ...file, mimetype: detectedFileType.mime }\n }\n\n if (!disableLocalStorage) {\n await fs.mkdir(staticPath!, { recursive: true })\n }\n\n let newData = incomingFileData as T\n const filesToSave: FileToSave[] = []\n const fileData: Partial<FileData> = {}\n const crop = uploadEdits?.crop\n const isResettingCrop =\n retainedOriginal &&\n crop?.unit === '%' &&\n Number(crop.width) === 100 &&\n Number(crop.height) === 100 &&\n Number(crop.x) === 0 &&\n Number(crop.y) === 0 &&\n (uploadEdits.widthInPixels === undefined ||\n Number(uploadEdits.widthInPixels) === retainedOriginal.width) &&\n (uploadEdits.heightInPixels === undefined ||\n Number(uploadEdits.heightInPixels) === retainedOriginal.height)\n const hasFocalPointChange =\n uploadEdits?.focalPoint &&\n (Number(uploadEdits.focalPoint.x) !== (currentFileData?.focalX ?? 50) ||\n Number(uploadEdits.focalPoint.y) !== (currentFileData?.focalY ?? 50))\n const editsForTransformer = isResettingCrop\n ? { ...uploadEdits, crop: undefined, heightInPixels: undefined, widthInPixels: undefined }\n : uploadEdits\n\n try {\n const pipeline = await planTransformerPipeline({\n args: {\n collectionSlug: collectionConfig.slug,\n mimeType: file.mimetype,\n operation: 'upload',\n req,\n },\n capability: 'transformFile',\n transformers: req.payload.config.upload?.transformers ?? [],\n })\n\n // A large client upload can arrive as a bounded probe alongside a temp file. Transformers\n // need the whole file, so leave such an upload untouched rather than buffering it.\n const canRunTransformers = pipeline.length > 0 && hasFullFileContents(file)\n\n const bridgeTransformers = canRunTransformers\n ? pipeline.filter((transformer) =>\n Boolean(getUploadTransformerInternal(transformer)?.prepareUpload),\n )\n : []\n\n const bridgeTransformer =\n bridgeTransformers.find((transformer) =>\n getUploadTransformerInternal(transformer)!.handlesCollection?.({\n collectionSlug: collectionConfig.slug,\n }),\n ) ?? bridgeTransformers[0]\n\n // The chosen bridge's task options are private to it, so other bridges must not see them.\n const bridgeTaskPipeline = pipeline.filter(\n (transformer) =>\n transformer === bridgeTransformer || !bridgeTransformers.includes(transformer),\n )\n\n let originalWebFile: File | undefined\n let mainWebFile: File | undefined\n let hasDimensionsFromBridge = false\n let sizeResults: PreparedUploadTransformation[] = []\n\n if (canRunTransformers) {\n const fileContents = file.tempFilePath ? await openAsBlob(file.tempFilePath) : file.data\n originalWebFile = new File([fileContents], file.name, { type: file.mimetype })\n if (file.tempFilePath) {\n setUploadFilePath(originalWebFile, file.tempFilePath)\n }\n\n if (bridgeTransformer) {\n const bridge = getUploadTransformerInternal(bridgeTransformer)!\n\n const results = await bridge.prepareUpload!({\n collectionSlug: collectionConfig.slug,\n file: originalWebFile,\n req,\n transform: (task) =>\n transformUploadFile({\n collectionSlug: collectionConfig.slug,\n file: task.file ?? originalWebFile!,\n options: task.options,\n pipeline: bridgeTaskPipeline,\n req,\n }),\n uploadEdits: editsForTransformer,\n })\n\n const mainResult = results.find((result) => result.fieldPath === 'filename')\n\n mainWebFile = mainResult?.file ?? originalWebFile\n fileData.width = mainResult?.width\n fileData.height = mainResult?.height\n hasDimensionsFromBridge = true\n sizeResults = results.filter((result) => result.fieldPath !== 'filename')\n } else {\n mainWebFile = await transformUploadFile({\n collectionSlug: collectionConfig.slug,\n file: originalWebFile,\n options: undefined,\n pipeline,\n req,\n })\n }\n }\n\n // Saved for any resizable image, not just one a transformer processed, so it's kept with no\n // transformer registered and on a header-only client upload.\n if (\n focalPointEnabled &&\n uploadEdits?.focalPoint &&\n (hasDimensionsFromBridge || canResizeImage(file.mimetype))\n ) {\n fileData.focalX = isNumber(uploadEdits.focalPoint.x)\n ? Math.round(uploadEdits.focalPoint.x)\n : 50\n fileData.focalY = isNumber(uploadEdits.focalPoint.y)\n ? Math.round(uploadEdits.focalPoint.y)\n : 50\n }\n\n const fileWasTransformed = Boolean(mainWebFile && mainWebFile !== originalWebFile)\n const hasReusableOriginalMain = Boolean(\n isResettingCrop && !fileWasTransformed && retainedOriginal,\n )\n const hasReusableCurrentMain = Boolean(\n !hasReusableOriginalMain &&\n !fileWasTransformed &&\n retainedOriginal &&\n currentFileData?.filename,\n )\n if (hasReusableOriginalMain && !hasFocalPointChange && retainedOriginal) {\n return {\n data: {\n ...incomingFileData,\n _objectKey: retainedOriginal._objectKey,\n filename: retainedOriginal.filename,\n filesize: retainedOriginal.filesize,\n height: retainedOriginal.height,\n mimeType: retainedOriginal.mimeType,\n original: retainedOriginal,\n prefix: retainedOriginal.prefix,\n url: retainedOriginal.url,\n variants: currentFileData?.variants,\n width: retainedOriginal.width,\n ...(draft ? { _status: 'draft' } : {}),\n } as T,\n files: [],\n }\n }\n const mainBuffer = fileWasTransformed\n ? Buffer.from(await mainWebFile!.arrayBuffer())\n : undefined\n\n // A transformed file is named after what the transformer returned, not the upload.\n const outputName = hasReusableOriginalMain\n ? retainedOriginal!.filename\n : (fileWasTransformed && mainWebFile!.name) || file.name\n\n let mimeType: string\n let ext: string | undefined\n\n if (mainBuffer) {\n // Detected bytes win for binary formats (Sharp keeps the input's name and type on a\n // converted output), but text-like output such as CSV has no signature to detect, so\n // fall back to the type and extension the transformer declared on the returned File.\n const typeResult = await fileTypeFromBuffer(mainBuffer)\n ext =\n typeResult?.ext ?? (getFileExtension(getSanitizedUploadFilename(outputName)) || undefined)\n mimeType = typeResult?.mime ?? (mainWebFile!.type || file.mimetype)\n } else {\n mimeType = file.mimetype\n ext = getFileExtension(getSanitizedUploadFilename(file.name))\n }\n\n // Adjust SVG mime type. fromBuffer modifies it.\n if (mimeType === 'application/xml' && ext === 'svg') {\n mimeType = 'image/svg+xml'\n }\n fileData.mimeType = mimeType\n fileData.filesize = mainBuffer ? mainBuffer.length : file.size\n\n // Only probe formats that could carry dimensions - probing reads the file, and a large\n // non-image upload may only exist as a temp file we deliberately never buffer.\n if (!hasDimensionsFromBridge && isProcessableImage(mimeType)) {\n try {\n const probed = await getImageSize({\n file: mainBuffer ? { ...file, data: mainBuffer, tempFilePath: undefined } : file,\n })\n fileData.width = probed.width\n fileData.height = probed.height\n } catch {\n // Not a recognized image format — leave width/height unset.\n }\n }\n\n let fsSafeName = getSanitizedUploadFilename(outputName, ext)\n const branch = resolveBranch(req)\n const isIsolatedProviderUpload = Boolean(\n file.uploadReference &&\n typeof file.uploadReference === 'object' &&\n !Array.isArray(file.uploadReference) &&\n '_objectKey' in file.uploadReference &&\n typeof file.uploadReference._objectKey === 'string',\n )\n const shouldIsolateBranchFile = branch !== MAIN_BRANCH && !isIsolatedProviderUpload\n\n if (shouldIsolateBranchFile) {\n fsSafeName = getBranchUploadFilename({ branch, filename: fsSafeName })\n overwriteExistingFiles = false\n }\n const isDuplicatingAnOriginal =\n isDuplicating && file.name === (originalDoc as FileData | undefined)?.original?.filename\n\n // A provider reference without a receipt names an object the client already stored; renaming\n // it would point the document at a key that was never uploaded.\n const isUnverifiedProviderReference = Boolean(hasProviderDirectReference && !providerOriginal)\n\n if (\n !fileWasTransformed &&\n !retainedOriginal &&\n !providerOriginal &&\n !isDuplicatingAnOriginal &&\n !isUnverifiedProviderReference\n ) {\n fsSafeName = getOriginalFilename({ filename: fsSafeName })\n }\n\n if (hasReusableOriginalMain) {\n fsSafeName = retainedOriginal!.filename\n } else if (hasReusableCurrentMain) {\n fsSafeName = currentFileData!.filename\n } else if (\n !overwriteExistingFiles ||\n !disableLocalStorage ||\n (shouldStageCloudFiles && retainedOriginal)\n ) {\n // Extract prefix if present (added by plugin-cloud-storage)\n const prefix = (data as Record<string, unknown>)?.prefix as string | undefined\n fsSafeName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: fsSafeName,\n prefix,\n req,\n staticPath: staticPath!,\n })\n }\n\n fileData.filename = fsSafeName\n if (hasReusableOriginalMain) {\n fileData.url = retainedOriginal!.url\n } else if (hasReusableCurrentMain) {\n fileData.filesize = currentFileData!.filesize\n fileData.height = currentFileData!.height\n fileData.mimeType = currentFileData!.mimeType\n fileData.url = currentFileData!.url\n fileData.width = currentFileData!.width\n req.file = { ...file, name: currentFileData!.filename }\n }\n\n const hasGeneratedProviderRepresentations = Boolean(\n providerOriginal &&\n (fileWasTransformed || sizeResults.some((result) => Boolean(result.file))),\n )\n const newObjectKey =\n hasManagedCloudStorage && (shouldStageCloudFiles || hasGeneratedProviderRepresentations)\n ? randomUUID()\n : undefined\n if (newObjectKey) {\n fileData._objectKey = newObjectKey\n }\n if (providerOriginal && !fileWasTransformed) {\n fileData._objectKey = providerOriginal._objectKey\n fileData.prefix = providerOriginal.prefix\n }\n if (hasReusableOriginalMain && retainedOriginal) {\n fileData._objectKey = retainedOriginal._objectKey\n fileData.prefix = retainedOriginal.prefix\n }\n\n if (!disableLocalStorage || shouldStageCloudFiles || providerOriginal) {\n const originalFilename =\n retainedOriginal?.filename ??\n providerOriginal?.filename ??\n (fileWasTransformed\n ? await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: getOriginalFilename({\n filename: getSanitizedUploadFilename(file.name),\n }),\n req,\n staticPath: staticPath!,\n })\n : fsSafeName)\n const original =\n retainedOriginal ??\n ({\n _objectKey: providerOriginal ? providerOriginal._objectKey : newObjectKey,\n filename: originalFilename,\n filesize: file.size,\n mimeType: file.mimetype,\n prefix: providerOriginal?.prefix ?? currentFileData?.prefix,\n url: formatAdminURL({\n apiRoute: req.payload.config.routes.api,\n path: `/${collectionConfig.slug}/file/${encodeURIComponent(originalFilename)}`,\n relative: true,\n serverURL: req.payload.config.serverURL,\n }),\n } as NonNullable<FileData['original']>)\n\n if (!retainedOriginal && isProcessableImage(file.mimetype)) {\n try {\n const dimensions = await getImageSize({ file })\n original.width = dimensions.width\n original.height = dimensions.height\n } catch {\n // Files with an image MIME type may not have readable dimensions.\n }\n }\n\n fileData.original = original\n\n if (providerOriginal) {\n if (!fileWasTransformed) {\n fileData.filename = originalFilename\n }\n }\n\n if (fileWasTransformed && !retainedOriginal && !providerOriginal) {\n filesToSave.push({\n buffer: Buffer.from(await originalWebFile!.arrayBuffer()),\n path: `${staticPath}/${originalFilename}`,\n })\n }\n }\n\n if (mainBuffer) {\n // The stored bytes are no longer the ones the client uploaded, so the client's upload\n // reference must not be reused for them.\n delete file.uploadReference\n\n filesToSave.push({\n buffer: mainBuffer,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n if (file.tempFilePath) {\n await fs.writeFile(file.tempFilePath, mainBuffer)\n } else {\n req.file = {\n ...file,\n data: mainBuffer,\n size: mainBuffer.length,\n }\n }\n } else if (!hasReusableOriginalMain && !hasReusableCurrentMain) {\n // file.data is empty when useTempFiles is on, so the real content lives at\n // file.tempFilePath instead (see the function doc for why we avoid buffering it).\n const tempFileHandling = resolveTempFileHandling({\n disableLocalStorage: Boolean(disableLocalStorage) && !shouldStageCloudFiles,\n hasProcessedBuffer: false,\n tempFilePath: file.tempFilePath,\n })\n\n if (tempFileHandling.type === 'copyFromTempFile') {\n filesToSave.push({\n path: `${staticPath}/${fsSafeName}`,\n sourcePath: tempFileHandling.sourcePath,\n })\n } else if (tempFileHandling.type === 'useBuffer') {\n const bufferToSave = file.tempFilePath ? await fs.readFile(file.tempFilePath) : file.data\n\n // A 'header'/'none' content requirement (see getFileContentRequirement.ts) means\n // file.data is only a partial probe, not the real content - never save it as-is.\n const fileDataIsPartialView = !file.tempFilePath && bufferToSave.length !== file.size\n\n if (!fileDataIsPartialView) {\n filesToSave.push({\n buffer: bufferToSave,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n if (bufferToSave.length > 0) {\n if (file.tempFilePath) {\n await fs.writeFile(file.tempFilePath, bufferToSave)\n } else {\n // Keep req.file in sync, since downstream hooks/plugins may read it.\n req.file = {\n ...file,\n data: bufferToSave,\n size: bufferToSave.length,\n }\n }\n }\n }\n }\n }\n\n if (sizeResults.length > 0) {\n req.payloadUploadSizes = {}\n const sizes: FileSizes = {}\n const { name: baseName, ext: baseExt } = parseFilename(fsSafeName)\n const plannedNames = new Set([fileData.original?.filename, fsSafeName])\n const plannedSizeBuffers = new Map<string, Buffer>()\n\n for (const result of sizeResults) {\n const sizeName = result.fieldPath.slice('variants.'.length)\n\n if (!result.file) {\n sizes[sizeName] = {\n filename: null,\n filesize: null,\n height: null,\n mimeType: null,\n url: null,\n width: null,\n }\n continue\n }\n\n const sizeBuffer = Buffer.from(await result.file.arrayBuffer())\n const sizeTypeResult = await fileTypeFromBuffer(sizeBuffer)\n const sizeExt = sizeTypeResult?.ext || baseExt\n const sizeMimeType = sizeTypeResult?.mime || result.mimeType || fileData.mimeType\n\n req.payloadUploadSizes[sizeName] = sizeBuffer\n\n const imageSizeConfig = collectionConfig.upload.variants?.find(\n (imageSize) => imageSize.name === sizeName,\n )\n\n const imageNameWithDimensions = imageSizeConfig?.generateImageName\n ? imageSizeConfig.generateImageName({\n extension: sizeExt,\n height: result.height!,\n originalName: baseName,\n sizeName,\n width: result.width!,\n })\n : generateImageSizeFilename({\n extension: sizeExt,\n height: result.height!,\n outputImageName: baseName,\n width: result.width!,\n })\n\n let imageName = imageNameWithDimensions\n\n if (!disableLocalStorage || shouldStageCloudFiles) {\n const prefix = (data as Record<string, unknown>)?.prefix as string | undefined\n\n while (true) {\n imageName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: imageName,\n prefix,\n req,\n staticPath: disableLocalStorage ? undefined : staticPath!,\n })\n if (plannedSizeBuffers.get(imageName)?.equals(sizeBuffer)) {\n break\n }\n if (!plannedNames.has(imageName)) {\n break\n }\n imageName = incrementName(imageName)\n }\n plannedNames.add(imageName)\n }\n\n const imagePath = `${staticPath}/${imageName}`\n\n sizes[sizeName] = {\n _objectKey: newObjectKey,\n filename: imageName,\n filesize: sizeBuffer.length,\n height: result.height!,\n mimeType: sizeMimeType,\n prefix: providerOriginal?.prefix ?? currentFileData?.prefix,\n url: null,\n width: result.width!,\n }\n\n if (!plannedSizeBuffers.has(imageName)) {\n plannedSizeBuffers.set(imageName, sizeBuffer)\n filesToSave.push({\n buffer: sizeBuffer,\n path: imagePath,\n })\n }\n }\n\n fileData.variants = sizes\n }\n } catch (err) {\n req.payload.logger.error(err)\n throw new FileUploadError(req.t)\n }\n\n newData = {\n ...newData,\n ...fileData,\n ...(draft ? { _status: 'draft' } : {}),\n }\n\n return {\n data: newData,\n files: filesToSave,\n }\n}\n\nconst maximumFilesystemFilenameByteLength = 255\n// `getSafeFileName` can add a numeric suffix. Reserve `-` plus 11 digits for that step.\nconst deduplicationSuffixByteReserve = 12\n\n/** Adds a stable branch suffix without exceeding the common filesystem filename byte limit. */\nexport const getBranchUploadFilename = ({\n branch,\n filename,\n}: {\n branch: string\n filename: string\n}): string => {\n const maximumInitialFilenameByteLength =\n maximumFilesystemFilenameByteLength - deduplicationSuffixByteReserve\n const ext = getFileExtension(filename)\n let extension = ext ? `.${ext}` : ''\n const name = extension ? filename.slice(0, -extension.length) : filename\n const escapedBranch = branch.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n const unscopedName = name.replace(new RegExp(`-${escapedBranch}(?:-\\\\d+)?$`), '')\n const branchHash = createHash('sha256').update(branch).digest('hex').slice(0, 12)\n const minimumBranchSuffix = `-${branchHash}`\n const maximumExtensionByteLength =\n maximumInitialFilenameByteLength - Buffer.byteLength(minimumBranchSuffix) - 1\n\n extension = truncateUtf8ByByteLength({\n maximumByteLength: maximumExtensionByteLength,\n value: extension,\n })\n\n const maximumBranchSuffixByteLength =\n maximumInitialFilenameByteLength - Buffer.byteLength(extension) - 1\n let branchSuffix = `-${branch}`\n\n if (Buffer.byteLength(branchSuffix) > maximumBranchSuffixByteLength) {\n const maximumBranchPrefixByteLength =\n maximumBranchSuffixByteLength - Buffer.byteLength(minimumBranchSuffix) - 1\n const branchPrefix = truncateUtf8ByByteLength({\n maximumByteLength: maximumBranchPrefixByteLength,\n value: branch,\n })\n\n branchSuffix = branchPrefix ? `-${branchPrefix}${minimumBranchSuffix}` : minimumBranchSuffix\n }\n\n const maximumNameByteLength =\n maximumInitialFilenameByteLength -\n Buffer.byteLength(branchSuffix) -\n Buffer.byteLength(extension)\n const truncatedName = truncateUtf8ByByteLength({\n maximumByteLength: maximumNameByteLength,\n value: unscopedName,\n })\n\n return `${truncatedName}${branchSuffix}${extension}`\n}\n\nconst truncateUtf8ByByteLength = ({\n maximumByteLength,\n value,\n}: {\n maximumByteLength: number\n value: string\n}): string => {\n let byteLength = 0\n let result = ''\n\n for (const character of value) {\n const characterByteLength = Buffer.byteLength(character)\n\n if (byteLength + characterByteLength > maximumByteLength) {\n break\n }\n\n byteLength += characterByteLength\n result += character\n }\n\n return result\n}\n\n/**\n * Parse upload edits from req or incoming data\n */\nfunction parseUploadEditsFromReqOrIncomingData(args: {\n data: unknown\n isDuplicating?: boolean\n operation: 'create' | 'update'\n originalDoc: unknown\n req: PayloadRequest\n}): UploadEdits {\n const { data, isDuplicating, operation, originalDoc, req } = args\n\n // Get intended focal point change from query string or incoming data\n const uploadEdits =\n req.query?.uploadEdits && typeof req.query.uploadEdits === 'object'\n ? (req.query.uploadEdits as UploadEdits)\n : {}\n\n if (uploadEdits.focalPoint) {\n return uploadEdits\n }\n\n const incomingData = data as FileData\n const origDoc = originalDoc as FileData\n\n if (origDoc && 'focalX' in origDoc && 'focalY' in origDoc) {\n // Admin always resends the current focal point, so treat an unchanged value as no edit.\n if (incomingData?.focalX === origDoc.focalX && incomingData?.focalY === origDoc.focalY) {\n return undefined!\n }\n\n if (isDuplicating) {\n uploadEdits.focalPoint = {\n x: incomingData?.focalX || origDoc.focalX!,\n y: incomingData?.focalY || origDoc.focalY!,\n }\n return uploadEdits\n }\n }\n\n if (incomingData?.focalX && incomingData?.focalY) {\n uploadEdits.focalPoint = {\n x: incomingData.focalX,\n y: incomingData.focalY,\n }\n return uploadEdits\n }\n\n // If no focal point is set, default to center\n if (operation === 'create') {\n uploadEdits.focalPoint = {\n x: 50,\n y: 50,\n }\n }\n\n return uploadEdits\n}\n"],"names":["fileTypeFromBuffer","fs","createHash","randomUUID","openAsBlob","resolveBranch","MAIN_BRANCH","FileRetrievalError","FileUploadError","Forbidden","MissingFile","formatAdminURL","isNumber","canResizeImage","checkFileRestrictions","downloadFileToBuffer","getOriginalFilename","generateImageSizeFilename","getFileByPath","getFileExtension","getSanitizedUploadFilename","getImageSize","getSafeFileName","incrementName","hasCropOrResizeEdit","hasFullFileContents","isProcessableImage","parseFilename","planTransformerPipeline","transformUploadFile","getUploadTransformerInternal","setUploadFilePath","shouldReupload","uploadEdits","fileData","focalPoint","incomingFocalX","x","incomingFocalY","y","currentFocalX","focalX","currentFocalY","focalY","isEqual","resolveTempFileHandling","disableLocalStorage","hasProcessedBuffer","tempFilePath","type","sourcePath","generateFileData","collection","config","collectionConfig","data","draft","externalUploadSource","isDuplicating","operation","originalDoc","overwriteExistingFiles","req","throwOnMissingFile","upload","files","serverURL","payload","file","undefined","parseUploadEditsFromReqOrIncomingData","focalPointEnabled","staticDir","hasManagedCloudStorage","Boolean","fileOperations","uploadReference","hasProviderDirectReference","verifiedOriginal","context","_payloadVerifiedProviderOriginal","providerOriginal","signedReceipt","adapter","_objectKey","filename","key","prefix","shouldStageCloudFiles","staticPath","incomingFileData","currentFileData","retainedOriginal","original","url","fileSourceData","isLocalFile","includes","t","startsWith","filePath","response","retrieveFileResponse","doc","ok","Error","buffer","Buffer","from","arrayBuffer","name","mimetype","mimeType","size","length","uploadConfig","err","message","detectedFileType","shouldUseDetectedFileType","mime","mkdir","recursive","newData","filesToSave","crop","isResettingCrop","unit","Number","width","height","widthInPixels","heightInPixels","hasFocalPointChange","editsForTransformer","pipeline","args","collectionSlug","slug","capability","transformers","canRunTransformers","bridgeTransformers","filter","transformer","prepareUpload","bridgeTransformer","find","handlesCollection","bridgeTaskPipeline","originalWebFile","mainWebFile","hasDimensionsFromBridge","sizeResults","fileContents","File","bridge","results","transform","task","options","mainResult","result","fieldPath","Math","round","fileWasTransformed","hasReusableOriginalMain","hasReusableCurrentMain","filesize","variants","_status","mainBuffer","outputName","ext","typeResult","probed","fsSafeName","branch","isIsolatedProviderUpload","Array","isArray","shouldIsolateBranchFile","getBranchUploadFilename","isDuplicatingAnOriginal","isUnverifiedProviderReference","desiredFilename","hasGeneratedProviderRepresentations","some","newObjectKey","originalFilename","apiRoute","routes","api","path","encodeURIComponent","relative","dimensions","push","writeFile","tempFileHandling","bufferToSave","readFile","fileDataIsPartialView","payloadUploadSizes","sizes","baseName","baseExt","plannedNames","Set","plannedSizeBuffers","Map","sizeName","slice","sizeBuffer","sizeTypeResult","sizeExt","sizeMimeType","imageSizeConfig","imageSize","imageNameWithDimensions","generateImageName","extension","originalName","outputImageName","imageName","get","equals","has","add","imagePath","set","logger","error","maximumFilesystemFilenameByteLength","deduplicationSuffixByteReserve","maximumInitialFilenameByteLength","escapedBranch","replace","unscopedName","RegExp","branchHash","update","digest","minimumBranchSuffix","maximumExtensionByteLength","byteLength","truncateUtf8ByByteLength","maximumByteLength","value","maximumBranchSuffixByteLength","branchSuffix","maximumBranchPrefixByteLength","branchPrefix","maximumNameByteLength","truncatedName","character","characterByteLength","query","incomingData","origDoc"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/uploads/generateFileData.ts"],"sourcesContent":["import { fileTypeFromBuffer } from 'file-type'\nimport fs from 'fs/promises'\nimport { randomUUID } from 'node:crypto'\nimport { openAsBlob } from 'node:fs'\n\nimport type { Collection, TypeWithID } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { Document, PayloadRequest } from '../types/index.js'\nimport type { ExternalUploadSource } from './sanitizeUploadData.js'\nimport type { PreparedUploadTransformation } from './transformers/uploadTransformerBridge.js'\nimport type { FileData, FileSizes, FileToSave, UploadEdits } from './types.js'\n\nimport { FileRetrievalError, FileUploadError, Forbidden, MissingFile } from '../errors/index.js'\nimport { formatAdminURL } from '../utilities/formatAdminURL.js'\nimport { isNumber } from '../utilities/isNumber.js'\nimport { canResizeImage } from './canResizeImage.js'\nimport { checkFileRestrictions } from './checkFileRestrictions.js'\nimport { downloadFileToBuffer } from './downloadFileToBuffer.js'\nimport { getOriginalFilename } from './fileVersioning/naming.js'\nimport { generateImageSizeFilename } from './generateImageSizeFilename.js'\nimport { getFileByPath } from './getFileByPath.js'\nimport { getFileExtension, getSanitizedUploadFilename } from './getFileTypeIdentity.js'\nimport { getImageSize } from './getImageSize.js'\nimport { getSafeFileName, incrementName } from './getSafeFilename.js'\nimport { hasCropOrResizeEdit } from './hasCropOrResizeEdit.js'\nimport { hasFullFileContents } from './hasFullFileContents.js'\nimport { isProcessableImage } from './isProcessableImage.js'\nimport { parseFilename } from './parseFilename.js'\nimport { planTransformerPipeline } from './transformers/planTransformerPipeline.js'\nimport { transformUploadFile } from './transformers/transformUploadFile.js'\nimport {\n getUploadTransformerInternal,\n setUploadFilePath,\n} from './transformers/uploadTransformerBridge.js'\ntype Args<T> = {\n collection: Collection\n config: SanitizedConfig\n data: T\n draft?: boolean\n externalUploadSource?: ExternalUploadSource\n isDuplicating?: boolean\n operation: 'create' | 'update'\n originalDoc?: T\n overwriteExistingFiles?: boolean\n req: PayloadRequest\n throwOnMissingFile?: boolean\n}\n\ntype Result<T> = Promise<{\n data: T\n files: FileToSave[]\n}>\n\nconst shouldReupload = (\n uploadEdits: undefined | UploadEdits,\n fileData: Record<string, unknown> | undefined,\n) => {\n if (!fileData || !uploadEdits) {\n return false\n }\n\n if (hasCropOrResizeEdit(uploadEdits)) {\n return true\n }\n\n // Since uploadEdits always has focalPoint, compare to the value in the data if it was changed\n if (uploadEdits.focalPoint) {\n const incomingFocalX = uploadEdits.focalPoint.x\n const incomingFocalY = uploadEdits.focalPoint.y\n\n const currentFocalX = 'focalX' in fileData && fileData.focalX\n const currentFocalY = 'focalY' in fileData && fileData.focalY\n\n const isEqual = incomingFocalX === currentFocalX && incomingFocalY === currentFocalY\n return !isEqual\n }\n\n return false\n}\n\nexport type TempFileHandling =\n | { sourcePath: string; type: 'copyFromTempFile' }\n | { type: 'skip' }\n | { type: 'useBuffer' }\n\n/**\n * Decides how to get a file's bytes onto disk when no transformer rewrote it (a transformed\n * file is already an in-memory buffer, so it always takes the `useBuffer` path). Copies straight\n * from the temp file when possible, rather than reading a potentially large temp file into memory\n * just to write it back out - see the `generateFileData` function doc for why.\n */\nexport const resolveTempFileHandling = ({\n disableLocalStorage,\n hasProcessedBuffer,\n tempFilePath,\n}: {\n disableLocalStorage: boolean\n hasProcessedBuffer: boolean\n tempFilePath: string | undefined\n}): TempFileHandling => {\n if (hasProcessedBuffer || !tempFilePath) {\n return { type: 'useBuffer' }\n }\n\n return disableLocalStorage\n ? { type: 'skip' }\n : { type: 'copyFromTempFile', sourcePath: tempFilePath }\n}\n\n/**\n * Builds the document's file metadata and the list of files to write to disk.\n *\n * A large client upload may arrive as a temp file instead of an in-memory buffer (see\n * getFileFromUploadInstructions.ts), and `file.data` can hold only a partial probe rather than\n * the full file. To avoid loading such files into memory unnecessarily, no transformer runs\n * unless the full bytes are available, this skips reading a temp file entirely when local\n * storage is disabled, and copies it straight to its destination when local storage is enabled.\n */\nexport const generateFileData = async <T>({\n collection: { config: collectionConfig },\n data,\n draft,\n externalUploadSource,\n isDuplicating,\n operation,\n originalDoc,\n overwriteExistingFiles,\n req,\n throwOnMissingFile,\n}: Args<T>): Result<T> => {\n if (!collectionConfig.upload) {\n return {\n data,\n files: [],\n }\n }\n\n const { serverURL } = req.payload.config\n\n let file = isDuplicating ? undefined : req.file\n\n const uploadEdits = parseUploadEditsFromReqOrIncomingData({\n data,\n isDuplicating,\n operation,\n // Only a duplication source informs edit parsing. Updates now also pass `originalDoc` so the\n // stored file can be reprocessed, and that must not change which edits are applied.\n originalDoc: isDuplicating ? originalDoc : undefined,\n req,\n })\n\n const {\n disableLocalStorage,\n focalPoint: focalPointEnabled = true,\n staticDir,\n } = collectionConfig.upload\n const hasManagedCloudStorage = Boolean(collectionConfig.upload.fileOperations)\n const uploadReference = file?.uploadReference\n const hasProviderDirectReference =\n uploadReference && typeof uploadReference === 'object' && !('uploadId' in uploadReference)\n const verifiedOriginal = req.context?._payloadVerifiedProviderOriginal as\n | {\n _objectKey?: string\n filename: string\n key: string\n prefix?: string\n signedReceipt: string\n }\n | undefined\n const providerOriginal =\n hasProviderDirectReference &&\n 'signedReceipt' in uploadReference &&\n uploadReference.signedReceipt === verifiedOriginal?.signedReceipt &&\n verifiedOriginal &&\n typeof collectionConfig.upload.adapter === 'string'\n ? {\n _objectKey: verifiedOriginal._objectKey,\n filename: verifiedOriginal.filename,\n key: verifiedOriginal.key,\n prefix: verifiedOriginal.prefix,\n }\n : undefined\n const shouldStageCloudFiles = hasManagedCloudStorage && !hasProviderDirectReference\n\n const staticPath = staticDir\n\n const incomingFileData: Document = isDuplicating ? originalDoc : data\n const currentFileData = (operation === 'update' ? originalDoc : incomingFileData) as\n | FileData\n | undefined\n const retainedOriginal =\n operation === 'update' &&\n !file &&\n !externalUploadSource &&\n typeof currentFileData?.original?.filename === 'string' &&\n typeof currentFileData.original.url === 'string'\n ? currentFileData.original\n : undefined\n const fileSourceData = externalUploadSource ?? retainedOriginal ?? currentFileData\n let isLocalFile = false\n\n if (\n !file &&\n fileSourceData &&\n (externalUploadSource ||\n isDuplicating ||\n shouldReupload(uploadEdits, incomingFileData as Record<string, unknown>))\n ) {\n const { filename, url } = fileSourceData\n if (filename && (filename.includes('../') || filename.includes('..\\\\'))) {\n throw new Forbidden(req.t)\n }\n\n if ((serverURL && url?.startsWith(serverURL)) || url?.startsWith('/')) {\n isLocalFile = true\n }\n\n try {\n if (!externalUploadSource && !disableLocalStorage && isLocalFile) {\n // File is stored locally\n const filePath = `${staticPath}/${filename}`\n const response = await getFileByPath(filePath)\n file = response\n overwriteExistingFiles = true\n } else if (filename && retainedOriginal && hasManagedCloudStorage) {\n const { retrieveFileResponse } = await import('./endpoints/getFile.js')\n const response = await retrieveFileResponse({\n collection: { config: collectionConfig },\n doc: originalDoc as TypeWithID,\n filename,\n operation: 'transform',\n req,\n })\n if (!response.ok) {\n throw new Error(`Unable to read retained original ${filename}`)\n }\n const buffer = Buffer.from(await response.arrayBuffer())\n file = {\n name: filename,\n data: buffer,\n mimetype: retainedOriginal.mimeType,\n size: buffer.length,\n }\n overwriteExistingFiles = true\n } else if (filename && url) {\n // File is remote\n file = await downloadFileToBuffer({\n data: fileSourceData,\n req,\n uploadConfig: collectionConfig.upload,\n })\n overwriteExistingFiles = !externalUploadSource\n }\n } catch (err: unknown) {\n throw new FileRetrievalError(req.t, err instanceof Error ? err.message : undefined)\n }\n\n if (file && retainedOriginal && currentFileData?.filename) {\n file = { ...file, name: currentFileData.filename }\n }\n }\n\n if (isDuplicating) {\n overwriteExistingFiles = false\n }\n\n if (!file) {\n if (throwOnMissingFile) {\n throw new MissingFile(req.t)\n }\n\n return {\n data: incomingFileData!,\n files: [],\n }\n }\n\n const detectedFileType = await checkFileRestrictions({\n collection: collectionConfig,\n file,\n req,\n })\n\n const shouldUseDetectedFileType =\n detectedFileType &&\n (isProcessableImage(file.mimetype) || isProcessableImage(detectedFileType.mime))\n\n if (shouldUseDetectedFileType && detectedFileType.mime !== file.mimetype) {\n file = { ...file, mimetype: detectedFileType.mime }\n }\n\n if (!disableLocalStorage) {\n await fs.mkdir(staticPath!, { recursive: true })\n }\n\n let newData = incomingFileData as T\n const filesToSave: FileToSave[] = []\n const fileData: Partial<FileData> = {}\n const crop = uploadEdits?.crop\n const isResettingCrop =\n retainedOriginal &&\n crop?.unit === '%' &&\n Number(crop.width) === 100 &&\n Number(crop.height) === 100 &&\n Number(crop.x) === 0 &&\n Number(crop.y) === 0 &&\n (uploadEdits.widthInPixels === undefined ||\n Number(uploadEdits.widthInPixels) === retainedOriginal.width) &&\n (uploadEdits.heightInPixels === undefined ||\n Number(uploadEdits.heightInPixels) === retainedOriginal.height)\n const hasFocalPointChange =\n uploadEdits?.focalPoint &&\n (Number(uploadEdits.focalPoint.x) !== (currentFileData?.focalX ?? 50) ||\n Number(uploadEdits.focalPoint.y) !== (currentFileData?.focalY ?? 50))\n const editsForTransformer = isResettingCrop\n ? { ...uploadEdits, crop: undefined, heightInPixels: undefined, widthInPixels: undefined }\n : uploadEdits\n\n try {\n const pipeline = await planTransformerPipeline({\n args: {\n collectionSlug: collectionConfig.slug,\n mimeType: file.mimetype,\n operation: 'upload',\n req,\n },\n capability: 'transformFile',\n transformers: req.payload.config.upload?.transformers ?? [],\n })\n\n // A large client upload can arrive as a bounded probe alongside a temp file. Transformers\n // need the whole file, so leave such an upload untouched rather than buffering it.\n const canRunTransformers = pipeline.length > 0 && hasFullFileContents(file)\n\n const bridgeTransformers = canRunTransformers\n ? pipeline.filter((transformer) =>\n Boolean(getUploadTransformerInternal(transformer)?.prepareUpload),\n )\n : []\n\n const bridgeTransformer =\n bridgeTransformers.find((transformer) =>\n getUploadTransformerInternal(transformer)!.handlesCollection?.({\n collectionSlug: collectionConfig.slug,\n }),\n ) ?? bridgeTransformers[0]\n\n // The chosen bridge's task options are private to it, so other bridges must not see them.\n const bridgeTaskPipeline = pipeline.filter(\n (transformer) =>\n transformer === bridgeTransformer || !bridgeTransformers.includes(transformer),\n )\n\n let originalWebFile: File | undefined\n let mainWebFile: File | undefined\n let hasDimensionsFromBridge = false\n let sizeResults: PreparedUploadTransformation[] = []\n\n if (canRunTransformers) {\n const fileContents = file.tempFilePath ? await openAsBlob(file.tempFilePath) : file.data\n originalWebFile = new File([fileContents], file.name, { type: file.mimetype })\n if (file.tempFilePath) {\n setUploadFilePath(originalWebFile, file.tempFilePath)\n }\n\n if (bridgeTransformer) {\n const bridge = getUploadTransformerInternal(bridgeTransformer)!\n\n const results = await bridge.prepareUpload!({\n collectionSlug: collectionConfig.slug,\n file: originalWebFile,\n req,\n transform: (task) =>\n transformUploadFile({\n collectionSlug: collectionConfig.slug,\n file: task.file ?? originalWebFile!,\n options: task.options,\n pipeline: bridgeTaskPipeline,\n req,\n }),\n uploadEdits: editsForTransformer,\n })\n\n const mainResult = results.find((result) => result.fieldPath === 'filename')\n\n mainWebFile = mainResult?.file ?? originalWebFile\n fileData.width = mainResult?.width\n fileData.height = mainResult?.height\n hasDimensionsFromBridge = true\n sizeResults = results.filter((result) => result.fieldPath !== 'filename')\n } else {\n mainWebFile = await transformUploadFile({\n collectionSlug: collectionConfig.slug,\n file: originalWebFile,\n options: undefined,\n pipeline,\n req,\n })\n }\n }\n\n // Saved for any resizable image, not just one a transformer processed, so it's kept with no\n // transformer registered and on a header-only client upload.\n if (\n focalPointEnabled &&\n uploadEdits?.focalPoint &&\n (hasDimensionsFromBridge || canResizeImage(file.mimetype))\n ) {\n fileData.focalX = isNumber(uploadEdits.focalPoint.x)\n ? Math.round(uploadEdits.focalPoint.x)\n : 50\n fileData.focalY = isNumber(uploadEdits.focalPoint.y)\n ? Math.round(uploadEdits.focalPoint.y)\n : 50\n }\n\n const fileWasTransformed = Boolean(mainWebFile && mainWebFile !== originalWebFile)\n const hasReusableOriginalMain = Boolean(\n isResettingCrop && !fileWasTransformed && retainedOriginal,\n )\n if (hasReusableOriginalMain && !hasFocalPointChange && retainedOriginal) {\n return {\n data: {\n ...incomingFileData,\n _objectKey: retainedOriginal._objectKey,\n filename: retainedOriginal.filename,\n filesize: retainedOriginal.filesize,\n height: retainedOriginal.height,\n mimeType: retainedOriginal.mimeType,\n original: retainedOriginal,\n prefix: retainedOriginal.prefix,\n url: retainedOriginal.url,\n variants: currentFileData?.variants,\n width: retainedOriginal.width,\n ...(draft ? { _status: 'draft' } : {}),\n } as T,\n files: [],\n }\n }\n const mainBuffer = fileWasTransformed\n ? Buffer.from(await mainWebFile!.arrayBuffer())\n : undefined\n\n // A transformed file is named after what the transformer returned, not the upload.\n const outputName = hasReusableOriginalMain\n ? retainedOriginal!.filename\n : (fileWasTransformed && mainWebFile!.name) || file.name\n\n let mimeType: string\n let ext: string | undefined\n\n if (mainBuffer) {\n // Detected bytes win for binary formats (Sharp keeps the input's name and type on a\n // converted output), but text-like output such as CSV has no signature to detect, so\n // fall back to the type and extension the transformer declared on the returned File.\n const typeResult = await fileTypeFromBuffer(mainBuffer)\n ext =\n typeResult?.ext ?? (getFileExtension(getSanitizedUploadFilename(outputName)) || undefined)\n mimeType = typeResult?.mime ?? (mainWebFile!.type || file.mimetype)\n } else {\n mimeType = file.mimetype\n ext = getFileExtension(getSanitizedUploadFilename(file.name))\n }\n\n // Adjust SVG mime type. fromBuffer modifies it.\n if (mimeType === 'application/xml' && ext === 'svg') {\n mimeType = 'image/svg+xml'\n }\n fileData.mimeType = mimeType\n fileData.filesize = mainBuffer ? mainBuffer.length : file.size\n\n // Only probe formats that could carry dimensions - probing reads the file, and a large\n // non-image upload may only exist as a temp file we deliberately never buffer.\n if (!hasDimensionsFromBridge && isProcessableImage(mimeType)) {\n try {\n const probed = await getImageSize({\n file: mainBuffer ? { ...file, data: mainBuffer, tempFilePath: undefined } : file,\n })\n fileData.width = probed.width\n fileData.height = probed.height\n } catch {\n // Not a recognized image format — leave width/height unset.\n }\n }\n\n let fsSafeName = getSanitizedUploadFilename(outputName, ext)\n const isDuplicatingAnOriginal =\n isDuplicating && file.name === (originalDoc as FileData | undefined)?.original?.filename\n\n // A provider reference without a receipt names an object the client already stored; renaming\n // it would point the document at a key that was never uploaded.\n const isUnverifiedProviderReference = Boolean(hasProviderDirectReference && !providerOriginal)\n\n if (\n !fileWasTransformed &&\n !retainedOriginal &&\n !providerOriginal &&\n !isDuplicatingAnOriginal &&\n !isUnverifiedProviderReference\n ) {\n fsSafeName = getOriginalFilename({ filename: fsSafeName })\n }\n\n if (hasReusableOriginalMain) {\n fsSafeName = retainedOriginal!.filename\n } else if (\n !overwriteExistingFiles ||\n !disableLocalStorage ||\n (shouldStageCloudFiles && retainedOriginal)\n ) {\n // Extract prefix if present (added by plugin-cloud-storage)\n const prefix = (data as Record<string, unknown>)?.prefix as string | undefined\n fsSafeName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: fsSafeName,\n prefix,\n req,\n staticPath: staticPath!,\n })\n }\n\n fileData.filename = fsSafeName\n if (hasReusableOriginalMain) {\n fileData.url = retainedOriginal!.url\n }\n\n const hasGeneratedProviderRepresentations = Boolean(\n providerOriginal &&\n (fileWasTransformed || sizeResults.some((result) => Boolean(result.file))),\n )\n const newObjectKey =\n hasManagedCloudStorage && (shouldStageCloudFiles || hasGeneratedProviderRepresentations)\n ? randomUUID()\n : undefined\n if (newObjectKey) {\n fileData._objectKey = newObjectKey\n }\n if (providerOriginal && !fileWasTransformed) {\n fileData._objectKey = providerOriginal._objectKey\n fileData.prefix = providerOriginal.prefix\n }\n if (hasReusableOriginalMain && retainedOriginal) {\n fileData._objectKey = retainedOriginal._objectKey\n fileData.prefix = retainedOriginal.prefix\n }\n\n if (!disableLocalStorage || shouldStageCloudFiles || providerOriginal) {\n const originalFilename =\n retainedOriginal?.filename ??\n providerOriginal?.filename ??\n (fileWasTransformed\n ? await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: getOriginalFilename({\n filename: getSanitizedUploadFilename(file.name),\n }),\n req,\n staticPath: staticPath!,\n })\n : fsSafeName)\n const original = retainedOriginal ?? {\n _objectKey: providerOriginal ? providerOriginal._objectKey : newObjectKey,\n filename: originalFilename,\n filesize: file.size,\n mimeType: file.mimetype,\n prefix: providerOriginal?.prefix ?? currentFileData?.prefix,\n url: formatAdminURL({\n apiRoute: req.payload.config.routes.api,\n path: `/${collectionConfig.slug}/file/${encodeURIComponent(originalFilename)}`,\n relative: true,\n serverURL: req.payload.config.serverURL,\n }),\n }\n\n if (!retainedOriginal && isProcessableImage(file.mimetype)) {\n try {\n const dimensions = await getImageSize({ file })\n original.width = dimensions.width\n original.height = dimensions.height\n } catch {\n // Files with an image MIME type may not have readable dimensions.\n }\n }\n\n fileData.original = original\n\n if (providerOriginal) {\n if (!fileWasTransformed) {\n fileData.filename = originalFilename\n }\n }\n\n if (fileWasTransformed && !retainedOriginal && !providerOriginal) {\n filesToSave.push({\n buffer: Buffer.from(await originalWebFile!.arrayBuffer()),\n path: `${staticPath}/${originalFilename}`,\n })\n }\n }\n\n if (mainBuffer) {\n // The stored bytes are no longer the ones the client uploaded, so the client's upload\n // reference must not be reused for them.\n delete file.uploadReference\n\n filesToSave.push({\n buffer: mainBuffer,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n if (file.tempFilePath) {\n await fs.writeFile(file.tempFilePath, mainBuffer)\n } else {\n req.file = {\n ...file,\n data: mainBuffer,\n size: mainBuffer.length,\n }\n }\n } else if (!hasReusableOriginalMain) {\n // file.data is empty when useTempFiles is on, so the real content lives at\n // file.tempFilePath instead (see the function doc for why we avoid buffering it).\n const tempFileHandling = resolveTempFileHandling({\n disableLocalStorage: Boolean(disableLocalStorage) && !shouldStageCloudFiles,\n hasProcessedBuffer: false,\n tempFilePath: file.tempFilePath,\n })\n\n if (tempFileHandling.type === 'copyFromTempFile') {\n filesToSave.push({\n path: `${staticPath}/${fsSafeName}`,\n sourcePath: tempFileHandling.sourcePath,\n })\n } else if (tempFileHandling.type === 'useBuffer') {\n const bufferToSave = file.tempFilePath ? await fs.readFile(file.tempFilePath) : file.data\n\n // A 'header'/'none' content requirement (see getFileContentRequirement.ts) means\n // file.data is only a partial probe, not the real content - never save it as-is.\n const fileDataIsPartialView = !file.tempFilePath && bufferToSave.length !== file.size\n\n if (!fileDataIsPartialView) {\n filesToSave.push({\n buffer: bufferToSave,\n path: `${staticPath}/${fsSafeName}`,\n })\n\n if (bufferToSave.length > 0) {\n if (file.tempFilePath) {\n await fs.writeFile(file.tempFilePath, bufferToSave)\n } else {\n // Keep req.file in sync, since downstream hooks/plugins may read it.\n req.file = {\n ...file,\n data: bufferToSave,\n size: bufferToSave.length,\n }\n }\n }\n }\n }\n }\n\n if (sizeResults.length > 0) {\n req.payloadUploadSizes = {}\n const sizes: FileSizes = {}\n const { name: baseName, ext: baseExt } = parseFilename(fsSafeName)\n const plannedNames = new Set([fileData.original?.filename, fsSafeName])\n const plannedSizeBuffers = new Map<string, Buffer>()\n\n for (const result of sizeResults) {\n const sizeName = result.fieldPath.slice('variants.'.length)\n\n if (!result.file) {\n sizes[sizeName] = {\n filename: null,\n filesize: null,\n height: null,\n mimeType: null,\n url: null,\n width: null,\n }\n continue\n }\n\n const sizeBuffer = Buffer.from(await result.file.arrayBuffer())\n const sizeTypeResult = await fileTypeFromBuffer(sizeBuffer)\n const sizeExt = sizeTypeResult?.ext || baseExt\n const sizeMimeType = sizeTypeResult?.mime || result.mimeType || fileData.mimeType\n\n req.payloadUploadSizes[sizeName] = sizeBuffer\n\n const imageSizeConfig = collectionConfig.upload.variants?.find(\n (imageSize) => imageSize.name === sizeName,\n )\n\n const imageNameWithDimensions = imageSizeConfig?.generateImageName\n ? imageSizeConfig.generateImageName({\n extension: sizeExt,\n height: result.height!,\n originalName: baseName,\n sizeName,\n width: result.width!,\n })\n : generateImageSizeFilename({\n extension: sizeExt,\n height: result.height!,\n outputImageName: baseName,\n width: result.width!,\n })\n\n let imageName = imageNameWithDimensions\n\n if (!disableLocalStorage || shouldStageCloudFiles) {\n const prefix = (data as Record<string, unknown>)?.prefix as string | undefined\n\n while (true) {\n imageName = await getSafeFileName({\n collectionSlug: collectionConfig.slug,\n desiredFilename: imageName,\n prefix,\n req,\n staticPath: disableLocalStorage ? undefined : staticPath!,\n })\n if (plannedSizeBuffers.get(imageName)?.equals(sizeBuffer)) {\n break\n }\n if (!plannedNames.has(imageName)) {\n break\n }\n imageName = incrementName(imageName)\n }\n plannedNames.add(imageName)\n }\n\n const imagePath = `${staticPath}/${imageName}`\n\n sizes[sizeName] = {\n _objectKey: newObjectKey,\n filename: imageName,\n filesize: sizeBuffer.length,\n height: result.height!,\n mimeType: sizeMimeType,\n prefix: providerOriginal?.prefix ?? currentFileData?.prefix,\n url: null,\n width: result.width!,\n }\n\n if (!plannedSizeBuffers.has(imageName)) {\n plannedSizeBuffers.set(imageName, sizeBuffer)\n filesToSave.push({\n buffer: sizeBuffer,\n path: imagePath,\n })\n }\n }\n\n fileData.variants = sizes\n }\n } catch (err) {\n req.payload.logger.error(err)\n throw new FileUploadError(req.t)\n }\n\n newData = {\n ...newData,\n ...fileData,\n ...(draft ? { _status: 'draft' } : {}),\n }\n\n return {\n data: newData,\n files: filesToSave,\n }\n}\n\n/**\n * Parse upload edits from req or incoming data\n */\nfunction parseUploadEditsFromReqOrIncomingData(args: {\n data: unknown\n isDuplicating?: boolean\n operation: 'create' | 'update'\n originalDoc: unknown\n req: PayloadRequest\n}): UploadEdits {\n const { data, isDuplicating, operation, originalDoc, req } = args\n\n // Get intended focal point change from query string or incoming data\n const uploadEdits =\n req.query?.uploadEdits && typeof req.query.uploadEdits === 'object'\n ? (req.query.uploadEdits as UploadEdits)\n : {}\n\n if (uploadEdits.focalPoint) {\n return uploadEdits\n }\n\n const incomingData = data as FileData\n const origDoc = originalDoc as FileData\n\n if (origDoc && 'focalX' in origDoc && 'focalY' in origDoc) {\n // Admin always resends the current focal point, so treat an unchanged value as no edit.\n if (incomingData?.focalX === origDoc.focalX && incomingData?.focalY === origDoc.focalY) {\n return undefined!\n }\n\n if (isDuplicating) {\n uploadEdits.focalPoint = {\n x: incomingData?.focalX || origDoc.focalX!,\n y: incomingData?.focalY || origDoc.focalY!,\n }\n return uploadEdits\n }\n }\n\n if (incomingData?.focalX && incomingData?.focalY) {\n uploadEdits.focalPoint = {\n x: incomingData.focalX,\n y: incomingData.focalY,\n }\n return uploadEdits\n }\n\n // If no focal point is set, default to center\n if (operation === 'create') {\n uploadEdits.focalPoint = {\n x: 50,\n y: 50,\n }\n }\n\n return uploadEdits\n}\n"],"names":["fileTypeFromBuffer","fs","randomUUID","openAsBlob","FileRetrievalError","FileUploadError","Forbidden","MissingFile","formatAdminURL","isNumber","canResizeImage","checkFileRestrictions","downloadFileToBuffer","getOriginalFilename","generateImageSizeFilename","getFileByPath","getFileExtension","getSanitizedUploadFilename","getImageSize","getSafeFileName","incrementName","hasCropOrResizeEdit","hasFullFileContents","isProcessableImage","parseFilename","planTransformerPipeline","transformUploadFile","getUploadTransformerInternal","setUploadFilePath","shouldReupload","uploadEdits","fileData","focalPoint","incomingFocalX","x","incomingFocalY","y","currentFocalX","focalX","currentFocalY","focalY","isEqual","resolveTempFileHandling","disableLocalStorage","hasProcessedBuffer","tempFilePath","type","sourcePath","generateFileData","collection","config","collectionConfig","data","draft","externalUploadSource","isDuplicating","operation","originalDoc","overwriteExistingFiles","req","throwOnMissingFile","upload","files","serverURL","payload","file","undefined","parseUploadEditsFromReqOrIncomingData","focalPointEnabled","staticDir","hasManagedCloudStorage","Boolean","fileOperations","uploadReference","hasProviderDirectReference","verifiedOriginal","context","_payloadVerifiedProviderOriginal","providerOriginal","signedReceipt","adapter","_objectKey","filename","key","prefix","shouldStageCloudFiles","staticPath","incomingFileData","currentFileData","retainedOriginal","original","url","fileSourceData","isLocalFile","includes","t","startsWith","filePath","response","retrieveFileResponse","doc","ok","Error","buffer","Buffer","from","arrayBuffer","name","mimetype","mimeType","size","length","uploadConfig","err","message","detectedFileType","shouldUseDetectedFileType","mime","mkdir","recursive","newData","filesToSave","crop","isResettingCrop","unit","Number","width","height","widthInPixels","heightInPixels","hasFocalPointChange","editsForTransformer","pipeline","args","collectionSlug","slug","capability","transformers","canRunTransformers","bridgeTransformers","filter","transformer","prepareUpload","bridgeTransformer","find","handlesCollection","bridgeTaskPipeline","originalWebFile","mainWebFile","hasDimensionsFromBridge","sizeResults","fileContents","File","bridge","results","transform","task","options","mainResult","result","fieldPath","Math","round","fileWasTransformed","hasReusableOriginalMain","filesize","variants","_status","mainBuffer","outputName","ext","typeResult","probed","fsSafeName","isDuplicatingAnOriginal","isUnverifiedProviderReference","desiredFilename","hasGeneratedProviderRepresentations","some","newObjectKey","originalFilename","apiRoute","routes","api","path","encodeURIComponent","relative","dimensions","push","writeFile","tempFileHandling","bufferToSave","readFile","fileDataIsPartialView","payloadUploadSizes","sizes","baseName","baseExt","plannedNames","Set","plannedSizeBuffers","Map","sizeName","slice","sizeBuffer","sizeTypeResult","sizeExt","sizeMimeType","imageSizeConfig","imageSize","imageNameWithDimensions","generateImageName","extension","originalName","outputImageName","imageName","get","equals","has","add","imagePath","set","logger","error","query","incomingData","origDoc"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getBaseFields.d.ts","sourceRoot":"","sources":["../../src/uploads/getBaseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAoBtD,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,mBAAmB,2BAA4B,OAAO,KAAG,KAAK,EA4V1E,CAAA"}
1
+ {"version":3,"file":"getBaseFields.d.ts","sourceRoot":"","sources":["../../src/uploads/getBaseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAmBtD,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,gBAAgB,CAAA;IAC5B,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,mBAAmB,2BAA4B,OAAO,KAAG,KAAK,EA4U1E,CAAA"}
@@ -1,4 +1,3 @@
1
- import { appendBranchToFileURL } from './appendBranchToFileURL.js';
2
1
  import { generateFilePathOrURL } from './generateFilePathOrURL.js';
3
2
  import { mimeTypeValidator } from './mimeTypeValidator.js';
4
3
  import { validateUploadFilename } from './validateUploadFilename.js';
@@ -35,24 +34,17 @@ export const getBaseUploadFields = ({ collection, config })=>{
35
34
  ({ originalDoc, req })=>{
36
35
  const adminThumbnail = typeof collection.upload !== 'boolean' ? collection.upload?.adminThumbnail : undefined;
37
36
  if (typeof adminThumbnail === 'function') {
38
- const customThumbnailURL = adminThumbnail({
37
+ return adminThumbnail({
39
38
  doc: originalDoc
40
39
  });
41
- return typeof customThumbnailURL === 'string' ? appendBranchToFileURL({
42
- req,
43
- url: customThumbnailURL
44
- }) : customThumbnailURL;
45
40
  }
46
- return appendBranchToFileURL({
47
- req,
48
- url: generateFilePathOrURL({
49
- collectionSlug: collection.slug,
50
- config,
51
- filename: typeof adminThumbnail === 'string' ? originalDoc.variants?.[adminThumbnail]?.filename : undefined,
52
- relative: false,
53
- serverURL: req.payload.config.serverURL,
54
- urlOrPath: typeof adminThumbnail === 'string' ? originalDoc.variants?.[adminThumbnail]?.url : undefined
55
- })
41
+ return generateFilePathOrURL({
42
+ collectionSlug: collection.slug,
43
+ config,
44
+ filename: typeof adminThumbnail === 'string' ? originalDoc.variants?.[adminThumbnail]?.filename : undefined,
45
+ relative: false,
46
+ serverURL: req.payload.config.serverURL,
47
+ urlOrPath: typeof adminThumbnail === 'string' ? originalDoc.variants?.[adminThumbnail]?.url : undefined
56
48
  });
57
49
  }
58
50
  ]
@@ -118,16 +110,13 @@ export const getBaseUploadFields = ({ collection, config })=>{
118
110
  ...url,
119
111
  hooks: {
120
112
  afterRead: [
121
- ({ data, originalDoc, req, value })=>appendBranchToFileURL({
122
- req,
123
- url: generateFilePathOrURL({
124
- collectionSlug: collection.slug,
125
- config,
126
- filename: data?.filename || originalDoc?.filename,
127
- relative: false,
128
- serverURL: req.payload.config.serverURL,
129
- urlOrPath: value
130
- })
113
+ ({ data, originalDoc, req, value })=>generateFilePathOrURL({
114
+ collectionSlug: collection.slug,
115
+ config,
116
+ filename: data?.filename || originalDoc?.filename,
117
+ relative: false,
118
+ serverURL: req.payload.config.serverURL,
119
+ urlOrPath: value
131
120
  })
132
121
  ],
133
122
  beforeChange: [
@@ -165,16 +154,13 @@ export const getBaseUploadFields = ({ collection, config })=>{
165
154
  hooks: {
166
155
  afterRead: [
167
156
  ({ data, originalDoc, req, value })=>{
168
- return appendBranchToFileURL({
169
- req,
170
- url: generateFilePathOrURL({
171
- collectionSlug: collection.slug,
172
- config,
173
- filename: data?.original?.filename || originalDoc?.original?.filename,
174
- relative: false,
175
- serverURL: req.payload.config.serverURL,
176
- urlOrPath: value
177
- })
157
+ return generateFilePathOrURL({
158
+ collectionSlug: collection.slug,
159
+ config,
160
+ filename: data?.original?.filename || originalDoc?.original?.filename,
161
+ relative: false,
162
+ serverURL: req.payload.config.serverURL,
163
+ urlOrPath: value
178
164
  });
179
165
  }
180
166
  ],
@@ -264,16 +250,13 @@ export const getBaseUploadFields = ({ collection, config })=>{
264
250
  },
265
251
  hooks: {
266
252
  afterRead: [
267
- ({ collection, data, originalDoc, req, value })=>appendBranchToFileURL({
268
- req,
269
- url: generateFilePathOrURL({
270
- collectionSlug: collection?.slug,
271
- config,
272
- filename: data?.variants?.[size.name]?.filename || originalDoc?.variants?.[size.name]?.filename,
273
- relative: false,
274
- serverURL: req.payload.config.serverURL,
275
- urlOrPath: value
276
- })
253
+ ({ collection, data, originalDoc, req, value })=>generateFilePathOrURL({
254
+ collectionSlug: collection?.slug,
255
+ config,
256
+ filename: data?.variants?.[size.name]?.filename || originalDoc?.variants?.[size.name]?.filename,
257
+ relative: false,
258
+ serverURL: req.payload.config.serverURL,
259
+ urlOrPath: value
277
260
  })
278
261
  ],
279
262
  beforeChange: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/getBaseFields.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\nimport type { Field } from '../fields/config/types.js'\nimport type { SanitizedUploadConfig } from './types.js'\n\nimport { appendBranchToFileURL } from './appendBranchToFileURL.js'\nimport { generateFilePathOrURL } from './generateFilePathOrURL.js'\nimport { mimeTypeValidator } from './mimeTypeValidator.js'\nimport { validateUploadFilename } from './validateUploadFilename.js'\n\nconst disabledFromImageSize = (\n sizeAdmin: { disabled?: { column?: boolean; filter?: boolean; groupBy?: boolean } } | undefined,\n): { disabled: { column: boolean; filter: boolean; groupBy: boolean } } => {\n return {\n disabled: {\n column: sizeAdmin?.disabled?.column ?? false,\n filter: sizeAdmin?.disabled?.filter ?? false,\n groupBy: sizeAdmin?.disabled?.groupBy ?? false,\n },\n }\n}\n\ntype Options = {\n collection: CollectionConfig\n config: Config\n}\n\nexport const getBaseUploadFields = ({ collection, config }: Options): Field[] => {\n // `variants` only exists once a transformer (e.g. Sharp) has written it back during init.\n const uploadOptions: Partial<SanitizedUploadConfig> =\n typeof collection.upload === 'object' ? collection.upload : {}\n\n const mimeType: Field = {\n name: 'mimeType',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'MIME Type',\n }\n\n const thumbnailURL: Field = {\n name: 'thumbnailURL',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n hooks: {\n afterRead: [\n ({ originalDoc, req }) => {\n const adminThumbnail =\n typeof collection.upload !== 'boolean' ? collection.upload?.adminThumbnail : undefined\n\n if (typeof adminThumbnail === 'function') {\n const customThumbnailURL = adminThumbnail({ doc: originalDoc })\n\n return typeof customThumbnailURL === 'string'\n ? appendBranchToFileURL({ req, url: customThumbnailURL })\n : customThumbnailURL\n }\n\n return appendBranchToFileURL({\n req,\n url: generateFilePathOrURL({\n collectionSlug: collection.slug,\n config,\n filename:\n typeof adminThumbnail === 'string'\n ? (originalDoc.variants?.[adminThumbnail]?.filename as string)\n : undefined,\n relative: false,\n serverURL: req.payload.config.serverURL,\n urlOrPath:\n typeof adminThumbnail === 'string'\n ? (originalDoc.variants?.[adminThumbnail]?.url as string)\n : undefined,\n }),\n })\n },\n ],\n },\n label: 'Thumbnail URL',\n }\n\n const width: Field = {\n name: 'width',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:width'),\n }\n\n const height: Field = {\n name: 'height',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:height'),\n }\n\n const filesize: Field = {\n name: 'filesize',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:fileSize'),\n }\n\n const filename: Field = {\n name: 'filename',\n type: 'text',\n admin: {\n disabled: { bulkEdit: true },\n hidden: true,\n readOnly: true,\n },\n index: true,\n label: ({ t }) => t('upload:fileName'),\n validate: validateUploadFilename,\n }\n\n // Only set unique: true if the collection does not have a compound index\n if (\n collection.upload === true ||\n (typeof collection.upload === 'object' && !collection.upload.filenameCompoundIndex)\n ) {\n filename.unique = true\n }\n\n const url: Field = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n let uploadFields: Field[] = [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data, originalDoc, req, value }) =>\n appendBranchToFileURL({\n req,\n url: generateFilePathOrURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.filename || originalDoc?.filename,\n relative: false,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n }),\n }),\n ],\n beforeChange: [\n ({ collection, data, originalDoc, req, value }) =>\n generateFilePathOrURL({\n collectionSlug: collection?.slug as string,\n config,\n filename: data?.filename || originalDoc?.filename,\n relative: true,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n }),\n ],\n },\n },\n thumbnailURL,\n filename,\n mimeType,\n filesize,\n width,\n height,\n {\n name: 'original',\n type: 'group',\n admin: {\n hidden: true,\n readOnly: true,\n },\n fields: [\n { ...filename, unique: false },\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data, originalDoc, req, value }) => {\n return appendBranchToFileURL({\n req,\n url: generateFilePathOrURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.original?.filename || originalDoc?.original?.filename,\n relative: false,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n }),\n })\n },\n ],\n beforeChange: [\n ({ data, originalDoc, req, value }) => {\n return generateFilePathOrURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.original?.filename || originalDoc?.original?.filename,\n relative: true,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n })\n },\n ],\n },\n },\n mimeType,\n filesize,\n width,\n height,\n {\n name: 'prefix',\n type: 'text',\n admin: { disabled: true, hidden: true, readOnly: true },\n },\n {\n name: '_objectKey',\n type: 'text',\n admin: { disabled: true, hidden: true, readOnly: true },\n },\n ],\n },\n ]\n\n // Add focal point fields if not disabled\n if (\n uploadOptions.focalPoint !== false ||\n uploadOptions.variants ||\n uploadOptions.hasImageAdjustments\n ) {\n uploadFields = uploadFields.concat(\n ['focalX', 'focalY'].map((name) => {\n return {\n name,\n type: 'number',\n admin: {\n disabled: { column: true, filter: true, groupBy: true },\n hidden: true,\n },\n }\n }),\n )\n }\n\n if (uploadOptions.mimeTypes) {\n mimeType.validate = mimeTypeValidator(uploadOptions.mimeTypes)\n }\n\n if (uploadOptions.variants) {\n uploadFields = uploadFields.concat([\n {\n name: 'variants',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: uploadOptions.variants.map((size) => ({\n name: size.name,\n type: 'group',\n admin: {\n hidden: true,\n ...disabledFromImageSize(size.admin),\n },\n fields: [\n {\n ...url,\n admin: {\n ...url.admin,\n ...disabledFromImageSize(size.admin),\n },\n hooks: {\n afterRead: [\n ({ collection, data, originalDoc, req, value }) =>\n appendBranchToFileURL({\n req,\n url: generateFilePathOrURL({\n collectionSlug: collection?.slug as string,\n config,\n filename:\n data?.variants?.[size.name]?.filename ||\n originalDoc?.variants?.[size.name]?.filename,\n relative: false,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n }),\n }),\n ],\n beforeChange: [\n ({ collection, data, originalDoc, req, value }) =>\n generateFilePathOrURL({\n collectionSlug: collection?.slug as string,\n config,\n filename:\n data?.variants?.[size.name]?.filename ||\n originalDoc?.variants?.[size.name]?.filename,\n relative: true,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n }),\n ],\n },\n },\n {\n ...width,\n admin: {\n ...width.admin,\n ...disabledFromImageSize(size.admin),\n },\n },\n {\n ...height,\n admin: {\n ...height.admin,\n ...disabledFromImageSize(size.admin),\n },\n },\n {\n ...mimeType,\n admin: {\n ...mimeType.admin,\n ...disabledFromImageSize(size.admin),\n },\n },\n {\n ...filesize,\n admin: {\n ...filesize.admin,\n ...disabledFromImageSize(size.admin),\n },\n },\n {\n ...filename,\n admin: {\n ...filename.admin,\n ...disabledFromImageSize(size.admin),\n },\n unique: false,\n },\n {\n name: 'prefix',\n type: 'text',\n admin: { disabled: true, hidden: true, readOnly: true },\n },\n {\n name: '_objectKey',\n type: 'text',\n admin: { disabled: true, hidden: true, readOnly: true },\n },\n ],\n label: size.name,\n })),\n label: ({ t }) => t('upload:sizes'),\n },\n ])\n }\n return uploadFields\n}\n"],"names":["appendBranchToFileURL","generateFilePathOrURL","mimeTypeValidator","validateUploadFilename","disabledFromImageSize","sizeAdmin","disabled","column","filter","groupBy","getBaseUploadFields","collection","config","uploadOptions","upload","mimeType","name","type","admin","hidden","readOnly","label","thumbnailURL","hooks","afterRead","originalDoc","req","adminThumbnail","undefined","customThumbnailURL","doc","url","collectionSlug","slug","filename","variants","relative","serverURL","payload","urlOrPath","width","t","height","filesize","bulkEdit","index","validate","filenameCompoundIndex","unique","uploadFields","data","value","beforeChange","fields","original","focalPoint","hasImageAdjustments","concat","map","mimeTypes","size"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/uploads/getBaseFields.ts"],"sourcesContent":["import type { CollectionConfig } from '../collections/config/types.js'\nimport type { Config } from '../config/types.js'\nimport type { Field } from '../fields/config/types.js'\nimport type { SanitizedUploadConfig } from './types.js'\n\nimport { generateFilePathOrURL } from './generateFilePathOrURL.js'\nimport { mimeTypeValidator } from './mimeTypeValidator.js'\nimport { validateUploadFilename } from './validateUploadFilename.js'\n\nconst disabledFromImageSize = (\n sizeAdmin: { disabled?: { column?: boolean; filter?: boolean; groupBy?: boolean } } | undefined,\n): { disabled: { column: boolean; filter: boolean; groupBy: boolean } } => {\n return {\n disabled: {\n column: sizeAdmin?.disabled?.column ?? false,\n filter: sizeAdmin?.disabled?.filter ?? false,\n groupBy: sizeAdmin?.disabled?.groupBy ?? false,\n },\n }\n}\n\ntype Options = {\n collection: CollectionConfig\n config: Config\n}\n\nexport const getBaseUploadFields = ({ collection, config }: Options): Field[] => {\n // `variants` only exists once a transformer (e.g. Sharp) has written it back during init.\n const uploadOptions: Partial<SanitizedUploadConfig> =\n typeof collection.upload === 'object' ? collection.upload : {}\n\n const mimeType: Field = {\n name: 'mimeType',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'MIME Type',\n }\n\n const thumbnailURL: Field = {\n name: 'thumbnailURL',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n hooks: {\n afterRead: [\n ({ originalDoc, req }) => {\n const adminThumbnail =\n typeof collection.upload !== 'boolean' ? collection.upload?.adminThumbnail : undefined\n\n if (typeof adminThumbnail === 'function') {\n return adminThumbnail({ doc: originalDoc })\n }\n\n return generateFilePathOrURL({\n collectionSlug: collection.slug,\n config,\n filename:\n typeof adminThumbnail === 'string'\n ? (originalDoc.variants?.[adminThumbnail]?.filename as string)\n : undefined,\n relative: false,\n serverURL: req.payload.config.serverURL,\n urlOrPath:\n typeof adminThumbnail === 'string'\n ? (originalDoc.variants?.[adminThumbnail]?.url as string)\n : undefined,\n })\n },\n ],\n },\n label: 'Thumbnail URL',\n }\n\n const width: Field = {\n name: 'width',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:width'),\n }\n\n const height: Field = {\n name: 'height',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:height'),\n }\n\n const filesize: Field = {\n name: 'filesize',\n type: 'number',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: ({ t }) => t('upload:fileSize'),\n }\n\n const filename: Field = {\n name: 'filename',\n type: 'text',\n admin: {\n disabled: { bulkEdit: true },\n hidden: true,\n readOnly: true,\n },\n index: true,\n label: ({ t }) => t('upload:fileName'),\n validate: validateUploadFilename,\n }\n\n // Only set unique: true if the collection does not have a compound index\n if (\n collection.upload === true ||\n (typeof collection.upload === 'object' && !collection.upload.filenameCompoundIndex)\n ) {\n filename.unique = true\n }\n\n const url: Field = {\n name: 'url',\n type: 'text',\n admin: {\n hidden: true,\n readOnly: true,\n },\n label: 'URL',\n }\n\n let uploadFields: Field[] = [\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data, originalDoc, req, value }) =>\n generateFilePathOrURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.filename || originalDoc?.filename,\n relative: false,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n }),\n ],\n beforeChange: [\n ({ collection, data, originalDoc, req, value }) =>\n generateFilePathOrURL({\n collectionSlug: collection?.slug as string,\n config,\n filename: data?.filename || originalDoc?.filename,\n relative: true,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n }),\n ],\n },\n },\n thumbnailURL,\n filename,\n mimeType,\n filesize,\n width,\n height,\n {\n name: 'original',\n type: 'group',\n admin: {\n hidden: true,\n readOnly: true,\n },\n fields: [\n { ...filename, unique: false },\n {\n ...url,\n hooks: {\n afterRead: [\n ({ data, originalDoc, req, value }) => {\n return generateFilePathOrURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.original?.filename || originalDoc?.original?.filename,\n relative: false,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n })\n },\n ],\n beforeChange: [\n ({ data, originalDoc, req, value }) => {\n return generateFilePathOrURL({\n collectionSlug: collection.slug,\n config,\n filename: data?.original?.filename || originalDoc?.original?.filename,\n relative: true,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n })\n },\n ],\n },\n },\n mimeType,\n filesize,\n width,\n height,\n {\n name: 'prefix',\n type: 'text',\n admin: { disabled: true, hidden: true, readOnly: true },\n },\n {\n name: '_objectKey',\n type: 'text',\n admin: { disabled: true, hidden: true, readOnly: true },\n },\n ],\n },\n ]\n\n // Add focal point fields if not disabled\n if (\n uploadOptions.focalPoint !== false ||\n uploadOptions.variants ||\n uploadOptions.hasImageAdjustments\n ) {\n uploadFields = uploadFields.concat(\n ['focalX', 'focalY'].map((name) => {\n return {\n name,\n type: 'number',\n admin: {\n disabled: { column: true, filter: true, groupBy: true },\n hidden: true,\n },\n }\n }),\n )\n }\n\n if (uploadOptions.mimeTypes) {\n mimeType.validate = mimeTypeValidator(uploadOptions.mimeTypes)\n }\n\n if (uploadOptions.variants) {\n uploadFields = uploadFields.concat([\n {\n name: 'variants',\n type: 'group',\n admin: {\n hidden: true,\n },\n fields: uploadOptions.variants.map((size) => ({\n name: size.name,\n type: 'group',\n admin: {\n hidden: true,\n ...disabledFromImageSize(size.admin),\n },\n fields: [\n {\n ...url,\n admin: {\n ...url.admin,\n ...disabledFromImageSize(size.admin),\n },\n hooks: {\n afterRead: [\n ({ collection, data, originalDoc, req, value }) =>\n generateFilePathOrURL({\n collectionSlug: collection?.slug as string,\n config,\n filename:\n data?.variants?.[size.name]?.filename ||\n originalDoc?.variants?.[size.name]?.filename,\n relative: false,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n }),\n ],\n beforeChange: [\n ({ collection, data, originalDoc, req, value }) =>\n generateFilePathOrURL({\n collectionSlug: collection?.slug as string,\n config,\n filename:\n data?.variants?.[size.name]?.filename ||\n originalDoc?.variants?.[size.name]?.filename,\n relative: true,\n serverURL: req.payload.config.serverURL,\n urlOrPath: value,\n }),\n ],\n },\n },\n {\n ...width,\n admin: {\n ...width.admin,\n ...disabledFromImageSize(size.admin),\n },\n },\n {\n ...height,\n admin: {\n ...height.admin,\n ...disabledFromImageSize(size.admin),\n },\n },\n {\n ...mimeType,\n admin: {\n ...mimeType.admin,\n ...disabledFromImageSize(size.admin),\n },\n },\n {\n ...filesize,\n admin: {\n ...filesize.admin,\n ...disabledFromImageSize(size.admin),\n },\n },\n {\n ...filename,\n admin: {\n ...filename.admin,\n ...disabledFromImageSize(size.admin),\n },\n unique: false,\n },\n {\n name: 'prefix',\n type: 'text',\n admin: { disabled: true, hidden: true, readOnly: true },\n },\n {\n name: '_objectKey',\n type: 'text',\n admin: { disabled: true, hidden: true, readOnly: true },\n },\n ],\n label: size.name,\n })),\n label: ({ t }) => t('upload:sizes'),\n },\n ])\n }\n return uploadFields\n}\n"],"names":["generateFilePathOrURL","mimeTypeValidator","validateUploadFilename","disabledFromImageSize","sizeAdmin","disabled","column","filter","groupBy","getBaseUploadFields","collection","config","uploadOptions","upload","mimeType","name","type","admin","hidden","readOnly","label","thumbnailURL","hooks","afterRead","originalDoc","req","adminThumbnail","undefined","doc","collectionSlug","slug","filename","variants","relative","serverURL","payload","urlOrPath","url","width","t","height","filesize","bulkEdit","index","validate","filenameCompoundIndex","unique","uploadFields","data","value","beforeChange","fields","original","focalPoint","hasImageAdjustments","concat","map","mimeTypes","size"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/getFileContentRequirement.ts"],"sourcesContent":["import type { SanitizedUploadConfig } from './types.js'\n\nimport { canResizeImage } from './canResizeImage.js'\nimport { isAnimatedImage } from './isAnimatedImage.js'\nimport { isImage } from './isImage.js'\n\n/**\n * Bytes read from the start of a file to sniff its mime type and, for images, probe its\n * dimensions. Generous enough to cover real-world header/metadata layouts (EXIF, ICC\n * profiles, etc.) while staying tiny next to a multi-gigabyte upload.\n */\nexport const HEADER_PROBE_BYTE_LENGTH = 1024 * 1024\n\nexport type FileContentRequirement = 'full' | 'header' | 'none'\n\n/**\n * Decides how much of an uploaded file's content, if any, is needed to save the document -\n * so a client upload (e.g. Azure's chunkLargeFiles) only pays for what post-processing\n * actually reads instead of always being re-downloaded in full.\n *\n * - `full`: local storage needs the real bytes, or a registered file transformer will adjust\n * the image (`upload.hasImageAdjustments`), or a custom `transformFile` transformer will\n * process the file (`hasTransformFileStages`), or the file is animated, or additional image\n * sizes will be generated from it, or the collection restricts mime types (which also runs\n * SVG/PDF content-safety checks that must see the whole file), or the request itself carries\n * a crop/resize edit (`uploadEdits`) that will be applied to the fetched bytes.\n * - `header`: the file is an image and only its dimensions are needed.\n * - `none`: nothing downstream reads file content at all.\n */\nexport function getFileContentRequirement({\n hasSizeEdits,\n hasTransformFileStages,\n mimeType,\n uploadConfig,\n}: {\n /**\n * Whether the request's `uploadEdits` (crop, heightInPixels, widthInPixels) will resize the\n * fetched file - if so, the full file is needed even when the collection config alone would\n * only require a header probe.\n */\n hasSizeEdits?: boolean\n /**\n * Whether a registered transformer without its own content projection (anything other than a\n * built-in bridge transformer like `sharpTransformer`) will run `transformFile` on this file.\n * Such a transformer reads the whole file, so neither a header probe nor no content is enough.\n */\n hasTransformFileStages?: boolean\n mimeType: string\n uploadConfig: SanitizedUploadConfig\n}): FileContentRequirement {\n if (!uploadConfig.disableLocalStorage) {\n return 'full'\n }\n\n const hasMimeTypeAllowList =\n Array.isArray(uploadConfig.mimeTypes) && uploadConfig.mimeTypes.length > 0\n\n if (hasMimeTypeAllowList || hasTransformFileStages) {\n return 'full'\n }\n\n const isResizableImage = canResizeImage(mimeType)\n // `hasImageAdjustments` and `variants` are the transformer-agnostic projection a file\n // transformer writes back onto the sanitized upload config at startup (see\n // `@payloadcms/transformer-sharp`'s `initSharpCollections`), so core can make this decision\n // without knowing which transformer is registered or how it is configured.\n const hasConfiguredAdjustments = Boolean(\n uploadConfig.hasImageAdjustments ||\n (Array.isArray(uploadConfig.variants) && uploadConfig.variants.length > 0),\n )\n\n if (hasSizeEdits || (isResizableImage && hasConfiguredAdjustments) || isAnimatedImage(mimeType)) {\n return 'full'\n }\n\n if (isResizableImage || isImage(mimeType)) {\n return 'header'\n }\n\n return 'none'\n}\n"],"names":["canResizeImage","isAnimatedImage","isImage","HEADER_PROBE_BYTE_LENGTH","getFileContentRequirement","hasSizeEdits","hasTransformFileStages","mimeType","uploadConfig","disableLocalStorage","hasMimeTypeAllowList","Array","isArray","mimeTypes","length","isResizableImage","hasConfiguredAdjustments","Boolean","hasImageAdjustments","variants"],"mappings":"AAEA,SAASA,cAAc,QAAQ,sBAAqB;AACpD,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,OAAO,QAAQ,eAAc;AAEtC;;;;CAIC,GACD,OAAO,MAAMC,2BAA2B,OAAO,KAAI;AAInD;;;;;;;;;;;;;CAaC,GACD,OAAO,SAASC,0BAA0B,EACxCC,YAAY,EACZC,sBAAsB,EACtBC,QAAQ,EACRC,YAAY,EAgBb;IACC,IAAI,CAACA,aAAaC,mBAAmB,EAAE;QACrC,OAAO;IACT;IAEA,MAAMC,uBACJC,MAAMC,OAAO,CAACJ,aAAaK,SAAS,KAAKL,aAAaK,SAAS,CAACC,MAAM,GAAG;IAE3E,IAAIJ,wBAAwBJ,wBAAwB;QAClD,OAAO;IACT;IAEA,MAAMS,mBAAmBf,eAAeO;IACxC,sFAAsF;IACtF,2EAA2E;IAC3E,4FAA4F;IAC5F,2EAA2E;IAC3E,MAAMS,2BAA2BC,QAC/BT,aAAaU,mBAAmB,IAC7BP,MAAMC,OAAO,CAACJ,aAAaW,QAAQ,KAAKX,aAAaW,QAAQ,CAACL,MAAM,GAAG;IAG5E,IAAIT,gBAAiBU,oBAAoBC,4BAA6Bf,gBAAgBM,WAAW;QAC/F,OAAO;IACT;IAEA,IAAIQ,oBAAoBb,QAAQK,WAAW;QACzC,OAAO;IACT;IAEA,OAAO;AACT"}
1
+ {"version":3,"sources":["../../src/uploads/getFileContentRequirement.ts"],"sourcesContent":["import type { SanitizedUploadConfig } from './types.js'\n\nimport { canResizeImage } from './canResizeImage.js'\nimport { isAnimatedImage } from './isAnimatedImage.js'\nimport { isImage } from './isImage.js'\n\n/**\n * Bytes read from the start of a file to sniff its mime type and, for images, probe its\n * dimensions. Generous enough to cover real-world header/metadata layouts (EXIF, ICC\n * profiles, etc.) while staying tiny next to a multi-gigabyte upload.\n */\nexport const HEADER_PROBE_BYTE_LENGTH = 1024 * 1024\n\nexport type FileContentRequirement = 'full' | 'header' | 'none'\n\n/**\n * Decides how much of an uploaded file's content, if any, is needed to save the document -\n * so a client upload (e.g. Azure's chunkLargeFiles) only pays for what post-processing\n * actually reads instead of always being re-downloaded in full.\n *\n * - `full`: local storage needs the real bytes, or a registered file transformer will adjust\n * the image (`upload.hasImageAdjustments`), or a custom `transformFile` transformer will\n * process the file (`hasTransformFileStages`), or the file is animated, or additional image\n * sizes will be generated from it, or the collection restricts mime types (which also runs\n * SVG/PDF content-safety checks that must see the whole file), or the request itself carries\n * a crop/resize edit (`uploadEdits`) that will be applied to the fetched bytes.\n * - `header`: the file is an image and only its dimensions are needed.\n * - `none`: nothing downstream reads file content at all.\n */\nexport function getFileContentRequirement({\n hasSizeEdits,\n hasTransformFileStages,\n mimeType,\n uploadConfig,\n}: {\n /**\n * Whether the request's `uploadEdits` (crop, heightInPixels, widthInPixels) will resize the\n * fetched file - if so, the full file is needed even when the collection config alone would\n * only require a header probe.\n */\n hasSizeEdits?: boolean\n /**\n * Whether a registered transformer without its own content projection (anything other than a\n * built-in bridge transformer like `sharpTransformer`) will run `transformFile` on this file.\n * Such a transformer reads the whole file, so neither a header probe nor no content is enough.\n */\n hasTransformFileStages?: boolean\n mimeType: string\n uploadConfig: SanitizedUploadConfig\n}): FileContentRequirement {\n if (!uploadConfig.disableLocalStorage) {\n return 'full'\n }\n\n const hasMimeTypeAllowList =\n Array.isArray(uploadConfig.mimeTypes) && uploadConfig.mimeTypes.length > 0\n\n if (hasMimeTypeAllowList || hasTransformFileStages) {\n return 'full'\n }\n\n const isResizableImage = canResizeImage(mimeType)\n // `hasImageAdjustments` and `variants` are the transformer-agnostic projection a file\n // transformer writes back onto the sanitized upload config at startup (see\n // `@payloadcms/transformer-sharp`'s `initSharpCollections`), so core can make this decision\n // without knowing which transformer is registered or how it is configured.\n const hasConfiguredAdjustments = Boolean(\n uploadConfig.hasImageAdjustments ||\n (Array.isArray(uploadConfig.variants) && uploadConfig.variants.length > 0),\n )\n\n if (hasSizeEdits || (isResizableImage && hasConfiguredAdjustments) || isAnimatedImage(mimeType)) {\n return 'full'\n }\n\n if (isResizableImage || isImage(mimeType)) {\n return 'header'\n }\n\n return 'none'\n}\n"],"names":["canResizeImage","isAnimatedImage","isImage","HEADER_PROBE_BYTE_LENGTH","getFileContentRequirement","hasSizeEdits","hasTransformFileStages","mimeType","uploadConfig","disableLocalStorage","hasMimeTypeAllowList","Array","isArray","mimeTypes","length","isResizableImage","hasConfiguredAdjustments","Boolean","hasImageAdjustments","variants"],"mappings":"AAEA,SAASA,cAAc,QAAQ,sBAAqB;AACpD,SAASC,eAAe,QAAQ,uBAAsB;AACtD,SAASC,OAAO,QAAQ,eAAc;AAEtC;;;;CAIC,GACD,OAAO,MAAMC,2BAA2B,OAAO,KAAI;AAInD;;;;;;;;;;;;;CAaC,GACD,OAAO,SAASC,0BAA0B,EACxCC,YAAY,EACZC,sBAAsB,EACtBC,QAAQ,EACRC,YAAY,EAgBb;IACC,IAAI,CAACA,aAAaC,mBAAmB,EAAE;QACrC,OAAO;IACT;IAEA,MAAMC,uBACJC,MAAMC,OAAO,CAACJ,aAAaK,SAAS,KAAKL,aAAaK,SAAS,CAACC,MAAM,GAAG;IAE3E,IAAIJ,wBAAwBJ,wBAAwB;QAClD,OAAO;IACT;IAEA,MAAMS,mBAAmBf,eAAeO;IACxC,sFAAsF;IACtF,2EAA2E;IAC3E,4FAA4F;IAC5F,2EAA2E;IAC3E,MAAMS,2BAA2BC,QAC/BT,aAAaU,mBAAmB,IAC/BP,MAAMC,OAAO,CAACJ,aAAaW,QAAQ,KAAKX,aAAaW,QAAQ,CAACL,MAAM,GAAG;IAG1E,IAAIT,gBAAiBU,oBAAoBC,4BAA6Bf,gBAAgBM,WAAW;QAC/F,OAAO;IACT;IAEA,IAAIQ,oBAAoBb,QAAQK,WAAW;QACzC,OAAO;IACT;IAEA,OAAO;AACT"}