payload 3.0.0-beta.4 → 3.0.0-beta.40

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 (749) hide show
  1. package/auth.d.ts +1 -1
  2. package/auth.js +1 -1
  3. package/components.d.ts +14 -0
  4. package/components.js +71 -0
  5. package/dist/admin/LanguageOptions.d.ts +5 -0
  6. package/dist/admin/LanguageOptions.d.ts.map +1 -0
  7. package/dist/admin/LanguageOptions.js +3 -0
  8. package/dist/admin/LanguageOptions.js.map +1 -0
  9. package/dist/admin/RichText.d.ts +30 -15
  10. package/dist/admin/RichText.d.ts.map +1 -1
  11. package/dist/admin/RichText.js.map +1 -1
  12. package/dist/admin/elements/Cell.d.ts +2 -7
  13. package/dist/admin/elements/Cell.d.ts.map +1 -1
  14. package/dist/admin/elements/Cell.js.map +1 -1
  15. package/dist/admin/elements/Tab.d.ts +4 -0
  16. package/dist/admin/elements/Tab.d.ts.map +1 -1
  17. package/dist/admin/elements/Tab.js.map +1 -1
  18. package/dist/admin/elements/WithServerSideProps.d.ts +6 -2
  19. package/dist/admin/elements/WithServerSideProps.d.ts.map +1 -1
  20. package/dist/admin/elements/WithServerSideProps.js.map +1 -1
  21. package/dist/admin/forms/Error.d.ts +1 -0
  22. package/dist/admin/forms/Error.d.ts.map +1 -1
  23. package/dist/admin/forms/FieldDescription.d.ts +1 -1
  24. package/dist/admin/forms/FieldDescription.d.ts.map +1 -1
  25. package/dist/admin/forms/FieldDescription.js.map +1 -1
  26. package/dist/admin/forms/FieldTypes.d.ts +1 -0
  27. package/dist/admin/forms/FieldTypes.d.ts.map +1 -1
  28. package/dist/admin/forms/Label.d.ts +3 -2
  29. package/dist/admin/forms/Label.d.ts.map +1 -1
  30. package/dist/admin/forms/Label.js.map +1 -1
  31. package/dist/admin/forms/RowLabel.d.ts +1 -1
  32. package/dist/admin/forms/RowLabel.d.ts.map +1 -1
  33. package/dist/admin/forms/RowLabel.js.map +1 -1
  34. package/dist/admin/types.d.ts +4 -3
  35. package/dist/admin/types.d.ts.map +1 -1
  36. package/dist/admin/types.js.map +1 -1
  37. package/dist/admin/views/types.d.ts +7 -4
  38. package/dist/admin/views/types.d.ts.map +1 -1
  39. package/dist/admin/views/types.js.map +1 -1
  40. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  41. package/dist/auth/baseFields/apiKey.js +6 -4
  42. package/dist/auth/baseFields/apiKey.js.map +1 -1
  43. package/dist/auth/cookies.d.ts +16 -4
  44. package/dist/auth/cookies.d.ts.map +1 -1
  45. package/dist/auth/cookies.js +45 -14
  46. package/dist/auth/cookies.js.map +1 -1
  47. package/dist/auth/defaultAccess.d.ts +2 -2
  48. package/dist/auth/defaultAccess.d.ts.map +1 -1
  49. package/dist/auth/defaultAccess.js.map +1 -1
  50. package/dist/auth/executeAccess.d.ts +2 -2
  51. package/dist/auth/executeAccess.d.ts.map +1 -1
  52. package/dist/auth/executeAccess.js.map +1 -1
  53. package/dist/auth/getAccessResults.d.ts +2 -2
  54. package/dist/auth/getAccessResults.d.ts.map +1 -1
  55. package/dist/auth/getAccessResults.js +1 -1
  56. package/dist/auth/getAccessResults.js.map +1 -1
  57. package/dist/auth/getFieldsToSign.d.ts +2 -2
  58. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  59. package/dist/auth/getFieldsToSign.js.map +1 -1
  60. package/dist/auth/operations/access.d.ts +2 -2
  61. package/dist/auth/operations/access.d.ts.map +1 -1
  62. package/dist/auth/operations/access.js.map +1 -1
  63. package/dist/auth/operations/auth.d.ts +2 -2
  64. package/dist/auth/operations/auth.d.ts.map +1 -1
  65. package/dist/auth/operations/auth.js.map +1 -1
  66. package/dist/auth/operations/forgotPassword.d.ts +2 -2
  67. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  68. package/dist/auth/operations/forgotPassword.js +7 -8
  69. package/dist/auth/operations/forgotPassword.js.map +1 -1
  70. package/dist/auth/operations/init.d.ts +2 -2
  71. package/dist/auth/operations/init.d.ts.map +1 -1
  72. package/dist/auth/operations/init.js.map +1 -1
  73. package/dist/auth/operations/local/auth.js.map +1 -1
  74. package/dist/auth/operations/local/forgotPassword.d.ts +2 -2
  75. package/dist/auth/operations/local/forgotPassword.d.ts.map +1 -1
  76. package/dist/auth/operations/local/forgotPassword.js.map +1 -1
  77. package/dist/auth/operations/local/login.d.ts +2 -2
  78. package/dist/auth/operations/local/login.d.ts.map +1 -1
  79. package/dist/auth/operations/local/login.js.map +1 -1
  80. package/dist/auth/operations/local/resetPassword.d.ts +2 -2
  81. package/dist/auth/operations/local/resetPassword.d.ts.map +1 -1
  82. package/dist/auth/operations/local/resetPassword.js.map +1 -1
  83. package/dist/auth/operations/local/unlock.d.ts +2 -2
  84. package/dist/auth/operations/local/unlock.d.ts.map +1 -1
  85. package/dist/auth/operations/local/unlock.js.map +1 -1
  86. package/dist/auth/operations/local/verifyEmail.d.ts +2 -2
  87. package/dist/auth/operations/local/verifyEmail.d.ts.map +1 -1
  88. package/dist/auth/operations/local/verifyEmail.js.map +1 -1
  89. package/dist/auth/operations/login.d.ts +2 -2
  90. package/dist/auth/operations/login.d.ts.map +1 -1
  91. package/dist/auth/operations/login.js +21 -1
  92. package/dist/auth/operations/login.js.map +1 -1
  93. package/dist/auth/operations/logout.d.ts +2 -2
  94. package/dist/auth/operations/logout.d.ts.map +1 -1
  95. package/dist/auth/operations/logout.js.map +1 -1
  96. package/dist/auth/operations/me.d.ts +2 -2
  97. package/dist/auth/operations/me.d.ts.map +1 -1
  98. package/dist/auth/operations/me.js.map +1 -1
  99. package/dist/auth/operations/refresh.d.ts +2 -2
  100. package/dist/auth/operations/refresh.d.ts.map +1 -1
  101. package/dist/auth/operations/refresh.js.map +1 -1
  102. package/dist/auth/operations/registerFirstUser.d.ts +2 -2
  103. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  104. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  105. package/dist/auth/operations/resetPassword.d.ts +2 -2
  106. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  107. package/dist/auth/operations/resetPassword.js.map +1 -1
  108. package/dist/auth/operations/unlock.d.ts +2 -2
  109. package/dist/auth/operations/unlock.d.ts.map +1 -1
  110. package/dist/auth/operations/unlock.js.map +1 -1
  111. package/dist/auth/operations/verifyEmail.d.ts +2 -2
  112. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  113. package/dist/auth/operations/verifyEmail.js.map +1 -1
  114. package/dist/auth/sendVerificationEmail.d.ts +7 -8
  115. package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
  116. package/dist/auth/sendVerificationEmail.js +7 -7
  117. package/dist/auth/sendVerificationEmail.js.map +1 -1
  118. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts +2 -2
  119. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  120. package/dist/auth/strategies/local/incrementLoginAttempts.js.map +1 -1
  121. package/dist/auth/strategies/local/register.d.ts +2 -2
  122. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  123. package/dist/auth/strategies/local/register.js +1 -1
  124. package/dist/auth/strategies/local/register.js.map +1 -1
  125. package/dist/auth/strategies/local/resetLoginAttempts.d.ts +2 -2
  126. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  127. package/dist/auth/strategies/local/resetLoginAttempts.js.map +1 -1
  128. package/dist/auth/types.d.ts +6 -6
  129. package/dist/auth/types.d.ts.map +1 -1
  130. package/dist/auth/types.js.map +1 -1
  131. package/dist/bin/generateTypes.d.ts +1 -1
  132. package/dist/bin/generateTypes.d.ts.map +1 -1
  133. package/dist/bin/generateTypes.js +12 -8
  134. package/dist/bin/generateTypes.js.map +1 -1
  135. package/dist/bin/loadEnv.d.ts +2 -2
  136. package/dist/bin/loadEnv.d.ts.map +1 -1
  137. package/dist/bin/loadEnv.js +18 -17
  138. package/dist/bin/loadEnv.js.map +1 -1
  139. package/dist/bin/loader/ignores.d.ts +2 -0
  140. package/dist/bin/loader/ignores.d.ts.map +1 -0
  141. package/dist/bin/loader/ignores.js +5 -0
  142. package/dist/bin/loader/ignores.js.map +1 -0
  143. package/dist/bin/loader/index.d.ts.map +1 -1
  144. package/dist/bin/loader/index.js +13 -15
  145. package/dist/bin/loader/index.js.map +1 -1
  146. package/dist/bin/loader/read-default-tsconfig.d.ts +25 -0
  147. package/dist/bin/loader/read-default-tsconfig.d.ts.map +1 -1
  148. package/dist/bin/loader/read-default-tsconfig.js +25 -1
  149. package/dist/bin/loader/read-default-tsconfig.js.map +1 -1
  150. package/dist/bin/loader/resolveOriginalPath.d.ts +10 -0
  151. package/dist/bin/loader/resolveOriginalPath.d.ts.map +1 -0
  152. package/dist/bin/loader/resolveOriginalPath.js +32 -0
  153. package/dist/bin/loader/resolveOriginalPath.js.map +1 -0
  154. package/dist/collections/config/client.d.ts +30 -3
  155. package/dist/collections/config/client.d.ts.map +1 -1
  156. package/dist/collections/config/client.js +3 -1
  157. package/dist/collections/config/client.js.map +1 -1
  158. package/dist/collections/config/defaults.d.ts +6 -5
  159. package/dist/collections/config/defaults.d.ts.map +1 -1
  160. package/dist/collections/config/defaults.js +1 -0
  161. package/dist/collections/config/defaults.js.map +1 -1
  162. package/dist/collections/config/sanitize.d.ts +2 -3
  163. package/dist/collections/config/sanitize.d.ts.map +1 -1
  164. package/dist/collections/config/sanitize.js +7 -4
  165. package/dist/collections/config/sanitize.js.map +1 -1
  166. package/dist/collections/config/schema.d.ts.map +1 -1
  167. package/dist/collections/config/schema.js +12 -2
  168. package/dist/collections/config/schema.js.map +1 -1
  169. package/dist/collections/config/types.d.ts +33 -18
  170. package/dist/collections/config/types.d.ts.map +1 -1
  171. package/dist/collections/config/types.js.map +1 -1
  172. package/dist/collections/dataloader.d.ts +14 -0
  173. package/dist/collections/dataloader.d.ts.map +1 -1
  174. package/dist/collections/dataloader.js +28 -13
  175. package/dist/collections/dataloader.js.map +1 -1
  176. package/dist/collections/operations/count.d.ts +13 -0
  177. package/dist/collections/operations/count.d.ts.map +1 -0
  178. package/dist/collections/operations/count.js +75 -0
  179. package/dist/collections/operations/count.js.map +1 -0
  180. package/dist/collections/operations/create.d.ts +2 -2
  181. package/dist/collections/operations/create.d.ts.map +1 -1
  182. package/dist/collections/operations/create.js +5 -4
  183. package/dist/collections/operations/create.js.map +1 -1
  184. package/dist/collections/operations/delete.d.ts +2 -2
  185. package/dist/collections/operations/delete.d.ts.map +1 -1
  186. package/dist/collections/operations/delete.js +1 -0
  187. package/dist/collections/operations/delete.js.map +1 -1
  188. package/dist/collections/operations/deleteByID.d.ts +2 -2
  189. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  190. package/dist/collections/operations/deleteByID.js +1 -0
  191. package/dist/collections/operations/deleteByID.js.map +1 -1
  192. package/dist/collections/operations/docAccess.d.ts +2 -2
  193. package/dist/collections/operations/docAccess.d.ts.map +1 -1
  194. package/dist/collections/operations/docAccess.js.map +1 -1
  195. package/dist/collections/operations/duplicate.d.ts +2 -2
  196. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  197. package/dist/collections/operations/duplicate.js +2 -0
  198. package/dist/collections/operations/duplicate.js.map +1 -1
  199. package/dist/collections/operations/find.d.ts +2 -2
  200. package/dist/collections/operations/find.d.ts.map +1 -1
  201. package/dist/collections/operations/find.js +1 -0
  202. package/dist/collections/operations/find.js.map +1 -1
  203. package/dist/collections/operations/findByID.d.ts +2 -2
  204. package/dist/collections/operations/findByID.d.ts.map +1 -1
  205. package/dist/collections/operations/findByID.js +1 -0
  206. package/dist/collections/operations/findByID.js.map +1 -1
  207. package/dist/collections/operations/findVersionByID.d.ts +2 -2
  208. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  209. package/dist/collections/operations/findVersionByID.js +1 -0
  210. package/dist/collections/operations/findVersionByID.js.map +1 -1
  211. package/dist/collections/operations/findVersions.d.ts +2 -2
  212. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  213. package/dist/collections/operations/findVersions.js +1 -0
  214. package/dist/collections/operations/findVersions.js.map +1 -1
  215. package/dist/collections/operations/local/count.d.ts +20 -0
  216. package/dist/collections/operations/local/count.d.ts.map +1 -0
  217. package/dist/collections/operations/local/count.js +19 -0
  218. package/dist/collections/operations/local/count.js.map +1 -0
  219. package/dist/collections/operations/local/create.d.ts +4 -4
  220. package/dist/collections/operations/local/create.d.ts.map +1 -1
  221. package/dist/collections/operations/local/create.js.map +1 -1
  222. package/dist/collections/operations/local/delete.d.ts +4 -4
  223. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  224. package/dist/collections/operations/local/delete.js.map +1 -1
  225. package/dist/collections/operations/local/duplicate.d.ts +4 -4
  226. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  227. package/dist/collections/operations/local/duplicate.js.map +1 -1
  228. package/dist/collections/operations/local/find.d.ts +4 -4
  229. package/dist/collections/operations/local/find.d.ts.map +1 -1
  230. package/dist/collections/operations/local/find.js.map +1 -1
  231. package/dist/collections/operations/local/findByID.d.ts +4 -4
  232. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  233. package/dist/collections/operations/local/findByID.js.map +1 -1
  234. package/dist/collections/operations/local/findVersionByID.d.ts +4 -4
  235. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  236. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  237. package/dist/collections/operations/local/findVersions.d.ts +4 -4
  238. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  239. package/dist/collections/operations/local/findVersions.js.map +1 -1
  240. package/dist/collections/operations/local/index.d.ts +2 -0
  241. package/dist/collections/operations/local/index.d.ts.map +1 -1
  242. package/dist/collections/operations/local/index.js +2 -0
  243. package/dist/collections/operations/local/index.js.map +1 -1
  244. package/dist/collections/operations/local/restoreVersion.d.ts +4 -4
  245. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  246. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  247. package/dist/collections/operations/local/update.d.ts +4 -4
  248. package/dist/collections/operations/local/update.d.ts.map +1 -1
  249. package/dist/collections/operations/local/update.js.map +1 -1
  250. package/dist/collections/operations/restoreVersion.d.ts +2 -2
  251. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  252. package/dist/collections/operations/restoreVersion.js +2 -0
  253. package/dist/collections/operations/restoreVersion.js.map +1 -1
  254. package/dist/collections/operations/update.d.ts +2 -2
  255. package/dist/collections/operations/update.d.ts.map +1 -1
  256. package/dist/collections/operations/update.js +6 -3
  257. package/dist/collections/operations/update.js.map +1 -1
  258. package/dist/collections/operations/updateByID.d.ts +2 -2
  259. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  260. package/dist/collections/operations/updateByID.js +5 -2
  261. package/dist/collections/operations/updateByID.js.map +1 -1
  262. package/dist/collections/operations/utils.d.ts +8 -2
  263. package/dist/collections/operations/utils.d.ts.map +1 -1
  264. package/dist/collections/operations/utils.js.map +1 -1
  265. package/dist/config/build.d.ts.map +1 -1
  266. package/dist/config/build.js +3 -4
  267. package/dist/config/build.js.map +1 -1
  268. package/dist/config/client.d.ts +2 -1
  269. package/dist/config/client.d.ts.map +1 -1
  270. package/dist/config/client.js +3 -1
  271. package/dist/config/client.js.map +1 -1
  272. package/dist/config/defaults.d.ts.map +1 -1
  273. package/dist/config/defaults.js +14 -3
  274. package/dist/config/defaults.js.map +1 -1
  275. package/dist/config/find.d.ts.map +1 -1
  276. package/dist/config/find.js +27 -16
  277. package/dist/config/find.js.map +1 -1
  278. package/dist/config/sanitize.d.ts +1 -1
  279. package/dist/config/sanitize.d.ts.map +1 -1
  280. package/dist/config/sanitize.js +43 -10
  281. package/dist/config/sanitize.js.map +1 -1
  282. package/dist/config/schema.d.ts.map +1 -1
  283. package/dist/config/schema.js +21 -7
  284. package/dist/config/schema.js.map +1 -1
  285. package/dist/config/shared/openGraphSchema.d.ts +3 -0
  286. package/dist/config/shared/openGraphSchema.d.ts.map +1 -0
  287. package/dist/config/shared/openGraphSchema.js +16 -0
  288. package/dist/config/shared/openGraphSchema.js.map +1 -0
  289. package/dist/config/types.d.ts +146 -78
  290. package/dist/config/types.d.ts.map +1 -1
  291. package/dist/config/types.js +7 -13
  292. package/dist/config/types.js.map +1 -1
  293. package/dist/database/migrations/getPredefinedMigration.d.ts +12 -0
  294. package/dist/database/migrations/getPredefinedMigration.d.ts.map +1 -0
  295. package/dist/database/migrations/getPredefinedMigration.js +41 -0
  296. package/dist/database/migrations/getPredefinedMigration.js.map +1 -0
  297. package/dist/database/migrations/migrate.js.map +1 -1
  298. package/dist/database/migrations/migrateDown.js.map +1 -1
  299. package/dist/database/migrations/migrateRefresh.js.map +1 -1
  300. package/dist/database/migrations/migrateReset.js.map +1 -1
  301. package/dist/database/queryValidation/validateQueryPaths.d.ts +2 -2
  302. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  303. package/dist/database/queryValidation/validateQueryPaths.js +1 -1
  304. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  305. package/dist/database/queryValidation/validateSearchParams.d.ts +2 -2
  306. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  307. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  308. package/dist/database/types.d.ts +34 -19
  309. package/dist/database/types.d.ts.map +1 -1
  310. package/dist/database/types.js.map +1 -1
  311. package/dist/email/consoleEmailAdapter.d.ts +3 -0
  312. package/dist/email/consoleEmailAdapter.d.ts.map +1 -0
  313. package/dist/email/consoleEmailAdapter.js +17 -0
  314. package/dist/email/consoleEmailAdapter.js.map +1 -0
  315. package/dist/email/defaults.d.ts +2 -2
  316. package/dist/email/defaults.d.ts.map +1 -1
  317. package/dist/email/defaults.js +3 -3
  318. package/dist/email/defaults.js.map +1 -1
  319. package/dist/email/getStringifiedToAddress.d.ts +3 -0
  320. package/dist/email/getStringifiedToAddress.d.ts.map +1 -0
  321. package/dist/email/getStringifiedToAddress.js +20 -0
  322. package/dist/email/getStringifiedToAddress.js.map +1 -0
  323. package/dist/email/sendEmail.d.ts +3 -2
  324. package/dist/email/sendEmail.d.ts.map +1 -1
  325. package/dist/email/sendEmail.js +8 -4
  326. package/dist/email/sendEmail.js.map +1 -1
  327. package/dist/email/types.d.ts +26 -18
  328. package/dist/email/types.d.ts.map +1 -1
  329. package/dist/email/types.js +5 -1
  330. package/dist/email/types.js.map +1 -1
  331. package/dist/errors/APIError.d.ts +2 -2
  332. package/dist/errors/APIError.d.ts.map +1 -1
  333. package/dist/errors/APIError.js +1 -2
  334. package/dist/errors/APIError.js.map +1 -1
  335. package/dist/errors/AuthenticationError.d.ts +2 -3
  336. package/dist/errors/AuthenticationError.d.ts.map +1 -1
  337. package/dist/errors/AuthenticationError.js +2 -3
  338. package/dist/errors/AuthenticationError.js.map +1 -1
  339. package/dist/errors/DuplicateCollection.d.ts +2 -3
  340. package/dist/errors/DuplicateCollection.d.ts.map +1 -1
  341. package/dist/errors/DuplicateCollection.js +2 -3
  342. package/dist/errors/DuplicateCollection.js.map +1 -1
  343. package/dist/errors/DuplicateFieldName.d.ts +2 -3
  344. package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
  345. package/dist/errors/DuplicateFieldName.js +2 -3
  346. package/dist/errors/DuplicateFieldName.js.map +1 -1
  347. package/dist/errors/DuplicateGlobal.d.ts +2 -3
  348. package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
  349. package/dist/errors/DuplicateGlobal.js +2 -3
  350. package/dist/errors/DuplicateGlobal.js.map +1 -1
  351. package/dist/errors/ErrorDeletingFile.d.ts +2 -3
  352. package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
  353. package/dist/errors/ErrorDeletingFile.js +2 -3
  354. package/dist/errors/ErrorDeletingFile.js.map +1 -1
  355. package/dist/errors/FileRetrievalError.d.ts +6 -0
  356. package/dist/errors/FileRetrievalError.d.ts.map +1 -0
  357. package/dist/errors/FileRetrievalError.js +13 -0
  358. package/dist/errors/FileRetrievalError.js.map +1 -0
  359. package/dist/errors/FileUploadError.d.ts +2 -3
  360. package/dist/errors/FileUploadError.d.ts.map +1 -1
  361. package/dist/errors/FileUploadError.js +2 -3
  362. package/dist/errors/FileUploadError.js.map +1 -1
  363. package/dist/errors/Forbidden.d.ts +2 -3
  364. package/dist/errors/Forbidden.d.ts.map +1 -1
  365. package/dist/errors/Forbidden.js +2 -3
  366. package/dist/errors/Forbidden.js.map +1 -1
  367. package/dist/errors/InvalidConfiguration.d.ts +2 -3
  368. package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
  369. package/dist/errors/InvalidConfiguration.js +2 -3
  370. package/dist/errors/InvalidConfiguration.js.map +1 -1
  371. package/dist/errors/InvalidFieldName.d.ts +2 -3
  372. package/dist/errors/InvalidFieldName.d.ts.map +1 -1
  373. package/dist/errors/InvalidFieldName.js +2 -3
  374. package/dist/errors/InvalidFieldName.js.map +1 -1
  375. package/dist/errors/InvalidFieldRelationship.d.ts +2 -3
  376. package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
  377. package/dist/errors/InvalidFieldRelationship.js +2 -3
  378. package/dist/errors/InvalidFieldRelationship.js.map +1 -1
  379. package/dist/errors/InvalidSchema.d.ts +2 -3
  380. package/dist/errors/InvalidSchema.d.ts.map +1 -1
  381. package/dist/errors/InvalidSchema.js +2 -3
  382. package/dist/errors/InvalidSchema.js.map +1 -1
  383. package/dist/errors/LockedAuth.d.ts +2 -3
  384. package/dist/errors/LockedAuth.d.ts.map +1 -1
  385. package/dist/errors/LockedAuth.js +2 -3
  386. package/dist/errors/LockedAuth.js.map +1 -1
  387. package/dist/errors/MissingCollectionLabel.d.ts +2 -3
  388. package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
  389. package/dist/errors/MissingCollectionLabel.js +2 -3
  390. package/dist/errors/MissingCollectionLabel.js.map +1 -1
  391. package/dist/errors/MissingEditorProp.d.ts +2 -3
  392. package/dist/errors/MissingEditorProp.d.ts.map +1 -1
  393. package/dist/errors/MissingEditorProp.js +3 -4
  394. package/dist/errors/MissingEditorProp.js.map +1 -1
  395. package/dist/errors/MissingFieldInputOptions.d.ts +2 -3
  396. package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
  397. package/dist/errors/MissingFieldInputOptions.js +2 -3
  398. package/dist/errors/MissingFieldInputOptions.js.map +1 -1
  399. package/dist/errors/MissingFieldType.d.ts +2 -3
  400. package/dist/errors/MissingFieldType.d.ts.map +1 -1
  401. package/dist/errors/MissingFieldType.js +2 -3
  402. package/dist/errors/MissingFieldType.js.map +1 -1
  403. package/dist/errors/MissingFile.d.ts +2 -3
  404. package/dist/errors/MissingFile.d.ts.map +1 -1
  405. package/dist/errors/MissingFile.js +2 -3
  406. package/dist/errors/MissingFile.js.map +1 -1
  407. package/dist/errors/NotFound.d.ts +2 -3
  408. package/dist/errors/NotFound.d.ts.map +1 -1
  409. package/dist/errors/NotFound.js +2 -3
  410. package/dist/errors/NotFound.js.map +1 -1
  411. package/dist/errors/QueryError.d.ts +2 -3
  412. package/dist/errors/QueryError.d.ts.map +1 -1
  413. package/dist/errors/QueryError.js +2 -3
  414. package/dist/errors/QueryError.js.map +1 -1
  415. package/dist/errors/TimestampsRequired.d.ts +2 -3
  416. package/dist/errors/TimestampsRequired.d.ts.map +1 -1
  417. package/dist/errors/TimestampsRequired.js +2 -3
  418. package/dist/errors/TimestampsRequired.js.map +1 -1
  419. package/dist/errors/UnathorizedError.d.ts +2 -3
  420. package/dist/errors/UnathorizedError.d.ts.map +1 -1
  421. package/dist/errors/UnathorizedError.js +2 -3
  422. package/dist/errors/UnathorizedError.js.map +1 -1
  423. package/dist/errors/ValidationError.d.ts +2 -3
  424. package/dist/errors/ValidationError.d.ts.map +1 -1
  425. package/dist/errors/ValidationError.js +2 -3
  426. package/dist/errors/ValidationError.js.map +1 -1
  427. package/dist/errors/index.d.ts +20 -19
  428. package/dist/errors/index.d.ts.map +1 -1
  429. package/dist/errors/index.js +20 -19
  430. package/dist/errors/index.js.map +1 -1
  431. package/dist/exports/auth.d.ts +1 -0
  432. package/dist/exports/auth.d.ts.map +1 -1
  433. package/dist/exports/auth.js +1 -0
  434. package/dist/exports/auth.js.map +1 -1
  435. package/dist/exports/database.d.ts +3 -2
  436. package/dist/exports/database.d.ts.map +1 -1
  437. package/dist/exports/database.js +1 -1
  438. package/dist/exports/database.js.map +1 -1
  439. package/dist/exports/i18n/he.d.ts +2 -0
  440. package/dist/exports/i18n/he.d.ts.map +1 -0
  441. package/dist/exports/i18n/he.js +3 -0
  442. package/dist/exports/i18n/he.js.map +1 -0
  443. package/dist/exports/i18n.d.ts +2 -0
  444. package/dist/exports/i18n.d.ts.map +1 -0
  445. package/dist/exports/i18n.js +3 -0
  446. package/dist/exports/i18n.js.map +1 -0
  447. package/dist/exports/node.d.ts +5 -0
  448. package/dist/exports/node.d.ts.map +1 -1
  449. package/dist/exports/node.js +5 -1
  450. package/dist/exports/node.js.map +1 -1
  451. package/dist/exports/operations.d.ts +1 -0
  452. package/dist/exports/operations.d.ts.map +1 -1
  453. package/dist/exports/operations.js +1 -0
  454. package/dist/exports/operations.js.map +1 -1
  455. package/dist/exports/types.d.ts +2 -1
  456. package/dist/exports/types.d.ts.map +1 -1
  457. package/dist/exports/types.js.map +1 -1
  458. package/dist/exports/utilities.d.ts +9 -3
  459. package/dist/exports/utilities.d.ts.map +1 -1
  460. package/dist/exports/utilities.js +8 -3
  461. package/dist/exports/utilities.js.map +1 -1
  462. package/dist/fields/config/client.d.ts +235 -79
  463. package/dist/fields/config/client.d.ts.map +1 -1
  464. package/dist/fields/config/client.js +2 -1
  465. package/dist/fields/config/client.js.map +1 -1
  466. package/dist/fields/config/sanitize.d.ts +7 -2
  467. package/dist/fields/config/sanitize.d.ts.map +1 -1
  468. package/dist/fields/config/sanitize.js +67 -34
  469. package/dist/fields/config/sanitize.js.map +1 -1
  470. package/dist/fields/config/sanitize.spec.js +76 -85
  471. package/dist/fields/config/sanitize.spec.js.map +1 -1
  472. package/dist/fields/config/schema.d.ts.map +1 -1
  473. package/dist/fields/config/schema.js +33 -6
  474. package/dist/fields/config/schema.js.map +1 -1
  475. package/dist/fields/config/types.d.ts +108 -44
  476. package/dist/fields/config/types.d.ts.map +1 -1
  477. package/dist/fields/config/types.js.map +1 -1
  478. package/dist/fields/getDefaultValue.d.ts +2 -2
  479. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  480. package/dist/fields/getDefaultValue.js.map +1 -1
  481. package/dist/fields/hooks/afterChange/index.d.ts +2 -2
  482. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  483. package/dist/fields/hooks/afterChange/index.js.map +1 -1
  484. package/dist/fields/hooks/afterChange/promise.d.ts +2 -2
  485. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  486. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  487. package/dist/fields/hooks/afterChange/traverseFields.d.ts +2 -2
  488. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  489. package/dist/fields/hooks/afterChange/traverseFields.js.map +1 -1
  490. package/dist/fields/hooks/afterRead/index.d.ts +3 -2
  491. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  492. package/dist/fields/hooks/afterRead/index.js +2 -1
  493. package/dist/fields/hooks/afterRead/index.js.map +1 -1
  494. package/dist/fields/hooks/afterRead/promise.d.ts +7 -3
  495. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  496. package/dist/fields/hooks/afterRead/promise.js +20 -18
  497. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  498. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts +4 -3
  499. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  500. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +16 -10
  501. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
  502. package/dist/fields/hooks/afterRead/traverseFields.d.ts +7 -3
  503. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  504. package/dist/fields/hooks/afterRead/traverseFields.js +2 -1
  505. package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
  506. package/dist/fields/hooks/beforeChange/index.d.ts +2 -2
  507. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  508. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  509. package/dist/fields/hooks/beforeChange/promise.d.ts +2 -2
  510. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  511. package/dist/fields/hooks/beforeChange/promise.js +3 -1
  512. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  513. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +14 -2
  514. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  515. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  516. package/dist/fields/hooks/beforeValidate/index.d.ts +2 -2
  517. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  518. package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
  519. package/dist/fields/hooks/beforeValidate/promise.d.ts +8 -2
  520. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  521. package/dist/fields/hooks/beforeValidate/promise.js +2 -0
  522. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  523. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +8 -2
  524. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  525. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  526. package/dist/fields/validations.d.ts +6 -0
  527. package/dist/fields/validations.d.ts.map +1 -1
  528. package/dist/fields/validations.js +62 -7
  529. package/dist/fields/validations.js.map +1 -1
  530. package/dist/fields/validations.spec.js +1 -0
  531. package/dist/fields/validations.spec.js.map +1 -1
  532. package/dist/globals/config/client.d.ts +1 -1
  533. package/dist/globals/config/client.d.ts.map +1 -1
  534. package/dist/globals/config/client.js +2 -1
  535. package/dist/globals/config/client.js.map +1 -1
  536. package/dist/globals/config/sanitize.d.ts +2 -3
  537. package/dist/globals/config/sanitize.d.ts.map +1 -1
  538. package/dist/globals/config/sanitize.js +36 -35
  539. package/dist/globals/config/sanitize.js.map +1 -1
  540. package/dist/globals/config/schema.d.ts.map +1 -1
  541. package/dist/globals/config/schema.js +10 -1
  542. package/dist/globals/config/schema.js.map +1 -1
  543. package/dist/globals/config/types.d.ts +16 -9
  544. package/dist/globals/config/types.d.ts.map +1 -1
  545. package/dist/globals/config/types.js.map +1 -1
  546. package/dist/globals/operations/docAccess.d.ts +2 -2
  547. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  548. package/dist/globals/operations/docAccess.js.map +1 -1
  549. package/dist/globals/operations/findOne.d.ts +2 -3
  550. package/dist/globals/operations/findOne.d.ts.map +1 -1
  551. package/dist/globals/operations/findOne.js +1 -0
  552. package/dist/globals/operations/findOne.js.map +1 -1
  553. package/dist/globals/operations/findVersionByID.d.ts +2 -2
  554. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  555. package/dist/globals/operations/findVersionByID.js +1 -0
  556. package/dist/globals/operations/findVersionByID.js.map +1 -1
  557. package/dist/globals/operations/findVersions.d.ts +2 -2
  558. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  559. package/dist/globals/operations/findVersions.js +1 -0
  560. package/dist/globals/operations/findVersions.js.map +1 -1
  561. package/dist/globals/operations/local/findOne.d.ts +4 -4
  562. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  563. package/dist/globals/operations/local/findOne.js.map +1 -1
  564. package/dist/globals/operations/local/findVersionByID.d.ts +4 -4
  565. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  566. package/dist/globals/operations/local/findVersionByID.js.map +1 -1
  567. package/dist/globals/operations/local/findVersions.d.ts +4 -4
  568. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  569. package/dist/globals/operations/local/findVersions.js.map +1 -1
  570. package/dist/globals/operations/local/restoreVersion.d.ts +4 -4
  571. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  572. package/dist/globals/operations/local/restoreVersion.js.map +1 -1
  573. package/dist/globals/operations/local/update.d.ts +4 -4
  574. package/dist/globals/operations/local/update.d.ts.map +1 -1
  575. package/dist/globals/operations/local/update.js.map +1 -1
  576. package/dist/globals/operations/restoreVersion.d.ts +2 -2
  577. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  578. package/dist/globals/operations/restoreVersion.js +1 -0
  579. package/dist/globals/operations/restoreVersion.js.map +1 -1
  580. package/dist/globals/operations/update.d.ts +2 -2
  581. package/dist/globals/operations/update.d.ts.map +1 -1
  582. package/dist/globals/operations/update.js +2 -0
  583. package/dist/globals/operations/update.js.map +1 -1
  584. package/dist/index.d.ts +16 -10
  585. package/dist/index.d.ts.map +1 -1
  586. package/dist/index.js +26 -14
  587. package/dist/index.js.map +1 -1
  588. package/dist/preferences/deleteUserPreferences.d.ts +2 -2
  589. package/dist/preferences/deleteUserPreferences.d.ts.map +1 -1
  590. package/dist/preferences/deleteUserPreferences.js.map +1 -1
  591. package/dist/preferences/operations/delete.js +2 -2
  592. package/dist/preferences/operations/delete.js.map +1 -1
  593. package/dist/preferences/operations/update.js +1 -1
  594. package/dist/preferences/operations/update.js.map +1 -1
  595. package/dist/preferences/requestHandlers/delete.d.ts.map +1 -1
  596. package/dist/preferences/requestHandlers/delete.js +18 -5
  597. package/dist/preferences/requestHandlers/delete.js.map +1 -1
  598. package/dist/preferences/requestHandlers/findOne.d.ts.map +1 -1
  599. package/dist/preferences/requestHandlers/findOne.js +18 -5
  600. package/dist/preferences/requestHandlers/findOne.js.map +1 -1
  601. package/dist/preferences/requestHandlers/update.d.ts.map +1 -1
  602. package/dist/preferences/requestHandlers/update.js +19 -7
  603. package/dist/preferences/requestHandlers/update.js.map +1 -1
  604. package/dist/preferences/types.d.ts +3 -3
  605. package/dist/preferences/types.d.ts.map +1 -1
  606. package/dist/preferences/types.js.map +1 -1
  607. package/dist/translations/getLocalI18n.d.ts +1 -1
  608. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  609. package/dist/translations/getLocalI18n.js +1 -1
  610. package/dist/translations/getLocalI18n.js.map +1 -1
  611. package/dist/types/index.d.ts +21 -29
  612. package/dist/types/index.d.ts.map +1 -1
  613. package/dist/types/index.js.map +1 -1
  614. package/dist/uploads/canResizeImage.d.ts +1 -1
  615. package/dist/uploads/canResizeImage.d.ts.map +1 -1
  616. package/dist/uploads/canResizeImage.js +1 -1
  617. package/dist/uploads/canResizeImage.js.map +1 -1
  618. package/dist/uploads/cropImage.d.ts +1 -1
  619. package/dist/uploads/cropImage.d.ts.map +1 -1
  620. package/dist/uploads/cropImage.js +1 -1
  621. package/dist/uploads/cropImage.js.map +1 -1
  622. package/dist/uploads/deleteAssociatedFiles.d.ts +2 -2
  623. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  624. package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
  625. package/dist/uploads/docWithFilenameExists.d.ts +2 -2
  626. package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
  627. package/dist/uploads/docWithFilenameExists.js.map +1 -1
  628. package/dist/uploads/generateFileData.d.ts +5 -3
  629. package/dist/uploads/generateFileData.d.ts.map +1 -1
  630. package/dist/uploads/generateFileData.js +55 -16
  631. package/dist/uploads/generateFileData.js.map +1 -1
  632. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  633. package/dist/uploads/getBaseFields.js +23 -4
  634. package/dist/uploads/getBaseFields.js.map +1 -1
  635. package/dist/uploads/getExternalFile.d.ts +5 -4
  636. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  637. package/dist/uploads/getExternalFile.js +10 -6
  638. package/dist/uploads/getExternalFile.js.map +1 -1
  639. package/dist/uploads/getFileByPath.d.ts +2 -2
  640. package/dist/uploads/getFileByPath.d.ts.map +1 -1
  641. package/dist/uploads/getFileByPath.js.map +1 -1
  642. package/dist/uploads/getImageSize.d.ts +2 -2
  643. package/dist/uploads/getImageSize.d.ts.map +1 -1
  644. package/dist/uploads/getImageSize.js +19 -5
  645. package/dist/uploads/getImageSize.js.map +1 -1
  646. package/dist/uploads/getSafeFilename.d.ts +4 -4
  647. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  648. package/dist/uploads/getSafeFilename.js +1 -2
  649. package/dist/uploads/getSafeFilename.js.map +1 -1
  650. package/dist/uploads/imageResizer.d.ts +8 -10
  651. package/dist/uploads/imageResizer.d.ts.map +1 -1
  652. package/dist/uploads/imageResizer.js +42 -24
  653. package/dist/uploads/imageResizer.js.map +1 -1
  654. package/dist/uploads/isImage.d.ts +1 -1
  655. package/dist/uploads/isImage.d.ts.map +1 -1
  656. package/dist/uploads/isImage.js +1 -1
  657. package/dist/uploads/isImage.js.map +1 -1
  658. package/dist/uploads/tempFile.d.ts +7 -0
  659. package/dist/uploads/tempFile.d.ts.map +1 -0
  660. package/dist/uploads/tempFile.js +39 -0
  661. package/dist/uploads/tempFile.js.map +1 -0
  662. package/dist/uploads/types.d.ts +28 -5
  663. package/dist/uploads/types.d.ts.map +1 -1
  664. package/dist/uploads/types.js.map +1 -1
  665. package/dist/uploads/unlinkTempFiles.d.ts +2 -2
  666. package/dist/uploads/unlinkTempFiles.d.ts.map +1 -1
  667. package/dist/uploads/unlinkTempFiles.js.map +1 -1
  668. package/dist/uploads/uploadFiles.d.ts +2 -2
  669. package/dist/uploads/uploadFiles.d.ts.map +1 -1
  670. package/dist/uploads/uploadFiles.js.map +1 -1
  671. package/dist/utilities/checkDuplicateCollections.js +1 -1
  672. package/dist/utilities/checkDuplicateCollections.js.map +1 -1
  673. package/dist/utilities/commitTransaction.d.ts +2 -2
  674. package/dist/utilities/commitTransaction.d.ts.map +1 -1
  675. package/dist/utilities/commitTransaction.js.map +1 -1
  676. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  677. package/dist/utilities/configToJSONSchema.js +27 -1
  678. package/dist/utilities/configToJSONSchema.js.map +1 -1
  679. package/dist/utilities/configToJSONSchema.spec.js +98 -2
  680. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  681. package/dist/utilities/createLocalReq.d.ts +3 -3
  682. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  683. package/dist/utilities/createLocalReq.js +8 -5
  684. package/dist/utilities/createLocalReq.js.map +1 -1
  685. package/dist/utilities/getEntityPolicies.d.ts +2 -2
  686. package/dist/utilities/getEntityPolicies.d.ts.map +1 -1
  687. package/dist/utilities/getEntityPolicies.js.map +1 -1
  688. package/dist/utilities/importWithoutClientFiles.d.ts.map +1 -1
  689. package/dist/utilities/importWithoutClientFiles.js +10 -4
  690. package/dist/utilities/importWithoutClientFiles.js.map +1 -1
  691. package/dist/utilities/initTransaction.d.ts +2 -2
  692. package/dist/utilities/initTransaction.d.ts.map +1 -1
  693. package/dist/utilities/initTransaction.js.map +1 -1
  694. package/dist/utilities/isEntityHidden.d.ts +2 -2
  695. package/dist/utilities/isEntityHidden.d.ts.map +1 -1
  696. package/dist/utilities/isEntityHidden.js.map +1 -1
  697. package/dist/utilities/isReactComponent.d.ts +2 -3
  698. package/dist/utilities/isReactComponent.d.ts.map +1 -1
  699. package/dist/utilities/isReactComponent.js +27 -10
  700. package/dist/utilities/isReactComponent.js.map +1 -1
  701. package/dist/utilities/killTransaction.d.ts +2 -2
  702. package/dist/utilities/killTransaction.d.ts.map +1 -1
  703. package/dist/utilities/killTransaction.js.map +1 -1
  704. package/dist/utilities/parseCookies.js +1 -1
  705. package/dist/utilities/parseCookies.js.map +1 -1
  706. package/dist/utilities/telemetry/events/adminInit.d.ts +2 -2
  707. package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
  708. package/dist/utilities/telemetry/events/adminInit.js.map +1 -1
  709. package/dist/utilities/telemetry/index.d.ts +9 -0
  710. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  711. package/dist/utilities/telemetry/index.js +63 -15
  712. package/dist/utilities/telemetry/index.js.map +1 -1
  713. package/dist/versions/deleteCollectionVersions.d.ts +2 -2
  714. package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
  715. package/dist/versions/deleteCollectionVersions.js.map +1 -1
  716. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts +2 -2
  717. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  718. package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
  719. package/dist/versions/enforceMaxVersions.d.ts +2 -2
  720. package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
  721. package/dist/versions/enforceMaxVersions.js.map +1 -1
  722. package/dist/versions/getLatestCollectionVersion.d.ts +2 -2
  723. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  724. package/dist/versions/getLatestCollectionVersion.js.map +1 -1
  725. package/dist/versions/getLatestGlobalVersion.d.ts +2 -2
  726. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  727. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  728. package/dist/versions/saveVersion.d.ts +2 -2
  729. package/dist/versions/saveVersion.d.ts.map +1 -1
  730. package/dist/versions/saveVersion.js +2 -1
  731. package/dist/versions/saveVersion.js.map +1 -1
  732. package/graphql.d.ts +3 -0
  733. package/graphql.js +27 -0
  734. package/package.json +73 -102
  735. package/utilities.d.ts +3 -1
  736. package/utilities.js +3 -1
  737. package/dist/email/build.d.ts +0 -5
  738. package/dist/email/build.d.ts.map +0 -1
  739. package/dist/email/build.js +0 -63
  740. package/dist/email/build.js.map +0 -1
  741. package/dist/email/mockHandler.d.ts +0 -5
  742. package/dist/email/mockHandler.d.ts.map +0 -1
  743. package/dist/email/mockHandler.js +0 -24
  744. package/dist/email/mockHandler.js.map +0 -1
  745. package/node.d.ts +0 -3
  746. package/node.js +0 -4
  747. package/src/index.ts +0 -498
  748. package/uploads.d.ts +0 -2
  749. package/uploads.js +0 -3
