payload 3.0.0-beta.6 → 3.0.0-beta.61

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 (1004) hide show
  1. package/bin.js +6 -3
  2. package/dist/admin/LanguageOptions.d.ts +6 -0
  3. package/dist/admin/LanguageOptions.d.ts.map +1 -0
  4. package/dist/admin/LanguageOptions.js +3 -0
  5. package/dist/admin/LanguageOptions.js.map +1 -0
  6. package/dist/admin/RichText.d.ts +142 -27
  7. package/dist/admin/RichText.d.ts.map +1 -1
  8. package/dist/admin/RichText.js.map +1 -1
  9. package/dist/admin/elements/Cell.d.ts +3 -9
  10. package/dist/admin/elements/Cell.d.ts.map +1 -1
  11. package/dist/admin/elements/Cell.js.map +1 -1
  12. package/dist/admin/elements/DatePicker.d.ts +7 -7
  13. package/dist/admin/elements/DatePicker.d.ts.map +1 -1
  14. package/dist/admin/elements/DatePicker.js.map +1 -1
  15. package/dist/admin/elements/PreviewButton.js.map +1 -1
  16. package/dist/admin/elements/PublishButton.js.map +1 -1
  17. package/dist/admin/elements/SaveButton.js.map +1 -1
  18. package/dist/admin/elements/SaveDraftButton.js.map +1 -1
  19. package/dist/admin/elements/Tab.d.ts +3 -0
  20. package/dist/admin/elements/Tab.d.ts.map +1 -1
  21. package/dist/admin/elements/Tab.js.map +1 -1
  22. package/dist/admin/elements/Upload.d.ts +3 -0
  23. package/dist/admin/elements/Upload.d.ts.map +1 -0
  24. package/dist/admin/elements/Upload.js +3 -0
  25. package/dist/admin/elements/Upload.js.map +1 -0
  26. package/dist/admin/elements/WithServerSideProps.d.ts +6 -2
  27. package/dist/admin/elements/WithServerSideProps.d.ts.map +1 -1
  28. package/dist/admin/elements/WithServerSideProps.js.map +1 -1
  29. package/dist/admin/forms/Error.js.map +1 -1
  30. package/dist/admin/forms/FieldDescription.d.ts +1 -1
  31. package/dist/admin/forms/FieldDescription.d.ts.map +1 -1
  32. package/dist/admin/forms/FieldDescription.js.map +1 -1
  33. package/dist/admin/forms/FieldTypes.js.map +1 -1
  34. package/dist/admin/forms/Form.js.map +1 -1
  35. package/dist/admin/forms/Label.d.ts +3 -2
  36. package/dist/admin/forms/Label.d.ts.map +1 -1
  37. package/dist/admin/forms/Label.js.map +1 -1
  38. package/dist/admin/forms/RowLabel.d.ts +1 -1
  39. package/dist/admin/forms/RowLabel.d.ts.map +1 -1
  40. package/dist/admin/forms/RowLabel.js.map +1 -1
  41. package/dist/admin/types.d.ts +5 -3
  42. package/dist/admin/types.d.ts.map +1 -1
  43. package/dist/admin/types.js.map +1 -1
  44. package/dist/admin/views/types.d.ts +5 -3
  45. package/dist/admin/views/types.d.ts.map +1 -1
  46. package/dist/admin/views/types.js.map +1 -1
  47. package/dist/assets/assets.d.js.map +1 -1
  48. package/dist/auth/baseFields/accountLock.d.ts.map +1 -1
  49. package/dist/auth/baseFields/accountLock.js.map +1 -1
  50. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  51. package/dist/auth/baseFields/apiKey.js +6 -4
  52. package/dist/auth/baseFields/apiKey.js.map +1 -1
  53. package/dist/auth/baseFields/auth.d.ts.map +1 -1
  54. package/dist/auth/baseFields/auth.js +0 -14
  55. package/dist/auth/baseFields/auth.js.map +1 -1
  56. package/dist/auth/baseFields/loginField.d.ts +4 -0
  57. package/dist/auth/baseFields/loginField.d.ts.map +1 -0
  58. package/dist/auth/baseFields/loginField.js +35 -0
  59. package/dist/auth/baseFields/loginField.js.map +1 -0
  60. package/dist/auth/baseFields/verification.d.ts.map +1 -1
  61. package/dist/auth/baseFields/verification.js.map +1 -1
  62. package/dist/auth/cookies.d.ts +17 -5
  63. package/dist/auth/cookies.d.ts.map +1 -1
  64. package/dist/auth/cookies.js +45 -14
  65. package/dist/auth/cookies.js.map +1 -1
  66. package/dist/auth/crypto.js.map +1 -1
  67. package/dist/auth/defaultAccess.js.map +1 -1
  68. package/dist/auth/defaultUser.js.map +1 -1
  69. package/dist/auth/executeAccess.d.ts.map +1 -1
  70. package/dist/auth/executeAccess.js.map +1 -1
  71. package/dist/auth/executeAuthStrategies.d.ts +2 -3
  72. package/dist/auth/executeAuthStrategies.d.ts.map +1 -1
  73. package/dist/auth/executeAuthStrategies.js +6 -4
  74. package/dist/auth/executeAuthStrategies.js.map +1 -1
  75. package/dist/auth/extractJWT.d.ts +1 -1
  76. package/dist/auth/extractJWT.d.ts.map +1 -1
  77. package/dist/auth/extractJWT.js.map +1 -1
  78. package/dist/auth/getAccessResults.js +1 -1
  79. package/dist/auth/getAccessResults.js.map +1 -1
  80. package/dist/auth/getFieldsToSign.d.ts +1 -1
  81. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  82. package/dist/auth/getFieldsToSign.js +1 -1
  83. package/dist/auth/getFieldsToSign.js.map +1 -1
  84. package/dist/auth/index.d.ts +2 -2
  85. package/dist/auth/index.d.ts.map +1 -1
  86. package/dist/auth/index.js +2 -2
  87. package/dist/auth/index.js.map +1 -1
  88. package/dist/auth/isLocked.js.map +1 -1
  89. package/dist/auth/operations/access.d.ts.map +1 -1
  90. package/dist/auth/operations/access.js.map +1 -1
  91. package/dist/auth/operations/auth.d.ts +3 -3
  92. package/dist/auth/operations/auth.d.ts.map +1 -1
  93. package/dist/auth/operations/auth.js +3 -5
  94. package/dist/auth/operations/auth.js.map +1 -1
  95. package/dist/auth/operations/forgotPassword.d.ts +5 -5
  96. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  97. package/dist/auth/operations/forgotPassword.js +18 -15
  98. package/dist/auth/operations/forgotPassword.js.map +1 -1
  99. package/dist/auth/operations/init.d.ts.map +1 -1
  100. package/dist/auth/operations/init.js.map +1 -1
  101. package/dist/auth/operations/local/auth.d.ts.map +1 -1
  102. package/dist/auth/operations/local/auth.js.map +1 -1
  103. package/dist/auth/operations/local/forgotPassword.d.ts +3 -3
  104. package/dist/auth/operations/local/forgotPassword.d.ts.map +1 -1
  105. package/dist/auth/operations/local/forgotPassword.js.map +1 -1
  106. package/dist/auth/operations/local/index.js.map +1 -1
  107. package/dist/auth/operations/local/login.d.ts +6 -10
  108. package/dist/auth/operations/local/login.d.ts.map +1 -1
  109. package/dist/auth/operations/local/login.js.map +1 -1
  110. package/dist/auth/operations/local/resetPassword.d.ts +3 -4
  111. package/dist/auth/operations/local/resetPassword.d.ts.map +1 -1
  112. package/dist/auth/operations/local/resetPassword.js.map +1 -1
  113. package/dist/auth/operations/local/unlock.d.ts +3 -4
  114. package/dist/auth/operations/local/unlock.d.ts.map +1 -1
  115. package/dist/auth/operations/local/unlock.js.map +1 -1
  116. package/dist/auth/operations/local/verifyEmail.d.ts +3 -4
  117. package/dist/auth/operations/local/verifyEmail.d.ts.map +1 -1
  118. package/dist/auth/operations/local/verifyEmail.js.map +1 -1
  119. package/dist/auth/operations/login.d.ts +7 -10
  120. package/dist/auth/operations/login.d.ts.map +1 -1
  121. package/dist/auth/operations/login.js +49 -5
  122. package/dist/auth/operations/login.js.map +1 -1
  123. package/dist/auth/operations/logout.d.ts.map +1 -1
  124. package/dist/auth/operations/logout.js.map +1 -1
  125. package/dist/auth/operations/me.d.ts +2 -1
  126. package/dist/auth/operations/me.d.ts.map +1 -1
  127. package/dist/auth/operations/me.js +25 -9
  128. package/dist/auth/operations/me.js.map +1 -1
  129. package/dist/auth/operations/refresh.d.ts +3 -3
  130. package/dist/auth/operations/refresh.d.ts.map +1 -1
  131. package/dist/auth/operations/refresh.js +35 -17
  132. package/dist/auth/operations/refresh.js.map +1 -1
  133. package/dist/auth/operations/registerFirstUser.d.ts +7 -13
  134. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  135. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  136. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  137. package/dist/auth/operations/resetPassword.js +1 -0
  138. package/dist/auth/operations/resetPassword.js.map +1 -1
  139. package/dist/auth/operations/unlock.d.ts.map +1 -1
  140. package/dist/auth/operations/unlock.js.map +1 -1
  141. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  142. package/dist/auth/operations/verifyEmail.js.map +1 -1
  143. package/dist/auth/sendVerificationEmail.d.ts +5 -6
  144. package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
  145. package/dist/auth/sendVerificationEmail.js +7 -8
  146. package/dist/auth/sendVerificationEmail.js.map +1 -1
  147. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  148. package/dist/auth/strategies/apiKey.js +9 -3
  149. package/dist/auth/strategies/apiKey.js.map +1 -1
  150. package/dist/auth/strategies/jwt.d.ts.map +1 -1
  151. package/dist/auth/strategies/jwt.js +9 -3
  152. package/dist/auth/strategies/jwt.js.map +1 -1
  153. package/dist/auth/strategies/local/authenticate.d.ts +1 -1
  154. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  155. package/dist/auth/strategies/local/authenticate.js.map +1 -1
  156. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts +3 -1
  157. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
  158. package/dist/auth/strategies/local/generatePasswordSaltHash.js +10 -7
  159. package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
  160. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts +1 -1
  161. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  162. package/dist/auth/strategies/local/incrementLoginAttempts.js.map +1 -1
  163. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  164. package/dist/auth/strategies/local/register.js +19 -7
  165. package/dist/auth/strategies/local/register.js.map +1 -1
  166. package/dist/auth/strategies/local/resetLoginAttempts.d.ts +1 -1
  167. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  168. package/dist/auth/strategies/local/resetLoginAttempts.js.map +1 -1
  169. package/dist/auth/types.d.ts +17 -12
  170. package/dist/auth/types.d.ts.map +1 -1
  171. package/dist/auth/types.js.map +1 -1
  172. package/dist/bin/generateTypes.d.ts +3 -1
  173. package/dist/bin/generateTypes.d.ts.map +1 -1
  174. package/dist/bin/generateTypes.js +23 -9
  175. package/dist/bin/generateTypes.js.map +1 -1
  176. package/dist/bin/index.js.map +1 -1
  177. package/dist/bin/loadEnv.d.ts +2 -2
  178. package/dist/bin/loadEnv.d.ts.map +1 -1
  179. package/dist/bin/loadEnv.js +18 -17
  180. package/dist/bin/loadEnv.js.map +1 -1
  181. package/dist/bin/loader/clientExtensions.js.map +1 -1
  182. package/dist/bin/loader/compile.d.ts +2 -2
  183. package/dist/bin/loader/compile.d.ts.map +1 -1
  184. package/dist/bin/loader/compile.js.map +1 -1
  185. package/dist/bin/loader/ignores.d.ts +2 -0
  186. package/dist/bin/loader/ignores.d.ts.map +1 -0
  187. package/dist/bin/loader/ignores.js +5 -0
  188. package/dist/bin/loader/ignores.js.map +1 -0
  189. package/dist/bin/loader/index.d.ts.map +1 -1
  190. package/dist/bin/loader/index.js +14 -15
  191. package/dist/bin/loader/index.js.map +1 -1
  192. package/dist/bin/loader/read-default-tsconfig.d.ts +25 -0
  193. package/dist/bin/loader/read-default-tsconfig.d.ts.map +1 -1
  194. package/dist/bin/loader/read-default-tsconfig.js +25 -1
  195. package/dist/bin/loader/read-default-tsconfig.js.map +1 -1
  196. package/dist/bin/loader/resolveOriginalPath.d.ts +10 -0
  197. package/dist/bin/loader/resolveOriginalPath.d.ts.map +1 -0
  198. package/dist/bin/loader/resolveOriginalPath.js +36 -0
  199. package/dist/bin/loader/resolveOriginalPath.js.map +1 -0
  200. package/dist/bin/migrate.d.ts.map +1 -1
  201. package/dist/bin/migrate.js.map +1 -1
  202. package/dist/collections/config/build.js.map +1 -1
  203. package/dist/collections/config/client.d.ts +155 -156
  204. package/dist/collections/config/client.d.ts.map +1 -1
  205. package/dist/collections/config/client.js +3 -1
  206. package/dist/collections/config/client.js.map +1 -1
  207. package/dist/collections/config/defaults.d.ts +9 -5
  208. package/dist/collections/config/defaults.d.ts.map +1 -1
  209. package/dist/collections/config/defaults.js +5 -1
  210. package/dist/collections/config/defaults.js.map +1 -1
  211. package/dist/collections/config/sanitize.d.ts +2 -3
  212. package/dist/collections/config/sanitize.d.ts.map +1 -1
  213. package/dist/collections/config/sanitize.js +17 -6
  214. package/dist/collections/config/sanitize.js.map +1 -1
  215. package/dist/collections/config/schema.d.ts.map +1 -1
  216. package/dist/collections/config/schema.js +25 -13
  217. package/dist/collections/config/schema.js.map +1 -1
  218. package/dist/collections/config/types.d.ts +71 -17
  219. package/dist/collections/config/types.d.ts.map +1 -1
  220. package/dist/collections/config/types.js.map +1 -1
  221. package/dist/collections/dataloader.d.ts +14 -0
  222. package/dist/collections/dataloader.d.ts.map +1 -1
  223. package/dist/collections/dataloader.js +27 -12
  224. package/dist/collections/dataloader.js.map +1 -1
  225. package/dist/collections/operations/count.d.ts +14 -0
  226. package/dist/collections/operations/count.d.ts.map +1 -0
  227. package/dist/collections/operations/count.js +75 -0
  228. package/dist/collections/operations/count.js.map +1 -0
  229. package/dist/collections/operations/create.d.ts +5 -9
  230. package/dist/collections/operations/create.d.ts.map +1 -1
  231. package/dist/collections/operations/create.js +7 -13
  232. package/dist/collections/operations/create.js.map +1 -1
  233. package/dist/collections/operations/delete.d.ts +5 -5
  234. package/dist/collections/operations/delete.d.ts.map +1 -1
  235. package/dist/collections/operations/delete.js +2 -1
  236. package/dist/collections/operations/delete.js.map +1 -1
  237. package/dist/collections/operations/deleteByID.d.ts +4 -3
  238. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  239. package/dist/collections/operations/deleteByID.js +1 -0
  240. package/dist/collections/operations/deleteByID.js.map +1 -1
  241. package/dist/collections/operations/docAccess.js.map +1 -1
  242. package/dist/collections/operations/duplicate.d.ts +3 -3
  243. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  244. package/dist/collections/operations/duplicate.js +3 -1
  245. package/dist/collections/operations/duplicate.js.map +1 -1
  246. package/dist/collections/operations/find.d.ts +3 -2
  247. package/dist/collections/operations/find.d.ts.map +1 -1
  248. package/dist/collections/operations/find.js +1 -0
  249. package/dist/collections/operations/find.js.map +1 -1
  250. package/dist/collections/operations/findByID.d.ts +3 -2
  251. package/dist/collections/operations/findByID.d.ts.map +1 -1
  252. package/dist/collections/operations/findByID.js +4 -4
  253. package/dist/collections/operations/findByID.js.map +1 -1
  254. package/dist/collections/operations/findVersionByID.d.ts +1 -1
  255. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  256. package/dist/collections/operations/findVersionByID.js +2 -1
  257. package/dist/collections/operations/findVersionByID.js.map +1 -1
  258. package/dist/collections/operations/findVersions.d.ts +1 -1
  259. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  260. package/dist/collections/operations/findVersions.js +1 -0
  261. package/dist/collections/operations/findVersions.js.map +1 -1
  262. package/dist/collections/operations/local/count.d.ts +20 -0
  263. package/dist/collections/operations/local/count.d.ts.map +1 -0
  264. package/dist/collections/operations/local/count.js +19 -0
  265. package/dist/collections/operations/local/count.js.map +1 -0
  266. package/dist/collections/operations/local/create.d.ts +7 -8
  267. package/dist/collections/operations/local/create.d.ts.map +1 -1
  268. package/dist/collections/operations/local/create.js.map +1 -1
  269. package/dist/collections/operations/local/delete.d.ts +15 -17
  270. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  271. package/dist/collections/operations/local/delete.js.map +1 -1
  272. package/dist/collections/operations/local/duplicate.d.ts +6 -5
  273. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  274. package/dist/collections/operations/local/duplicate.js.map +1 -1
  275. package/dist/collections/operations/local/find.d.ts +7 -6
  276. package/dist/collections/operations/local/find.d.ts.map +1 -1
  277. package/dist/collections/operations/local/find.js +1 -1
  278. package/dist/collections/operations/local/find.js.map +1 -1
  279. package/dist/collections/operations/local/findByID.d.ts +7 -6
  280. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  281. package/dist/collections/operations/local/findByID.js.map +1 -1
  282. package/dist/collections/operations/local/findVersionByID.d.ts +7 -6
  283. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  284. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  285. package/dist/collections/operations/local/findVersions.d.ts +7 -6
  286. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  287. package/dist/collections/operations/local/findVersions.js.map +1 -1
  288. package/dist/collections/operations/local/index.d.ts +4 -2
  289. package/dist/collections/operations/local/index.d.ts.map +1 -1
  290. package/dist/collections/operations/local/index.js +4 -2
  291. package/dist/collections/operations/local/index.js.map +1 -1
  292. package/dist/collections/operations/local/restoreVersion.d.ts +7 -6
  293. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  294. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  295. package/dist/collections/operations/local/update.d.ts +14 -14
  296. package/dist/collections/operations/local/update.d.ts.map +1 -1
  297. package/dist/collections/operations/local/update.js.map +1 -1
  298. package/dist/collections/operations/restoreVersion.d.ts +1 -1
  299. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  300. package/dist/collections/operations/restoreVersion.js +3 -1
  301. package/dist/collections/operations/restoreVersion.js.map +1 -1
  302. package/dist/collections/operations/update.d.ts +5 -6
  303. package/dist/collections/operations/update.d.ts.map +1 -1
  304. package/dist/collections/operations/update.js +6 -3
  305. package/dist/collections/operations/update.js.map +1 -1
  306. package/dist/collections/operations/updateByID.d.ts +5 -7
  307. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  308. package/dist/collections/operations/updateByID.js +6 -2
  309. package/dist/collections/operations/updateByID.js.map +1 -1
  310. package/dist/collections/operations/utils.d.ts +42 -33
  311. package/dist/collections/operations/utils.d.ts.map +1 -1
  312. package/dist/collections/operations/utils.js +0 -1
  313. package/dist/collections/operations/utils.js.map +1 -1
  314. package/dist/config/build.d.ts.map +1 -1
  315. package/dist/config/build.js +3 -4
  316. package/dist/config/build.js.map +1 -1
  317. package/dist/config/client.d.ts +6 -5
  318. package/dist/config/client.d.ts.map +1 -1
  319. package/dist/config/client.js +3 -1
  320. package/dist/config/client.js.map +1 -1
  321. package/dist/config/defaults.d.ts.map +1 -1
  322. package/dist/config/defaults.js +17 -4
  323. package/dist/config/defaults.js.map +1 -1
  324. package/dist/config/find.d.ts.map +1 -1
  325. package/dist/config/find.js +20 -23
  326. package/dist/config/find.js.map +1 -1
  327. package/dist/config/sanitize.d.ts +1 -1
  328. package/dist/config/sanitize.d.ts.map +1 -1
  329. package/dist/config/sanitize.js +49 -10
  330. package/dist/config/sanitize.js.map +1 -1
  331. package/dist/config/schema.d.ts.map +1 -1
  332. package/dist/config/schema.js +36 -10
  333. package/dist/config/schema.js.map +1 -1
  334. package/dist/config/shared/adminViewSchema.js.map +1 -1
  335. package/dist/config/shared/componentSchema.js.map +1 -1
  336. package/dist/config/shared/openGraphSchema.d.ts +3 -0
  337. package/dist/config/shared/openGraphSchema.d.ts.map +1 -0
  338. package/dist/config/shared/openGraphSchema.js +16 -0
  339. package/dist/config/shared/openGraphSchema.js.map +1 -0
  340. package/dist/config/types.d.ts +171 -87
  341. package/dist/config/types.d.ts.map +1 -1
  342. package/dist/config/types.js +7 -13
  343. package/dist/config/types.js.map +1 -1
  344. package/dist/config/validate.js.map +1 -1
  345. package/dist/database/combineQueries.js.map +1 -1
  346. package/dist/database/createDatabaseAdapter.d.ts.map +1 -1
  347. package/dist/database/createDatabaseAdapter.js +1 -1
  348. package/dist/database/createDatabaseAdapter.js.map +1 -1
  349. package/dist/database/flattenWhereToOperators.js.map +1 -1
  350. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  351. package/dist/database/getLocalizedPaths.js +0 -1
  352. package/dist/database/getLocalizedPaths.js.map +1 -1
  353. package/dist/database/migrations/createMigration.d.ts.map +1 -1
  354. package/dist/database/migrations/createMigration.js +1 -1
  355. package/dist/database/migrations/createMigration.js.map +1 -1
  356. package/dist/database/migrations/getMigrations.js.map +1 -1
  357. package/dist/database/migrations/getPredefinedMigration.d.ts +12 -0
  358. package/dist/database/migrations/getPredefinedMigration.d.ts.map +1 -0
  359. package/dist/database/migrations/getPredefinedMigration.js +38 -0
  360. package/dist/database/migrations/getPredefinedMigration.js.map +1 -0
  361. package/dist/database/migrations/migrate.d.ts.map +1 -1
  362. package/dist/database/migrations/migrate.js +2 -2
  363. package/dist/database/migrations/migrate.js.map +1 -1
  364. package/dist/database/migrations/migrateDown.d.ts.map +1 -1
  365. package/dist/database/migrations/migrateDown.js +1 -1
  366. package/dist/database/migrations/migrateDown.js.map +1 -1
  367. package/dist/database/migrations/migrateRefresh.d.ts.map +1 -1
  368. package/dist/database/migrations/migrateRefresh.js +1 -1
  369. package/dist/database/migrations/migrateRefresh.js.map +1 -1
  370. package/dist/database/migrations/migrateReset.d.ts.map +1 -1
  371. package/dist/database/migrations/migrateReset.js +1 -1
  372. package/dist/database/migrations/migrateReset.js.map +1 -1
  373. package/dist/database/migrations/migrateStatus.js +0 -1
  374. package/dist/database/migrations/migrateStatus.js.map +1 -1
  375. package/dist/database/migrations/migrationTemplate.js.map +1 -1
  376. package/dist/database/migrations/migrationsCollection.js.map +1 -1
  377. package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
  378. package/dist/database/migrations/readMigrationFiles.js.map +1 -1
  379. package/dist/database/queryValidation/types.js.map +1 -1
  380. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  381. package/dist/database/queryValidation/validateQueryPaths.js +4 -4
  382. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  383. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  384. package/dist/database/queryValidation/validateSearchParams.js +0 -3
  385. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  386. package/dist/database/types.d.ts +28 -14
  387. package/dist/database/types.d.ts.map +1 -1
  388. package/dist/database/types.js.map +1 -1
  389. package/dist/email/consoleEmailAdapter.d.ts +3 -0
  390. package/dist/email/consoleEmailAdapter.d.ts.map +1 -0
  391. package/dist/email/consoleEmailAdapter.js +17 -0
  392. package/dist/email/consoleEmailAdapter.js.map +1 -0
  393. package/dist/email/defaults.d.ts +2 -2
  394. package/dist/email/defaults.d.ts.map +1 -1
  395. package/dist/email/defaults.js +3 -3
  396. package/dist/email/defaults.js.map +1 -1
  397. package/dist/email/getStringifiedToAddress.d.ts +3 -0
  398. package/dist/email/getStringifiedToAddress.d.ts.map +1 -0
  399. package/dist/email/getStringifiedToAddress.js +20 -0
  400. package/dist/email/getStringifiedToAddress.js.map +1 -0
  401. package/dist/email/sendEmail.d.ts +3 -2
  402. package/dist/email/sendEmail.d.ts.map +1 -1
  403. package/dist/email/sendEmail.js +8 -4
  404. package/dist/email/sendEmail.js.map +1 -1
  405. package/dist/email/types.d.ts +26 -18
  406. package/dist/email/types.d.ts.map +1 -1
  407. package/dist/email/types.js +5 -1
  408. package/dist/email/types.js.map +1 -1
  409. package/dist/errors/APIError.d.ts +2 -2
  410. package/dist/errors/APIError.d.ts.map +1 -1
  411. package/dist/errors/APIError.js +6 -4
  412. package/dist/errors/APIError.js.map +1 -1
  413. package/dist/errors/AuthenticationError.d.ts +3 -4
  414. package/dist/errors/AuthenticationError.d.ts.map +1 -1
  415. package/dist/errors/AuthenticationError.js +4 -5
  416. package/dist/errors/AuthenticationError.js.map +1 -1
  417. package/dist/errors/DuplicateCollection.d.ts +2 -3
  418. package/dist/errors/DuplicateCollection.d.ts.map +1 -1
  419. package/dist/errors/DuplicateCollection.js +2 -3
  420. package/dist/errors/DuplicateCollection.js.map +1 -1
  421. package/dist/errors/DuplicateFieldName.d.ts +2 -3
  422. package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
  423. package/dist/errors/DuplicateFieldName.js +2 -3
  424. package/dist/errors/DuplicateFieldName.js.map +1 -1
  425. package/dist/errors/DuplicateGlobal.d.ts +2 -3
  426. package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
  427. package/dist/errors/DuplicateGlobal.js +2 -3
  428. package/dist/errors/DuplicateGlobal.js.map +1 -1
  429. package/dist/errors/ErrorDeletingFile.d.ts +2 -3
  430. package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
  431. package/dist/errors/ErrorDeletingFile.js +2 -3
  432. package/dist/errors/ErrorDeletingFile.js.map +1 -1
  433. package/dist/errors/FileRetrievalError.d.ts +6 -0
  434. package/dist/errors/FileRetrievalError.d.ts.map +1 -0
  435. package/dist/errors/FileRetrievalError.js +13 -0
  436. package/dist/errors/FileRetrievalError.js.map +1 -0
  437. package/dist/errors/FileUploadError.d.ts +2 -3
  438. package/dist/errors/FileUploadError.d.ts.map +1 -1
  439. package/dist/errors/FileUploadError.js +2 -3
  440. package/dist/errors/FileUploadError.js.map +1 -1
  441. package/dist/errors/Forbidden.d.ts +2 -3
  442. package/dist/errors/Forbidden.d.ts.map +1 -1
  443. package/dist/errors/Forbidden.js +2 -3
  444. package/dist/errors/Forbidden.js.map +1 -1
  445. package/dist/errors/InvalidConfiguration.d.ts +2 -3
  446. package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
  447. package/dist/errors/InvalidConfiguration.js +2 -3
  448. package/dist/errors/InvalidConfiguration.js.map +1 -1
  449. package/dist/errors/InvalidFieldName.d.ts +2 -3
  450. package/dist/errors/InvalidFieldName.d.ts.map +1 -1
  451. package/dist/errors/InvalidFieldName.js +2 -3
  452. package/dist/errors/InvalidFieldName.js.map +1 -1
  453. package/dist/errors/InvalidFieldRelationship.d.ts +2 -3
  454. package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
  455. package/dist/errors/InvalidFieldRelationship.js +2 -3
  456. package/dist/errors/InvalidFieldRelationship.js.map +1 -1
  457. package/dist/errors/InvalidSchema.d.ts +2 -3
  458. package/dist/errors/InvalidSchema.d.ts.map +1 -1
  459. package/dist/errors/InvalidSchema.js +2 -3
  460. package/dist/errors/InvalidSchema.js.map +1 -1
  461. package/dist/errors/LockedAuth.d.ts +2 -3
  462. package/dist/errors/LockedAuth.d.ts.map +1 -1
  463. package/dist/errors/LockedAuth.js +2 -3
  464. package/dist/errors/LockedAuth.js.map +1 -1
  465. package/dist/errors/MissingCollectionLabel.d.ts +2 -3
  466. package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
  467. package/dist/errors/MissingCollectionLabel.js +2 -3
  468. package/dist/errors/MissingCollectionLabel.js.map +1 -1
  469. package/dist/errors/MissingEditorProp.d.ts +2 -3
  470. package/dist/errors/MissingEditorProp.d.ts.map +1 -1
  471. package/dist/errors/MissingEditorProp.js +3 -4
  472. package/dist/errors/MissingEditorProp.js.map +1 -1
  473. package/dist/errors/MissingFieldInputOptions.d.ts +2 -3
  474. package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
  475. package/dist/errors/MissingFieldInputOptions.js +2 -3
  476. package/dist/errors/MissingFieldInputOptions.js.map +1 -1
  477. package/dist/errors/MissingFieldType.d.ts +2 -3
  478. package/dist/errors/MissingFieldType.d.ts.map +1 -1
  479. package/dist/errors/MissingFieldType.js +2 -3
  480. package/dist/errors/MissingFieldType.js.map +1 -1
  481. package/dist/errors/MissingFile.d.ts +2 -3
  482. package/dist/errors/MissingFile.d.ts.map +1 -1
  483. package/dist/errors/MissingFile.js +2 -3
  484. package/dist/errors/MissingFile.js.map +1 -1
  485. package/dist/errors/NotFound.d.ts +2 -3
  486. package/dist/errors/NotFound.d.ts.map +1 -1
  487. package/dist/errors/NotFound.js +2 -3
  488. package/dist/errors/NotFound.js.map +1 -1
  489. package/dist/errors/QueryError.d.ts +2 -3
  490. package/dist/errors/QueryError.d.ts.map +1 -1
  491. package/dist/errors/QueryError.js +2 -3
  492. package/dist/errors/QueryError.js.map +1 -1
  493. package/dist/errors/TimestampsRequired.d.ts +2 -3
  494. package/dist/errors/TimestampsRequired.d.ts.map +1 -1
  495. package/dist/errors/TimestampsRequired.js +2 -3
  496. package/dist/errors/TimestampsRequired.js.map +1 -1
  497. package/dist/errors/UnathorizedError.d.ts +2 -3
  498. package/dist/errors/UnathorizedError.d.ts.map +1 -1
  499. package/dist/errors/UnathorizedError.js +2 -3
  500. package/dist/errors/UnathorizedError.js.map +1 -1
  501. package/dist/errors/ValidationError.d.ts +15 -8
  502. package/dist/errors/ValidationError.d.ts.map +1 -1
  503. package/dist/errors/ValidationError.js +5 -6
  504. package/dist/errors/ValidationError.js.map +1 -1
  505. package/dist/errors/index.d.ts +21 -19
  506. package/dist/errors/index.d.ts.map +1 -1
  507. package/dist/errors/index.js +21 -19
  508. package/dist/errors/index.js.map +1 -1
  509. package/dist/errors/types.js.map +1 -1
  510. package/dist/exports/i18n/ar.js.map +1 -1
  511. package/dist/exports/i18n/az.js.map +1 -1
  512. package/dist/exports/i18n/bg.js.map +1 -1
  513. package/dist/exports/i18n/cs.js.map +1 -1
  514. package/dist/exports/i18n/de.js.map +1 -1
  515. package/dist/exports/i18n/en.js.map +1 -1
  516. package/dist/exports/i18n/es.js.map +1 -1
  517. package/dist/exports/i18n/fa.js.map +1 -1
  518. package/dist/exports/i18n/fr.js.map +1 -1
  519. package/dist/exports/i18n/he.d.ts +2 -0
  520. package/dist/exports/i18n/he.d.ts.map +1 -0
  521. package/dist/exports/i18n/he.js +3 -0
  522. package/dist/exports/i18n/he.js.map +1 -0
  523. package/dist/exports/i18n/hr.js.map +1 -1
  524. package/dist/exports/i18n/hu.js.map +1 -1
  525. package/dist/exports/i18n/it.js.map +1 -1
  526. package/dist/exports/i18n/ja.js.map +1 -1
  527. package/dist/exports/i18n/ko.js.map +1 -1
  528. package/dist/exports/i18n/my.js.map +1 -1
  529. package/dist/exports/i18n/nb.js.map +1 -1
  530. package/dist/exports/i18n/nl.js.map +1 -1
  531. package/dist/exports/i18n/pl.js.map +1 -1
  532. package/dist/exports/i18n/pt.js.map +1 -1
  533. package/dist/exports/i18n/ro.js.map +1 -1
  534. package/dist/exports/i18n/rs.js.map +1 -1
  535. package/dist/exports/i18n/rsLatin.js.map +1 -1
  536. package/dist/exports/i18n/ru.js.map +1 -1
  537. package/dist/exports/i18n/sv.js.map +1 -1
  538. package/dist/exports/i18n/th.js.map +1 -1
  539. package/dist/exports/i18n/tr.js.map +1 -1
  540. package/dist/exports/i18n/uk.js.map +1 -1
  541. package/dist/exports/i18n/vi.js.map +1 -1
  542. package/dist/exports/i18n/zh.js.map +1 -1
  543. package/dist/exports/i18n/zhTw.js.map +1 -1
  544. package/dist/exports/node.d.ts +5 -0
  545. package/dist/exports/node.d.ts.map +1 -1
  546. package/dist/exports/node.js +5 -1
  547. package/dist/exports/node.js.map +1 -1
  548. package/dist/exports/shared.d.ts +22 -0
  549. package/dist/exports/shared.d.ts.map +1 -0
  550. package/dist/exports/shared.js +23 -0
  551. package/dist/exports/shared.js.map +1 -0
  552. package/dist/fields/baseFields/baseBlockFields.js.map +1 -1
  553. package/dist/fields/baseFields/baseIDField.js.map +1 -1
  554. package/dist/fields/config/client.d.ts +939 -702
  555. package/dist/fields/config/client.d.ts.map +1 -1
  556. package/dist/fields/config/client.js +3 -1
  557. package/dist/fields/config/client.js.map +1 -1
  558. package/dist/fields/config/sanitize.d.ts +7 -2
  559. package/dist/fields/config/sanitize.d.ts.map +1 -1
  560. package/dist/fields/config/sanitize.js +53 -34
  561. package/dist/fields/config/sanitize.js.map +1 -1
  562. package/dist/fields/config/sanitize.spec.js +130 -139
  563. package/dist/fields/config/sanitize.spec.js.map +1 -1
  564. package/dist/fields/config/schema.d.ts.map +1 -1
  565. package/dist/fields/config/schema.js +39 -11
  566. package/dist/fields/config/schema.js.map +1 -1
  567. package/dist/fields/config/types.d.ts +223 -134
  568. package/dist/fields/config/types.d.ts.map +1 -1
  569. package/dist/fields/config/types.js +1 -1
  570. package/dist/fields/config/types.js.map +1 -1
  571. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  572. package/dist/fields/getDefaultValue.js.map +1 -1
  573. package/dist/fields/getFieldPaths.d.ts +10 -0
  574. package/dist/fields/getFieldPaths.d.ts.map +1 -0
  575. package/dist/fields/getFieldPaths.js +45 -0
  576. package/dist/fields/getFieldPaths.js.map +1 -0
  577. package/dist/fields/hooks/afterChange/index.d.ts +6 -0
  578. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  579. package/dist/fields/hooks/afterChange/index.js +2 -0
  580. package/dist/fields/hooks/afterChange/index.js.map +1 -1
  581. package/dist/fields/hooks/afterChange/promise.d.ts +9 -1
  582. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  583. package/dist/fields/hooks/afterChange/promise.js +67 -3
  584. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  585. package/dist/fields/hooks/afterChange/traverseFields.d.ts +3 -1
  586. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  587. package/dist/fields/hooks/afterChange/traverseFields.js +3 -1
  588. package/dist/fields/hooks/afterChange/traverseFields.js.map +1 -1
  589. package/dist/fields/hooks/afterRead/index.d.ts +2 -1
  590. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  591. package/dist/fields/hooks/afterRead/index.js +5 -2
  592. package/dist/fields/hooks/afterRead/index.js.map +1 -1
  593. package/dist/fields/hooks/afterRead/promise.d.ts +13 -1
  594. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  595. package/dist/fields/hooks/afterRead/promise.js +146 -35
  596. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  597. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts +2 -1
  598. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  599. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +16 -10
  600. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
  601. package/dist/fields/hooks/afterRead/traverseFields.d.ts +7 -1
  602. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  603. package/dist/fields/hooks/afterRead/traverseFields.js +4 -1
  604. package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
  605. package/dist/fields/hooks/beforeChange/beforeDuplicate.js.map +1 -1
  606. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.js.map +1 -1
  607. package/dist/fields/hooks/beforeChange/getExistingRowDoc.d.ts.map +1 -1
  608. package/dist/fields/hooks/beforeChange/getExistingRowDoc.js.map +1 -1
  609. package/dist/fields/hooks/beforeChange/index.d.ts +1 -1
  610. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  611. package/dist/fields/hooks/beforeChange/index.js +8 -3
  612. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  613. package/dist/fields/hooks/beforeChange/promise.d.ts +9 -2
  614. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  615. package/dist/fields/hooks/beforeChange/promise.js +80 -11
  616. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  617. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +16 -3
  618. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  619. package/dist/fields/hooks/beforeChange/traverseFields.js +4 -3
  620. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  621. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  622. package/dist/fields/hooks/beforeValidate/index.js +2 -0
  623. package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
  624. package/dist/fields/hooks/beforeValidate/promise.d.ts +9 -1
  625. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  626. package/dist/fields/hooks/beforeValidate/promise.js +71 -4
  627. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  628. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +9 -1
  629. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  630. package/dist/fields/hooks/beforeValidate/traverseFields.js +3 -1
  631. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  632. package/dist/fields/mergeBaseFields.js.map +1 -1
  633. package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
  634. package/dist/fields/sortableFieldTypes.js.map +1 -1
  635. package/dist/fields/validations.d.ts +25 -16
  636. package/dist/fields/validations.d.ts.map +1 -1
  637. package/dist/fields/validations.js +67 -9
  638. package/dist/fields/validations.js.map +1 -1
  639. package/dist/fields/validations.spec.js +16 -15
  640. package/dist/fields/validations.spec.js.map +1 -1
  641. package/dist/globals/config/client.d.ts +7 -7
  642. package/dist/globals/config/client.d.ts.map +1 -1
  643. package/dist/globals/config/client.js +2 -1
  644. package/dist/globals/config/client.js.map +1 -1
  645. package/dist/globals/config/sanitize.d.ts +2 -3
  646. package/dist/globals/config/sanitize.d.ts.map +1 -1
  647. package/dist/globals/config/sanitize.js +43 -37
  648. package/dist/globals/config/sanitize.js.map +1 -1
  649. package/dist/globals/config/schema.d.ts.map +1 -1
  650. package/dist/globals/config/schema.js +12 -2
  651. package/dist/globals/config/schema.js.map +1 -1
  652. package/dist/globals/config/types.d.ts +12 -7
  653. package/dist/globals/config/types.d.ts.map +1 -1
  654. package/dist/globals/config/types.js.map +1 -1
  655. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  656. package/dist/globals/operations/docAccess.js.map +1 -1
  657. package/dist/globals/operations/findOne.d.ts +0 -1
  658. package/dist/globals/operations/findOne.d.ts.map +1 -1
  659. package/dist/globals/operations/findOne.js +1 -0
  660. package/dist/globals/operations/findOne.js.map +1 -1
  661. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  662. package/dist/globals/operations/findVersionByID.js +2 -1
  663. package/dist/globals/operations/findVersionByID.js.map +1 -1
  664. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  665. package/dist/globals/operations/findVersions.js +1 -0
  666. package/dist/globals/operations/findVersions.js.map +1 -1
  667. package/dist/globals/operations/local/findOne.d.ts +7 -6
  668. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  669. package/dist/globals/operations/local/findOne.js.map +1 -1
  670. package/dist/globals/operations/local/findVersionByID.d.ts +7 -6
  671. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  672. package/dist/globals/operations/local/findVersionByID.js.map +1 -1
  673. package/dist/globals/operations/local/findVersions.d.ts +7 -6
  674. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  675. package/dist/globals/operations/local/findVersions.js.map +1 -1
  676. package/dist/globals/operations/local/index.js.map +1 -1
  677. package/dist/globals/operations/local/restoreVersion.d.ts +7 -6
  678. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  679. package/dist/globals/operations/local/restoreVersion.js.map +1 -1
  680. package/dist/globals/operations/local/update.d.ts +7 -6
  681. package/dist/globals/operations/local/update.d.ts.map +1 -1
  682. package/dist/globals/operations/local/update.js.map +1 -1
  683. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  684. package/dist/globals/operations/restoreVersion.js +1 -0
  685. package/dist/globals/operations/restoreVersion.js.map +1 -1
  686. package/dist/globals/operations/update.d.ts +5 -7
  687. package/dist/globals/operations/update.d.ts.map +1 -1
  688. package/dist/globals/operations/update.js +3 -1
  689. package/dist/globals/operations/update.js.map +1 -1
  690. package/dist/index.d.ts +215 -50
  691. package/dist/index.d.ts.map +1 -1
  692. package/dist/index.js +215 -16
  693. package/dist/index.js.map +1 -1
  694. package/dist/preferences/deleteUserPreferences.js.map +1 -1
  695. package/dist/preferences/operations/delete.js +2 -2
  696. package/dist/preferences/operations/delete.js.map +1 -1
  697. package/dist/preferences/operations/findOne.d.ts +2 -2
  698. package/dist/preferences/operations/findOne.d.ts.map +1 -1
  699. package/dist/preferences/operations/findOne.js.map +1 -1
  700. package/dist/preferences/operations/update.js +1 -1
  701. package/dist/preferences/operations/update.js.map +1 -1
  702. package/dist/preferences/preferencesCollection.js.map +1 -1
  703. package/dist/preferences/requestHandlers/delete.d.ts.map +1 -1
  704. package/dist/preferences/requestHandlers/delete.js +18 -5
  705. package/dist/preferences/requestHandlers/delete.js.map +1 -1
  706. package/dist/preferences/requestHandlers/findOne.d.ts.map +1 -1
  707. package/dist/preferences/requestHandlers/findOne.js +18 -5
  708. package/dist/preferences/requestHandlers/findOne.js.map +1 -1
  709. package/dist/preferences/requestHandlers/update.d.ts.map +1 -1
  710. package/dist/preferences/requestHandlers/update.js +19 -7
  711. package/dist/preferences/requestHandlers/update.js.map +1 -1
  712. package/dist/preferences/types.d.ts +2 -2
  713. package/dist/preferences/types.d.ts.map +1 -1
  714. package/dist/preferences/types.js.map +1 -1
  715. package/dist/translations/getLocalI18n.d.ts +1 -1
  716. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  717. package/dist/translations/getLocalI18n.js +1 -1
  718. package/dist/translations/getLocalI18n.js.map +1 -1
  719. package/dist/types/constants.js.map +1 -1
  720. package/dist/types/index.d.ts +35 -32
  721. package/dist/types/index.d.ts.map +1 -1
  722. package/dist/types/index.js.map +1 -1
  723. package/dist/uploads/canResizeImage.d.ts +1 -1
  724. package/dist/uploads/canResizeImage.d.ts.map +1 -1
  725. package/dist/uploads/canResizeImage.js +1 -1
  726. package/dist/uploads/canResizeImage.js.map +1 -1
  727. package/dist/uploads/cropImage.d.ts +1 -1
  728. package/dist/uploads/cropImage.d.ts.map +1 -1
  729. package/dist/uploads/cropImage.js +12 -5
  730. package/dist/uploads/cropImage.js.map +1 -1
  731. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  732. package/dist/uploads/deleteAssociatedFiles.js +0 -2
  733. package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
  734. package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
  735. package/dist/uploads/docWithFilenameExists.js.map +1 -1
  736. package/dist/uploads/fileExists.d.ts.map +1 -1
  737. package/dist/uploads/fileExists.js.map +1 -1
  738. package/dist/uploads/formatFilesize.js.map +1 -1
  739. package/dist/uploads/generateFileData.d.ts +3 -1
  740. package/dist/uploads/generateFileData.d.ts.map +1 -1
  741. package/dist/uploads/generateFileData.js +85 -35
  742. package/dist/uploads/generateFileData.js.map +1 -1
  743. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  744. package/dist/uploads/getBaseFields.js +23 -4
  745. package/dist/uploads/getBaseFields.js.map +1 -1
  746. package/dist/uploads/getExternalFile.d.ts +4 -3
  747. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  748. package/dist/uploads/getExternalFile.js +10 -6
  749. package/dist/uploads/getExternalFile.js.map +1 -1
  750. package/dist/uploads/getFileByPath.d.ts +2 -2
  751. package/dist/uploads/getFileByPath.d.ts.map +1 -1
  752. package/dist/uploads/getFileByPath.js +2 -3
  753. package/dist/uploads/getFileByPath.js.map +1 -1
  754. package/dist/uploads/getImageSize.d.ts +1 -1
  755. package/dist/uploads/getImageSize.d.ts.map +1 -1
  756. package/dist/uploads/getImageSize.js +19 -5
  757. package/dist/uploads/getImageSize.js.map +1 -1
  758. package/dist/uploads/getSafeFilename.d.ts +2 -2
  759. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  760. package/dist/uploads/getSafeFilename.js +1 -3
  761. package/dist/uploads/getSafeFilename.js.map +1 -1
  762. package/dist/uploads/imageResizer.d.ts +9 -11
  763. package/dist/uploads/imageResizer.d.ts.map +1 -1
  764. package/dist/uploads/imageResizer.js +73 -37
  765. package/dist/uploads/imageResizer.js.map +1 -1
  766. package/dist/uploads/isImage.d.ts +1 -1
  767. package/dist/uploads/isImage.d.ts.map +1 -1
  768. package/dist/uploads/isImage.js +1 -1
  769. package/dist/uploads/isImage.js.map +1 -1
  770. package/dist/uploads/mimeTypeValidator.js.map +1 -1
  771. package/dist/uploads/mimeTypeValidator.spec.js.map +1 -1
  772. package/dist/uploads/saveBufferToFile.d.ts +0 -1
  773. package/dist/uploads/saveBufferToFile.d.ts.map +1 -1
  774. package/dist/uploads/saveBufferToFile.js.map +1 -1
  775. package/dist/uploads/tempFile.d.ts +7 -0
  776. package/dist/uploads/tempFile.d.ts.map +1 -0
  777. package/dist/uploads/tempFile.js +39 -0
  778. package/dist/uploads/tempFile.js.map +1 -0
  779. package/dist/uploads/types.d.ts +102 -12
  780. package/dist/uploads/types.d.ts.map +1 -1
  781. package/dist/uploads/types.js.map +1 -1
  782. package/dist/uploads/unlinkTempFiles.js.map +1 -1
  783. package/dist/uploads/uploadFiles.d.ts.map +1 -1
  784. package/dist/uploads/uploadFiles.js.map +1 -1
  785. package/dist/utilities/checkDuplicateCollections.js +1 -1
  786. package/dist/utilities/checkDuplicateCollections.js.map +1 -1
  787. package/dist/utilities/combineMerge.js.map +1 -1
  788. package/dist/utilities/commitTransaction.js.map +1 -1
  789. package/dist/utilities/configToJSONSchema.d.ts +1 -0
  790. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  791. package/dist/utilities/configToJSONSchema.js +136 -5
  792. package/dist/utilities/configToJSONSchema.js.map +1 -1
  793. package/dist/utilities/configToJSONSchema.spec.js +165 -11
  794. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  795. package/dist/utilities/convertData.d.ts.map +1 -1
  796. package/dist/utilities/convertData.js +1 -1
  797. package/dist/utilities/convertData.js.map +1 -1
  798. package/dist/utilities/createArrayFromCommaDelineated.js.map +1 -1
  799. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  800. package/dist/utilities/createLocalReq.js +8 -5
  801. package/dist/utilities/createLocalReq.js.map +1 -1
  802. package/dist/utilities/deepCopyObject.js.map +1 -1
  803. package/dist/utilities/deepMerge.js.map +1 -1
  804. package/dist/utilities/dependencies/getDependencies.d.ts +9 -0
  805. package/dist/utilities/dependencies/getDependencies.d.ts.map +1 -0
  806. package/dist/utilities/dependencies/getDependencies.js +71 -0
  807. package/dist/utilities/dependencies/getDependencies.js.map +1 -0
  808. package/dist/utilities/dependencies/isError.d.ts +5 -0
  809. package/dist/utilities/dependencies/isError.d.ts.map +1 -0
  810. package/dist/utilities/dependencies/isError.js +19 -0
  811. package/dist/utilities/dependencies/isError.js.map +1 -0
  812. package/dist/utilities/dependencies/realPath.d.ts +3 -0
  813. package/dist/utilities/dependencies/realPath.d.ts.map +1 -0
  814. package/dist/utilities/dependencies/realPath.js +23 -0
  815. package/dist/utilities/dependencies/realPath.js.map +1 -0
  816. package/dist/utilities/dependencies/resolveFrom.d.ts +2 -0
  817. package/dist/utilities/dependencies/resolveFrom.d.ts.map +1 -0
  818. package/dist/utilities/dependencies/resolveFrom.js +58 -0
  819. package/dist/utilities/dependencies/resolveFrom.js.map +1 -0
  820. package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -1
  821. package/dist/utilities/fieldSchemaToJSON.js.map +1 -1
  822. package/dist/utilities/flattenTopLevelFields.js.map +1 -1
  823. package/dist/utilities/formatLabels.js.map +1 -1
  824. package/dist/utilities/formatLabels.spec.js.map +1 -1
  825. package/dist/utilities/getCSSVariable.js.map +1 -1
  826. package/dist/utilities/getCollectionIDFieldTypes.js.map +1 -1
  827. package/dist/utilities/getDataByPath.d.ts +3 -0
  828. package/dist/utilities/getDataByPath.d.ts.map +1 -0
  829. package/dist/utilities/getDataByPath.js +18 -0
  830. package/dist/utilities/getDataByPath.js.map +1 -0
  831. package/dist/utilities/getEntityPolicies.js.map +1 -1
  832. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  833. package/dist/utilities/getObjectDotNotation.js.map +1 -1
  834. package/dist/utilities/getSiblingData.d.ts +3 -0
  835. package/dist/utilities/getSiblingData.d.ts.map +1 -0
  836. package/dist/utilities/getSiblingData.js +33 -0
  837. package/dist/utilities/getSiblingData.js.map +1 -0
  838. package/dist/utilities/getUniqueListBy.d.ts +1 -1
  839. package/dist/utilities/getUniqueListBy.d.ts.map +1 -1
  840. package/dist/utilities/getUniqueListBy.js +1 -1
  841. package/dist/utilities/getUniqueListBy.js.map +1 -1
  842. package/dist/utilities/importWithoutClientFiles.d.ts.map +1 -1
  843. package/dist/utilities/importWithoutClientFiles.js +10 -4
  844. package/dist/utilities/importWithoutClientFiles.js.map +1 -1
  845. package/dist/utilities/initTransaction.d.ts.map +1 -1
  846. package/dist/utilities/initTransaction.js +9 -9
  847. package/dist/utilities/initTransaction.js.map +1 -1
  848. package/dist/utilities/isEntityHidden.d.ts +3 -3
  849. package/dist/utilities/isEntityHidden.d.ts.map +1 -1
  850. package/dist/utilities/isEntityHidden.js.map +1 -1
  851. package/dist/utilities/isNumber.js.map +1 -1
  852. package/dist/utilities/isPlainObject.js.map +1 -1
  853. package/dist/utilities/isReactComponent.d.ts +2 -3
  854. package/dist/utilities/isReactComponent.d.ts.map +1 -1
  855. package/dist/utilities/isReactComponent.js +17 -11
  856. package/dist/utilities/isReactComponent.js.map +1 -1
  857. package/dist/utilities/isValidID.d.ts +1 -1
  858. package/dist/utilities/isValidID.js.map +1 -1
  859. package/dist/utilities/isolateObjectProperty.d.ts +1 -1
  860. package/dist/utilities/isolateObjectProperty.d.ts.map +1 -1
  861. package/dist/utilities/isolateObjectProperty.js +14 -5
  862. package/dist/utilities/isolateObjectProperty.js.map +1 -1
  863. package/dist/utilities/killTransaction.js +1 -1
  864. package/dist/utilities/killTransaction.js.map +1 -1
  865. package/dist/utilities/logger.d.ts.map +1 -1
  866. package/dist/utilities/logger.js.map +1 -1
  867. package/dist/utilities/mapAsync.js.map +1 -1
  868. package/dist/utilities/mergeListSearchAndWhere.js.map +1 -1
  869. package/dist/utilities/overwriteMerge.js.map +1 -1
  870. package/dist/utilities/parseCookies.d.ts +1 -1
  871. package/dist/utilities/parseCookies.d.ts.map +1 -1
  872. package/dist/utilities/parseCookies.js +1 -1
  873. package/dist/utilities/parseCookies.js.map +1 -1
  874. package/dist/utilities/reduceFieldsToValues.d.ts +10 -0
  875. package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -0
  876. package/dist/utilities/reduceFieldsToValues.js +22 -0
  877. package/dist/utilities/reduceFieldsToValues.js.map +1 -0
  878. package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
  879. package/dist/utilities/sanitizeInternalFields.js.map +1 -1
  880. package/dist/utilities/setsAreEqual.d.ts.map +1 -1
  881. package/dist/utilities/setsAreEqual.js.map +1 -1
  882. package/dist/utilities/telemetry/events/adminInit.js.map +1 -1
  883. package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
  884. package/dist/utilities/telemetry/events/serverInit.js.map +1 -1
  885. package/dist/utilities/telemetry/index.d.ts +9 -0
  886. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  887. package/dist/utilities/telemetry/index.js +64 -17
  888. package/dist/utilities/telemetry/index.js.map +1 -1
  889. package/dist/utilities/telemetry/oneWayHash.d.ts +0 -1
  890. package/dist/utilities/telemetry/oneWayHash.d.ts.map +1 -1
  891. package/dist/utilities/telemetry/oneWayHash.js.map +1 -1
  892. package/dist/utilities/timestamp.js.map +1 -1
  893. package/dist/utilities/toKebabCase.js.map +1 -1
  894. package/dist/utilities/unflatten.d.ts +9 -0
  895. package/dist/utilities/unflatten.d.ts.map +1 -0
  896. package/dist/utilities/unflatten.js +64 -0
  897. package/dist/utilities/unflatten.js.map +1 -0
  898. package/dist/utilities/wait.js.map +1 -1
  899. package/dist/utilities/wordBoundariesRegex.js.map +1 -1
  900. package/dist/versions/baseFields.js.map +1 -1
  901. package/dist/versions/buildCollectionFields.js.map +1 -1
  902. package/dist/versions/buildGlobalFields.js.map +1 -1
  903. package/dist/versions/defaults.d.ts +4 -0
  904. package/dist/versions/defaults.d.ts.map +1 -0
  905. package/dist/versions/defaults.js +5 -0
  906. package/dist/versions/defaults.js.map +1 -0
  907. package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
  908. package/dist/versions/deleteCollectionVersions.js.map +1 -1
  909. package/dist/versions/drafts/appendVersionToQueryKey.js.map +1 -1
  910. package/dist/versions/drafts/getQueryDraftsSort.js.map +1 -1
  911. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  912. package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
  913. package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
  914. package/dist/versions/enforceMaxVersions.js +1 -1
  915. package/dist/versions/enforceMaxVersions.js.map +1 -1
  916. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  917. package/dist/versions/getLatestCollectionVersion.js.map +1 -1
  918. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  919. package/dist/versions/getLatestGlobalVersion.js +0 -1
  920. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  921. package/dist/versions/saveVersion.d.ts.map +1 -1
  922. package/dist/versions/saveVersion.js +2 -1
  923. package/dist/versions/saveVersion.js.map +1 -1
  924. package/dist/versions/types.d.ts +2 -0
  925. package/dist/versions/types.d.ts.map +1 -1
  926. package/dist/versions/types.js.map +1 -1
  927. package/package.json +94 -117
  928. package/auth.d.ts +0 -6
  929. package/auth.js +0 -6
  930. package/config.d.ts +0 -14
  931. package/config.js +0 -14
  932. package/database.d.ts +0 -23
  933. package/database.js +0 -22
  934. package/dist/email/build.d.ts +0 -5
  935. package/dist/email/build.d.ts.map +0 -1
  936. package/dist/email/build.js +0 -63
  937. package/dist/email/build.js.map +0 -1
  938. package/dist/email/mockHandler.d.ts +0 -5
  939. package/dist/email/mockHandler.d.ts.map +0 -1
  940. package/dist/email/mockHandler.js +0 -24
  941. package/dist/email/mockHandler.js.map +0 -1
  942. package/dist/exports/auth.d.ts +0 -6
  943. package/dist/exports/auth.d.ts.map +0 -1
  944. package/dist/exports/auth.js +0 -6
  945. package/dist/exports/auth.js.map +0 -1
  946. package/dist/exports/components/utilities.d.ts +0 -2
  947. package/dist/exports/components/utilities.d.ts.map +0 -1
  948. package/dist/exports/components/utilities.js +0 -2
  949. package/dist/exports/components/utilities.js.map +0 -1
  950. package/dist/exports/config.d.ts +0 -14
  951. package/dist/exports/config.d.ts.map +0 -1
  952. package/dist/exports/config.js +0 -14
  953. package/dist/exports/config.js.map +0 -1
  954. package/dist/exports/database.d.ts +0 -23
  955. package/dist/exports/database.d.ts.map +0 -1
  956. package/dist/exports/database.js +0 -22
  957. package/dist/exports/database.js.map +0 -1
  958. package/dist/exports/errors.d.ts +0 -2
  959. package/dist/exports/errors.d.ts.map +0 -1
  960. package/dist/exports/errors.js +0 -3
  961. package/dist/exports/errors.js.map +0 -1
  962. package/dist/exports/fields/index.d.ts +0 -3
  963. package/dist/exports/fields/index.d.ts.map +0 -1
  964. package/dist/exports/fields/index.js +0 -4
  965. package/dist/exports/fields/index.js.map +0 -1
  966. package/dist/exports/fields/validations.d.ts +0 -2
  967. package/dist/exports/fields/validations.d.ts.map +0 -1
  968. package/dist/exports/fields/validations.js +0 -3
  969. package/dist/exports/fields/validations.js.map +0 -1
  970. package/dist/exports/operations.d.ts +0 -30
  971. package/dist/exports/operations.d.ts.map +0 -1
  972. package/dist/exports/operations.js +0 -31
  973. package/dist/exports/operations.js.map +0 -1
  974. package/dist/exports/types.d.ts +0 -17
  975. package/dist/exports/types.d.ts.map +0 -1
  976. package/dist/exports/types.js +0 -5
  977. package/dist/exports/types.js.map +0 -1
  978. package/dist/exports/uploads.d.ts +0 -2
  979. package/dist/exports/uploads.d.ts.map +0 -1
  980. package/dist/exports/uploads.js +0 -3
  981. package/dist/exports/uploads.js.map +0 -1
  982. package/dist/exports/utilities.d.ts +0 -31
  983. package/dist/exports/utilities.d.ts.map +0 -1
  984. package/dist/exports/utilities.js +0 -32
  985. package/dist/exports/utilities.js.map +0 -1
  986. package/dist/exports/versions.d.ts +0 -9
  987. package/dist/exports/versions.d.ts.map +0 -1
  988. package/dist/exports/versions.js +0 -9
  989. package/dist/exports/versions.js.map +0 -1
  990. package/errors.d.ts +0 -2
  991. package/errors.js +0 -3
  992. package/node.d.ts +0 -3
  993. package/node.js +0 -4
  994. package/operations.d.ts +0 -30
  995. package/operations.js +0 -31
  996. package/src/index.ts +0 -498
  997. package/types.d.ts +0 -17
  998. package/types.js +0 -5
  999. package/uploads.d.ts +0 -2
  1000. package/uploads.js +0 -3
  1001. package/utilities.d.ts +0 -31
  1002. package/utilities.js +0 -32
  1003. package/versions.d.ts +0 -9
  1004. package/versions.js +0 -9
