payload 4.0.0-internal.4cbdd50 → 4.0.0-internal.4e1f822

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 (1347) hide show
  1. package/LICENSE.md +1 -1
  2. package/bin.js +14 -10
  3. package/dist/__testing__/predefinedMigration.d.ts +4 -3
  4. package/dist/__testing__/predefinedMigration.d.ts.map +1 -1
  5. package/dist/admin/RichText.d.ts +2 -22
  6. package/dist/admin/RichText.d.ts.map +1 -1
  7. package/dist/admin/RichText.js.map +1 -1
  8. package/dist/admin/adapters/devReload.d.ts +13 -0
  9. package/dist/admin/adapters/devReload.d.ts.map +1 -1
  10. package/dist/admin/adapters/devReload.js +14 -1
  11. package/dist/admin/adapters/devReload.js.map +1 -1
  12. package/dist/admin/adapters/router.d.ts +8 -0
  13. package/dist/admin/adapters/router.d.ts.map +1 -1
  14. package/dist/admin/adapters/router.js.map +1 -1
  15. package/dist/admin/forms/Field.d.ts +2 -2
  16. package/dist/admin/forms/Field.d.ts.map +1 -1
  17. package/dist/admin/forms/Field.js.map +1 -1
  18. package/dist/admin/forms/Form.d.ts +0 -29
  19. package/dist/admin/forms/Form.d.ts.map +1 -1
  20. package/dist/admin/forms/Form.js.map +1 -1
  21. package/dist/admin/functions/index.d.ts +12 -10
  22. package/dist/admin/functions/index.d.ts.map +1 -1
  23. package/dist/admin/functions/index.js.map +1 -1
  24. package/dist/admin/types.d.ts +4 -3
  25. package/dist/admin/types.d.ts.map +1 -1
  26. package/dist/admin/types.js.map +1 -1
  27. package/dist/admin/views/index.d.ts +2 -2
  28. package/dist/admin/views/index.d.ts.map +1 -1
  29. package/dist/admin/views/index.js.map +1 -1
  30. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  31. package/dist/auth/baseFields/apiKey.js +16 -1
  32. package/dist/auth/baseFields/apiKey.js.map +1 -1
  33. package/dist/auth/cookies.d.ts +2 -2
  34. package/dist/auth/cookies.d.ts.map +1 -1
  35. package/dist/auth/crypto.d.ts +73 -2
  36. package/dist/auth/crypto.d.ts.map +1 -1
  37. package/dist/auth/crypto.js +90 -13
  38. package/dist/auth/crypto.js.map +1 -1
  39. package/dist/auth/defaultAccess.d.ts.map +1 -1
  40. package/dist/auth/endpoints/login.d.ts.map +1 -1
  41. package/dist/auth/endpoints/login.js +2 -11
  42. package/dist/auth/endpoints/login.js.map +1 -1
  43. package/dist/auth/endpoints/refresh.d.ts.map +1 -1
  44. package/dist/auth/endpoints/refresh.js +4 -6
  45. package/dist/auth/endpoints/refresh.js.map +1 -1
  46. package/dist/auth/ensureUsernameOrEmail.d.ts.map +1 -1
  47. package/dist/auth/executeAccess.d.ts +2 -1
  48. package/dist/auth/executeAccess.d.ts.map +1 -1
  49. package/dist/auth/executeAccess.js +2 -1
  50. package/dist/auth/executeAccess.js.map +1 -1
  51. package/dist/auth/executeAuthStrategies.d.ts.map +1 -1
  52. package/dist/auth/extractAccessFromPermission.d.ts.map +1 -1
  53. package/dist/auth/extractJWT.d.ts +1 -1
  54. package/dist/auth/extractJWT.d.ts.map +1 -1
  55. package/dist/auth/getAccessResults.js +1 -0
  56. package/dist/auth/getAccessResults.js.map +1 -1
  57. package/dist/auth/getAuthFields.d.ts.map +1 -1
  58. package/dist/auth/getFieldsToSign.d.ts +1 -1
  59. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  60. package/dist/auth/getLoginOptions.d.ts +1 -1
  61. package/dist/auth/getLoginOptions.d.ts.map +1 -1
  62. package/dist/auth/getLoginOptions.js.map +1 -1
  63. package/dist/auth/isUserLocked.d.ts.map +1 -1
  64. package/dist/auth/jwt.d.ts.map +1 -1
  65. package/dist/auth/loginWithCookie.d.ts +33 -0
  66. package/dist/auth/loginWithCookie.d.ts.map +1 -0
  67. package/dist/auth/loginWithCookie.js +34 -0
  68. package/dist/auth/loginWithCookie.js.map +1 -0
  69. package/dist/auth/operations/access.d.ts.map +1 -1
  70. package/dist/auth/operations/access.js +3 -9
  71. package/dist/auth/operations/access.js.map +1 -1
  72. package/dist/auth/operations/auth.d.ts +2 -2
  73. package/dist/auth/operations/auth.d.ts.map +1 -1
  74. package/dist/auth/operations/auth.js +15 -21
  75. package/dist/auth/operations/auth.js.map +1 -1
  76. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  77. package/dist/auth/operations/init.d.ts.map +1 -1
  78. package/dist/auth/operations/local/auth.d.ts.map +1 -1
  79. package/dist/auth/operations/login.d.ts +2 -1
  80. package/dist/auth/operations/login.d.ts.map +1 -1
  81. package/dist/auth/operations/login.js.map +1 -1
  82. package/dist/auth/operations/logout.d.ts.map +1 -1
  83. package/dist/auth/operations/me.d.ts +2 -9
  84. package/dist/auth/operations/me.d.ts.map +1 -1
  85. package/dist/auth/operations/me.js +0 -6
  86. package/dist/auth/operations/me.js.map +1 -1
  87. package/dist/auth/operations/refresh.d.ts +0 -7
  88. package/dist/auth/operations/refresh.d.ts.map +1 -1
  89. package/dist/auth/operations/refresh.js +9 -9
  90. package/dist/auth/operations/refresh.js.map +1 -1
  91. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  92. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  93. package/dist/auth/operations/resetPassword.js.map +1 -1
  94. package/dist/auth/operations/unlock.d.ts.map +1 -1
  95. package/dist/auth/operations/unlock.js +1 -0
  96. package/dist/auth/operations/unlock.js.map +1 -1
  97. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  98. package/dist/auth/rotateSecret.d.ts +51 -0
  99. package/dist/auth/rotateSecret.d.ts.map +1 -0
  100. package/dist/auth/rotateSecret.js +131 -0
  101. package/dist/auth/rotateSecret.js.map +1 -0
  102. package/dist/auth/sendVerificationEmail.d.ts +2 -2
  103. package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
  104. package/dist/auth/sendVerificationEmail.js +1 -1
  105. package/dist/auth/sendVerificationEmail.js.map +1 -1
  106. package/dist/auth/serverFunctions/cookies.d.ts +47 -0
  107. package/dist/auth/serverFunctions/cookies.d.ts.map +1 -0
  108. package/dist/auth/serverFunctions/cookies.js +52 -0
  109. package/dist/auth/serverFunctions/cookies.js.map +1 -0
  110. package/dist/auth/serverFunctions/login.d.ts +29 -0
  111. package/dist/auth/serverFunctions/login.d.ts.map +1 -0
  112. package/dist/auth/serverFunctions/login.js +63 -0
  113. package/dist/auth/serverFunctions/login.js.map +1 -0
  114. package/dist/auth/serverFunctions/logout.d.ts +17 -0
  115. package/dist/auth/serverFunctions/logout.d.ts.map +1 -0
  116. package/dist/auth/serverFunctions/logout.js +58 -0
  117. package/dist/auth/serverFunctions/logout.js.map +1 -0
  118. package/dist/auth/serverFunctions/refresh.d.ts +17 -0
  119. package/dist/auth/serverFunctions/refresh.d.ts.map +1 -0
  120. package/dist/auth/serverFunctions/refresh.js +61 -0
  121. package/dist/auth/serverFunctions/refresh.js.map +1 -0
  122. package/dist/auth/sessions.d.ts +4 -5
  123. package/dist/auth/sessions.d.ts.map +1 -1
  124. package/dist/auth/sessions.js +5 -3
  125. package/dist/auth/sessions.js.map +1 -1
  126. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  127. package/dist/auth/strategies/apiKey.js +5 -3
  128. package/dist/auth/strategies/apiKey.js.map +1 -1
  129. package/dist/auth/strategies/jwt.d.ts.map +1 -1
  130. package/dist/auth/strategies/jwt.js +23 -2
  131. package/dist/auth/strategies/jwt.js.map +1 -1
  132. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  133. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
  134. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts +2 -2
  135. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  136. package/dist/auth/strategies/local/incrementLoginAttempts.js +1 -1
  137. package/dist/auth/strategies/local/incrementLoginAttempts.js.map +1 -1
  138. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  139. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  140. package/dist/auth/types.d.ts +34 -35
  141. package/dist/auth/types.d.ts.map +1 -1
  142. package/dist/auth/types.js.map +1 -1
  143. package/dist/auth/withBaseAccess.d.ts +22 -0
  144. package/dist/auth/withBaseAccess.d.ts.map +1 -0
  145. package/dist/auth/withBaseAccess.js +61 -0
  146. package/dist/auth/withBaseAccess.js.map +1 -0
  147. package/dist/cli/commands/build/build.d.ts +44 -0
  148. package/dist/cli/commands/build/build.d.ts.map +1 -0
  149. package/dist/cli/commands/build/build.js +225 -0
  150. package/dist/cli/commands/build/build.js.map +1 -0
  151. package/dist/cli/commands/build/build.spec.js +582 -0
  152. package/dist/cli/commands/build/build.spec.js.map +1 -0
  153. package/dist/cli/commands/build/index.d.ts +2 -0
  154. package/dist/cli/commands/build/index.d.ts.map +1 -0
  155. package/dist/cli/commands/build/index.js +26 -0
  156. package/dist/cli/commands/build/index.js.map +1 -0
  157. package/dist/cli/commands/collections/countDocuments.d.ts +2 -0
  158. package/dist/cli/commands/collections/countDocuments.d.ts.map +1 -0
  159. package/dist/cli/commands/collections/countDocuments.js +37 -0
  160. package/dist/cli/commands/collections/countDocuments.js.map +1 -0
  161. package/dist/cli/commands/collections/countVersions.d.ts +2 -0
  162. package/dist/cli/commands/collections/countVersions.d.ts.map +1 -0
  163. package/dist/cli/commands/collections/countVersions.js +36 -0
  164. package/dist/cli/commands/collections/countVersions.js.map +1 -0
  165. package/dist/cli/commands/collections/createDocuments.d.ts +2 -0
  166. package/dist/cli/commands/collections/createDocuments.d.ts.map +1 -0
  167. package/dist/cli/commands/collections/createDocuments.js +126 -0
  168. package/dist/cli/commands/collections/createDocuments.js.map +1 -0
  169. package/dist/cli/commands/collections/deleteDocuments.d.ts +2 -0
  170. package/dist/cli/commands/collections/deleteDocuments.d.ts.map +1 -0
  171. package/dist/cli/commands/collections/deleteDocuments.js +60 -0
  172. package/dist/cli/commands/collections/deleteDocuments.js.map +1 -0
  173. package/dist/cli/commands/collections/duplicateDocument.d.ts +2 -0
  174. package/dist/cli/commands/collections/duplicateDocument.d.ts.map +1 -0
  175. package/dist/cli/commands/collections/duplicateDocument.js +103 -0
  176. package/dist/cli/commands/collections/duplicateDocument.js.map +1 -0
  177. package/dist/cli/commands/collections/findDistinct.d.ts +2 -0
  178. package/dist/cli/commands/collections/findDistinct.d.ts.map +1 -0
  179. package/dist/cli/commands/collections/findDistinct.js +52 -0
  180. package/dist/cli/commands/collections/findDistinct.js.map +1 -0
  181. package/dist/cli/commands/collections/findDocuments.d.ts +2 -0
  182. package/dist/cli/commands/collections/findDocuments.d.ts.map +1 -0
  183. package/dist/cli/commands/collections/findDocuments.js +75 -0
  184. package/dist/cli/commands/collections/findDocuments.js.map +1 -0
  185. package/dist/cli/commands/collections/findVersionByID.d.ts +2 -0
  186. package/dist/cli/commands/collections/findVersionByID.d.ts.map +1 -0
  187. package/dist/cli/commands/collections/findVersionByID.js +49 -0
  188. package/dist/cli/commands/collections/findVersionByID.js.map +1 -0
  189. package/dist/cli/commands/collections/findVersions.d.ts +2 -0
  190. package/dist/cli/commands/collections/findVersions.d.ts.map +1 -0
  191. package/dist/cli/commands/collections/findVersions.js +57 -0
  192. package/dist/cli/commands/collections/findVersions.js.map +1 -0
  193. package/dist/cli/commands/collections/getCollectionSchema.d.ts +2 -0
  194. package/dist/cli/commands/collections/getCollectionSchema.d.ts.map +1 -0
  195. package/dist/cli/commands/collections/getCollectionSchema.js +49 -0
  196. package/dist/cli/commands/collections/getCollectionSchema.js.map +1 -0
  197. package/dist/cli/commands/collections/restoreVersion.d.ts +2 -0
  198. package/dist/cli/commands/collections/restoreVersion.d.ts.map +1 -0
  199. package/dist/cli/commands/collections/restoreVersion.js +48 -0
  200. package/dist/cli/commands/collections/restoreVersion.js.map +1 -0
  201. package/dist/cli/commands/collections/updateDocument.d.ts +2 -0
  202. package/dist/cli/commands/collections/updateDocument.d.ts.map +1 -0
  203. package/dist/cli/commands/collections/updateDocument.js +178 -0
  204. package/dist/cli/commands/collections/updateDocument.js.map +1 -0
  205. package/dist/cli/commands/data/input.d.ts +10 -0
  206. package/dist/cli/commands/data/input.d.ts.map +1 -0
  207. package/dist/cli/commands/data/input.js +57 -0
  208. package/dist/cli/commands/data/input.js.map +1 -0
  209. package/dist/cli/commands/data/utilities.d.ts +65 -0
  210. package/dist/cli/commands/data/utilities.d.ts.map +1 -0
  211. package/dist/cli/commands/data/utilities.js +67 -0
  212. package/dist/cli/commands/data/utilities.js.map +1 -0
  213. package/dist/cli/commands/generateDBSchema.d.ts +2 -0
  214. package/dist/cli/commands/generateDBSchema.d.ts.map +1 -0
  215. package/dist/cli/commands/generateDBSchema.js +29 -0
  216. package/dist/cli/commands/generateDBSchema.js.map +1 -0
  217. package/dist/cli/commands/generateImportMap/frameworkConventions.d.ts +8 -0
  218. package/dist/cli/commands/generateImportMap/frameworkConventions.d.ts.map +1 -0
  219. package/dist/cli/commands/generateImportMap/frameworkConventions.js +8 -0
  220. package/dist/cli/commands/generateImportMap/frameworkConventions.js.map +1 -0
  221. package/dist/{bin/generateImportMap/index.d.ts → cli/commands/generateImportMap/generateImportMap.d.ts} +8 -4
  222. package/dist/cli/commands/generateImportMap/generateImportMap.d.ts.map +1 -0
  223. package/dist/{bin/generateImportMap/index.js → cli/commands/generateImportMap/generateImportMap.js} +9 -4
  224. package/dist/cli/commands/generateImportMap/generateImportMap.js.map +1 -0
  225. package/dist/cli/commands/generateImportMap/generateImportMap.spec.js.map +1 -0
  226. package/dist/cli/commands/generateImportMap/index.d.ts +2 -0
  227. package/dist/cli/commands/generateImportMap/index.d.ts.map +1 -0
  228. package/dist/cli/commands/generateImportMap/index.js +18 -0
  229. package/dist/cli/commands/generateImportMap/index.js.map +1 -0
  230. package/dist/{bin → cli/commands}/generateImportMap/iterateCollections.d.ts +3 -3
  231. package/dist/cli/commands/generateImportMap/iterateCollections.d.ts.map +1 -0
  232. package/dist/{bin → cli/commands}/generateImportMap/iterateCollections.js +10 -0
  233. package/dist/cli/commands/generateImportMap/iterateCollections.js.map +1 -0
  234. package/dist/{bin → cli/commands}/generateImportMap/iterateConfig.d.ts +2 -2
  235. package/dist/cli/commands/generateImportMap/iterateConfig.d.ts.map +1 -0
  236. package/dist/{bin → cli/commands}/generateImportMap/iterateConfig.js +1 -1
  237. package/dist/cli/commands/generateImportMap/iterateConfig.js.map +1 -0
  238. package/dist/{bin → cli/commands}/generateImportMap/iterateFields.d.ts +3 -3
  239. package/dist/cli/commands/generateImportMap/iterateFields.d.ts.map +1 -0
  240. package/dist/cli/commands/generateImportMap/iterateFields.js.map +1 -0
  241. package/dist/{bin → cli/commands}/generateImportMap/iterateGlobals.d.ts +3 -3
  242. package/dist/cli/commands/generateImportMap/iterateGlobals.d.ts.map +1 -0
  243. package/dist/cli/commands/generateImportMap/iterateGlobals.js.map +1 -0
  244. package/dist/{bin → cli/commands}/generateImportMap/utilities/addPayloadComponentToImportMap.d.ts +2 -2
  245. package/dist/cli/commands/generateImportMap/utilities/addPayloadComponentToImportMap.d.ts.map +1 -0
  246. package/dist/cli/commands/generateImportMap/utilities/addPayloadComponentToImportMap.js.map +1 -0
  247. package/dist/{bin → cli/commands}/generateImportMap/utilities/getFromImportMap.d.ts +2 -2
  248. package/dist/cli/commands/generateImportMap/utilities/getFromImportMap.d.ts.map +1 -0
  249. package/dist/cli/commands/generateImportMap/utilities/getFromImportMap.js.map +1 -0
  250. package/dist/cli/commands/generateImportMap/utilities/getImportMapToBaseDirPath.d.ts.map +1 -0
  251. package/dist/cli/commands/generateImportMap/utilities/getImportMapToBaseDirPath.js.map +1 -0
  252. package/dist/{bin → cli/commands}/generateImportMap/utilities/parsePayloadComponent.d.ts +1 -1
  253. package/dist/cli/commands/generateImportMap/utilities/parsePayloadComponent.d.ts.map +1 -0
  254. package/dist/cli/commands/generateImportMap/utilities/parsePayloadComponent.js.map +1 -0
  255. package/dist/cli/commands/generateImportMap/utilities/resolveImportMapFilePath.d.ts.map +1 -0
  256. package/dist/{bin → cli/commands}/generateImportMap/utilities/resolveImportMapFilePath.js +5 -4
  257. package/dist/cli/commands/generateImportMap/utilities/resolveImportMapFilePath.js.map +1 -0
  258. package/dist/cli/commands/generateTypes.d.ts +12 -0
  259. package/dist/cli/commands/generateTypes.d.ts.map +1 -0
  260. package/dist/{bin → cli/commands}/generateTypes.js +33 -7
  261. package/dist/cli/commands/generateTypes.js.map +1 -0
  262. package/dist/cli/commands/getConfigInfo.d.ts +2 -0
  263. package/dist/cli/commands/getConfigInfo.d.ts.map +1 -0
  264. package/dist/cli/commands/getConfigInfo.js +23 -0
  265. package/dist/cli/commands/getConfigInfo.js.map +1 -0
  266. package/dist/cli/commands/globals/countGlobalVersions.d.ts +2 -0
  267. package/dist/cli/commands/globals/countGlobalVersions.d.ts.map +1 -0
  268. package/dist/cli/commands/globals/countGlobalVersions.js +36 -0
  269. package/dist/cli/commands/globals/countGlobalVersions.js.map +1 -0
  270. package/dist/cli/commands/globals/findGlobal.d.ts +2 -0
  271. package/dist/cli/commands/globals/findGlobal.d.ts.map +1 -0
  272. package/dist/cli/commands/globals/findGlobal.js +42 -0
  273. package/dist/cli/commands/globals/findGlobal.js.map +1 -0
  274. package/dist/cli/commands/globals/findGlobalVersionByID.d.ts +2 -0
  275. package/dist/cli/commands/globals/findGlobalVersionByID.d.ts.map +1 -0
  276. package/dist/cli/commands/globals/findGlobalVersionByID.js +47 -0
  277. package/dist/cli/commands/globals/findGlobalVersionByID.js.map +1 -0
  278. package/dist/cli/commands/globals/findGlobalVersions.d.ts +2 -0
  279. package/dist/cli/commands/globals/findGlobalVersions.d.ts.map +1 -0
  280. package/dist/cli/commands/globals/findGlobalVersions.js +55 -0
  281. package/dist/cli/commands/globals/findGlobalVersions.js.map +1 -0
  282. package/dist/cli/commands/globals/getGlobalSchema.d.ts +2 -0
  283. package/dist/cli/commands/globals/getGlobalSchema.d.ts.map +1 -0
  284. package/dist/cli/commands/globals/getGlobalSchema.js +34 -0
  285. package/dist/cli/commands/globals/getGlobalSchema.js.map +1 -0
  286. package/dist/cli/commands/globals/restoreGlobalVersion.d.ts +2 -0
  287. package/dist/cli/commands/globals/restoreGlobalVersion.d.ts.map +1 -0
  288. package/dist/cli/commands/globals/restoreGlobalVersion.js +47 -0
  289. package/dist/cli/commands/globals/restoreGlobalVersion.js.map +1 -0
  290. package/dist/cli/commands/globals/updateGlobal.d.ts +2 -0
  291. package/dist/cli/commands/globals/updateGlobal.d.ts.map +1 -0
  292. package/dist/cli/commands/globals/updateGlobal.js +93 -0
  293. package/dist/cli/commands/globals/updateGlobal.js.map +1 -0
  294. package/dist/cli/commands/help.d.ts +2 -0
  295. package/dist/cli/commands/help.d.ts.map +1 -0
  296. package/dist/cli/commands/help.js +40 -0
  297. package/dist/cli/commands/help.js.map +1 -0
  298. package/dist/cli/commands/info.d.ts +2 -0
  299. package/dist/cli/commands/info.d.ts.map +1 -0
  300. package/dist/cli/commands/info.js +78 -0
  301. package/dist/cli/commands/info.js.map +1 -0
  302. package/dist/cli/commands/jobs/handleSchedules.d.ts +2 -0
  303. package/dist/cli/commands/jobs/handleSchedules.d.ts.map +1 -0
  304. package/dist/cli/commands/jobs/handleSchedules.js +17 -0
  305. package/dist/cli/commands/jobs/handleSchedules.js.map +1 -0
  306. package/dist/cli/commands/jobs/run.d.ts +2 -0
  307. package/dist/cli/commands/jobs/run.d.ts.map +1 -0
  308. package/dist/cli/commands/jobs/run.js +29 -0
  309. package/dist/cli/commands/jobs/run.js.map +1 -0
  310. package/dist/cli/commands/migrate/create.d.ts +2 -0
  311. package/dist/cli/commands/migrate/create.d.ts.map +1 -0
  312. package/dist/cli/commands/migrate/create.js +44 -0
  313. package/dist/cli/commands/migrate/create.js.map +1 -0
  314. package/dist/cli/commands/migrate/down.d.ts +2 -0
  315. package/dist/cli/commands/migrate/down.d.ts.map +1 -0
  316. package/dist/cli/commands/migrate/down.js +22 -0
  317. package/dist/cli/commands/migrate/down.js.map +1 -0
  318. package/dist/cli/commands/migrate/fresh.d.ts +2 -0
  319. package/dist/cli/commands/migrate/fresh.d.ts.map +1 -0
  320. package/dist/cli/commands/migrate/fresh.js +28 -0
  321. package/dist/cli/commands/migrate/fresh.js.map +1 -0
  322. package/dist/cli/commands/migrate/initialize.d.ts +11 -0
  323. package/dist/cli/commands/migrate/initialize.d.ts.map +1 -0
  324. package/dist/cli/commands/migrate/initialize.js +17 -0
  325. package/dist/cli/commands/migrate/initialize.js.map +1 -0
  326. package/dist/cli/commands/migrate/refresh.d.ts +2 -0
  327. package/dist/cli/commands/migrate/refresh.d.ts.map +1 -0
  328. package/dist/cli/commands/migrate/refresh.js +22 -0
  329. package/dist/cli/commands/migrate/refresh.js.map +1 -0
  330. package/dist/cli/commands/migrate/reset.d.ts +2 -0
  331. package/dist/cli/commands/migrate/reset.d.ts.map +1 -0
  332. package/dist/cli/commands/migrate/reset.js +22 -0
  333. package/dist/cli/commands/migrate/reset.js.map +1 -0
  334. package/dist/cli/commands/migrate/run.d.ts +2 -0
  335. package/dist/cli/commands/migrate/run.d.ts.map +1 -0
  336. package/dist/cli/commands/migrate/run.js +28 -0
  337. package/dist/cli/commands/migrate/run.js.map +1 -0
  338. package/dist/cli/commands/migrate/status.d.ts +2 -0
  339. package/dist/cli/commands/migrate/status.d.ts.map +1 -0
  340. package/dist/cli/commands/migrate/status.js +22 -0
  341. package/dist/cli/commands/migrate/status.js.map +1 -0
  342. package/dist/cli/commands/run.d.ts +2 -0
  343. package/dist/cli/commands/run.d.ts.map +1 -0
  344. package/dist/cli/commands/run.js +45 -0
  345. package/dist/cli/commands/run.js.map +1 -0
  346. package/dist/cli/defineCLICommand.d.ts +32 -0
  347. package/dist/cli/defineCLICommand.d.ts.map +1 -0
  348. package/dist/cli/defineCLICommand.js +26 -0
  349. package/dist/cli/defineCLICommand.js.map +1 -0
  350. package/dist/cli/index.d.ts +5 -0
  351. package/dist/cli/index.d.ts.map +1 -0
  352. package/dist/cli/index.js +73 -0
  353. package/dist/cli/index.js.map +1 -0
  354. package/dist/cli/index.spec.js +402 -0
  355. package/dist/cli/index.spec.js.map +1 -0
  356. package/dist/cli/program/createHelp.d.ts +8 -0
  357. package/dist/cli/program/createHelp.d.ts.map +1 -0
  358. package/dist/cli/program/createHelp.js +22 -0
  359. package/dist/cli/program/createHelp.js.map +1 -0
  360. package/dist/cli/program/loadCommands.d.ts +12 -0
  361. package/dist/cli/program/loadCommands.d.ts.map +1 -0
  362. package/dist/cli/program/loadCommands.js +62 -0
  363. package/dist/cli/program/loadCommands.js.map +1 -0
  364. package/dist/cli/program/normalizeHelpArguments.d.ts +12 -0
  365. package/dist/cli/program/normalizeHelpArguments.d.ts.map +1 -0
  366. package/dist/cli/program/normalizeHelpArguments.js +36 -0
  367. package/dist/cli/program/normalizeHelpArguments.js.map +1 -0
  368. package/dist/cli/program/registerCommand.d.ts +10 -0
  369. package/dist/cli/program/registerCommand.d.ts.map +1 -0
  370. package/dist/cli/program/registerCommand.js +185 -0
  371. package/dist/cli/program/registerCommand.js.map +1 -0
  372. package/dist/cli/runtime/createRuntime.d.ts +9 -0
  373. package/dist/cli/runtime/createRuntime.d.ts.map +1 -0
  374. package/dist/cli/runtime/createRuntime.js +66 -0
  375. package/dist/cli/runtime/createRuntime.js.map +1 -0
  376. package/dist/cli/runtime/getCommandInput.d.ts +13 -0
  377. package/dist/cli/runtime/getCommandInput.d.ts.map +1 -0
  378. package/dist/cli/runtime/getCommandInput.js +78 -0
  379. package/dist/cli/runtime/getCommandInput.js.map +1 -0
  380. package/dist/cli/runtime/invokeCommand.d.ts +23 -0
  381. package/dist/cli/runtime/invokeCommand.d.ts.map +1 -0
  382. package/dist/cli/runtime/invokeCommand.js +117 -0
  383. package/dist/cli/runtime/invokeCommand.js.map +1 -0
  384. package/dist/cli/runtime/loadEnv.d.ts.map +1 -0
  385. package/dist/{bin → cli/runtime}/loadEnv.js +1 -1
  386. package/dist/cli/runtime/loadEnv.js.map +1 -0
  387. package/dist/cli/runtime/output.d.ts +42 -0
  388. package/dist/cli/runtime/output.d.ts.map +1 -0
  389. package/dist/cli/runtime/output.js +91 -0
  390. package/dist/cli/runtime/output.js.map +1 -0
  391. package/dist/cli/runtime/redirectOutputToStderr.d.ts +3 -0
  392. package/dist/cli/runtime/redirectOutputToStderr.d.ts.map +1 -0
  393. package/dist/cli/runtime/redirectOutputToStderr.js +17 -0
  394. package/dist/cli/runtime/redirectOutputToStderr.js.map +1 -0
  395. package/dist/collections/config/client.d.ts +11 -5
  396. package/dist/collections/config/client.d.ts.map +1 -1
  397. package/dist/collections/config/client.js +7 -1
  398. package/dist/collections/config/client.js.map +1 -1
  399. package/dist/collections/config/defaults.d.ts +4 -8
  400. package/dist/collections/config/defaults.d.ts.map +1 -1
  401. package/dist/collections/config/defaults.js +37 -47
  402. package/dist/collections/config/defaults.js.map +1 -1
  403. package/dist/collections/config/sanitize.d.ts +4 -8
  404. package/dist/collections/config/sanitize.d.ts.map +1 -1
  405. package/dist/collections/config/sanitize.js +31 -21
  406. package/dist/collections/config/sanitize.js.map +1 -1
  407. package/dist/collections/config/sanitize.spec.js +363 -1
  408. package/dist/collections/config/sanitize.spec.js.map +1 -1
  409. package/dist/collections/config/sanitizeCompoundIndexes.d.ts.map +1 -1
  410. package/dist/collections/config/types.d.ts +62 -51
  411. package/dist/collections/config/types.d.ts.map +1 -1
  412. package/dist/collections/config/types.js.map +1 -1
  413. package/dist/collections/config/useAsTitle.d.ts.map +1 -1
  414. package/dist/collections/config/useAsTitle.spec.js +27 -27
  415. package/dist/collections/config/useAsTitle.spec.js.map +1 -1
  416. package/dist/collections/dataloader.d.ts +1 -1
  417. package/dist/collections/dataloader.d.ts.map +1 -1
  418. package/dist/collections/operations/count.d.ts.map +1 -1
  419. package/dist/collections/operations/count.js +65 -70
  420. package/dist/collections/operations/count.js.map +1 -1
  421. package/dist/collections/operations/countVersions.d.ts.map +1 -1
  422. package/dist/collections/operations/countVersions.js +61 -66
  423. package/dist/collections/operations/countVersions.js.map +1 -1
  424. package/dist/collections/operations/create.d.ts.map +1 -1
  425. package/dist/collections/operations/create.js +22 -0
  426. package/dist/collections/operations/create.js.map +1 -1
  427. package/dist/collections/operations/delete.d.ts.map +1 -1
  428. package/dist/collections/operations/delete.js +1 -0
  429. package/dist/collections/operations/delete.js.map +1 -1
  430. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  431. package/dist/collections/operations/deleteByID.js +1 -0
  432. package/dist/collections/operations/deleteByID.js.map +1 -1
  433. package/dist/collections/operations/docAccess.d.ts.map +1 -1
  434. package/dist/collections/operations/docAccess.js +19 -25
  435. package/dist/collections/operations/docAccess.js.map +1 -1
  436. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  437. package/dist/collections/operations/find.d.ts.map +1 -1
  438. package/dist/collections/operations/find.js +248 -246
  439. package/dist/collections/operations/find.js.map +1 -1
  440. package/dist/collections/operations/findByID.d.ts.map +1 -1
  441. package/dist/collections/operations/findByID.js +215 -220
  442. package/dist/collections/operations/findByID.js.map +1 -1
  443. package/dist/collections/operations/findDistinct.d.ts.map +1 -1
  444. package/dist/collections/operations/findDistinct.js +161 -158
  445. package/dist/collections/operations/findDistinct.js.map +1 -1
  446. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  447. package/dist/collections/operations/findVersionByID.js +131 -136
  448. package/dist/collections/operations/findVersionByID.js.map +1 -1
  449. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  450. package/dist/collections/operations/findVersions.js +152 -149
  451. package/dist/collections/operations/findVersions.js.map +1 -1
  452. package/dist/collections/operations/inputSchemas.d.ts +877 -0
  453. package/dist/collections/operations/inputSchemas.d.ts.map +1 -0
  454. package/dist/collections/operations/inputSchemas.js +217 -0
  455. package/dist/collections/operations/inputSchemas.js.map +1 -0
  456. package/dist/collections/operations/local/count.d.ts +3 -3
  457. package/dist/collections/operations/local/count.d.ts.map +1 -1
  458. package/dist/collections/operations/local/count.js.map +1 -1
  459. package/dist/collections/operations/local/countVersions.d.ts +3 -3
  460. package/dist/collections/operations/local/countVersions.d.ts.map +1 -1
  461. package/dist/collections/operations/local/countVersions.js.map +1 -1
  462. package/dist/collections/operations/local/create.d.ts +3 -3
  463. package/dist/collections/operations/local/create.d.ts.map +1 -1
  464. package/dist/collections/operations/local/create.js.map +1 -1
  465. package/dist/collections/operations/local/delete.d.ts +3 -3
  466. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  467. package/dist/collections/operations/local/delete.js.map +1 -1
  468. package/dist/collections/operations/local/duplicate.d.ts +3 -3
  469. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  470. package/dist/collections/operations/local/duplicate.js.map +1 -1
  471. package/dist/collections/operations/local/find.d.ts +3 -3
  472. package/dist/collections/operations/local/find.d.ts.map +1 -1
  473. package/dist/collections/operations/local/find.js.map +1 -1
  474. package/dist/collections/operations/local/findByID.d.ts +3 -3
  475. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  476. package/dist/collections/operations/local/findByID.js.map +1 -1
  477. package/dist/collections/operations/local/findDistinct.d.ts +2 -2
  478. package/dist/collections/operations/local/findDistinct.d.ts.map +1 -1
  479. package/dist/collections/operations/local/findDistinct.js.map +1 -1
  480. package/dist/collections/operations/local/findVersionByID.d.ts +3 -3
  481. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  482. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  483. package/dist/collections/operations/local/findVersions.d.ts +3 -3
  484. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  485. package/dist/collections/operations/local/findVersions.js.map +1 -1
  486. package/dist/collections/operations/local/restoreVersion.d.ts +3 -3
  487. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  488. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  489. package/dist/collections/operations/local/update.d.ts +3 -3
  490. package/dist/collections/operations/local/update.d.ts.map +1 -1
  491. package/dist/collections/operations/local/update.js.map +1 -1
  492. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  493. package/dist/collections/operations/restoreVersion.js +8 -4
  494. package/dist/collections/operations/restoreVersion.js.map +1 -1
  495. package/dist/collections/operations/update.d.ts.map +1 -1
  496. package/dist/collections/operations/update.js +20 -1
  497. package/dist/collections/operations/update.js.map +1 -1
  498. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  499. package/dist/collections/operations/updateByID.js +13 -0
  500. package/dist/collections/operations/updateByID.js.map +1 -1
  501. package/dist/collections/operations/utilities/buildAfterOperation.d.ts +1 -1
  502. package/dist/collections/operations/utilities/buildAfterOperation.d.ts.map +1 -1
  503. package/dist/collections/operations/utilities/copyDataWithFreshRowIDs.d.ts.map +1 -1
  504. package/dist/collections/operations/utilities/sanitizeSortQuery.d.ts.map +1 -1
  505. package/dist/collections/operations/utilities/types.d.ts +20 -29
  506. package/dist/collections/operations/utilities/types.d.ts.map +1 -1
  507. package/dist/collections/operations/utilities/types.js.map +1 -1
  508. package/dist/collections/operations/utilities/update.d.ts.map +1 -1
  509. package/dist/config/build.js +1 -1
  510. package/dist/config/build.js.map +1 -1
  511. package/dist/config/client.d.ts +4 -4
  512. package/dist/config/client.d.ts.map +1 -1
  513. package/dist/config/client.js +2 -1
  514. package/dist/config/client.js.map +1 -1
  515. package/dist/config/client.spec.js +20 -0
  516. package/dist/config/client.spec.js.map +1 -0
  517. package/dist/config/defaults.d.ts +0 -4
  518. package/dist/config/defaults.d.ts.map +1 -1
  519. package/dist/config/defaults.js +94 -119
  520. package/dist/config/defaults.js.map +1 -1
  521. package/dist/config/definePlugin.d.ts +10 -10
  522. package/dist/config/definePlugin.d.ts.map +1 -1
  523. package/dist/config/definePlugin.js +7 -11
  524. package/dist/config/definePlugin.js.map +1 -1
  525. package/dist/config/orderable/fractional-indexing.d.ts +23 -23
  526. package/dist/config/orderable/fractional-indexing.d.ts.map +1 -1
  527. package/dist/config/orderable/index.d.ts +1 -1
  528. package/dist/config/orderable/index.d.ts.map +1 -1
  529. package/dist/config/orderable/index.js +3 -2
  530. package/dist/config/orderable/index.js.map +1 -1
  531. package/dist/config/sanitize.d.ts +1 -1
  532. package/dist/config/sanitize.d.ts.map +1 -1
  533. package/dist/config/sanitize.js +172 -38
  534. package/dist/config/sanitize.js.map +1 -1
  535. package/dist/config/sanitize.spec.js +105 -0
  536. package/dist/config/sanitize.spec.js.map +1 -0
  537. package/dist/config/types.d.ts +500 -399
  538. package/dist/config/types.d.ts.map +1 -1
  539. package/dist/config/types.js.map +1 -1
  540. package/dist/database/combineQueries.d.ts.map +1 -1
  541. package/dist/database/createDatabaseAdapter.d.ts +1 -1
  542. package/dist/database/createDatabaseAdapter.d.ts.map +1 -1
  543. package/dist/database/createDatabaseAdapter.js +0 -2
  544. package/dist/database/createDatabaseAdapter.js.map +1 -1
  545. package/dist/database/isNestedRelationshipQuery.d.ts +14 -0
  546. package/dist/database/isNestedRelationshipQuery.d.ts.map +1 -0
  547. package/dist/database/isNestedRelationshipQuery.js +19 -0
  548. package/dist/database/isNestedRelationshipQuery.js.map +1 -0
  549. package/dist/database/migrations/createMigration.d.ts.map +1 -1
  550. package/dist/database/migrations/createMigration.js +4 -0
  551. package/dist/database/migrations/createMigration.js.map +1 -1
  552. package/dist/database/migrations/findMigrationDir.d.ts.map +1 -1
  553. package/dist/database/migrations/getPredefinedMigration.d.ts.map +1 -1
  554. package/dist/database/migrations/getPredefinedMigration.js +2 -2
  555. package/dist/database/migrations/getPredefinedMigration.js.map +1 -1
  556. package/dist/database/migrations/migrate.d.ts.map +1 -1
  557. package/dist/database/migrations/migrate.js +9 -0
  558. package/dist/database/migrations/migrate.js.map +1 -1
  559. package/dist/database/migrations/migrateDown.d.ts +2 -2
  560. package/dist/database/migrations/migrateDown.d.ts.map +1 -1
  561. package/dist/database/migrations/migrateDown.js +12 -2
  562. package/dist/database/migrations/migrateDown.js.map +1 -1
  563. package/dist/database/migrations/migrateRefresh.d.ts +2 -2
  564. package/dist/database/migrations/migrateRefresh.d.ts.map +1 -1
  565. package/dist/database/migrations/migrateRefresh.js +10 -2
  566. package/dist/database/migrations/migrateRefresh.js.map +1 -1
  567. package/dist/database/migrations/migrateReset.d.ts +2 -2
  568. package/dist/database/migrations/migrateReset.d.ts.map +1 -1
  569. package/dist/database/migrations/migrateReset.js +11 -1
  570. package/dist/database/migrations/migrateReset.js.map +1 -1
  571. package/dist/database/migrations/migrateStatus.d.ts +2 -2
  572. package/dist/database/migrations/migrateStatus.d.ts.map +1 -1
  573. package/dist/database/migrations/migrateStatus.js +11 -6
  574. package/dist/database/migrations/migrateStatus.js.map +1 -1
  575. package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
  576. package/dist/database/migrations/writeMigrationIndex.d.ts.map +1 -1
  577. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  578. package/dist/database/queryValidation/validateQueryPaths.js +8 -1
  579. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  580. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  581. package/dist/database/queryValidation/validateSearchParams.js +21 -4
  582. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  583. package/dist/database/queryValidation/validateSortQuery.d.ts +23 -0
  584. package/dist/database/queryValidation/validateSortQuery.d.ts.map +1 -0
  585. package/dist/database/queryValidation/validateSortQuery.js +54 -0
  586. package/dist/database/queryValidation/validateSortQuery.js.map +1 -0
  587. package/dist/database/sanitizeJoinQuery.d.ts.map +1 -1
  588. package/dist/database/sanitizeJoinQuery.js +7 -0
  589. package/dist/database/sanitizeJoinQuery.js.map +1 -1
  590. package/dist/database/sanitizeWhereQuery.d.ts +1 -1
  591. package/dist/database/sanitizeWhereQuery.d.ts.map +1 -1
  592. package/dist/database/sanitizeWhereQuery.js +44 -1
  593. package/dist/database/sanitizeWhereQuery.js.map +1 -1
  594. package/dist/database/types.d.ts +37 -13
  595. package/dist/database/types.d.ts.map +1 -1
  596. package/dist/database/types.js.map +1 -1
  597. package/dist/duplicateDocument/index.d.ts.map +1 -1
  598. package/dist/duplicateDocument/index.js +1 -0
  599. package/dist/duplicateDocument/index.js.map +1 -1
  600. package/dist/email/getStringifiedToAddress.d.ts.map +1 -1
  601. package/dist/errors/APIError.d.ts.map +1 -1
  602. package/dist/errors/AuthenticationError.d.ts.map +1 -1
  603. package/dist/errors/DuplicateCollection.d.ts.map +1 -1
  604. package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
  605. package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
  606. package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
  607. package/dist/errors/FileRetrievalError.d.ts.map +1 -1
  608. package/dist/errors/FileUploadError.d.ts.map +1 -1
  609. package/dist/errors/Forbidden.d.ts.map +1 -1
  610. package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
  611. package/dist/errors/InvalidFieldJoin.d.ts.map +1 -1
  612. package/dist/errors/InvalidFieldName.d.ts.map +1 -1
  613. package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
  614. package/dist/errors/InvalidSchema.d.ts.map +1 -1
  615. package/dist/errors/Locked.d.ts.map +1 -1
  616. package/dist/errors/LockedAuth.d.ts.map +1 -1
  617. package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
  618. package/dist/errors/MissingEditorProp.d.ts.map +1 -1
  619. package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
  620. package/dist/errors/MissingFieldType.d.ts.map +1 -1
  621. package/dist/errors/MissingFile.d.ts.map +1 -1
  622. package/dist/errors/NotFound.d.ts.map +1 -1
  623. package/dist/errors/QueryError.d.ts.map +1 -1
  624. package/dist/errors/ReservedFieldName.d.ts.map +1 -1
  625. package/dist/errors/TimestampsRequired.d.ts.map +1 -1
  626. package/dist/errors/UnauthorizedError.d.ts.map +1 -1
  627. package/dist/errors/UnverifiedEmail.d.ts.map +1 -1
  628. package/dist/errors/ValidationError.d.ts.map +1 -1
  629. package/dist/exports/auth.d.ts +5 -0
  630. package/dist/exports/auth.d.ts.map +1 -0
  631. package/dist/exports/auth.js +6 -0
  632. package/dist/exports/auth.js.map +1 -0
  633. package/dist/exports/cli.d.ts +4 -0
  634. package/dist/exports/cli.d.ts.map +1 -0
  635. package/dist/exports/cli.js +4 -0
  636. package/dist/exports/cli.js.map +1 -0
  637. package/dist/exports/cliBuiltin.d.ts +37 -0
  638. package/dist/exports/cliBuiltin.d.ts.map +1 -0
  639. package/dist/exports/cliBuiltin.js +38 -0
  640. package/dist/exports/cliBuiltin.js.map +1 -0
  641. package/dist/exports/internal.d.ts +6 -0
  642. package/dist/exports/internal.d.ts.map +1 -1
  643. package/dist/exports/internal.js +7 -1
  644. package/dist/exports/internal.js.map +1 -1
  645. package/dist/exports/node.d.ts +2 -2
  646. package/dist/exports/node.d.ts.map +1 -1
  647. package/dist/exports/node.js +2 -2
  648. package/dist/exports/node.js.map +1 -1
  649. package/dist/exports/shared.d.ts +8 -5
  650. package/dist/exports/shared.d.ts.map +1 -1
  651. package/dist/exports/shared.js +6 -4
  652. package/dist/exports/shared.js.map +1 -1
  653. package/dist/fields/baseFields/slug/duplicateContext.d.ts +11 -0
  654. package/dist/fields/baseFields/slug/duplicateContext.d.ts.map +1 -0
  655. package/dist/fields/baseFields/slug/duplicateContext.js +21 -0
  656. package/dist/fields/baseFields/slug/duplicateContext.js.map +1 -0
  657. package/dist/fields/baseFields/slug/fillEmptyLocalizedSlugs.d.ts +23 -0
  658. package/dist/fields/baseFields/slug/fillEmptyLocalizedSlugs.d.ts.map +1 -0
  659. package/dist/fields/baseFields/slug/fillEmptyLocalizedSlugs.js +65 -0
  660. package/dist/fields/baseFields/slug/fillEmptyLocalizedSlugs.js.map +1 -0
  661. package/dist/fields/baseFields/slug/generateSlug.d.ts +19 -7
  662. package/dist/fields/baseFields/slug/generateSlug.d.ts.map +1 -1
  663. package/dist/fields/baseFields/slug/generateSlug.js +111 -74
  664. package/dist/fields/baseFields/slug/generateSlug.js.map +1 -1
  665. package/dist/fields/baseFields/slug/generateSlugBeforeDuplicate.d.ts +18 -0
  666. package/dist/fields/baseFields/slug/generateSlugBeforeDuplicate.d.ts.map +1 -0
  667. package/dist/fields/baseFields/slug/generateSlugBeforeDuplicate.js +20 -0
  668. package/dist/fields/baseFields/slug/generateSlugBeforeDuplicate.js.map +1 -0
  669. package/dist/fields/baseFields/slug/getSlugFallbackValue.d.ts +23 -0
  670. package/dist/fields/baseFields/slug/getSlugFallbackValue.d.ts.map +1 -0
  671. package/dist/fields/baseFields/slug/getSlugFallbackValue.js +24 -0
  672. package/dist/fields/baseFields/slug/getSlugFallbackValue.js.map +1 -0
  673. package/dist/fields/baseFields/slug/hasValue.d.ts +3 -0
  674. package/dist/fields/baseFields/slug/hasValue.d.ts.map +1 -0
  675. package/dist/fields/baseFields/slug/hasValue.js +3 -0
  676. package/dist/fields/baseFields/slug/hasValue.js.map +1 -0
  677. package/dist/fields/baseFields/slug/types.d.ts +14 -0
  678. package/dist/fields/baseFields/slug/types.d.ts.map +1 -0
  679. package/dist/fields/baseFields/slug/types.js +6 -0
  680. package/dist/fields/baseFields/slug/types.js.map +1 -0
  681. package/dist/fields/config/client.d.ts +5 -5
  682. package/dist/fields/config/client.d.ts.map +1 -1
  683. package/dist/fields/config/client.js +3 -2
  684. package/dist/fields/config/client.js.map +1 -1
  685. package/dist/fields/config/reservedFieldNames.spec.js +18 -18
  686. package/dist/fields/config/reservedFieldNames.spec.js.map +1 -1
  687. package/dist/fields/config/sanitize.d.ts +6 -6
  688. package/dist/fields/config/sanitize.d.ts.map +1 -1
  689. package/dist/fields/config/sanitize.js +68 -19
  690. package/dist/fields/config/sanitize.js.map +1 -1
  691. package/dist/fields/config/sanitize.spec.js +105 -105
  692. package/dist/fields/config/sanitize.spec.js.map +1 -1
  693. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -1
  694. package/dist/fields/config/types.d.ts +50 -12
  695. package/dist/fields/config/types.d.ts.map +1 -1
  696. package/dist/fields/config/types.js +1 -1
  697. package/dist/fields/config/types.js.map +1 -1
  698. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  699. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  700. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  701. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  702. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  703. package/dist/fields/hooks/afterRead/promise.js +11 -1
  704. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  705. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  706. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  707. package/dist/fields/hooks/afterRead/virtualFieldPopulationPromise.d.ts.map +1 -1
  708. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.d.ts.map +1 -1
  709. package/dist/fields/hooks/beforeChange/getExistingRowDoc.d.ts.map +1 -1
  710. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  711. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  712. package/dist/fields/hooks/beforeChange/promise.js +1 -0
  713. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  714. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  715. package/dist/fields/hooks/beforeDuplicate/index.d.ts.map +1 -1
  716. package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -1
  717. package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -1
  718. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  719. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  720. package/dist/fields/hooks/beforeValidate/promise.js +15 -4
  721. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  722. package/dist/fields/hooks/beforeValidate/stripNullRows.d.ts +10 -0
  723. package/dist/fields/hooks/beforeValidate/stripNullRows.d.ts.map +1 -0
  724. package/dist/fields/hooks/beforeValidate/stripNullRows.js +18 -0
  725. package/dist/fields/hooks/beforeValidate/stripNullRows.js.map +1 -0
  726. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  727. package/dist/fields/hooks/beforeValidate/traverseFields.js +2 -0
  728. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  729. package/dist/fields/isFieldDisabled.d.ts.map +1 -1
  730. package/dist/fields/mergeBaseFields.d.ts.map +1 -1
  731. package/dist/fields/setDefaultBeforeDuplicate.d.ts.map +1 -1
  732. package/dist/fields/setDefaultBeforeDuplicate.js +1 -0
  733. package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
  734. package/dist/fields/sortableFieldTypes.d.ts.map +1 -1
  735. package/dist/fields/sortableFieldTypes.js +1 -0
  736. package/dist/fields/sortableFieldTypes.js.map +1 -1
  737. package/dist/fields/validations.d.ts +4 -1
  738. package/dist/fields/validations.d.ts.map +1 -1
  739. package/dist/fields/validations.js +8 -2
  740. package/dist/fields/validations.js.map +1 -1
  741. package/dist/fields/validations.spec.js +61 -37
  742. package/dist/fields/validations.spec.js.map +1 -1
  743. package/dist/globals/config/client.d.ts +5 -5
  744. package/dist/globals/config/client.d.ts.map +1 -1
  745. package/dist/globals/config/client.js.map +1 -1
  746. package/dist/globals/config/sanitize.d.ts +3 -7
  747. package/dist/globals/config/sanitize.d.ts.map +1 -1
  748. package/dist/globals/config/sanitize.js +26 -6
  749. package/dist/globals/config/sanitize.js.map +1 -1
  750. package/dist/globals/config/sanitize.spec.js +227 -8
  751. package/dist/globals/config/sanitize.spec.js.map +1 -1
  752. package/dist/globals/config/types.d.ts +21 -16
  753. package/dist/globals/config/types.d.ts.map +1 -1
  754. package/dist/globals/config/types.js.map +1 -1
  755. package/dist/globals/operations/countGlobalVersions.d.ts.map +1 -1
  756. package/dist/globals/operations/countGlobalVersions.js +51 -55
  757. package/dist/globals/operations/countGlobalVersions.js.map +1 -1
  758. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  759. package/dist/globals/operations/docAccess.js +19 -25
  760. package/dist/globals/operations/docAccess.js.map +1 -1
  761. package/dist/globals/operations/findOne.d.ts.map +1 -1
  762. package/dist/globals/operations/findOne.js +169 -174
  763. package/dist/globals/operations/findOne.js.map +1 -1
  764. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  765. package/dist/globals/operations/findVersionByID.js +104 -109
  766. package/dist/globals/operations/findVersionByID.js.map +1 -1
  767. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  768. package/dist/globals/operations/findVersions.js +112 -109
  769. package/dist/globals/operations/findVersions.js.map +1 -1
  770. package/dist/globals/operations/inputSchemas.d.ts +365 -0
  771. package/dist/globals/operations/inputSchemas.d.ts.map +1 -0
  772. package/dist/globals/operations/inputSchemas.js +104 -0
  773. package/dist/globals/operations/inputSchemas.js.map +1 -0
  774. package/dist/globals/operations/local/countVersions.d.ts +3 -3
  775. package/dist/globals/operations/local/countVersions.d.ts.map +1 -1
  776. package/dist/globals/operations/local/countVersions.js.map +1 -1
  777. package/dist/globals/operations/local/findOne.d.ts +3 -3
  778. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  779. package/dist/globals/operations/local/findOne.js.map +1 -1
  780. package/dist/globals/operations/local/findVersionByID.d.ts +3 -3
  781. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  782. package/dist/globals/operations/local/findVersionByID.js.map +1 -1
  783. package/dist/globals/operations/local/findVersions.d.ts +3 -3
  784. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  785. package/dist/globals/operations/local/findVersions.js.map +1 -1
  786. package/dist/globals/operations/local/restoreVersion.d.ts +3 -3
  787. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  788. package/dist/globals/operations/local/restoreVersion.js.map +1 -1
  789. package/dist/globals/operations/local/update.d.ts +3 -3
  790. package/dist/globals/operations/local/update.d.ts.map +1 -1
  791. package/dist/globals/operations/local/update.js.map +1 -1
  792. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  793. package/dist/globals/operations/restoreVersion.js +1 -0
  794. package/dist/globals/operations/restoreVersion.js.map +1 -1
  795. package/dist/globals/operations/update.d.ts.map +1 -1
  796. package/dist/globals/operations/update.js +1 -0
  797. package/dist/globals/operations/update.js.map +1 -1
  798. package/dist/hierarchy/addHierarchyToCollection.d.ts.map +1 -1
  799. package/dist/hierarchy/addHierarchyToCollection.js +2 -0
  800. package/dist/hierarchy/addHierarchyToCollection.js.map +1 -1
  801. package/dist/hierarchy/buildParentField.d.ts.map +1 -1
  802. package/dist/hierarchy/constants.d.ts.map +1 -1
  803. package/dist/hierarchy/getInitialTreeData.d.ts.map +1 -1
  804. package/dist/hierarchy/hooks/collectionAfterDelete.d.ts.map +1 -1
  805. package/dist/hierarchy/hooks/collectionAfterRead.d.ts.map +1 -1
  806. package/dist/hierarchy/hooks/collectionBeforeChange.d.ts.map +1 -1
  807. package/dist/hierarchy/hooks/collectionBeforeDelete.d.ts.map +1 -1
  808. package/dist/hierarchy/hooks/collectionBeforeOperation.d.ts.map +1 -1
  809. package/dist/hierarchy/hooks/ensureSafeCollectionsChange.d.ts.map +1 -1
  810. package/dist/hierarchy/injectHierarchyButton.d.ts.map +1 -1
  811. package/dist/hierarchy/resolveHierarchyCollections.d.ts.map +1 -1
  812. package/dist/hierarchy/sanitizeHierarchyCollection.d.ts.map +1 -1
  813. package/dist/index.bundled.d.ts +6085 -4339
  814. package/dist/index.d.ts +158 -55
  815. package/dist/index.d.ts.map +1 -1
  816. package/dist/index.js +85 -65
  817. package/dist/index.js.map +1 -1
  818. package/dist/kv/adapters/DatabaseKVAdapter.d.ts.map +1 -1
  819. package/dist/kv/adapters/InMemoryKVAdapter.d.ts.map +1 -1
  820. package/dist/locked-documents/config.d.ts.map +1 -1
  821. package/dist/preferences/config.d.ts.map +1 -1
  822. package/dist/preferences/deleteUserPreferences.d.ts.map +1 -1
  823. package/dist/preferences/keys.d.ts +8 -4
  824. package/dist/preferences/keys.d.ts.map +1 -1
  825. package/dist/preferences/keys.js +4 -1
  826. package/dist/preferences/keys.js.map +1 -1
  827. package/dist/preferences/types.d.ts +15 -0
  828. package/dist/preferences/types.d.ts.map +1 -1
  829. package/dist/preferences/types.js +3 -1
  830. package/dist/preferences/types.js.map +1 -1
  831. package/dist/query-presets/access.d.ts.map +1 -1
  832. package/dist/query-presets/config.d.ts.map +1 -1
  833. package/dist/query-presets/constraints.d.ts.map +1 -1
  834. package/dist/query-presets/constraints.js +1 -1
  835. package/dist/query-presets/constraints.js.map +1 -1
  836. package/dist/query-presets/types.d.ts +1 -1
  837. package/dist/query-presets/types.d.ts.map +1 -1
  838. package/dist/queues/config/collection.d.ts.map +1 -1
  839. package/dist/queues/config/collection.js +43 -43
  840. package/dist/queues/config/collection.js.map +1 -1
  841. package/dist/queues/config/global.d.ts +5 -6
  842. package/dist/queues/config/global.d.ts.map +1 -1
  843. package/dist/queues/config/global.js +1 -1
  844. package/dist/queues/config/global.js.map +1 -1
  845. package/dist/queues/config/types/index.d.ts +31 -24
  846. package/dist/queues/config/types/index.d.ts.map +1 -1
  847. package/dist/queues/config/types/index.js.map +1 -1
  848. package/dist/queues/config/types/taskTypes.d.ts +4 -7
  849. package/dist/queues/config/types/taskTypes.d.ts.map +1 -1
  850. package/dist/queues/config/types/taskTypes.js.map +1 -1
  851. package/dist/queues/config/types/workflowJSONTypes.d.ts +10 -9
  852. package/dist/queues/config/types/workflowJSONTypes.d.ts.map +1 -1
  853. package/dist/queues/config/types/workflowJSONTypes.js.map +1 -1
  854. package/dist/queues/config/types/workflowTypes.d.ts +11 -58
  855. package/dist/queues/config/types/workflowTypes.d.ts.map +1 -1
  856. package/dist/queues/config/types/workflowTypes.js.map +1 -1
  857. package/dist/queues/endpoints/handleSchedules.d.ts.map +1 -1
  858. package/dist/queues/endpoints/handleSchedules.js +3 -2
  859. package/dist/queues/endpoints/handleSchedules.js.map +1 -1
  860. package/dist/queues/endpoints/run.d.ts.map +1 -1
  861. package/dist/queues/endpoints/run.js +2 -1
  862. package/dist/queues/endpoints/run.js.map +1 -1
  863. package/dist/queues/errors/handleTaskError.js +4 -4
  864. package/dist/queues/errors/handleTaskError.js.map +1 -1
  865. package/dist/queues/errors/handleWorkflowError.js +1 -1
  866. package/dist/queues/errors/handleWorkflowError.js.map +1 -1
  867. package/dist/queues/errors/index.d.ts +6 -0
  868. package/dist/queues/errors/index.d.ts.map +1 -1
  869. package/dist/queues/errors/index.js +5 -0
  870. package/dist/queues/errors/index.js.map +1 -1
  871. package/dist/queues/localAPI.d.ts +9 -9
  872. package/dist/queues/localAPI.d.ts.map +1 -1
  873. package/dist/queues/localAPI.js +63 -66
  874. package/dist/queues/localAPI.js.map +1 -1
  875. package/dist/queues/operations/handleSchedules/countRunnableOrActiveJobsForQueue.d.ts +4 -4
  876. package/dist/queues/operations/handleSchedules/countRunnableOrActiveJobsForQueue.d.ts.map +1 -1
  877. package/dist/queues/operations/handleSchedules/countRunnableOrActiveJobsForQueue.js.map +1 -1
  878. package/dist/queues/operations/handleSchedules/getQueuesWithSchedules.d.ts.map +1 -1
  879. package/dist/queues/operations/handleSchedules/index.d.ts +1 -1
  880. package/dist/queues/operations/handleSchedules/index.d.ts.map +1 -1
  881. package/dist/queues/operations/handleSchedules/index.js +1 -1
  882. package/dist/queues/operations/handleSchedules/index.js.map +1 -1
  883. package/dist/queues/operations/runJobs/heartbeat.d.ts +13 -0
  884. package/dist/queues/operations/runJobs/heartbeat.d.ts.map +1 -0
  885. package/dist/queues/operations/runJobs/heartbeat.js +66 -0
  886. package/dist/queues/operations/runJobs/heartbeat.js.map +1 -0
  887. package/dist/queues/operations/runJobs/index.d.ts.map +1 -1
  888. package/dist/queues/operations/runJobs/index.js +133 -84
  889. package/dist/queues/operations/runJobs/index.js.map +1 -1
  890. package/dist/queues/operations/runJobs/runJSONJob/index.d.ts.map +1 -1
  891. package/dist/queues/operations/runJobs/runJSONJob/index.js +6 -3
  892. package/dist/queues/operations/runJobs/runJSONJob/index.js.map +1 -1
  893. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.d.ts.map +1 -1
  894. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js +5 -5
  895. package/dist/queues/operations/runJobs/runJob/getRunTaskFunction.js.map +1 -1
  896. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts +2 -1
  897. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.d.ts.map +1 -1
  898. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js +39 -8
  899. package/dist/queues/operations/runJobs/runJob/getUpdateJobFunction.js.map +1 -1
  900. package/dist/queues/operations/runJobs/runJob/importHandlerPath.d.ts +1 -1
  901. package/dist/queues/operations/runJobs/runJob/importHandlerPath.d.ts.map +1 -1
  902. package/dist/queues/operations/runJobs/runJob/importHandlerPath.js.map +1 -1
  903. package/dist/queues/operations/runJobs/runJob/index.d.ts.map +1 -1
  904. package/dist/queues/operations/runJobs/runJob/index.js +4 -4
  905. package/dist/queues/operations/runJobs/runJob/index.js.map +1 -1
  906. package/dist/queues/utilities/getCurrentDate.d.ts.map +1 -1
  907. package/dist/queues/utilities/getJobTaskStatus.d.ts.map +1 -1
  908. package/dist/queues/utilities/updateJob.d.ts.map +1 -1
  909. package/dist/queues/utilities/updateJob.js +3 -0
  910. package/dist/queues/utilities/updateJob.js.map +1 -1
  911. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  912. package/dist/types/constants.d.ts +23 -2
  913. package/dist/types/constants.d.ts.map +1 -1
  914. package/dist/types/constants.js +23 -0
  915. package/dist/types/constants.js.map +1 -1
  916. package/dist/types/index.d.ts +12 -10
  917. package/dist/types/index.d.ts.map +1 -1
  918. package/dist/types/index.js.map +1 -1
  919. package/dist/uploads/checkFileAccess.d.ts.map +1 -1
  920. package/dist/uploads/checkFileAccess.js +1 -0
  921. package/dist/uploads/checkFileAccess.js.map +1 -1
  922. package/dist/uploads/checkFileRestrictions.d.ts +1 -1
  923. package/dist/uploads/checkFileRestrictions.d.ts.map +1 -1
  924. package/dist/uploads/checkFileRestrictions.js +15 -1
  925. package/dist/uploads/checkFileRestrictions.js.map +1 -1
  926. package/dist/uploads/cropImage.d.ts +1 -1
  927. package/dist/uploads/cropImage.d.ts.map +1 -1
  928. package/dist/uploads/cropImage.js +2 -5
  929. package/dist/uploads/cropImage.js.map +1 -1
  930. package/dist/uploads/cropImage.spec.js +71 -0
  931. package/dist/uploads/cropImage.spec.js.map +1 -0
  932. package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
  933. package/dist/uploads/endpoints/getFileFromURL.js +2 -0
  934. package/dist/uploads/endpoints/getFileFromURL.js.map +1 -1
  935. package/dist/uploads/endpoints/uploadInstructions.d.ts +15 -0
  936. package/dist/uploads/endpoints/uploadInstructions.d.ts.map +1 -0
  937. package/dist/uploads/endpoints/uploadInstructions.js +84 -0
  938. package/dist/uploads/endpoints/uploadInstructions.js.map +1 -0
  939. package/dist/uploads/fetchAPI-multipart/isEligibleRequest.d.ts.map +1 -1
  940. package/dist/uploads/fetchAPI-multipart/isEligibleRequest.js +1 -2
  941. package/dist/uploads/fetchAPI-multipart/isEligibleRequest.js.map +1 -1
  942. package/dist/uploads/fetchAPI-multipart/isEligibleRequest.spec.js +28 -0
  943. package/dist/uploads/fetchAPI-multipart/isEligibleRequest.spec.js.map +1 -1
  944. package/dist/uploads/fetchAPI-multipart/processMultipart.d.ts.map +1 -1
  945. package/dist/uploads/fetchAPI-multipart/processMultipart.js +3 -12
  946. package/dist/uploads/fetchAPI-multipart/processMultipart.js.map +1 -1
  947. package/dist/uploads/fetchAPI-multipart/processNested.d.ts.map +1 -1
  948. package/dist/uploads/fetchAPI-multipart/utilities.d.ts.map +1 -1
  949. package/dist/uploads/fileExists.d.ts.map +1 -1
  950. package/dist/uploads/generateFileData.d.ts +9 -0
  951. package/dist/uploads/generateFileData.d.ts.map +1 -1
  952. package/dist/uploads/generateFileData.js +60 -46
  953. package/dist/uploads/generateFileData.js.map +1 -1
  954. package/dist/uploads/generateFileData.spec.js +207 -0
  955. package/dist/uploads/generateFileData.spec.js.map +1 -0
  956. package/dist/uploads/generateFileData.tempFileBuffering.spec.js +81 -0
  957. package/dist/uploads/generateFileData.tempFileBuffering.spec.js.map +1 -0
  958. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  959. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  960. package/dist/uploads/getFileByPath.d.ts +1 -1
  961. package/dist/uploads/getFileByPath.d.ts.map +1 -1
  962. package/dist/uploads/getFileContentRequirement.d.ts +32 -0
  963. package/dist/uploads/getFileContentRequirement.d.ts.map +1 -0
  964. package/dist/uploads/getFileContentRequirement.js +40 -0
  965. package/dist/uploads/getFileContentRequirement.js.map +1 -0
  966. package/dist/uploads/getFileContentRequirement.spec.js +125 -0
  967. package/dist/uploads/getFileContentRequirement.spec.js.map +1 -0
  968. package/dist/uploads/getFileFromUploadInstructions.d.ts +8 -0
  969. package/dist/uploads/getFileFromUploadInstructions.d.ts.map +1 -0
  970. package/dist/uploads/getFileFromUploadInstructions.js +232 -0
  971. package/dist/uploads/getFileFromUploadInstructions.js.map +1 -0
  972. package/dist/uploads/getFileFromUploadInstructions.spec.js +378 -0
  973. package/dist/uploads/getFileFromUploadInstructions.spec.js.map +1 -0
  974. package/dist/uploads/getFileTypeFallback.d.ts.map +1 -1
  975. package/dist/uploads/getImageSize.d.ts +12 -1
  976. package/dist/uploads/getImageSize.d.ts.map +1 -1
  977. package/dist/uploads/getImageSize.js +20 -18
  978. package/dist/uploads/getImageSize.js.map +1 -1
  979. package/dist/uploads/getImageSize.spec.js +298 -0
  980. package/dist/uploads/getImageSize.spec.js.map +1 -0
  981. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  982. package/dist/uploads/image-resizing/createImageSize.d.ts.map +1 -1
  983. package/dist/uploads/image-resizing/createImageSizes.d.ts.map +1 -1
  984. package/dist/uploads/image-resizing/createImageSizes.js +2 -5
  985. package/dist/uploads/image-resizing/createImageSizes.js.map +1 -1
  986. package/dist/uploads/image-resizing/createImageSizes.spec.js +80 -0
  987. package/dist/uploads/image-resizing/createImageSizes.spec.js.map +1 -0
  988. package/dist/uploads/image-resizing/generateImageSizeFilename.d.ts.map +1 -1
  989. package/dist/uploads/image-resizing/getImageResizeAction.d.ts +1 -1
  990. package/dist/uploads/image-resizing/getImageResizeAction.d.ts.map +1 -1
  991. package/dist/uploads/image-resizing/parseFilename.d.ts.map +1 -1
  992. package/dist/uploads/image-resizing/sanitizeResizeConfig.d.ts.map +1 -1
  993. package/dist/uploads/isAnimatedImage.d.ts +8 -0
  994. package/dist/uploads/isAnimatedImage.d.ts.map +1 -0
  995. package/dist/uploads/isAnimatedImage.js +22 -0
  996. package/dist/uploads/isAnimatedImage.js.map +1 -0
  997. package/dist/uploads/isAnimatedImage.spec.js +19 -0
  998. package/dist/uploads/isAnimatedImage.spec.js.map +1 -0
  999. package/dist/uploads/matchMimeType.d.ts +8 -0
  1000. package/dist/uploads/matchMimeType.d.ts.map +1 -0
  1001. package/dist/uploads/matchMimeType.js +19 -0
  1002. package/dist/uploads/matchMimeType.js.map +1 -0
  1003. package/dist/uploads/matchMimeType.spec.js +66 -0
  1004. package/dist/uploads/matchMimeType.spec.js.map +1 -0
  1005. package/dist/uploads/mimeTypeValidator.d.ts.map +1 -1
  1006. package/dist/uploads/probeImageSize.d.ts +39 -0
  1007. package/dist/uploads/probeImageSize.d.ts.map +1 -0
  1008. package/dist/uploads/probeImageSize.js +374 -0
  1009. package/dist/uploads/probeImageSize.js.map +1 -0
  1010. package/dist/uploads/probeImageSize.spec.js +366 -0
  1011. package/dist/uploads/probeImageSize.spec.js.map +1 -0
  1012. package/dist/uploads/safeFetch.d.ts.map +1 -1
  1013. package/dist/uploads/saveBufferToFile.d.ts.map +1 -1
  1014. package/dist/uploads/stagedUpload.d.ts +27 -0
  1015. package/dist/uploads/stagedUpload.d.ts.map +1 -0
  1016. package/dist/uploads/stagedUpload.js +197 -0
  1017. package/dist/uploads/stagedUpload.js.map +1 -0
  1018. package/dist/uploads/types.d.ts +112 -7
  1019. package/dist/uploads/types.d.ts.map +1 -1
  1020. package/dist/uploads/types.js.map +1 -1
  1021. package/dist/uploads/unlinkTempFiles.d.ts.map +1 -1
  1022. package/dist/uploads/unlinkTempFiles.js +6 -2
  1023. package/dist/uploads/unlinkTempFiles.js.map +1 -1
  1024. package/dist/uploads/unlinkTempFiles.spec.js +71 -0
  1025. package/dist/uploads/unlinkTempFiles.spec.js.map +1 -0
  1026. package/dist/uploads/uploadFiles.d.ts.map +1 -1
  1027. package/dist/uploads/uploadFiles.js +7 -2
  1028. package/dist/uploads/uploadFiles.js.map +1 -1
  1029. package/dist/uploads/uploadFiles.spec.js +44 -0
  1030. package/dist/uploads/uploadFiles.spec.js.map +1 -0
  1031. package/dist/utilities/addDataAndFileToRequest.d.ts.map +1 -1
  1032. package/dist/utilities/addDataAndFileToRequest.js +12 -39
  1033. package/dist/utilities/addDataAndFileToRequest.js.map +1 -1
  1034. package/dist/utilities/addLocalesToRequest.d.ts.map +1 -1
  1035. package/dist/utilities/addSelectGenericsToGeneretedTypes.d.ts.map +1 -1
  1036. package/dist/utilities/appendDateTimezoneSelectFields.d.ts.map +1 -1
  1037. package/dist/utilities/appendNonTrashedFilter.d.ts +1 -1
  1038. package/dist/utilities/appendNonTrashedFilter.d.ts.map +1 -1
  1039. package/dist/utilities/appendNonTrashedFilter.js.map +1 -1
  1040. package/dist/utilities/appendUploadSelectFields.d.ts.map +1 -1
  1041. package/dist/utilities/canAccessAdmin.d.ts.map +1 -1
  1042. package/dist/utilities/canAccessAdmin.js +1 -0
  1043. package/dist/utilities/canAccessAdmin.js.map +1 -1
  1044. package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -1
  1045. package/dist/utilities/configToJSONSchema.d.ts +13 -4
  1046. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  1047. package/dist/utilities/configToJSONSchema.js +139 -61
  1048. package/dist/utilities/configToJSONSchema.js.map +1 -1
  1049. package/dist/utilities/configToJSONSchema.spec.js +378 -22
  1050. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  1051. package/dist/utilities/createLocalReq.d.ts +2 -2
  1052. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  1053. package/dist/utilities/createLocalReq.js.map +1 -1
  1054. package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
  1055. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  1056. package/dist/utilities/dependencies/resolveFrom.d.ts.map +1 -1
  1057. package/dist/utilities/entityInputSchema/filterFieldsByAccess.d.ts +30 -0
  1058. package/dist/utilities/entityInputSchema/filterFieldsByAccess.d.ts.map +1 -0
  1059. package/dist/utilities/entityInputSchema/filterFieldsByAccess.js +71 -0
  1060. package/dist/utilities/entityInputSchema/filterFieldsByAccess.js.map +1 -0
  1061. package/dist/utilities/entityInputSchema/getEntityInputSchema.d.ts +13 -0
  1062. package/dist/utilities/entityInputSchema/getEntityInputSchema.d.ts.map +1 -0
  1063. package/dist/utilities/entityInputSchema/getEntityInputSchema.js +66 -0
  1064. package/dist/utilities/entityInputSchema/getEntityInputSchema.js.map +1 -0
  1065. package/dist/utilities/entityInputSchema/sanitizeEntitySchema.d.ts +10 -0
  1066. package/dist/utilities/entityInputSchema/sanitizeEntitySchema.d.ts.map +1 -0
  1067. package/dist/utilities/entityInputSchema/sanitizeEntitySchema.js +384 -0
  1068. package/dist/utilities/entityInputSchema/sanitizeEntitySchema.js.map +1 -0
  1069. package/dist/utilities/entityInputSchema/sanitizeEntitySchema.spec.js +133 -0
  1070. package/dist/utilities/entityInputSchema/sanitizeEntitySchema.spec.js.map +1 -0
  1071. package/dist/utilities/entityInputSchema/types.d.ts +16 -0
  1072. package/dist/utilities/entityInputSchema/types.d.ts.map +1 -0
  1073. package/dist/utilities/entityInputSchema/types.js +3 -0
  1074. package/dist/utilities/entityInputSchema/types.js.map +1 -0
  1075. package/dist/utilities/entityInputSchema/validateEntityData.d.ts +13 -0
  1076. package/dist/utilities/entityInputSchema/validateEntityData.d.ts.map +1 -0
  1077. package/dist/utilities/entityInputSchema/validateEntityData.js +138 -0
  1078. package/dist/utilities/entityInputSchema/validateEntityData.js.map +1 -0
  1079. package/dist/utilities/escapeRegExp.d.ts.map +1 -1
  1080. package/dist/utilities/extractID.d.ts.map +1 -1
  1081. package/dist/utilities/fieldValueExists.d.ts +29 -0
  1082. package/dist/utilities/fieldValueExists.d.ts.map +1 -0
  1083. package/dist/utilities/fieldValueExists.js +37 -0
  1084. package/dist/utilities/fieldValueExists.js.map +1 -0
  1085. package/dist/utilities/flattenAllFields.d.ts.map +1 -1
  1086. package/dist/utilities/formatAdminURL.d.ts.map +1 -1
  1087. package/dist/utilities/formatErrors.d.ts.map +1 -1
  1088. package/dist/utilities/formatLabels.d.ts.map +1 -1
  1089. package/dist/utilities/getBestFitFromSizes.d.ts.map +1 -1
  1090. package/dist/utilities/getBlockSelect.d.ts.map +1 -1
  1091. package/dist/utilities/getDataByPath.d.ts.map +1 -1
  1092. package/dist/utilities/getEntityPermissions/getEntityPermissions.d.ts.map +1 -1
  1093. package/dist/utilities/getEntityPermissions/getEntityPermissions.js +3 -0
  1094. package/dist/utilities/getEntityPermissions/getEntityPermissions.js.map +1 -1
  1095. package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts +7 -1
  1096. package/dist/utilities/getEntityPermissions/populateFieldPermissions.d.ts.map +1 -1
  1097. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js +19 -2
  1098. package/dist/utilities/getEntityPermissions/populateFieldPermissions.js.map +1 -1
  1099. package/dist/utilities/getFieldByPath.d.ts.map +1 -1
  1100. package/dist/utilities/getFieldPermissions.d.ts.map +1 -1
  1101. package/dist/utilities/getNextVersion.d.ts +7 -0
  1102. package/dist/utilities/getNextVersion.d.ts.map +1 -0
  1103. package/dist/utilities/getNextVersion.js +20 -0
  1104. package/dist/utilities/getNextVersion.js.map +1 -0
  1105. package/dist/utilities/getNextVersion.spec.js +16 -0
  1106. package/dist/utilities/getNextVersion.spec.js.map +1 -0
  1107. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  1108. package/dist/utilities/getRequestEntity.d.ts.map +1 -1
  1109. package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
  1110. package/dist/utilities/getRequestOrigin.d.ts +2 -2
  1111. package/dist/utilities/getRequestOrigin.d.ts.map +1 -1
  1112. package/dist/utilities/getRequestOrigin.js.map +1 -1
  1113. package/dist/utilities/getSafeRedirect.d.ts.map +1 -1
  1114. package/dist/utilities/getSafeRedirect.js +16 -9
  1115. package/dist/utilities/getSafeRedirect.js.map +1 -1
  1116. package/dist/utilities/getSafeRedirect.spec.js +96 -2
  1117. package/dist/utilities/getSafeRedirect.spec.js.map +1 -1
  1118. package/dist/utilities/getSelectMode.d.ts.map +1 -1
  1119. package/dist/utilities/getSiblingData.d.ts.map +1 -1
  1120. package/dist/utilities/getTranslatedLabel.d.ts.map +1 -1
  1121. package/dist/utilities/getUniqueFieldValue.d.ts +28 -0
  1122. package/dist/utilities/getUniqueFieldValue.d.ts.map +1 -0
  1123. package/dist/utilities/getUniqueFieldValue.js +27 -0
  1124. package/dist/utilities/getUniqueFieldValue.js.map +1 -0
  1125. package/dist/utilities/getVersionsConfig.d.ts +1 -1
  1126. package/dist/utilities/getVersionsConfig.d.ts.map +1 -1
  1127. package/dist/utilities/getVirtualFieldNames.d.ts +14 -0
  1128. package/dist/utilities/getVirtualFieldNames.d.ts.map +1 -0
  1129. package/dist/utilities/getVirtualFieldNames.js +35 -0
  1130. package/dist/utilities/getVirtualFieldNames.js.map +1 -0
  1131. package/dist/utilities/handleEndpoints.d.ts.map +1 -1
  1132. package/dist/utilities/headersWithCors.d.ts.map +1 -1
  1133. package/dist/utilities/headersWithCors.js +1 -1
  1134. package/dist/utilities/headersWithCors.js.map +1 -1
  1135. package/dist/utilities/isEntityHidden.d.ts +2 -2
  1136. package/dist/utilities/isEntityHidden.d.ts.map +1 -1
  1137. package/dist/utilities/isURLAllowed.d.ts.map +1 -1
  1138. package/dist/utilities/isURLAllowed.js +9 -3
  1139. package/dist/utilities/isURLAllowed.js.map +1 -1
  1140. package/dist/utilities/isURLAllowed.spec.js +78 -0
  1141. package/dist/utilities/isURLAllowed.spec.js.map +1 -0
  1142. package/dist/utilities/isValidID.d.ts +1 -1
  1143. package/dist/utilities/isValidID.d.ts.map +1 -1
  1144. package/dist/utilities/killTransaction.d.ts +7 -0
  1145. package/dist/utilities/killTransaction.d.ts.map +1 -1
  1146. package/dist/utilities/killTransaction.js +7 -0
  1147. package/dist/utilities/killTransaction.js.map +1 -1
  1148. package/dist/utilities/logError.d.ts.map +1 -1
  1149. package/dist/utilities/logError.js +5 -2
  1150. package/dist/utilities/logError.js.map +1 -1
  1151. package/dist/utilities/logger.d.ts +1 -1
  1152. package/dist/utilities/logger.d.ts.map +1 -1
  1153. package/dist/utilities/mergeHeaders.d.ts.map +1 -1
  1154. package/dist/utilities/mergeListSearchAndWhere.d.ts.map +1 -1
  1155. package/dist/utilities/miniChalk.d.ts.map +1 -1
  1156. package/dist/utilities/nextJsDevReloadStrategy.d.ts +7 -0
  1157. package/dist/utilities/nextJsDevReloadStrategy.d.ts.map +1 -0
  1158. package/dist/utilities/nextJsDevReloadStrategy.js +59 -0
  1159. package/dist/utilities/nextJsDevReloadStrategy.js.map +1 -0
  1160. package/dist/utilities/nextJsDevReloadStrategy.spec.js +123 -0
  1161. package/dist/utilities/nextJsDevReloadStrategy.spec.js.map +1 -0
  1162. package/dist/utilities/optionsAreEqual.d.ts.map +1 -1
  1163. package/dist/utilities/parseBooleanString.d.ts.map +1 -1
  1164. package/dist/utilities/parseCookies.d.ts +1 -1
  1165. package/dist/utilities/parseCookies.d.ts.map +1 -1
  1166. package/dist/utilities/parseParams/index.d.ts.map +1 -1
  1167. package/dist/utilities/profiling.d.ts.map +1 -1
  1168. package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -1
  1169. package/dist/utilities/resolveSelect.d.ts.map +1 -1
  1170. package/dist/utilities/routeError.d.ts.map +1 -1
  1171. package/dist/utilities/sanitizeFallbackLocale.d.ts.map +1 -1
  1172. package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
  1173. package/dist/utilities/sanitizeJoinParams.d.ts.map +1 -1
  1174. package/dist/utilities/sanitizePopulateParam.d.ts.map +1 -1
  1175. package/dist/utilities/sanitizeSelect.d.ts.map +1 -1
  1176. package/dist/utilities/sanitizeSelectParam.d.ts.map +1 -1
  1177. package/dist/utilities/sanitizeSortParams.d.ts.map +1 -1
  1178. package/dist/utilities/setsAreEqual.d.ts.map +1 -1
  1179. package/dist/utilities/sharedInputSchemas.d.ts +52 -0
  1180. package/dist/utilities/sharedInputSchemas.d.ts.map +1 -0
  1181. package/dist/utilities/sharedInputSchemas.js +101 -0
  1182. package/dist/utilities/sharedInputSchemas.js.map +1 -0
  1183. package/dist/utilities/slugify.d.ts.map +1 -1
  1184. package/dist/utilities/stripUnselectedFields.d.ts.map +1 -1
  1185. package/dist/utilities/telemetry/conf/envPaths.d.ts.map +1 -1
  1186. package/dist/utilities/telemetry/conf/envPaths.js +40 -31
  1187. package/dist/utilities/telemetry/conf/envPaths.js.map +1 -1
  1188. package/dist/utilities/telemetry/conf/index.d.ts.map +1 -1
  1189. package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
  1190. package/dist/utilities/telemetry/events/adminInit.js +2 -3
  1191. package/dist/utilities/telemetry/events/adminInit.js.map +1 -1
  1192. package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
  1193. package/dist/utilities/telemetry/events/serverInit.js +2 -3
  1194. package/dist/utilities/telemetry/events/serverInit.js.map +1 -1
  1195. package/dist/utilities/telemetry/getProjectContext.d.ts +16 -0
  1196. package/dist/utilities/telemetry/getProjectContext.d.ts.map +1 -0
  1197. package/dist/utilities/telemetry/getProjectContext.js +43 -0
  1198. package/dist/utilities/telemetry/getProjectContext.js.map +1 -0
  1199. package/dist/utilities/telemetry/index.d.ts +18 -4
  1200. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  1201. package/dist/utilities/telemetry/index.js +13 -1
  1202. package/dist/utilities/telemetry/index.js.map +1 -1
  1203. package/dist/utilities/telemetry/index.spec.js +43 -0
  1204. package/dist/utilities/telemetry/index.spec.js.map +1 -0
  1205. package/dist/utilities/telemetry/oneWayHash.d.ts.map +1 -1
  1206. package/dist/utilities/timestamp.d.ts.map +1 -1
  1207. package/dist/utilities/toKebabCase.d.ts.map +1 -1
  1208. package/dist/utilities/transformColumnPreferences.d.ts.map +1 -1
  1209. package/dist/utilities/transformPointDataToPayload.d.ts +7 -0
  1210. package/dist/utilities/transformPointDataToPayload.d.ts.map +1 -0
  1211. package/dist/utilities/transformPointDataToPayload.js +28 -0
  1212. package/dist/utilities/transformPointDataToPayload.js.map +1 -0
  1213. package/dist/utilities/transformWhereQuery.d.ts.map +1 -1
  1214. package/dist/utilities/traverseFields.d.ts.map +1 -1
  1215. package/dist/utilities/traverseFields.js +20 -22
  1216. package/dist/utilities/traverseFields.js.map +1 -1
  1217. package/dist/utilities/traverseFields.spec.js +112 -0
  1218. package/dist/utilities/traverseFields.spec.js.map +1 -1
  1219. package/dist/utilities/traverseForLocalizedFields.d.ts.map +1 -1
  1220. package/dist/utilities/unflatten.d.ts.map +1 -1
  1221. package/dist/utilities/unflattenData.d.ts +3 -0
  1222. package/dist/utilities/unflattenData.d.ts.map +1 -0
  1223. package/dist/utilities/unflattenData.js +14 -0
  1224. package/dist/utilities/unflattenData.js.map +1 -0
  1225. package/dist/utilities/validateMimeType.d.ts.map +1 -1
  1226. package/dist/utilities/validateTimezones.d.ts.map +1 -1
  1227. package/dist/utilities/validateWhereQuery.d.ts.map +1 -1
  1228. package/dist/utilities/wordBoundariesRegex.d.ts.map +1 -1
  1229. package/dist/utilities/wrapInternalEndpoints.d.ts.map +1 -1
  1230. package/dist/utilities/zod.d.ts +5 -0
  1231. package/dist/utilities/zod.d.ts.map +1 -0
  1232. package/dist/utilities/zod.js +21 -0
  1233. package/dist/utilities/zod.js.map +1 -0
  1234. package/dist/versions/baseFields.d.ts.map +1 -1
  1235. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  1236. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  1237. package/dist/versions/buildVersionCompoundIndexes.d.ts.map +1 -1
  1238. package/dist/versions/defaults.d.ts.map +1 -1
  1239. package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
  1240. package/dist/versions/deleteScheduledPublishJobs.d.ts.map +1 -1
  1241. package/dist/versions/deleteScheduledPublishJobs.js +2 -2
  1242. package/dist/versions/deleteScheduledPublishJobs.js.map +1 -1
  1243. package/dist/versions/drafts/appendVersionToQueryKey.d.ts.map +1 -1
  1244. package/dist/versions/drafts/appendVersionToQueryKey.js +1 -3
  1245. package/dist/versions/drafts/appendVersionToQueryKey.js.map +1 -1
  1246. package/dist/versions/drafts/appendVersionToQueryKey.spec.js +28 -0
  1247. package/dist/versions/drafts/appendVersionToQueryKey.spec.js.map +1 -0
  1248. package/dist/versions/drafts/getQueryDraftsSelect.d.ts.map +1 -1
  1249. package/dist/versions/drafts/getQueryDraftsSort.d.ts.map +1 -1
  1250. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  1251. package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
  1252. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  1253. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  1254. package/dist/versions/migrations/localizeStatus/shared.d.ts.map +1 -1
  1255. package/dist/versions/payloadPackageList.d.ts.map +1 -1
  1256. package/dist/versions/payloadPackageList.js +0 -1
  1257. package/dist/versions/payloadPackageList.js.map +1 -1
  1258. package/dist/versions/schedule/job.d.ts.map +1 -1
  1259. package/dist/versions/schedule/job.js +4 -1
  1260. package/dist/versions/schedule/job.js.map +1 -1
  1261. package/package.json +24 -7
  1262. package/skills/payload/SKILL.md +526 -0
  1263. package/skills/payload/reference/ACCESS-CONTROL-ADVANCED.md +704 -0
  1264. package/skills/payload/reference/ACCESS-CONTROL.md +696 -0
  1265. package/skills/payload/reference/ADAPTERS.md +305 -0
  1266. package/skills/payload/reference/ADVANCED.md +386 -0
  1267. package/skills/payload/reference/COLLECTIONS.md +333 -0
  1268. package/skills/payload/reference/ENDPOINTS.md +634 -0
  1269. package/skills/payload/reference/FIELD-TYPE-GUARDS.md +553 -0
  1270. package/skills/payload/reference/FIELDS.md +745 -0
  1271. package/skills/payload/reference/HOOKS.md +186 -0
  1272. package/skills/payload/reference/PLUGIN-DEVELOPMENT.md +1436 -0
  1273. package/skills/payload/reference/QUERIES.md +274 -0
  1274. package/dist/bin/build.d.ts +0 -25
  1275. package/dist/bin/build.d.ts.map +0 -1
  1276. package/dist/bin/build.js +0 -80
  1277. package/dist/bin/build.js.map +0 -1
  1278. package/dist/bin/build.spec.js +0 -170
  1279. package/dist/bin/build.spec.js.map +0 -1
  1280. package/dist/bin/generateImportMap/generateImportMap.spec.js.map +0 -1
  1281. package/dist/bin/generateImportMap/index.d.ts.map +0 -1
  1282. package/dist/bin/generateImportMap/index.js.map +0 -1
  1283. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +0 -1
  1284. package/dist/bin/generateImportMap/iterateCollections.js.map +0 -1
  1285. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +0 -1
  1286. package/dist/bin/generateImportMap/iterateConfig.js.map +0 -1
  1287. package/dist/bin/generateImportMap/iterateFields.d.ts.map +0 -1
  1288. package/dist/bin/generateImportMap/iterateFields.js.map +0 -1
  1289. package/dist/bin/generateImportMap/iterateGlobals.d.ts.map +0 -1
  1290. package/dist/bin/generateImportMap/iterateGlobals.js.map +0 -1
  1291. package/dist/bin/generateImportMap/utilities/addPayloadComponentToImportMap.d.ts.map +0 -1
  1292. package/dist/bin/generateImportMap/utilities/addPayloadComponentToImportMap.js.map +0 -1
  1293. package/dist/bin/generateImportMap/utilities/getFromImportMap.d.ts.map +0 -1
  1294. package/dist/bin/generateImportMap/utilities/getFromImportMap.js.map +0 -1
  1295. package/dist/bin/generateImportMap/utilities/getImportMapToBaseDirPath.d.ts.map +0 -1
  1296. package/dist/bin/generateImportMap/utilities/getImportMapToBaseDirPath.js.map +0 -1
  1297. package/dist/bin/generateImportMap/utilities/parsePayloadComponent.d.ts.map +0 -1
  1298. package/dist/bin/generateImportMap/utilities/parsePayloadComponent.js.map +0 -1
  1299. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.d.ts.map +0 -1
  1300. package/dist/bin/generateImportMap/utilities/resolveImportMapFilePath.js.map +0 -1
  1301. package/dist/bin/generateTypes.d.ts +0 -6
  1302. package/dist/bin/generateTypes.d.ts.map +0 -1
  1303. package/dist/bin/generateTypes.js.map +0 -1
  1304. package/dist/bin/index.d.ts +0 -2
  1305. package/dist/bin/index.d.ts.map +0 -1
  1306. package/dist/bin/index.js +0 -200
  1307. package/dist/bin/index.js.map +0 -1
  1308. package/dist/bin/info.d.ts +0 -2
  1309. package/dist/bin/info.d.ts.map +0 -1
  1310. package/dist/bin/info.js +0 -56
  1311. package/dist/bin/info.js.map +0 -1
  1312. package/dist/bin/loadEnv.d.ts.map +0 -1
  1313. package/dist/bin/loadEnv.js.map +0 -1
  1314. package/dist/bin/migrate.d.ts +0 -15
  1315. package/dist/bin/migrate.d.ts.map +0 -1
  1316. package/dist/bin/migrate.js +0 -102
  1317. package/dist/bin/migrate.js.map +0 -1
  1318. package/dist/database/defaultUpdateJobs.d.ts +0 -3
  1319. package/dist/database/defaultUpdateJobs.d.ts.map +0 -1
  1320. package/dist/database/defaultUpdateJobs.js +0 -41
  1321. package/dist/database/defaultUpdateJobs.js.map +0 -1
  1322. package/dist/fields/baseFields/slug/countVersions.d.ts +0 -13
  1323. package/dist/fields/baseFields/slug/countVersions.d.ts.map +0 -1
  1324. package/dist/fields/baseFields/slug/countVersions.js +0 -29
  1325. package/dist/fields/baseFields/slug/countVersions.js.map +0 -1
  1326. package/dist/fields/baseFields/slug/index.d.ts +0 -89
  1327. package/dist/fields/baseFields/slug/index.d.ts.map +0 -1
  1328. package/dist/fields/baseFields/slug/index.js +0 -81
  1329. package/dist/fields/baseFields/slug/index.js.map +0 -1
  1330. package/dist/uploads/tempFile.d.ts +0 -7
  1331. package/dist/uploads/tempFile.d.ts.map +0 -1
  1332. package/dist/uploads/tempFile.js +0 -39
  1333. package/dist/uploads/tempFile.js.map +0 -1
  1334. package/dist/utilities/isRSCEnabled.d.ts +0 -12
  1335. package/dist/utilities/isRSCEnabled.d.ts.map +0 -1
  1336. package/dist/utilities/isRSCEnabled.js +0 -14
  1337. package/dist/utilities/isRSCEnabled.js.map +0 -1
  1338. /package/dist/{bin → cli/commands}/generateImportMap/generateImportMap.spec.js +0 -0
  1339. /package/dist/{bin → cli/commands}/generateImportMap/iterateFields.js +0 -0
  1340. /package/dist/{bin → cli/commands}/generateImportMap/iterateGlobals.js +0 -0
  1341. /package/dist/{bin → cli/commands}/generateImportMap/utilities/addPayloadComponentToImportMap.js +0 -0
  1342. /package/dist/{bin → cli/commands}/generateImportMap/utilities/getFromImportMap.js +0 -0
  1343. /package/dist/{bin → cli/commands}/generateImportMap/utilities/getImportMapToBaseDirPath.d.ts +0 -0
  1344. /package/dist/{bin → cli/commands}/generateImportMap/utilities/getImportMapToBaseDirPath.js +0 -0
  1345. /package/dist/{bin → cli/commands}/generateImportMap/utilities/parsePayloadComponent.js +0 -0
  1346. /package/dist/{bin → cli/commands}/generateImportMap/utilities/resolveImportMapFilePath.d.ts +0 -0
  1347. /package/dist/{bin → cli/runtime}/loadEnv.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/uploads/getFileFromUploadInstructions.spec.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\nimport type { UploadInstructions } from './types.js'\n\nimport { randomUUID } from 'node:crypto'\nimport fs from 'node:fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { afterEach, describe, expect, it, vi } from 'vitest'\n\nimport { HEADER_PROBE_BYTE_LENGTH } from './getFileContentRequirement.js'\nimport { getFileFromUploadInstructions } from './getFileFromUploadInstructions.js'\n\n// A minimal valid 1x1 transparent PNG, small enough that a header-only fetch gets all of it.\nconst MINIMAL_PNG = Buffer.from(\n 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA6fptVAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==',\n 'base64',\n)\n\nconst createReq = (\n handlers: Array<(...args: any[]) => any>,\n uploadConfigOverrides: Record<string, unknown> = { mimeTypes: ['video/*'] },\n): PayloadRequest =>\n ({\n payload: {\n collections: {\n media: {\n config: {\n upload: {\n disableLocalStorage: true,\n handlers,\n ...uploadConfigOverrides,\n },\n },\n },\n },\n config: {\n upload: {},\n },\n logger: {\n error: vi.fn(),\n },\n },\n headers: new Headers(),\n }) as unknown as PayloadRequest\n\nconst createUploadReferenceFile = (\n overrides: Partial<UploadInstructions['file']> = {},\n): UploadInstructions['file'] =>\n ({\n filename: 'video.mp4',\n mimeType: 'video/mp4',\n size: 18,\n uploadReference: { key: 'media/video.mp4' },\n ...overrides,\n }) as UploadInstructions['file']\n\ndescribe('getFileFromUploadInstructions', () => {\n const tempFilesToClean: string[] = []\n\n afterEach(() => {\n for (const filePath of tempFilesToClean) {\n fs.rmSync(filePath, { force: true })\n }\n tempFilesToClean.length = 0\n vi.clearAllMocks()\n })\n\n it('streams the fetched file to a temp file instead of buffering it in memory', async () => {\n const handler = vi.fn(\n async () =>\n new Response('some file contents', {\n headers: { 'Content-Type': 'video/mp4' },\n status: 200,\n }),\n )\n\n const req = createReq([handler])\n const uploadReferenceFile = createUploadReferenceFile()\n\n const file = await getFileFromUploadInstructions({\n collectionSlug: 'media',\n file: uploadReferenceFile,\n req,\n })\n\n expect(file.tempFilePath).toBeTruthy()\n tempFilesToClean.push(file.tempFilePath!)\n\n expect(file.data.length).toBe(0)\n expect(fs.readFileSync(file.tempFilePath!, 'utf8')).toBe('some file contents')\n expect(file.uploadReference).toBe(uploadReferenceFile.uploadReference)\n expect(file.mimetype).toBe('video/mp4')\n })\n\n it('writes the temp file under the configured tempFileDir', async () => {\n const customTempDir = path.join(os.tmpdir(), `payload-test-temp-dir-${Date.now()}`)\n const handler = vi.fn(async () => new Response('x', { status: 200 }))\n const req = createReq([handler])\n req.payload.config.upload = { tempFileDir: customTempDir }\n\n const file = await getFileFromUploadInstructions({\n collectionSlug: 'media',\n file: createUploadReferenceFile({ filename: 'x.bin', mimeType: 'application/octet-stream' }),\n req,\n })\n\n tempFilesToClean.push(file.tempFilePath!)\n expect(path.dirname(file.tempFilePath!)).toBe(customTempDir)\n\n fs.rmSync(customTempDir, { force: true, recursive: true })\n })\n\n it('throws when no handler returns a response with a body', async () => {\n const handler = vi.fn(async () => new Response(null, { status: 204 }))\n const req = createReq([handler])\n\n await expect(\n getFileFromUploadInstructions({\n collectionSlug: 'media',\n file: createUploadReferenceFile(),\n req,\n }),\n ).rejects.toThrow()\n })\n\n it('skips fetching entirely when nothing downstream needs the file content', async () => {\n const handler = vi.fn(async () => new Response('unused', { status: 200 }))\n const req = createReq([handler], {})\n\n const file = await getFileFromUploadInstructions({\n collectionSlug: 'media',\n file: createUploadReferenceFile(),\n req,\n })\n\n expect(handler).not.toHaveBeenCalled()\n expect(file.tempFilePath).toBeUndefined()\n expect(file.data.length).toBe(0)\n expect(file.size).toBe(18)\n expect(file.mimetype).toBe('video/mp4')\n })\n\n it('fetches only a bounded header for an image with no configured adjustments', async () => {\n const handler = vi.fn(async (handlerReq: PayloadRequest) => {\n expect(handlerReq.headers.get('range')).toBe(`bytes=0-${HEADER_PROBE_BYTE_LENGTH - 1}`)\n return new Response(MINIMAL_PNG, { headers: { 'Content-Type': 'image/png' }, status: 206 })\n })\n\n const req = createReq([handler], {})\n\n const file = await getFileFromUploadInstructions({\n collectionSlug: 'media',\n file: createUploadReferenceFile({\n filename: 'photo.png',\n mimeType: 'image/png',\n size: MINIMAL_PNG.length,\n }),\n req,\n })\n\n expect(handler).toHaveBeenCalledTimes(1)\n expect(file.tempFilePath).toBeUndefined()\n expect(file.data.equals(MINIMAL_PNG)).toBe(true)\n expect(file.mimetype).toBe('image/png')\n })\n\n it('fetches the full file for an image with no configured adjustments when the request includes a crop edit', async () => {\n const handler = vi.fn(async (handlerReq: PayloadRequest) => {\n expect(handlerReq.headers.get('range')).toBeNull()\n return new Response(MINIMAL_PNG, { headers: { 'Content-Type': 'image/png' }, status: 200 })\n })\n\n const req = createReq([handler], {})\n req.query = { uploadEdits: { crop: { height: 10, unit: 'px', width: 10, x: 0, y: 0 } } }\n\n const file = await getFileFromUploadInstructions({\n collectionSlug: 'media',\n file: createUploadReferenceFile({\n filename: 'photo.png',\n mimeType: 'image/png',\n size: MINIMAL_PNG.length,\n }),\n req,\n })\n\n expect(handler).toHaveBeenCalledTimes(1)\n expect(file.tempFilePath).toBeTruthy()\n tempFilesToClean.push(file.tempFilePath!)\n expect(file.data.length).toBe(0)\n expect(fs.readFileSync(file.tempFilePath!)).toEqual(MINIMAL_PNG)\n })\n\n it('stops reading once it has enough bytes to probe dimensions, even if the handler ignores the range hint', async () => {\n const totalSize = HEADER_PROBE_BYTE_LENGTH * 4\n let cancelled = false\n let bytesProduced = 0\n\n const stream = new ReadableStream({\n cancel() {\n cancelled = true\n },\n pull(controller) {\n if (bytesProduced === 0) {\n controller.enqueue(MINIMAL_PNG)\n bytesProduced += MINIMAL_PNG.length\n return\n }\n if (bytesProduced >= totalSize) {\n controller.close()\n return\n }\n const chunkSize = Math.min(64 * 1024, totalSize - bytesProduced)\n controller.enqueue(new Uint8Array(chunkSize))\n bytesProduced += chunkSize\n },\n })\n\n const handler = vi.fn(\n async () => new Response(stream, { headers: { 'Content-Type': 'image/png' }, status: 200 }),\n )\n const req = createReq([handler], {})\n\n const file = await getFileFromUploadInstructions({\n collectionSlug: 'media',\n file: createUploadReferenceFile({\n filename: 'photo.png',\n mimeType: 'image/png',\n size: totalSize,\n }),\n req,\n })\n\n expect(file.tempFilePath).toBeUndefined()\n expect(file.data.length).toBeLessThanOrEqual(HEADER_PROBE_BYTE_LENGTH)\n expect(cancelled).toBe(true)\n })\n\n it('preserves native Request accessors like signal on the request passed to a range-scoped handler', async () => {\n const abortController = new AbortController()\n const baseRequest = new Request('http://localhost/api/media', {\n signal: abortController.signal,\n })\n\n let observedSignal: AbortSignal | null | undefined\n\n const handler = vi.fn(async (handlerReq: PayloadRequest) => {\n observedSignal = handlerReq.signal\n return new Response(MINIMAL_PNG, { headers: { 'Content-Type': 'image/png' }, status: 206 })\n })\n\n const req = Object.assign(baseRequest, {\n payload: {\n collections: {\n media: {\n config: {\n upload: {\n disableLocalStorage: true,\n handlers: [handler],\n },\n },\n },\n },\n config: {\n upload: {},\n },\n logger: {\n error: vi.fn(),\n },\n },\n }) as unknown as PayloadRequest\n\n const file = await getFileFromUploadInstructions({\n collectionSlug: 'media',\n file: createUploadReferenceFile({\n filename: 'photo.png',\n mimeType: 'image/png',\n size: MINIMAL_PNG.length,\n }),\n req,\n })\n\n // req.signal is the Request's own internal signal, which follows the one passed into the\n // constructor rather than being the same object - reading it without throwing, and it\n // reflecting an abort, is what proves the accessor still works on the scoped request.\n expect(observedSignal).toBeInstanceOf(AbortSignal)\n expect(observedSignal?.aborted).toBe(false)\n abortController.abort()\n expect(observedSignal?.aborted).toBe(true)\n expect(file.data.equals(MINIMAL_PNG)).toBe(true)\n })\n\n it('removes the partial temp file if the response stream fails partway through', async () => {\n const customTempDir = path.join(os.tmpdir(), `payload-test-stream-failure-${randomUUID()}`)\n const streamError = new Error('stream boom')\n\n const stream = new ReadableStream({\n pull(controller) {\n controller.enqueue(new Uint8Array([1, 2, 3]))\n controller.error(streamError)\n },\n })\n\n const handler = vi.fn(\n async () => new Response(stream, { headers: { 'Content-Type': 'video/mp4' }, status: 200 }),\n )\n\n const req = createReq([handler])\n req.payload.config.upload = { tempFileDir: customTempDir }\n\n await expect(\n getFileFromUploadInstructions({\n collectionSlug: 'media',\n file: createUploadReferenceFile(),\n req,\n }),\n ).rejects.toThrow('stream boom')\n\n const filesLeftBehind = await fs.promises.readdir(customTempDir).catch(() => [])\n expect(filesLeftBehind).toEqual([])\n\n await fs.promises.rm(customTempDir, { force: true, recursive: true })\n })\n\n it('falls back to a full fetch when the header is not enough to determine image dimensions', async () => {\n const garbage = Buffer.from('not a real image')\n let callCount = 0\n\n const handler = vi.fn(async (handlerReq: PayloadRequest) => {\n callCount += 1\n if (handlerReq.headers.get('range')) {\n return new Response(garbage, { headers: { 'Content-Type': 'image/png' }, status: 206 })\n }\n return new Response('full-image-bytes-stand-in', {\n headers: { 'Content-Type': 'image/png' },\n status: 200,\n })\n })\n\n const req = createReq([handler], {})\n\n const file = await getFileFromUploadInstructions({\n collectionSlug: 'media',\n file: createUploadReferenceFile({ filename: 'photo.png', mimeType: 'image/png', size: 26 }),\n req,\n })\n\n expect(callCount).toBe(2)\n expect(file.tempFilePath).toBeTruthy()\n tempFilesToClean.push(file.tempFilePath!)\n expect(fs.readFileSync(file.tempFilePath!, 'utf8')).toBe('full-image-bytes-stand-in')\n })\n})\n"],"names":["randomUUID","fs","os","path","afterEach","describe","expect","it","vi","HEADER_PROBE_BYTE_LENGTH","getFileFromUploadInstructions","MINIMAL_PNG","Buffer","from","createReq","handlers","uploadConfigOverrides","mimeTypes","payload","collections","media","config","upload","disableLocalStorage","logger","error","fn","headers","Headers","createUploadReferenceFile","overrides","filename","mimeType","size","uploadReference","key","tempFilesToClean","filePath","rmSync","force","length","clearAllMocks","handler","Response","status","req","uploadReferenceFile","file","collectionSlug","tempFilePath","toBeTruthy","push","data","toBe","readFileSync","mimetype","customTempDir","join","tmpdir","Date","now","tempFileDir","dirname","recursive","rejects","toThrow","not","toHaveBeenCalled","toBeUndefined","handlerReq","get","toHaveBeenCalledTimes","equals","toBeNull","query","uploadEdits","crop","height","unit","width","x","y","toEqual","totalSize","cancelled","bytesProduced","stream","ReadableStream","cancel","pull","controller","enqueue","close","chunkSize","Math","min","Uint8Array","toBeLessThanOrEqual","abortController","AbortController","baseRequest","Request","signal","observedSignal","Object","assign","toBeInstanceOf","AbortSignal","aborted","abort","streamError","Error","filesLeftBehind","promises","readdir","catch","rm","garbage","callCount"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getFileTypeFallback.d.ts","sourceRoot":"","sources":["../../src/uploads/getFileTypeFallback.ts"],"names":[],"mappings":"AAAA,KAAK,UAAU,GAAG;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAiBD,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,UAOlD,CAAA"}
1
+ {"version":3,"file":"getFileTypeFallback.d.ts","sourceRoot":"","sources":["../../src/uploads/getFileTypeFallback.ts"],"names":[],"mappings":"AAAA,KAAK,UAAU,GAAG;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAiBD,eAAO,MAAM,mBAAmB,SAAU,MAAM,KAAG,UAOlD,CAAA"}
@@ -1,4 +1,15 @@
1
+ import type { SharpDependency } from '../config/types.js';
1
2
  import type { PayloadRequest } from '../types/index.js';
2
3
  import type { ProbedImageSize } from './types.js';
3
- export declare function getImageSize(file: PayloadRequest['file']): Promise<ProbedImageSize>;
4
+ type Args = {
5
+ file: PayloadRequest['file'];
6
+ /**
7
+ * The configured `sharp` instance, when available. Preferred for reading
8
+ * dimensions because it covers every format sharp can process. Falls back to
9
+ * the dependency-free probe when sharp is not configured.
10
+ */
11
+ sharp?: SharpDependency;
12
+ };
13
+ export declare function getImageSize({ file, sharp }: Args): Promise<ProbedImageSize>;
14
+ export {};
4
15
  //# sourceMappingURL=getImageSize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getImageSize.d.ts","sourceRoot":"","sources":["../../src/uploads/getImageSize.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAIjD,wBAAsB,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAmBzF"}
1
+ {"version":3,"file":"getImageSize.d.ts","sourceRoot":"","sources":["../../src/uploads/getImageSize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAIjD,KAAK,IAAI,GAAG;IACV,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IAC5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAA;CACxB,CAAA;AAED,wBAAsB,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAqBlF"}
@@ -1,23 +1,25 @@
1
- import fs from 'fs/promises';
2
- import { imageSize } from 'image-size';
3
- import { imageSizeFromFile } from 'image-size/fromFile';
4
- import { temporaryFileTask } from './tempFile.js';
5
- export async function getImageSize(file) {
6
- if (file?.tempFilePath) {
7
- return imageSizeFromFile(file.tempFilePath);
1
+ import { probeImageSize, probeImageSizeFromPath } from './probeImageSize.js';
2
+ export async function getImageSize({ file, sharp }) {
3
+ // `tempFilePath` may be an empty string when the file is held in memory
4
+ const tempFilePath = file?.tempFilePath || undefined;
5
+ if (sharp) {
6
+ try {
7
+ const { height, width } = await sharp(tempFilePath ?? file.data).metadata();
8
+ if (width && height) {
9
+ return {
10
+ height,
11
+ width
12
+ };
13
+ }
14
+ } catch {
15
+ // sharp decodes the full image and rejects truncated/header-only files
16
+ // that the byte-level probe can still measure, so fall through to it
17
+ }
8
18
  }
9
- // Tiff file do not support buffers or streams, so we must write to file first
10
- // then retrieve dimensions. https://github.com/image-size/image-size/issues/103
11
- if (file?.mimetype === 'image/tiff') {
12
- const dimensions = await temporaryFileTask(async (filepath)=>{
13
- await fs.writeFile(filepath, file.data);
14
- return imageSizeFromFile(filepath);
15
- }, {
16
- extension: 'tiff'
17
- });
18
- return dimensions;
19
+ if (tempFilePath) {
20
+ return probeImageSizeFromPath(tempFilePath);
19
21
  }
20
- return imageSize(file.data);
22
+ return probeImageSize(file.data);
21
23
  }
22
24
 
23
25
  //# sourceMappingURL=getImageSize.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/getImageSize.ts"],"sourcesContent":["import fs from 'fs/promises'\nimport { imageSize } from 'image-size'\nimport { imageSizeFromFile } from 'image-size/fromFile'\n\nimport type { PayloadRequest } from '../types/index.js'\nimport type { ProbedImageSize } from './types.js'\n\nimport { temporaryFileTask } from './tempFile.js'\n\nexport async function getImageSize(file: PayloadRequest['file']): Promise<ProbedImageSize> {\n if (file?.tempFilePath) {\n return imageSizeFromFile(file.tempFilePath)\n }\n\n // Tiff file do not support buffers or streams, so we must write to file first\n // then retrieve dimensions. https://github.com/image-size/image-size/issues/103\n if (file?.mimetype === 'image/tiff') {\n const dimensions = await temporaryFileTask(\n async (filepath: string) => {\n await fs.writeFile(filepath, file.data)\n return imageSizeFromFile(filepath)\n },\n { extension: 'tiff' },\n )\n return dimensions\n }\n\n return imageSize(file!.data)\n}\n"],"names":["fs","imageSize","imageSizeFromFile","temporaryFileTask","getImageSize","file","tempFilePath","mimetype","dimensions","filepath","writeFile","data","extension"],"mappings":"AAAA,OAAOA,QAAQ,cAAa;AAC5B,SAASC,SAAS,QAAQ,aAAY;AACtC,SAASC,iBAAiB,QAAQ,sBAAqB;AAKvD,SAASC,iBAAiB,QAAQ,gBAAe;AAEjD,OAAO,eAAeC,aAAaC,IAA4B;IAC7D,IAAIA,MAAMC,cAAc;QACtB,OAAOJ,kBAAkBG,KAAKC,YAAY;IAC5C;IAEA,8EAA8E;IAC9E,gFAAgF;IAChF,IAAID,MAAME,aAAa,cAAc;QACnC,MAAMC,aAAa,MAAML,kBACvB,OAAOM;YACL,MAAMT,GAAGU,SAAS,CAACD,UAAUJ,KAAKM,IAAI;YACtC,OAAOT,kBAAkBO;QAC3B,GACA;YAAEG,WAAW;QAAO;QAEtB,OAAOJ;IACT;IAEA,OAAOP,UAAUI,KAAMM,IAAI;AAC7B"}
1
+ {"version":3,"sources":["../../src/uploads/getImageSize.ts"],"sourcesContent":["import type { SharpDependency } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { ProbedImageSize } from './types.js'\n\nimport { probeImageSize, probeImageSizeFromPath } from './probeImageSize.js'\n\ntype Args = {\n file: PayloadRequest['file']\n /**\n * The configured `sharp` instance, when available. Preferred for reading\n * dimensions because it covers every format sharp can process. Falls back to\n * the dependency-free probe when sharp is not configured.\n */\n sharp?: SharpDependency\n}\n\nexport async function getImageSize({ file, sharp }: Args): Promise<ProbedImageSize> {\n // `tempFilePath` may be an empty string when the file is held in memory\n const tempFilePath = file?.tempFilePath || undefined\n\n if (sharp) {\n try {\n const { height, width } = await sharp(tempFilePath ?? file!.data).metadata()\n if (width && height) {\n return { height, width }\n }\n } catch {\n // sharp decodes the full image and rejects truncated/header-only files\n // that the byte-level probe can still measure, so fall through to it\n }\n }\n\n if (tempFilePath) {\n return probeImageSizeFromPath(tempFilePath)\n }\n\n return probeImageSize(file!.data)\n}\n"],"names":["probeImageSize","probeImageSizeFromPath","getImageSize","file","sharp","tempFilePath","undefined","height","width","data","metadata"],"mappings":"AAIA,SAASA,cAAc,EAAEC,sBAAsB,QAAQ,sBAAqB;AAY5E,OAAO,eAAeC,aAAa,EAAEC,IAAI,EAAEC,KAAK,EAAQ;IACtD,wEAAwE;IACxE,MAAMC,eAAeF,MAAME,gBAAgBC;IAE3C,IAAIF,OAAO;QACT,IAAI;YACF,MAAM,EAAEG,MAAM,EAAEC,KAAK,EAAE,GAAG,MAAMJ,MAAMC,gBAAgBF,KAAMM,IAAI,EAAEC,QAAQ;YAC1E,IAAIF,SAASD,QAAQ;gBACnB,OAAO;oBAAEA;oBAAQC;gBAAM;YACzB;QACF,EAAE,OAAM;QACN,uEAAuE;QACvE,qEAAqE;QACvE;IACF;IAEA,IAAIH,cAAc;QAChB,OAAOJ,uBAAuBI;IAChC;IAEA,OAAOL,eAAeG,KAAMM,IAAI;AAClC"}
@@ -0,0 +1,298 @@
1
+ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'fs';
2
+ import os from 'os';
3
+ import path from 'path';
4
+ import sharp from 'sharp';
5
+ import { fileURLToPath } from 'url';
6
+ import { afterAll, afterEach, describe, expect, it, vi } from 'vitest';
7
+ import { getImageSize } from './getImageSize.js';
8
+ // Tracks bytes actually read off disk so the streaming test below can assert
9
+ // that a large file's tail is never pulled into memory
10
+ const counters = vi.hoisted(()=>({
11
+ bytesReadFromDisk: 0
12
+ }));
13
+ vi.mock('fs', async (importOriginal)=>{
14
+ const actual = await importOriginal();
15
+ return {
16
+ ...actual,
17
+ createReadStream: (...args)=>{
18
+ const stream = actual.createReadStream(...args);
19
+ stream.on('data', (chunk)=>{
20
+ counters.bytesReadFromDisk += chunk.length;
21
+ });
22
+ return stream;
23
+ }
24
+ };
25
+ });
26
+ const dirname = path.dirname(fileURLToPath(import.meta.url));
27
+ const fixturesDir = path.resolve(dirname, '../../../../test/uploads');
28
+ // Minimal JPEG XL bare-codestream encoder (bit-packed, little-endian, LSB
29
+ // first). See probeImageSize.spec.ts for the full JXL parsing test suite;
30
+ // this only needs to produce a valid header for the sharp-fallback tests below
31
+ const encodeJXLCodestream = (width, height)=>{
32
+ const bits = [];
33
+ const pushBits = (value, length)=>{
34
+ for(let i = 0; i < length; i++){
35
+ bits.push(value >> i & 1);
36
+ }
37
+ };
38
+ const pushDimension = (value)=>{
39
+ const n = value - 1;
40
+ const sizeClasses = [
41
+ 9,
42
+ 13,
43
+ 18,
44
+ 30
45
+ ];
46
+ const classIndex = sizeClasses.findIndex((extraBits)=>n < 2 ** extraBits);
47
+ pushBits(classIndex, 2);
48
+ pushBits(n, sizeClasses[classIndex]);
49
+ };
50
+ pushBits(0, 1); // isSmallImage = false
51
+ pushDimension(height);
52
+ pushBits(0, 3); // widthMode = 0 (explicit dimension)
53
+ pushDimension(width);
54
+ const body = Buffer.alloc(Math.ceil(bits.length / 8));
55
+ bits.forEach((bit, i)=>{
56
+ if (bit) {
57
+ body[Math.floor(i / 8)] |= 1 << i % 8;
58
+ }
59
+ });
60
+ return Buffer.concat([
61
+ Buffer.from([
62
+ 0xff,
63
+ 0x0a
64
+ ]),
65
+ body
66
+ ]);
67
+ };
68
+ const fileFor = (name)=>{
69
+ const data = readFileSync(path.join(fixturesDir, name));
70
+ // In-memory uploads carry an empty `tempFilePath`, which must fall back to `data`
71
+ return {
72
+ data,
73
+ mimetype: 'image/test',
74
+ name,
75
+ size: data.length,
76
+ tempFilePath: ''
77
+ };
78
+ };
79
+ describe('getImageSize', ()=>{
80
+ const cases = [
81
+ {
82
+ file: 'test-image.png',
83
+ height: 800,
84
+ width: 800
85
+ },
86
+ {
87
+ file: 'test-image.jpg',
88
+ height: 800,
89
+ width: 800
90
+ },
91
+ {
92
+ file: 'non-animated.webp',
93
+ height: 420,
94
+ width: 900
95
+ },
96
+ {
97
+ file: 'test-image-avif.avif',
98
+ height: 800,
99
+ width: 800
100
+ },
101
+ {
102
+ file: 'image.svg',
103
+ height: 260,
104
+ width: 260
105
+ }
106
+ ];
107
+ it.each(cases)('should read $file dimensions via sharp', async ({ file, height, width })=>{
108
+ expect(await getImageSize({
109
+ file: fileFor(file),
110
+ sharp
111
+ })).toEqual({
112
+ height,
113
+ width
114
+ });
115
+ });
116
+ it.each(cases)('should read $file dimensions via the probe fallback', async ({ file, height, width })=>{
117
+ expect(await getImageSize({
118
+ file: fileFor(file)
119
+ })).toEqual({
120
+ height,
121
+ width
122
+ });
123
+ });
124
+ it('should fall back to the probe when sharp cannot decode a header-only image', async ()=>{
125
+ // A 1x1 PNG truncated after IHDR: the header is readable but there is no
126
+ // pixel data, so sharp throws while the probe still measures it.
127
+ const data = Buffer.from('89504e470d0a1a0a0000000d49484452000000010000000108060000001f15c489', 'hex');
128
+ const file = {
129
+ data,
130
+ mimetype: 'image/png',
131
+ name: 'truncated.png',
132
+ size: data.length,
133
+ tempFilePath: ''
134
+ };
135
+ expect(await getImageSize({
136
+ file,
137
+ sharp
138
+ })).toEqual({
139
+ height: 1,
140
+ width: 1
141
+ });
142
+ expect(await getImageSize({
143
+ file
144
+ })).toEqual({
145
+ height: 1,
146
+ width: 1
147
+ });
148
+ });
149
+ it('should read TIFF dimensions from a tempFilePath without a temp-file workaround', async ()=>{
150
+ const tempFilePath = path.join(fixturesDir, 'test-image.tiff');
151
+ const file = {
152
+ mimetype: 'image/tiff',
153
+ name: 'test-image.tiff',
154
+ tempFilePath
155
+ };
156
+ expect(await getImageSize({
157
+ file,
158
+ sharp
159
+ })).toEqual({
160
+ height: 100,
161
+ width: 200
162
+ });
163
+ expect(await getImageSize({
164
+ file
165
+ })).toEqual({
166
+ height: 100,
167
+ width: 200
168
+ });
169
+ });
170
+ describe('sharp cannot decode JPEG XL', ()=>{
171
+ const tempDir = mkdtempSync(path.join(os.tmpdir(), 'payload-get-image-size-jxl-'));
172
+ afterAll(()=>{
173
+ rmSync(tempDir, {
174
+ recursive: true,
175
+ force: true
176
+ });
177
+ });
178
+ it('should fall back to the probe for an in-memory JPEG XL buffer', async ()=>{
179
+ // `isImage('image/jxl')` is true, so `generateFileData` always calls
180
+ // `getImageSize` with `sharp` for JXL uploads; sharp rejects the format
181
+ // (libvips has no JXL codec) and the probe must take over
182
+ const data = encodeJXLCodestream(1920, 1080);
183
+ const file = {
184
+ data,
185
+ mimetype: 'image/jxl',
186
+ name: 'test.jxl',
187
+ size: data.length,
188
+ tempFilePath: ''
189
+ };
190
+ expect(await getImageSize({
191
+ file,
192
+ sharp
193
+ })).toEqual({
194
+ height: 1080,
195
+ width: 1920
196
+ });
197
+ });
198
+ it('should fall back to the probe for a JPEG XL tempFilePath', async ()=>{
199
+ const tempFilePath = path.join(tempDir, 'test.jxl');
200
+ writeFileSync(tempFilePath, encodeJXLCodestream(640, 480));
201
+ const file = {
202
+ mimetype: 'image/jxl',
203
+ name: 'test.jxl',
204
+ tempFilePath
205
+ };
206
+ expect(await getImageSize({
207
+ file,
208
+ sharp
209
+ })).toEqual({
210
+ height: 480,
211
+ width: 640
212
+ });
213
+ });
214
+ });
215
+ describe('streaming from tempFilePath', ()=>{
216
+ const tempDir = mkdtempSync(path.join(os.tmpdir(), 'payload-get-image-size-'));
217
+ afterEach(()=>{
218
+ counters.bytesReadFromDisk = 0;
219
+ });
220
+ afterAll(()=>{
221
+ rmSync(tempDir, {
222
+ recursive: true,
223
+ force: true
224
+ });
225
+ });
226
+ it('should not read a whole large PNG into memory when probing via tempFilePath', async ()=>{
227
+ // image-dimensions only reads the PNG signature (bytes 0-7) and the
228
+ // width/height fields (bytes 16-23); everything else here is filler
229
+ const header = Buffer.alloc(24);
230
+ header.write('\x89PNG\r\n\x1a\n', 0, 'binary');
231
+ header.writeUInt32BE(1920, 16);
232
+ header.writeUInt32BE(1080, 20);
233
+ const largeFileSize = 3 * 1024 * 1024;
234
+ const largeFile = Buffer.concat([
235
+ header,
236
+ Buffer.alloc(largeFileSize)
237
+ ]);
238
+ const tempFilePath = path.join(tempDir, 'large.png');
239
+ writeFileSync(tempFilePath, largeFile);
240
+ const file = {
241
+ mimetype: 'image/png',
242
+ name: 'large.png',
243
+ tempFilePath
244
+ };
245
+ expect(await getImageSize({
246
+ file
247
+ })).toEqual({
248
+ height: 1080,
249
+ width: 1920
250
+ });
251
+ // Confirms the read actually went through `createReadStream` rather
252
+ // than skipping it entirely (which would trivially satisfy "< 500KB")
253
+ expect(counters.bytesReadFromDisk).toBeGreaterThan(0);
254
+ expect(counters.bytesReadFromDisk).toBeLessThan(500 * 1024);
255
+ expect(counters.bytesReadFromDisk).toBeLessThan(largeFile.length);
256
+ });
257
+ it.each(cases.filter(({ file })=>file !== 'image.svg'))('should read $file dimensions via imageDimensionsFromStream when streamed from a tempFilePath', async ({ file, height, width })=>{
258
+ const tempFilePath = path.join(tempDir, file);
259
+ writeFileSync(tempFilePath, readFileSync(path.join(fixturesDir, file)));
260
+ const streamedFile = {
261
+ mimetype: 'image/test',
262
+ name: file,
263
+ tempFilePath
264
+ };
265
+ expect(await getImageSize({
266
+ file: streamedFile
267
+ })).toEqual({
268
+ height,
269
+ width
270
+ });
271
+ });
272
+ it('should read GIF dimensions when streamed from a tempFilePath', async ()=>{
273
+ // No GIF fixture lives in this directory; `image-dimensions` only needs
274
+ // the 6-byte signature plus the 4-byte width/height fields that follow it
275
+ const header = Buffer.concat([
276
+ Buffer.from('GIF89a', 'ascii'),
277
+ Buffer.alloc(4)
278
+ ]);
279
+ header.writeUInt16LE(64, 6);
280
+ header.writeUInt16LE(48, 8);
281
+ const tempFilePath = path.join(tempDir, 'test.gif');
282
+ writeFileSync(tempFilePath, header);
283
+ const file = {
284
+ mimetype: 'image/gif',
285
+ name: 'test.gif',
286
+ tempFilePath
287
+ };
288
+ expect(await getImageSize({
289
+ file
290
+ })).toEqual({
291
+ height: 48,
292
+ width: 64
293
+ });
294
+ });
295
+ });
296
+ });
297
+
298
+ //# sourceMappingURL=getImageSize.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/uploads/getImageSize.spec.ts"],"sourcesContent":["import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'fs'\nimport os from 'os'\nimport path from 'path'\nimport sharp from 'sharp'\nimport { fileURLToPath } from 'url'\nimport { afterAll, afterEach, describe, expect, it, vi } from 'vitest'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { getImageSize } from './getImageSize.js'\n\n// Tracks bytes actually read off disk so the streaming test below can assert\n// that a large file's tail is never pulled into memory\nconst counters = vi.hoisted(() => ({ bytesReadFromDisk: 0 }))\n\nvi.mock('fs', async (importOriginal) => {\n const actual = await importOriginal<typeof import('fs')>()\n return {\n ...actual,\n createReadStream: (...args: Parameters<typeof actual.createReadStream>) => {\n const stream = actual.createReadStream(...args)\n stream.on('data', (chunk: Buffer) => {\n counters.bytesReadFromDisk += chunk.length\n })\n return stream\n },\n }\n})\n\nconst dirname = path.dirname(fileURLToPath(import.meta.url))\nconst fixturesDir = path.resolve(dirname, '../../../../test/uploads')\n\n// Minimal JPEG XL bare-codestream encoder (bit-packed, little-endian, LSB\n// first). See probeImageSize.spec.ts for the full JXL parsing test suite;\n// this only needs to produce a valid header for the sharp-fallback tests below\nconst encodeJXLCodestream = (width: number, height: number): Buffer => {\n const bits: number[] = []\n const pushBits = (value: number, length: number) => {\n for (let i = 0; i < length; i++) {\n bits.push((value >> i) & 1)\n }\n }\n const pushDimension = (value: number) => {\n const n = value - 1\n const sizeClasses = [9, 13, 18, 30]\n const classIndex = sizeClasses.findIndex((extraBits) => n < 2 ** extraBits)\n pushBits(classIndex, 2)\n pushBits(n, sizeClasses[classIndex]!)\n }\n\n pushBits(0, 1) // isSmallImage = false\n pushDimension(height)\n pushBits(0, 3) // widthMode = 0 (explicit dimension)\n pushDimension(width)\n\n const body = Buffer.alloc(Math.ceil(bits.length / 8))\n bits.forEach((bit, i) => {\n if (bit) {\n body[Math.floor(i / 8)]! |= 1 << i % 8\n }\n })\n\n return Buffer.concat([Buffer.from([0xff, 0x0a]), body])\n}\n\nconst fileFor = (name: string): PayloadRequest['file'] => {\n const data = readFileSync(path.join(fixturesDir, name))\n // In-memory uploads carry an empty `tempFilePath`, which must fall back to `data`\n return {\n data,\n mimetype: 'image/test',\n name,\n size: data.length,\n tempFilePath: '',\n } as PayloadRequest['file']\n}\n\ndescribe('getImageSize', () => {\n const cases: Array<{ file: string; height: number; width: number }> = [\n { file: 'test-image.png', height: 800, width: 800 },\n { file: 'test-image.jpg', height: 800, width: 800 },\n { file: 'non-animated.webp', height: 420, width: 900 },\n { file: 'test-image-avif.avif', height: 800, width: 800 },\n { file: 'image.svg', height: 260, width: 260 },\n ]\n\n it.each(cases)('should read $file dimensions via sharp', async ({ file, height, width }) => {\n expect(await getImageSize({ file: fileFor(file), sharp })).toEqual({ height, width })\n })\n\n it.each(cases)(\n 'should read $file dimensions via the probe fallback',\n async ({ file, height, width }) => {\n expect(await getImageSize({ file: fileFor(file) })).toEqual({ height, width })\n },\n )\n\n it('should fall back to the probe when sharp cannot decode a header-only image', async () => {\n // A 1x1 PNG truncated after IHDR: the header is readable but there is no\n // pixel data, so sharp throws while the probe still measures it.\n const data = Buffer.from(\n '89504e470d0a1a0a0000000d49484452000000010000000108060000001f15c489',\n 'hex',\n )\n const file = {\n data,\n mimetype: 'image/png',\n name: 'truncated.png',\n size: data.length,\n tempFilePath: '',\n } as PayloadRequest['file']\n\n expect(await getImageSize({ file, sharp })).toEqual({ height: 1, width: 1 })\n expect(await getImageSize({ file })).toEqual({ height: 1, width: 1 })\n })\n\n it('should read TIFF dimensions from a tempFilePath without a temp-file workaround', async () => {\n const tempFilePath = path.join(fixturesDir, 'test-image.tiff')\n const file = {\n mimetype: 'image/tiff',\n name: 'test-image.tiff',\n tempFilePath,\n } as PayloadRequest['file']\n\n expect(await getImageSize({ file, sharp })).toEqual({ height: 100, width: 200 })\n expect(await getImageSize({ file })).toEqual({ height: 100, width: 200 })\n })\n\n describe('sharp cannot decode JPEG XL', () => {\n const tempDir = mkdtempSync(path.join(os.tmpdir(), 'payload-get-image-size-jxl-'))\n\n afterAll(() => {\n rmSync(tempDir, { recursive: true, force: true })\n })\n\n it('should fall back to the probe for an in-memory JPEG XL buffer', async () => {\n // `isImage('image/jxl')` is true, so `generateFileData` always calls\n // `getImageSize` with `sharp` for JXL uploads; sharp rejects the format\n // (libvips has no JXL codec) and the probe must take over\n const data = encodeJXLCodestream(1920, 1080)\n const file = {\n data,\n mimetype: 'image/jxl',\n name: 'test.jxl',\n size: data.length,\n tempFilePath: '',\n } as PayloadRequest['file']\n\n expect(await getImageSize({ file, sharp })).toEqual({ height: 1080, width: 1920 })\n })\n\n it('should fall back to the probe for a JPEG XL tempFilePath', async () => {\n const tempFilePath = path.join(tempDir, 'test.jxl')\n writeFileSync(tempFilePath, encodeJXLCodestream(640, 480))\n\n const file = {\n mimetype: 'image/jxl',\n name: 'test.jxl',\n tempFilePath,\n } as PayloadRequest['file']\n\n expect(await getImageSize({ file, sharp })).toEqual({ height: 480, width: 640 })\n })\n })\n\n describe('streaming from tempFilePath', () => {\n const tempDir = mkdtempSync(path.join(os.tmpdir(), 'payload-get-image-size-'))\n\n afterEach(() => {\n counters.bytesReadFromDisk = 0\n })\n\n afterAll(() => {\n rmSync(tempDir, { recursive: true, force: true })\n })\n\n it('should not read a whole large PNG into memory when probing via tempFilePath', async () => {\n // image-dimensions only reads the PNG signature (bytes 0-7) and the\n // width/height fields (bytes 16-23); everything else here is filler\n const header = Buffer.alloc(24)\n header.write('\\x89PNG\\r\\n\\x1a\\n', 0, 'binary')\n header.writeUInt32BE(1920, 16)\n header.writeUInt32BE(1080, 20)\n const largeFileSize = 3 * 1024 * 1024\n const largeFile = Buffer.concat([header, Buffer.alloc(largeFileSize)])\n\n const tempFilePath = path.join(tempDir, 'large.png')\n writeFileSync(tempFilePath, largeFile)\n\n const file = {\n mimetype: 'image/png',\n name: 'large.png',\n tempFilePath,\n } as PayloadRequest['file']\n\n expect(await getImageSize({ file })).toEqual({ height: 1080, width: 1920 })\n // Confirms the read actually went through `createReadStream` rather\n // than skipping it entirely (which would trivially satisfy \"< 500KB\")\n expect(counters.bytesReadFromDisk).toBeGreaterThan(0)\n expect(counters.bytesReadFromDisk).toBeLessThan(500 * 1024)\n expect(counters.bytesReadFromDisk).toBeLessThan(largeFile.length)\n })\n\n it.each(cases.filter(({ file }) => file !== 'image.svg'))(\n 'should read $file dimensions via imageDimensionsFromStream when streamed from a tempFilePath',\n async ({ file, height, width }) => {\n const tempFilePath = path.join(tempDir, file)\n writeFileSync(tempFilePath, readFileSync(path.join(fixturesDir, file)))\n\n const streamedFile = {\n mimetype: 'image/test',\n name: file,\n tempFilePath,\n } as PayloadRequest['file']\n\n expect(await getImageSize({ file: streamedFile })).toEqual({ height, width })\n },\n )\n\n it('should read GIF dimensions when streamed from a tempFilePath', async () => {\n // No GIF fixture lives in this directory; `image-dimensions` only needs\n // the 6-byte signature plus the 4-byte width/height fields that follow it\n const header = Buffer.concat([Buffer.from('GIF89a', 'ascii'), Buffer.alloc(4)])\n header.writeUInt16LE(64, 6)\n header.writeUInt16LE(48, 8)\n\n const tempFilePath = path.join(tempDir, 'test.gif')\n writeFileSync(tempFilePath, header)\n\n const file = {\n mimetype: 'image/gif',\n name: 'test.gif',\n tempFilePath,\n } as PayloadRequest['file']\n\n expect(await getImageSize({ file })).toEqual({ height: 48, width: 64 })\n })\n })\n})\n"],"names":["mkdtempSync","readFileSync","rmSync","writeFileSync","os","path","sharp","fileURLToPath","afterAll","afterEach","describe","expect","it","vi","getImageSize","counters","hoisted","bytesReadFromDisk","mock","importOriginal","actual","createReadStream","args","stream","on","chunk","length","dirname","url","fixturesDir","resolve","encodeJXLCodestream","width","height","bits","pushBits","value","i","push","pushDimension","n","sizeClasses","classIndex","findIndex","extraBits","body","Buffer","alloc","Math","ceil","forEach","bit","floor","concat","from","fileFor","name","data","join","mimetype","size","tempFilePath","cases","file","each","toEqual","tempDir","tmpdir","recursive","force","header","write","writeUInt32BE","largeFileSize","largeFile","toBeGreaterThan","toBeLessThan","filter","streamedFile","writeUInt16LE"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getSafeFilename.d.ts","sourceRoot":"","sources":["../../src/uploads/getSafeFilename.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKvD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAe5C,CAAA;AAED,KAAK,IAAI,GAAG;IACV,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,cAAc,CAAA;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,eAAe,CAAC,EACpC,cAAc,EACd,eAAe,EACf,MAAM,EACN,GAAG,EACH,UAAU,GACX,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBxB"}
1
+ {"version":3,"file":"getSafeFilename.d.ts","sourceRoot":"","sources":["../../src/uploads/getSafeFilename.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKvD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,SAAU,MAAM,KAAG,MAe5C,CAAA;AAED,KAAK,IAAI,GAAG;IACV,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,cAAc,CAAA;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,eAAe,CAAC,EACpC,cAAc,EACd,eAAe,EACf,MAAM,EACN,GAAG,EACH,UAAU,GACX,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"createImageSize.d.ts","sourceRoot":"","sources":["../../../src/uploads/image-resizing/createImageSize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC/B,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC/B,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrB,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;CAC1B,CAAA;AACD,eAAO,MAAM,eAAe,GAAI,uDAO7B,gBAAgB,KAAG,QASrB,CAAA"}
1
+ {"version":3,"file":"createImageSize.d.ts","sourceRoot":"","sources":["../../../src/uploads/image-resizing/createImageSize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC/B,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAA;IAC/B,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrB,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;CAC1B,CAAA;AACD,eAAO,MAAM,eAAe,0DAOzB,gBAAgB,KAAG,QASrB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"createImageSizes.d.ts","sourceRoot":"","sources":["../../../src/uploads/image-resizing/createImageSizes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,KAAK,EAAY,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAW/F;;;;;;;;;;;;;GAaG;AAEH,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,yBAAyB,CAAA;IACjC,UAAU,EAAE,eAAe,CAAA;IAC3B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED,sEAAsE;AACtE,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,SAAS,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B,CAAA;AAED,wBAAsB,gBAAgB,CAAC,EACrC,MAAM,EACN,UAAU,EACV,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,GAAG,EACH,aAAa,EACb,KAAK,EACL,UAAU,EACV,YAAY,GACb,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyOxC"}
1
+ {"version":3,"file":"createImageSizes.d.ts","sourceRoot":"","sources":["../../../src/uploads/image-resizing/createImageSizes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,KAAK,EAAY,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAY/F;;;;;;;;;;;;;GAaG;AAEH,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,yBAAyB,CAAA;IACjC,UAAU,EAAE,eAAe,CAAA;IAC3B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED,sEAAsE;AACtE,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,SAAS,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B,CAAA;AAED,wBAAsB,gBAAgB,CAAC,EACrC,MAAM,EACN,UAAU,EACV,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,GAAG,EACH,aAAa,EACb,KAAK,EACL,UAAU,EACV,YAAY,GACb,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyOxC"}
@@ -1,6 +1,7 @@
1
1
  import { fileTypeFromBuffer } from 'file-type';
2
2
  import fs from 'fs/promises';
3
3
  import { fileExists } from '../fileExists.js';
4
+ import { isAnimatedImage } from '../isAnimatedImage.js';
4
5
  import { optionallyAppendMetadata } from '../optionallyAppendMetadata.js';
5
6
  import { createImageSize } from './createImageSize.js';
6
7
  import { extractHeightFromImage } from './extractHeightFromImage.js';
@@ -17,11 +18,7 @@ export async function createImageSizes({ config, dimensions, file, focalPoint, m
17
18
  };
18
19
  }
19
20
  // Determine if the file is animated
20
- const fileIsAnimatedType = [
21
- 'image/avif',
22
- 'image/gif',
23
- 'image/webp'
24
- ].includes(file.mimetype);
21
+ const fileIsAnimatedType = isAnimatedImage(file.mimetype);
25
22
  const sharpOptions = {};
26
23
  if (fileIsAnimatedType) {
27
24
  sharpOptions.animated = true;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/uploads/image-resizing/createImageSizes.ts"],"sourcesContent":["import type { Sharp, SharpOptions } from 'sharp'\n\nimport { fileTypeFromBuffer } from 'file-type'\nimport fs from 'fs/promises'\n\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { SharpDependency } from '../../config/types.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type { WithMetadata } from '../optionallyAppendMetadata.js'\nimport type { FileSize, FileSizes, FileToSave, FocalPoint, ProbedImageSize } from '../types.js'\n\nimport { fileExists } from '../fileExists.js'\nimport { optionallyAppendMetadata } from '../optionallyAppendMetadata.js'\nimport { createImageSize } from './createImageSize.js'\nimport { extractHeightFromImage } from './extractHeightFromImage.js'\nimport { generateImageSizeFilename } from './generateImageSizeFilename.js'\nimport { getImageResizeAction } from './getImageResizeAction.js'\nimport { parseFilename } from './parseFilename.js'\nimport { sanitizeResizeConfig } from './sanitizeResizeConfig.js'\n\n/**\n * For the provided image sizes, handle the resizing and the transforms\n * (format, trim, etc.) of each requested image size and return the result object.\n * This only handles the image sizes. The transforms of the original image\n * are handled in {@link ./generateFileData.ts}.\n *\n * The image will be resized according to the provided\n * resize config. If no image sizes are requested, the resolved data will be empty.\n * For every image that does not need to be resized, a result object with `null`\n * parameters will be returned.\n *\n * @param resizeConfig - the resize config\n * @returns the result of the resize operation(s)\n */\n\ntype ResizeArgs = {\n config: SanitizedCollectionConfig\n dimensions: ProbedImageSize\n file: PayloadRequest['file']\n focalPoint?: FocalPoint\n mimeType: string\n req: PayloadRequest\n savedFilename: string\n sharp?: SharpDependency\n staticPath: string\n withMetadata?: WithMetadata\n}\n\n/** Result from resizing and transforming the requested image sizes */\ntype ImageSizesResult = {\n sizeData: FileSizes\n sizesToSave: FileToSave[]\n}\n\nexport async function createImageSizes({\n config,\n dimensions,\n file,\n focalPoint,\n mimeType,\n req,\n savedFilename,\n sharp,\n staticPath,\n withMetadata,\n}: ResizeArgs): Promise<ImageSizesResult> {\n const { imageSizes } = config.upload\n\n if (!imageSizes || !sharp) {\n return {\n sizeData: {},\n sizesToSave: [],\n }\n }\n\n // Determine if the file is animated\n const fileIsAnimatedType = ['image/avif', 'image/gif', 'image/webp'].includes(file!.mimetype)\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimatedType) {\n sharpOptions.animated = true\n }\n\n const sharpBase: Sharp | undefined = sharp(\n file!.tempFilePath || file!.data,\n sharpOptions,\n ).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n const originalImageMeta = await sharpBase.metadata()\n\n let adjustedDimensions = { ...dimensions }\n\n // Images with an exif orientation of 5, 6, 7, or 8 are auto-rotated by sharp\n // Need to adjust the dimensions to match the original image\n if ([5, 6, 7, 8].includes(originalImageMeta.orientation!)) {\n adjustedDimensions = {\n ...dimensions,\n height: dimensions.width,\n width: dimensions.height,\n }\n }\n\n const resizeImageMeta = {\n height: originalImageMeta.height,\n width: originalImageMeta.width,\n }\n\n const sizes = {} as Record<string, FileSize>\n const imageSizeFiles: FileToSave[] = []\n\n await Promise.all(\n imageSizes.map(async (imageResizeConfig): Promise<void> => {\n imageResizeConfig = sanitizeResizeConfig(imageResizeConfig)\n\n const resizeAction = getImageResizeAction({\n dimensions,\n hasFocalPoint: Boolean(focalPoint),\n imageResizeConfig,\n })\n\n if (resizeAction === 'omit') {\n sizes[imageResizeConfig.name] = createImageSize({})\n return\n }\n\n const imageToResize = sharpBase.clone()\n let resized = imageToResize\n\n if (resizeAction === 'resizeWithFocalPoint') {\n let { height: resizeHeight, width: resizeWidth } = imageResizeConfig\n\n const originalAspectRatio = adjustedDimensions.width / adjustedDimensions.height\n\n // Calculate resizeWidth based on original aspect ratio if it's undefined\n if (resizeHeight && !resizeWidth) {\n resizeWidth = Math.round(resizeHeight * originalAspectRatio)\n }\n\n // Calculate resizeHeight based on original aspect ratio if it's undefined\n if (resizeWidth && !resizeHeight) {\n resizeHeight = Math.round(resizeWidth / originalAspectRatio)\n }\n\n if (!resizeHeight) {\n resizeHeight = resizeImageMeta.height\n }\n if (!resizeWidth) {\n resizeWidth = resizeImageMeta.width\n }\n\n const resizeAspectRatio = resizeWidth! / resizeHeight!\n const prioritizeHeight = resizeAspectRatio < originalAspectRatio\n // Scales the image before extracting from it\n resized = imageToResize.resize({\n fastShrinkOnLoad: false,\n height: prioritizeHeight ? resizeHeight : undefined,\n width: prioritizeHeight ? undefined : resizeWidth,\n })\n\n const metadataAppendedFile = await optionallyAppendMetadata({\n req,\n sharpFile: resized,\n withMetadata: withMetadata!,\n })\n\n // Must read from buffer, resized.metadata will return the original image metadata\n const { info } = await metadataAppendedFile.toBuffer({ resolveWithObject: true })\n\n resizeImageMeta.height = extractHeightFromImage({\n ...originalImageMeta,\n height: info.height,\n })\n resizeImageMeta.width = info.width\n\n const halfResizeX = resizeWidth! / 2\n const xFocalCenter = resizeImageMeta.width * (focalPoint!.x / 100)\n const calculatedRightPixelBound = xFocalCenter + halfResizeX\n let leftBound = xFocalCenter - halfResizeX\n\n // if the right bound is greater than the image width, adjust the left bound\n // keeping focus on the right\n if (calculatedRightPixelBound > resizeImageMeta.width) {\n leftBound = resizeImageMeta.width - resizeWidth!\n }\n\n // if the left bound is less than 0, adjust the left bound to 0\n // keeping the focus on the left\n if (leftBound < 0) {\n leftBound = 0\n }\n\n const halfResizeY = resizeHeight! / 2\n const yFocalCenter = resizeImageMeta.height * (focalPoint!.y / 100)\n const calculatedBottomPixelBound = yFocalCenter + halfResizeY\n let topBound = yFocalCenter - halfResizeY\n\n // if the bottom bound is greater than the image height, adjust the top bound\n // keeping the image as far right as possible\n if (calculatedBottomPixelBound > resizeImageMeta.height) {\n topBound = resizeImageMeta.height - resizeHeight!\n }\n\n // if the top bound is less than 0, adjust the top bound to 0\n // keeping the image focus near the top\n if (topBound < 0) {\n topBound = 0\n }\n\n resized = resized.extract({\n height: resizeHeight!,\n left: Math.floor(leftBound),\n top: Math.floor(topBound),\n width: resizeWidth!,\n })\n } else {\n resized = imageToResize.resize(imageResizeConfig)\n }\n\n if (imageResizeConfig.formatOptions) {\n resized = resized.toFormat(\n imageResizeConfig.formatOptions.format,\n imageResizeConfig.formatOptions.options,\n )\n }\n\n if (imageResizeConfig.trimOptions) {\n resized = resized.trim(imageResizeConfig.trimOptions)\n }\n\n const metadataAppendedFile = await optionallyAppendMetadata({\n req,\n sharpFile: resized,\n withMetadata: withMetadata!,\n })\n\n const { data: bufferData, info: bufferInfo } = await metadataAppendedFile.toBuffer({\n resolveWithObject: true,\n })\n\n const { name, ext } = parseFilename(savedFilename)\n\n if (req.payloadUploadSizes) {\n req.payloadUploadSizes[imageResizeConfig.name] = bufferData\n }\n\n const mimeInfo = await fileTypeFromBuffer(bufferData)\n\n const imageNameWithDimensions = imageResizeConfig.generateImageName\n ? imageResizeConfig.generateImageName({\n extension: mimeInfo?.ext || ext,\n height: extractHeightFromImage({\n ...originalImageMeta,\n height: bufferInfo.height,\n }),\n originalName: name,\n sizeName: imageResizeConfig.name,\n width: bufferInfo.width,\n })\n : generateImageSizeFilename({\n extension: mimeInfo?.ext || ext,\n height: extractHeightFromImage({\n ...originalImageMeta,\n height: bufferInfo.height,\n }),\n outputImageName: name,\n width: bufferInfo.width,\n })\n\n const imagePath = `${staticPath}/${imageNameWithDimensions}`\n\n if (await fileExists(imagePath)) {\n try {\n await fs.unlink(imagePath)\n } catch {\n // Ignore unlink errors\n }\n }\n\n const { height, size, width } = bufferInfo\n sizes[imageResizeConfig.name] = createImageSize({\n filename: imageNameWithDimensions,\n filesize: size,\n height:\n fileIsAnimatedType && originalImageMeta.pages ? height / originalImageMeta.pages : height,\n mimeType: mimeInfo?.mime || mimeType,\n width,\n })\n\n imageSizeFiles.push({\n buffer: bufferData,\n path: imagePath,\n })\n }),\n )\n\n return {\n sizeData: sizes,\n sizesToSave: imageSizeFiles,\n }\n}\n"],"names":["fileTypeFromBuffer","fs","fileExists","optionallyAppendMetadata","createImageSize","extractHeightFromImage","generateImageSizeFilename","getImageResizeAction","parseFilename","sanitizeResizeConfig","createImageSizes","config","dimensions","file","focalPoint","mimeType","req","savedFilename","sharp","staticPath","withMetadata","imageSizes","upload","sizeData","sizesToSave","fileIsAnimatedType","includes","mimetype","sharpOptions","animated","sharpBase","tempFilePath","data","rotate","originalImageMeta","metadata","adjustedDimensions","orientation","height","width","resizeImageMeta","sizes","imageSizeFiles","Promise","all","map","imageResizeConfig","resizeAction","hasFocalPoint","Boolean","name","imageToResize","clone","resized","resizeHeight","resizeWidth","originalAspectRatio","Math","round","resizeAspectRatio","prioritizeHeight","resize","fastShrinkOnLoad","undefined","metadataAppendedFile","sharpFile","info","toBuffer","resolveWithObject","halfResizeX","xFocalCenter","x","calculatedRightPixelBound","leftBound","halfResizeY","yFocalCenter","y","calculatedBottomPixelBound","topBound","extract","left","floor","top","formatOptions","toFormat","format","options","trimOptions","trim","bufferData","bufferInfo","ext","payloadUploadSizes","mimeInfo","imageNameWithDimensions","generateImageName","extension","originalName","sizeName","outputImageName","imagePath","unlink","size","filename","filesize","pages","mime","push","buffer","path"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/uploads/image-resizing/createImageSizes.ts"],"sourcesContent":["import type { Sharp, SharpOptions } from 'sharp'\n\nimport { fileTypeFromBuffer } from 'file-type'\nimport fs from 'fs/promises'\n\nimport type { SanitizedCollectionConfig } from '../../collections/config/types.js'\nimport type { SharpDependency } from '../../config/types.js'\nimport type { PayloadRequest } from '../../types/index.js'\nimport type { WithMetadata } from '../optionallyAppendMetadata.js'\nimport type { FileSize, FileSizes, FileToSave, FocalPoint, ProbedImageSize } from '../types.js'\n\nimport { fileExists } from '../fileExists.js'\nimport { isAnimatedImage } from '../isAnimatedImage.js'\nimport { optionallyAppendMetadata } from '../optionallyAppendMetadata.js'\nimport { createImageSize } from './createImageSize.js'\nimport { extractHeightFromImage } from './extractHeightFromImage.js'\nimport { generateImageSizeFilename } from './generateImageSizeFilename.js'\nimport { getImageResizeAction } from './getImageResizeAction.js'\nimport { parseFilename } from './parseFilename.js'\nimport { sanitizeResizeConfig } from './sanitizeResizeConfig.js'\n\n/**\n * For the provided image sizes, handle the resizing and the transforms\n * (format, trim, etc.) of each requested image size and return the result object.\n * This only handles the image sizes. The transforms of the original image\n * are handled in {@link ./generateFileData.ts}.\n *\n * The image will be resized according to the provided\n * resize config. If no image sizes are requested, the resolved data will be empty.\n * For every image that does not need to be resized, a result object with `null`\n * parameters will be returned.\n *\n * @param resizeConfig - the resize config\n * @returns the result of the resize operation(s)\n */\n\ntype ResizeArgs = {\n config: SanitizedCollectionConfig\n dimensions: ProbedImageSize\n file: PayloadRequest['file']\n focalPoint?: FocalPoint\n mimeType: string\n req: PayloadRequest\n savedFilename: string\n sharp?: SharpDependency\n staticPath: string\n withMetadata?: WithMetadata\n}\n\n/** Result from resizing and transforming the requested image sizes */\ntype ImageSizesResult = {\n sizeData: FileSizes\n sizesToSave: FileToSave[]\n}\n\nexport async function createImageSizes({\n config,\n dimensions,\n file,\n focalPoint,\n mimeType,\n req,\n savedFilename,\n sharp,\n staticPath,\n withMetadata,\n}: ResizeArgs): Promise<ImageSizesResult> {\n const { imageSizes } = config.upload\n\n if (!imageSizes || !sharp) {\n return {\n sizeData: {},\n sizesToSave: [],\n }\n }\n\n // Determine if the file is animated\n const fileIsAnimatedType = isAnimatedImage(file!.mimetype)\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimatedType) {\n sharpOptions.animated = true\n }\n\n const sharpBase: Sharp | undefined = sharp(\n file!.tempFilePath || file!.data,\n sharpOptions,\n ).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n const originalImageMeta = await sharpBase.metadata()\n\n let adjustedDimensions = { ...dimensions }\n\n // Images with an exif orientation of 5, 6, 7, or 8 are auto-rotated by sharp\n // Need to adjust the dimensions to match the original image\n if ([5, 6, 7, 8].includes(originalImageMeta.orientation!)) {\n adjustedDimensions = {\n ...dimensions,\n height: dimensions.width,\n width: dimensions.height,\n }\n }\n\n const resizeImageMeta = {\n height: originalImageMeta.height,\n width: originalImageMeta.width,\n }\n\n const sizes = {} as Record<string, FileSize>\n const imageSizeFiles: FileToSave[] = []\n\n await Promise.all(\n imageSizes.map(async (imageResizeConfig): Promise<void> => {\n imageResizeConfig = sanitizeResizeConfig(imageResizeConfig)\n\n const resizeAction = getImageResizeAction({\n dimensions,\n hasFocalPoint: Boolean(focalPoint),\n imageResizeConfig,\n })\n\n if (resizeAction === 'omit') {\n sizes[imageResizeConfig.name] = createImageSize({})\n return\n }\n\n const imageToResize = sharpBase.clone()\n let resized = imageToResize\n\n if (resizeAction === 'resizeWithFocalPoint') {\n let { height: resizeHeight, width: resizeWidth } = imageResizeConfig\n\n const originalAspectRatio = adjustedDimensions.width / adjustedDimensions.height\n\n // Calculate resizeWidth based on original aspect ratio if it's undefined\n if (resizeHeight && !resizeWidth) {\n resizeWidth = Math.round(resizeHeight * originalAspectRatio)\n }\n\n // Calculate resizeHeight based on original aspect ratio if it's undefined\n if (resizeWidth && !resizeHeight) {\n resizeHeight = Math.round(resizeWidth / originalAspectRatio)\n }\n\n if (!resizeHeight) {\n resizeHeight = resizeImageMeta.height\n }\n if (!resizeWidth) {\n resizeWidth = resizeImageMeta.width\n }\n\n const resizeAspectRatio = resizeWidth! / resizeHeight!\n const prioritizeHeight = resizeAspectRatio < originalAspectRatio\n // Scales the image before extracting from it\n resized = imageToResize.resize({\n fastShrinkOnLoad: false,\n height: prioritizeHeight ? resizeHeight : undefined,\n width: prioritizeHeight ? undefined : resizeWidth,\n })\n\n const metadataAppendedFile = await optionallyAppendMetadata({\n req,\n sharpFile: resized,\n withMetadata: withMetadata!,\n })\n\n // Must read from buffer, resized.metadata will return the original image metadata\n const { info } = await metadataAppendedFile.toBuffer({ resolveWithObject: true })\n\n resizeImageMeta.height = extractHeightFromImage({\n ...originalImageMeta,\n height: info.height,\n })\n resizeImageMeta.width = info.width\n\n const halfResizeX = resizeWidth! / 2\n const xFocalCenter = resizeImageMeta.width * (focalPoint!.x / 100)\n const calculatedRightPixelBound = xFocalCenter + halfResizeX\n let leftBound = xFocalCenter - halfResizeX\n\n // if the right bound is greater than the image width, adjust the left bound\n // keeping focus on the right\n if (calculatedRightPixelBound > resizeImageMeta.width) {\n leftBound = resizeImageMeta.width - resizeWidth!\n }\n\n // if the left bound is less than 0, adjust the left bound to 0\n // keeping the focus on the left\n if (leftBound < 0) {\n leftBound = 0\n }\n\n const halfResizeY = resizeHeight! / 2\n const yFocalCenter = resizeImageMeta.height * (focalPoint!.y / 100)\n const calculatedBottomPixelBound = yFocalCenter + halfResizeY\n let topBound = yFocalCenter - halfResizeY\n\n // if the bottom bound is greater than the image height, adjust the top bound\n // keeping the image as far right as possible\n if (calculatedBottomPixelBound > resizeImageMeta.height) {\n topBound = resizeImageMeta.height - resizeHeight!\n }\n\n // if the top bound is less than 0, adjust the top bound to 0\n // keeping the image focus near the top\n if (topBound < 0) {\n topBound = 0\n }\n\n resized = resized.extract({\n height: resizeHeight!,\n left: Math.floor(leftBound),\n top: Math.floor(topBound),\n width: resizeWidth!,\n })\n } else {\n resized = imageToResize.resize(imageResizeConfig)\n }\n\n if (imageResizeConfig.formatOptions) {\n resized = resized.toFormat(\n imageResizeConfig.formatOptions.format,\n imageResizeConfig.formatOptions.options,\n )\n }\n\n if (imageResizeConfig.trimOptions) {\n resized = resized.trim(imageResizeConfig.trimOptions)\n }\n\n const metadataAppendedFile = await optionallyAppendMetadata({\n req,\n sharpFile: resized,\n withMetadata: withMetadata!,\n })\n\n const { data: bufferData, info: bufferInfo } = await metadataAppendedFile.toBuffer({\n resolveWithObject: true,\n })\n\n const { name, ext } = parseFilename(savedFilename)\n\n if (req.payloadUploadSizes) {\n req.payloadUploadSizes[imageResizeConfig.name] = bufferData\n }\n\n const mimeInfo = await fileTypeFromBuffer(bufferData)\n\n const imageNameWithDimensions = imageResizeConfig.generateImageName\n ? imageResizeConfig.generateImageName({\n extension: mimeInfo?.ext || ext,\n height: extractHeightFromImage({\n ...originalImageMeta,\n height: bufferInfo.height,\n }),\n originalName: name,\n sizeName: imageResizeConfig.name,\n width: bufferInfo.width,\n })\n : generateImageSizeFilename({\n extension: mimeInfo?.ext || ext,\n height: extractHeightFromImage({\n ...originalImageMeta,\n height: bufferInfo.height,\n }),\n outputImageName: name,\n width: bufferInfo.width,\n })\n\n const imagePath = `${staticPath}/${imageNameWithDimensions}`\n\n if (await fileExists(imagePath)) {\n try {\n await fs.unlink(imagePath)\n } catch {\n // Ignore unlink errors\n }\n }\n\n const { height, size, width } = bufferInfo\n sizes[imageResizeConfig.name] = createImageSize({\n filename: imageNameWithDimensions,\n filesize: size,\n height:\n fileIsAnimatedType && originalImageMeta.pages ? height / originalImageMeta.pages : height,\n mimeType: mimeInfo?.mime || mimeType,\n width,\n })\n\n imageSizeFiles.push({\n buffer: bufferData,\n path: imagePath,\n })\n }),\n )\n\n return {\n sizeData: sizes,\n sizesToSave: imageSizeFiles,\n }\n}\n"],"names":["fileTypeFromBuffer","fs","fileExists","isAnimatedImage","optionallyAppendMetadata","createImageSize","extractHeightFromImage","generateImageSizeFilename","getImageResizeAction","parseFilename","sanitizeResizeConfig","createImageSizes","config","dimensions","file","focalPoint","mimeType","req","savedFilename","sharp","staticPath","withMetadata","imageSizes","upload","sizeData","sizesToSave","fileIsAnimatedType","mimetype","sharpOptions","animated","sharpBase","tempFilePath","data","rotate","originalImageMeta","metadata","adjustedDimensions","includes","orientation","height","width","resizeImageMeta","sizes","imageSizeFiles","Promise","all","map","imageResizeConfig","resizeAction","hasFocalPoint","Boolean","name","imageToResize","clone","resized","resizeHeight","resizeWidth","originalAspectRatio","Math","round","resizeAspectRatio","prioritizeHeight","resize","fastShrinkOnLoad","undefined","metadataAppendedFile","sharpFile","info","toBuffer","resolveWithObject","halfResizeX","xFocalCenter","x","calculatedRightPixelBound","leftBound","halfResizeY","yFocalCenter","y","calculatedBottomPixelBound","topBound","extract","left","floor","top","formatOptions","toFormat","format","options","trimOptions","trim","bufferData","bufferInfo","ext","payloadUploadSizes","mimeInfo","imageNameWithDimensions","generateImageName","extension","originalName","sizeName","outputImageName","imagePath","unlink","size","filename","filesize","pages","mime","push","buffer","path"],"mappings":"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"}