@shadowmkj/plugin-ecommerce 3.85.1

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 (369) hide show
  1. package/LICENSE.md +22 -0
  2. package/README.md +3 -0
  3. package/dist/collections/addresses/createAddressesCollection.d.ts.map +1 -0
  4. package/dist/collections/addresses/createAddressesCollection.js +73 -0
  5. package/dist/collections/addresses/createAddressesCollection.js.map +1 -0
  6. package/dist/collections/addresses/defaultAddressFields.d.ts.map +1 -0
  7. package/dist/collections/addresses/defaultAddressFields.js +72 -0
  8. package/dist/collections/addresses/defaultAddressFields.js.map +1 -0
  9. package/dist/collections/addresses/defaultCountries.d.ts.map +1 -0
  10. package/dist/collections/addresses/defaultCountries.js +169 -0
  11. package/dist/collections/addresses/defaultCountries.js.map +1 -0
  12. package/dist/collections/addresses/hooks/beforeChange.d.ts.map +1 -0
  13. package/dist/collections/addresses/hooks/beforeChange.js +16 -0
  14. package/dist/collections/addresses/hooks/beforeChange.js.map +1 -0
  15. package/dist/collections/carts/beforeChange.d.ts.map +1 -0
  16. package/dist/collections/carts/beforeChange.js +49 -0
  17. package/dist/collections/carts/beforeChange.js.map +1 -0
  18. package/dist/collections/carts/createCartsCollection.d.ts.map +1 -0
  19. package/dist/collections/carts/createCartsCollection.js +194 -0
  20. package/dist/collections/carts/createCartsCollection.js.map +1 -0
  21. package/dist/collections/carts/endpoints/addItem.d.ts.map +1 -0
  22. package/dist/collections/carts/endpoints/addItem.js +54 -0
  23. package/dist/collections/carts/endpoints/addItem.js.map +1 -0
  24. package/dist/collections/carts/endpoints/clearCart.d.ts.map +1 -0
  25. package/dist/collections/carts/endpoints/clearCart.js +41 -0
  26. package/dist/collections/carts/endpoints/clearCart.js.map +1 -0
  27. package/dist/collections/carts/endpoints/mergeCart.d.ts.map +1 -0
  28. package/dist/collections/carts/endpoints/mergeCart.js +72 -0
  29. package/dist/collections/carts/endpoints/mergeCart.js.map +1 -0
  30. package/dist/collections/carts/endpoints/removeItem.d.ts.map +1 -0
  31. package/dist/collections/carts/endpoints/removeItem.js +51 -0
  32. package/dist/collections/carts/endpoints/removeItem.js.map +1 -0
  33. package/dist/collections/carts/endpoints/updateItem.d.ts.map +1 -0
  34. package/dist/collections/carts/endpoints/updateItem.js +95 -0
  35. package/dist/collections/carts/endpoints/updateItem.js.map +1 -0
  36. package/dist/collections/carts/hasCartSecretAccess.d.ts.map +1 -0
  37. package/dist/collections/carts/hasCartSecretAccess.js +24 -0
  38. package/dist/collections/carts/hasCartSecretAccess.js.map +1 -0
  39. package/dist/collections/carts/operations/addItem.d.ts.map +1 -0
  40. package/dist/collections/carts/operations/addItem.js +95 -0
  41. package/dist/collections/carts/operations/addItem.js.map +1 -0
  42. package/dist/collections/carts/operations/clearCart.d.ts.map +1 -0
  43. package/dist/collections/carts/operations/clearCart.js +53 -0
  44. package/dist/collections/carts/operations/clearCart.js.map +1 -0
  45. package/dist/collections/carts/operations/createRequestWithSecret.d.ts.map +1 -0
  46. package/dist/collections/carts/operations/createRequestWithSecret.js +21 -0
  47. package/dist/collections/carts/operations/createRequestWithSecret.js.map +1 -0
  48. package/dist/collections/carts/operations/defaultCartItemMatcher.d.ts.map +1 -0
  49. package/dist/collections/carts/operations/defaultCartItemMatcher.js +25 -0
  50. package/dist/collections/carts/operations/defaultCartItemMatcher.js.map +1 -0
  51. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js +358 -0
  52. package/dist/collections/carts/operations/defaultCartItemMatcher.spec.js.map +1 -0
  53. package/dist/collections/carts/operations/mergeCart.d.ts.map +1 -0
  54. package/dist/collections/carts/operations/mergeCart.js +144 -0
  55. package/dist/collections/carts/operations/mergeCart.js.map +1 -0
  56. package/dist/collections/carts/operations/removeItem.d.ts.map +1 -0
  57. package/dist/collections/carts/operations/removeItem.js +69 -0
  58. package/dist/collections/carts/operations/removeItem.js.map +1 -0
  59. package/dist/collections/carts/operations/types.d.ts.map +1 -0
  60. package/dist/collections/carts/operations/types.js +7 -0
  61. package/dist/collections/carts/operations/types.js.map +1 -0
  62. package/dist/collections/carts/operations/updateItem.d.ts.map +1 -0
  63. package/dist/collections/carts/operations/updateItem.js +110 -0
  64. package/dist/collections/carts/operations/updateItem.js.map +1 -0
  65. package/dist/collections/carts/statusBeforeRead.d.ts.map +1 -0
  66. package/dist/collections/carts/statusBeforeRead.js +18 -0
  67. package/dist/collections/carts/statusBeforeRead.js.map +1 -0
  68. package/dist/collections/orders/createOrdersCollection.d.ts.map +1 -0
  69. package/dist/collections/orders/createOrdersCollection.js +163 -0
  70. package/dist/collections/orders/createOrdersCollection.js.map +1 -0
  71. package/dist/collections/products/createProductsCollection.d.ts.map +1 -0
  72. package/dist/collections/products/createProductsCollection.js +62 -0
  73. package/dist/collections/products/createProductsCollection.js.map +1 -0
  74. package/dist/collections/transactions/createTransactionsCollection.d.ts.map +1 -0
  75. package/dist/collections/transactions/createTransactionsCollection.js +157 -0
  76. package/dist/collections/transactions/createTransactionsCollection.js.map +1 -0
  77. package/dist/collections/variants/createVariantOptionsCollection.d.ts.map +1 -0
  78. package/dist/collections/variants/createVariantOptionsCollection.js +53 -0
  79. package/dist/collections/variants/createVariantOptionsCollection.js.map +1 -0
  80. package/dist/collections/variants/createVariantTypesCollection.d.ts.map +1 -0
  81. package/dist/collections/variants/createVariantTypesCollection.js +49 -0
  82. package/dist/collections/variants/createVariantTypesCollection.js.map +1 -0
  83. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.d.ts.map +1 -0
  84. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js +38 -0
  85. package/dist/collections/variants/createVariantsCollection/hooks/beforeChange.js.map +1 -0
  86. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.d.ts.map +1 -0
  87. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js +58 -0
  88. package/dist/collections/variants/createVariantsCollection/hooks/validateOptions.js.map +1 -0
  89. package/dist/collections/variants/createVariantsCollection/index.d.ts.map +1 -0
  90. package/dist/collections/variants/createVariantsCollection/index.js +107 -0
  91. package/dist/collections/variants/createVariantsCollection/index.js.map +1 -0
  92. package/dist/currencies/index.d.ts.map +1 -0
  93. package/dist/currencies/index.js +20 -0
  94. package/dist/currencies/index.js.map +1 -0
  95. package/dist/endpoints/confirmOrder.d.ts.map +1 -0
  96. package/dist/endpoints/confirmOrder.js +150 -0
  97. package/dist/endpoints/confirmOrder.js.map +1 -0
  98. package/dist/endpoints/initiatePayment.d.ts.map +1 -0
  99. package/dist/endpoints/initiatePayment.js +226 -0
  100. package/dist/endpoints/initiatePayment.js.map +1 -0
  101. package/dist/exports/client/index.d.ts.map +1 -0
  102. package/dist/exports/client/index.js +4 -0
  103. package/dist/exports/client/index.js.map +1 -0
  104. package/dist/exports/client/react.d.ts.map +1 -0
  105. package/dist/exports/client/react.js +5 -0
  106. package/dist/exports/client/react.js.map +1 -0
  107. package/dist/exports/payments/cod.d.ts +2 -0
  108. package/dist/exports/payments/cod.d.ts.map +1 -0
  109. package/dist/exports/payments/cod.js +3 -0
  110. package/dist/exports/payments/cod.js.map +1 -0
  111. package/dist/exports/payments/stripe.d.ts.map +1 -0
  112. package/dist/exports/payments/stripe.js +3 -0
  113. package/dist/exports/payments/stripe.js.map +1 -0
  114. package/dist/exports/rsc.d.ts.map +1 -0
  115. package/dist/exports/rsc.js +4 -0
  116. package/dist/exports/rsc.js.map +1 -0
  117. package/dist/exports/types.d.ts.map +1 -0
  118. package/dist/exports/types.js +3 -0
  119. package/dist/exports/types.js.map +1 -0
  120. package/dist/fields/amountField.d.ts.map +1 -0
  121. package/dist/fields/amountField.js +33 -0
  122. package/dist/fields/amountField.js.map +1 -0
  123. package/dist/fields/cartItemsField.d.ts.map +1 -0
  124. package/dist/fields/cartItemsField.js +55 -0
  125. package/dist/fields/cartItemsField.js.map +1 -0
  126. package/dist/fields/currencyField.d.ts.map +1 -0
  127. package/dist/fields/currencyField.js +29 -0
  128. package/dist/fields/currencyField.js.map +1 -0
  129. package/dist/fields/inventoryField.d.ts.map +1 -0
  130. package/dist/fields/inventoryField.js +16 -0
  131. package/dist/fields/inventoryField.js.map +1 -0
  132. package/dist/fields/pricesField.d.ts.map +1 -0
  133. package/dist/fields/pricesField.js +54 -0
  134. package/dist/fields/pricesField.js.map +1 -0
  135. package/dist/fields/statusField.d.ts.map +1 -0
  136. package/dist/fields/statusField.js +49 -0
  137. package/dist/fields/statusField.js.map +1 -0
  138. package/dist/fields/variantsFields.d.ts.map +1 -0
  139. package/dist/fields/variantsFields.js +48 -0
  140. package/dist/fields/variantsFields.js.map +1 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +258 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/payments/adapters/cod/confirmOrder.d.ts +5 -0
  145. package/dist/payments/adapters/cod/confirmOrder.d.ts.map +1 -0
  146. package/dist/payments/adapters/cod/confirmOrder.js +83 -0
  147. package/dist/payments/adapters/cod/confirmOrder.js.map +1 -0
  148. package/dist/payments/adapters/cod/confirmOrder.spec.js +166 -0
  149. package/dist/payments/adapters/cod/confirmOrder.spec.js.map +1 -0
  150. package/dist/payments/adapters/cod/endpoints/webhooks.d.ts +5 -0
  151. package/dist/payments/adapters/cod/endpoints/webhooks.d.ts.map +1 -0
  152. package/dist/payments/adapters/cod/endpoints/webhooks.js +18 -0
  153. package/dist/payments/adapters/cod/endpoints/webhooks.js.map +1 -0
  154. package/dist/payments/adapters/cod/index.d.ts +12 -0
  155. package/dist/payments/adapters/cod/index.d.ts.map +1 -0
  156. package/dist/payments/adapters/cod/index.js +64 -0
  157. package/dist/payments/adapters/cod/index.js.map +1 -0
  158. package/dist/payments/adapters/cod/initiatePayment.d.ts +5 -0
  159. package/dist/payments/adapters/cod/initiatePayment.d.ts.map +1 -0
  160. package/dist/payments/adapters/cod/initiatePayment.js +91 -0
  161. package/dist/payments/adapters/cod/initiatePayment.js.map +1 -0
  162. package/dist/payments/adapters/stripe/confirmOrder.d.ts.map +1 -0
  163. package/dist/payments/adapters/stripe/confirmOrder.js +113 -0
  164. package/dist/payments/adapters/stripe/confirmOrder.js.map +1 -0
  165. package/dist/payments/adapters/stripe/confirmOrder.spec.js +166 -0
  166. package/dist/payments/adapters/stripe/confirmOrder.spec.js.map +1 -0
  167. package/dist/payments/adapters/stripe/endpoints/webhooks.d.ts.map +1 -0
  168. package/dist/payments/adapters/stripe/endpoints/webhooks.js +53 -0
  169. package/dist/payments/adapters/stripe/endpoints/webhooks.js.map +1 -0
  170. package/dist/payments/adapters/stripe/index.d.ts +61 -0
  171. package/dist/payments/adapters/stripe/index.d.ts.map +1 -0
  172. package/dist/payments/adapters/stripe/index.js +68 -0
  173. package/dist/payments/adapters/stripe/index.js.map +1 -0
  174. package/dist/payments/adapters/stripe/initiatePayment.d.ts.map +1 -0
  175. package/dist/payments/adapters/stripe/initiatePayment.js +113 -0
  176. package/dist/payments/adapters/stripe/initiatePayment.js.map +1 -0
  177. package/dist/react/provider/index.d.ts.map +1 -0
  178. package/dist/react/provider/index.js +1094 -0
  179. package/dist/react/provider/index.js.map +1 -0
  180. package/dist/react/provider/utilities.d.ts.map +1 -0
  181. package/dist/react/provider/utilities.js +13 -0
  182. package/dist/react/provider/utilities.js.map +1 -0
  183. package/dist/translations/index.d.ts.map +1 -0
  184. package/dist/translations/index.js +84 -0
  185. package/dist/translations/index.js.map +1 -0
  186. package/dist/translations/languages/ar.d.ts.map +1 -0
  187. package/dist/translations/languages/ar.js +92 -0
  188. package/dist/translations/languages/ar.js.map +1 -0
  189. package/dist/translations/languages/az.d.ts.map +1 -0
  190. package/dist/translations/languages/az.js +92 -0
  191. package/dist/translations/languages/az.js.map +1 -0
  192. package/dist/translations/languages/bg.d.ts.map +1 -0
  193. package/dist/translations/languages/bg.js +92 -0
  194. package/dist/translations/languages/bg.js.map +1 -0
  195. package/dist/translations/languages/ca.d.ts.map +1 -0
  196. package/dist/translations/languages/ca.js +92 -0
  197. package/dist/translations/languages/ca.js.map +1 -0
  198. package/dist/translations/languages/cs.d.ts.map +1 -0
  199. package/dist/translations/languages/cs.js +92 -0
  200. package/dist/translations/languages/cs.js.map +1 -0
  201. package/dist/translations/languages/da.d.ts.map +1 -0
  202. package/dist/translations/languages/da.js +92 -0
  203. package/dist/translations/languages/da.js.map +1 -0
  204. package/dist/translations/languages/de.d.ts.map +1 -0
  205. package/dist/translations/languages/de.js +92 -0
  206. package/dist/translations/languages/de.js.map +1 -0
  207. package/dist/translations/languages/en.d.ts.map +1 -0
  208. package/dist/translations/languages/en.js +92 -0
  209. package/dist/translations/languages/en.js.map +1 -0
  210. package/dist/translations/languages/es.d.ts.map +1 -0
  211. package/dist/translations/languages/es.js +92 -0
  212. package/dist/translations/languages/es.js.map +1 -0
  213. package/dist/translations/languages/et.d.ts.map +1 -0
  214. package/dist/translations/languages/et.js +92 -0
  215. package/dist/translations/languages/et.js.map +1 -0
  216. package/dist/translations/languages/fa.d.ts.map +1 -0
  217. package/dist/translations/languages/fa.js +92 -0
  218. package/dist/translations/languages/fa.js.map +1 -0
  219. package/dist/translations/languages/fr.d.ts.map +1 -0
  220. package/dist/translations/languages/fr.js +92 -0
  221. package/dist/translations/languages/fr.js.map +1 -0
  222. package/dist/translations/languages/he.d.ts.map +1 -0
  223. package/dist/translations/languages/he.js +92 -0
  224. package/dist/translations/languages/he.js.map +1 -0
  225. package/dist/translations/languages/hr.d.ts.map +1 -0
  226. package/dist/translations/languages/hr.js +92 -0
  227. package/dist/translations/languages/hr.js.map +1 -0
  228. package/dist/translations/languages/hu.d.ts.map +1 -0
  229. package/dist/translations/languages/hu.js +92 -0
  230. package/dist/translations/languages/hu.js.map +1 -0
  231. package/dist/translations/languages/hy.d.ts.map +1 -0
  232. package/dist/translations/languages/hy.js +92 -0
  233. package/dist/translations/languages/hy.js.map +1 -0
  234. package/dist/translations/languages/is.d.ts.map +1 -0
  235. package/dist/translations/languages/is.js +92 -0
  236. package/dist/translations/languages/is.js.map +1 -0
  237. package/dist/translations/languages/it.d.ts.map +1 -0
  238. package/dist/translations/languages/it.js +92 -0
  239. package/dist/translations/languages/it.js.map +1 -0
  240. package/dist/translations/languages/ja.d.ts.map +1 -0
  241. package/dist/translations/languages/ja.js +92 -0
  242. package/dist/translations/languages/ja.js.map +1 -0
  243. package/dist/translations/languages/ko.d.ts.map +1 -0
  244. package/dist/translations/languages/ko.js +92 -0
  245. package/dist/translations/languages/ko.js.map +1 -0
  246. package/dist/translations/languages/lt.d.ts.map +1 -0
  247. package/dist/translations/languages/lt.js +92 -0
  248. package/dist/translations/languages/lt.js.map +1 -0
  249. package/dist/translations/languages/my.d.ts.map +1 -0
  250. package/dist/translations/languages/my.js +92 -0
  251. package/dist/translations/languages/my.js.map +1 -0
  252. package/dist/translations/languages/nb.d.ts.map +1 -0
  253. package/dist/translations/languages/nb.js +92 -0
  254. package/dist/translations/languages/nb.js.map +1 -0
  255. package/dist/translations/languages/nl.d.ts.map +1 -0
  256. package/dist/translations/languages/nl.js +92 -0
  257. package/dist/translations/languages/nl.js.map +1 -0
  258. package/dist/translations/languages/pl.d.ts.map +1 -0
  259. package/dist/translations/languages/pl.js +92 -0
  260. package/dist/translations/languages/pl.js.map +1 -0
  261. package/dist/translations/languages/pt.d.ts.map +1 -0
  262. package/dist/translations/languages/pt.js +92 -0
  263. package/dist/translations/languages/pt.js.map +1 -0
  264. package/dist/translations/languages/ro.d.ts.map +1 -0
  265. package/dist/translations/languages/ro.js +92 -0
  266. package/dist/translations/languages/ro.js.map +1 -0
  267. package/dist/translations/languages/rs.d.ts.map +1 -0
  268. package/dist/translations/languages/rs.js +92 -0
  269. package/dist/translations/languages/rs.js.map +1 -0
  270. package/dist/translations/languages/rsLatin.d.ts.map +1 -0
  271. package/dist/translations/languages/rsLatin.js +92 -0
  272. package/dist/translations/languages/rsLatin.js.map +1 -0
  273. package/dist/translations/languages/ru.d.ts.map +1 -0
  274. package/dist/translations/languages/ru.js +92 -0
  275. package/dist/translations/languages/ru.js.map +1 -0
  276. package/dist/translations/languages/sk.d.ts.map +1 -0
  277. package/dist/translations/languages/sk.js +92 -0
  278. package/dist/translations/languages/sk.js.map +1 -0
  279. package/dist/translations/languages/sl.d.ts.map +1 -0
  280. package/dist/translations/languages/sl.js +92 -0
  281. package/dist/translations/languages/sl.js.map +1 -0
  282. package/dist/translations/languages/sv.d.ts.map +1 -0
  283. package/dist/translations/languages/sv.js +92 -0
  284. package/dist/translations/languages/sv.js.map +1 -0
  285. package/dist/translations/languages/ta.d.ts.map +1 -0
  286. package/dist/translations/languages/ta.js +92 -0
  287. package/dist/translations/languages/ta.js.map +1 -0
  288. package/dist/translations/languages/th.d.ts.map +1 -0
  289. package/dist/translations/languages/th.js +92 -0
  290. package/dist/translations/languages/th.js.map +1 -0
  291. package/dist/translations/languages/tr.d.ts.map +1 -0
  292. package/dist/translations/languages/tr.js +92 -0
  293. package/dist/translations/languages/tr.js.map +1 -0
  294. package/dist/translations/languages/uk.d.ts.map +1 -0
  295. package/dist/translations/languages/uk.js +92 -0
  296. package/dist/translations/languages/uk.js.map +1 -0
  297. package/dist/translations/languages/vi.d.ts.map +1 -0
  298. package/dist/translations/languages/vi.js +92 -0
  299. package/dist/translations/languages/vi.js.map +1 -0
  300. package/dist/translations/languages/zh.d.ts.map +1 -0
  301. package/dist/translations/languages/zh.js +92 -0
  302. package/dist/translations/languages/zh.js.map +1 -0
  303. package/dist/translations/languages/zhTw.d.ts.map +1 -0
  304. package/dist/translations/languages/zhTw.js +92 -0
  305. package/dist/translations/languages/zhTw.js.map +1 -0
  306. package/dist/translations/translation-schema.json +343 -0
  307. package/dist/translations/types.d.ts.map +1 -0
  308. package/dist/translations/types.js +3 -0
  309. package/dist/translations/types.js.map +1 -0
  310. package/dist/types/index.d.ts.map +1 -0
  311. package/dist/types/index.js +3 -0
  312. package/dist/types/index.js.map +1 -0
  313. package/dist/types/utilities.d.ts.map +1 -0
  314. package/dist/types/utilities.js +3 -0
  315. package/dist/types/utilities.js.map +1 -0
  316. package/dist/ui/PriceCell/index.d.ts.map +1 -0
  317. package/dist/ui/PriceCell/index.js +36 -0
  318. package/dist/ui/PriceCell/index.js.map +1 -0
  319. package/dist/ui/PriceInput/FormattedInput.d.ts.map +1 -0
  320. package/dist/ui/PriceInput/FormattedInput.js +147 -0
  321. package/dist/ui/PriceInput/FormattedInput.js.map +1 -0
  322. package/dist/ui/PriceInput/index.css +35 -0
  323. package/dist/ui/PriceInput/index.d.ts.map +1 -0
  324. package/dist/ui/PriceInput/index.js +21 -0
  325. package/dist/ui/PriceInput/index.js.map +1 -0
  326. package/dist/ui/PriceRowLabel/index.css +13 -0
  327. package/dist/ui/PriceRowLabel/index.d.ts.map +1 -0
  328. package/dist/ui/PriceRowLabel/index.js +66 -0
  329. package/dist/ui/PriceRowLabel/index.js.map +1 -0
  330. package/dist/ui/VariantOptionsSelector/ErrorBox.d.ts.map +1 -0
  331. package/dist/ui/VariantOptionsSelector/ErrorBox.js +28 -0
  332. package/dist/ui/VariantOptionsSelector/ErrorBox.js.map +1 -0
  333. package/dist/ui/VariantOptionsSelector/OptionsSelect.d.ts.map +1 -0
  334. package/dist/ui/VariantOptionsSelector/OptionsSelect.js +71 -0
  335. package/dist/ui/VariantOptionsSelector/OptionsSelect.js.map +1 -0
  336. package/dist/ui/VariantOptionsSelector/index.css +37 -0
  337. package/dist/ui/VariantOptionsSelector/index.d.ts.map +1 -0
  338. package/dist/ui/VariantOptionsSelector/index.js +81 -0
  339. package/dist/ui/VariantOptionsSelector/index.js.map +1 -0
  340. package/dist/ui/utilities.d.ts.map +1 -0
  341. package/dist/ui/utilities.js +40 -0
  342. package/dist/ui/utilities.js.map +1 -0
  343. package/dist/utilities/accessComposition.d.ts.map +1 -0
  344. package/dist/utilities/accessComposition.js +103 -0
  345. package/dist/utilities/accessComposition.js.map +1 -0
  346. package/dist/utilities/accessComposition.spec.js +765 -0
  347. package/dist/utilities/accessComposition.spec.js.map +1 -0
  348. package/dist/utilities/defaultProductsValidation.d.ts.map +1 -0
  349. package/dist/utilities/defaultProductsValidation.js +40 -0
  350. package/dist/utilities/defaultProductsValidation.js.map +1 -0
  351. package/dist/utilities/defaultProductsValidation.spec.js +384 -0
  352. package/dist/utilities/defaultProductsValidation.spec.js.map +1 -0
  353. package/dist/utilities/errorCodes.d.ts.map +1 -0
  354. package/dist/utilities/errorCodes.js +4 -0
  355. package/dist/utilities/errorCodes.js.map +1 -0
  356. package/dist/utilities/getCollectionSlugMap.d.ts.map +1 -0
  357. package/dist/utilities/getCollectionSlugMap.js +36 -0
  358. package/dist/utilities/getCollectionSlugMap.js.map +1 -0
  359. package/dist/utilities/getCollectionSlugMap.spec.js +254 -0
  360. package/dist/utilities/getCollectionSlugMap.spec.js.map +1 -0
  361. package/dist/utilities/pushTypeScriptProperties.d.ts.map +1 -0
  362. package/dist/utilities/pushTypeScriptProperties.js +37 -0
  363. package/dist/utilities/pushTypeScriptProperties.js.map +1 -0
  364. package/dist/utilities/sanitizePluginConfig.d.ts.map +1 -0
  365. package/dist/utilities/sanitizePluginConfig.js +75 -0
  366. package/dist/utilities/sanitizePluginConfig.js.map +1 -0
  367. package/dist/utilities/sanitizePluginConfig.spec.js +516 -0
  368. package/dist/utilities/sanitizePluginConfig.spec.js.map +1 -0
  369. package/package.json +114 -0