@@ -17,9 +17,8 @@ const incrementName = (name)=>{
17
17
  }
18
18
  return `${incrementedName}.${extension}`;
19
19
  };
20
- async function getSafeFileName({ collectionSlug, desiredFilename, req, staticPath }) {
20
+ export async function getSafeFileName({ collectionSlug, desiredFilename, req, staticPath }) {
21
21
  let modifiedFilename = desiredFilename;
22
- // eslint-disable-next-line no-await-in-loop
23
22
  while(await docWithFilenameExists({
24
23
  collectionSlug,
25
24
  filename: modifiedFilename,
@@ -30,6 +29,5 @@ async function getSafeFileName({ collectionSlug, desiredFilename, req, staticPat
30
29
  }
31
30
  return modifiedFilename;
32
31
  }
33
- export default getSafeFileName;
34
32
 
35
33
  //# sourceMappingURL=getSafeFilename.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/getSafeFilename.ts"],"sourcesContent":["import sanitize from 'sanitize-filename'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nimport docWithFilenameExists from './docWithFilenameExists.js'\nimport fileExists from './fileExists.js'\n\nconst incrementName = (name: string) => {\n const extension = name.split('.').pop()\n const baseFilename = sanitize(name.substring(0, name.lastIndexOf('.')) || name)\n let incrementedName = baseFilename\n const regex = /(.*)-(\\d+)$/\n const found = baseFilename.match(regex)\n if (found === null) {\n incrementedName += '-1'\n } else {\n const matchedName = found[1]\n const matchedNumber = found[2]\n const incremented = Number(matchedNumber) + 1\n incrementedName = `${matchedName}-${incremented}`\n }\n return `${incrementedName}.${extension}`\n}\n\ntype Args = {\n collectionSlug: string\n desiredFilename: string\n req: PayloadRequest\n staticPath: string\n}\n\nasync function getSafeFileName({\n collectionSlug,\n desiredFilename,\n req,\n staticPath,\n}: Args): Promise<string> {\n let modifiedFilename = desiredFilename\n\n // eslint-disable-next-line no-await-in-loop\n while (\n (await docWithFilenameExists({\n collectionSlug,\n filename: modifiedFilename,\n path: staticPath,\n req,\n })) ||\n (await fileExists(`${staticPath}/${modifiedFilename}`))\n ) {\n modifiedFilename = incrementName(modifiedFilename)\n }\n return modifiedFilename\n}\n\nexport default getSafeFileName\n"],"names":["sanitize","docWithFilenameExists","fileExists","incrementName","name","extension","split","pop","baseFilename","substring","lastIndexOf","incrementedName","regex","found","match","matchedName","matchedNumber","incremented","Number","getSafeFileName","collectionSlug","desiredFilename","req","staticPath","modifiedFilename","filename","path"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,cAAc,oBAAmB;AAIxC,OAAOC,2BAA2B,6BAA4B;AAC9D,OAAOC,gBAAgB,kBAAiB;AAExC,MAAMC,gBAAgB,CAACC;IACrB,MAAMC,YAAYD,KAAKE,KAAK,CAAC,KAAKC,GAAG;IACrC,MAAMC,eAAeR,SAASI,KAAKK,SAAS,CAAC,GAAGL,KAAKM,WAAW,CAAC,SAASN;IAC1E,IAAIO,kBAAkBH;IACtB,MAAMI,QAAQ;IACd,MAAMC,QAAQL,aAAaM,KAAK,CAACF;IACjC,IAAIC,UAAU,MAAM;QAClBF,mBAAmB;IACrB,OAAO;QACL,MAAMI,cAAcF,KAAK,CAAC,EAAE;QAC5B,MAAMG,gBAAgBH,KAAK,CAAC,EAAE;QAC9B,MAAMI,cAAcC,OAAOF,iBAAiB;QAC5CL,kBAAkB,CAAC,EAAEI,YAAY,CAAC,EAAEE,YAAY,CAAC;IACnD;IACA,OAAO,CAAC,EAAEN,gBAAgB,CAAC,EAAEN,UAAU,CAAC;AAC1C;AASA,eAAec,gBAAgB,EAC7BC,cAAc,EACdC,eAAe,EACfC,GAAG,EACHC,UAAU,EACL;IACL,IAAIC,mBAAmBH;IAEvB,4CAA4C;IAC5C,MACE,AAAC,MAAMpB,sBAAsB;QAC3BmB;QACAK,UAAUD;QACVE,MAAMH;QACND;IACF,MACC,MAAMpB,WAAW,CAAC,EAAEqB,WAAW,CAAC,EAAEC,iBAAiB,CAAC,EACrD;QACAA,mBAAmBrB,cAAcqB;IACnC;IACA,OAAOA;AACT;AAEA,eAAeL,gBAAe"}
1
+ {"version":3,"sources":["../../src/uploads/getSafeFilename.ts"],"sourcesContent":["import sanitize from 'sanitize-filename'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nimport docWithFilenameExists from './docWithFilenameExists.js'\nimport fileExists from './fileExists.js'\n\nconst incrementName = (name: string) => {\n const extension = name.split('.').pop()\n const baseFilename = sanitize(name.substring(0, name.lastIndexOf('.')) || name)\n let incrementedName = baseFilename\n const regex = /(.*)-(\\d+)$/\n const found = baseFilename.match(regex)\n if (found === null) {\n incrementedName += '-1'\n } else {\n const matchedName = found[1]\n const matchedNumber = found[2]\n const incremented = Number(matchedNumber) + 1\n incrementedName = `${matchedName}-${incremented}`\n }\n return `${incrementedName}.${extension}`\n}\n\ntype Args = {\n collectionSlug: string\n desiredFilename: string\n req: PayloadRequest\n staticPath: string\n}\n\nexport async function getSafeFileName({\n collectionSlug,\n desiredFilename,\n req,\n staticPath,\n}: Args): Promise<string> {\n let modifiedFilename = desiredFilename\n\n while (\n (await docWithFilenameExists({\n collectionSlug,\n filename: modifiedFilename,\n path: staticPath,\n req,\n })) ||\n (await fileExists(`${staticPath}/${modifiedFilename}`))\n ) {\n modifiedFilename = incrementName(modifiedFilename)\n }\n return modifiedFilename\n}\n"],"names":["sanitize","docWithFilenameExists","fileExists","incrementName","name","extension","split","pop","baseFilename","substring","lastIndexOf","incrementedName","regex","found","match","matchedName","matchedNumber","incremented","Number","getSafeFileName","collectionSlug","desiredFilename","req","staticPath","modifiedFilename","filename","path"],"mappings":"AAAA,OAAOA,cAAc,oBAAmB;AAIxC,OAAOC,2BAA2B,6BAA4B;AAC9D,OAAOC,gBAAgB,kBAAiB;AAExC,MAAMC,gBAAgB,CAACC;IACrB,MAAMC,YAAYD,KAAKE,KAAK,CAAC,KAAKC,GAAG;IACrC,MAAMC,eAAeR,SAASI,KAAKK,SAAS,CAAC,GAAGL,KAAKM,WAAW,CAAC,SAASN;IAC1E,IAAIO,kBAAkBH;IACtB,MAAMI,QAAQ;IACd,MAAMC,QAAQL,aAAaM,KAAK,CAACF;IACjC,IAAIC,UAAU,MAAM;QAClBF,mBAAmB;IACrB,OAAO;QACL,MAAMI,cAAcF,KAAK,CAAC,EAAE;QAC5B,MAAMG,gBAAgBH,KAAK,CAAC,EAAE;QAC9B,MAAMI,cAAcC,OAAOF,iBAAiB;QAC5CL,kBAAkB,CAAC,EAAEI,YAAY,CAAC,EAAEE,YAAY,CAAC;IACnD;IACA,OAAO,CAAC,EAAEN,gBAAgB,CAAC,EAAEN,UAAU,CAAC;AAC1C;AASA,OAAO,eAAec,gBAAgB,EACpCC,cAAc,EACdC,eAAe,EACfC,GAAG,EACHC,UAAU,EACL;IACL,IAAIC,mBAAmBH;IAEvB,MACE,AAAC,MAAMpB,sBAAsB;QAC3BmB;QACAK,UAAUD;QACVE,MAAMH;QACND;IACF,MACC,MAAMpB,WAAW,CAAC,EAAEqB,WAAW,CAAC,EAAEC,iBAAiB,CAAC,EACrD;QACAA,mBAAmBrB,cAAcqB;IACnC;IACA,OAAOA;AACT"}
@@ -1,23 +1,21 @@
1
1
  import type { SanitizedCollectionConfig } from '../collections/config/types.js';
2
2
  import type { SharpDependency } from '../config/types.js';
3
- import type { CustomPayloadRequest, PayloadRequest, UploadEdits } from '../types/index.js';
4
- import type { FileSizes, FileToSave, ProbedImageSize } from './types.js';
3
+ import type { PayloadRequest } from '../types/index.js';
4
+ import type { FileSizes, FileToSave, ProbedImageSize, UploadEdits } from './types.js';
5
5
  type ResizeArgs = {
6
6
  config: SanitizedCollectionConfig;
7
7
  dimensions: ProbedImageSize;
8
- file: CustomPayloadRequest['file'];
8
+ file: PayloadRequest['file'];
9
9
  mimeType: string;
10
- req: PayloadRequest & {
11
- query?: {
12
- uploadEdits?: UploadEdits;
13
- };
14
- };
10
+ req: PayloadRequest;
15
11
  savedFilename: string;
16
- sharp: SharpDependency;
12
+ sharp?: SharpDependency;
17
13
  staticPath: string;
14
+ uploadEdits?: UploadEdits;
18
15
  };
19
16
  /** Result from resizing and transforming the requested image sizes */
20
17
  type ImageSizesResult = {
18
+ focalPoint?: UploadEdits['focalPoint'];
21
19
  sizeData: FileSizes;
22
20
  sizesToSave: FileToSave[];
23
21
  };
@@ -29,12 +27,12 @@ type ImageSizesResult = {
29
27
  *
30
28
  * The image will be resized according to the provided
31
29
  * resize config. If no image sizes are requested, the resolved data will be empty.
32
- * For every image that dos not need to be resized, an result object with `null`
30
+ * For every image that does not need to be resized, a result object with `null`
33
31
  * parameters will be returned.
34
32
  *
35
33
  * @param resizeConfig - the resize config
36
34
  * @returns the result of the resize operation(s)
37
35
  */
38
- export default function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, sharp, staticPath, }: ResizeArgs): Promise<ImageSizesResult>;
36
+ export declare function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, sharp, staticPath, uploadEdits, }: ResizeArgs): Promise<ImageSizesResult>;
39
37
  export {};
40
38
  //# sourceMappingURL=imageResizer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"imageResizer.d.ts","sourceRoot":"","sources":["../../src/uploads/imageResizer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1F,OAAO,KAAK,EAAY,SAAS,EAAE,UAAU,EAAa,eAAe,EAAE,MAAM,YAAY,CAAA;AAK7F,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,yBAAyB,CAAA;IACjC,UAAU,EAAE,eAAe,CAAA;IAC3B,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,cAAc,GAAG;QACpB,KAAK,CAAC,EAAE;YACN,WAAW,CAAC,EAAE,WAAW,CAAA;SAC1B,CAAA;KACF,CAAA;IACD,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,eAAe,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,sEAAsE;AACtE,KAAK,gBAAgB,GAAG;IACtB,QAAQ,EAAE,SAAS,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B,CAAA;AAiKD;;;;;;;;;;;;;GAaG;AACH,wBAA8B,4BAA4B,CAAC,EACzD,MAAM,EACN,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,aAAa,EACb,KAAK,EACL,UAAU,GACX,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkIxC"}
1
+ {"version":3,"file":"imageResizer.d.ts","sourceRoot":"","sources":["../../src/uploads/imageResizer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAEV,SAAS,EACT,UAAU,EAEV,eAAe,EACf,WAAW,EACZ,MAAM,YAAY,CAAA;AAKnB,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,yBAAyB,CAAA;IACjC,UAAU,EAAE,eAAe,CAAA;IAC3B,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IAC5B,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,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA;AAED,sEAAsE;AACtE,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAA;IACtC,QAAQ,EAAE,SAAS,CAAA;IACnB,WAAW,EAAE,UAAU,EAAE,CAAA;CAC1B,CAAA;AA6KD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAAC,EACjD,MAAM,EACN,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,aAAa,EACb,KAAK,EACL,UAAU,EACV,WAAW,GACZ,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmKxC"}
@@ -1,5 +1,4 @@
1
- import fileType from 'file-type';
2
- const { fromBuffer } = fileType;
1
+ import { fileTypeFromBuffer } from 'file-type';
3
2
  import fs from 'fs';
4
3
  import sanitize from 'sanitize-filename';
5
4
  import { isNumber } from '../utilities/isNumber.js';
@@ -43,7 +42,8 @@ import fileExists from './fileExists.js';
43
42
  * @param mimeType - the mime type of the image
44
43
  * @param sizesToSave - the sizes to save
45
44
  * @returns the result object
46
- */ const createResult = (name, filename = null, width = null, height = null, filesize = null, mimeType = null, sizesToSave = [])=>({
45
+ */ const createResult = ({ name, filename = null, filesize = null, height = null, mimeType = null, sizesToSave = [], width = null })=>{
46
+ return {
47
47
  sizeData: {
48
48
  [name]: {
49
49
  filename,
@@ -54,7 +54,8 @@ import fileExists from './fileExists.js';
54
54
  }
55
55
  },
56
56
  sizesToSave
57
- });
57
+ };
58
+ };
58
59
  /**
59
60
  * Check if the image needs to be resized according to the requested dimensions
60
61
  * and the original image size. If the resize options withoutEnlargement or withoutReduction are provided,
@@ -137,19 +138,37 @@ import fileExists from './fileExists.js';
137
138
  *
138
139
  * The image will be resized according to the provided
139
140
  * resize config. If no image sizes are requested, the resolved data will be empty.
140
- * For every image that dos not need to be resized, an result object with `null`
141
+ * For every image that does not need to be resized, a result object with `null`
141
142
  * parameters will be returned.
142
143
  *
143
144
  * @param resizeConfig - the resize config
144
145
  * @returns the result of the resize operation(s)
145
- */ export default async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, sharp, staticPath }) {
146
- const { imageSizes } = config.upload;
147
- // Noting to resize here so return as early as possible
148
- if (!imageSizes) return {
146
+ */ export async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, sharp, staticPath, uploadEdits }) {
147
+ const { focalPoint: focalPointEnabled = true, imageSizes } = config.upload;
148
+ // Focal point adjustments
149
+ const incomingFocalPoint = uploadEdits.focalPoint ? {
150
+ x: isNumber(uploadEdits.focalPoint.x) ? Math.round(uploadEdits.focalPoint.x) : 50,
151
+ y: isNumber(uploadEdits.focalPoint.y) ? Math.round(uploadEdits.focalPoint.y) : 50
152
+ } : undefined;
153
+ const defaultResult = {
154
+ ...focalPointEnabled && incomingFocalPoint && {
155
+ focalPoint: incomingFocalPoint
156
+ },
149
157
  sizeData: {},
150
158
  sizesToSave: []
151
159
  };
152
- const sharpBase = sharp(file.tempFilePath || file.data).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
160
+ if (!imageSizes || !sharp) {
161
+ return defaultResult;
162
+ }
163
+ // Determine if the file is animated
164
+ const fileIsAnimatedType = [
165
+ 'image/avif',
166
+ 'image/gif',
167
+ 'image/webp'
168
+ ].includes(file.mimetype);
169
+ const sharpOptions = {};
170
+ if (fileIsAnimatedType) sharpOptions.animated = true;
171
+ const sharpBase = sharp(file.tempFilePath || file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
153
172
  ;
154
173
  const results = await Promise.all(imageSizes.map(async (imageResizeConfig)=>{
155
174
  imageResizeConfig = sanitizeResizeConfig(imageResizeConfig);
@@ -157,38 +176,46 @@ import fileExists from './fileExists.js';
157
176
  // skipped COMPLETELY and thus will not be included in the resulting images.
158
177
  // All further format/trim options will thus be skipped as well.
159
178
  if (preventResize(imageResizeConfig, dimensions)) {
160
- return createResult(imageResizeConfig.name);
179
+ return createResult({
180
+ name: imageResizeConfig.name
181
+ });
161
182
  }
162
183
  const imageToResize = sharpBase.clone();
163
184
  let resized = imageToResize;
164
- if (req.query?.uploadEdits?.focalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {
165
- const { height: resizeHeight, width: resizeWidth } = imageResizeConfig;
166
- const resizeAspectRatio = resizeWidth / resizeHeight;
185
+ const metadata = await sharpBase.metadata();
186
+ if (incomingFocalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {
187
+ let { height: resizeHeight, width: resizeWidth } = imageResizeConfig;
167
188
  const originalAspectRatio = dimensions.width / dimensions.height;
168
- const prioritizeHeight = resizeAspectRatio < originalAspectRatio;
189
+ // Calculate resizeWidth based on original aspect ratio if it's undefined
190
+ if (resizeHeight && !resizeWidth) {
191
+ resizeWidth = Math.round(resizeHeight * originalAspectRatio);
192
+ }
193
+ // Calculate resizeHeight based on original aspect ratio if it's undefined
194
+ if (resizeWidth && !resizeHeight) {
195
+ resizeHeight = Math.round(resizeWidth / originalAspectRatio);
196
+ }
169
197
  // Scale the image up or down to fit the resize dimensions
170
198
  const scaledImage = imageToResize.resize({
171
- height: prioritizeHeight ? resizeHeight : null,
172
- width: prioritizeHeight ? null : resizeWidth
199
+ height: resizeHeight,
200
+ width: resizeWidth
173
201
  });
174
202
  const { info: scaledImageInfo } = await scaledImage.toBuffer({
175
203
  resolveWithObject: true
176
204
  });
177
- // Focal point adjustments
178
- const focalPoint = {
179
- x: isNumber(req.query.uploadEdits.focalPoint?.x) ? req.query.uploadEdits.focalPoint.x : 50,
180
- y: isNumber(req.query.uploadEdits.focalPoint?.y) ? req.query.uploadEdits.focalPoint.y : 50
181
- };
182
205
  const safeResizeWidth = resizeWidth ?? scaledImageInfo.width;
183
206
  const maxOffsetX = scaledImageInfo.width - safeResizeWidth;
184
- const leftFocalEdge = Math.round(scaledImageInfo.width * (focalPoint.x / 100) - safeResizeWidth / 2);
207
+ const leftFocalEdge = Math.round(scaledImageInfo.width * (incomingFocalPoint.x / 100) - safeResizeWidth / 2);
185
208
  const safeOffsetX = Math.min(Math.max(0, leftFocalEdge), maxOffsetX);
186
- const safeResizeHeight = resizeHeight ?? scaledImageInfo.height;
187
- const maxOffsetY = scaledImageInfo.height - safeResizeHeight;
188
- const topFocalEdge = Math.round(scaledImageInfo.height * (focalPoint.y / 100) - safeResizeHeight / 2);
209
+ const isAnimated = fileIsAnimatedType && metadata.pages;
210
+ let safeResizeHeight = resizeHeight ?? scaledImageInfo.height;
211
+ if (isAnimated && resizeHeight === undefined) {
212
+ safeResizeHeight = scaledImageInfo.height / metadata.pages;
213
+ }
214
+ const maxOffsetY = isAnimated ? safeResizeHeight - (resizeHeight ?? safeResizeHeight) : scaledImageInfo.height - safeResizeHeight;
215
+ const topFocalEdge = Math.round(scaledImageInfo.height * (incomingFocalPoint.y / 100) - safeResizeHeight / 2);
189
216
  const safeOffsetY = Math.min(Math.max(0, topFocalEdge), maxOffsetY);
190
217
  // extract the focal area from the scaled image
191
- resized = scaledImage.extract({
218
+ resized = (fileIsAnimatedType ? imageToResize : scaledImage).extract({
192
219
  height: safeResizeHeight,
193
220
  left: safeOffsetX,
194
221
  top: safeOffsetY,
@@ -207,8 +234,10 @@ import fileExists from './fileExists.js';
207
234
  resolveWithObject: true
208
235
  });
209
236
  const sanitizedImage = getSanitizedImageData(savedFilename);
210
- req.payloadUploadSizes[imageResizeConfig.name] = bufferData;
211
- const mimeInfo = await fromBuffer(bufferData);
237
+ if (req.payloadUploadSizes) {
238
+ req.payloadUploadSizes[imageResizeConfig.name] = bufferData;
239
+ }
240
+ const mimeInfo = await fileTypeFromBuffer(bufferData);
212
241
  const imageNameWithDimensions = createImageName(sanitizedImage.name, bufferInfo, mimeInfo?.ext || sanitizedImage.ext);
213
242
  const imagePath = `${staticPath}/${imageNameWithDimensions}`;
214
243
  if (await fileExists(imagePath)) {
@@ -219,20 +248,27 @@ import fileExists from './fileExists.js';
219
248
  }
220
249
  }
221
250
  const { height, size, width } = bufferInfo;
222
- return createResult(imageResizeConfig.name, imageNameWithDimensions, width, height, size, mimeInfo?.mime || mimeType, [
223
- {
224
- buffer: bufferData,
225
- path: imagePath
226
- }
227
- ]);
251
+ return createResult({
252
+ name: imageResizeConfig.name,
253
+ filename: imageNameWithDimensions,
254
+ filesize: size,
255
+ height: fileIsAnimatedType && metadata.pages ? height / metadata.pages : height,
256
+ mimeType: mimeInfo?.mime || mimeType,
257
+ sizesToSave: [
258
+ {
259
+ buffer: bufferData,
260
+ path: imagePath
261
+ }
262
+ ],
263
+ width
264
+ });
228
265
  }));
229
266
  return results.reduce((acc, result)=>{
230
267
  Object.assign(acc.sizeData, result.sizeData);
231
268
  acc.sizesToSave.push(...result.sizesToSave);
232
269
  return acc;
233
270
  }, {
234
- sizeData: {},
235
- sizesToSave: []
271
+ ...defaultResult
236
272
  });
237
273
  }
238
274
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/imageResizer.ts"],"sourcesContent":["import type { OutputInfo } from 'sharp'\n\nimport fileType from 'file-type'\nconst { fromBuffer } = fileType\n\nimport fs from 'fs'\nimport sanitize from 'sanitize-filename'\n\nimport type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SharpDependency } from '../config/types.js'\nimport type { CustomPayloadRequest, PayloadRequest, UploadEdits } from '../types/index.js'\nimport type { FileSize, FileSizes, FileToSave, ImageSize, ProbedImageSize } from './types.js'\n\nimport { isNumber } from '../utilities/isNumber.js'\nimport fileExists from './fileExists.js'\n\ntype ResizeArgs = {\n config: SanitizedCollectionConfig\n dimensions: ProbedImageSize\n file: CustomPayloadRequest['file']\n mimeType: string\n req: PayloadRequest & {\n query?: {\n uploadEdits?: UploadEdits\n }\n }\n savedFilename: string\n sharp: SharpDependency\n staticPath: string\n}\n\n/** Result from resizing and transforming the requested image sizes */\ntype ImageSizesResult = {\n sizeData: FileSizes\n sizesToSave: FileToSave[]\n}\n\ntype SanitizedImageData = {\n ext: string\n name: string\n}\n\n/**\n * Sanitize the image name and extract the extension from the source image\n *\n * @param sourceImage - the source image\n * @returns the sanitized name and extension\n */\nconst getSanitizedImageData = (sourceImage: string): SanitizedImageData => {\n const extension = sourceImage.split('.').pop()\n const name = sanitize(sourceImage.substring(0, sourceImage.lastIndexOf('.')) || sourceImage)\n return { name, ext: extension }\n}\n\n/**\n * Create a new image name based on the output image name, the dimensions and\n * the extension.\n *\n * Ignore the fact that duplicate names could happen if the there is one\n * size with `width AND height` and one with only `height OR width`. Because\n * space is expensive, we will reuse the same image for both sizes.\n *\n * @param outputImageName - the sanitized image name\n * @param bufferInfo - the buffer info\n * @param extension - the extension to use\n * @returns the new image name that is not taken\n */\nconst createImageName = (\n outputImageName: string,\n { height, width }: OutputInfo,\n extension: string,\n) => `${outputImageName}-${width}x${height}.${extension}`\n\n/**\n * Create the result object for the image resize operation based on the\n * provided parameters. If the name is not provided, an empty result object\n * is returned.\n *\n * @param name - the name of the image\n * @param filename - the filename of the image\n * @param width - the width of the image\n * @param height - the height of the image\n * @param filesize - the filesize of the image\n * @param mimeType - the mime type of the image\n * @param sizesToSave - the sizes to save\n * @returns the result object\n */\nconst createResult = (\n name: string,\n filename: FileSize['filename'] = null,\n width: FileSize['width'] = null,\n height: FileSize['height'] = null,\n filesize: FileSize['filesize'] = null,\n mimeType: FileSize['mimeType'] = null,\n sizesToSave: FileToSave[] = [],\n): ImageSizesResult => ({\n sizeData: {\n [name]: {\n filename,\n filesize,\n height,\n mimeType,\n width,\n },\n },\n sizesToSave,\n})\n\n/**\n * Check if the image needs to be resized according to the requested dimensions\n * and the original image size. If the resize options withoutEnlargement or withoutReduction are provided,\n * the image will be resized regardless of the requested dimensions, given that the\n * width or height to be resized is provided.\n *\n * @param resizeConfig - object containing the requested dimensions and resize options\n * @param original - the original image size\n * @returns true if resizing is not needed, false otherwise\n */\nconst preventResize = (\n { height: desiredHeight, width: desiredWidth, withoutEnlargement, withoutReduction }: ImageSize,\n original: ProbedImageSize,\n): boolean => {\n // default is to allow reduction\n if (withoutReduction !== undefined) {\n return false // needs resize\n }\n\n // default is to prevent enlargement\n if (withoutEnlargement !== undefined) {\n return false // needs resize\n }\n\n const isWidthOrHeightNotDefined = !desiredHeight || !desiredWidth\n if (isWidthOrHeightNotDefined) {\n // If width and height are not defined, it means there is a format conversion\n // and the image needs to be \"resized\" (transformed).\n return false // needs resize\n }\n\n const hasInsufficientWidth = desiredWidth > original.width\n const hasInsufficientHeight = desiredHeight > original.height\n if (hasInsufficientWidth && hasInsufficientHeight) {\n // doesn't need resize - prevent enlargement. This should only happen if both width and height are insufficient.\n // if only one dimension is insufficient and the other is sufficient, resizing needs to happen, as the image\n // should be resized to the sufficient dimension.\n return true // do not create a new size\n }\n\n return false // needs resize\n}\n\n/**\n * Check if the image should be passed directly to sharp without payload adjusting properties.\n *\n * @param resizeConfig - object containing the requested dimensions and resize options\n * @param original - the original image size\n * @returns true if the image should passed directly to sharp\n */\nconst applyPayloadAdjustments = (\n { fit, height, width, withoutEnlargement, withoutReduction }: ImageSize,\n original: ProbedImageSize,\n) => {\n if (fit === 'contain' || fit === 'inside') return false\n if (!isNumber(height) && !isNumber(width)) return false\n\n const targetAspectRatio = width / height\n const originalAspectRatio = original.width / original.height\n if (originalAspectRatio === targetAspectRatio) return false\n\n const skipEnlargement = withoutEnlargement && (original.height < height || original.width < width)\n const skipReduction = withoutReduction && (original.height > height || original.width > width)\n if (skipEnlargement || skipReduction) return false\n\n return true\n}\n\n/**\n * Sanitize the resize config. If the resize config has the `withoutReduction`\n * property set to true, the `fit` and `position` properties will be set to `contain`\n * and `top left` respectively.\n *\n * @param resizeConfig - the resize config\n * @returns a sanitized resize config\n */\nconst sanitizeResizeConfig = (resizeConfig: ImageSize): ImageSize => {\n if (resizeConfig.withoutReduction) {\n return {\n ...resizeConfig,\n // Why fit `contain` should also be set to https://github.com/lovell/sharp/issues/3595\n fit: resizeConfig?.fit || 'contain',\n position: resizeConfig?.position || 'left top',\n }\n }\n return resizeConfig\n}\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 dos not need to be resized, an 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 */\nexport default async function resizeAndTransformImageSizes({\n config,\n dimensions,\n file,\n mimeType,\n req,\n savedFilename,\n sharp,\n staticPath,\n}: ResizeArgs): Promise<ImageSizesResult> {\n const { imageSizes } = config.upload\n // Noting to resize here so return as early as possible\n if (!imageSizes) return { sizeData: {}, sizesToSave: [] }\n\n const sharpBase = sharp(file.tempFilePath || file.data).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n\n const results: ImageSizesResult[] = await Promise.all(\n imageSizes.map(async (imageResizeConfig): Promise<ImageSizesResult> => {\n imageResizeConfig = sanitizeResizeConfig(imageResizeConfig)\n\n // This checks if a resize should happen. If not, the resized image will be\n // skipped COMPLETELY and thus will not be included in the resulting images.\n // All further format/trim options will thus be skipped as well.\n if (preventResize(imageResizeConfig, dimensions)) {\n return createResult(imageResizeConfig.name)\n }\n\n const imageToResize = sharpBase.clone()\n let resized = imageToResize\n\n if (\n req.query?.uploadEdits?.focalPoint &&\n applyPayloadAdjustments(imageResizeConfig, dimensions)\n ) {\n const { height: resizeHeight, width: resizeWidth } = imageResizeConfig\n const resizeAspectRatio = resizeWidth / resizeHeight\n const originalAspectRatio = dimensions.width / dimensions.height\n const prioritizeHeight = resizeAspectRatio < originalAspectRatio\n\n // Scale the image up or down to fit the resize dimensions\n const scaledImage = imageToResize.resize({\n height: prioritizeHeight ? resizeHeight : null,\n width: prioritizeHeight ? null : resizeWidth,\n })\n const { info: scaledImageInfo } = await scaledImage.toBuffer({ resolveWithObject: true })\n\n // Focal point adjustments\n const focalPoint = {\n x: isNumber(req.query.uploadEdits.focalPoint?.x)\n ? req.query.uploadEdits.focalPoint.x\n : 50,\n y: isNumber(req.query.uploadEdits.focalPoint?.y)\n ? req.query.uploadEdits.focalPoint.y\n : 50,\n }\n\n const safeResizeWidth = resizeWidth ?? scaledImageInfo.width\n const maxOffsetX = scaledImageInfo.width - safeResizeWidth\n const leftFocalEdge = Math.round(\n scaledImageInfo.width * (focalPoint.x / 100) - safeResizeWidth / 2,\n )\n const safeOffsetX = Math.min(Math.max(0, leftFocalEdge), maxOffsetX)\n\n const safeResizeHeight = resizeHeight ?? scaledImageInfo.height\n const maxOffsetY = scaledImageInfo.height - safeResizeHeight\n const topFocalEdge = Math.round(\n scaledImageInfo.height * (focalPoint.y / 100) - safeResizeHeight / 2,\n )\n const safeOffsetY = Math.min(Math.max(0, topFocalEdge), maxOffsetY)\n\n // extract the focal area from the scaled image\n resized = scaledImage.extract({\n height: safeResizeHeight,\n left: safeOffsetX,\n top: safeOffsetY,\n width: safeResizeWidth,\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 { data: bufferData, info: bufferInfo } = await resized.toBuffer({\n resolveWithObject: true,\n })\n\n const sanitizedImage = getSanitizedImageData(savedFilename)\n\n req.payloadUploadSizes[imageResizeConfig.name] = bufferData\n\n const mimeInfo = await fromBuffer(bufferData)\n\n const imageNameWithDimensions = createImageName(\n sanitizedImage.name,\n bufferInfo,\n mimeInfo?.ext || sanitizedImage.ext,\n )\n\n const imagePath = `${staticPath}/${imageNameWithDimensions}`\n\n if (await fileExists(imagePath)) {\n try {\n fs.unlinkSync(imagePath)\n } catch {\n // Ignore unlink errors\n }\n }\n\n const { height, size, width } = bufferInfo\n return createResult(\n imageResizeConfig.name,\n imageNameWithDimensions,\n width,\n height,\n size,\n mimeInfo?.mime || mimeType,\n [{ buffer: bufferData, path: imagePath }],\n )\n }),\n )\n\n return results.reduce(\n (acc, result) => {\n Object.assign(acc.sizeData, result.sizeData)\n acc.sizesToSave.push(...result.sizesToSave)\n return acc\n },\n { sizeData: {}, sizesToSave: [] },\n )\n}\n"],"names":["fileType","fromBuffer","fs","sanitize","isNumber","fileExists","getSanitizedImageData","sourceImage","extension","split","pop","name","substring","lastIndexOf","ext","createImageName","outputImageName","height","width","createResult","filename","filesize","mimeType","sizesToSave","sizeData","preventResize","desiredHeight","desiredWidth","withoutEnlargement","withoutReduction","original","undefined","isWidthOrHeightNotDefined","hasInsufficientWidth","hasInsufficientHeight","applyPayloadAdjustments","fit","targetAspectRatio","originalAspectRatio","skipEnlargement","skipReduction","sanitizeResizeConfig","resizeConfig","position","resizeAndTransformImageSizes","config","dimensions","file","req","savedFilename","sharp","staticPath","imageSizes","upload","sharpBase","tempFilePath","data","rotate","results","Promise","all","map","imageResizeConfig","imageToResize","clone","resized","query","uploadEdits","focalPoint","resizeHeight","resizeWidth","resizeAspectRatio","prioritizeHeight","scaledImage","resize","info","scaledImageInfo","toBuffer","resolveWithObject","x","y","safeResizeWidth","maxOffsetX","leftFocalEdge","Math","round","safeOffsetX","min","max","safeResizeHeight","maxOffsetY","topFocalEdge","safeOffsetY","extract","left","top","formatOptions","toFormat","format","options","trimOptions","trim","bufferData","bufferInfo","sanitizedImage","payloadUploadSizes","mimeInfo","imageNameWithDimensions","imagePath","unlinkSync","size","mime","buffer","path","reduce","acc","result","Object","assign","push"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/uploads/imageResizer.ts"],"sourcesContent":["import type { OutputInfo, Sharp, SharpOptions } from 'sharp'\n\nimport { fileTypeFromBuffer } from 'file-type'\nimport fs from 'fs'\nimport sanitize from 'sanitize-filename'\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 {\n FileSize,\n FileSizes,\n FileToSave,\n ImageSize,\n ProbedImageSize,\n UploadEdits,\n} from './types.js'\n\nimport { isNumber } from '../utilities/isNumber.js'\nimport fileExists from './fileExists.js'\n\ntype ResizeArgs = {\n config: SanitizedCollectionConfig\n dimensions: ProbedImageSize\n file: PayloadRequest['file']\n mimeType: string\n req: PayloadRequest\n savedFilename: string\n sharp?: SharpDependency\n staticPath: string\n uploadEdits?: UploadEdits\n}\n\n/** Result from resizing and transforming the requested image sizes */\ntype ImageSizesResult = {\n focalPoint?: UploadEdits['focalPoint']\n sizeData: FileSizes\n sizesToSave: FileToSave[]\n}\n\ntype SanitizedImageData = {\n ext: string\n name: string\n}\n\n/**\n * Sanitize the image name and extract the extension from the source image\n *\n * @param sourceImage - the source image\n * @returns the sanitized name and extension\n */\nconst getSanitizedImageData = (sourceImage: string): SanitizedImageData => {\n const extension = sourceImage.split('.').pop()\n const name = sanitize(sourceImage.substring(0, sourceImage.lastIndexOf('.')) || sourceImage)\n return { name, ext: extension }\n}\n\n/**\n * Create a new image name based on the output image name, the dimensions and\n * the extension.\n *\n * Ignore the fact that duplicate names could happen if the there is one\n * size with `width AND height` and one with only `height OR width`. Because\n * space is expensive, we will reuse the same image for both sizes.\n *\n * @param outputImageName - the sanitized image name\n * @param bufferInfo - the buffer info\n * @param extension - the extension to use\n * @returns the new image name that is not taken\n */\nconst createImageName = (\n outputImageName: string,\n { height, width }: OutputInfo,\n extension: string,\n) => `${outputImageName}-${width}x${height}.${extension}`\n\ntype CreateResultArgs = {\n filename?: FileSize['filename']\n filesize?: FileSize['filesize']\n height?: FileSize['height']\n mimeType?: FileSize['mimeType']\n name: string\n sizesToSave?: FileToSave[]\n width?: FileSize['width']\n}\n\n/**\n * Create the result object for the image resize operation based on the\n * provided parameters. If the name is not provided, an empty result object\n * is returned.\n *\n * @param name - the name of the image\n * @param filename - the filename of the image\n * @param width - the width of the image\n * @param height - the height of the image\n * @param filesize - the filesize of the image\n * @param mimeType - the mime type of the image\n * @param sizesToSave - the sizes to save\n * @returns the result object\n */\nconst createResult = ({\n name,\n filename = null,\n filesize = null,\n height = null,\n mimeType = null,\n sizesToSave = [],\n width = null,\n}: CreateResultArgs): ImageSizesResult => {\n return {\n sizeData: {\n [name]: {\n filename,\n filesize,\n height,\n mimeType,\n width,\n },\n },\n sizesToSave,\n }\n}\n\n/**\n * Check if the image needs to be resized according to the requested dimensions\n * and the original image size. If the resize options withoutEnlargement or withoutReduction are provided,\n * the image will be resized regardless of the requested dimensions, given that the\n * width or height to be resized is provided.\n *\n * @param resizeConfig - object containing the requested dimensions and resize options\n * @param original - the original image size\n * @returns true if resizing is not needed, false otherwise\n */\nconst preventResize = (\n { height: desiredHeight, width: desiredWidth, withoutEnlargement, withoutReduction }: ImageSize,\n original: ProbedImageSize,\n): boolean => {\n // default is to allow reduction\n if (withoutReduction !== undefined) {\n return false // needs resize\n }\n\n // default is to prevent enlargement\n if (withoutEnlargement !== undefined) {\n return false // needs resize\n }\n\n const isWidthOrHeightNotDefined = !desiredHeight || !desiredWidth\n if (isWidthOrHeightNotDefined) {\n // If width and height are not defined, it means there is a format conversion\n // and the image needs to be \"resized\" (transformed).\n return false // needs resize\n }\n\n const hasInsufficientWidth = desiredWidth > original.width\n const hasInsufficientHeight = desiredHeight > original.height\n if (hasInsufficientWidth && hasInsufficientHeight) {\n // doesn't need resize - prevent enlargement. This should only happen if both width and height are insufficient.\n // if only one dimension is insufficient and the other is sufficient, resizing needs to happen, as the image\n // should be resized to the sufficient dimension.\n return true // do not create a new size\n }\n\n return false // needs resize\n}\n\n/**\n * Check if the image should be passed directly to sharp without payload adjusting properties.\n *\n * @param resizeConfig - object containing the requested dimensions and resize options\n * @param original - the original image size\n * @returns true if the image should passed directly to sharp\n */\nconst applyPayloadAdjustments = (\n { fit, height, width, withoutEnlargement, withoutReduction }: ImageSize,\n original: ProbedImageSize,\n) => {\n if (fit === 'contain' || fit === 'inside') return false\n if (!isNumber(height) && !isNumber(width)) return false\n\n const targetAspectRatio = width / height\n const originalAspectRatio = original.width / original.height\n if (originalAspectRatio === targetAspectRatio) return false\n\n const skipEnlargement = withoutEnlargement && (original.height < height || original.width < width)\n const skipReduction = withoutReduction && (original.height > height || original.width > width)\n if (skipEnlargement || skipReduction) return false\n\n return true\n}\n\n/**\n * Sanitize the resize config. If the resize config has the `withoutReduction`\n * property set to true, the `fit` and `position` properties will be set to `contain`\n * and `top left` respectively.\n *\n * @param resizeConfig - the resize config\n * @returns a sanitized resize config\n */\nconst sanitizeResizeConfig = (resizeConfig: ImageSize): ImageSize => {\n if (resizeConfig.withoutReduction) {\n return {\n ...resizeConfig,\n // Why fit `contain` should also be set to https://github.com/lovell/sharp/issues/3595\n fit: resizeConfig?.fit || 'contain',\n position: resizeConfig?.position || 'left top',\n }\n }\n return resizeConfig\n}\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 */\nexport async function resizeAndTransformImageSizes({\n config,\n dimensions,\n file,\n mimeType,\n req,\n savedFilename,\n sharp,\n staticPath,\n uploadEdits,\n}: ResizeArgs): Promise<ImageSizesResult> {\n const { focalPoint: focalPointEnabled = true, imageSizes } = config.upload\n\n // Focal point adjustments\n const incomingFocalPoint = uploadEdits.focalPoint\n ? {\n x: isNumber(uploadEdits.focalPoint.x) ? Math.round(uploadEdits.focalPoint.x) : 50,\n y: isNumber(uploadEdits.focalPoint.y) ? Math.round(uploadEdits.focalPoint.y) : 50,\n }\n : undefined\n\n const defaultResult: ImageSizesResult = {\n ...(focalPointEnabled && incomingFocalPoint && { focalPoint: incomingFocalPoint }),\n sizeData: {},\n sizesToSave: [],\n }\n\n if (!imageSizes || !sharp) {\n return defaultResult\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) sharpOptions.animated = true\n\n const sharpBase: Sharp | undefined = sharp(file.tempFilePath || file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n\n const results: ImageSizesResult[] = await Promise.all(\n imageSizes.map(async (imageResizeConfig): Promise<ImageSizesResult> => {\n imageResizeConfig = sanitizeResizeConfig(imageResizeConfig)\n\n // This checks if a resize should happen. If not, the resized image will be\n // skipped COMPLETELY and thus will not be included in the resulting images.\n // All further format/trim options will thus be skipped as well.\n if (preventResize(imageResizeConfig, dimensions)) {\n return createResult({ name: imageResizeConfig.name })\n }\n\n const imageToResize = sharpBase.clone()\n let resized = imageToResize\n\n const metadata = await sharpBase.metadata()\n\n if (incomingFocalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {\n let { height: resizeHeight, width: resizeWidth } = imageResizeConfig\n\n const originalAspectRatio = dimensions.width / dimensions.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 // Scale the image up or down to fit the resize dimensions\n const scaledImage = imageToResize.resize({\n height: resizeHeight,\n width: resizeWidth,\n })\n\n const { info: scaledImageInfo } = await scaledImage.toBuffer({ resolveWithObject: true })\n\n const safeResizeWidth = resizeWidth ?? scaledImageInfo.width\n const maxOffsetX = scaledImageInfo.width - safeResizeWidth\n const leftFocalEdge = Math.round(\n scaledImageInfo.width * (incomingFocalPoint.x / 100) - safeResizeWidth / 2,\n )\n const safeOffsetX = Math.min(Math.max(0, leftFocalEdge), maxOffsetX)\n\n const isAnimated = fileIsAnimatedType && metadata.pages\n\n let safeResizeHeight = resizeHeight ?? scaledImageInfo.height\n\n if (isAnimated && resizeHeight === undefined) {\n safeResizeHeight = scaledImageInfo.height / metadata.pages\n }\n\n const maxOffsetY = isAnimated\n ? safeResizeHeight - (resizeHeight ?? safeResizeHeight)\n : scaledImageInfo.height - safeResizeHeight\n\n const topFocalEdge = Math.round(\n scaledImageInfo.height * (incomingFocalPoint.y / 100) - safeResizeHeight / 2,\n )\n const safeOffsetY = Math.min(Math.max(0, topFocalEdge), maxOffsetY)\n\n // extract the focal area from the scaled image\n resized = (fileIsAnimatedType ? imageToResize : scaledImage).extract({\n height: safeResizeHeight,\n left: safeOffsetX,\n top: safeOffsetY,\n width: safeResizeWidth,\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 { data: bufferData, info: bufferInfo } = await resized.toBuffer({\n resolveWithObject: true,\n })\n\n const sanitizedImage = getSanitizedImageData(savedFilename)\n\n if (req.payloadUploadSizes) {\n req.payloadUploadSizes[imageResizeConfig.name] = bufferData\n }\n\n const mimeInfo = await fileTypeFromBuffer(bufferData)\n\n const imageNameWithDimensions = createImageName(\n sanitizedImage.name,\n bufferInfo,\n mimeInfo?.ext || sanitizedImage.ext,\n )\n\n const imagePath = `${staticPath}/${imageNameWithDimensions}`\n\n if (await fileExists(imagePath)) {\n try {\n fs.unlinkSync(imagePath)\n } catch {\n // Ignore unlink errors\n }\n }\n\n const { height, size, width } = bufferInfo\n return createResult({\n name: imageResizeConfig.name,\n filename: imageNameWithDimensions,\n filesize: size,\n height: fileIsAnimatedType && metadata.pages ? height / metadata.pages : height,\n mimeType: mimeInfo?.mime || mimeType,\n sizesToSave: [{ buffer: bufferData, path: imagePath }],\n width,\n })\n }),\n )\n\n return results.reduce(\n (acc, result) => {\n Object.assign(acc.sizeData, result.sizeData)\n acc.sizesToSave.push(...result.sizesToSave)\n return acc\n },\n { ...defaultResult },\n )\n}\n"],"names":["fileTypeFromBuffer","fs","sanitize","isNumber","fileExists","getSanitizedImageData","sourceImage","extension","split","pop","name","substring","lastIndexOf","ext","createImageName","outputImageName","height","width","createResult","filename","filesize","mimeType","sizesToSave","sizeData","preventResize","desiredHeight","desiredWidth","withoutEnlargement","withoutReduction","original","undefined","isWidthOrHeightNotDefined","hasInsufficientWidth","hasInsufficientHeight","applyPayloadAdjustments","fit","targetAspectRatio","originalAspectRatio","skipEnlargement","skipReduction","sanitizeResizeConfig","resizeConfig","position","resizeAndTransformImageSizes","config","dimensions","file","req","savedFilename","sharp","staticPath","uploadEdits","focalPoint","focalPointEnabled","imageSizes","upload","incomingFocalPoint","x","Math","round","y","defaultResult","fileIsAnimatedType","includes","mimetype","sharpOptions","animated","sharpBase","tempFilePath","data","rotate","results","Promise","all","map","imageResizeConfig","imageToResize","clone","resized","metadata","resizeHeight","resizeWidth","scaledImage","resize","info","scaledImageInfo","toBuffer","resolveWithObject","safeResizeWidth","maxOffsetX","leftFocalEdge","safeOffsetX","min","max","isAnimated","pages","safeResizeHeight","maxOffsetY","topFocalEdge","safeOffsetY","extract","left","top","formatOptions","toFormat","format","options","trimOptions","trim","bufferData","bufferInfo","sanitizedImage","payloadUploadSizes","mimeInfo","imageNameWithDimensions","imagePath","unlinkSync","size","mime","buffer","path","reduce","acc","result","Object","assign","push"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export default function isImage(mimeType: string): boolean;
1
+ export declare function isImage(mimeType: string): boolean;
2
2
  //# sourceMappingURL=isImage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isImage.d.ts","sourceRoot":"","sources":["../../src/uploads/isImage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMzD"}
1
+ {"version":3,"file":"isImage.d.ts","sourceRoot":"","sources":["../../src/uploads/isImage.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMjD"}
@@ -1,4 +1,4 @@
1
- export default function isImage(mimeType) {
1
+ export function isImage(mimeType) {
2
2
  return [
3
3
  'image/jpeg',
4
4
  'image/png',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/isImage.ts"],"sourcesContent":["export default function isImage(mimeType: string): boolean {\n return (\n ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/webp', 'image/avif'].indexOf(\n mimeType,\n ) > -1\n )\n}\n"],"names":["isImage","mimeType","indexOf"],"rangeMappings":";;;;;;;;;","mappings":"AAAA,eAAe,SAASA,QAAQC,QAAgB;IAC9C,OACE;QAAC;QAAc;QAAa;QAAa;QAAiB;QAAc;KAAa,CAACC,OAAO,CAC3FD,YACE,CAAC;AAET"}
1
+ {"version":3,"sources":["../../src/uploads/isImage.ts"],"sourcesContent":["export function isImage(mimeType: string): boolean {\n return (\n ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/webp', 'image/avif'].indexOf(\n mimeType,\n ) > -1\n )\n}\n"],"names":["isImage","mimeType","indexOf"],"mappings":"AAAA,OAAO,SAASA,QAAQC,QAAgB;IACtC,OACE;QAAC;QAAc;QAAa;QAAa;QAAiB;QAAc;KAAa,CAACC,OAAO,CAC3FD,YACE,CAAC;AAET"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/mimeTypeValidator.ts"],"sourcesContent":["import type { Validate } from '../fields/config/types.js'\n\nexport const mimeTypeValidator =\n (mimeTypes: string[]): Validate =>\n (val: string, { siblingData }) => {\n if (!siblingData.filename) {\n return true\n }\n\n if (!val) {\n return 'Invalid file type'\n }\n\n const cleanedMimeTypes = mimeTypes.map((v) => v.replace('*', ''))\n return !cleanedMimeTypes.some((v) => val.startsWith(v)) ? `Invalid file type: '${val}'` : true\n }\n"],"names":["mimeTypeValidator","mimeTypes","val","siblingData","filename","cleanedMimeTypes","map","v","replace","some","startsWith"],"rangeMappings":";;;;;;;;;","mappings":"AAEA,OAAO,MAAMA,oBACX,CAACC,YACD,CAACC,KAAa,EAAEC,WAAW,EAAE;QAC3B,IAAI,CAACA,YAAYC,QAAQ,EAAE;YACzB,OAAO;QACT;QAEA,IAAI,CAACF,KAAK;YACR,OAAO;QACT;QAEA,MAAMG,mBAAmBJ,UAAUK,GAAG,CAAC,CAACC,IAAMA,EAAEC,OAAO,CAAC,KAAK;QAC7D,OAAO,CAACH,iBAAiBI,IAAI,CAAC,CAACF,IAAML,IAAIQ,UAAU,CAACH,MAAM,CAAC,oBAAoB,EAAEL,IAAI,CAAC,CAAC,GAAG;IAC5F,EAAC"}
1
+ {"version":3,"sources":["../../src/uploads/mimeTypeValidator.ts"],"sourcesContent":["import type { Validate } from '../fields/config/types.js'\n\nexport const mimeTypeValidator =\n (mimeTypes: string[]): Validate =>\n (val: string, { siblingData }) => {\n if (!siblingData.filename) {\n return true\n }\n\n if (!val) {\n return 'Invalid file type'\n }\n\n const cleanedMimeTypes = mimeTypes.map((v) => v.replace('*', ''))\n return !cleanedMimeTypes.some((v) => val.startsWith(v)) ? `Invalid file type: '${val}'` : true\n }\n"],"names":["mimeTypeValidator","mimeTypes","val","siblingData","filename","cleanedMimeTypes","map","v","replace","some","startsWith"],"mappings":"AAEA,OAAO,MAAMA,oBACX,CAACC,YACD,CAACC,KAAa,EAAEC,WAAW,EAAE;QAC3B,IAAI,CAACA,YAAYC,QAAQ,EAAE;YACzB,OAAO;QACT;QAEA,IAAI,CAACF,KAAK;YACR,OAAO;QACT;QAEA,MAAMG,mBAAmBJ,UAAUK,GAAG,CAAC,CAACC,IAAMA,EAAEC,OAAO,CAAC,KAAK;QAC7D,OAAO,CAACH,iBAAiBI,IAAI,CAAC,CAACF,IAAML,IAAIQ,UAAU,CAACH,MAAM,CAAC,oBAAoB,EAAEL,IAAI,CAAC,CAAC,GAAG;IAC5F,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/mimeTypeValidator.spec.ts"],"sourcesContent":["import type { ValidateOptions } from '../fields/config/types'\n\nimport { mimeTypeValidator } from './mimeTypeValidator'\n\nconst options = { siblingData: { filename: 'file.xyz' } } as ValidateOptions<\n undefined,\n undefined,\n undefined\n>\n\ndescribe('mimeTypeValidator', () => {\n it('should validate single mimeType', () => {\n const mimeTypes = ['image/png']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n })\n\n it('should validate multiple mimeTypes', () => {\n const mimeTypes = ['image/png', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('application/pdf', options)).toBe(true)\n })\n\n it('should validate using wildcard', () => {\n const mimeTypes = ['image/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('image/gif', options)).toBe(true)\n })\n\n it('should validate multiple wildcards', () => {\n const mimeTypes = ['image/*', 'audio/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('audio/mpeg', options)).toBe(true)\n })\n\n it('should not validate when unmatched', () => {\n const mimeTypes = ['image/png']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate when unmatched - multiple mimeTypes', () => {\n const mimeTypes = ['image/png', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate using wildcard - unmatched', () => {\n const mimeTypes = ['image/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate multiple wildcards - unmatched', () => {\n const mimeTypes = ['image/*', 'audio/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('video/mp4', options)).toBe(\"Invalid file type: 'video/mp4'\")\n expect(validate('application/pdf', options)).toBe(\"Invalid file type: 'application/pdf'\")\n })\n\n it('should not error when mimeType is missing', () => {\n const mimeTypes = ['image/*', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n let value\n expect(validate(value, options)).toBe('Invalid file type')\n })\n})\n"],"names":["mimeTypeValidator","options","siblingData","filename","describe","it","mimeTypes","validate","expect","toBe","value"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,iBAAiB,QAAQ,sBAAqB;AAEvD,MAAMC,UAAU;IAAEC,aAAa;QAAEC,UAAU;IAAW;AAAE;AAMxDC,SAAS,qBAAqB;IAC5BC,GAAG,mCAAmC;QACpC,MAAMC,YAAY;YAAC;SAAY;QAC/B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;IAC9C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;YAAa;SAAkB;QAClD,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,mBAAmBN,UAAUQ,IAAI,CAAC;IACpD;IAEAJ,GAAG,kCAAkC;QACnC,MAAMC,YAAY;YAAC;SAAU;QAC7B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;IAC9C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;YAAW;SAAU;QACxC,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;SAAY;QAC/B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,2DAA2D;QAC5D,MAAMC,YAAY;YAAC;YAAa;SAAkB;QAClD,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,kDAAkD;QACnD,MAAMC,YAAY;YAAC;SAAU;QAC7B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,sDAAsD;QACvD,MAAMC,YAAY;YAAC;YAAW;SAAU;QACxC,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,mBAAmBN,UAAUQ,IAAI,CAAC;IACpD;IAEAJ,GAAG,6CAA6C;QAC9C,MAAMC,YAAY;YAAC;YAAW;SAAkB;QAChD,MAAMC,WAAWP,kBAAkBM;QACnC,IAAII;QACJF,OAAOD,SAASG,OAAOT,UAAUQ,IAAI,CAAC;IACxC;AACF"}
1
+ {"version":3,"sources":["../../src/uploads/mimeTypeValidator.spec.ts"],"sourcesContent":["import type { ValidateOptions } from '../fields/config/types'\n\nimport { mimeTypeValidator } from './mimeTypeValidator'\n\nconst options = { siblingData: { filename: 'file.xyz' } } as ValidateOptions<\n undefined,\n undefined,\n undefined\n>\n\ndescribe('mimeTypeValidator', () => {\n it('should validate single mimeType', () => {\n const mimeTypes = ['image/png']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n })\n\n it('should validate multiple mimeTypes', () => {\n const mimeTypes = ['image/png', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('application/pdf', options)).toBe(true)\n })\n\n it('should validate using wildcard', () => {\n const mimeTypes = ['image/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('image/gif', options)).toBe(true)\n })\n\n it('should validate multiple wildcards', () => {\n const mimeTypes = ['image/*', 'audio/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('audio/mpeg', options)).toBe(true)\n })\n\n it('should not validate when unmatched', () => {\n const mimeTypes = ['image/png']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate when unmatched - multiple mimeTypes', () => {\n const mimeTypes = ['image/png', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate using wildcard - unmatched', () => {\n const mimeTypes = ['image/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate multiple wildcards - unmatched', () => {\n const mimeTypes = ['image/*', 'audio/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('video/mp4', options)).toBe(\"Invalid file type: 'video/mp4'\")\n expect(validate('application/pdf', options)).toBe(\"Invalid file type: 'application/pdf'\")\n })\n\n it('should not error when mimeType is missing', () => {\n const mimeTypes = ['image/*', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n let value\n expect(validate(value, options)).toBe('Invalid file type')\n })\n})\n"],"names":["mimeTypeValidator","options","siblingData","filename","describe","it","mimeTypes","validate","expect","toBe","value"],"mappings":"AAEA,SAASA,iBAAiB,QAAQ,sBAAqB;AAEvD,MAAMC,UAAU;IAAEC,aAAa;QAAEC,UAAU;IAAW;AAAE;AAMxDC,SAAS,qBAAqB;IAC5BC,GAAG,mCAAmC;QACpC,MAAMC,YAAY;YAAC;SAAY;QAC/B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;IAC9C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;YAAa;SAAkB;QAClD,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,mBAAmBN,UAAUQ,IAAI,CAAC;IACpD;IAEAJ,GAAG,kCAAkC;QACnC,MAAMC,YAAY;YAAC;SAAU;QAC7B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;IAC9C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;YAAW;SAAU;QACxC,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;SAAY;QAC/B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,2DAA2D;QAC5D,MAAMC,YAAY;YAAC;YAAa;SAAkB;QAClD,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,kDAAkD;QACnD,MAAMC,YAAY;YAAC;SAAU;QAC7B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,sDAAsD;QACvD,MAAMC,YAAY;YAAC;YAAW;SAAU;QACxC,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,mBAAmBN,UAAUQ,IAAI,CAAC;IACpD;IAEAJ,GAAG,6CAA6C;QAC9C,MAAMC,YAAY;YAAC;YAAW;SAAkB;QAChD,MAAMC,WAAWP,kBAAkBM;QACnC,IAAII;QACJF,OAAOD,SAASG,OAAOT,UAAUQ,IAAI,CAAC;IACxC;AACF"}
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  /**
3
2
  * Save buffer data to a file.
4
3
  * @param {Buffer} buffer - buffer to save to a file.
@@ -1 +1 @@
1
- {"version":3,"file":"saveBufferToFile.d.ts","sourceRoot":"","sources":["../../src/uploads/saveBufferToFile.ts"],"names":[],"mappings":";AAGA;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,WAAkB,MAAM,YAAY,MAAM,KAAG,QAAQ,IAAI,CAU9E,CAAA;AAED,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"saveBufferToFile.d.ts","sourceRoot":"","sources":["../../src/uploads/saveBufferToFile.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,QAAA,MAAM,gBAAgB,WAAkB,MAAM,YAAY,MAAM,KAAG,OAAO,CAAC,IAAI,CAU9E,CAAA;AAED,eAAe,gBAAgB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/saveBufferToFile.ts"],"sourcesContent":["import fs from 'fs'\nimport { Readable } from 'stream'\n\n/**\n * Save buffer data to a file.\n * @param {Buffer} buffer - buffer to save to a file.\n * @param {string} filePath - path to a file.\n */\nconst saveBufferToFile = async (buffer: Buffer, filePath: string): Promise<void> => {\n // Setup readable stream from buffer.\n let streamData = buffer\n const readStream = new Readable()\n readStream._read = () => {\n readStream.push(streamData)\n streamData = null\n }\n // Setup file system writable stream.\n return fs.writeFileSync(filePath, buffer)\n}\n\nexport default saveBufferToFile\n"],"names":["fs","Readable","saveBufferToFile","buffer","filePath","streamData","readStream","_read","push","writeFileSync"],"rangeMappings":";;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,SAASC,QAAQ,QAAQ,SAAQ;AAEjC;;;;CAIC,GACD,MAAMC,mBAAmB,OAAOC,QAAgBC;IAC9C,qCAAqC;IACrC,IAAIC,aAAaF;IACjB,MAAMG,aAAa,IAAIL;IACvBK,WAAWC,KAAK,GAAG;QACjBD,WAAWE,IAAI,CAACH;QAChBA,aAAa;IACf;IACA,qCAAqC;IACrC,OAAOL,GAAGS,aAAa,CAACL,UAAUD;AACpC;AAEA,eAAeD,iBAAgB"}
1
+ {"version":3,"sources":["../../src/uploads/saveBufferToFile.ts"],"sourcesContent":["import fs from 'fs'\nimport { Readable } from 'stream'\n\n/**\n * Save buffer data to a file.\n * @param {Buffer} buffer - buffer to save to a file.\n * @param {string} filePath - path to a file.\n */\nconst saveBufferToFile = async (buffer: Buffer, filePath: string): Promise<void> => {\n // Setup readable stream from buffer.\n let streamData = buffer\n const readStream = new Readable()\n readStream._read = () => {\n readStream.push(streamData)\n streamData = null\n }\n // Setup file system writable stream.\n return fs.writeFileSync(filePath, buffer)\n}\n\nexport default saveBufferToFile\n"],"names":["fs","Readable","saveBufferToFile","buffer","filePath","streamData","readStream","_read","push","writeFileSync"],"mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,SAASC,QAAQ,QAAQ,SAAQ;AAEjC;;;;CAIC,GACD,MAAMC,mBAAmB,OAAOC,QAAgBC;IAC9C,qCAAqC;IACrC,IAAIC,aAAaF;IACjB,MAAMG,aAAa,IAAIL;IACvBK,WAAWC,KAAK,GAAG;QACjBD,WAAWE,IAAI,CAACH;QAChBA,aAAa;IACf;IACA,qCAAqC;IACrC,OAAOL,GAAGS,aAAa,CAACL,UAAUD;AACpC;AAEA,eAAeD,iBAAgB"}
@@ -0,0 +1,7 @@
1
+ type Options = {
2
+ extension?: string;
3
+ name?: string;
4
+ };
5
+ export declare const temporaryFileTask: (callback: any, options?: Options) => Promise<any>;
6
+ export {};
7
+ //# sourceMappingURL=tempFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tempFile.d.ts","sourceRoot":"","sources":["../../src/uploads/tempFile.ts"],"names":[],"mappings":"AAaA,KAAK,OAAO,GAAG;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,eAAO,MAAM,iBAAiB,4BAA6B,OAAO,iBAGjE,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { promises as fsPromises } from 'fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { v4 as uuid } from 'uuid';
5
+ async function runTask(temporaryPath, callback) {
6
+ try {
7
+ return await callback(temporaryPath);
8
+ } finally{
9
+ await fsPromises.rm(temporaryPath, {
10
+ force: true,
11
+ maxRetries: 2,
12
+ recursive: true
13
+ });
14
+ }
15
+ }
16
+ export const temporaryFileTask = async (callback, options = {})=>{
17
+ const filePath = await temporaryFile(options);
18
+ return runTask(filePath, callback);
19
+ };
20
+ async function temporaryFile(options) {
21
+ if (options.name) {
22
+ if (options.extension !== undefined && options.extension !== null) {
23
+ throw new Error('The `name` and `extension` options are mutually exclusive');
24
+ }
25
+ return path.join(await temporaryDirectory(), options.name);
26
+ }
27
+ return await getPath() + (options.extension === undefined || options.extension === null ? '' : '.' + options.extension.replace(/^\./, ''));
28
+ }
29
+ async function temporaryDirectory({ prefix = '' } = {}) {
30
+ const directory = await getPath(prefix);
31
+ await fsPromises.mkdir(directory);
32
+ return directory;
33
+ }
34
+ async function getPath(prefix = '') {
35
+ const temporaryDirectory = await fsPromises.realpath(os.tmpdir());
36
+ return path.join(temporaryDirectory, prefix + uuid());
37
+ }
38
+
39
+ //# sourceMappingURL=tempFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/uploads/tempFile.ts"],"sourcesContent":["import { promises as fsPromises } from 'fs'\nimport os from 'node:os'\nimport path from 'node:path'\nimport { v4 as uuid } from 'uuid'\n\nasync function runTask(temporaryPath: string, callback) {\n try {\n return await callback(temporaryPath)\n } finally {\n await fsPromises.rm(temporaryPath, { force: true, maxRetries: 2, recursive: true })\n }\n}\n\ntype Options = {\n extension?: string\n name?: string\n}\n\nexport const temporaryFileTask = async (callback, options: Options = {}) => {\n const filePath = await temporaryFile(options)\n return runTask(filePath, callback)\n}\n\nasync function temporaryFile(options: Options) {\n if (options.name) {\n if (options.extension !== undefined && options.extension !== null) {\n throw new Error('The `name` and `extension` options are mutually exclusive')\n }\n\n return path.join(await temporaryDirectory(), options.name)\n }\n\n return (\n (await getPath()) +\n (options.extension === undefined || options.extension === null\n ? ''\n : '.' + options.extension.replace(/^\\./, ''))\n )\n}\n\nasync function temporaryDirectory({ prefix = '' } = {}) {\n const directory = await getPath(prefix)\n await fsPromises.mkdir(directory)\n return directory\n}\n\nasync function getPath(prefix = ''): Promise<string> {\n const temporaryDirectory = await fsPromises.realpath(os.tmpdir())\n return path.join(temporaryDirectory, prefix + uuid())\n}\n"],"names":["promises","fsPromises","os","path","v4","uuid","runTask","temporaryPath","callback","rm","force","maxRetries","recursive","temporaryFileTask","options","filePath","temporaryFile","name","extension","undefined","Error","join","temporaryDirectory","getPath","replace","prefix","directory","mkdir","realpath","tmpdir"],"mappings":"AAAA,SAASA,YAAYC,UAAU,QAAQ,KAAI;AAC3C,OAAOC,QAAQ,UAAS;AACxB,OAAOC,UAAU,YAAW;AAC5B,SAASC,MAAMC,IAAI,QAAQ,OAAM;AAEjC,eAAeC,QAAQC,aAAqB,EAAEC,QAAQ;IACpD,IAAI;QACF,OAAO,MAAMA,SAASD;IACxB,SAAU;QACR,MAAMN,WAAWQ,EAAE,CAACF,eAAe;YAAEG,OAAO;YAAMC,YAAY;YAAGC,WAAW;QAAK;IACnF;AACF;AAOA,OAAO,MAAMC,oBAAoB,OAAOL,UAAUM,UAAmB,CAAC,CAAC;IACrE,MAAMC,WAAW,MAAMC,cAAcF;IACrC,OAAOR,QAAQS,UAAUP;AAC3B,EAAC;AAED,eAAeQ,cAAcF,OAAgB;IAC3C,IAAIA,QAAQG,IAAI,EAAE;QAChB,IAAIH,QAAQI,SAAS,KAAKC,aAAaL,QAAQI,SAAS,KAAK,MAAM;YACjE,MAAM,IAAIE,MAAM;QAClB;QAEA,OAAOjB,KAAKkB,IAAI,CAAC,MAAMC,sBAAsBR,QAAQG,IAAI;IAC3D;IAEA,OACE,AAAC,MAAMM,YACNT,CAAAA,QAAQI,SAAS,KAAKC,aAAaL,QAAQI,SAAS,KAAK,OACtD,KACA,MAAMJ,QAAQI,SAAS,CAACM,OAAO,CAAC,OAAO,GAAE;AAEjD;AAEA,eAAeF,mBAAmB,EAAEG,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;IACpD,MAAMC,YAAY,MAAMH,QAAQE;IAChC,MAAMxB,WAAW0B,KAAK,CAACD;IACvB,OAAOA;AACT;AAEA,eAAeH,QAAQE,SAAS,EAAE;IAChC,MAAMH,qBAAqB,MAAMrB,WAAW2B,QAAQ,CAAC1B,GAAG2B,MAAM;IAC9D,OAAO1B,KAAKkB,IAAI,CAACC,oBAAoBG,SAASpB;AAChD"}