@@ -43,7 +43,8 @@ import fileExists from './fileExists.js';
43
43
  * @param mimeType - the mime type of the image
44
44
  * @param sizesToSave - the sizes to save
45
45
  * @returns the result object
46
- */ const createResult = (name, filename = null, width = null, height = null, filesize = null, mimeType = null, sizesToSave = [])=>({
46
+ */ const createResult = ({ name, filename = null, filesize = null, height = null, mimeType = null, sizesToSave = [], width = null })=>{
47
+ return {
47
48
  sizeData: {
48
49
  [name]: {
49
50
  filename,
@@ -54,7 +55,8 @@ import fileExists from './fileExists.js';
54
55
  }
55
56
  },
56
57
  sizesToSave
57
- });
58
+ };
59
+ };
58
60
  /**
59
61
  * Check if the image needs to be resized according to the requested dimensions
60
62
  * and the original image size. If the resize options withoutEnlargement or withoutReduction are provided,
@@ -142,13 +144,23 @@ import fileExists from './fileExists.js';
142
144
  *
143
145
  * @param resizeConfig - the resize config
144
146
  * @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 {
147
+ */ export async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, sharp, staticPath, uploadEdits }) {
148
+ const { focalPoint: focalPointEnabled = true, imageSizes } = config.upload;
149
+ // Focal point adjustments
150
+ const incomingFocalPoint = uploadEdits.focalPoint ? {
151
+ x: isNumber(uploadEdits.focalPoint.x) ? Math.round(uploadEdits.focalPoint.x) : 50,
152
+ y: isNumber(uploadEdits.focalPoint.y) ? Math.round(uploadEdits.focalPoint.y) : 50
153
+ } : undefined;
154
+ const defaultResult = {
155
+ ...focalPointEnabled && incomingFocalPoint && {
156
+ focalPoint: incomingFocalPoint
157
+ },
149
158
  sizeData: {},
150
159
  sizesToSave: []
151
160
  };
161
+ if (!imageSizes || !sharp) {
162
+ return defaultResult;
163
+ }
152
164
  const sharpBase = sharp(file.tempFilePath || file.data).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
153
165
  ;
154
166
  const results = await Promise.all(imageSizes.map(async (imageResizeConfig)=>{
@@ -157,11 +169,13 @@ import fileExists from './fileExists.js';
157
169
  // skipped COMPLETELY and thus will not be included in the resulting images.
158
170
  // All further format/trim options will thus be skipped as well.
159
171
  if (preventResize(imageResizeConfig, dimensions)) {
160
- return createResult(imageResizeConfig.name);
172
+ return createResult({
173
+ name: imageResizeConfig.name
174
+ });
161
175
  }
162
176
  const imageToResize = sharpBase.clone();
163
177
  let resized = imageToResize;
164
- if (req.query?.uploadEdits?.focalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {
178
+ if (incomingFocalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {
165
179
  const { height: resizeHeight, width: resizeWidth } = imageResizeConfig;
166
180
  const resizeAspectRatio = resizeWidth / resizeHeight;
167
181
  const originalAspectRatio = dimensions.width / dimensions.height;
@@ -174,18 +188,13 @@ import fileExists from './fileExists.js';
174
188
  const { info: scaledImageInfo } = await scaledImage.toBuffer({
175
189
  resolveWithObject: true
176
190
  });
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
191
  const safeResizeWidth = resizeWidth ?? scaledImageInfo.width;
183
192
  const maxOffsetX = scaledImageInfo.width - safeResizeWidth;
184
- const leftFocalEdge = Math.round(scaledImageInfo.width * (focalPoint.x / 100) - safeResizeWidth / 2);
193
+ const leftFocalEdge = Math.round(scaledImageInfo.width * (incomingFocalPoint.x / 100) - safeResizeWidth / 2);
185
194
  const safeOffsetX = Math.min(Math.max(0, leftFocalEdge), maxOffsetX);
186
195
  const safeResizeHeight = resizeHeight ?? scaledImageInfo.height;
187
196
  const maxOffsetY = scaledImageInfo.height - safeResizeHeight;
188
- const topFocalEdge = Math.round(scaledImageInfo.height * (focalPoint.y / 100) - safeResizeHeight / 2);
197
+ const topFocalEdge = Math.round(scaledImageInfo.height * (incomingFocalPoint.y / 100) - safeResizeHeight / 2);
189
198
  const safeOffsetY = Math.min(Math.max(0, topFocalEdge), maxOffsetY);
190
199
  // extract the focal area from the scaled image
191
200
  resized = scaledImage.extract({
@@ -207,7 +216,9 @@ import fileExists from './fileExists.js';
207
216
  resolveWithObject: true
208
217
  });
209
218
  const sanitizedImage = getSanitizedImageData(savedFilename);
210
- req.payloadUploadSizes[imageResizeConfig.name] = bufferData;
219
+ if (req.payloadUploadSizes) {
220
+ req.payloadUploadSizes[imageResizeConfig.name] = bufferData;
221
+ }
211
222
  const mimeInfo = await fromBuffer(bufferData);
212
223
  const imageNameWithDimensions = createImageName(sanitizedImage.name, bufferInfo, mimeInfo?.ext || sanitizedImage.ext);
213
224
  const imagePath = `${staticPath}/${imageNameWithDimensions}`;
@@ -219,20 +230,27 @@ import fileExists from './fileExists.js';
219
230
  }
220
231
  }
221
232
  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
- ]);
233
+ return createResult({
234
+ name: imageResizeConfig.name,
235
+ filename: imageNameWithDimensions,
236
+ filesize: size,
237
+ height,
238
+ mimeType: mimeInfo?.mime || mimeType,
239
+ sizesToSave: [
240
+ {
241
+ buffer: bufferData,
242
+ path: imagePath
243
+ }
244
+ ],
245
+ width
246
+ });
228
247
  }));
229
248
  return results.reduce((acc, result)=>{
230
249
  Object.assign(acc.sizeData, result.sizeData);
231
250
  acc.sizesToSave.push(...result.sizesToSave);
232
251
  return acc;
233
252
  }, {
234
- sizeData: {},
235
- sizesToSave: []
253
+ ...defaultResult
236
254
  });
237
255
  }