@@ -0,0 +1,194 @@
1
+ import { amountField } from '../../fields/amountField.js';
2
+ import { cartItemsField } from '../../fields/cartItemsField.js';
3
+ import { currencyField } from '../../fields/currencyField.js';
4
+ import { accessOR, conditional } from '../../utilities/accessComposition.js';
5
+ import { beforeChangeCart } from './beforeChange.js';
6
+ import { addItemEndpoint } from './endpoints/addItem.js';
7
+ import { clearCartEndpoint } from './endpoints/clearCart.js';
8
+ import { mergeCartEndpoint } from './endpoints/mergeCart.js';
9
+ import { removeItemEndpoint } from './endpoints/removeItem.js';
10
+ import { updateItemEndpoint } from './endpoints/updateItem.js';
11
+ import { hasCartSecretAccess } from './hasCartSecretAccess.js';
12
+ import { statusBeforeRead } from './statusBeforeRead.js';
13
+ export const createCartsCollection = (props)=>{
14
+ const { access, allowGuestCarts = false, cartItemMatcher, currenciesConfig, customersSlug = 'users', enableVariants = false, productsSlug = 'products', variantsSlug = 'variants' } = props || {};
15
+ const cartsSlug = 'carts';
16
+ const fields = [
17
+ cartItemsField({
18
+ enableVariants,
19
+ overrides: {
20
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
21
+ t('plugin-ecommerce:items'),
22
+ labels: {
23
+ plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
24
+ t('plugin-ecommerce:items'),
25
+ singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
26
+ t('plugin-ecommerce:item')
27
+ }
28
+ },
29
+ productsSlug,
30
+ variantsSlug
31
+ }),
32
+ {
33
+ name: 'secret',
34
+ type: 'text',
35
+ access: {
36
+ create: ()=>false,
37
+ read: ()=>false,
38
+ update: ()=>false
39
+ },
40
+ admin: {
41
+ hidden: true,
42
+ position: 'sidebar',
43
+ readOnly: true
44
+ },
45
+ index: true,
46
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
47
+ t('plugin-ecommerce:cartSecret')
48
+ },
49
+ {
50
+ name: 'customer',
51
+ type: 'relationship',
52
+ admin: {
53
+ position: 'sidebar'
54
+ },
55
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
56
+ t('plugin-ecommerce:customer'),
57
+ relationTo: customersSlug
58
+ },
59
+ {
60
+ name: 'purchasedAt',
61
+ type: 'date',
62
+ admin: {
63
+ date: {
64
+ pickerAppearance: 'dayAndTime'
65
+ },
66
+ position: 'sidebar'
67
+ },
68
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
69
+ t('plugin-ecommerce:purchasedAt')
70
+ },
71
+ {
72
+ name: 'status',
73
+ type: 'select',
74
+ admin: {
75
+ position: 'sidebar',
76
+ readOnly: true
77
+ },
78
+ hooks: {
79
+ afterRead: [
80
+ statusBeforeRead
81
+ ]
82
+ },
83
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
84
+ t('plugin-ecommerce:status'),
85
+ options: [
86
+ {
87
+ // @ts-expect-error - translations are not typed in plugins yet
88
+ label: ({ t })=>t('plugin-ecommerce:active'),
89
+ value: 'active'
90
+ },
91
+ {
92
+ // @ts-expect-error - translations are not typed in plugins yet
93
+ label: ({ t })=>t('plugin-ecommerce:purchased'),
94
+ value: 'purchased'
95
+ },
96
+ {
97
+ // @ts-expect-error - translations are not typed in plugins yet
98
+ label: ({ t })=>t('plugin-ecommerce:abandoned'),
99
+ value: 'abandoned'
100
+ }
101
+ ],
102
+ virtual: true
103
+ },
104
+ ...currenciesConfig ? [
105
+ {
106
+ type: 'row',
107
+ admin: {
108
+ position: 'sidebar'
109
+ },
110
+ fields: [
111
+ amountField({
112
+ currenciesConfig,
113
+ overrides: {
114
+ name: 'subtotal',
115
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
116
+ t('plugin-ecommerce:subtotal')
117
+ }
118
+ }),
119
+ currencyField({
120
+ currenciesConfig
121
+ })
122
+ ]
123
+ }
124
+ ] : []
125
+ ];
126
+ // Internal access function for guest users (unauthenticated)
127
+ const isGuest = ({ req })=>!req.user;
128
+ const baseConfig = {
129
+ slug: cartsSlug,
130
+ access: {
131
+ create: accessOR(access.isAdmin, access.isAuthenticated, conditional(allowGuestCarts, isGuest)),
132
+ delete: accessOR(access.isAdmin, access.isDocumentOwner, hasCartSecretAccess(allowGuestCarts)),
133
+ read: accessOR(access.isAdmin, access.isDocumentOwner, hasCartSecretAccess(allowGuestCarts)),
134
+ update: accessOR(access.isAdmin, access.isDocumentOwner, hasCartSecretAccess(allowGuestCarts))
135
+ },
136
+ admin: {
137
+ description: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
138
+ t('plugin-ecommerce:cartsCollectionDescription'),
139
+ group: 'Ecommerce',
140
+ useAsTitle: 'createdAt'
141
+ },
142
+ endpoints: [
143
+ addItemEndpoint({
144
+ cartItemMatcher,
145
+ cartsSlug
146
+ }),
147
+ clearCartEndpoint({
148
+ cartsSlug
149
+ }),
150
+ // mergeCartEndpoint uses its own matcher that handles CartItemData for both items
151
+ mergeCartEndpoint({
152
+ cartsSlug
153
+ }),
154
+ removeItemEndpoint({
155
+ cartsSlug
156
+ }),
157
+ updateItemEndpoint({
158
+ cartsSlug
159
+ })
160
+ ],
161
+ fields,
162
+ hooks: {
163
+ afterRead: [
164
+ ({ doc, req })=>{
165
+ // Include secret only if this was just created (stored in context by beforeChange)
166
+ if (req.context?.newCartSecret) {
167
+ doc.secret = req.context.newCartSecret;
168
+ }
169
+ // Secret is otherwise never exposed (field access is locked)
170
+ return doc;
171
+ }
172
+ ],
173
+ beforeChange: [
174
+ // This hook can be used to update the subtotal before saving the cart
175
+ beforeChangeCart({
176
+ productsSlug,
177
+ variantsSlug
178
+ })
179
+ ]
180
+ },
181
+ labels: {
182
+ plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
183
+ t('plugin-ecommerce:carts'),
184
+ singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
185
+ t('plugin-ecommerce:cart')
186
+ },
187
+ timestamps: true
188
+ };
189
+ return {
190
+ ...baseConfig
191
+ };
192
+ };
193
+
194
+ //# sourceMappingURL=createCartsCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/collections/carts/createCartsCollection.ts"],"sourcesContent":["import type { Access, CollectionConfig, Field } from 'payload'\n\nimport type { AccessConfig, CurrenciesConfig } from '../../types/index.js'\nimport type { CartItemMatcher } from './operations/types.js'\n\nimport { amountField } from '../../fields/amountField.js'\nimport { cartItemsField } from '../../fields/cartItemsField.js'\nimport { currencyField } from '../../fields/currencyField.js'\nimport { accessOR, conditional } from '../../utilities/accessComposition.js'\nimport { beforeChangeCart } from './beforeChange.js'\nimport { addItemEndpoint } from './endpoints/addItem.js'\nimport { clearCartEndpoint } from './endpoints/clearCart.js'\nimport { mergeCartEndpoint } from './endpoints/mergeCart.js'\nimport { removeItemEndpoint } from './endpoints/removeItem.js'\nimport { updateItemEndpoint } from './endpoints/updateItem.js'\nimport { hasCartSecretAccess } from './hasCartSecretAccess.js'\nimport { statusBeforeRead } from './statusBeforeRead.js'\n\ntype Props = {\n access: Pick<Required<AccessConfig>, 'isAdmin' | 'isAuthenticated' | 'isDocumentOwner'>\n /**\n * Allow guest (unauthenticated) users to create carts.\n * Defaults to false.\n */\n allowGuestCarts?: boolean\n /**\n * Custom function to determine if two cart items should be considered the same.\n * When items match, their quantities are combined instead of creating separate entries.\n *\n * Use this to add custom uniqueness criteria beyond product and variant IDs.\n *\n * @default defaultCartItemMatcher (matches by product and variant ID only)\n *\n * @example\n * ```ts\n * cartItemMatcher: ({ existingItem, newItem }) => {\n * // Match by product, variant, AND custom delivery option\n * const productMatch = existingItem.product === newItem.product\n * const variantMatch = existingItem.variant === newItem.variant\n * const deliveryMatch = existingItem.deliveryOption === newItem.deliveryOption\n * return productMatch && variantMatch && deliveryMatch\n * }\n * ```\n */\n cartItemMatcher?: CartItemMatcher\n currenciesConfig?: CurrenciesConfig\n /**\n * Slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n /**\n * Enables support for variants in the cart.\n * Defaults to false.\n */\n enableVariants?: boolean\n /**\n * Slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Slug of the variants collection, defaults to 'variants'.\n */\n variantsSlug?: string\n}\n\nexport const createCartsCollection: (props: Props) => CollectionConfig = (props) => {\n const {\n access,\n allowGuestCarts = false,\n cartItemMatcher,\n currenciesConfig,\n customersSlug = 'users',\n enableVariants = false,\n productsSlug = 'products',\n variantsSlug = 'variants',\n } = props || {}\n\n const cartsSlug = 'carts'\n\n const fields: Field[] = [\n cartItemsField({\n enableVariants,\n overrides: {\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:items'),\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:items'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:item'),\n },\n },\n productsSlug,\n variantsSlug,\n }),\n {\n name: 'secret',\n type: 'text',\n access: {\n create: () => false, // Users can't set it manually\n read: () => false, // Never readable via field access (only through afterRead hook)\n update: () => false, // Users can't update it\n },\n admin: {\n hidden: true,\n position: 'sidebar',\n readOnly: true,\n },\n index: true,\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:cartSecret'),\n },\n {\n name: 'customer',\n type: 'relationship',\n admin: {\n position: 'sidebar',\n },\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:customer'),\n relationTo: customersSlug,\n },\n {\n name: 'purchasedAt',\n type: 'date',\n admin: {\n date: { pickerAppearance: 'dayAndTime' },\n position: 'sidebar',\n },\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:purchasedAt'),\n },\n {\n name: 'status',\n type: 'select',\n admin: {\n position: 'sidebar',\n readOnly: true,\n },\n hooks: {\n afterRead: [statusBeforeRead],\n },\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:status'),\n options: [\n {\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:active'),\n value: 'active',\n },\n {\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:purchased'),\n value: 'purchased',\n },\n {\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:abandoned'),\n value: 'abandoned',\n },\n ],\n virtual: true,\n },\n ...(currenciesConfig\n ? [\n {\n type: 'row',\n admin: { position: 'sidebar' },\n fields: [\n amountField({\n currenciesConfig,\n overrides: {\n name: 'subtotal',\n\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:subtotal'),\n },\n }),\n currencyField({\n currenciesConfig,\n }),\n ],\n } as Field,\n ]\n : []),\n ]\n\n // Internal access function for guest users (unauthenticated)\n const isGuest: Access = ({ req }) => !req.user\n\n const baseConfig: CollectionConfig = {\n slug: cartsSlug,\n access: {\n create: accessOR(\n access.isAdmin,\n access.isAuthenticated,\n conditional(allowGuestCarts, isGuest),\n ),\n delete: accessOR(\n access.isAdmin,\n access.isDocumentOwner,\n hasCartSecretAccess(allowGuestCarts),\n ),\n read: accessOR(access.isAdmin, access.isDocumentOwner, hasCartSecretAccess(allowGuestCarts)),\n update: accessOR(\n access.isAdmin,\n access.isDocumentOwner,\n hasCartSecretAccess(allowGuestCarts),\n ),\n },\n admin: {\n description: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:cartsCollectionDescription'),\n group: 'Ecommerce',\n useAsTitle: 'createdAt',\n },\n endpoints: [\n addItemEndpoint({ cartItemMatcher, cartsSlug }),\n clearCartEndpoint({ cartsSlug }),\n // mergeCartEndpoint uses its own matcher that handles CartItemData for both items\n mergeCartEndpoint({ cartsSlug }),\n removeItemEndpoint({ cartsSlug }),\n updateItemEndpoint({ cartsSlug }),\n ],\n fields,\n hooks: {\n afterRead: [\n ({ doc, req }) => {\n // Include secret only if this was just created (stored in context by beforeChange)\n if (req.context?.newCartSecret) {\n doc.secret = req.context.newCartSecret\n }\n // Secret is otherwise never exposed (field access is locked)\n return doc\n },\n ],\n beforeChange: [\n // This hook can be used to update the subtotal before saving the cart\n beforeChangeCart({ productsSlug, variantsSlug }),\n ],\n },\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:carts'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:cart'),\n },\n timestamps: true,\n }\n\n return { ...baseConfig }\n}\n"],"names":["amountField","cartItemsField","currencyField","accessOR","conditional","beforeChangeCart","addItemEndpoint","clearCartEndpoint","mergeCartEndpoint","removeItemEndpoint","updateItemEndpoint","hasCartSecretAccess","statusBeforeRead","createCartsCollection","props","access","allowGuestCarts","cartItemMatcher","currenciesConfig","customersSlug","enableVariants","productsSlug","variantsSlug","cartsSlug","fields","overrides","label","t","labels","plural","singular","name","type","create","read","update","admin","hidden","position","readOnly","index","relationTo","date","pickerAppearance","hooks","afterRead","options","value","virtual","isGuest","req","user","baseConfig","slug","isAdmin","isAuthenticated","delete","isDocumentOwner","description","group","useAsTitle","endpoints","doc","context","newCartSecret","secret","beforeChange","timestamps"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addItem.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/endpoints/addItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAI7D,KAAK,IAAI,GAAG;IACV,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,SAAS,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,mCAAoC,IAAI,KAAG,QAyCrE,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { addDataAndFileToRequest } from 'payload';
2
+ import { addItem } from '../operations/addItem.js';
3
+ /**
4
+ * Creates an endpoint handler for adding items to a cart.
5
+ *
6
+ * Route: POST /api/{cartsSlug}/:id/add-item
7
+ *
8
+ * Request body:
9
+ * - item: { product: string, variant?: string, ...customFields }
10
+ * - quantity?: number (defaults to 1)
11
+ * - secret?: string (for guest cart access)
12
+ */ export const addItemEndpoint = ({ cartItemMatcher, cartsSlug })=>({
13
+ handler: async (req)=>{
14
+ await addDataAndFileToRequest(req);
15
+ const cartID = req.routeParams?.id;
16
+ const data = req.data;
17
+ if (!cartID) {
18
+ return Response.json({
19
+ message: 'Cart ID is required',
20
+ success: false
21
+ }, {
22
+ status: 400
23
+ });
24
+ }
25
+ if (!data?.item?.product) {
26
+ return Response.json({
27
+ message: 'Item with product ID is required',
28
+ success: false
29
+ }, {
30
+ status: 400
31
+ });
32
+ }
33
+ const result = await addItem({
34
+ cartID,
35
+ cartItemMatcher,
36
+ cartsSlug,
37
+ item: data.item,
38
+ payload: req.payload,
39
+ quantity: data.quantity,
40
+ req,
41
+ secret: data.secret
42
+ });
43
+ if (!result.success) {
44
+ return Response.json(result, {
45
+ status: 404
46
+ });
47
+ }
48
+ return Response.json(result);
49
+ },
50
+ method: 'post',
51
+ path: '/:id/add-item'
52
+ });
53
+
54
+ //# sourceMappingURL=addItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/endpoints/addItem.ts"],"sourcesContent":["import type { CollectionSlug, Endpoint } from 'payload'\n\nimport { addDataAndFileToRequest } from 'payload'\n\nimport type { CartItemMatcher } from '../operations/types.js'\n\nimport { addItem } from '../operations/addItem.js'\n\ntype Args = {\n cartItemMatcher?: CartItemMatcher\n cartsSlug: CollectionSlug\n}\n\n/**\n * Creates an endpoint handler for adding items to a cart.\n *\n * Route: POST /api/{cartsSlug}/:id/add-item\n *\n * Request body:\n * - item: { product: string, variant?: string, ...customFields }\n * - quantity?: number (defaults to 1)\n * - secret?: string (for guest cart access)\n */\nexport const addItemEndpoint = ({ cartItemMatcher, cartsSlug }: Args): Endpoint => ({\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n\n const cartID = req.routeParams?.id as string | undefined\n const data = req.data as {\n item?: { [key: string]: unknown; product: string; variant?: string }\n quantity?: number\n secret?: string\n }\n\n if (!cartID) {\n return Response.json({ message: 'Cart ID is required', success: false }, { status: 400 })\n }\n\n if (!data?.item?.product) {\n return Response.json(\n { message: 'Item with product ID is required', success: false },\n { status: 400 },\n )\n }\n\n const result = await addItem({\n cartID,\n cartItemMatcher,\n cartsSlug,\n item: data.item,\n payload: req.payload,\n quantity: data.quantity,\n req,\n secret: data.secret,\n })\n\n if (!result.success) {\n return Response.json(result, { status: 404 })\n }\n\n return Response.json(result)\n },\n method: 'post',\n path: '/:id/add-item',\n})\n"],"names":["addDataAndFileToRequest","addItem","addItemEndpoint","cartItemMatcher","cartsSlug","handler","req","cartID","routeParams","id","data","Response","json","message","success","status","item","product","result","payload","quantity","secret","method","path"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,UAAS;AAIjD,SAASC,OAAO,QAAQ,2BAA0B;AAOlD;;;;;;;;;CASC,GACD,OAAO,MAAMC,kBAAkB,CAAC,EAAEC,eAAe,EAAEC,SAAS,EAAQ,GAAgB,CAAA;QAClFC,SAAS,OAAOC;YACd,MAAMN,wBAAwBM;YAE9B,MAAMC,SAASD,IAAIE,WAAW,EAAEC;YAChC,MAAMC,OAAOJ,IAAII,IAAI;YAMrB,IAAI,CAACH,QAAQ;gBACX,OAAOI,SAASC,IAAI,CAAC;oBAAEC,SAAS;oBAAuBC,SAAS;gBAAM,GAAG;oBAAEC,QAAQ;gBAAI;YACzF;YAEA,IAAI,CAACL,MAAMM,MAAMC,SAAS;gBACxB,OAAON,SAASC,IAAI,CAClB;oBAAEC,SAAS;oBAAoCC,SAAS;gBAAM,GAC9D;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,MAAMG,SAAS,MAAMjB,QAAQ;gBAC3BM;gBACAJ;gBACAC;gBACAY,MAAMN,KAAKM,IAAI;gBACfG,SAASb,IAAIa,OAAO;gBACpBC,UAAUV,KAAKU,QAAQ;gBACvBd;gBACAe,QAAQX,KAAKW,MAAM;YACrB;YAEA,IAAI,CAACH,OAAOJ,OAAO,EAAE;gBACnB,OAAOH,SAASC,IAAI,CAACM,QAAQ;oBAAEH,QAAQ;gBAAI;YAC7C;YAEA,OAAOJ,SAASC,IAAI,CAACM;QACvB;QACAI,QAAQ;QACRC,MAAM;IACR,CAAA,EAAE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearCart.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/endpoints/clearCart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAMvD,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,kBAAmB,IAAI,KAAG,QA6BtD,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { addDataAndFileToRequest } from 'payload';
2
+ import { clearCart } from '../operations/clearCart.js';
3
+ /**
4
+ * Creates an endpoint handler for clearing all items from a cart.
5
+ *
6
+ * Route: POST /api/{cartsSlug}/:id/clear
7
+ *
8
+ * Request body:
9
+ * - secret?: string (for guest cart access)
10
+ */ export const clearCartEndpoint = ({ cartsSlug })=>({
11
+ handler: async (req)=>{
12
+ await addDataAndFileToRequest(req);
13
+ const cartID = req.routeParams?.id;
14
+ const data = req.data;
15
+ if (!cartID) {
16
+ return Response.json({
17
+ message: 'Cart ID is required',
18
+ success: false
19
+ }, {
20
+ status: 400
21
+ });
22
+ }
23
+ const result = await clearCart({
24
+ cartID,
25
+ cartsSlug,
26
+ payload: req.payload,
27
+ req,
28
+ secret: data?.secret
29
+ });
30
+ if (!result.success) {
31
+ return Response.json(result, {
32
+ status: 404
33
+ });
34
+ }
35
+ return Response.json(result);
36
+ },
37
+ method: 'post',
38
+ path: '/:id/clear'
39
+ });
40
+
41
+ //# sourceMappingURL=clearCart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/endpoints/clearCart.ts"],"sourcesContent":["import type { CollectionSlug, Endpoint } from 'payload'\n\nimport { addDataAndFileToRequest } from 'payload'\n\nimport { clearCart } from '../operations/clearCart.js'\n\ntype Args = {\n cartsSlug: CollectionSlug\n}\n\n/**\n * Creates an endpoint handler for clearing all items from a cart.\n *\n * Route: POST /api/{cartsSlug}/:id/clear\n *\n * Request body:\n * - secret?: string (for guest cart access)\n */\nexport const clearCartEndpoint = ({ cartsSlug }: Args): Endpoint => ({\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n\n const cartID = req.routeParams?.id as string | undefined\n const data = req.data as {\n secret?: string\n }\n\n if (!cartID) {\n return Response.json({ message: 'Cart ID is required', success: false }, { status: 400 })\n }\n\n const result = await clearCart({\n cartID,\n cartsSlug,\n payload: req.payload,\n req,\n secret: data?.secret,\n })\n\n if (!result.success) {\n return Response.json(result, { status: 404 })\n }\n\n return Response.json(result)\n },\n method: 'post',\n path: '/:id/clear',\n})\n"],"names":["addDataAndFileToRequest","clearCart","clearCartEndpoint","cartsSlug","handler","req","cartID","routeParams","id","data","Response","json","message","success","status","result","payload","secret","method","path"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,UAAS;AAEjD,SAASC,SAAS,QAAQ,6BAA4B;AAMtD;;;;;;;CAOC,GACD,OAAO,MAAMC,oBAAoB,CAAC,EAAEC,SAAS,EAAQ,GAAgB,CAAA;QACnEC,SAAS,OAAOC;YACd,MAAML,wBAAwBK;YAE9B,MAAMC,SAASD,IAAIE,WAAW,EAAEC;YAChC,MAAMC,OAAOJ,IAAII,IAAI;YAIrB,IAAI,CAACH,QAAQ;gBACX,OAAOI,SAASC,IAAI,CAAC;oBAAEC,SAAS;oBAAuBC,SAAS;gBAAM,GAAG;oBAAEC,QAAQ;gBAAI;YACzF;YAEA,MAAMC,SAAS,MAAMd,UAAU;gBAC7BK;gBACAH;gBACAa,SAASX,IAAIW,OAAO;gBACpBX;gBACAY,QAAQR,MAAMQ;YAChB;YAEA,IAAI,CAACF,OAAOF,OAAO,EAAE;gBACnB,OAAOH,SAASC,IAAI,CAACI,QAAQ;oBAAED,QAAQ;gBAAI;YAC7C;YAEA,OAAOJ,SAASC,IAAI,CAACI;QACvB;QACAG,QAAQ;QACRC,MAAM;IACR,CAAA,EAAE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeCart.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/endpoints/mergeCart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAIvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI/D,KAAK,IAAI,GAAG;IACV,eAAe,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAA;IAClD,SAAS,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,mCAAoC,IAAI,KAAG,QAsDvE,CAAA"}
@@ -0,0 +1,72 @@
1
+ import { addDataAndFileToRequest } from 'payload';
2
+ import { mergeCart } from '../operations/mergeCart.js';
3
+ /**
4
+ * Creates an endpoint handler for merging a guest cart into the authenticated user's cart.
5
+ * This is used when a guest with an existing cart logs in.
6
+ *
7
+ * Route: POST /api/{cartsSlug}/:id/merge
8
+ *
9
+ * Request body:
10
+ * - sourceCartID: string - The ID of the guest cart to merge from
11
+ * - sourceSecret: string - The secret of the guest cart for verification
12
+ *
13
+ * Requires authentication - the :id in the URL is the target cart which must belong to the user.
14
+ */ export const mergeCartEndpoint = ({ cartItemMatcher, cartsSlug })=>({
15
+ handler: async (req)=>{
16
+ // This endpoint requires authentication
17
+ if (!req.user) {
18
+ return Response.json({
19
+ message: 'Authentication required',
20
+ success: false
21
+ }, {
22
+ status: 401
23
+ });
24
+ }
25
+ await addDataAndFileToRequest(req);
26
+ const targetCartID = req.routeParams?.id;
27
+ const data = req.data;
28
+ if (!targetCartID) {
29
+ return Response.json({
30
+ message: 'Target cart ID is required',
31
+ success: false
32
+ }, {
33
+ status: 400
34
+ });
35
+ }
36
+ if (!data?.sourceCartID) {
37
+ return Response.json({
38
+ message: 'Source cart ID is required',
39
+ success: false
40
+ }, {
41
+ status: 400
42
+ });
43
+ }
44
+ if (!data?.sourceSecret) {
45
+ return Response.json({
46
+ message: 'Source cart secret is required',
47
+ success: false
48
+ }, {
49
+ status: 400
50
+ });
51
+ }
52
+ const result = await mergeCart({
53
+ cartItemMatcher,
54
+ cartsSlug,
55
+ payload: req.payload,
56
+ req,
57
+ sourceCartID: data.sourceCartID,
58
+ sourceSecret: data.sourceSecret,
59
+ targetCartID
60
+ });
61
+ if (!result.success) {
62
+ return Response.json(result, {
63
+ status: 404
64
+ });
65
+ }
66
+ return Response.json(result);
67
+ },
68
+ method: 'post',
69
+ path: '/:id/merge'
70
+ });
71
+
72
+ //# sourceMappingURL=mergeCart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/endpoints/mergeCart.ts"],"sourcesContent":["import type { CollectionSlug, Endpoint } from 'payload'\n\nimport { addDataAndFileToRequest } from 'payload'\n\nimport type { MergeCartArgs } from '../operations/mergeCart.js'\n\nimport { mergeCart } from '../operations/mergeCart.js'\n\ntype Args = {\n cartItemMatcher?: MergeCartArgs['cartItemMatcher']\n cartsSlug: CollectionSlug\n}\n\n/**\n * Creates an endpoint handler for merging a guest cart into the authenticated user's cart.\n * This is used when a guest with an existing cart logs in.\n *\n * Route: POST /api/{cartsSlug}/:id/merge\n *\n * Request body:\n * - sourceCartID: string - The ID of the guest cart to merge from\n * - sourceSecret: string - The secret of the guest cart for verification\n *\n * Requires authentication - the :id in the URL is the target cart which must belong to the user.\n */\nexport const mergeCartEndpoint = ({ cartItemMatcher, cartsSlug }: Args): Endpoint => ({\n handler: async (req) => {\n // This endpoint requires authentication\n if (!req.user) {\n return Response.json({ message: 'Authentication required', success: false }, { status: 401 })\n }\n\n await addDataAndFileToRequest(req)\n\n const targetCartID = req.routeParams?.id as string | undefined\n const data = req.data as {\n sourceCartID?: string\n sourceSecret?: string\n }\n\n if (!targetCartID) {\n return Response.json(\n { message: 'Target cart ID is required', success: false },\n { status: 400 },\n )\n }\n\n if (!data?.sourceCartID) {\n return Response.json(\n { message: 'Source cart ID is required', success: false },\n { status: 400 },\n )\n }\n\n if (!data?.sourceSecret) {\n return Response.json(\n { message: 'Source cart secret is required', success: false },\n { status: 400 },\n )\n }\n\n const result = await mergeCart({\n cartItemMatcher,\n cartsSlug,\n payload: req.payload,\n req,\n sourceCartID: data.sourceCartID,\n sourceSecret: data.sourceSecret,\n targetCartID,\n })\n\n if (!result.success) {\n return Response.json(result, { status: 404 })\n }\n\n return Response.json(result)\n },\n method: 'post',\n path: '/:id/merge',\n})\n"],"names":["addDataAndFileToRequest","mergeCart","mergeCartEndpoint","cartItemMatcher","cartsSlug","handler","req","user","Response","json","message","success","status","targetCartID","routeParams","id","data","sourceCartID","sourceSecret","result","payload","method","path"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,UAAS;AAIjD,SAASC,SAAS,QAAQ,6BAA4B;AAOtD;;;;;;;;;;;CAWC,GACD,OAAO,MAAMC,oBAAoB,CAAC,EAAEC,eAAe,EAAEC,SAAS,EAAQ,GAAgB,CAAA;QACpFC,SAAS,OAAOC;YACd,wCAAwC;YACxC,IAAI,CAACA,IAAIC,IAAI,EAAE;gBACb,OAAOC,SAASC,IAAI,CAAC;oBAAEC,SAAS;oBAA2BC,SAAS;gBAAM,GAAG;oBAAEC,QAAQ;gBAAI;YAC7F;YAEA,MAAMZ,wBAAwBM;YAE9B,MAAMO,eAAeP,IAAIQ,WAAW,EAAEC;YACtC,MAAMC,OAAOV,IAAIU,IAAI;YAKrB,IAAI,CAACH,cAAc;gBACjB,OAAOL,SAASC,IAAI,CAClB;oBAAEC,SAAS;oBAA8BC,SAAS;gBAAM,GACxD;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,IAAI,CAACI,MAAMC,cAAc;gBACvB,OAAOT,SAASC,IAAI,CAClB;oBAAEC,SAAS;oBAA8BC,SAAS;gBAAM,GACxD;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,IAAI,CAACI,MAAME,cAAc;gBACvB,OAAOV,SAASC,IAAI,CAClB;oBAAEC,SAAS;oBAAkCC,SAAS;gBAAM,GAC5D;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,MAAMO,SAAS,MAAMlB,UAAU;gBAC7BE;gBACAC;gBACAgB,SAASd,IAAIc,OAAO;gBACpBd;gBACAW,cAAcD,KAAKC,YAAY;gBAC/BC,cAAcF,KAAKE,YAAY;gBAC/BL;YACF;YAEA,IAAI,CAACM,OAAOR,OAAO,EAAE;gBACnB,OAAOH,SAASC,IAAI,CAACU,QAAQ;oBAAEP,QAAQ;gBAAI;YAC7C;YAEA,OAAOJ,SAASC,IAAI,CAACU;QACvB;QACAE,QAAQ;QACRC,MAAM;IACR,CAAA,EAAE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeItem.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/endpoints/removeItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAMvD,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,kBAAmB,IAAI,KAAG,QAmCvD,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { addDataAndFileToRequest } from 'payload';
2
+ import { removeItem } from '../operations/removeItem.js';
3
+ /**
4
+ * Creates an endpoint handler for removing items from a cart.
5
+ *
6
+ * Route: POST /api/{cartsSlug}/:id/remove-item
7
+ *
8
+ * Request body:
9
+ * - itemID: string (the cart item row ID to remove)
10
+ * - secret?: string (for guest cart access)
11
+ */ export const removeItemEndpoint = ({ cartsSlug })=>({
12
+ handler: async (req)=>{
13
+ await addDataAndFileToRequest(req);
14
+ const cartID = req.routeParams?.id;
15
+ const data = req.data;
16
+ if (!cartID) {
17
+ return Response.json({
18
+ message: 'Cart ID is required',
19
+ success: false
20
+ }, {
21
+ status: 400
22
+ });
23
+ }
24
+ if (!data?.itemID) {
25
+ return Response.json({
26
+ message: 'Item ID is required',
27
+ success: false
28
+ }, {
29
+ status: 400
30
+ });
31
+ }
32
+ const result = await removeItem({
33
+ cartID,
34
+ cartsSlug,
35
+ itemID: data.itemID,
36
+ payload: req.payload,
37
+ req,
38
+ secret: data.secret
39
+ });
40
+ if (!result.success) {
41
+ return Response.json(result, {
42
+ status: 404
43
+ });
44
+ }
45
+ return Response.json(result);
46
+ },
47
+ method: 'post',
48
+ path: '/:id/remove-item'
49
+ });
50
+
51
+ //# sourceMappingURL=removeItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/endpoints/removeItem.ts"],"sourcesContent":["import type { CollectionSlug, Endpoint } from 'payload'\n\nimport { addDataAndFileToRequest } from 'payload'\n\nimport { removeItem } from '../operations/removeItem.js'\n\ntype Args = {\n cartsSlug: CollectionSlug\n}\n\n/**\n * Creates an endpoint handler for removing items from a cart.\n *\n * Route: POST /api/{cartsSlug}/:id/remove-item\n *\n * Request body:\n * - itemID: string (the cart item row ID to remove)\n * - secret?: string (for guest cart access)\n */\nexport const removeItemEndpoint = ({ cartsSlug }: Args): Endpoint => ({\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n\n const cartID = req.routeParams?.id as string | undefined\n const data = req.data as {\n itemID?: string\n secret?: string\n }\n\n if (!cartID) {\n return Response.json({ message: 'Cart ID is required', success: false }, { status: 400 })\n }\n\n if (!data?.itemID) {\n return Response.json({ message: 'Item ID is required', success: false }, { status: 400 })\n }\n\n const result = await removeItem({\n cartID,\n cartsSlug,\n itemID: data.itemID,\n payload: req.payload,\n req,\n secret: data.secret,\n })\n\n if (!result.success) {\n return Response.json(result, { status: 404 })\n }\n\n return Response.json(result)\n },\n method: 'post',\n path: '/:id/remove-item',\n})\n"],"names":["addDataAndFileToRequest","removeItem","removeItemEndpoint","cartsSlug","handler","req","cartID","routeParams","id","data","Response","json","message","success","status","itemID","result","payload","secret","method","path"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,UAAS;AAEjD,SAASC,UAAU,QAAQ,8BAA6B;AAMxD;;;;;;;;CAQC,GACD,OAAO,MAAMC,qBAAqB,CAAC,EAAEC,SAAS,EAAQ,GAAgB,CAAA;QACpEC,SAAS,OAAOC;YACd,MAAML,wBAAwBK;YAE9B,MAAMC,SAASD,IAAIE,WAAW,EAAEC;YAChC,MAAMC,OAAOJ,IAAII,IAAI;YAKrB,IAAI,CAACH,QAAQ;gBACX,OAAOI,SAASC,IAAI,CAAC;oBAAEC,SAAS;oBAAuBC,SAAS;gBAAM,GAAG;oBAAEC,QAAQ;gBAAI;YACzF;YAEA,IAAI,CAACL,MAAMM,QAAQ;gBACjB,OAAOL,SAASC,IAAI,CAAC;oBAAEC,SAAS;oBAAuBC,SAAS;gBAAM,GAAG;oBAAEC,QAAQ;gBAAI;YACzF;YAEA,MAAME,SAAS,MAAMf,WAAW;gBAC9BK;gBACAH;gBACAY,QAAQN,KAAKM,MAAM;gBACnBE,SAASZ,IAAIY,OAAO;gBACpBZ;gBACAa,QAAQT,KAAKS,MAAM;YACrB;YAEA,IAAI,CAACF,OAAOH,OAAO,EAAE;gBACnB,OAAOH,SAASC,IAAI,CAACK,QAAQ;oBAAEF,QAAQ;gBAAI;YAC7C;YAEA,OAAOJ,SAASC,IAAI,CAACK;QACvB;QACAG,QAAQ;QACRC,MAAM;IACR,CAAA,EAAE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateItem.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/endpoints/updateItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAQvD,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,kBAAkB,kBAAmB,IAAI,KAAG,QA6DvD,CAAA"}
@@ -0,0 +1,95 @@
1
+ import { addDataAndFileToRequest } from 'payload';
2
+ import { updateItem } from '../operations/updateItem.js';
3
+ /**
4
+ * Creates an endpoint handler for updating an item in a cart.
5
+ * Supports MongoDB-style operators for flexible updates.
6
+ *
7
+ * Route: POST /api/{cartsSlug}/:id/update-item
8
+ *
9
+ * Request body:
10
+ * - itemID: string (the cart item row ID to update)
11
+ * - quantity: number | { $inc: number } (set or increment/decrement)
12
+ * - removeOnZero?: boolean (defaults to true, removes item if quantity reaches 0)
13
+ * - secret?: string (for guest cart access)
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * // Set quantity to 5
18
+ * fetch('/api/carts/123/update-item', {
19
+ * method: 'POST',
20
+ * body: JSON.stringify({ itemID: 'item-456', quantity: 5 })
21
+ * })
22
+ *
23
+ * // Increment by 1
24
+ * fetch('/api/carts/123/update-item', {
25
+ * method: 'POST',
26
+ * body: JSON.stringify({ itemID: 'item-456', quantity: { $inc: 1 } })
27
+ * })
28
+ *
29
+ * // Decrement by 1
30
+ * fetch('/api/carts/123/update-item', {
31
+ * method: 'POST',
32
+ * body: JSON.stringify({ itemID: 'item-456', quantity: { $inc: -1 } })
33
+ * })
34
+ * ```
35
+ */ export const updateItemEndpoint = ({ cartsSlug })=>({
36
+ handler: async (req)=>{
37
+ await addDataAndFileToRequest(req);
38
+ const cartID = req.routeParams?.id;
39
+ const data = req.data;
40
+ if (!cartID) {
41
+ return Response.json({
42
+ message: 'Cart ID is required',
43
+ success: false
44
+ }, {
45
+ status: 400
46
+ });
47
+ }
48
+ if (!data?.itemID) {
49
+ return Response.json({
50
+ message: 'Item ID is required',
51
+ success: false
52
+ }, {
53
+ status: 400
54
+ });
55
+ }
56
+ if (data?.quantity === undefined) {
57
+ return Response.json({
58
+ message: 'Quantity is required',
59
+ success: false
60
+ }, {
61
+ status: 400
62
+ });
63
+ }
64
+ // Validate quantity format
65
+ const isValidQuantity = typeof data.quantity === 'number' || typeof data.quantity === 'object' && data.quantity !== null && '$inc' in data.quantity && typeof data.quantity.$inc === 'number';
66
+ if (!isValidQuantity) {
67
+ return Response.json({
68
+ message: 'Quantity must be a number or { $inc: number }',
69
+ success: false
70
+ }, {
71
+ status: 400
72
+ });
73
+ }
74
+ const result = await updateItem({
75
+ cartID,
76
+ cartsSlug,
77
+ itemID: data.itemID,
78
+ payload: req.payload,
79
+ quantity: data.quantity,
80
+ removeOnZero: data.removeOnZero,
81
+ req,
82
+ secret: data.secret
83
+ });
84
+ if (!result.success) {
85
+ return Response.json(result, {
86
+ status: 404
87
+ });
88
+ }
89
+ return Response.json(result);
90
+ },
91
+ method: 'post',
92
+ path: '/:id/update-item'
93
+ });
94
+
95
+ //# sourceMappingURL=updateItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/endpoints/updateItem.ts"],"sourcesContent":["import type { CollectionSlug, Endpoint } from 'payload'\n\nimport { addDataAndFileToRequest } from 'payload'\n\nimport type { FieldWithOperator } from '../operations/types.js'\n\nimport { updateItem } from '../operations/updateItem.js'\n\ntype Args = {\n cartsSlug: CollectionSlug\n}\n\n/**\n * Creates an endpoint handler for updating an item in a cart.\n * Supports MongoDB-style operators for flexible updates.\n *\n * Route: POST /api/{cartsSlug}/:id/update-item\n *\n * Request body:\n * - itemID: string (the cart item row ID to update)\n * - quantity: number | { $inc: number } (set or increment/decrement)\n * - removeOnZero?: boolean (defaults to true, removes item if quantity reaches 0)\n * - secret?: string (for guest cart access)\n *\n * @example\n * ```ts\n * // Set quantity to 5\n * fetch('/api/carts/123/update-item', {\n * method: 'POST',\n * body: JSON.stringify({ itemID: 'item-456', quantity: 5 })\n * })\n *\n * // Increment by 1\n * fetch('/api/carts/123/update-item', {\n * method: 'POST',\n * body: JSON.stringify({ itemID: 'item-456', quantity: { $inc: 1 } })\n * })\n *\n * // Decrement by 1\n * fetch('/api/carts/123/update-item', {\n * method: 'POST',\n * body: JSON.stringify({ itemID: 'item-456', quantity: { $inc: -1 } })\n * })\n * ```\n */\nexport const updateItemEndpoint = ({ cartsSlug }: Args): Endpoint => ({\n handler: async (req) => {\n await addDataAndFileToRequest(req)\n\n const cartID = req.routeParams?.id as string | undefined\n const data = req.data as {\n itemID?: string\n quantity?: FieldWithOperator<number>\n removeOnZero?: boolean\n secret?: string\n }\n\n if (!cartID) {\n return Response.json({ message: 'Cart ID is required', success: false }, { status: 400 })\n }\n\n if (!data?.itemID) {\n return Response.json({ message: 'Item ID is required', success: false }, { status: 400 })\n }\n\n if (data?.quantity === undefined) {\n return Response.json({ message: 'Quantity is required', success: false }, { status: 400 })\n }\n\n // Validate quantity format\n const isValidQuantity =\n typeof data.quantity === 'number' ||\n (typeof data.quantity === 'object' &&\n data.quantity !== null &&\n '$inc' in data.quantity &&\n typeof data.quantity.$inc === 'number')\n\n if (!isValidQuantity) {\n return Response.json(\n {\n message: 'Quantity must be a number or { $inc: number }',\n success: false,\n },\n { status: 400 },\n )\n }\n\n const result = await updateItem({\n cartID,\n cartsSlug,\n itemID: data.itemID,\n payload: req.payload,\n quantity: data.quantity,\n removeOnZero: data.removeOnZero,\n req,\n secret: data.secret,\n })\n\n if (!result.success) {\n return Response.json(result, { status: 404 })\n }\n\n return Response.json(result)\n },\n method: 'post',\n path: '/:id/update-item',\n})\n"],"names":["addDataAndFileToRequest","updateItem","updateItemEndpoint","cartsSlug","handler","req","cartID","routeParams","id","data","Response","json","message","success","status","itemID","quantity","undefined","isValidQuantity","$inc","result","payload","removeOnZero","secret","method","path"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,UAAS;AAIjD,SAASC,UAAU,QAAQ,8BAA6B;AAMxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCC,GACD,OAAO,MAAMC,qBAAqB,CAAC,EAAEC,SAAS,EAAQ,GAAgB,CAAA;QACpEC,SAAS,OAAOC;YACd,MAAML,wBAAwBK;YAE9B,MAAMC,SAASD,IAAIE,WAAW,EAAEC;YAChC,MAAMC,OAAOJ,IAAII,IAAI;YAOrB,IAAI,CAACH,QAAQ;gBACX,OAAOI,SAASC,IAAI,CAAC;oBAAEC,SAAS;oBAAuBC,SAAS;gBAAM,GAAG;oBAAEC,QAAQ;gBAAI;YACzF;YAEA,IAAI,CAACL,MAAMM,QAAQ;gBACjB,OAAOL,SAASC,IAAI,CAAC;oBAAEC,SAAS;oBAAuBC,SAAS;gBAAM,GAAG;oBAAEC,QAAQ;gBAAI;YACzF;YAEA,IAAIL,MAAMO,aAAaC,WAAW;gBAChC,OAAOP,SAASC,IAAI,CAAC;oBAAEC,SAAS;oBAAwBC,SAAS;gBAAM,GAAG;oBAAEC,QAAQ;gBAAI;YAC1F;YAEA,2BAA2B;YAC3B,MAAMI,kBACJ,OAAOT,KAAKO,QAAQ,KAAK,YACxB,OAAOP,KAAKO,QAAQ,KAAK,YACxBP,KAAKO,QAAQ,KAAK,QAClB,UAAUP,KAAKO,QAAQ,IACvB,OAAOP,KAAKO,QAAQ,CAACG,IAAI,KAAK;YAElC,IAAI,CAACD,iBAAiB;gBACpB,OAAOR,SAASC,IAAI,CAClB;oBACEC,SAAS;oBACTC,SAAS;gBACX,GACA;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,MAAMM,SAAS,MAAMnB,WAAW;gBAC9BK;gBACAH;gBACAY,QAAQN,KAAKM,MAAM;gBACnBM,SAAShB,IAAIgB,OAAO;gBACpBL,UAAUP,KAAKO,QAAQ;gBACvBM,cAAcb,KAAKa,YAAY;gBAC/BjB;gBACAkB,QAAQd,KAAKc,MAAM;YACrB;YAEA,IAAI,CAACH,OAAOP,OAAO,EAAE;gBACnB,OAAOH,SAASC,IAAI,CAACS,QAAQ;oBAAEN,QAAQ;gBAAI;YAC7C;YAEA,OAAOJ,SAASC,IAAI,CAACS;QACvB;QACAI,QAAQ;QACRC,MAAM;IACR,CAAA,EAAE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasCartSecretAccess.d.ts","sourceRoot":"","sources":["../../../src/collections/carts/hasCartSecretAccess.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAErC;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,oBAAqB,OAAO,KAAG,MAkB9D,CAAA"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Internal access function for guest cart access via secret in context or queries.
3
+ * Only active when allowGuestCarts is enabled.
4
+ *
5
+ * @param allowGuestCarts - Whether guest cart access is enabled
6
+ * @returns Access function that checks for valid cart secret in context
7
+ */ export const hasCartSecretAccess = (allowGuestCarts)=>{
8
+ return ({ req })=>{
9
+ if (!allowGuestCarts) {
10
+ return false;
11
+ }
12
+ const cartSecret = req.context?.cartSecret ?? req.query?.secret;
13
+ if (!cartSecret || typeof cartSecret !== 'string') {
14
+ return false;
15
+ }
16
+ return {
17
+ secret: {
18
+ equals: cartSecret
19
+ }
20
+ };
21
+ };
22
+ };
23
+
24
+ //# sourceMappingURL=hasCartSecretAccess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/collections/carts/hasCartSecretAccess.ts"],"sourcesContent":["import type { Access } from 'payload'\n\n/**\n * Internal access function for guest cart access via secret in context or queries.\n * Only active when allowGuestCarts is enabled.\n *\n * @param allowGuestCarts - Whether guest cart access is enabled\n * @returns Access function that checks for valid cart secret in context\n */\nexport const hasCartSecretAccess = (allowGuestCarts: boolean): Access => {\n return ({ req }) => {\n if (!allowGuestCarts) {\n return false\n }\n\n const cartSecret = req.context?.cartSecret ?? req.query?.secret\n\n if (!cartSecret || typeof cartSecret !== 'string') {\n return false\n }\n\n return {\n secret: {\n equals: cartSecret,\n },\n }\n }\n}\n"],"names":["hasCartSecretAccess","allowGuestCarts","req","cartSecret","context","query","secret","equals"],"mappings":"AAEA;;;;;;CAMC,GACD,OAAO,MAAMA,sBAAsB,CAACC;IAClC,OAAO,CAAC,EAAEC,GAAG,EAAE;QACb,IAAI,CAACD,iBAAiB;YACpB,OAAO;QACT;QAEA,MAAME,aAAaD,IAAIE,OAAO,EAAED,cAAcD,IAAIG,KAAK,EAAEC;QAEzD,IAAI,CAACH,cAAc,OAAOA,eAAe,UAAU;YACjD,OAAO;QACT;QAEA,OAAO;YACLG,QAAQ;gBACNC,QAAQJ;YACV;QACF;IACF;AACF,EAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addItem.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/operations/addItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAgB,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAKhF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,OAAO,SAAgB,WAAW,KAAG,OAAO,CAAC,mBAAmB,CA8E5E,CAAA"}