payload 3.0.0-beta.11 → 3.0.0-beta.111

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 (1340) hide show
  1. package/bin.js +43 -7
  2. package/dist/admin/LanguageOptions.d.ts +6 -0
  3. package/dist/admin/LanguageOptions.d.ts.map +1 -0
  4. package/dist/admin/LanguageOptions.js +3 -0
  5. package/dist/admin/LanguageOptions.js.map +1 -0
  6. package/dist/admin/RichText.d.ts +156 -36
  7. package/dist/admin/RichText.d.ts.map +1 -1
  8. package/dist/admin/RichText.js.map +1 -1
  9. package/dist/admin/elements/Cell.d.ts +11 -30
  10. package/dist/admin/elements/Cell.d.ts.map +1 -1
  11. package/dist/admin/elements/Cell.js.map +1 -1
  12. package/dist/admin/elements/DatePicker.d.ts +7 -7
  13. package/dist/admin/elements/DatePicker.d.ts.map +1 -1
  14. package/dist/admin/elements/DatePicker.js.map +1 -1
  15. package/dist/admin/elements/PreviewButton.js.map +1 -1
  16. package/dist/admin/elements/PublishButton.js.map +1 -1
  17. package/dist/admin/elements/SaveButton.js.map +1 -1
  18. package/dist/admin/elements/SaveDraftButton.js.map +1 -1
  19. package/dist/admin/elements/Tab.d.ts +18 -14
  20. package/dist/admin/elements/Tab.d.ts.map +1 -1
  21. package/dist/admin/elements/Tab.js.map +1 -1
  22. package/dist/admin/elements/Upload.d.ts +3 -0
  23. package/dist/admin/elements/Upload.d.ts.map +1 -0
  24. package/dist/admin/elements/Upload.js +3 -0
  25. package/dist/admin/elements/Upload.js.map +1 -0
  26. package/dist/admin/elements/WithServerSideProps.d.ts +6 -2
  27. package/dist/admin/elements/WithServerSideProps.d.ts.map +1 -1
  28. package/dist/admin/elements/WithServerSideProps.js.map +1 -1
  29. package/dist/admin/fields/Array.d.ts +23 -0
  30. package/dist/admin/fields/Array.d.ts.map +1 -0
  31. package/dist/admin/fields/Array.js +3 -0
  32. package/dist/admin/fields/Array.js.map +1 -0
  33. package/dist/admin/fields/Blocks.d.ts +22 -0
  34. package/dist/admin/fields/Blocks.d.ts.map +1 -0
  35. package/dist/admin/fields/Blocks.js +3 -0
  36. package/dist/admin/fields/Blocks.js.map +1 -0
  37. package/dist/admin/fields/Checkbox.d.ts +27 -0
  38. package/dist/admin/fields/Checkbox.d.ts.map +1 -0
  39. package/dist/admin/fields/Checkbox.js +3 -0
  40. package/dist/admin/fields/Checkbox.js.map +1 -0
  41. package/dist/admin/fields/Code.d.ts +23 -0
  42. package/dist/admin/fields/Code.d.ts.map +1 -0
  43. package/dist/admin/fields/Code.js +3 -0
  44. package/dist/admin/fields/Code.js.map +1 -0
  45. package/dist/admin/fields/Collapsible.d.ts +18 -0
  46. package/dist/admin/fields/Collapsible.d.ts.map +1 -0
  47. package/dist/admin/fields/Collapsible.js +3 -0
  48. package/dist/admin/fields/Collapsible.js.map +1 -0
  49. package/dist/admin/fields/Date.d.ts +22 -0
  50. package/dist/admin/fields/Date.d.ts.map +1 -0
  51. package/dist/admin/fields/Date.js +3 -0
  52. package/dist/admin/fields/Date.js.map +1 -0
  53. package/dist/admin/fields/Email.d.ts +23 -0
  54. package/dist/admin/fields/Email.d.ts.map +1 -0
  55. package/dist/admin/fields/Email.js +3 -0
  56. package/dist/admin/fields/Email.js.map +1 -0
  57. package/dist/admin/fields/Group.d.ts +18 -0
  58. package/dist/admin/fields/Group.d.ts.map +1 -0
  59. package/dist/admin/fields/Group.js +3 -0
  60. package/dist/admin/fields/Group.js.map +1 -0
  61. package/dist/admin/fields/Hidden.d.ts +11 -0
  62. package/dist/admin/fields/Hidden.d.ts.map +1 -0
  63. package/dist/admin/fields/Hidden.js +3 -0
  64. package/dist/admin/fields/Hidden.js.map +1 -0
  65. package/dist/admin/fields/JSON.d.ts +22 -0
  66. package/dist/admin/fields/JSON.d.ts.map +1 -0
  67. package/dist/admin/fields/JSON.js +3 -0
  68. package/dist/admin/fields/JSON.js.map +1 -0
  69. package/dist/admin/fields/Join.d.ts +18 -0
  70. package/dist/admin/fields/Join.d.ts.map +1 -0
  71. package/dist/admin/fields/Join.js +3 -0
  72. package/dist/admin/fields/Join.js.map +1 -0
  73. package/dist/admin/fields/Number.d.ts +23 -0
  74. package/dist/admin/fields/Number.d.ts.map +1 -0
  75. package/dist/admin/fields/Number.js +3 -0
  76. package/dist/admin/fields/Number.js.map +1 -0
  77. package/dist/admin/fields/Point.d.ts +22 -0
  78. package/dist/admin/fields/Point.d.ts.map +1 -0
  79. package/dist/admin/fields/Point.js +3 -0
  80. package/dist/admin/fields/Point.js.map +1 -0
  81. package/dist/admin/fields/Radio.d.ts +25 -0
  82. package/dist/admin/fields/Radio.d.ts.map +1 -0
  83. package/dist/admin/fields/Radio.js +3 -0
  84. package/dist/admin/fields/Radio.js.map +1 -0
  85. package/dist/admin/fields/Relationship.d.ts +22 -0
  86. package/dist/admin/fields/Relationship.d.ts.map +1 -0
  87. package/dist/admin/fields/Relationship.js +3 -0
  88. package/dist/admin/fields/Relationship.js.map +1 -0
  89. package/dist/admin/fields/RichText.d.ts +22 -0
  90. package/dist/admin/fields/RichText.d.ts.map +1 -0
  91. package/dist/admin/fields/RichText.js +3 -0
  92. package/dist/admin/fields/RichText.js.map +1 -0
  93. package/dist/admin/fields/Row.d.ts +21 -0
  94. package/dist/admin/fields/Row.d.ts.map +1 -0
  95. package/dist/admin/fields/Row.js +3 -0
  96. package/dist/admin/fields/Row.js.map +1 -0
  97. package/dist/admin/fields/Select.d.ts +24 -0
  98. package/dist/admin/fields/Select.d.ts.map +1 -0
  99. package/dist/admin/fields/Select.js +3 -0
  100. package/dist/admin/fields/Select.js.map +1 -0
  101. package/dist/admin/fields/Tabs.d.ts +23 -0
  102. package/dist/admin/fields/Tabs.d.ts.map +1 -0
  103. package/dist/admin/fields/Tabs.js +3 -0
  104. package/dist/admin/fields/Tabs.js.map +1 -0
  105. package/dist/admin/fields/Text.d.ts +25 -0
  106. package/dist/admin/fields/Text.d.ts.map +1 -0
  107. package/dist/admin/fields/Text.js +3 -0
  108. package/dist/admin/fields/Text.js.map +1 -0
  109. package/dist/admin/fields/Textarea.d.ts +25 -0
  110. package/dist/admin/fields/Textarea.d.ts.map +1 -0
  111. package/dist/admin/fields/Textarea.js +3 -0
  112. package/dist/admin/fields/Textarea.js.map +1 -0
  113. package/dist/admin/fields/Upload.d.ts +22 -0
  114. package/dist/admin/fields/Upload.d.ts.map +1 -0
  115. package/dist/admin/fields/Upload.js +3 -0
  116. package/dist/admin/fields/Upload.js.map +1 -0
  117. package/dist/admin/forms/Description.d.ts +23 -0
  118. package/dist/admin/forms/Description.d.ts.map +1 -0
  119. package/dist/admin/forms/Description.js +3 -0
  120. package/dist/admin/forms/Description.js.map +1 -0
  121. package/dist/admin/forms/Error.d.ts +19 -6
  122. package/dist/admin/forms/Error.d.ts.map +1 -1
  123. package/dist/admin/forms/Error.js.map +1 -1
  124. package/dist/admin/forms/Field.d.ts +39 -0
  125. package/dist/admin/forms/Field.d.ts.map +1 -0
  126. package/dist/admin/forms/Field.js +3 -0
  127. package/dist/admin/forms/Field.js.map +1 -0
  128. package/dist/admin/forms/Form.d.ts +3 -3
  129. package/dist/admin/forms/Form.d.ts.map +1 -1
  130. package/dist/admin/forms/Form.js.map +1 -1
  131. package/dist/admin/forms/Label.d.ts +21 -8
  132. package/dist/admin/forms/Label.d.ts.map +1 -1
  133. package/dist/admin/forms/Label.js.map +1 -1
  134. package/dist/admin/forms/RowLabel.d.ts +1 -1
  135. package/dist/admin/forms/RowLabel.d.ts.map +1 -1
  136. package/dist/admin/forms/RowLabel.js.map +1 -1
  137. package/dist/admin/types.d.ts +65 -7
  138. package/dist/admin/types.d.ts.map +1 -1
  139. package/dist/admin/types.js.map +1 -1
  140. package/dist/admin/views/types.d.ts +27 -16
  141. package/dist/admin/views/types.d.ts.map +1 -1
  142. package/dist/admin/views/types.js.map +1 -1
  143. package/dist/assets/assets.d.js.map +1 -1
  144. package/dist/auth/baseFields/accountLock.d.ts +1 -2
  145. package/dist/auth/baseFields/accountLock.d.ts.map +1 -1
  146. package/dist/auth/baseFields/accountLock.js +1 -1
  147. package/dist/auth/baseFields/accountLock.js.map +1 -1
  148. package/dist/auth/baseFields/apiKey.d.ts +1 -2
  149. package/dist/auth/baseFields/apiKey.d.ts.map +1 -1
  150. package/dist/auth/baseFields/apiKey.js +9 -8
  151. package/dist/auth/baseFields/apiKey.js.map +1 -1
  152. package/dist/auth/baseFields/auth.d.ts +1 -2
  153. package/dist/auth/baseFields/auth.d.ts.map +1 -1
  154. package/dist/auth/baseFields/auth.js +1 -16
  155. package/dist/auth/baseFields/auth.js.map +1 -1
  156. package/dist/auth/baseFields/email.d.ts +3 -0
  157. package/dist/auth/baseFields/email.d.ts.map +1 -0
  158. package/dist/auth/baseFields/email.js +25 -0
  159. package/dist/auth/baseFields/email.js.map +1 -0
  160. package/dist/auth/baseFields/username.d.ts +3 -0
  161. package/dist/auth/baseFields/username.d.ts.map +1 -0
  162. package/dist/auth/baseFields/username.js +25 -0
  163. package/dist/auth/baseFields/username.js.map +1 -0
  164. package/dist/auth/baseFields/verification.d.ts +1 -2
  165. package/dist/auth/baseFields/verification.d.ts.map +1 -1
  166. package/dist/auth/baseFields/verification.js +2 -2
  167. package/dist/auth/baseFields/verification.js.map +1 -1
  168. package/dist/auth/cookies.d.ts +17 -5
  169. package/dist/auth/cookies.d.ts.map +1 -1
  170. package/dist/auth/cookies.js +45 -14
  171. package/dist/auth/cookies.js.map +1 -1
  172. package/dist/auth/crypto.js.map +1 -1
  173. package/dist/auth/defaultAccess.js.map +1 -1
  174. package/dist/auth/defaultUser.js.map +1 -1
  175. package/dist/auth/ensureUsernameOrEmail.d.ts +17 -0
  176. package/dist/auth/ensureUsernameOrEmail.d.ts.map +1 -0
  177. package/dist/auth/ensureUsernameOrEmail.js +43 -0
  178. package/dist/auth/ensureUsernameOrEmail.js.map +1 -0
  179. package/dist/auth/executeAccess.d.ts.map +1 -1
  180. package/dist/auth/executeAccess.js +6 -2
  181. package/dist/auth/executeAccess.js.map +1 -1
  182. package/dist/auth/executeAuthStrategies.d.ts +2 -3
  183. package/dist/auth/executeAuthStrategies.d.ts.map +1 -1
  184. package/dist/auth/executeAuthStrategies.js +6 -4
  185. package/dist/auth/executeAuthStrategies.js.map +1 -1
  186. package/dist/auth/extractJWT.d.ts +1 -1
  187. package/dist/auth/extractJWT.d.ts.map +1 -1
  188. package/dist/auth/extractJWT.js.map +1 -1
  189. package/dist/auth/getAccessResults.d.ts.map +1 -1
  190. package/dist/auth/getAccessResults.js +3 -8
  191. package/dist/auth/getAccessResults.js.map +1 -1
  192. package/dist/auth/getAuthFields.d.ts +4 -0
  193. package/dist/auth/getAuthFields.d.ts.map +1 -0
  194. package/dist/auth/getAuthFields.js +45 -0
  195. package/dist/auth/getAuthFields.js.map +1 -0
  196. package/dist/auth/getFieldsToSign.d.ts +1 -1
  197. package/dist/auth/getFieldsToSign.d.ts.map +1 -1
  198. package/dist/auth/getFieldsToSign.js +1 -1
  199. package/dist/auth/getFieldsToSign.js.map +1 -1
  200. package/dist/auth/index.d.ts +2 -2
  201. package/dist/auth/index.d.ts.map +1 -1
  202. package/dist/auth/index.js +2 -2
  203. package/dist/auth/index.js.map +1 -1
  204. package/dist/auth/isLocked.d.ts.map +1 -1
  205. package/dist/auth/isLocked.js +6 -1
  206. package/dist/auth/isLocked.js.map +1 -1
  207. package/dist/auth/operations/access.d.ts.map +1 -1
  208. package/dist/auth/operations/access.js +1 -6
  209. package/dist/auth/operations/access.js.map +1 -1
  210. package/dist/auth/operations/auth.d.ts +3 -3
  211. package/dist/auth/operations/auth.d.ts.map +1 -1
  212. package/dist/auth/operations/auth.js +3 -9
  213. package/dist/auth/operations/auth.js.map +1 -1
  214. package/dist/auth/operations/forgotPassword.d.ts +5 -5
  215. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  216. package/dist/auth/operations/forgotPassword.js +40 -22
  217. package/dist/auth/operations/forgotPassword.js.map +1 -1
  218. package/dist/auth/operations/init.d.ts.map +1 -1
  219. package/dist/auth/operations/init.js.map +1 -1
  220. package/dist/auth/operations/local/auth.d.ts.map +1 -1
  221. package/dist/auth/operations/local/auth.js.map +1 -1
  222. package/dist/auth/operations/local/forgotPassword.d.ts +3 -3
  223. package/dist/auth/operations/local/forgotPassword.d.ts.map +1 -1
  224. package/dist/auth/operations/local/forgotPassword.js.map +1 -1
  225. package/dist/auth/operations/local/index.js.map +1 -1
  226. package/dist/auth/operations/local/login.d.ts +6 -10
  227. package/dist/auth/operations/local/login.d.ts.map +1 -1
  228. package/dist/auth/operations/local/login.js.map +1 -1
  229. package/dist/auth/operations/local/resetPassword.d.ts +3 -4
  230. package/dist/auth/operations/local/resetPassword.d.ts.map +1 -1
  231. package/dist/auth/operations/local/resetPassword.js.map +1 -1
  232. package/dist/auth/operations/local/unlock.d.ts +5 -8
  233. package/dist/auth/operations/local/unlock.d.ts.map +1 -1
  234. package/dist/auth/operations/local/unlock.js.map +1 -1
  235. package/dist/auth/operations/local/verifyEmail.d.ts +3 -4
  236. package/dist/auth/operations/local/verifyEmail.d.ts.map +1 -1
  237. package/dist/auth/operations/local/verifyEmail.js.map +1 -1
  238. package/dist/auth/operations/login.d.ts +7 -10
  239. package/dist/auth/operations/login.d.ts.map +1 -1
  240. package/dist/auth/operations/login.js +109 -16
  241. package/dist/auth/operations/login.js.map +1 -1
  242. package/dist/auth/operations/logout.d.ts.map +1 -1
  243. package/dist/auth/operations/logout.js +6 -2
  244. package/dist/auth/operations/logout.js.map +1 -1
  245. package/dist/auth/operations/me.d.ts +2 -1
  246. package/dist/auth/operations/me.d.ts.map +1 -1
  247. package/dist/auth/operations/me.js +32 -10
  248. package/dist/auth/operations/me.js.map +1 -1
  249. package/dist/auth/operations/refresh.d.ts +3 -3
  250. package/dist/auth/operations/refresh.d.ts.map +1 -1
  251. package/dist/auth/operations/refresh.js +43 -18
  252. package/dist/auth/operations/refresh.js.map +1 -1
  253. package/dist/auth/operations/registerFirstUser.d.ts +7 -13
  254. package/dist/auth/operations/registerFirstUser.d.ts.map +1 -1
  255. package/dist/auth/operations/registerFirstUser.js +14 -2
  256. package/dist/auth/operations/registerFirstUser.js.map +1 -1
  257. package/dist/auth/operations/resetPassword.d.ts +0 -1
  258. package/dist/auth/operations/resetPassword.d.ts.map +1 -1
  259. package/dist/auth/operations/resetPassword.js +10 -5
  260. package/dist/auth/operations/resetPassword.js.map +1 -1
  261. package/dist/auth/operations/unlock.d.ts +5 -7
  262. package/dist/auth/operations/unlock.d.ts.map +1 -1
  263. package/dist/auth/operations/unlock.js +25 -16
  264. package/dist/auth/operations/unlock.js.map +1 -1
  265. package/dist/auth/operations/verifyEmail.d.ts.map +1 -1
  266. package/dist/auth/operations/verifyEmail.js +9 -3
  267. package/dist/auth/operations/verifyEmail.js.map +1 -1
  268. package/dist/auth/sendVerificationEmail.d.ts +5 -6
  269. package/dist/auth/sendVerificationEmail.d.ts.map +1 -1
  270. package/dist/auth/sendVerificationEmail.js +7 -8
  271. package/dist/auth/sendVerificationEmail.js.map +1 -1
  272. package/dist/auth/strategies/apiKey.d.ts.map +1 -1
  273. package/dist/auth/strategies/apiKey.js +9 -3
  274. package/dist/auth/strategies/apiKey.js.map +1 -1
  275. package/dist/auth/strategies/jwt.d.ts.map +1 -1
  276. package/dist/auth/strategies/jwt.js +71 -3
  277. package/dist/auth/strategies/jwt.js.map +1 -1
  278. package/dist/auth/strategies/local/authenticate.d.ts +1 -1
  279. package/dist/auth/strategies/local/authenticate.d.ts.map +1 -1
  280. package/dist/auth/strategies/local/authenticate.js +3 -1
  281. package/dist/auth/strategies/local/authenticate.js.map +1 -1
  282. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts +5 -1
  283. package/dist/auth/strategies/local/generatePasswordSaltHash.d.ts.map +1 -1
  284. package/dist/auth/strategies/local/generatePasswordSaltHash.js +23 -14
  285. package/dist/auth/strategies/local/generatePasswordSaltHash.js.map +1 -1
  286. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts +1 -1
  287. package/dist/auth/strategies/local/incrementLoginAttempts.d.ts.map +1 -1
  288. package/dist/auth/strategies/local/incrementLoginAttempts.js +1 -1
  289. package/dist/auth/strategies/local/incrementLoginAttempts.js.map +1 -1
  290. package/dist/auth/strategies/local/register.d.ts +2 -2
  291. package/dist/auth/strategies/local/register.d.ts.map +1 -1
  292. package/dist/auth/strategies/local/register.js +46 -13
  293. package/dist/auth/strategies/local/register.js.map +1 -1
  294. package/dist/auth/strategies/local/resetLoginAttempts.d.ts +1 -1
  295. package/dist/auth/strategies/local/resetLoginAttempts.d.ts.map +1 -1
  296. package/dist/auth/strategies/local/resetLoginAttempts.js +3 -1
  297. package/dist/auth/strategies/local/resetLoginAttempts.js.map +1 -1
  298. package/dist/auth/types.d.ts +83 -18
  299. package/dist/auth/types.d.ts.map +1 -1
  300. package/dist/auth/types.js.map +1 -1
  301. package/dist/bin/generateImportMap/index.d.ts +47 -0
  302. package/dist/bin/generateImportMap/index.d.ts.map +1 -0
  303. package/dist/bin/generateImportMap/index.js +129 -0
  304. package/dist/bin/generateImportMap/index.js.map +1 -0
  305. package/dist/bin/generateImportMap/iterateCollections.d.ts +12 -0
  306. package/dist/bin/generateImportMap/iterateCollections.d.ts.map +1 -0
  307. package/dist/bin/generateImportMap/iterateCollections.js +41 -0
  308. package/dist/bin/generateImportMap/iterateCollections.js.map +1 -0
  309. package/dist/bin/generateImportMap/iterateConfig.d.ts +10 -0
  310. package/dist/bin/generateImportMap/iterateConfig.d.ts.map +1 -0
  311. package/dist/bin/generateImportMap/iterateConfig.js +78 -0
  312. package/dist/bin/generateImportMap/iterateConfig.js.map +1 -0
  313. package/dist/bin/generateImportMap/iterateFields.d.ts +12 -0
  314. package/dist/bin/generateImportMap/iterateFields.d.ts.map +1 -0
  315. package/dist/bin/generateImportMap/iterateFields.js +56 -0
  316. package/dist/bin/generateImportMap/iterateFields.js.map +1 -0
  317. package/dist/bin/generateImportMap/iterateGlobals.d.ts +12 -0
  318. package/dist/bin/generateImportMap/iterateGlobals.d.ts.map +1 -0
  319. package/dist/bin/generateImportMap/iterateGlobals.js +34 -0
  320. package/dist/bin/generateImportMap/iterateGlobals.js.map +1 -0
  321. package/dist/bin/generateImportMap/parsePayloadComponent.d.ts +6 -0
  322. package/dist/bin/generateImportMap/parsePayloadComponent.d.ts.map +1 -0
  323. package/dist/bin/generateImportMap/parsePayloadComponent.js +22 -0
  324. package/dist/bin/generateImportMap/parsePayloadComponent.js.map +1 -0
  325. package/dist/bin/generateTypes.d.ts +3 -1
  326. package/dist/bin/generateTypes.d.ts.map +1 -1
  327. package/dist/bin/generateTypes.js +28 -10
  328. package/dist/bin/generateTypes.js.map +1 -1
  329. package/dist/bin/index.d.ts.map +1 -1
  330. package/dist/bin/index.js +46 -7
  331. package/dist/bin/index.js.map +1 -1
  332. package/dist/bin/info.d.ts +2 -0
  333. package/dist/bin/info.d.ts.map +1 -0
  334. package/dist/bin/info.js +56 -0
  335. package/dist/bin/info.js.map +1 -0
  336. package/dist/bin/loadEnv.d.ts +2 -2
  337. package/dist/bin/loadEnv.d.ts.map +1 -1
  338. package/dist/bin/loadEnv.js +21 -17
  339. package/dist/bin/loadEnv.js.map +1 -1
  340. package/dist/bin/migrate.d.ts.map +1 -1
  341. package/dist/bin/migrate.js.map +1 -1
  342. package/dist/checkPayloadDependencies.d.ts +2 -0
  343. package/dist/checkPayloadDependencies.d.ts.map +1 -0
  344. package/dist/checkPayloadDependencies.js +22 -0
  345. package/dist/checkPayloadDependencies.js.map +1 -0
  346. package/dist/collections/config/build.js.map +1 -1
  347. package/dist/collections/config/client.d.ts +33 -310
  348. package/dist/collections/config/client.d.ts.map +1 -1
  349. package/dist/collections/config/client.js +1 -71
  350. package/dist/collections/config/client.js.map +1 -1
  351. package/dist/collections/config/defaults.d.ts +5 -64
  352. package/dist/collections/config/defaults.d.ts.map +1 -1
  353. package/dist/collections/config/defaults.js +10 -1
  354. package/dist/collections/config/defaults.js.map +1 -1
  355. package/dist/collections/config/reservedFieldNames.d.ts +15 -0
  356. package/dist/collections/config/reservedFieldNames.d.ts.map +1 -0
  357. package/dist/collections/config/reservedFieldNames.js +104 -0
  358. package/dist/collections/config/reservedFieldNames.js.map +1 -0
  359. package/dist/collections/config/reservedFieldNames.spec.js +148 -0
  360. package/dist/collections/config/reservedFieldNames.spec.js.map +1 -0
  361. package/dist/collections/config/sanitize.d.ts +2 -3
  362. package/dist/collections/config/sanitize.d.ts.map +1 -1
  363. package/dist/collections/config/sanitize.js +79 -47
  364. package/dist/collections/config/sanitize.js.map +1 -1
  365. package/dist/collections/config/types.d.ts +111 -38
  366. package/dist/collections/config/types.d.ts.map +1 -1
  367. package/dist/collections/config/types.js.map +1 -1
  368. package/dist/collections/config/useAsTitle.d.ts +6 -0
  369. package/dist/collections/config/useAsTitle.d.ts.map +1 -0
  370. package/dist/collections/config/useAsTitle.js +33 -0
  371. package/dist/collections/config/useAsTitle.js.map +1 -0
  372. package/dist/collections/config/useAsTitle.spec.js +186 -0
  373. package/dist/collections/config/useAsTitle.spec.js.map +1 -0
  374. package/dist/collections/dataloader.d.ts +14 -0
  375. package/dist/collections/dataloader.d.ts.map +1 -1
  376. package/dist/collections/dataloader.js +29 -12
  377. package/dist/collections/dataloader.js.map +1 -1
  378. package/dist/collections/operations/count.d.ts +14 -0
  379. package/dist/collections/operations/count.d.ts.map +1 -0
  380. package/dist/collections/operations/count.js +71 -0
  381. package/dist/collections/operations/count.js.map +1 -0
  382. package/dist/collections/operations/create.d.ts +5 -9
  383. package/dist/collections/operations/create.d.ts.map +1 -1
  384. package/dist/collections/operations/create.js +19 -18
  385. package/dist/collections/operations/create.js.map +1 -1
  386. package/dist/collections/operations/delete.d.ts +6 -5
  387. package/dist/collections/operations/delete.d.ts.map +1 -1
  388. package/dist/collections/operations/delete.js +17 -3
  389. package/dist/collections/operations/delete.js.map +1 -1
  390. package/dist/collections/operations/deleteByID.d.ts +5 -3
  391. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  392. package/dist/collections/operations/deleteByID.js +22 -4
  393. package/dist/collections/operations/deleteByID.js.map +1 -1
  394. package/dist/collections/operations/docAccess.d.ts.map +1 -1
  395. package/dist/collections/operations/docAccess.js +0 -4
  396. package/dist/collections/operations/docAccess.js.map +1 -1
  397. package/dist/collections/operations/duplicate.d.ts +3 -3
  398. package/dist/collections/operations/duplicate.d.ts.map +1 -1
  399. package/dist/collections/operations/duplicate.js +22 -6
  400. package/dist/collections/operations/duplicate.js.map +1 -1
  401. package/dist/collections/operations/find.d.ts +5 -2
  402. package/dist/collections/operations/find.d.ts.map +1 -1
  403. package/dist/collections/operations/find.js +44 -6
  404. package/dist/collections/operations/find.js.map +1 -1
  405. package/dist/collections/operations/findByID.d.ts +5 -2
  406. package/dist/collections/operations/findByID.d.ts.map +1 -1
  407. package/dist/collections/operations/findByID.js +48 -11
  408. package/dist/collections/operations/findByID.js.map +1 -1
  409. package/dist/collections/operations/findVersionByID.d.ts +1 -1
  410. package/dist/collections/operations/findVersionByID.d.ts.map +1 -1
  411. package/dist/collections/operations/findVersionByID.js +11 -8
  412. package/dist/collections/operations/findVersionByID.js.map +1 -1
  413. package/dist/collections/operations/findVersions.d.ts +1 -1
  414. package/dist/collections/operations/findVersions.d.ts.map +1 -1
  415. package/dist/collections/operations/findVersions.js +2 -5
  416. package/dist/collections/operations/findVersions.js.map +1 -1
  417. package/dist/collections/operations/local/count.d.ts +20 -0
  418. package/dist/collections/operations/local/count.d.ts.map +1 -0
  419. package/dist/collections/operations/local/count.js +19 -0
  420. package/dist/collections/operations/local/count.js.map +1 -0
  421. package/dist/collections/operations/local/create.d.ts +7 -8
  422. package/dist/collections/operations/local/create.d.ts.map +1 -1
  423. package/dist/collections/operations/local/create.js.map +1 -1
  424. package/dist/collections/operations/local/delete.d.ts +16 -17
  425. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  426. package/dist/collections/operations/local/delete.js +2 -1
  427. package/dist/collections/operations/local/delete.js.map +1 -1
  428. package/dist/collections/operations/local/duplicate.d.ts +6 -5
  429. package/dist/collections/operations/local/duplicate.d.ts.map +1 -1
  430. package/dist/collections/operations/local/duplicate.js.map +1 -1
  431. package/dist/collections/operations/local/find.d.ts +9 -6
  432. package/dist/collections/operations/local/find.d.ts.map +1 -1
  433. package/dist/collections/operations/local/find.js +4 -2
  434. package/dist/collections/operations/local/find.js.map +1 -1
  435. package/dist/collections/operations/local/findByID.d.ts +9 -6
  436. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  437. package/dist/collections/operations/local/findByID.js +3 -1
  438. package/dist/collections/operations/local/findByID.js.map +1 -1
  439. package/dist/collections/operations/local/findVersionByID.d.ts +7 -6
  440. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  441. package/dist/collections/operations/local/findVersionByID.js.map +1 -1
  442. package/dist/collections/operations/local/findVersions.d.ts +7 -6
  443. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  444. package/dist/collections/operations/local/findVersions.js.map +1 -1
  445. package/dist/collections/operations/local/index.d.ts +4 -2
  446. package/dist/collections/operations/local/index.d.ts.map +1 -1
  447. package/dist/collections/operations/local/index.js +4 -2
  448. package/dist/collections/operations/local/index.js.map +1 -1
  449. package/dist/collections/operations/local/restoreVersion.d.ts +7 -6
  450. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  451. package/dist/collections/operations/local/restoreVersion.js.map +1 -1
  452. package/dist/collections/operations/local/update.d.ts +16 -14
  453. package/dist/collections/operations/local/update.d.ts.map +1 -1
  454. package/dist/collections/operations/local/update.js +3 -1
  455. package/dist/collections/operations/local/update.js.map +1 -1
  456. package/dist/collections/operations/restoreVersion.d.ts +2 -1
  457. package/dist/collections/operations/restoreVersion.d.ts.map +1 -1
  458. package/dist/collections/operations/restoreVersion.js +14 -9
  459. package/dist/collections/operations/restoreVersion.js.map +1 -1
  460. package/dist/collections/operations/update.d.ts +6 -6
  461. package/dist/collections/operations/update.d.ts.map +1 -1
  462. package/dist/collections/operations/update.js +33 -6
  463. package/dist/collections/operations/update.js.map +1 -1
  464. package/dist/collections/operations/updateByID.d.ts +7 -7
  465. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  466. package/dist/collections/operations/updateByID.js +72 -11
  467. package/dist/collections/operations/updateByID.js.map +1 -1
  468. package/dist/collections/operations/utils.d.ts +42 -33
  469. package/dist/collections/operations/utils.d.ts.map +1 -1
  470. package/dist/collections/operations/utils.js +0 -1
  471. package/dist/collections/operations/utils.js.map +1 -1
  472. package/dist/config/build.d.ts.map +1 -1
  473. package/dist/config/build.js +3 -4
  474. package/dist/config/build.js.map +1 -1
  475. package/dist/config/client.d.ts +18 -10
  476. package/dist/config/client.d.ts.map +1 -1
  477. package/dist/config/client.js +18 -63
  478. package/dist/config/client.js.map +1 -1
  479. package/dist/config/defaults.d.ts.map +1 -1
  480. package/dist/config/defaults.js +23 -5
  481. package/dist/config/defaults.js.map +1 -1
  482. package/dist/config/find.d.ts +4 -0
  483. package/dist/config/find.d.ts.map +1 -1
  484. package/dist/config/find.js +40 -44
  485. package/dist/config/find.js.map +1 -1
  486. package/dist/config/sanitize.d.ts +1 -1
  487. package/dist/config/sanitize.d.ts.map +1 -1
  488. package/dist/config/sanitize.js +86 -15
  489. package/dist/config/sanitize.js.map +1 -1
  490. package/dist/config/types.d.ts +497 -166
  491. package/dist/config/types.d.ts.map +1 -1
  492. package/dist/config/types.js +7 -13
  493. package/dist/config/types.js.map +1 -1
  494. package/dist/database/combineQueries.d.ts +1 -1
  495. package/dist/database/combineQueries.d.ts.map +1 -1
  496. package/dist/database/combineQueries.js +9 -3
  497. package/dist/database/combineQueries.js.map +1 -1
  498. package/dist/database/createDatabaseAdapter.d.ts.map +1 -1
  499. package/dist/database/createDatabaseAdapter.js +1 -1
  500. package/dist/database/createDatabaseAdapter.js.map +1 -1
  501. package/dist/database/defaultBeginTransaction.d.ts +6 -0
  502. package/dist/database/defaultBeginTransaction.d.ts.map +1 -0
  503. package/dist/database/defaultBeginTransaction.js +8 -0
  504. package/dist/database/defaultBeginTransaction.js.map +1 -0
  505. package/dist/database/flattenWhereToOperators.js.map +1 -1
  506. package/dist/database/getLocalizedPaths.d.ts.map +1 -1
  507. package/dist/database/getLocalizedPaths.js +5 -4
  508. package/dist/database/getLocalizedPaths.js.map +1 -1
  509. package/dist/database/migrations/createMigration.d.ts.map +1 -1
  510. package/dist/database/migrations/createMigration.js +6 -2
  511. package/dist/database/migrations/createMigration.js.map +1 -1
  512. package/dist/database/migrations/getMigrations.js.map +1 -1
  513. package/dist/database/migrations/getPredefinedMigration.d.ts +12 -0
  514. package/dist/database/migrations/getPredefinedMigration.d.ts.map +1 -0
  515. package/dist/database/migrations/getPredefinedMigration.js +41 -0
  516. package/dist/database/migrations/getPredefinedMigration.js.map +1 -0
  517. package/dist/database/migrations/migrate.d.ts +1 -1
  518. package/dist/database/migrations/migrate.d.ts.map +1 -1
  519. package/dist/database/migrations/migrate.js +5 -5
  520. package/dist/database/migrations/migrate.js.map +1 -1
  521. package/dist/database/migrations/migrateDown.d.ts.map +1 -1
  522. package/dist/database/migrations/migrateDown.js +1 -1
  523. package/dist/database/migrations/migrateDown.js.map +1 -1
  524. package/dist/database/migrations/migrateRefresh.d.ts.map +1 -1
  525. package/dist/database/migrations/migrateRefresh.js +1 -1
  526. package/dist/database/migrations/migrateRefresh.js.map +1 -1
  527. package/dist/database/migrations/migrateReset.d.ts.map +1 -1
  528. package/dist/database/migrations/migrateReset.js +1 -1
  529. package/dist/database/migrations/migrateReset.js.map +1 -1
  530. package/dist/database/migrations/migrateStatus.js +0 -1
  531. package/dist/database/migrations/migrateStatus.js.map +1 -1
  532. package/dist/database/migrations/migrationTemplate.js.map +1 -1
  533. package/dist/database/migrations/migrationsCollection.js.map +1 -1
  534. package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
  535. package/dist/database/migrations/readMigrationFiles.js +6 -3
  536. package/dist/database/migrations/readMigrationFiles.js.map +1 -1
  537. package/dist/database/migrations/writeMigrationIndex.d.ts +4 -0
  538. package/dist/database/migrations/writeMigrationIndex.d.ts.map +1 -0
  539. package/dist/database/migrations/writeMigrationIndex.js +32 -0
  540. package/dist/database/migrations/writeMigrationIndex.js.map +1 -0
  541. package/dist/database/queryValidation/types.js.map +1 -1
  542. package/dist/database/queryValidation/validateQueryPaths.d.ts.map +1 -1
  543. package/dist/database/queryValidation/validateQueryPaths.js +4 -4
  544. package/dist/database/queryValidation/validateQueryPaths.js.map +1 -1
  545. package/dist/database/queryValidation/validateSearchParams.d.ts.map +1 -1
  546. package/dist/database/queryValidation/validateSearchParams.js +7 -5
  547. package/dist/database/queryValidation/validateSearchParams.js.map +1 -1
  548. package/dist/database/types.d.ts +71 -30
  549. package/dist/database/types.d.ts.map +1 -1
  550. package/dist/database/types.js.map +1 -1
  551. package/dist/email/consoleEmailAdapter.d.ts +3 -0
  552. package/dist/email/consoleEmailAdapter.d.ts.map +1 -0
  553. package/dist/email/consoleEmailAdapter.js +17 -0
  554. package/dist/email/consoleEmailAdapter.js.map +1 -0
  555. package/dist/email/defaults.d.ts +2 -2
  556. package/dist/email/defaults.d.ts.map +1 -1
  557. package/dist/email/defaults.js +3 -3
  558. package/dist/email/defaults.js.map +1 -1
  559. package/dist/email/getStringifiedToAddress.d.ts +3 -0
  560. package/dist/email/getStringifiedToAddress.d.ts.map +1 -0
  561. package/dist/email/getStringifiedToAddress.js +20 -0
  562. package/dist/email/getStringifiedToAddress.js.map +1 -0
  563. package/dist/email/sendEmail.d.ts +3 -2
  564. package/dist/email/sendEmail.d.ts.map +1 -1
  565. package/dist/email/sendEmail.js +8 -4
  566. package/dist/email/sendEmail.js.map +1 -1
  567. package/dist/email/types.d.ts +26 -18
  568. package/dist/email/types.d.ts.map +1 -1
  569. package/dist/email/types.js +5 -1
  570. package/dist/email/types.js.map +1 -1
  571. package/dist/errors/APIError.d.ts +3 -2
  572. package/dist/errors/APIError.d.ts.map +1 -1
  573. package/dist/errors/APIError.js +9 -4
  574. package/dist/errors/APIError.js.map +1 -1
  575. package/dist/errors/AuthenticationError.d.ts +3 -4
  576. package/dist/errors/AuthenticationError.d.ts.map +1 -1
  577. package/dist/errors/AuthenticationError.js +4 -5
  578. package/dist/errors/AuthenticationError.js.map +1 -1
  579. package/dist/errors/DuplicateCollection.d.ts +2 -3
  580. package/dist/errors/DuplicateCollection.d.ts.map +1 -1
  581. package/dist/errors/DuplicateCollection.js +2 -3
  582. package/dist/errors/DuplicateCollection.js.map +1 -1
  583. package/dist/errors/DuplicateFieldName.d.ts +2 -3
  584. package/dist/errors/DuplicateFieldName.d.ts.map +1 -1
  585. package/dist/errors/DuplicateFieldName.js +2 -3
  586. package/dist/errors/DuplicateFieldName.js.map +1 -1
  587. package/dist/errors/DuplicateGlobal.d.ts +2 -3
  588. package/dist/errors/DuplicateGlobal.d.ts.map +1 -1
  589. package/dist/errors/DuplicateGlobal.js +2 -3
  590. package/dist/errors/DuplicateGlobal.js.map +1 -1
  591. package/dist/errors/ErrorDeletingFile.d.ts +2 -3
  592. package/dist/errors/ErrorDeletingFile.d.ts.map +1 -1
  593. package/dist/errors/ErrorDeletingFile.js +2 -3
  594. package/dist/errors/ErrorDeletingFile.js.map +1 -1
  595. package/dist/errors/FileRetrievalError.d.ts +6 -0
  596. package/dist/errors/FileRetrievalError.d.ts.map +1 -0
  597. package/dist/errors/FileRetrievalError.js +13 -0
  598. package/dist/errors/FileRetrievalError.js.map +1 -0
  599. package/dist/errors/FileUploadError.d.ts +2 -3
  600. package/dist/errors/FileUploadError.d.ts.map +1 -1
  601. package/dist/errors/FileUploadError.js +2 -3
  602. package/dist/errors/FileUploadError.js.map +1 -1
  603. package/dist/errors/Forbidden.d.ts +2 -3
  604. package/dist/errors/Forbidden.d.ts.map +1 -1
  605. package/dist/errors/Forbidden.js +2 -3
  606. package/dist/errors/Forbidden.js.map +1 -1
  607. package/dist/errors/InvalidConfiguration.d.ts +2 -3
  608. package/dist/errors/InvalidConfiguration.d.ts.map +1 -1
  609. package/dist/errors/InvalidConfiguration.js +2 -3
  610. package/dist/errors/InvalidConfiguration.js.map +1 -1
  611. package/dist/errors/InvalidFieldJoin.d.ts +6 -0
  612. package/dist/errors/InvalidFieldJoin.d.ts.map +1 -0
  613. package/dist/errors/InvalidFieldJoin.js +8 -0
  614. package/dist/errors/InvalidFieldJoin.js.map +1 -0
  615. package/dist/errors/InvalidFieldName.d.ts +2 -3
  616. package/dist/errors/InvalidFieldName.d.ts.map +1 -1
  617. package/dist/errors/InvalidFieldName.js +2 -3
  618. package/dist/errors/InvalidFieldName.js.map +1 -1
  619. package/dist/errors/InvalidFieldRelationship.d.ts +2 -3
  620. package/dist/errors/InvalidFieldRelationship.d.ts.map +1 -1
  621. package/dist/errors/InvalidFieldRelationship.js +2 -3
  622. package/dist/errors/InvalidFieldRelationship.js.map +1 -1
  623. package/dist/errors/InvalidSchema.d.ts +2 -3
  624. package/dist/errors/InvalidSchema.d.ts.map +1 -1
  625. package/dist/errors/InvalidSchema.js +2 -3
  626. package/dist/errors/InvalidSchema.js.map +1 -1
  627. package/dist/errors/Locked.d.ts +5 -0
  628. package/dist/errors/Locked.d.ts.map +1 -0
  629. package/dist/errors/Locked.js +9 -0
  630. package/dist/errors/Locked.js.map +1 -0
  631. package/dist/errors/LockedAuth.d.ts +2 -3
  632. package/dist/errors/LockedAuth.d.ts.map +1 -1
  633. package/dist/errors/LockedAuth.js +2 -3
  634. package/dist/errors/LockedAuth.js.map +1 -1
  635. package/dist/errors/MissingCollectionLabel.d.ts +2 -3
  636. package/dist/errors/MissingCollectionLabel.d.ts.map +1 -1
  637. package/dist/errors/MissingCollectionLabel.js +2 -3
  638. package/dist/errors/MissingCollectionLabel.js.map +1 -1
  639. package/dist/errors/MissingEditorProp.d.ts +2 -3
  640. package/dist/errors/MissingEditorProp.d.ts.map +1 -1
  641. package/dist/errors/MissingEditorProp.js +3 -4
  642. package/dist/errors/MissingEditorProp.js.map +1 -1
  643. package/dist/errors/MissingFieldInputOptions.d.ts +2 -3
  644. package/dist/errors/MissingFieldInputOptions.d.ts.map +1 -1
  645. package/dist/errors/MissingFieldInputOptions.js +2 -3
  646. package/dist/errors/MissingFieldInputOptions.js.map +1 -1
  647. package/dist/errors/MissingFieldType.d.ts +2 -3
  648. package/dist/errors/MissingFieldType.d.ts.map +1 -1
  649. package/dist/errors/MissingFieldType.js +2 -3
  650. package/dist/errors/MissingFieldType.js.map +1 -1
  651. package/dist/errors/MissingFile.d.ts +2 -3
  652. package/dist/errors/MissingFile.d.ts.map +1 -1
  653. package/dist/errors/MissingFile.js +2 -3
  654. package/dist/errors/MissingFile.js.map +1 -1
  655. package/dist/errors/NotFound.d.ts +2 -3
  656. package/dist/errors/NotFound.d.ts.map +1 -1
  657. package/dist/errors/NotFound.js +2 -3
  658. package/dist/errors/NotFound.js.map +1 -1
  659. package/dist/errors/QueryError.d.ts +2 -3
  660. package/dist/errors/QueryError.d.ts.map +1 -1
  661. package/dist/errors/QueryError.js +2 -3
  662. package/dist/errors/QueryError.js.map +1 -1
  663. package/dist/errors/ReservedFieldName.d.ts +6 -0
  664. package/dist/errors/ReservedFieldName.d.ts.map +1 -0
  665. package/dist/errors/ReservedFieldName.js +8 -0
  666. package/dist/errors/ReservedFieldName.js.map +1 -0
  667. package/dist/errors/TimestampsRequired.d.ts +2 -3
  668. package/dist/errors/TimestampsRequired.d.ts.map +1 -1
  669. package/dist/errors/TimestampsRequired.js +2 -3
  670. package/dist/errors/TimestampsRequired.js.map +1 -1
  671. package/dist/errors/UnathorizedError.d.ts +2 -3
  672. package/dist/errors/UnathorizedError.d.ts.map +1 -1
  673. package/dist/errors/UnathorizedError.js +2 -3
  674. package/dist/errors/UnathorizedError.js.map +1 -1
  675. package/dist/errors/ValidationError.d.ts +14 -7
  676. package/dist/errors/ValidationError.d.ts.map +1 -1
  677. package/dist/errors/ValidationError.js +8 -6
  678. package/dist/errors/ValidationError.js.map +1 -1
  679. package/dist/errors/index.d.ts +24 -19
  680. package/dist/errors/index.d.ts.map +1 -1
  681. package/dist/errors/index.js +23 -19
  682. package/dist/errors/index.js.map +1 -1
  683. package/dist/errors/types.js.map +1 -1
  684. package/dist/exports/components/utilities.js.map +1 -1
  685. package/dist/exports/i18n/ar.js.map +1 -1
  686. package/dist/exports/i18n/az.js.map +1 -1
  687. package/dist/exports/i18n/bg.js.map +1 -1
  688. package/dist/exports/i18n/cs.js.map +1 -1
  689. package/dist/exports/i18n/da.d.ts +2 -0
  690. package/dist/exports/i18n/da.d.ts.map +1 -0
  691. package/dist/exports/i18n/da.js +3 -0
  692. package/dist/exports/i18n/da.js.map +1 -0
  693. package/dist/exports/i18n/de.js.map +1 -1
  694. package/dist/exports/i18n/en.js.map +1 -1
  695. package/dist/exports/i18n/es.js.map +1 -1
  696. package/dist/exports/i18n/fa.js.map +1 -1
  697. package/dist/exports/i18n/fr.js.map +1 -1
  698. package/dist/exports/i18n/he.d.ts +2 -0
  699. package/dist/exports/i18n/he.d.ts.map +1 -0
  700. package/dist/exports/i18n/he.js +3 -0
  701. package/dist/exports/i18n/he.js.map +1 -0
  702. package/dist/exports/i18n/hr.js.map +1 -1
  703. package/dist/exports/i18n/hu.js.map +1 -1
  704. package/dist/exports/i18n/it.js.map +1 -1
  705. package/dist/exports/i18n/ja.js.map +1 -1
  706. package/dist/exports/i18n/ko.js.map +1 -1
  707. package/dist/exports/i18n/my.js.map +1 -1
  708. package/dist/exports/i18n/nb.js.map +1 -1
  709. package/dist/exports/i18n/nl.js.map +1 -1
  710. package/dist/exports/i18n/pl.js.map +1 -1
  711. package/dist/exports/i18n/pt.js.map +1 -1
  712. package/dist/exports/i18n/ro.js.map +1 -1
  713. package/dist/exports/i18n/rs.js.map +1 -1
  714. package/dist/exports/i18n/rsLatin.js.map +1 -1
  715. package/dist/exports/i18n/ru.js.map +1 -1
  716. package/dist/exports/i18n/sv.js.map +1 -1
  717. package/dist/exports/i18n/th.js.map +1 -1
  718. package/dist/exports/i18n/tr.js.map +1 -1
  719. package/dist/exports/i18n/uk.js.map +1 -1
  720. package/dist/exports/i18n/vi.js.map +1 -1
  721. package/dist/exports/i18n/zh.js.map +1 -1
  722. package/dist/exports/i18n/zhTw.js.map +1 -1
  723. package/dist/exports/node.d.ts +5 -1
  724. package/dist/exports/node.d.ts.map +1 -1
  725. package/dist/exports/node.js +5 -2
  726. package/dist/exports/node.js.map +1 -1
  727. package/dist/exports/shared.d.ts +25 -0
  728. package/dist/exports/shared.d.ts.map +1 -0
  729. package/dist/exports/shared.js +26 -0
  730. package/dist/exports/shared.js.map +1 -0
  731. package/dist/fields/baseFields/baseBlockFields.js.map +1 -1
  732. package/dist/fields/baseFields/baseIDField.d.ts.map +1 -1
  733. package/dist/fields/baseFields/baseIDField.js +5 -0
  734. package/dist/fields/baseFields/baseIDField.js.map +1 -1
  735. package/dist/fields/config/client.d.ts +4 -1288
  736. package/dist/fields/config/client.d.ts.map +1 -1
  737. package/dist/fields/config/client.js +1 -77
  738. package/dist/fields/config/client.js.map +1 -1
  739. package/dist/fields/config/sanitize.d.ts +15 -2
  740. package/dist/fields/config/sanitize.d.ts.map +1 -1
  741. package/dist/fields/config/sanitize.js +135 -62
  742. package/dist/fields/config/sanitize.js.map +1 -1
  743. package/dist/fields/config/sanitize.spec.js +130 -139
  744. package/dist/fields/config/sanitize.spec.js.map +1 -1
  745. package/dist/fields/config/sanitizeJoinField.d.ts +10 -0
  746. package/dist/fields/config/sanitizeJoinField.d.ts.map +1 -0
  747. package/dist/fields/config/sanitizeJoinField.js +68 -0
  748. package/dist/fields/config/sanitizeJoinField.js.map +1 -0
  749. package/dist/fields/config/types.d.ts +810 -220
  750. package/dist/fields/config/types.d.ts.map +1 -1
  751. package/dist/fields/config/types.js +9 -3
  752. package/dist/fields/config/types.js.map +1 -1
  753. package/dist/fields/getDefaultValue.d.ts +5 -5
  754. package/dist/fields/getDefaultValue.d.ts.map +1 -1
  755. package/dist/fields/getDefaultValue.js +4 -6
  756. package/dist/fields/getDefaultValue.js.map +1 -1
  757. package/dist/fields/getFieldPaths.d.ts +10 -0
  758. package/dist/fields/getFieldPaths.d.ts.map +1 -0
  759. package/dist/fields/getFieldPaths.js +45 -0
  760. package/dist/fields/getFieldPaths.js.map +1 -0
  761. package/dist/fields/hooks/afterChange/index.d.ts +14 -8
  762. package/dist/fields/hooks/afterChange/index.d.ts.map +1 -1
  763. package/dist/fields/hooks/afterChange/index.js +4 -2
  764. package/dist/fields/hooks/afterChange/index.js.map +1 -1
  765. package/dist/fields/hooks/afterChange/promise.d.ts +18 -10
  766. package/dist/fields/hooks/afterChange/promise.d.ts.map +1 -1
  767. package/dist/fields/hooks/afterChange/promise.js +71 -7
  768. package/dist/fields/hooks/afterChange/promise.js.map +1 -1
  769. package/dist/fields/hooks/afterChange/traverseFields.d.ts +12 -10
  770. package/dist/fields/hooks/afterChange/traverseFields.d.ts.map +1 -1
  771. package/dist/fields/hooks/afterChange/traverseFields.js +3 -1
  772. package/dist/fields/hooks/afterChange/traverseFields.js.map +1 -1
  773. package/dist/fields/hooks/afterRead/index.d.ts +8 -7
  774. package/dist/fields/hooks/afterRead/index.d.ts.map +1 -1
  775. package/dist/fields/hooks/afterRead/index.js +10 -5
  776. package/dist/fields/hooks/afterRead/index.js.map +1 -1
  777. package/dist/fields/hooks/afterRead/promise.d.ts +18 -6
  778. package/dist/fields/hooks/afterRead/promise.d.ts.map +1 -1
  779. package/dist/fields/hooks/afterRead/promise.js +163 -40
  780. package/dist/fields/hooks/afterRead/promise.js.map +1 -1
  781. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts +4 -3
  782. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts.map +1 -1
  783. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +42 -29
  784. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js.map +1 -1
  785. package/dist/fields/hooks/afterRead/traverseFields.d.ts +12 -6
  786. package/dist/fields/hooks/afterRead/traverseFields.d.ts.map +1 -1
  787. package/dist/fields/hooks/afterRead/traverseFields.js +4 -1
  788. package/dist/fields/hooks/afterRead/traverseFields.js.map +1 -1
  789. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.d.ts +2 -1
  790. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.d.ts.map +1 -1
  791. package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.js.map +1 -1
  792. package/dist/fields/hooks/beforeChange/getExistingRowDoc.d.ts +2 -1
  793. package/dist/fields/hooks/beforeChange/getExistingRowDoc.d.ts.map +1 -1
  794. package/dist/fields/hooks/beforeChange/getExistingRowDoc.js +6 -2
  795. package/dist/fields/hooks/beforeChange/getExistingRowDoc.js.map +1 -1
  796. package/dist/fields/hooks/beforeChange/index.d.ts +9 -12
  797. package/dist/fields/hooks/beforeChange/index.d.ts.map +1 -1
  798. package/dist/fields/hooks/beforeChange/index.js +12 -8
  799. package/dist/fields/hooks/beforeChange/index.js.map +1 -1
  800. package/dist/fields/hooks/beforeChange/promise.d.ts +18 -12
  801. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  802. package/dist/fields/hooks/beforeChange/promise.js +105 -42
  803. package/dist/fields/hooks/beforeChange/promise.js.map +1 -1
  804. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +25 -13
  805. package/dist/fields/hooks/beforeChange/traverseFields.d.ts.map +1 -1
  806. package/dist/fields/hooks/beforeChange/traverseFields.js +4 -4
  807. package/dist/fields/hooks/beforeChange/traverseFields.js.map +1 -1
  808. package/dist/fields/hooks/beforeDuplicate/index.d.ts +19 -0
  809. package/dist/fields/hooks/beforeDuplicate/index.d.ts.map +1 -0
  810. package/dist/fields/hooks/beforeDuplicate/index.js +25 -0
  811. package/dist/fields/hooks/beforeDuplicate/index.js.map +1 -0
  812. package/dist/fields/hooks/beforeDuplicate/promise.d.ts +18 -0
  813. package/dist/fields/hooks/beforeDuplicate/promise.d.ts.map +1 -0
  814. package/dist/fields/hooks/beforeDuplicate/promise.js +300 -0
  815. package/dist/fields/hooks/beforeDuplicate/promise.js.map +1 -0
  816. package/dist/fields/hooks/beforeDuplicate/runHook.d.ts +3 -0
  817. package/dist/fields/hooks/beforeDuplicate/runHook.d.ts.map +1 -0
  818. package/dist/fields/hooks/beforeDuplicate/runHook.js +6 -0
  819. package/dist/fields/hooks/beforeDuplicate/runHook.js.map +1 -0
  820. package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts +18 -0
  821. package/dist/fields/hooks/beforeDuplicate/traverseFields.d.ts.map +1 -0
  822. package/dist/fields/hooks/beforeDuplicate/traverseFields.js +21 -0
  823. package/dist/fields/hooks/beforeDuplicate/traverseFields.js.map +1 -0
  824. package/dist/fields/hooks/beforeValidate/index.d.ts +7 -7
  825. package/dist/fields/hooks/beforeValidate/index.d.ts.map +1 -1
  826. package/dist/fields/hooks/beforeValidate/index.js +4 -2
  827. package/dist/fields/hooks/beforeValidate/index.js.map +1 -1
  828. package/dist/fields/hooks/beforeValidate/promise.d.ts +14 -6
  829. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  830. package/dist/fields/hooks/beforeValidate/promise.js +123 -34
  831. package/dist/fields/hooks/beforeValidate/promise.js.map +1 -1
  832. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +14 -6
  833. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  834. package/dist/fields/hooks/beforeValidate/traverseFields.js +3 -1
  835. package/dist/fields/hooks/beforeValidate/traverseFields.js.map +1 -1
  836. package/dist/fields/mergeBaseFields.d.ts.map +1 -1
  837. package/dist/fields/mergeBaseFields.js +2 -2
  838. package/dist/fields/mergeBaseFields.js.map +1 -1
  839. package/dist/fields/setDefaultBeforeDuplicate.js.map +1 -1
  840. package/dist/fields/sortableFieldTypes.js.map +1 -1
  841. package/dist/fields/validations.d.ts +77 -63
  842. package/dist/fields/validations.d.ts.map +1 -1
  843. package/dist/fields/validations.js +207 -33
  844. package/dist/fields/validations.js.map +1 -1
  845. package/dist/fields/validations.spec.js +16 -15
  846. package/dist/fields/validations.spec.js.map +1 -1
  847. package/dist/globals/config/client.d.ts +30 -18
  848. package/dist/globals/config/client.d.ts.map +1 -1
  849. package/dist/globals/config/client.js +1 -46
  850. package/dist/globals/config/client.js.map +1 -1
  851. package/dist/globals/config/sanitize.d.ts +2 -3
  852. package/dist/globals/config/sanitize.d.ts.map +1 -1
  853. package/dist/globals/config/sanitize.js +81 -45
  854. package/dist/globals/config/sanitize.js.map +1 -1
  855. package/dist/globals/config/types.d.ts +21 -12
  856. package/dist/globals/config/types.d.ts.map +1 -1
  857. package/dist/globals/config/types.js.map +1 -1
  858. package/dist/globals/operations/docAccess.d.ts.map +1 -1
  859. package/dist/globals/operations/docAccess.js +3 -1
  860. package/dist/globals/operations/docAccess.js.map +1 -1
  861. package/dist/globals/operations/findOne.d.ts +1 -0
  862. package/dist/globals/operations/findOne.d.ts.map +1 -1
  863. package/dist/globals/operations/findOne.js +29 -8
  864. package/dist/globals/operations/findOne.js.map +1 -1
  865. package/dist/globals/operations/findVersionByID.d.ts.map +1 -1
  866. package/dist/globals/operations/findVersionByID.js +16 -13
  867. package/dist/globals/operations/findVersionByID.js.map +1 -1
  868. package/dist/globals/operations/findVersions.d.ts +1 -0
  869. package/dist/globals/operations/findVersions.d.ts.map +1 -1
  870. package/dist/globals/operations/findVersions.js +4 -6
  871. package/dist/globals/operations/findVersions.js.map +1 -1
  872. package/dist/globals/operations/local/findOne.d.ts +8 -6
  873. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  874. package/dist/globals/operations/local/findOne.js +2 -1
  875. package/dist/globals/operations/local/findOne.js.map +1 -1
  876. package/dist/globals/operations/local/findVersionByID.d.ts +7 -6
  877. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  878. package/dist/globals/operations/local/findVersionByID.js.map +1 -1
  879. package/dist/globals/operations/local/findVersions.d.ts +7 -6
  880. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  881. package/dist/globals/operations/local/findVersions.js.map +1 -1
  882. package/dist/globals/operations/local/index.js.map +1 -1
  883. package/dist/globals/operations/local/restoreVersion.d.ts +7 -6
  884. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  885. package/dist/globals/operations/local/restoreVersion.js.map +1 -1
  886. package/dist/globals/operations/local/update.d.ts +9 -6
  887. package/dist/globals/operations/local/update.d.ts.map +1 -1
  888. package/dist/globals/operations/local/update.js +3 -1
  889. package/dist/globals/operations/local/update.js.map +1 -1
  890. package/dist/globals/operations/restoreVersion.d.ts +1 -0
  891. package/dist/globals/operations/restoreVersion.d.ts.map +1 -1
  892. package/dist/globals/operations/restoreVersion.js +19 -2
  893. package/dist/globals/operations/restoreVersion.js.map +1 -1
  894. package/dist/globals/operations/update.d.ts +7 -7
  895. package/dist/globals/operations/update.d.ts.map +1 -1
  896. package/dist/globals/operations/update.js +55 -10
  897. package/dist/globals/operations/update.js.map +1 -1
  898. package/dist/index.d.ts +238 -56
  899. package/dist/index.d.ts.map +1 -1
  900. package/dist/index.js +213 -30
  901. package/dist/index.js.map +1 -1
  902. package/dist/lockedDocuments/lockedDocumentsCollection.d.ts +4 -0
  903. package/dist/lockedDocuments/lockedDocumentsCollection.d.ts.map +1 -0
  904. package/dist/lockedDocuments/lockedDocumentsCollection.js +31 -0
  905. package/dist/lockedDocuments/lockedDocumentsCollection.js.map +1 -0
  906. package/dist/preferences/deleteUserPreferences.js.map +1 -1
  907. package/dist/preferences/operations/delete.d.ts +1 -2
  908. package/dist/preferences/operations/delete.d.ts.map +1 -1
  909. package/dist/preferences/operations/delete.js +4 -12
  910. package/dist/preferences/operations/delete.js.map +1 -1
  911. package/dist/preferences/operations/findOne.d.ts +2 -3
  912. package/dist/preferences/operations/findOne.d.ts.map +1 -1
  913. package/dist/preferences/operations/findOne.js +9 -4
  914. package/dist/preferences/operations/findOne.js.map +1 -1
  915. package/dist/preferences/operations/update.d.ts +1 -9
  916. package/dist/preferences/operations/update.d.ts.map +1 -1
  917. package/dist/preferences/operations/update.js +27 -37
  918. package/dist/preferences/operations/update.js.map +1 -1
  919. package/dist/preferences/preferencesCollection.js.map +1 -1
  920. package/dist/preferences/requestHandlers/delete.d.ts.map +1 -1
  921. package/dist/preferences/requestHandlers/delete.js +19 -6
  922. package/dist/preferences/requestHandlers/delete.js.map +1 -1
  923. package/dist/preferences/requestHandlers/findOne.d.ts.map +1 -1
  924. package/dist/preferences/requestHandlers/findOne.js +19 -6
  925. package/dist/preferences/requestHandlers/findOne.js.map +1 -1
  926. package/dist/preferences/requestHandlers/update.d.ts.map +1 -1
  927. package/dist/preferences/requestHandlers/update.js +20 -8
  928. package/dist/preferences/requestHandlers/update.js.map +1 -1
  929. package/dist/preferences/types.d.ts +2 -2
  930. package/dist/preferences/types.d.ts.map +1 -1
  931. package/dist/preferences/types.js.map +1 -1
  932. package/dist/translations/getLocalI18n.d.ts +1 -1
  933. package/dist/translations/getLocalI18n.d.ts.map +1 -1
  934. package/dist/translations/getLocalI18n.js +1 -1
  935. package/dist/translations/getLocalI18n.js.map +1 -1
  936. package/dist/types/constants.js.map +1 -1
  937. package/dist/types/index.d.ts +53 -34
  938. package/dist/types/index.d.ts.map +1 -1
  939. package/dist/types/index.js.map +1 -1
  940. package/dist/uploads/canResizeImage.d.ts +1 -1
  941. package/dist/uploads/canResizeImage.d.ts.map +1 -1
  942. package/dist/uploads/canResizeImage.js +1 -1
  943. package/dist/uploads/canResizeImage.js.map +1 -1
  944. package/dist/uploads/cropImage.d.ts +22 -6
  945. package/dist/uploads/cropImage.d.ts.map +1 -1
  946. package/dist/uploads/cropImage.js +20 -5
  947. package/dist/uploads/cropImage.js.map +1 -1
  948. package/dist/uploads/deleteAssociatedFiles.d.ts.map +1 -1
  949. package/dist/uploads/deleteAssociatedFiles.js +3 -3
  950. package/dist/uploads/deleteAssociatedFiles.js.map +1 -1
  951. package/dist/uploads/docWithFilenameExists.d.ts.map +1 -1
  952. package/dist/uploads/docWithFilenameExists.js +3 -1
  953. package/dist/uploads/docWithFilenameExists.js.map +1 -1
  954. package/dist/uploads/fileExists.d.ts.map +1 -1
  955. package/dist/uploads/fileExists.js.map +1 -1
  956. package/dist/uploads/formatFilesize.d.ts.map +1 -1
  957. package/dist/uploads/formatFilesize.js +3 -1
  958. package/dist/uploads/formatFilesize.js.map +1 -1
  959. package/dist/uploads/generateFileData.d.ts +3 -1
  960. package/dist/uploads/generateFileData.d.ts.map +1 -1
  961. package/dist/uploads/generateFileData.js +104 -36
  962. package/dist/uploads/generateFileData.js.map +1 -1
  963. package/dist/uploads/getBaseFields.d.ts.map +1 -1
  964. package/dist/uploads/getBaseFields.js +32 -6
  965. package/dist/uploads/getBaseFields.js.map +1 -1
  966. package/dist/uploads/getExternalFile.d.ts +1 -1
  967. package/dist/uploads/getExternalFile.d.ts.map +1 -1
  968. package/dist/uploads/getExternalFile.js +9 -4
  969. package/dist/uploads/getExternalFile.js.map +1 -1
  970. package/dist/uploads/getFileByPath.d.ts +2 -2
  971. package/dist/uploads/getFileByPath.d.ts.map +1 -1
  972. package/dist/uploads/getFileByPath.js +2 -3
  973. package/dist/uploads/getFileByPath.js.map +1 -1
  974. package/dist/uploads/getImageSize.js.map +1 -1
  975. package/dist/uploads/getSafeFilename.d.ts +2 -2
  976. package/dist/uploads/getSafeFilename.d.ts.map +1 -1
  977. package/dist/uploads/getSafeFilename.js +1 -3
  978. package/dist/uploads/getSafeFilename.js.map +1 -1
  979. package/dist/uploads/imageResizer.d.ts +11 -11
  980. package/dist/uploads/imageResizer.d.ts.map +1 -1
  981. package/dist/uploads/imageResizer.js +208 -116
  982. package/dist/uploads/imageResizer.js.map +1 -1
  983. package/dist/uploads/isImage.d.ts +1 -1
  984. package/dist/uploads/isImage.d.ts.map +1 -1
  985. package/dist/uploads/isImage.js +1 -1
  986. package/dist/uploads/isImage.js.map +1 -1
  987. package/dist/uploads/mimeTypeValidator.js.map +1 -1
  988. package/dist/uploads/mimeTypeValidator.spec.js.map +1 -1
  989. package/dist/uploads/optionallyAppendMetadata.d.ts +12 -0
  990. package/dist/uploads/optionallyAppendMetadata.d.ts.map +1 -0
  991. package/dist/uploads/optionallyAppendMetadata.js +17 -0
  992. package/dist/uploads/optionallyAppendMetadata.js.map +1 -0
  993. package/dist/uploads/saveBufferToFile.d.ts +0 -1
  994. package/dist/uploads/saveBufferToFile.d.ts.map +1 -1
  995. package/dist/uploads/saveBufferToFile.js.map +1 -1
  996. package/dist/uploads/tempFile.js.map +1 -1
  997. package/dist/uploads/types.d.ts +141 -13
  998. package/dist/uploads/types.d.ts.map +1 -1
  999. package/dist/uploads/types.js.map +1 -1
  1000. package/dist/uploads/unlinkTempFiles.js.map +1 -1
  1001. package/dist/uploads/uploadFiles.d.ts.map +1 -1
  1002. package/dist/uploads/uploadFiles.js.map +1 -1
  1003. package/dist/utilities/checkDocumentLockStatus.d.ts +13 -0
  1004. package/dist/utilities/checkDocumentLockStatus.d.ts.map +1 -0
  1005. package/dist/utilities/checkDocumentLockStatus.js +66 -0
  1006. package/dist/utilities/checkDocumentLockStatus.js.map +1 -0
  1007. package/dist/utilities/checkDuplicateCollections.js +1 -1
  1008. package/dist/utilities/checkDuplicateCollections.js.map +1 -1
  1009. package/dist/utilities/commitTransaction.js.map +1 -1
  1010. package/dist/utilities/configToJSONSchema.d.ts +1 -0
  1011. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  1012. package/dist/utilities/configToJSONSchema.js +287 -28
  1013. package/dist/utilities/configToJSONSchema.js.map +1 -1
  1014. package/dist/utilities/configToJSONSchema.spec.js +324 -10
  1015. package/dist/utilities/configToJSONSchema.spec.js.map +1 -1
  1016. package/dist/utilities/createArrayFromCommaDelineated.d.ts.map +1 -1
  1017. package/dist/utilities/createArrayFromCommaDelineated.js +3 -1
  1018. package/dist/utilities/createArrayFromCommaDelineated.js.map +1 -1
  1019. package/dist/utilities/createLocalReq.d.ts.map +1 -1
  1020. package/dist/utilities/createLocalReq.js +35 -15
  1021. package/dist/utilities/createLocalReq.js.map +1 -1
  1022. package/dist/utilities/deepCopyObject.d.ts +18 -1
  1023. package/dist/utilities/deepCopyObject.d.ts.map +1 -1
  1024. package/dist/utilities/deepCopyObject.js +157 -16
  1025. package/dist/utilities/deepCopyObject.js.map +1 -1
  1026. package/dist/utilities/deepMerge.d.ts +18 -1
  1027. package/dist/utilities/deepMerge.d.ts.map +1 -1
  1028. package/dist/utilities/deepMerge.js +38 -13
  1029. package/dist/utilities/deepMerge.js.map +1 -1
  1030. package/dist/utilities/dependencies/dependencyChecker.d.ts +30 -0
  1031. package/dist/utilities/dependencies/dependencyChecker.d.ts.map +1 -0
  1032. package/dist/utilities/dependencies/dependencyChecker.js +55 -0
  1033. package/dist/utilities/dependencies/dependencyChecker.js.map +1 -0
  1034. package/dist/utilities/dependencies/getDependencies.d.ts +9 -0
  1035. package/dist/utilities/dependencies/getDependencies.d.ts.map +1 -0
  1036. package/dist/utilities/dependencies/getDependencies.js +72 -0
  1037. package/dist/utilities/dependencies/getDependencies.js.map +1 -0
  1038. package/dist/utilities/dependencies/isError.d.ts +5 -0
  1039. package/dist/utilities/dependencies/isError.d.ts.map +1 -0
  1040. package/dist/utilities/dependencies/isError.js +19 -0
  1041. package/dist/utilities/dependencies/isError.js.map +1 -0
  1042. package/dist/utilities/dependencies/realPath.d.ts +3 -0
  1043. package/dist/utilities/dependencies/realPath.d.ts.map +1 -0
  1044. package/dist/utilities/dependencies/realPath.js +23 -0
  1045. package/dist/utilities/dependencies/realPath.js.map +1 -0
  1046. package/dist/utilities/dependencies/resolveFrom.d.ts +2 -0
  1047. package/dist/utilities/dependencies/resolveFrom.d.ts.map +1 -0
  1048. package/dist/utilities/dependencies/resolveFrom.js +58 -0
  1049. package/dist/utilities/dependencies/resolveFrom.js.map +1 -0
  1050. package/dist/utilities/dependencies/versionUtils.d.ts +20 -0
  1051. package/dist/utilities/dependencies/versionUtils.d.ts.map +1 -0
  1052. package/dist/utilities/dependencies/versionUtils.js +76 -0
  1053. package/dist/utilities/dependencies/versionUtils.js.map +1 -0
  1054. package/dist/utilities/fieldSchemaToJSON.d.ts +4 -4
  1055. package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -1
  1056. package/dist/utilities/fieldSchemaToJSON.js +0 -10
  1057. package/dist/utilities/fieldSchemaToJSON.js.map +1 -1
  1058. package/dist/utilities/findUp.d.ts +19 -0
  1059. package/dist/utilities/findUp.d.ts.map +1 -0
  1060. package/dist/utilities/findUp.js +102 -0
  1061. package/dist/utilities/findUp.js.map +1 -0
  1062. package/dist/utilities/flattenTopLevelFields.d.ts +4 -3
  1063. package/dist/utilities/flattenTopLevelFields.d.ts.map +1 -1
  1064. package/dist/utilities/flattenTopLevelFields.js +12 -7
  1065. package/dist/utilities/flattenTopLevelFields.js.map +1 -1
  1066. package/dist/utilities/formatLabels.js.map +1 -1
  1067. package/dist/utilities/formatLabels.spec.js.map +1 -1
  1068. package/dist/utilities/getCollectionIDFieldTypes.js.map +1 -1
  1069. package/dist/utilities/getDataByPath.d.ts +3 -0
  1070. package/dist/utilities/getDataByPath.d.ts.map +1 -0
  1071. package/dist/utilities/getDataByPath.js +18 -0
  1072. package/dist/utilities/getDataByPath.js.map +1 -0
  1073. package/dist/utilities/getEntityPolicies.d.ts.map +1 -1
  1074. package/dist/utilities/getEntityPolicies.js +21 -9
  1075. package/dist/utilities/getEntityPolicies.js.map +1 -1
  1076. package/dist/utilities/getObjectDotNotation.d.ts.map +1 -1
  1077. package/dist/utilities/getObjectDotNotation.js +3 -1
  1078. package/dist/utilities/getObjectDotNotation.js.map +1 -1
  1079. package/dist/utilities/getSiblingData.d.ts +3 -0
  1080. package/dist/utilities/getSiblingData.d.ts.map +1 -0
  1081. package/dist/utilities/getSiblingData.js +35 -0
  1082. package/dist/utilities/getSiblingData.js.map +1 -0
  1083. package/dist/utilities/getUniqueListBy.d.ts +1 -1
  1084. package/dist/utilities/getUniqueListBy.d.ts.map +1 -1
  1085. package/dist/utilities/getUniqueListBy.js +1 -1
  1086. package/dist/utilities/getUniqueListBy.js.map +1 -1
  1087. package/dist/utilities/initTransaction.d.ts.map +1 -1
  1088. package/dist/utilities/initTransaction.js +9 -10
  1089. package/dist/utilities/initTransaction.js.map +1 -1
  1090. package/dist/utilities/isEntityHidden.d.ts +2 -2
  1091. package/dist/utilities/isEntityHidden.js.map +1 -1
  1092. package/dist/utilities/isNumber.js.map +1 -1
  1093. package/dist/utilities/isPlainObject.d.ts +1 -1
  1094. package/dist/utilities/isPlainObject.d.ts.map +1 -1
  1095. package/dist/utilities/isPlainObject.js +4 -18
  1096. package/dist/utilities/isPlainObject.js.map +1 -1
  1097. package/dist/utilities/isReactComponent.d.ts +3 -4
  1098. package/dist/utilities/isReactComponent.d.ts.map +1 -1
  1099. package/dist/utilities/isReactComponent.js +17 -11
  1100. package/dist/utilities/isReactComponent.js.map +1 -1
  1101. package/dist/utilities/isValidID.d.ts +1 -1
  1102. package/dist/utilities/isValidID.d.ts.map +1 -1
  1103. package/dist/utilities/isValidID.js +3 -1
  1104. package/dist/utilities/isValidID.js.map +1 -1
  1105. package/dist/utilities/isolateObjectProperty.d.ts +1 -1
  1106. package/dist/utilities/isolateObjectProperty.d.ts.map +1 -1
  1107. package/dist/utilities/isolateObjectProperty.js +14 -5
  1108. package/dist/utilities/isolateObjectProperty.js.map +1 -1
  1109. package/dist/utilities/killTransaction.d.ts.map +1 -1
  1110. package/dist/utilities/killTransaction.js +6 -2
  1111. package/dist/utilities/killTransaction.js.map +1 -1
  1112. package/dist/utilities/logger.d.ts +10 -7
  1113. package/dist/utilities/logger.d.ts.map +1 -1
  1114. package/dist/utilities/logger.js +25 -20
  1115. package/dist/utilities/logger.js.map +1 -1
  1116. package/dist/utilities/mapAsync.js.map +1 -1
  1117. package/dist/utilities/mergeListSearchAndWhere.js.map +1 -1
  1118. package/dist/utilities/parseCookies.d.ts +1 -1
  1119. package/dist/utilities/parseCookies.d.ts.map +1 -1
  1120. package/dist/utilities/parseCookies.js +1 -1
  1121. package/dist/utilities/parseCookies.js.map +1 -1
  1122. package/dist/utilities/reduceFieldsToValues.d.ts +10 -0
  1123. package/dist/utilities/reduceFieldsToValues.d.ts.map +1 -0
  1124. package/dist/utilities/reduceFieldsToValues.js +24 -0
  1125. package/dist/utilities/reduceFieldsToValues.js.map +1 -0
  1126. package/dist/utilities/sanitizeInternalFields.d.ts.map +1 -1
  1127. package/dist/utilities/sanitizeInternalFields.js.map +1 -1
  1128. package/dist/utilities/setsAreEqual.d.ts.map +1 -1
  1129. package/dist/utilities/setsAreEqual.js.map +1 -1
  1130. package/dist/utilities/telemetry/conf/envPaths.d.ts +23 -0
  1131. package/dist/utilities/telemetry/conf/envPaths.d.ts.map +1 -0
  1132. package/dist/utilities/telemetry/conf/envPaths.js +70 -0
  1133. package/dist/utilities/telemetry/conf/envPaths.js.map +1 -0
  1134. package/dist/utilities/telemetry/conf/index.d.ts +84 -0
  1135. package/dist/utilities/telemetry/conf/index.d.ts.map +1 -0
  1136. package/dist/utilities/telemetry/conf/index.js +144 -0
  1137. package/dist/utilities/telemetry/conf/index.js.map +1 -0
  1138. package/dist/utilities/telemetry/events/adminInit.d.ts.map +1 -1
  1139. package/dist/utilities/telemetry/events/adminInit.js.map +1 -1
  1140. package/dist/utilities/telemetry/events/serverInit.d.ts.map +1 -1
  1141. package/dist/utilities/telemetry/events/serverInit.js.map +1 -1
  1142. package/dist/utilities/telemetry/index.d.ts +9 -0
  1143. package/dist/utilities/telemetry/index.d.ts.map +1 -1
  1144. package/dist/utilities/telemetry/index.js +63 -17
  1145. package/dist/utilities/telemetry/index.js.map +1 -1
  1146. package/dist/utilities/telemetry/oneWayHash.d.ts +0 -1
  1147. package/dist/utilities/telemetry/oneWayHash.d.ts.map +1 -1
  1148. package/dist/utilities/telemetry/oneWayHash.js.map +1 -1
  1149. package/dist/utilities/timestamp.d.ts.map +1 -1
  1150. package/dist/utilities/timestamp.js +3 -1
  1151. package/dist/utilities/timestamp.js.map +1 -1
  1152. package/dist/utilities/toKebabCase.js.map +1 -1
  1153. package/dist/utilities/traverseFields.d.ts +36 -0
  1154. package/dist/utilities/traverseFields.d.ts.map +1 -0
  1155. package/dist/utilities/traverseFields.js +81 -0
  1156. package/dist/utilities/traverseFields.js.map +1 -0
  1157. package/dist/utilities/unflatten.d.ts +9 -0
  1158. package/dist/utilities/unflatten.d.ts.map +1 -0
  1159. package/dist/utilities/unflatten.js +64 -0
  1160. package/dist/utilities/unflatten.js.map +1 -0
  1161. package/dist/utilities/wait.js.map +1 -1
  1162. package/dist/utilities/wordBoundariesRegex.js.map +1 -1
  1163. package/dist/versions/baseFields.d.ts +1 -0
  1164. package/dist/versions/baseFields.d.ts.map +1 -1
  1165. package/dist/versions/baseFields.js +16 -1
  1166. package/dist/versions/baseFields.js.map +1 -1
  1167. package/dist/versions/buildCollectionFields.d.ts +2 -1
  1168. package/dist/versions/buildCollectionFields.d.ts.map +1 -1
  1169. package/dist/versions/buildCollectionFields.js +27 -8
  1170. package/dist/versions/buildCollectionFields.js.map +1 -1
  1171. package/dist/versions/buildGlobalFields.d.ts +2 -1
  1172. package/dist/versions/buildGlobalFields.d.ts.map +1 -1
  1173. package/dist/versions/buildGlobalFields.js +27 -8
  1174. package/dist/versions/buildGlobalFields.js.map +1 -1
  1175. package/dist/versions/defaults.d.ts +4 -0
  1176. package/dist/versions/defaults.d.ts.map +1 -0
  1177. package/dist/versions/defaults.js +5 -0
  1178. package/dist/versions/defaults.js.map +1 -0
  1179. package/dist/versions/deleteCollectionVersions.d.ts.map +1 -1
  1180. package/dist/versions/deleteCollectionVersions.js.map +1 -1
  1181. package/dist/versions/drafts/appendVersionToQueryKey.js +1 -1
  1182. package/dist/versions/drafts/appendVersionToQueryKey.js.map +1 -1
  1183. package/dist/versions/drafts/getQueryDraftsSort.d.ts.map +1 -1
  1184. package/dist/versions/drafts/getQueryDraftsSort.js +6 -1
  1185. package/dist/versions/drafts/getQueryDraftsSort.js.map +1 -1
  1186. package/dist/versions/drafts/replaceWithDraftIfAvailable.d.ts.map +1 -1
  1187. package/dist/versions/drafts/replaceWithDraftIfAvailable.js +14 -4
  1188. package/dist/versions/drafts/replaceWithDraftIfAvailable.js.map +1 -1
  1189. package/dist/versions/enforceMaxVersions.d.ts.map +1 -1
  1190. package/dist/versions/enforceMaxVersions.js +3 -1
  1191. package/dist/versions/enforceMaxVersions.js.map +1 -1
  1192. package/dist/versions/getLatestCollectionVersion.d.ts +2 -1
  1193. package/dist/versions/getLatestCollectionVersion.d.ts.map +1 -1
  1194. package/dist/versions/getLatestCollectionVersion.js +38 -13
  1195. package/dist/versions/getLatestCollectionVersion.js.map +1 -1
  1196. package/dist/versions/getLatestGlobalVersion.d.ts +2 -1
  1197. package/dist/versions/getLatestGlobalVersion.d.ts.map +1 -1
  1198. package/dist/versions/getLatestGlobalVersion.js +12 -5
  1199. package/dist/versions/getLatestGlobalVersion.js.map +1 -1
  1200. package/dist/versions/payloadPackageList.d.ts +2 -0
  1201. package/dist/versions/payloadPackageList.d.ts.map +1 -0
  1202. package/dist/versions/payloadPackageList.js +33 -0
  1203. package/dist/versions/payloadPackageList.js.map +1 -0
  1204. package/dist/versions/saveVersion.d.ts +3 -1
  1205. package/dist/versions/saveVersion.d.ts.map +1 -1
  1206. package/dist/versions/saveVersion.js +65 -28
  1207. package/dist/versions/saveVersion.js.map +1 -1
  1208. package/dist/versions/types.d.ts +8 -4
  1209. package/dist/versions/types.d.ts.map +1 -1
  1210. package/dist/versions/types.js.map +1 -1
  1211. package/package.json +92 -136
  1212. package/dist/admin/forms/FieldDescription.d.ts +0 -14
  1213. package/dist/admin/forms/FieldDescription.d.ts.map +0 -1
  1214. package/dist/admin/forms/FieldDescription.js +0 -3
  1215. package/dist/admin/forms/FieldDescription.js.map +0 -1
  1216. package/dist/admin/forms/FieldTypes.d.ts +0 -27
  1217. package/dist/admin/forms/FieldTypes.d.ts.map +0 -1
  1218. package/dist/admin/forms/FieldTypes.js +0 -3
  1219. package/dist/admin/forms/FieldTypes.js.map +0 -1
  1220. package/dist/bin/loader/clientExtensions.d.ts +0 -2
  1221. package/dist/bin/loader/clientExtensions.d.ts.map +0 -1
  1222. package/dist/bin/loader/clientExtensions.js +0 -13
  1223. package/dist/bin/loader/clientExtensions.js.map +0 -1
  1224. package/dist/bin/loader/compile.d.ts +0 -5
  1225. package/dist/bin/loader/compile.d.ts.map +0 -1
  1226. package/dist/bin/loader/compile.js +0 -27
  1227. package/dist/bin/loader/compile.js.map +0 -1
  1228. package/dist/bin/loader/index.d.ts +0 -34
  1229. package/dist/bin/loader/index.d.ts.map +0 -1
  1230. package/dist/bin/loader/index.js +0 -117
  1231. package/dist/bin/loader/index.js.map +0 -1
  1232. package/dist/bin/loader/read-default-tsconfig.d.ts +0 -4
  1233. package/dist/bin/loader/read-default-tsconfig.d.ts.map +0 -1
  1234. package/dist/bin/loader/read-default-tsconfig.js +0 -92
  1235. package/dist/bin/loader/read-default-tsconfig.js.map +0 -1
  1236. package/dist/collections/config/schema.d.ts +0 -4
  1237. package/dist/collections/config/schema.d.ts.map +0 -1
  1238. package/dist/collections/config/schema.js +0 -177
  1239. package/dist/collections/config/schema.js.map +0 -1
  1240. package/dist/config/schema.d.ts +0 -5
  1241. package/dist/config/schema.d.ts.map +0 -1
  1242. package/dist/config/schema.js +0 -146
  1243. package/dist/config/schema.js.map +0 -1
  1244. package/dist/config/shared/adminViewSchema.d.ts +0 -3
  1245. package/dist/config/shared/adminViewSchema.d.ts.map +0 -1
  1246. package/dist/config/shared/adminViewSchema.js +0 -11
  1247. package/dist/config/shared/adminViewSchema.js.map +0 -1
  1248. package/dist/config/shared/componentSchema.d.ts +0 -16
  1249. package/dist/config/shared/componentSchema.d.ts.map +0 -1
  1250. package/dist/config/shared/componentSchema.js +0 -27
  1251. package/dist/config/shared/componentSchema.js.map +0 -1
  1252. package/dist/config/validate.d.ts +0 -4
  1253. package/dist/config/validate.d.ts.map +0 -1
  1254. package/dist/config/validate.js +0 -89
  1255. package/dist/config/validate.js.map +0 -1
  1256. package/dist/email/build.d.ts +0 -5
  1257. package/dist/email/build.d.ts.map +0 -1
  1258. package/dist/email/build.js +0 -63
  1259. package/dist/email/build.js.map +0 -1
  1260. package/dist/email/mockHandler.d.ts +0 -5
  1261. package/dist/email/mockHandler.d.ts.map +0 -1
  1262. package/dist/email/mockHandler.js +0 -24
  1263. package/dist/email/mockHandler.js.map +0 -1
  1264. package/dist/exports/auth.d.ts +0 -7
  1265. package/dist/exports/auth.d.ts.map +0 -1
  1266. package/dist/exports/auth.js +0 -7
  1267. package/dist/exports/auth.js.map +0 -1
  1268. package/dist/exports/config.d.ts +0 -14
  1269. package/dist/exports/config.d.ts.map +0 -1
  1270. package/dist/exports/config.js +0 -14
  1271. package/dist/exports/config.js.map +0 -1
  1272. package/dist/exports/database.d.ts +0 -23
  1273. package/dist/exports/database.d.ts.map +0 -1
  1274. package/dist/exports/database.js +0 -22
  1275. package/dist/exports/database.js.map +0 -1
  1276. package/dist/exports/errors.d.ts +0 -2
  1277. package/dist/exports/errors.d.ts.map +0 -1
  1278. package/dist/exports/errors.js +0 -3
  1279. package/dist/exports/errors.js.map +0 -1
  1280. package/dist/exports/fields/index.d.ts +0 -3
  1281. package/dist/exports/fields/index.d.ts.map +0 -1
  1282. package/dist/exports/fields/index.js +0 -4
  1283. package/dist/exports/fields/index.js.map +0 -1
  1284. package/dist/exports/fields/validations.d.ts +0 -2
  1285. package/dist/exports/fields/validations.d.ts.map +0 -1
  1286. package/dist/exports/fields/validations.js +0 -3
  1287. package/dist/exports/fields/validations.js.map +0 -1
  1288. package/dist/exports/operations.d.ts +0 -30
  1289. package/dist/exports/operations.d.ts.map +0 -1
  1290. package/dist/exports/operations.js +0 -31
  1291. package/dist/exports/operations.js.map +0 -1
  1292. package/dist/exports/types.d.ts +0 -17
  1293. package/dist/exports/types.d.ts.map +0 -1
  1294. package/dist/exports/types.js +0 -5
  1295. package/dist/exports/types.js.map +0 -1
  1296. package/dist/exports/uploads.d.ts +0 -2
  1297. package/dist/exports/uploads.d.ts.map +0 -1
  1298. package/dist/exports/uploads.js +0 -3
  1299. package/dist/exports/uploads.js.map +0 -1
  1300. package/dist/exports/utilities.d.ts +0 -31
  1301. package/dist/exports/utilities.d.ts.map +0 -1
  1302. package/dist/exports/utilities.js +0 -32
  1303. package/dist/exports/utilities.js.map +0 -1
  1304. package/dist/exports/versions.d.ts +0 -9
  1305. package/dist/exports/versions.d.ts.map +0 -1
  1306. package/dist/exports/versions.js +0 -9
  1307. package/dist/exports/versions.js.map +0 -1
  1308. package/dist/fields/config/schema.d.ts +0 -29
  1309. package/dist/fields/config/schema.d.ts.map +0 -1
  1310. package/dist/fields/config/schema.js +0 -477
  1311. package/dist/fields/config/schema.js.map +0 -1
  1312. package/dist/fields/hooks/beforeChange/beforeDuplicate.d.ts +0 -3
  1313. package/dist/fields/hooks/beforeChange/beforeDuplicate.d.ts.map +0 -1
  1314. package/dist/fields/hooks/beforeChange/beforeDuplicate.js +0 -6
  1315. package/dist/fields/hooks/beforeChange/beforeDuplicate.js.map +0 -1
  1316. package/dist/globals/config/schema.d.ts +0 -4
  1317. package/dist/globals/config/schema.d.ts.map +0 -1
  1318. package/dist/globals/config/schema.js +0 -69
  1319. package/dist/globals/config/schema.js.map +0 -1
  1320. package/dist/utilities/combineMerge.d.ts +0 -2
  1321. package/dist/utilities/combineMerge.d.ts.map +0 -1
  1322. package/dist/utilities/combineMerge.js +0 -16
  1323. package/dist/utilities/combineMerge.js.map +0 -1
  1324. package/dist/utilities/convertData.d.ts +0 -5
  1325. package/dist/utilities/convertData.d.ts.map +0 -1
  1326. package/dist/utilities/convertData.js +0 -16
  1327. package/dist/utilities/convertData.js.map +0 -1
  1328. package/dist/utilities/getCSSVariable.d.ts +0 -3
  1329. package/dist/utilities/getCSSVariable.d.ts.map +0 -1
  1330. package/dist/utilities/getCSSVariable.js +0 -3
  1331. package/dist/utilities/getCSSVariable.js.map +0 -1
  1332. package/dist/utilities/importWithoutClientFiles.d.ts +0 -7
  1333. package/dist/utilities/importWithoutClientFiles.d.ts.map +0 -1
  1334. package/dist/utilities/importWithoutClientFiles.js +0 -41
  1335. package/dist/utilities/importWithoutClientFiles.js.map +0 -1
  1336. package/dist/utilities/overwriteMerge.d.ts +0 -3
  1337. package/dist/utilities/overwriteMerge.d.ts.map +0 -1
  1338. package/dist/utilities/overwriteMerge.js +0 -4
  1339. package/dist/utilities/overwriteMerge.js.map +0 -1
  1340. package/src/index.ts +0 -499