238
256
 
@@ -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":"AAEA,OAAOA,cAAc,YAAW;AAChC,MAAM,EAAEC,UAAU,EAAE,GAAGD;AAEvB,OAAOE,QAAQ,KAAI;AACnB,OAAOC,cAAc,oBAAmB;AAOxC,SAASC,QAAQ,QAAQ,2BAA0B;AACnD,OAAOC,gBAAgB,kBAAiB;AA4BxC;;;;;CAKC,GACD,MAAMC,wBAAwB,CAACC;IAC7B,MAAMC,YAAYD,YAAYE,KAAK,CAAC,KAAKC,GAAG;IAC5C,MAAMC,OAAOR,SAASI,YAAYK,SAAS,CAAC,GAAGL,YAAYM,WAAW,CAAC,SAASN;IAChF,OAAO;QAAEI;QAAMG,KAAKN;IAAU;AAChC;AAEA;;;;;;;;;;;;CAYC,GACD,MAAMO,kBAAkB,CACtBC,iBACA,EAAEC,MAAM,EAAEC,KAAK,EAAc,EAC7BV,YACG,CAAC,EAAEQ,gBAAgB,CAAC,EAAEE,MAAM,CAAC,EAAED,OAAO,CAAC,EAAET,UAAU,CAAC;AAEzD;;;;;;;;;;;;;CAaC,GACD,MAAMW,eAAe,CACnBR,MACAS,WAAiC,IAAI,EACrCF,QAA2B,IAAI,EAC/BD,SAA6B,IAAI,EACjCI,WAAiC,IAAI,EACrCC,WAAiC,IAAI,EACrCC,cAA4B,EAAE,GACR,CAAA;QACtBC,UAAU;YACR,CAACb,KAAK,EAAE;gBACNS;gBACAC;gBACAJ;gBACAK;gBACAJ;YACF;QACF;QACAK;IACF,CAAA;AAEA;;;;;;;;;CASC,GACD,MAAME,gBAAgB,CACpB,EAAER,QAAQS,aAAa,EAAER,OAAOS,YAAY,EAAEC,kBAAkB,EAAEC,gBAAgB,EAAa,EAC/FC;IAEA,gCAAgC;IAChC,IAAID,qBAAqBE,WAAW;QAClC,OAAO,MAAM,eAAe;;IAC9B;IAEA,oCAAoC;IACpC,IAAIH,uBAAuBG,WAAW;QACpC,OAAO,MAAM,eAAe;;IAC9B;IAEA,MAAMC,4BAA4B,CAACN,iBAAiB,CAACC;IACrD,IAAIK,2BAA2B;QAC7B,6EAA6E;QAC7E,qDAAqD;QACrD,OAAO,MAAM,eAAe;;IAC9B;IAEA,MAAMC,uBAAuBN,eAAeG,SAASZ,KAAK;IAC1D,MAAMgB,wBAAwBR,gBAAgBI,SAASb,MAAM;IAC7D,IAAIgB,wBAAwBC,uBAAuB;QACjD,gHAAgH;QAChH,4GAA4G;QAC5G,iDAAiD;QACjD,OAAO,KAAK,2BAA2B;;IACzC;IAEA,OAAO,MAAM,eAAe;;AAC9B;AAEA;;;;;;CAMC,GACD,MAAMC,0BAA0B,CAC9B,EAAEC,GAAG,EAAEnB,MAAM,EAAEC,KAAK,EAAEU,kBAAkB,EAAEC,gBAAgB,EAAa,EACvEC;IAEA,IAAIM,QAAQ,aAAaA,QAAQ,UAAU,OAAO;IAClD,IAAI,CAAChC,SAASa,WAAW,CAACb,SAASc,QAAQ,OAAO;IAElD,MAAMmB,oBAAoBnB,QAAQD;IAClC,MAAMqB,sBAAsBR,SAASZ,KAAK,GAAGY,SAASb,MAAM;IAC5D,IAAIqB,wBAAwBD,mBAAmB,OAAO;IAEtD,MAAME,kBAAkBX,sBAAuBE,CAAAA,SAASb,MAAM,GAAGA,UAAUa,SAASZ,KAAK,GAAGA,KAAI;IAChG,MAAMsB,gBAAgBX,oBAAqBC,CAAAA,SAASb,MAAM,GAAGA,UAAUa,SAASZ,KAAK,GAAGA,KAAI;IAC5F,IAAIqB,mBAAmBC,eAAe,OAAO;IAE7C,OAAO;AACT;AAEA;;;;;;;CAOC,GACD,MAAMC,uBAAuB,CAACC;IAC5B,IAAIA,aAAab,gBAAgB,EAAE;QACjC,OAAO;YACL,GAAGa,YAAY;YACf,sFAAsF;YACtFN,KAAKM,cAAcN,OAAO;YAC1BO,UAAUD,cAAcC,YAAY;QACtC;IACF;IACA,OAAOD;AACT;AAEA;;;;;;;;;;;;;CAaC,GACD,eAAe,eAAeE,6BAA6B,EACzDC,MAAM,EACNC,UAAU,EACVC,IAAI,EACJzB,QAAQ,EACR0B,GAAG,EACHC,aAAa,EACbC,KAAK,EACLC,UAAU,EACC;IACX,MAAM,EAAEC,UAAU,EAAE,GAAGP,OAAOQ,MAAM;IACpC,uDAAuD;IACvD,IAAI,CAACD,YAAY,OAAO;QAAE5B,UAAU,CAAC;QAAGD,aAAa,EAAE;IAAC;IAExD,MAAM+B,YAAYJ,MAAMH,KAAKQ,YAAY,IAAIR,KAAKS,IAAI,EAAEC,MAAM,GAAG,mGAAmG;;IAEpK,MAAMC,UAA8B,MAAMC,QAAQC,GAAG,CACnDR,WAAWS,GAAG,CAAC,OAAOC;QACpBA,oBAAoBrB,qBAAqBqB;QAEzC,2EAA2E;QAC3E,4EAA4E;QAC5E,gEAAgE;QAChE,IAAIrC,cAAcqC,mBAAmBhB,aAAa;YAChD,OAAO3B,aAAa2C,kBAAkBnD,IAAI;QAC5C;QAEA,MAAMoD,gBAAgBT,UAAUU,KAAK;QACrC,IAAIC,UAAUF;QAEd,IACEf,IAAIkB,KAAK,EAAEC,aAAaC,cACxBjC,wBAAwB2B,mBAAmBhB,aAC3C;YACA,MAAM,EAAE7B,QAAQoD,YAAY,EAAEnD,OAAOoD,WAAW,EAAE,GAAGR;YACrD,MAAMS,oBAAoBD,cAAcD;YACxC,MAAM/B,sBAAsBQ,WAAW5B,KAAK,GAAG4B,WAAW7B,MAAM;YAChE,MAAMuD,mBAAmBD,oBAAoBjC;YAE7C,0DAA0D;YAC1D,MAAMmC,cAAcV,cAAcW,MAAM,CAAC;gBACvCzD,QAAQuD,mBAAmBH,eAAe;gBAC1CnD,OAAOsD,mBAAmB,OAAOF;YACnC;YACA,MAAM,EAAEK,MAAMC,eAAe,EAAE,GAAG,MAAMH,YAAYI,QAAQ,CAAC;gBAAEC,mBAAmB;YAAK;YAEvF,0BAA0B;YAC1B,MAAMV,aAAa;gBACjBW,GAAG3E,SAAS4C,IAAIkB,KAAK,CAACC,WAAW,CAACC,UAAU,EAAEW,KAC1C/B,IAAIkB,KAAK,CAACC,WAAW,CAACC,UAAU,CAACW,CAAC,GAClC;gBACJC,GAAG5E,SAAS4C,IAAIkB,KAAK,CAACC,WAAW,CAACC,UAAU,EAAEY,KAC1ChC,IAAIkB,KAAK,CAACC,WAAW,CAACC,UAAU,CAACY,CAAC,GAClC;YACN;YAEA,MAAMC,kBAAkBX,eAAeM,gBAAgB1D,KAAK;YAC5D,MAAMgE,aAAaN,gBAAgB1D,KAAK,GAAG+D;YAC3C,MAAME,gBAAgBC,KAAKC,KAAK,CAC9BT,gBAAgB1D,KAAK,GAAIkD,CAAAA,WAAWW,CAAC,GAAG,GAAE,IAAKE,kBAAkB;YAEnE,MAAMK,cAAcF,KAAKG,GAAG,CAACH,KAAKI,GAAG,CAAC,GAAGL,gBAAgBD;YAEzD,MAAMO,mBAAmBpB,gBAAgBO,gBAAgB3D,MAAM;YAC/D,MAAMyE,aAAad,gBAAgB3D,MAAM,GAAGwE;YAC5C,MAAME,eAAeP,KAAKC,KAAK,CAC7BT,gBAAgB3D,MAAM,GAAImD,CAAAA,WAAWY,CAAC,GAAG,GAAE,IAAKS,mBAAmB;YAErE,MAAMG,cAAcR,KAAKG,GAAG,CAACH,KAAKI,GAAG,CAAC,GAAGG,eAAeD;YAExD,+CAA+C;YAC/CzB,UAAUQ,YAAYoB,OAAO,CAAC;gBAC5B5E,QAAQwE;gBACRK,MAAMR;gBACNS,KAAKH;gBACL1E,OAAO+D;YACT;QACF,OAAO;YACLhB,UAAUF,cAAcW,MAAM,CAACZ;QACjC;QAEA,IAAIA,kBAAkBkC,aAAa,EAAE;YACnC/B,UAAUA,QAAQgC,QAAQ,CACxBnC,kBAAkBkC,aAAa,CAACE,MAAM,EACtCpC,kBAAkBkC,aAAa,CAACG,OAAO;QAE3C;QAEA,IAAIrC,kBAAkBsC,WAAW,EAAE;YACjCnC,UAAUA,QAAQoC,IAAI,CAACvC,kBAAkBsC,WAAW;QACtD;QAEA,MAAM,EAAE5C,MAAM8C,UAAU,EAAE3B,MAAM4B,UAAU,EAAE,GAAG,MAAMtC,QAAQY,QAAQ,CAAC;YACpEC,mBAAmB;QACrB;QAEA,MAAM0B,iBAAiBlG,sBAAsB2C;QAE7CD,IAAIyD,kBAAkB,CAAC3C,kBAAkBnD,IAAI,CAAC,GAAG2F;QAEjD,MAAMI,WAAW,MAAMzG,WAAWqG;QAElC,MAAMK,0BAA0B5F,gBAC9ByF,eAAe7F,IAAI,EACnB4F,YACAG,UAAU5F,OAAO0F,eAAe1F,GAAG;QAGrC,MAAM8F,YAAY,CAAC,EAAEzD,WAAW,CAAC,EAAEwD,wBAAwB,CAAC;QAE5D,IAAI,MAAMtG,WAAWuG,YAAY;YAC/B,IAAI;gBACF1G,GAAG2G,UAAU,CAACD;YAChB,EAAE,OAAM;YACN,uBAAuB;YACzB;QACF;QAEA,MAAM,EAAE3F,MAAM,EAAE6F,IAAI,EAAE5F,KAAK,EAAE,GAAGqF;QAChC,OAAOpF,aACL2C,kBAAkBnD,IAAI,EACtBgG,yBACAzF,OACAD,QACA6F,MACAJ,UAAUK,QAAQzF,UAClB;YAAC;gBAAE0F,QAAQV;gBAAYW,MAAML;YAAU;SAAE;IAE7C;IAGF,OAAOlD,QAAQwD,MAAM,CACnB,CAACC,KAAKC;QACJC,OAAOC,MAAM,CAACH,IAAI3F,QAAQ,EAAE4F,OAAO5F,QAAQ;QAC3C2F,IAAI5F,WAAW,CAACgG,IAAI,IAAIH,OAAO7F,WAAW;QAC1C,OAAO4F;IACT,GACA;QAAE3F,UAAU,CAAC;QAAGD,aAAa,EAAE;IAAC;AAEpC"}
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 { PayloadRequestWithData } 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: PayloadRequestWithData['file']\n mimeType: string\n req: PayloadRequestWithData\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 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 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 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({ name: imageResizeConfig.name })\n }\n\n const imageToResize = sharpBase.clone()\n let resized = imageToResize\n\n if (incomingFocalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {\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 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 safeResizeHeight = resizeHeight ?? scaledImageInfo.height\n const maxOffsetY = scaledImageInfo.height - safeResizeHeight\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 = 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 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 name: imageResizeConfig.name,\n filename: imageNameWithDimensions,\n filesize: size,\n 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":["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","uploadEdits","focalPoint","focalPointEnabled","imageSizes","upload","incomingFocalPoint","x","Math","round","y","defaultResult","sharpBase","tempFilePath","data","rotate","results","Promise","all","map","imageResizeConfig","imageToResize","clone","resized","resizeHeight","resizeWidth","resizeAspectRatio","prioritizeHeight","scaledImage","resize","info","scaledImageInfo","toBuffer","resolveWithObject","safeResizeWidth","maxOffsetX","leftFocalEdge","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,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"],"rangeMappings":";;;;;;;;;","mappings":"AAAA,OAAO,SAASA,QAAQC,QAAgB;IACtC,OACE;QAAC;QAAc;QAAa;QAAa;QAAiB;QAAc;KAAa,CAACC,OAAO,CAC3FD,YACE,CAAC;AAET"}
@@ -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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","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"}
@@ -1,8 +1,7 @@
1
1
  /// <reference types="node" resolution-mode="require"/>
2
- import type express from 'express';
3
- import type serveStatic from 'serve-static';
4
2
  import type { ResizeOptions, Sharp } from 'sharp';
5
- import type { PayloadRequest } from '../types/index.js';
3
+ import type { TypeWithID } from '../collections/config/types.js';
4
+ import type { PayloadRequestWithData } from '../types/index.js';
6
5
  export type FileSize = {
7
6
  filename: null | string;
8
7
  filesize: null | number;
@@ -16,6 +15,8 @@ export type FileSizes = {
16
15
  export type FileData = {
17
16
  filename: string;
18
17
  filesize: number;
18
+ focalX?: number;
19
+ focalY?: number;
19
20
  height: number;
20
21
  mimeType: string;
21
22
  sizes: FileSizes;
@@ -63,6 +64,10 @@ export type GetAdminThumbnail = (args: {
63
64
  doc: Record<string, unknown>;
64
65
  }) => false | null | string;
65
66
  export type UploadConfig = {
67
+ /**
68
+ * The adapter to use for uploads.
69
+ */
70
+ adapter?: string;
66
71
  /**
67
72
  * Represents an admin thumbnail, which can be either a React component or a string.
68
73
  * - If a string, it should be one of the image size names.
@@ -71,11 +76,18 @@ export type UploadConfig = {
71
76
  adminThumbnail?: GetAdminThumbnail | string;
72
77
  crop?: boolean;
73
78
  disableLocalStorage?: boolean;
79
+ /**
80
+ * Accepts existing headers and can filter/modify them.
81
+ *
82
+ * Useful for adding custom headers to fetch from external providers.
83
+ */
84
+ externalFileHeaderFilter?: (headers: Record<string, string>) => Record<string, string>;
74
85
  filesRequiredOnCreate?: boolean;
75
86
  focalPoint?: boolean;
76
87
  /** Options for original upload file only. For sizes, set each formatOptions individually. */
77
88
  formatOptions?: ImageUploadFormatOptions;
78
- handlers?: ((req: PayloadRequest, args: {
89
+ handlers?: ((req: PayloadRequestWithData, args: {
90
+ doc: TypeWithID;
79
91
  params: {
80
92
  collection: string;
81
93
  filename: string;
@@ -85,7 +97,6 @@ export type UploadConfig = {
85
97
  mimeTypes?: string[];
86
98
  resizeOptions?: ResizeOptions;
87
99
  staticDir?: string;
88
- staticOptions?: serveStatic.ServeStaticOptions<express.Response<any, Record<string, any>>>;
89
100
  trimOptions?: ImageUploadTrimOptions;
90
101
  };
91
102
  export type SanitizedUploadConfig = UploadConfig & {
@@ -101,4 +112,16 @@ export type FileToSave = {
101
112
  buffer: Buffer;
102
113
  path: string;
103
114
  };
115
+ export type UploadEdits = {
116
+ crop?: {
117
+ height?: number;
118
+ width?: number;
119
+ x?: number;
120
+ y?: number;
121
+ };
122
+ focalPoint?: {
123
+ x?: number;
124
+ y?: number;
125
+ };
126
+ };
104
127
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/uploads/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/uploads/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/types.ts"],"sourcesContent":["import type express from 'express'\nimport type serveStatic from 'serve-static'\nimport type { ResizeOptions, Sharp } from 'sharp'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nexport type FileSize = {\n filename: null | string\n filesize: null | number\n height: null | number\n mimeType: null | string\n width: null | number\n}\n\nexport type FileSizes = {\n [size: string]: FileSize\n}\n\nexport type FileData = {\n filename: string\n filesize: number\n height: number\n mimeType: string\n sizes: FileSizes\n tempFilePath?: string\n url?: string\n width: number\n}\n\nexport type ProbedImageSize = {\n height: number\n width: number\n}\n\n/**\n * Params sent to the sharp toFormat() function\n * @link https://sharp.pixelplumbing.com/api-output#toformat\n */\nexport type ImageUploadFormatOptions = {\n format: Parameters<Sharp['toFormat']>[0]\n options?: Parameters<Sharp['toFormat']>[1]\n}\n\n/**\n * Params sent to the sharp trim() function\n * @link https://sharp.pixelplumbing.com/api-resize#trim\n */\nexport type ImageUploadTrimOptions = Parameters<Sharp['trim']>[0]\n\nexport type ImageSize = Omit<ResizeOptions, 'withoutEnlargement'> & {\n /**\n * @deprecated prefer position\n */\n crop?: string // comes from sharp package\n formatOptions?: ImageUploadFormatOptions\n name: string\n trimOptions?: ImageUploadTrimOptions\n /**\n * When an uploaded image is smaller than the defined image size, we have 3 options:\n *\n * `undefined | false | true`\n *\n * 1. `undefined` [default]: uploading images with smaller width AND height than the image size will return null\n * 2. `false`: always enlarge images to the image size\n * 3. `true`: if the image is smaller than the image size, return the original image\n */\n withoutEnlargement?: ResizeOptions['withoutEnlargement']\n}\n\nexport type GetAdminThumbnail = (args: { doc: Record<string, unknown> }) => false | null | string\n\nexport type UploadConfig = {\n /**\n * Represents an admin thumbnail, which can be either a React component or a string.\n * - If a string, it should be one of the image size names.\n * - If a React component, register a function that generates the thumbnail URL using the `useAdminThumbnail` hook.\n **/\n adminThumbnail?: GetAdminThumbnail | string\n crop?: boolean\n disableLocalStorage?: boolean\n filesRequiredOnCreate?: boolean\n focalPoint?: boolean\n /** Options for original upload file only. For sizes, set each formatOptions individually. */\n formatOptions?: ImageUploadFormatOptions\n handlers?: ((\n req: PayloadRequest,\n args: { params: { collection: string; filename: string } },\n ) => Promise<Response> | Response)[]\n imageSizes?: ImageSize[]\n mimeTypes?: string[]\n resizeOptions?: ResizeOptions\n staticDir?: string\n staticOptions?: serveStatic.ServeStaticOptions<express.Response<any, Record<string, any>>>\n trimOptions?: ImageUploadTrimOptions\n}\n\nexport type SanitizedUploadConfig = UploadConfig & {\n staticDir: UploadConfig['staticDir']\n}\n\nexport type File = {\n data: Buffer\n mimetype: string\n name: string\n size: number\n}\n\nexport type FileToSave = {\n buffer: Buffer\n path: string\n}\n"],"names":[],"rangeMappings":"","mappings":"AA2GA,WAGC"}
1
+ {"version":3,"sources":["../../src/uploads/types.ts"],"sourcesContent":["import type { ResizeOptions, Sharp } from 'sharp'\n\nimport type { TypeWithID } from '../collections/config/types.js'\nimport type { PayloadRequestWithData } from '../types/index.js'\n\nexport type FileSize = {\n filename: null | string\n filesize: null | number\n height: null | number\n mimeType: null | string\n width: null | number\n}\n\nexport type FileSizes = {\n [size: string]: FileSize\n}\n\nexport type FileData = {\n filename: string\n filesize: number\n focalX?: number\n focalY?: number\n height: number\n mimeType: string\n sizes: FileSizes\n tempFilePath?: string\n url?: string\n width: number\n}\n\nexport type ProbedImageSize = {\n height: number\n width: number\n}\n\n/**\n * Params sent to the sharp toFormat() function\n * @link https://sharp.pixelplumbing.com/api-output#toformat\n */\nexport type ImageUploadFormatOptions = {\n format: Parameters<Sharp['toFormat']>[0]\n options?: Parameters<Sharp['toFormat']>[1]\n}\n\n/**\n * Params sent to the sharp trim() function\n * @link https://sharp.pixelplumbing.com/api-resize#trim\n */\nexport type ImageUploadTrimOptions = Parameters<Sharp['trim']>[0]\n\nexport type ImageSize = Omit<ResizeOptions, 'withoutEnlargement'> & {\n /**\n * @deprecated prefer position\n */\n crop?: string // comes from sharp package\n formatOptions?: ImageUploadFormatOptions\n name: string\n trimOptions?: ImageUploadTrimOptions\n /**\n * When an uploaded image is smaller than the defined image size, we have 3 options:\n *\n * `undefined | false | true`\n *\n * 1. `undefined` [default]: uploading images with smaller width AND height than the image size will return null\n * 2. `false`: always enlarge images to the image size\n * 3. `true`: if the image is smaller than the image size, return the original image\n */\n withoutEnlargement?: ResizeOptions['withoutEnlargement']\n}\n\nexport type GetAdminThumbnail = (args: { doc: Record<string, unknown> }) => false | null | string\n\nexport type UploadConfig = {\n /**\n * The adapter to use for uploads.\n */\n adapter?: string\n /**\n * Represents an admin thumbnail, which can be either a React component or a string.\n * - If a string, it should be one of the image size names.\n * - If a React component, register a function that generates the thumbnail URL using the `useAdminThumbnail` hook.\n **/\n adminThumbnail?: GetAdminThumbnail | string\n crop?: boolean\n disableLocalStorage?: boolean\n /**\n * Accepts existing headers and can filter/modify them.\n *\n * Useful for adding custom headers to fetch from external providers.\n */\n externalFileHeaderFilter?: (headers: Record<string, string>) => Record<string, string>\n filesRequiredOnCreate?: boolean\n focalPoint?: boolean\n /** Options for original upload file only. For sizes, set each formatOptions individually. */\n formatOptions?: ImageUploadFormatOptions\n handlers?: ((\n req: PayloadRequestWithData,\n args: { doc: TypeWithID; params: { collection: string; filename: string } },\n ) => Promise<Response> | Response)[]\n imageSizes?: ImageSize[]\n mimeTypes?: string[]\n resizeOptions?: ResizeOptions\n staticDir?: string\n trimOptions?: ImageUploadTrimOptions\n}\n\nexport type SanitizedUploadConfig = UploadConfig & {\n staticDir: UploadConfig['staticDir']\n}\n\nexport type File = {\n data: Buffer\n mimetype: string\n name: string\n size: number\n}\n\nexport type FileToSave = {\n buffer: Buffer\n path: string\n}\n\nexport type UploadEdits = {\n crop?: {\n height?: number\n width?: number\n x?: number\n y?: number\n }\n focalPoint?: {\n x?: number\n y?: number\n }\n}\n"],"names":[],"rangeMappings":"","mappings":"AA0HA,WAWC"}
@@ -1,10 +1,10 @@
1
1
  import type { SanitizedCollectionConfig } from '../collections/config/types.js';
2
2
  import type { SanitizedConfig } from '../config/types.js';
3
- import type { PayloadRequest } from '../types/index.js';
3
+ import type { PayloadRequestWithData } from '../types/index.js';
4
4
  type Args = {
5
5
  collectionConfig: SanitizedCollectionConfig;
6
6
  config: SanitizedConfig;
7
- req: PayloadRequest;
7
+ req: PayloadRequestWithData;
8
8
  };
9
9
  /**
10
10
  * Cleanup temp files after operation lifecycle
@@ -1 +1 @@
1
- {"version":3,"file":"unlinkTempFiles.d.ts","sourceRoot":"","sources":["../../src/uploads/unlinkTempFiles.ts"],"names":[],"mappings":"AAGA,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;AAMvD,KAAK,IAAI,GAAG;IACV,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;CACpB,CAAA;AACD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAezD,CAAA"}
1
+ {"version":3,"file":"unlinkTempFiles.d.ts","sourceRoot":"","sources":["../../src/uploads/unlinkTempFiles.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAM/D,KAAK,IAAI,GAAG;IACV,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAA;IACvB,GAAG,EAAE,sBAAsB,CAAA;CAC5B,CAAA;AACD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAezD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/unlinkTempFiles.ts"],"sourcesContent":["import fs from 'fs'\nimport { promisify } from 'util'\n\nimport type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\n\nimport { mapAsync } from '../utilities/mapAsync.js'\n\nconst unlinkFile = promisify(fs.unlink)\n\ntype Args = {\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n req: PayloadRequest\n}\n/**\n * Cleanup temp files after operation lifecycle\n */\nexport const unlinkTempFiles: (args: Args) => Promise<void> = async ({\n collectionConfig,\n config,\n req,\n}) => {\n if (config.upload?.useTempFiles && collectionConfig.upload) {\n const { file } = req\n const fileArray = [{ file }]\n await mapAsync(fileArray, async ({ file }) => {\n // Still need this check because this will not be populated if using local API\n if (file?.tempFilePath) {\n await unlinkFile(file.tempFilePath)\n }\n })\n }\n}\n"],"names":["fs","promisify","mapAsync","unlinkFile","unlink","unlinkTempFiles","collectionConfig","config","req","upload","useTempFiles","file","fileArray","tempFilePath"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,SAASC,SAAS,QAAQ,OAAM;AAMhC,SAASC,QAAQ,QAAQ,2BAA0B;AAEnD,MAAMC,aAAaF,UAAUD,GAAGI,MAAM;AAOtC;;CAEC,GACD,OAAO,MAAMC,kBAAiD,OAAO,EACnEC,gBAAgB,EAChBC,MAAM,EACNC,GAAG,EACJ;IACC,IAAID,OAAOE,MAAM,EAAEC,gBAAgBJ,iBAAiBG,MAAM,EAAE;QAC1D,MAAM,EAAEE,IAAI,EAAE,GAAGH;QACjB,MAAMI,YAAY;YAAC;gBAAED;YAAK;SAAE;QAC5B,MAAMT,SAASU,WAAW,OAAO,EAAED,IAAI,EAAE;YACvC,8EAA8E;YAC9E,IAAIA,MAAME,cAAc;gBACtB,MAAMV,WAAWQ,KAAKE,YAAY;YACpC;QACF;IACF;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/uploads/unlinkTempFiles.ts"],"sourcesContent":["import fs from 'fs'\nimport { promisify } from 'util'\n\nimport type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SanitizedConfig } from '../config/types.js'\nimport type { PayloadRequestWithData } from '../types/index.js'\n\nimport { mapAsync } from '../utilities/mapAsync.js'\n\nconst unlinkFile = promisify(fs.unlink)\n\ntype Args = {\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n req: PayloadRequestWithData\n}\n/**\n * Cleanup temp files after operation lifecycle\n */\nexport const unlinkTempFiles: (args: Args) => Promise<void> = async ({\n collectionConfig,\n config,\n req,\n}) => {\n if (config.upload?.useTempFiles && collectionConfig.upload) {\n const { file } = req\n const fileArray = [{ file }]\n await mapAsync(fileArray, async ({ file }) => {\n // Still need this check because this will not be populated if using local API\n if (file?.tempFilePath) {\n await unlinkFile(file.tempFilePath)\n }\n })\n }\n}\n"],"names":["fs","promisify","mapAsync","unlinkFile","unlink","unlinkTempFiles","collectionConfig","config","req","upload","useTempFiles","file","fileArray","tempFilePath"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,QAAQ,KAAI;AACnB,SAASC,SAAS,QAAQ,OAAM;AAMhC,SAASC,QAAQ,QAAQ,2BAA0B;AAEnD,MAAMC,aAAaF,UAAUD,GAAGI,MAAM;AAOtC;;CAEC,GACD,OAAO,MAAMC,kBAAiD,OAAO,EACnEC,gBAAgB,EAChBC,MAAM,EACNC,GAAG,EACJ;IACC,IAAID,OAAOE,MAAM,EAAEC,gBAAgBJ,iBAAiBG,MAAM,EAAE;QAC1D,MAAM,EAAEE,IAAI,EAAE,GAAGH;QACjB,MAAMI,YAAY;YAAC;gBAAED;YAAK;SAAE;QAC5B,MAAMT,SAASU,WAAW,OAAO,EAAED,IAAI,EAAE;YACvC,8EAA8E;YAC9E,IAAIA,MAAME,cAAc;gBACtB,MAAMV,WAAWQ,KAAKE,YAAY;YACpC;QACF;IACF;AACF,EAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Payload } from '../index.js';
2
- import type { PayloadRequest } from '../types/index.js';
2
+ import type { PayloadRequestWithData } from '../types/index.js';
3
3
  import type { FileToSave } from './types.js';
4
- export declare const uploadFiles: (payload: Payload, files: FileToSave[], req: PayloadRequest) => Promise<void>;
4
+ export declare const uploadFiles: (payload: Payload, files: FileToSave[], req: PayloadRequestWithData) => Promise<void>;
5
5
  //# sourceMappingURL=uploadFiles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uploadFiles.d.ts","sourceRoot":"","sources":["../../src/uploads/uploadFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,eAAO,MAAM,WAAW,4BAEf,UAAU,EAAE,OACd,cAAc,KAClB,QAAQ,IAAI,CAWd,CAAA"}
1
+ {"version":3,"file":"uploadFiles.d.ts","sourceRoot":"","sources":["../../src/uploads/uploadFiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,eAAO,MAAM,WAAW,4BAEf,UAAU,EAAE,OACd,sBAAsB,KAC1B,QAAQ,IAAI,CAWd,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/uploadFiles.ts"],"sourcesContent":["import type { Payload } from '../index.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { FileToSave } from './types.js'\n\nimport { FileUploadError } from '../errors/index.js'\nimport saveBufferToFile from './saveBufferToFile.js'\n\nexport const uploadFiles = async (\n payload: Payload,\n files: FileToSave[],\n req: PayloadRequest,\n): Promise<void> => {\n try {\n await Promise.all(\n files.map(async ({ buffer, path }) => {\n await saveBufferToFile(buffer, path)\n }),\n )\n } catch (err) {\n payload.logger.error(err)\n throw new FileUploadError(req.t)\n }\n}\n"],"names":["FileUploadError","saveBufferToFile","uploadFiles","payload","files","req","Promise","all","map","buffer","path","err","logger","error","t"],"rangeMappings":";;;;;;;;;;;","mappings":"AAIA,SAASA,eAAe,QAAQ,qBAAoB;AACpD,OAAOC,sBAAsB,wBAAuB;AAEpD,OAAO,MAAMC,cAAc,OACzBC,SACAC,OACAC;IAEA,IAAI;QACF,MAAMC,QAAQC,GAAG,CACfH,MAAMI,GAAG,CAAC,OAAO,EAAEC,MAAM,EAAEC,IAAI,EAAE;YAC/B,MAAMT,iBAAiBQ,QAAQC;QACjC;IAEJ,EAAE,OAAOC,KAAK;QACZR,QAAQS,MAAM,CAACC,KAAK,CAACF;QACrB,MAAM,IAAIX,gBAAgBK,IAAIS,CAAC;IACjC;AACF,EAAC"}
1
+ {"version":3,"sources":["../../src/uploads/uploadFiles.ts"],"sourcesContent":["import type { Payload } from '../index.js'\nimport type { PayloadRequestWithData } from '../types/index.js'\nimport type { FileToSave } from './types.js'\n\nimport { FileUploadError } from '../errors/index.js'\nimport saveBufferToFile from './saveBufferToFile.js'\n\nexport const uploadFiles = async (\n payload: Payload,\n files: FileToSave[],\n req: PayloadRequestWithData,\n): Promise<void> => {\n try {\n await Promise.all(\n files.map(async ({ buffer, path }) => {\n await saveBufferToFile(buffer, path)\n }),\n )\n } catch (err) {\n payload.logger.error(err)\n throw new FileUploadError(req.t)\n }\n}\n"],"names":["FileUploadError","saveBufferToFile","uploadFiles","payload","files","req","Promise","all","map","buffer","path","err","logger","error","t"],"rangeMappings":";;;;;;;;;;;","mappings":"AAIA,SAASA,eAAe,QAAQ,qBAAoB;AACpD,OAAOC,sBAAsB,wBAAuB;AAEpD,OAAO,MAAMC,cAAc,OACzBC,SACAC,OACAC;IAEA,IAAI;QACF,MAAMC,QAAQC,GAAG,CACfH,MAAMI,GAAG,CAAC,OAAO,EAAEC,MAAM,EAAEC,IAAI,EAAE;YAC/B,MAAMT,iBAAiBQ,QAAQC;QACjC;IAEJ,EAAE,OAAOC,KAAK;QACZR,QAAQS,MAAM,CAACC,KAAK,CAACF;QACrB,MAAM,IAAIX,gBAAgBK,IAAIS,CAAC;IACjC;AACF,EAAC"}
@@ -1,4 +1,4 @@
1
- import DuplicateCollection from '../errors/DuplicateCollection.js';
1
+ import { DuplicateCollection } from '../errors/DuplicateCollection.js';
2
2
  const getDuplicates = (arr)=>arr.filter((item, index)=>arr.indexOf(item) !== index);
3
3
  const checkDuplicateCollections = (collections)=>{
4
4
  const duplicateSlugs = getDuplicates(collections.map((c)=>c.slug));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/checkDuplicateCollections.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\n\nimport DuplicateCollection from '../errors/DuplicateCollection.js'\n\nconst getDuplicates = (arr: string[]) => arr.filter((item, index) => arr.indexOf(item) !== index)\n\nconst checkDuplicateCollections = (collections: SanitizedCollectionConfig[]): void => {\n const duplicateSlugs = getDuplicates(collections.map((c) => c.slug))\n if (duplicateSlugs.length > 0) {\n throw new DuplicateCollection('slug', duplicateSlugs)\n }\n}\n\nexport default checkDuplicateCollections\n"],"names":["DuplicateCollection","getDuplicates","arr","filter","item","index","indexOf","checkDuplicateCollections","collections","duplicateSlugs","map","c","slug","length"],"rangeMappings":";;;;;;;;","mappings":"AAEA,OAAOA,yBAAyB,mCAAkC;AAElE,MAAMC,gBAAgB,CAACC,MAAkBA,IAAIC,MAAM,CAAC,CAACC,MAAMC,QAAUH,IAAII,OAAO,CAACF,UAAUC;AAE3F,MAAME,4BAA4B,CAACC;IACjC,MAAMC,iBAAiBR,cAAcO,YAAYE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI;IAClE,IAAIH,eAAeI,MAAM,GAAG,GAAG;QAC7B,MAAM,IAAIb,oBAAoB,QAAQS;IACxC;AACF;AAEA,eAAeF,0BAAyB"}
1
+ {"version":3,"sources":["../../src/utilities/checkDuplicateCollections.ts"],"sourcesContent":["import type { SanitizedCollectionConfig } from '../collections/config/types.js'\n\nimport { DuplicateCollection } from '../errors/DuplicateCollection.js'\n\nconst getDuplicates = (arr: string[]) => arr.filter((item, index) => arr.indexOf(item) !== index)\n\nconst checkDuplicateCollections = (collections: SanitizedCollectionConfig[]): void => {\n const duplicateSlugs = getDuplicates(collections.map((c) => c.slug))\n if (duplicateSlugs.length > 0) {\n throw new DuplicateCollection('slug', duplicateSlugs)\n }\n}\n\nexport default checkDuplicateCollections\n"],"names":["DuplicateCollection","getDuplicates","arr","filter","item","index","indexOf","checkDuplicateCollections","collections","duplicateSlugs","map","c","slug","length"],"rangeMappings":";;;;;;;;","mappings":"AAEA,SAASA,mBAAmB,QAAQ,mCAAkC;AAEtE,MAAMC,gBAAgB,CAACC,MAAkBA,IAAIC,MAAM,CAAC,CAACC,MAAMC,QAAUH,IAAII,OAAO,CAACF,UAAUC;AAE3F,MAAME,4BAA4B,CAACC;IACjC,MAAMC,iBAAiBR,cAAcO,YAAYE,GAAG,CAAC,CAACC,IAAMA,EAAEC,IAAI;IAClE,IAAIH,eAAeI,MAAM,GAAG,GAAG;QAC7B,MAAM,IAAIb,oBAAoB,QAAQS;IACxC;AACF;AAEA,eAAeF,0BAAyB"}
@@ -1,6 +1,6 @@
1
- import type { PayloadRequest } from '../types/index.js';
1
+ import type { PayloadRequestWithData } from '../types/index.js';
2
2
  /**
3
3
  * complete a transaction calling adapter db.commitTransaction and delete the transactionID from req
4
4
  */
5
- export declare function commitTransaction(req: PayloadRequest): Promise<void>;
5
+ export declare function commitTransaction(req: PayloadRequestWithData): Promise<void>;
6
6
  //# sourceMappingURL=commitTransaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/utilities/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1E"}
1
+ {"version":3,"file":"commitTransaction.d.ts","sourceRoot":"","sources":["../../src/utilities/commitTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAE/D;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utilities/commitTransaction.ts"],"sourcesContent":["import type { PayloadRequest } from '../types/index.js'\n\n/**\n * complete a transaction calling adapter db.commitTransaction and delete the transactionID from req\n */\nexport async function commitTransaction(req: PayloadRequest): Promise<void> {\n const { payload, transactionID } = req\n\n await payload.db.commitTransaction(transactionID)\n delete req.transactionID\n}\n"],"names":["commitTransaction","req","payload","transactionID","db"],"rangeMappings":";;;;;;","mappings":"AAEA;;CAEC,GACD,OAAO,eAAeA,kBAAkBC,GAAmB;IACzD,MAAM,EAAEC,OAAO,EAAEC,aAAa,EAAE,GAAGF;IAEnC,MAAMC,QAAQE,EAAE,CAACJ,iBAAiB,CAACG;IACnC,OAAOF,IAAIE,aAAa;AAC1B"}
1
+ {"version":3,"sources":["../../src/utilities/commitTransaction.ts"],"sourcesContent":["import type { PayloadRequestWithData } from '../types/index.js'\n\n/**\n * complete a transaction calling adapter db.commitTransaction and delete the transactionID from req\n */\nexport async function commitTransaction(req: PayloadRequestWithData): Promise<void> {\n const { payload, transactionID } = req\n\n await payload.db.commitTransaction(transactionID)\n delete req.transactionID\n}\n"],"names":["commitTransaction","req","payload","transactionID","db"],"rangeMappings":";;;;;;","mappings":"AAEA;;CAEC,GACD,OAAO,eAAeA,kBAAkBC,GAA2B;IACjE,MAAM,EAAEC,OAAO,EAAEC,aAAa,EAAE,GAAGF;IAEnC,MAAMC,QAAQE,EAAE,CAACJ,iBAAiB,CAACG;IACnC,OAAOF,IAAIE,aAAa;AAC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"configToJSONSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/configToJSONSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAKnE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAA8B,MAAM,2BAA2B,CAAA;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAqFvE;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,OAAO,GAClB,mBAAmB,GAAG,mBAAmB,EAAE,CAK7C;AAED,wBAAgB,kBAAkB;AAChC;;;;GAIG;AACH,sBAAsB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAAE,EAC9D,MAAM,EAAE,KAAK,EAAE;AACf;;GAEG;AACH,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClD,MAAM,CAAC,EAAE,eAAe,GACvB;IACD,UAAU,EAAE;QACV,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;KACzB,CAAA;IACD,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAmXA;AAGD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,cAAc,EAAE,yBAAyB,GAAG,qBAAqB,EACjE,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClD,aAAa,EAAE,QAAQ,GAAG,MAAM,GAC/B,WAAW,CA8Cb;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,aAAa,CAAC,EAAE,QAAQ,GAAG,MAAM,GAChC,WAAW,CA2Bb"}
1
+ {"version":3,"file":"configToJSONSchema.d.ts","sourceRoot":"","sources":["../../src/utilities/configToJSONSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAKnE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,KAAK,EAA8B,MAAM,2BAA2B,CAAA;AAClF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAwGvE;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,mBAAmB,EAC9B,UAAU,EAAE,OAAO,GAClB,mBAAmB,GAAG,mBAAmB,EAAE,CAK7C;AAED,wBAAgB,kBAAkB;AAChC;;;;GAIG;AACH,sBAAsB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAAE,EAC9D,MAAM,EAAE,KAAK,EAAE;AACf;;GAEG;AACH,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClD,MAAM,CAAC,EAAE,eAAe,GACvB;IACD,UAAU,EAAE;QACV,CAAC,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;KACzB,CAAA;IACD,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CA4XA;AAGD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,cAAc,EAAE,yBAAyB,GAAG,qBAAqB,EACjE,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAClD,aAAa,EAAE,QAAQ,GAAG,MAAM,GAC/B,WAAW,CA8Cb;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,eAAe,EACvB,aAAa,CAAC,EAAE,QAAQ,GAAG,MAAM,GAChC,WAAW,CA4Bb"}
@@ -48,6 +48,23 @@ function generateEntitySchemas(entities) {
48
48
  required: Object.keys(properties)
49
49
  };
50
50
  }
51
+ function generateLocaleEntitySchemas(localization) {
52
+ if (localization && 'locales' in localization && localization?.locales) {
53
+ const localesFromConfig = localization?.locales;
54
+ const locales = [
55
+ ...localesFromConfig
56
+ ].map((locale)=>{
57
+ return locale.code;
58
+ }, []);
59
+ return {
60
+ type: 'string',
61
+ enum: locales
62
+ };
63
+ }
64
+ return {
65
+ type: 'null'
66
+ };
67
+ }
51
68
  function generateAuthEntitySchemas(entities) {
52
69
  const properties = [
53
70
  ...entities
@@ -166,6 +183,9 @@ export function fieldsToJSONSchema(/**
166
183
  }
167
184
  case 'richText':
168
185
  {
186
+ if (typeof field.editor === 'function') {
187
+ throw new Error('Attempted to access unsanitized rich text editor.');
188
+ }
169
189
  if (field.editor.outputSchema) {
170
190
  fieldSchema = field.editor.outputSchema({
171
191
  collectionIDFieldTypes,
@@ -411,7 +431,11 @@ export function fieldsToJSONSchema(/**
411
431
  additionalProperties: false,
412
432
  ...childSchema
413
433
  });
414
- requiredFieldNames.add(tab.name);
434
+ // If the named tab has any required fields then we mark this as required otherwise it should be optional
435
+ const hasRequiredFields = tab.fields.some((subField)=>fieldIsRequired(subField));
436
+ if (hasRequiredFields) {
437
+ requiredFieldNames.add(tab.name);
438
+ }
415
439
  } else {
416
440
  Object.entries(childSchema.properties).forEach(([propName, propSchema])=>{
417
441
  fieldSchemas.set(propName, propSchema);
@@ -521,10 +545,12 @@ export function entityToJSONSchema(config, incomingEntity, interfaceNameDefiniti
521
545
  properties: {
522
546
  collections: generateEntitySchemas(config.collections || []),
523
547
  globals: generateEntitySchemas(config.globals || []),
548
+ locale: generateLocaleEntitySchemas(config.localization),
524
549
  user: generateAuthEntitySchemas(config.collections)
525
550
  },
526
551
  required: [
527
552
  'user',
553
+ 'locale',
528
554
  'collections',
529
555
  'globals'
530
556
  ],