@@ -1,9 +1,9 @@
1
- import fileType from 'file-type';
2
- const { fromBuffer } = fileType;
1
+ import { fileTypeFromBuffer } from 'file-type';
3
2
  import fs from 'fs';
4
3
  import sanitize from 'sanitize-filename';
5
4
  import { isNumber } from '../utilities/isNumber.js';
6
5
  import fileExists from './fileExists.js';
6
+ import { optionallyAppendMetadata } from './optionallyAppendMetadata.js';
7
7
  /**
8
8
  * Sanitize the image name and extract the extension from the source image
9
9
  *
@@ -17,19 +17,9 @@ import fileExists from './fileExists.js';
17
17
  ext: extension
18
18
  };
19
19
  };
20
- /**
21
- * Create a new image name based on the output image name, the dimensions and
22
- * the extension.
23
- *
24
- * Ignore the fact that duplicate names could happen if the there is one
25
- * size with `width AND height` and one with only `height OR width`. Because
26
- * space is expensive, we will reuse the same image for both sizes.
27
- *
28
- * @param outputImageName - the sanitized image name
29
- * @param bufferInfo - the buffer info
30
- * @param extension - the extension to use
31
- * @returns the new image name that is not taken
32
- */ const createImageName = (outputImageName, { height, width }, extension)=>`${outputImageName}-${width}x${height}.${extension}`;
20
+ const createImageName = ({ extension, height, outputImageName, width })=>{
21
+ return `${outputImageName}-${width}x${height}.${extension}`;
22
+ };
33
23
  /**
34
24
  * Create the result object for the image resize operation based on the
35
25
  * provided parameters. If the name is not provided, an empty result object
@@ -43,7 +33,8 @@ import fileExists from './fileExists.js';
43
33
  * @param mimeType - the mime type of the image
44
34
  * @param sizesToSave - the sizes to save
45
35
  * @returns the result object
46
- */ const createResult = (name, filename = null, width = null, height = null, filesize = null, mimeType = null, sizesToSave = [])=>({
36
+ */ const createResult = ({ name, filename = null, filesize = null, height = null, mimeType = null, sizesToSave = [], width = null })=>{
37
+ return {
47
38
  sizeData: {
48
39
  [name]: {
49
40
  filename,
@@ -54,62 +45,53 @@ import fileExists from './fileExists.js';
54
45
  }
55
46
  },
56
47
  sizesToSave
57
- });
48
+ };
49
+ };
58
50
  /**
59
- * Check if the image needs to be resized according to the requested dimensions
60
- * and the original image size. If the resize options withoutEnlargement or withoutReduction are provided,
61
- * the image will be resized regardless of the requested dimensions, given that the
62
- * width or height to be resized is provided.
51
+ * Determine whether or not to resize the image.
52
+ * - resize using image config
53
+ * - resize using image config with focal adjustments
54
+ * - do not resize at all
55
+ *
56
+ * `imageResizeConfig.withoutEnlargement`:
57
+ * - undefined [default]: uploading images with smaller width AND height than the image size will return null
58
+ * - false: always enlarge images to the image size
59
+ * - true: if the image is smaller than the image size, return the original image
63
60
  *
64
- * @param resizeConfig - object containing the requested dimensions and resize options
65
- * @param original - the original image size
66
- * @returns true if resizing is not needed, false otherwise
67
- */ const preventResize = ({ height: desiredHeight, width: desiredWidth, withoutEnlargement, withoutReduction }, original)=>{
68
- // default is to allow reduction
69
- if (withoutReduction !== undefined) {
70
- return false // needs resize
71
- ;
61
+ * `imageResizeConfig.withoutReduction`:
62
+ * - false [default]: always enlarge images to the image size
63
+ * - true: if the image is smaller than the image size, return the original image
64
+ *
65
+ * @return 'omit' | 'resize' | 'resizeWithFocalPoint'
66
+ */ const getImageResizeAction = ({ dimensions: originalImage, hasFocalPoint, imageResizeConfig })=>{
67
+ const { fit, height: targetHeight, width: targetWidth, withoutEnlargement, withoutReduction } = imageResizeConfig;
68
+ // prevent upscaling by default when x and y are both smaller than target image size
69
+ if (targetHeight && targetWidth) {
70
+ const originalImageIsSmallerXAndY = originalImage.width < targetWidth && originalImage.height < targetHeight;
71
+ if (withoutEnlargement === undefined && originalImageIsSmallerXAndY) {
72
+ return 'omit' // prevent image size from being enlarged
73
+ ;
74
+ }
72
75
  }
73
- // default is to prevent enlargement
74
- if (withoutEnlargement !== undefined) {
75
- return false // needs resize
76
- ;
76
+ const originalImageIsSmallerXOrY = originalImage.width < targetWidth || originalImage.height < targetHeight;
77
+ if (fit === 'contain' || fit === 'inside') {
78
+ return 'resize';
77
79
  }
78
- const isWidthOrHeightNotDefined = !desiredHeight || !desiredWidth;
79
- if (isWidthOrHeightNotDefined) {
80
- // If width and height are not defined, it means there is a format conversion
81
- // and the image needs to be "resized" (transformed).
82
- return false // needs resize
83
- ;
80
+ if (!isNumber(targetHeight) && !isNumber(targetWidth)) {
81
+ return 'resize';
84
82
  }
85
- const hasInsufficientWidth = desiredWidth > original.width;
86
- const hasInsufficientHeight = desiredHeight > original.height;
87
- if (hasInsufficientWidth && hasInsufficientHeight) {
88
- // doesn't need resize - prevent enlargement. This should only happen if both width and height are insufficient.
89
- // if only one dimension is insufficient and the other is sufficient, resizing needs to happen, as the image
90
- // should be resized to the sufficient dimension.
91
- return true // do not create a new size
92
- ;
83
+ const targetAspectRatio = targetWidth / targetHeight;
84
+ const originalAspectRatio = originalImage.width / originalImage.height;
85
+ if (originalAspectRatio === targetAspectRatio) {
86
+ return 'resize';
93
87
  }
94
- return false // needs resize
95
- ;
96
- };
97
- /**
98
- * Check if the image should be passed directly to sharp without payload adjusting properties.
99
- *
100
- * @param resizeConfig - object containing the requested dimensions and resize options
101
- * @param original - the original image size
102
- * @returns true if the image should passed directly to sharp
103
- */ const applyPayloadAdjustments = ({ fit, height, width, withoutEnlargement, withoutReduction }, original)=>{
104
- if (fit === 'contain' || fit === 'inside') return false;
105
- if (!isNumber(height) && !isNumber(width)) return false;
106
- const targetAspectRatio = width / height;
107
- const originalAspectRatio = original.width / original.height;
108
- if (originalAspectRatio === targetAspectRatio) return false;
109
- const skipEnlargement = withoutEnlargement && (original.height < height || original.width < width);
110
- const skipReduction = withoutReduction && (original.height > height || original.width > width);
111
- if (skipEnlargement || skipReduction) return false;
112
- return true;
88
+ if (withoutEnlargement && originalImageIsSmallerXOrY) {
89
+ return 'resize';
90
+ }
91
+ if (withoutReduction && !originalImageIsSmallerXOrY) {
92
+ return 'resize';
93
+ }
94
+ return hasFocalPoint ? 'resizeWithFocalPoint' : 'resize';
113
95
  };
114
96
  /**
115
97
  * Sanitize the resize config. If the resize config has the `withoutReduction`
@@ -129,6 +111,17 @@ import fileExists from './fileExists.js';
129
111
  }
130
112
  return resizeConfig;
131
113
  };
114
+ /**
115
+ * Used to extract height from images, animated or not.
116
+ *
117
+ * @param sharpMetadata - the sharp metadata
118
+ * @returns the height of the image
119
+ */ function extractHeightFromImage(sharpMetadata) {
120
+ if (sharpMetadata?.pages) {
121
+ return sharpMetadata.height / sharpMetadata.pages;
122
+ }
123
+ return sharpMetadata.height;
124
+ }
132
125
  /**
133
126
  * For the provided image sizes, handle the resizing and the transforms
134
127
  * (format, trim, etc.) of each requested image size and return the result object.
@@ -137,62 +130,130 @@ import fileExists from './fileExists.js';
137
130
  *
138
131
  * The image will be resized according to the provided
139
132
  * resize config. If no image sizes are requested, the resolved data will be empty.
140
- * For every image that dos not need to be resized, an result object with `null`
133
+ * For every image that does not need to be resized, a result object with `null`
141
134
  * parameters will be returned.
142
135
  *
143
136
  * @param resizeConfig - the resize config
144
137
  * @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 {
138
+ */ export async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, sharp, staticPath, uploadEdits, withMetadata }) {
139
+ const { focalPoint: focalPointEnabled = true, imageSizes } = config.upload;
140
+ // Focal point adjustments
141
+ const incomingFocalPoint = uploadEdits.focalPoint ? {
142
+ x: isNumber(uploadEdits.focalPoint.x) ? Math.round(uploadEdits.focalPoint.x) : 50,
143
+ y: isNumber(uploadEdits.focalPoint.y) ? Math.round(uploadEdits.focalPoint.y) : 50
144
+ } : undefined;
145
+ const defaultResult = {
146
+ ...focalPointEnabled && incomingFocalPoint && {
147
+ focalPoint: incomingFocalPoint
148
+ },
149
149
  sizeData: {},
150
150
  sizesToSave: []
151
151
  };
152
- const sharpBase = sharp(file.tempFilePath || file.data).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
152
+ if (!imageSizes || !sharp) {
153
+ return defaultResult;
154
+ }
155
+ // Determine if the file is animated
156
+ const fileIsAnimatedType = [
157
+ 'image/avif',
158
+ 'image/gif',
159
+ 'image/webp'
160
+ ].includes(file.mimetype);
161
+ const sharpOptions = {};
162
+ if (fileIsAnimatedType) {
163
+ sharpOptions.animated = true;
164
+ }
165
+ const sharpBase = sharp(file.tempFilePath || file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
153
166
  ;
167
+ const originalImageMeta = await sharpBase.metadata();
168
+ const resizeImageMeta = {
169
+ height: extractHeightFromImage(originalImageMeta),
170
+ width: originalImageMeta.width
171
+ };
154
172
  const results = await Promise.all(imageSizes.map(async (imageResizeConfig)=>{
155
173
  imageResizeConfig = sanitizeResizeConfig(imageResizeConfig);
156
- // This checks if a resize should happen. If not, the resized image will be
157
- // skipped COMPLETELY and thus will not be included in the resulting images.
158
- // All further format/trim options will thus be skipped as well.
159
- if (preventResize(imageResizeConfig, dimensions)) {
160
- return createResult(imageResizeConfig.name);
174
+ const resizeAction = getImageResizeAction({
175
+ dimensions,
176
+ hasFocalPoint: Boolean(incomingFocalPoint),
177
+ imageResizeConfig
178
+ });
179
+ if (resizeAction === 'omit') {
180
+ return createResult({
181
+ name: imageResizeConfig.name
182
+ });
161
183
  }
162
184
  const imageToResize = sharpBase.clone();
163
185
  let resized = imageToResize;
164
- if (req.query?.uploadEdits?.focalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {
165
- const { height: resizeHeight, width: resizeWidth } = imageResizeConfig;
166
- const resizeAspectRatio = resizeWidth / resizeHeight;
186
+ if (resizeAction === 'resizeWithFocalPoint') {
187
+ let { height: resizeHeight, width: resizeWidth } = imageResizeConfig;
167
188
  const originalAspectRatio = dimensions.width / dimensions.height;
189
+ // Calculate resizeWidth based on original aspect ratio if it's undefined
190
+ if (resizeHeight && !resizeWidth) {
191
+ resizeWidth = Math.round(resizeHeight * originalAspectRatio);
192
+ }
193
+ // Calculate resizeHeight based on original aspect ratio if it's undefined
194
+ if (resizeWidth && !resizeHeight) {
195
+ resizeHeight = Math.round(resizeWidth / originalAspectRatio);
196
+ }
197
+ if (!resizeHeight) {
198
+ resizeHeight = resizeImageMeta.height;
199
+ }
200
+ if (!resizeWidth) {
201
+ resizeWidth = resizeImageMeta.width;
202
+ }
203
+ const resizeAspectRatio = resizeWidth / resizeHeight;
168
204
  const prioritizeHeight = resizeAspectRatio < originalAspectRatio;
169
- // Scale the image up or down to fit the resize dimensions
170
- const scaledImage = imageToResize.resize({
171
- height: prioritizeHeight ? resizeHeight : null,
172
- width: prioritizeHeight ? null : resizeWidth
205
+ // Scales the image before extracting from it
206
+ resized = imageToResize.resize({
207
+ height: prioritizeHeight ? resizeHeight : undefined,
208
+ width: prioritizeHeight ? undefined : resizeWidth
209
+ });
210
+ const metadataAppendedFile = await optionallyAppendMetadata({
211
+ req,
212
+ sharpFile: resized,
213
+ withMetadata
173
214
  });
174
- const { info: scaledImageInfo } = await scaledImage.toBuffer({
215
+ // Must read from buffer, resized.metadata will return the original image metadata
216
+ const { info } = await metadataAppendedFile.toBuffer({
175
217
  resolveWithObject: true
176
218
  });
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
- const safeResizeWidth = resizeWidth ?? scaledImageInfo.width;
183
- const maxOffsetX = scaledImageInfo.width - safeResizeWidth;
184
- const leftFocalEdge = Math.round(scaledImageInfo.width * (focalPoint.x / 100) - safeResizeWidth / 2);
185
- const safeOffsetX = Math.min(Math.max(0, leftFocalEdge), maxOffsetX);
186
- const safeResizeHeight = resizeHeight ?? scaledImageInfo.height;
187
- const maxOffsetY = scaledImageInfo.height - safeResizeHeight;
188
- const topFocalEdge = Math.round(scaledImageInfo.height * (focalPoint.y / 100) - safeResizeHeight / 2);
189
- const safeOffsetY = Math.min(Math.max(0, topFocalEdge), maxOffsetY);
190
- // extract the focal area from the scaled image
191
- resized = scaledImage.extract({
192
- height: safeResizeHeight,
193
- left: safeOffsetX,
194
- top: safeOffsetY,
195
- width: safeResizeWidth
219
+ resizeImageMeta.height = extractHeightFromImage({
220
+ ...originalImageMeta,
221
+ height: info.height
222
+ });
223
+ resizeImageMeta.width = info.width;
224
+ const halfResizeX = resizeWidth / 2;
225
+ const xFocalCenter = resizeImageMeta.width * (incomingFocalPoint.x / 100);
226
+ const calculatedRightPixelBound = xFocalCenter + halfResizeX;
227
+ let leftBound = xFocalCenter - halfResizeX;
228
+ // if the right bound is greater than the image width, adjust the left bound
229
+ // keeping focus on the right
230
+ if (calculatedRightPixelBound > resizeImageMeta.width) {
231
+ leftBound = resizeImageMeta.width - resizeWidth;
232
+ }
233
+ // if the left bound is less than 0, adjust the left bound to 0
234
+ // keeping the focus on the left
235
+ if (leftBound < 0) {
236
+ leftBound = 0;
237
+ }
238
+ const halfResizeY = resizeHeight / 2;
239
+ const yFocalCenter = resizeImageMeta.height * (incomingFocalPoint.y / 100);
240
+ const calculatedBottomPixelBound = yFocalCenter + halfResizeY;
241
+ let topBound = yFocalCenter - halfResizeY;
242
+ // if the bottom bound is greater than the image height, adjust the top bound
243
+ // keeping the image as far right as possible
244
+ if (calculatedBottomPixelBound > resizeImageMeta.height) {
245
+ topBound = resizeImageMeta.height - resizeHeight;
246
+ }
247
+ // if the top bound is less than 0, adjust the top bound to 0
248
+ // keeping the image focus near the top
249
+ if (topBound < 0) {
250
+ topBound = 0;
251
+ }
252
+ resized = resized.extract({
253
+ height: resizeHeight,
254
+ left: Math.floor(leftBound),
255
+ top: Math.floor(topBound),
256
+ width: resizeWidth
196
257
  });
197
258
  } else {
198
259
  resized = imageToResize.resize(imageResizeConfig);
@@ -203,13 +264,37 @@ import fileExists from './fileExists.js';
203
264
  if (imageResizeConfig.trimOptions) {
204
265
  resized = resized.trim(imageResizeConfig.trimOptions);
205
266
  }
206
- const { data: bufferData, info: bufferInfo } = await resized.toBuffer({
267
+ const metadataAppendedFile = await optionallyAppendMetadata({
268
+ req,
269
+ sharpFile: resized,
270
+ withMetadata
271
+ });
272
+ const { data: bufferData, info: bufferInfo } = await metadataAppendedFile.toBuffer({
207
273
  resolveWithObject: true
208
274
  });
209
275
  const sanitizedImage = getSanitizedImageData(savedFilename);
210
- req.payloadUploadSizes[imageResizeConfig.name] = bufferData;
211
- const mimeInfo = await fromBuffer(bufferData);
212
- const imageNameWithDimensions = createImageName(sanitizedImage.name, bufferInfo, mimeInfo?.ext || sanitizedImage.ext);
276
+ if (req.payloadUploadSizes) {
277
+ req.payloadUploadSizes[imageResizeConfig.name] = bufferData;
278
+ }
279
+ const mimeInfo = await fileTypeFromBuffer(bufferData);
280
+ const imageNameWithDimensions = imageResizeConfig.generateImageName ? imageResizeConfig.generateImageName({
281
+ extension: mimeInfo?.ext || sanitizedImage.ext,
282
+ height: extractHeightFromImage({
283
+ ...originalImageMeta,
284
+ height: bufferInfo.height
285
+ }),
286
+ originalName: sanitizedImage.name,
287
+ sizeName: imageResizeConfig.name,
288
+ width: bufferInfo.width
289
+ }) : createImageName({
290
+ extension: mimeInfo?.ext || sanitizedImage.ext,
291
+ height: extractHeightFromImage({
292
+ ...originalImageMeta,
293
+ height: bufferInfo.height
294
+ }),
295
+ outputImageName: sanitizedImage.name,
296
+ width: bufferInfo.width
297
+ });
213
298
  const imagePath = `${staticPath}/${imageNameWithDimensions}`;
214
299
  if (await fileExists(imagePath)) {
215
300
  try {
@@ -219,20 +304,27 @@ import fileExists from './fileExists.js';
219
304
  }
220
305
  }
221
306
  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
- ]);
307
+ return createResult({
308
+ name: imageResizeConfig.name,
309
+ filename: imageNameWithDimensions,
310
+ filesize: size,
311
+ height: fileIsAnimatedType && originalImageMeta.pages ? height / originalImageMeta.pages : height,
312
+ mimeType: mimeInfo?.mime || mimeType,
313
+ sizesToSave: [
314
+ {
315
+ buffer: bufferData,
316
+ path: imagePath
317
+ }
318
+ ],
319
+ width
320
+ });
228
321
  }));
229
322
  return results.reduce((acc, result)=>{
230
323
  Object.assign(acc.sizeData, result.sizeData);
231
324
  acc.sizesToSave.push(...result.sizesToSave);
232
325
  return acc;
233
326
  }, {
234
- sizeData: {},
235
- sizesToSave: []
327
+ ...defaultResult
236
328
  });
237
329
  }
238
330
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/imageResizer.ts"],"sourcesContent":["import type { OutputInfo } from 'sharp'\n\nimport fileType from 'file-type'\nconst { fromBuffer } = fileType\n\nimport fs from 'fs'\nimport sanitize from 'sanitize-filename'\n\nimport type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SharpDependency } from '../config/types.js'\nimport type { CustomPayloadRequest, PayloadRequest, UploadEdits } from '../types/index.js'\nimport type { FileSize, FileSizes, FileToSave, ImageSize, ProbedImageSize } from './types.js'\n\nimport { isNumber } from '../utilities/isNumber.js'\nimport fileExists from './fileExists.js'\n\ntype ResizeArgs = {\n config: SanitizedCollectionConfig\n dimensions: ProbedImageSize\n file: CustomPayloadRequest['file']\n mimeType: string\n req: PayloadRequest & {\n query?: {\n uploadEdits?: UploadEdits\n }\n }\n savedFilename: string\n sharp: SharpDependency\n staticPath: string\n}\n\n/** Result from resizing and transforming the requested image sizes */\ntype ImageSizesResult = {\n sizeData: FileSizes\n sizesToSave: FileToSave[]\n}\n\ntype SanitizedImageData = {\n ext: string\n name: string\n}\n\n/**\n * Sanitize the image name and extract the extension from the source image\n *\n * @param sourceImage - the source image\n * @returns the sanitized name and extension\n */\nconst getSanitizedImageData = (sourceImage: string): SanitizedImageData => {\n const extension = sourceImage.split('.').pop()\n const name = sanitize(sourceImage.substring(0, sourceImage.lastIndexOf('.')) || sourceImage)\n return { name, ext: extension }\n}\n\n/**\n * Create a new image name based on the output image name, the dimensions and\n * the extension.\n *\n * Ignore the fact that duplicate names could happen if the there is one\n * size with `width AND height` and one with only `height OR width`. Because\n * space is expensive, we will reuse the same image for both sizes.\n *\n * @param outputImageName - the sanitized image name\n * @param bufferInfo - the buffer info\n * @param extension - the extension to use\n * @returns the new image name that is not taken\n */\nconst createImageName = (\n outputImageName: string,\n { height, width }: OutputInfo,\n extension: string,\n) => `${outputImageName}-${width}x${height}.${extension}`\n\n/**\n * Create the result object for the image resize operation based on the\n * provided parameters. If the name is not provided, an empty result object\n * is returned.\n *\n * @param name - the name of the image\n * @param filename - the filename of the image\n * @param width - the width of the image\n * @param height - the height of the image\n * @param filesize - the filesize of the image\n * @param mimeType - the mime type of the image\n * @param sizesToSave - the sizes to save\n * @returns the result object\n */\nconst createResult = (\n name: string,\n filename: FileSize['filename'] = null,\n width: FileSize['width'] = null,\n height: FileSize['height'] = null,\n filesize: FileSize['filesize'] = null,\n mimeType: FileSize['mimeType'] = null,\n sizesToSave: FileToSave[] = [],\n): ImageSizesResult => ({\n sizeData: {\n [name]: {\n filename,\n filesize,\n height,\n mimeType,\n width,\n },\n },\n sizesToSave,\n})\n\n/**\n * Check if the image needs to be resized according to the requested dimensions\n * and the original image size. If the resize options withoutEnlargement or withoutReduction are provided,\n * the image will be resized regardless of the requested dimensions, given that the\n * width or height to be resized is provided.\n *\n * @param resizeConfig - object containing the requested dimensions and resize options\n * @param original - the original image size\n * @returns true if resizing is not needed, false otherwise\n */\nconst preventResize = (\n { height: desiredHeight, width: desiredWidth, withoutEnlargement, withoutReduction }: ImageSize,\n original: ProbedImageSize,\n): boolean => {\n // default is to allow reduction\n if (withoutReduction !== undefined) {\n return false // needs resize\n }\n\n // default is to prevent enlargement\n if (withoutEnlargement !== undefined) {\n return false // needs resize\n }\n\n const isWidthOrHeightNotDefined = !desiredHeight || !desiredWidth\n if (isWidthOrHeightNotDefined) {\n // If width and height are not defined, it means there is a format conversion\n // and the image needs to be \"resized\" (transformed).\n return false // needs resize\n }\n\n const hasInsufficientWidth = desiredWidth > original.width\n const hasInsufficientHeight = desiredHeight > original.height\n if (hasInsufficientWidth && hasInsufficientHeight) {\n // doesn't need resize - prevent enlargement. This should only happen if both width and height are insufficient.\n // if only one dimension is insufficient and the other is sufficient, resizing needs to happen, as the image\n // should be resized to the sufficient dimension.\n return true // do not create a new size\n }\n\n return false // needs resize\n}\n\n/**\n * Check if the image should be passed directly to sharp without payload adjusting properties.\n *\n * @param resizeConfig - object containing the requested dimensions and resize options\n * @param original - the original image size\n * @returns true if the image should passed directly to sharp\n */\nconst applyPayloadAdjustments = (\n { fit, height, width, withoutEnlargement, withoutReduction }: ImageSize,\n original: ProbedImageSize,\n) => {\n if (fit === 'contain' || fit === 'inside') return false\n if (!isNumber(height) && !isNumber(width)) return false\n\n const targetAspectRatio = width / height\n const originalAspectRatio = original.width / original.height\n if (originalAspectRatio === targetAspectRatio) return false\n\n const skipEnlargement = withoutEnlargement && (original.height < height || original.width < width)\n const skipReduction = withoutReduction && (original.height > height || original.width > width)\n if (skipEnlargement || skipReduction) return false\n\n return true\n}\n\n/**\n * Sanitize the resize config. If the resize config has the `withoutReduction`\n * property set to true, the `fit` and `position` properties will be set to `contain`\n * and `top left` respectively.\n *\n * @param resizeConfig - the resize config\n * @returns a sanitized resize config\n */\nconst sanitizeResizeConfig = (resizeConfig: ImageSize): ImageSize => {\n if (resizeConfig.withoutReduction) {\n return {\n ...resizeConfig,\n // Why fit `contain` should also be set to https://github.com/lovell/sharp/issues/3595\n fit: resizeConfig?.fit || 'contain',\n position: resizeConfig?.position || 'left top',\n }\n }\n return resizeConfig\n}\n\n/**\n * For the provided image sizes, handle the resizing and the transforms\n * (format, trim, etc.) of each requested image size and return the result object.\n * This only handles the image sizes. The transforms of the original image\n * are handled in {@link ./generateFileData.ts}.\n *\n * The image will be resized according to the provided\n * resize config. If no image sizes are requested, the resolved data will be empty.\n * For every image that dos not need to be resized, an result object with `null`\n * parameters will be returned.\n *\n * @param resizeConfig - the resize config\n * @returns the result of the resize operation(s)\n */\nexport default async function resizeAndTransformImageSizes({\n config,\n dimensions,\n file,\n mimeType,\n req,\n savedFilename,\n sharp,\n staticPath,\n}: ResizeArgs): Promise<ImageSizesResult> {\n const { imageSizes } = config.upload\n // Noting to resize here so return as early as possible\n if (!imageSizes) return { sizeData: {}, sizesToSave: [] }\n\n const sharpBase = sharp(file.tempFilePath || file.data).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n\n const results: ImageSizesResult[] = await Promise.all(\n imageSizes.map(async (imageResizeConfig): Promise<ImageSizesResult> => {\n imageResizeConfig = sanitizeResizeConfig(imageResizeConfig)\n\n // This checks if a resize should happen. If not, the resized image will be\n // skipped COMPLETELY and thus will not be included in the resulting images.\n // All further format/trim options will thus be skipped as well.\n if (preventResize(imageResizeConfig, dimensions)) {\n return createResult(imageResizeConfig.name)\n }\n\n const imageToResize = sharpBase.clone()\n let resized = imageToResize\n\n if (\n req.query?.uploadEdits?.focalPoint &&\n applyPayloadAdjustments(imageResizeConfig, dimensions)\n ) {\n const { height: resizeHeight, width: resizeWidth } = imageResizeConfig\n const resizeAspectRatio = resizeWidth / resizeHeight\n const originalAspectRatio = dimensions.width / dimensions.height\n const prioritizeHeight = resizeAspectRatio < originalAspectRatio\n\n // Scale the image up or down to fit the resize dimensions\n const scaledImage = imageToResize.resize({\n height: prioritizeHeight ? resizeHeight : null,\n width: prioritizeHeight ? null : resizeWidth,\n })\n const { info: scaledImageInfo } = await scaledImage.toBuffer({ resolveWithObject: true })\n\n // Focal point adjustments\n const focalPoint = {\n x: isNumber(req.query.uploadEdits.focalPoint?.x)\n ? req.query.uploadEdits.focalPoint.x\n : 50,\n y: isNumber(req.query.uploadEdits.focalPoint?.y)\n ? req.query.uploadEdits.focalPoint.y\n : 50,\n }\n\n const safeResizeWidth = resizeWidth ?? scaledImageInfo.width\n const maxOffsetX = scaledImageInfo.width - safeResizeWidth\n const leftFocalEdge = Math.round(\n scaledImageInfo.width * (focalPoint.x / 100) - safeResizeWidth / 2,\n )\n const safeOffsetX = Math.min(Math.max(0, leftFocalEdge), maxOffsetX)\n\n const safeResizeHeight = resizeHeight ?? scaledImageInfo.height\n const maxOffsetY = scaledImageInfo.height - safeResizeHeight\n const topFocalEdge = Math.round(\n scaledImageInfo.height * (focalPoint.y / 100) - safeResizeHeight / 2,\n )\n const safeOffsetY = Math.min(Math.max(0, topFocalEdge), maxOffsetY)\n\n // extract the focal area from the scaled image\n resized = scaledImage.extract({\n height: safeResizeHeight,\n left: safeOffsetX,\n top: safeOffsetY,\n width: safeResizeWidth,\n })\n } else {\n resized = imageToResize.resize(imageResizeConfig)\n }\n\n if (imageResizeConfig.formatOptions) {\n resized = resized.toFormat(\n imageResizeConfig.formatOptions.format,\n imageResizeConfig.formatOptions.options,\n )\n }\n\n if (imageResizeConfig.trimOptions) {\n resized = resized.trim(imageResizeConfig.trimOptions)\n }\n\n const { data: bufferData, info: bufferInfo } = await resized.toBuffer({\n resolveWithObject: true,\n })\n\n const sanitizedImage = getSanitizedImageData(savedFilename)\n\n req.payloadUploadSizes[imageResizeConfig.name] = bufferData\n\n const mimeInfo = await fromBuffer(bufferData)\n\n const imageNameWithDimensions = createImageName(\n sanitizedImage.name,\n bufferInfo,\n mimeInfo?.ext || sanitizedImage.ext,\n )\n\n const imagePath = `${staticPath}/${imageNameWithDimensions}`\n\n if (await fileExists(imagePath)) {\n try {\n fs.unlinkSync(imagePath)\n } catch {\n // Ignore unlink errors\n }\n }\n\n const { height, size, width } = bufferInfo\n return createResult(\n imageResizeConfig.name,\n imageNameWithDimensions,\n width,\n height,\n size,\n mimeInfo?.mime || mimeType,\n [{ buffer: bufferData, path: imagePath }],\n )\n }),\n )\n\n return results.reduce(\n (acc, result) => {\n Object.assign(acc.sizeData, result.sizeData)\n acc.sizesToSave.push(...result.sizesToSave)\n return acc\n },\n { sizeData: {}, sizesToSave: [] },\n )\n}\n"],"names":["fileType","fromBuffer","fs","sanitize","isNumber","fileExists","getSanitizedImageData","sourceImage","extension","split","pop","name","substring","lastIndexOf","ext","createImageName","outputImageName","height","width","createResult","filename","filesize","mimeType","sizesToSave","sizeData","preventResize","desiredHeight","desiredWidth","withoutEnlargement","withoutReduction","original","undefined","isWidthOrHeightNotDefined","hasInsufficientWidth","hasInsufficientHeight","applyPayloadAdjustments","fit","targetAspectRatio","originalAspectRatio","skipEnlargement","skipReduction","sanitizeResizeConfig","resizeConfig","position","resizeAndTransformImageSizes","config","dimensions","file","req","savedFilename","sharp","staticPath","imageSizes","upload","sharpBase","tempFilePath","data","rotate","results","Promise","all","map","imageResizeConfig","imageToResize","clone","resized","query","uploadEdits","focalPoint","resizeHeight","resizeWidth","resizeAspectRatio","prioritizeHeight","scaledImage","resize","info","scaledImageInfo","toBuffer","resolveWithObject","x","y","safeResizeWidth","maxOffsetX","leftFocalEdge","Math","round","safeOffsetX","min","max","safeResizeHeight","maxOffsetY","topFocalEdge","safeOffsetY","extract","left","top","formatOptions","toFormat","format","options","trimOptions","trim","bufferData","bufferInfo","sanitizedImage","payloadUploadSizes","mimeInfo","imageNameWithDimensions","imagePath","unlinkSync","size","mime","buffer","path","reduce","acc","result","Object","assign","push"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/uploads/imageResizer.ts"],"sourcesContent":["import type { Sharp, Metadata as SharpMetadata, SharpOptions } from 'sharp'\n\nimport { fileTypeFromBuffer } from 'file-type'\nimport fs from 'fs'\nimport sanitize from 'sanitize-filename'\n\nimport type { SanitizedCollectionConfig } from '../collections/config/types.js'\nimport type { SharpDependency } from '../config/types.js'\nimport type { PayloadRequest } from '../types/index.js'\nimport type { WithMetadata } from './optionallyAppendMetadata.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'\nimport { optionallyAppendMetadata } from './optionallyAppendMetadata.js'\n\ntype ResizeArgs = {\n config: SanitizedCollectionConfig\n dimensions: ProbedImageSize\n file: PayloadRequest['file']\n mimeType: string\n req: PayloadRequest\n savedFilename: string\n sharp?: SharpDependency\n staticPath: string\n uploadEdits?: UploadEdits\n withMetadata?: WithMetadata\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 */\ntype CreateImageNameArgs = {\n extension: string\n height: number\n outputImageName: string\n width: number\n}\nconst createImageName = ({\n extension,\n height,\n outputImageName,\n width,\n}: CreateImageNameArgs): string => {\n return `${outputImageName}-${width}x${height}.${extension}`\n}\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 * Determine whether or not to resize the image.\n * - resize using image config\n * - resize using image config with focal adjustments\n * - do not resize at all\n *\n * `imageResizeConfig.withoutEnlargement`:\n * - undefined [default]: uploading images with smaller width AND height than the image size will return null\n * - false: always enlarge images to the image size\n * - true: if the image is smaller than the image size, return the original image\n *\n * `imageResizeConfig.withoutReduction`:\n * - false [default]: always enlarge images to the image size\n * - true: if the image is smaller than the image size, return the original image\n *\n * @return 'omit' | 'resize' | 'resizeWithFocalPoint'\n */\nconst getImageResizeAction = ({\n dimensions: originalImage,\n hasFocalPoint,\n imageResizeConfig,\n}: {\n dimensions: ProbedImageSize\n hasFocalPoint?: boolean\n imageResizeConfig: ImageSize\n}): 'omit' | 'resize' | 'resizeWithFocalPoint' => {\n const {\n fit,\n height: targetHeight,\n width: targetWidth,\n withoutEnlargement,\n withoutReduction,\n } = imageResizeConfig\n\n // prevent upscaling by default when x and y are both smaller than target image size\n if (targetHeight && targetWidth) {\n const originalImageIsSmallerXAndY =\n originalImage.width < targetWidth && originalImage.height < targetHeight\n if (withoutEnlargement === undefined && originalImageIsSmallerXAndY) {\n return 'omit' // prevent image size from being enlarged\n }\n }\n\n const originalImageIsSmallerXOrY =\n originalImage.width < targetWidth || originalImage.height < targetHeight\n if (fit === 'contain' || fit === 'inside') {\n return 'resize'\n }\n if (!isNumber(targetHeight) && !isNumber(targetWidth)) {\n return 'resize'\n }\n\n const targetAspectRatio = targetWidth / targetHeight\n const originalAspectRatio = originalImage.width / originalImage.height\n if (originalAspectRatio === targetAspectRatio) {\n return 'resize'\n }\n\n if (withoutEnlargement && originalImageIsSmallerXOrY) {\n return 'resize'\n }\n if (withoutReduction && !originalImageIsSmallerXOrY) {\n return 'resize'\n }\n\n return hasFocalPoint ? 'resizeWithFocalPoint' : 'resize'\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 * Used to extract height from images, animated or not.\n *\n * @param sharpMetadata - the sharp metadata\n * @returns the height of the image\n */\nfunction extractHeightFromImage(sharpMetadata: SharpMetadata): number {\n if (sharpMetadata?.pages) {\n return sharpMetadata.height / sharpMetadata.pages\n }\n return sharpMetadata.height\n}\n\n/**\n * For the provided image sizes, handle the resizing and the transforms\n * (format, trim, etc.) of each requested image size and return the result object.\n * This only handles the image sizes. The transforms of the original image\n * are handled in {@link ./generateFileData.ts}.\n *\n * The image will be resized according to the provided\n * resize config. If no image sizes are requested, the resolved data will be empty.\n * For every image that does not need to be resized, a result object with `null`\n * parameters will be returned.\n *\n * @param resizeConfig - the resize config\n * @returns the result of the resize operation(s)\n */\nexport async function resizeAndTransformImageSizes({\n config,\n dimensions,\n file,\n mimeType,\n req,\n savedFilename,\n sharp,\n staticPath,\n uploadEdits,\n withMetadata,\n}: ResizeArgs): Promise<ImageSizesResult> {\n const { focalPoint: focalPointEnabled = true, imageSizes } = config.upload\n\n // Focal point adjustments\n const incomingFocalPoint = uploadEdits.focalPoint\n ? {\n x: isNumber(uploadEdits.focalPoint.x) ? Math.round(uploadEdits.focalPoint.x) : 50,\n y: isNumber(uploadEdits.focalPoint.y) ? Math.round(uploadEdits.focalPoint.y) : 50,\n }\n : undefined\n\n const defaultResult: ImageSizesResult = {\n ...(focalPointEnabled && incomingFocalPoint && { focalPoint: incomingFocalPoint }),\n sizeData: {},\n sizesToSave: [],\n }\n\n if (!imageSizes || !sharp) {\n return defaultResult\n }\n\n // Determine if the file is animated\n const fileIsAnimatedType = ['image/avif', 'image/gif', 'image/webp'].includes(file.mimetype)\n const sharpOptions: SharpOptions = {}\n\n if (fileIsAnimatedType) {\n sharpOptions.animated = true\n }\n\n const sharpBase: Sharp | undefined = sharp(file.tempFilePath || file.data, sharpOptions).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081\n const originalImageMeta = await sharpBase.metadata()\n\n const resizeImageMeta = {\n height: extractHeightFromImage(originalImageMeta),\n width: originalImageMeta.width,\n }\n\n const results: ImageSizesResult[] = await Promise.all(\n imageSizes.map(async (imageResizeConfig): Promise<ImageSizesResult> => {\n imageResizeConfig = sanitizeResizeConfig(imageResizeConfig)\n\n const resizeAction = getImageResizeAction({\n dimensions,\n hasFocalPoint: Boolean(incomingFocalPoint),\n imageResizeConfig,\n })\n if (resizeAction === 'omit') {\n return createResult({ name: imageResizeConfig.name })\n }\n\n const imageToResize = sharpBase.clone()\n let resized = imageToResize\n\n if (resizeAction === 'resizeWithFocalPoint') {\n let { height: resizeHeight, width: resizeWidth } = imageResizeConfig\n\n const originalAspectRatio = dimensions.width / dimensions.height\n\n // Calculate resizeWidth based on original aspect ratio if it's undefined\n if (resizeHeight && !resizeWidth) {\n resizeWidth = Math.round(resizeHeight * originalAspectRatio)\n }\n\n // Calculate resizeHeight based on original aspect ratio if it's undefined\n if (resizeWidth && !resizeHeight) {\n resizeHeight = Math.round(resizeWidth / originalAspectRatio)\n }\n\n if (!resizeHeight) {\n resizeHeight = resizeImageMeta.height\n }\n if (!resizeWidth) {\n resizeWidth = resizeImageMeta.width\n }\n\n const resizeAspectRatio = resizeWidth / resizeHeight\n const prioritizeHeight = resizeAspectRatio < originalAspectRatio\n // Scales the image before extracting from it\n resized = imageToResize.resize({\n height: prioritizeHeight ? resizeHeight : undefined,\n width: prioritizeHeight ? undefined : resizeWidth,\n })\n\n const metadataAppendedFile = await optionallyAppendMetadata({\n req,\n sharpFile: resized,\n withMetadata,\n })\n\n // Must read from buffer, resized.metadata will return the original image metadata\n const { info } = await metadataAppendedFile.toBuffer({ resolveWithObject: true })\n\n resizeImageMeta.height = extractHeightFromImage({\n ...originalImageMeta,\n height: info.height,\n })\n resizeImageMeta.width = info.width\n\n const halfResizeX = resizeWidth / 2\n const xFocalCenter = resizeImageMeta.width * (incomingFocalPoint.x / 100)\n const calculatedRightPixelBound = xFocalCenter + halfResizeX\n let leftBound = xFocalCenter - halfResizeX\n\n // if the right bound is greater than the image width, adjust the left bound\n // keeping focus on the right\n if (calculatedRightPixelBound > resizeImageMeta.width) {\n leftBound = resizeImageMeta.width - resizeWidth\n }\n\n // if the left bound is less than 0, adjust the left bound to 0\n // keeping the focus on the left\n if (leftBound < 0) {\n leftBound = 0\n }\n\n const halfResizeY = resizeHeight / 2\n const yFocalCenter = resizeImageMeta.height * (incomingFocalPoint.y / 100)\n const calculatedBottomPixelBound = yFocalCenter + halfResizeY\n let topBound = yFocalCenter - halfResizeY\n\n // if the bottom bound is greater than the image height, adjust the top bound\n // keeping the image as far right as possible\n if (calculatedBottomPixelBound > resizeImageMeta.height) {\n topBound = resizeImageMeta.height - resizeHeight\n }\n\n // if the top bound is less than 0, adjust the top bound to 0\n // keeping the image focus near the top\n if (topBound < 0) {\n topBound = 0\n }\n\n resized = resized.extract({\n height: resizeHeight,\n left: Math.floor(leftBound),\n top: Math.floor(topBound),\n width: resizeWidth,\n })\n } else {\n resized = imageToResize.resize(imageResizeConfig)\n }\n\n if (imageResizeConfig.formatOptions) {\n resized = resized.toFormat(\n imageResizeConfig.formatOptions.format,\n imageResizeConfig.formatOptions.options,\n )\n }\n\n if (imageResizeConfig.trimOptions) {\n resized = resized.trim(imageResizeConfig.trimOptions)\n }\n\n const metadataAppendedFile = await optionallyAppendMetadata({\n req,\n sharpFile: resized,\n withMetadata,\n })\n\n const { data: bufferData, info: bufferInfo } = await metadataAppendedFile.toBuffer({\n resolveWithObject: true,\n })\n\n const sanitizedImage = getSanitizedImageData(savedFilename)\n\n if (req.payloadUploadSizes) {\n req.payloadUploadSizes[imageResizeConfig.name] = bufferData\n }\n\n const mimeInfo = await fileTypeFromBuffer(bufferData)\n\n const imageNameWithDimensions = imageResizeConfig.generateImageName\n ? imageResizeConfig.generateImageName({\n extension: mimeInfo?.ext || sanitizedImage.ext,\n height: extractHeightFromImage({\n ...originalImageMeta,\n height: bufferInfo.height,\n }),\n originalName: sanitizedImage.name,\n sizeName: imageResizeConfig.name,\n width: bufferInfo.width,\n })\n : createImageName({\n extension: mimeInfo?.ext || sanitizedImage.ext,\n height: extractHeightFromImage({\n ...originalImageMeta,\n height: bufferInfo.height,\n }),\n outputImageName: sanitizedImage.name,\n width: bufferInfo.width,\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 fileIsAnimatedType && originalImageMeta.pages ? height / originalImageMeta.pages : height,\n mimeType: mimeInfo?.mime || mimeType,\n sizesToSave: [{ buffer: bufferData, path: imagePath }],\n width,\n })\n }),\n )\n\n return results.reduce(\n (acc, result) => {\n Object.assign(acc.sizeData, result.sizeData)\n acc.sizesToSave.push(...result.sizesToSave)\n return acc\n },\n { ...defaultResult },\n )\n}\n"],"names":["fileTypeFromBuffer","fs","sanitize","isNumber","fileExists","optionallyAppendMetadata","getSanitizedImageData","sourceImage","extension","split","pop","name","substring","lastIndexOf","ext","createImageName","height","outputImageName","width","createResult","filename","filesize","mimeType","sizesToSave","sizeData","getImageResizeAction","dimensions","originalImage","hasFocalPoint","imageResizeConfig","fit","targetHeight","targetWidth","withoutEnlargement","withoutReduction","originalImageIsSmallerXAndY","undefined","originalImageIsSmallerXOrY","targetAspectRatio","originalAspectRatio","sanitizeResizeConfig","resizeConfig","position","extractHeightFromImage","sharpMetadata","pages","resizeAndTransformImageSizes","config","file","req","savedFilename","sharp","staticPath","uploadEdits","withMetadata","focalPoint","focalPointEnabled","imageSizes","upload","incomingFocalPoint","x","Math","round","y","defaultResult","fileIsAnimatedType","includes","mimetype","sharpOptions","animated","sharpBase","tempFilePath","data","rotate","originalImageMeta","metadata","resizeImageMeta","results","Promise","all","map","resizeAction","Boolean","imageToResize","clone","resized","resizeHeight","resizeWidth","resizeAspectRatio","prioritizeHeight","resize","metadataAppendedFile","sharpFile","info","toBuffer","resolveWithObject","halfResizeX","xFocalCenter","calculatedRightPixelBound","leftBound","halfResizeY","yFocalCenter","calculatedBottomPixelBound","topBound","extract","left","floor","top","formatOptions","toFormat","format","options","trimOptions","trim","bufferData","bufferInfo","sanitizedImage","payloadUploadSizes","mimeInfo","imageNameWithDimensions","generateImageName","originalName","sizeName","imagePath","unlinkSync","size","mime","buffer","path","reduce","acc","result","Object","assign","push"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export default function isImage(mimeType: string): boolean;
1
+ export declare function isImage(mimeType: string): boolean;
2
2
  //# sourceMappingURL=isImage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isImage.d.ts","sourceRoot":"","sources":["../../src/uploads/isImage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMzD"}
1
+ {"version":3,"file":"isImage.d.ts","sourceRoot":"","sources":["../../src/uploads/isImage.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMjD"}
@@ -1,4 +1,4 @@
1
- export default function isImage(mimeType) {
1
+ export function isImage(mimeType) {
2
2
  return [
3
3
  'image/jpeg',
4
4
  'image/png',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/isImage.ts"],"sourcesContent":["export default function isImage(mimeType: string): boolean {\n return (\n ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/webp', 'image/avif'].indexOf(\n mimeType,\n ) > -1\n )\n}\n"],"names":["isImage","mimeType","indexOf"],"rangeMappings":";;;;;;;;;","mappings":"AAAA,eAAe,SAASA,QAAQC,QAAgB;IAC9C,OACE;QAAC;QAAc;QAAa;QAAa;QAAiB;QAAc;KAAa,CAACC,OAAO,CAC3FD,YACE,CAAC;AAET"}
1
+ {"version":3,"sources":["../../src/uploads/isImage.ts"],"sourcesContent":["export function isImage(mimeType: string): boolean {\n return (\n ['image/jpeg', 'image/png', 'image/gif', 'image/svg+xml', 'image/webp', 'image/avif'].indexOf(\n mimeType,\n ) > -1\n )\n}\n"],"names":["isImage","mimeType","indexOf"],"mappings":"AAAA,OAAO,SAASA,QAAQC,QAAgB;IACtC,OACE;QAAC;QAAc;QAAa;QAAa;QAAiB;QAAc;KAAa,CAACC,OAAO,CAC3FD,YACE,CAAC;AAET"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/mimeTypeValidator.ts"],"sourcesContent":["import type { Validate } from '../fields/config/types.js'\n\nexport const mimeTypeValidator =\n (mimeTypes: string[]): Validate =>\n (val: string, { siblingData }) => {\n if (!siblingData.filename) {\n return true\n }\n\n if (!val) {\n return 'Invalid file type'\n }\n\n const cleanedMimeTypes = mimeTypes.map((v) => v.replace('*', ''))\n return !cleanedMimeTypes.some((v) => val.startsWith(v)) ? `Invalid file type: '${val}'` : true\n }\n"],"names":["mimeTypeValidator","mimeTypes","val","siblingData","filename","cleanedMimeTypes","map","v","replace","some","startsWith"],"rangeMappings":";;;;;;;;;","mappings":"AAEA,OAAO,MAAMA,oBACX,CAACC,YACD,CAACC,KAAa,EAAEC,WAAW,EAAE;QAC3B,IAAI,CAACA,YAAYC,QAAQ,EAAE;YACzB,OAAO;QACT;QAEA,IAAI,CAACF,KAAK;YACR,OAAO;QACT;QAEA,MAAMG,mBAAmBJ,UAAUK,GAAG,CAAC,CAACC,IAAMA,EAAEC,OAAO,CAAC,KAAK;QAC7D,OAAO,CAACH,iBAAiBI,IAAI,CAAC,CAACF,IAAML,IAAIQ,UAAU,CAACH,MAAM,CAAC,oBAAoB,EAAEL,IAAI,CAAC,CAAC,GAAG;IAC5F,EAAC"}
1
+ {"version":3,"sources":["../../src/uploads/mimeTypeValidator.ts"],"sourcesContent":["import type { Validate } from '../fields/config/types.js'\n\nexport const mimeTypeValidator =\n (mimeTypes: string[]): Validate =>\n (val: string, { siblingData }) => {\n if (!siblingData.filename) {\n return true\n }\n\n if (!val) {\n return 'Invalid file type'\n }\n\n const cleanedMimeTypes = mimeTypes.map((v) => v.replace('*', ''))\n return !cleanedMimeTypes.some((v) => val.startsWith(v)) ? `Invalid file type: '${val}'` : true\n }\n"],"names":["mimeTypeValidator","mimeTypes","val","siblingData","filename","cleanedMimeTypes","map","v","replace","some","startsWith"],"mappings":"AAEA,OAAO,MAAMA,oBACX,CAACC,YACD,CAACC,KAAa,EAAEC,WAAW,EAAE;QAC3B,IAAI,CAACA,YAAYC,QAAQ,EAAE;YACzB,OAAO;QACT;QAEA,IAAI,CAACF,KAAK;YACR,OAAO;QACT;QAEA,MAAMG,mBAAmBJ,UAAUK,GAAG,CAAC,CAACC,IAAMA,EAAEC,OAAO,CAAC,KAAK;QAC7D,OAAO,CAACH,iBAAiBI,IAAI,CAAC,CAACF,IAAML,IAAIQ,UAAU,CAACH,MAAM,CAAC,oBAAoB,EAAEL,IAAI,CAAC,CAAC,GAAG;IAC5F,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/uploads/mimeTypeValidator.spec.ts"],"sourcesContent":["import type { ValidateOptions } from '../fields/config/types'\n\nimport { mimeTypeValidator } from './mimeTypeValidator'\n\nconst options = { siblingData: { filename: 'file.xyz' } } as ValidateOptions<\n undefined,\n undefined,\n undefined\n>\n\ndescribe('mimeTypeValidator', () => {\n it('should validate single mimeType', () => {\n const mimeTypes = ['image/png']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n })\n\n it('should validate multiple mimeTypes', () => {\n const mimeTypes = ['image/png', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('application/pdf', options)).toBe(true)\n })\n\n it('should validate using wildcard', () => {\n const mimeTypes = ['image/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('image/gif', options)).toBe(true)\n })\n\n it('should validate multiple wildcards', () => {\n const mimeTypes = ['image/*', 'audio/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('audio/mpeg', options)).toBe(true)\n })\n\n it('should not validate when unmatched', () => {\n const mimeTypes = ['image/png']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate when unmatched - multiple mimeTypes', () => {\n const mimeTypes = ['image/png', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate using wildcard - unmatched', () => {\n const mimeTypes = ['image/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate multiple wildcards - unmatched', () => {\n const mimeTypes = ['image/*', 'audio/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('video/mp4', options)).toBe(\"Invalid file type: 'video/mp4'\")\n expect(validate('application/pdf', options)).toBe(\"Invalid file type: 'application/pdf'\")\n })\n\n it('should not error when mimeType is missing', () => {\n const mimeTypes = ['image/*', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n let value\n expect(validate(value, options)).toBe('Invalid file type')\n })\n})\n"],"names":["mimeTypeValidator","options","siblingData","filename","describe","it","mimeTypes","validate","expect","toBe","value"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,iBAAiB,QAAQ,sBAAqB;AAEvD,MAAMC,UAAU;IAAEC,aAAa;QAAEC,UAAU;IAAW;AAAE;AAMxDC,SAAS,qBAAqB;IAC5BC,GAAG,mCAAmC;QACpC,MAAMC,YAAY;YAAC;SAAY;QAC/B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;IAC9C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;YAAa;SAAkB;QAClD,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,mBAAmBN,UAAUQ,IAAI,CAAC;IACpD;IAEAJ,GAAG,kCAAkC;QACnC,MAAMC,YAAY;YAAC;SAAU;QAC7B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;IAC9C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;YAAW;SAAU;QACxC,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;SAAY;QAC/B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,2DAA2D;QAC5D,MAAMC,YAAY;YAAC;YAAa;SAAkB;QAClD,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,kDAAkD;QACnD,MAAMC,YAAY;YAAC;SAAU;QAC7B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,sDAAsD;QACvD,MAAMC,YAAY;YAAC;YAAW;SAAU;QACxC,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,mBAAmBN,UAAUQ,IAAI,CAAC;IACpD;IAEAJ,GAAG,6CAA6C;QAC9C,MAAMC,YAAY;YAAC;YAAW;SAAkB;QAChD,MAAMC,WAAWP,kBAAkBM;QACnC,IAAII;QACJF,OAAOD,SAASG,OAAOT,UAAUQ,IAAI,CAAC;IACxC;AACF"}
1
+ {"version":3,"sources":["../../src/uploads/mimeTypeValidator.spec.ts"],"sourcesContent":["import type { ValidateOptions } from '../fields/config/types'\n\nimport { mimeTypeValidator } from './mimeTypeValidator'\n\nconst options = { siblingData: { filename: 'file.xyz' } } as ValidateOptions<\n undefined,\n undefined,\n undefined\n>\n\ndescribe('mimeTypeValidator', () => {\n it('should validate single mimeType', () => {\n const mimeTypes = ['image/png']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n })\n\n it('should validate multiple mimeTypes', () => {\n const mimeTypes = ['image/png', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('application/pdf', options)).toBe(true)\n })\n\n it('should validate using wildcard', () => {\n const mimeTypes = ['image/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('image/gif', options)).toBe(true)\n })\n\n it('should validate multiple wildcards', () => {\n const mimeTypes = ['image/*', 'audio/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('image/png', options)).toBe(true)\n expect(validate('audio/mpeg', options)).toBe(true)\n })\n\n it('should not validate when unmatched', () => {\n const mimeTypes = ['image/png']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate when unmatched - multiple mimeTypes', () => {\n const mimeTypes = ['image/png', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate using wildcard - unmatched', () => {\n const mimeTypes = ['image/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('audio/mpeg', options)).toBe(\"Invalid file type: 'audio/mpeg'\")\n })\n\n it('should not validate multiple wildcards - unmatched', () => {\n const mimeTypes = ['image/*', 'audio/*']\n const validate = mimeTypeValidator(mimeTypes)\n expect(validate('video/mp4', options)).toBe(\"Invalid file type: 'video/mp4'\")\n expect(validate('application/pdf', options)).toBe(\"Invalid file type: 'application/pdf'\")\n })\n\n it('should not error when mimeType is missing', () => {\n const mimeTypes = ['image/*', 'application/pdf']\n const validate = mimeTypeValidator(mimeTypes)\n let value\n expect(validate(value, options)).toBe('Invalid file type')\n })\n})\n"],"names":["mimeTypeValidator","options","siblingData","filename","describe","it","mimeTypes","validate","expect","toBe","value"],"mappings":"AAEA,SAASA,iBAAiB,QAAQ,sBAAqB;AAEvD,MAAMC,UAAU;IAAEC,aAAa;QAAEC,UAAU;IAAW;AAAE;AAMxDC,SAAS,qBAAqB;IAC5BC,GAAG,mCAAmC;QACpC,MAAMC,YAAY;YAAC;SAAY;QAC/B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;IAC9C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;YAAa;SAAkB;QAClD,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,mBAAmBN,UAAUQ,IAAI,CAAC;IACpD;IAEAJ,GAAG,kCAAkC;QACnC,MAAMC,YAAY;YAAC;SAAU;QAC7B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;IAC9C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;YAAW;SAAU;QACxC,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,sCAAsC;QACvC,MAAMC,YAAY;YAAC;SAAY;QAC/B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,2DAA2D;QAC5D,MAAMC,YAAY;YAAC;YAAa;SAAkB;QAClD,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,kDAAkD;QACnD,MAAMC,YAAY;YAAC;SAAU;QAC7B,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,cAAcN,UAAUQ,IAAI,CAAC;IAC/C;IAEAJ,GAAG,sDAAsD;QACvD,MAAMC,YAAY;YAAC;YAAW;SAAU;QACxC,MAAMC,WAAWP,kBAAkBM;QACnCE,OAAOD,SAAS,aAAaN,UAAUQ,IAAI,CAAC;QAC5CD,OAAOD,SAAS,mBAAmBN,UAAUQ,IAAI,CAAC;IACpD;IAEAJ,GAAG,6CAA6C;QAC9C,MAAMC,YAAY;YAAC;YAAW;SAAkB;QAChD,MAAMC,WAAWP,kBAAkBM;QACnC,IAAII;QACJF,OAAOD,SAASG,OAAOT,UAAUQ,IAAI,CAAC;IACxC;AACF"}
@@ -0,0 +1,12 @@
1
+ import type { Sharp, Metadata as SharpMetadata } from 'sharp';
2
+ import type { PayloadRequest } from '../types/index.js';
3
+ export type WithMetadata = ((options: {
4
+ metadata: SharpMetadata;
5
+ req: PayloadRequest;
6
+ }) => Promise<boolean>) | boolean;
7
+ export declare function optionallyAppendMetadata({ req, sharpFile, withMetadata, }: {
8
+ req: PayloadRequest;
9
+ sharpFile: Sharp;
10
+ withMetadata: WithMetadata;
11
+ }): Promise<Sharp>;
12
+ //# sourceMappingURL=optionallyAppendMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optionallyAppendMetadata.d.ts","sourceRoot":"","sources":["../../src/uploads/optionallyAppendMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,OAAO,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAEvD,MAAM,MAAM,YAAY,GACpB,CAAC,CAAC,OAAO,EAAE;IAAE,QAAQ,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,cAAc,CAAA;CAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GACjF,OAAO,CAAA;AAEX,wBAAsB,wBAAwB,CAAC,EAC7C,GAAG,EACH,SAAS,EACT,YAAY,GACb,EAAE;IACD,GAAG,EAAE,cAAc,CAAA;IACnB,SAAS,EAAE,KAAK,CAAA;IAChB,YAAY,EAAE,YAAY,CAAA;CAC3B,GAAG,OAAO,CAAC,KAAK,CAAC,CAcjB"}
@@ -0,0 +1,17 @@
1
+ export async function optionallyAppendMetadata({ req, sharpFile, withMetadata }) {
2
+ const metadata = await sharpFile.metadata();
3
+ if (withMetadata === true) {
4
+ return sharpFile.withMetadata();
5
+ } else if (typeof withMetadata === 'function') {
6
+ const useMetadata = await withMetadata({
7
+ metadata,
8
+ req
9
+ });
10
+ if (useMetadata) {
11
+ return sharpFile.withMetadata();
12
+ }
13
+ }
14
+ return sharpFile;
15
+ }
16
+
17
+ //# sourceMappingURL=optionallyAppendMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/uploads/optionallyAppendMetadata.ts"],"sourcesContent":["import type { Sharp, Metadata as SharpMetadata } from 'sharp'\n\nimport type { PayloadRequest } from '../types/index.js'\n\nexport type WithMetadata =\n | ((options: { metadata: SharpMetadata; req: PayloadRequest }) => Promise<boolean>)\n | boolean\n\nexport async function optionallyAppendMetadata({\n req,\n sharpFile,\n withMetadata,\n}: {\n req: PayloadRequest\n sharpFile: Sharp\n withMetadata: WithMetadata\n}): Promise<Sharp> {\n const metadata = await sharpFile.metadata()\n\n if (withMetadata === true) {\n return sharpFile.withMetadata()\n } else if (typeof withMetadata === 'function') {\n const useMetadata = await withMetadata({ metadata, req })\n\n if (useMetadata) {\n return sharpFile.withMetadata()\n }\n }\n\n return sharpFile\n}\n"],"names":["optionallyAppendMetadata","req","sharpFile","withMetadata","metadata","useMetadata"],"mappings":"AAQA,OAAO,eAAeA,yBAAyB,EAC7CC,GAAG,EACHC,SAAS,EACTC,YAAY,EAKb;IACC,MAAMC,WAAW,MAAMF,UAAUE,QAAQ;IAEzC,IAAID,iBAAiB,MAAM;QACzB,OAAOD,UAAUC,YAAY;IAC/B,OAAO,IAAI,OAAOA,iBAAiB,YAAY;QAC7C,MAAME,cAAc,MAAMF,aAAa;YAAEC;YAAUH;QAAI;QAEvD,IAAII,aAAa;YACf,OAAOH,UAAUC,YAAY;QAC/B;IACF;IAEA,OAAOD;AACT"}