@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,144 @@
1
+ /**
2
+ * Gets the ID from a product/variant field which can be either an ID or a populated object.
3
+ */ const getItemID = (field)=>{
4
+ if (!field) {
5
+ return undefined;
6
+ }
7
+ return typeof field === 'object' ? field.id : field;
8
+ };
9
+ /**
10
+ * Default matcher for merge operations - compares normalized product and variant IDs.
11
+ */ const defaultMergeItemMatcher = (args)=>{
12
+ const { existingItem, newItem } = args;
13
+ const existingProductID = getItemID(existingItem.product);
14
+ const newProductID = getItemID(newItem.product);
15
+ if (existingProductID !== newProductID) {
16
+ return false;
17
+ }
18
+ const existingVariantID = getItemID(existingItem.variant);
19
+ const newVariantID = getItemID(newItem.variant);
20
+ return existingVariantID === newVariantID;
21
+ };
22
+ /**
23
+ * Merges items from a source cart (typically a guest cart) into a target cart (typically a user's cart).
24
+ * Items are merged intelligently - matching items have their quantities combined.
25
+ * After successful merge, the source cart is deleted.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * const result = await mergeCart({
30
+ * payload,
31
+ * cartsSlug: 'carts',
32
+ * targetCartID: 'user-cart-123',
33
+ * sourceCartID: 'guest-cart-456',
34
+ * sourceSecret: 'abc123secret',
35
+ * })
36
+ * ```
37
+ */ export const mergeCart = async (args)=>{
38
+ const { cartItemMatcher = defaultMergeItemMatcher, cartsSlug, payload, req, sourceCartID, sourceSecret, targetCartID } = args;
39
+ // Fetch the source (guest) cart with secret verification
40
+ // Using overrideAccess: true here because we're manually verifying the secret in the where clause
41
+ const sourceCart = await payload.find({
42
+ collection: cartsSlug,
43
+ depth: 0,
44
+ limit: 1,
45
+ overrideAccess: true,
46
+ req,
47
+ where: {
48
+ and: [
49
+ {
50
+ id: {
51
+ equals: sourceCartID
52
+ }
53
+ },
54
+ {
55
+ secret: {
56
+ equals: sourceSecret
57
+ }
58
+ }
59
+ ]
60
+ }
61
+ });
62
+ if (!sourceCart.docs || sourceCart.docs.length === 0) {
63
+ return {
64
+ cart: null,
65
+ message: `Source cart with ID ${sourceCartID} not found or secret mismatch`,
66
+ success: false
67
+ };
68
+ }
69
+ const guestCart = sourceCart.docs[0];
70
+ // Fetch the target (user's) cart
71
+ const targetCart = await payload.findByID({
72
+ id: targetCartID,
73
+ collection: cartsSlug,
74
+ depth: 0,
75
+ overrideAccess: false,
76
+ req
77
+ });
78
+ if (!targetCart) {
79
+ return {
80
+ cart: null,
81
+ message: `Target cart with ID ${targetCartID} not found`,
82
+ success: false
83
+ };
84
+ }
85
+ const sourceItems = guestCart?.items || [];
86
+ const targetItems = targetCart.items || [];
87
+ // Merge items from source into target
88
+ const mergedItems = [
89
+ ...targetItems
90
+ ];
91
+ for (const sourceItem of sourceItems){
92
+ // Find if this item already exists in target cart
93
+ const existingIndex = mergedItems.findIndex((targetItem)=>cartItemMatcher({
94
+ existingItem: targetItem,
95
+ newItem: sourceItem
96
+ }));
97
+ if (existingIndex !== -1) {
98
+ // Item exists in target - add quantities
99
+ const existingItem = mergedItems[existingIndex];
100
+ mergedItems[existingIndex] = {
101
+ ...existingItem,
102
+ quantity: existingItem.quantity + sourceItem.quantity
103
+ };
104
+ } else {
105
+ // Item doesn't exist in target - add it
106
+ // Omit the source item's array row `id` so Payload generates a new one.
107
+ // In SQL, array items are stored in separate tables with their own IDs,
108
+ // and using IDs from another cart's array would cause conflicts.
109
+ const { id: _omit, ...sourceItemWithoutId } = sourceItem;
110
+ mergedItems.push(sourceItemWithoutId);
111
+ }
112
+ }
113
+ // Update the target cart with merged items
114
+ const updatedCart = await payload.update({
115
+ id: targetCartID,
116
+ collection: cartsSlug,
117
+ data: {
118
+ items: mergedItems
119
+ },
120
+ depth: 0,
121
+ overrideAccess: false,
122
+ req
123
+ });
124
+ // Delete the source (guest) cart after successful merge
125
+ // Using overrideAccess: true because we've already verified the secret above
126
+ try {
127
+ await payload.delete({
128
+ id: sourceCartID,
129
+ collection: cartsSlug,
130
+ overrideAccess: true,
131
+ req
132
+ });
133
+ } catch {
134
+ // Silently fail on delete - the merge was still successful
135
+ // The cart may have already been deleted or access denied
136
+ }
137
+ return {
138
+ cart: updatedCart,
139
+ message: `Merged ${sourceItems.length} items from guest cart`,
140
+ success: true
141
+ };
142
+ };
143
+
144
+ //# sourceMappingURL=mergeCart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/operations/mergeCart.ts"],"sourcesContent":["import type { CollectionSlug, DefaultDocumentIDType, Payload, PayloadRequest } from 'payload'\n\nimport type { CartItemData, CartOperationResult } from './types.js'\n\n/**\n * Gets the ID from a product/variant field which can be either an ID or a populated object.\n */\nconst getItemID = (\n field:\n | { [key: string]: unknown; id: DefaultDocumentIDType }\n | DefaultDocumentIDType\n | null\n | undefined,\n): DefaultDocumentIDType | undefined => {\n if (!field) {\n return undefined\n }\n return typeof field === 'object' ? field.id : field\n}\n\n/**\n * Default matcher for merge operations - compares normalized product and variant IDs.\n */\nconst defaultMergeItemMatcher = (args: {\n existingItem: CartItemData\n newItem: CartItemData\n}): boolean => {\n const { existingItem, newItem } = args\n\n const existingProductID = getItemID(existingItem.product)\n const newProductID = getItemID(newItem.product)\n\n if (existingProductID !== newProductID) {\n return false\n }\n\n const existingVariantID = getItemID(existingItem.variant)\n const newVariantID = getItemID(newItem.variant)\n\n return existingVariantID === newVariantID\n}\n\nexport type MergeCartArgs = {\n /**\n * Optional custom cart item matcher function for merge operations.\n * Both items are CartItemData (existing cart items).\n */\n cartItemMatcher?: (args: { existingItem: CartItemData; newItem: CartItemData }) => boolean\n /**\n * The collection slug for carts.\n */\n cartsSlug: CollectionSlug\n /**\n * The Payload instance.\n */\n payload: Payload\n /**\n * The PayloadRequest object for transaction safety.\n */\n req?: PayloadRequest\n /**\n * The ID of the source (guest) cart to merge from.\n */\n sourceCartID: DefaultDocumentIDType\n /**\n * The secret for accessing the source guest cart.\n */\n sourceSecret: string\n /**\n * The ID of the target (user's) cart to merge into.\n */\n targetCartID: DefaultDocumentIDType\n}\n\n/**\n * Merges items from a source cart (typically a guest cart) into a target cart (typically a user's cart).\n * Items are merged intelligently - matching items have their quantities combined.\n * After successful merge, the source cart is deleted.\n *\n * @example\n * ```ts\n * const result = await mergeCart({\n * payload,\n * cartsSlug: 'carts',\n * targetCartID: 'user-cart-123',\n * sourceCartID: 'guest-cart-456',\n * sourceSecret: 'abc123secret',\n * })\n * ```\n */\nexport const mergeCart = async (args: MergeCartArgs): Promise<CartOperationResult> => {\n const {\n cartItemMatcher = defaultMergeItemMatcher,\n cartsSlug,\n payload,\n req,\n sourceCartID,\n sourceSecret,\n targetCartID,\n } = args\n\n // Fetch the source (guest) cart with secret verification\n // Using overrideAccess: true here because we're manually verifying the secret in the where clause\n const sourceCart = await payload.find({\n collection: cartsSlug,\n depth: 0,\n limit: 1,\n overrideAccess: true,\n req,\n where: {\n and: [{ id: { equals: sourceCartID } }, { secret: { equals: sourceSecret } }],\n },\n })\n\n if (!sourceCart.docs || sourceCart.docs.length === 0) {\n return {\n cart: null,\n message: `Source cart with ID ${sourceCartID} not found or secret mismatch`,\n success: false,\n }\n }\n\n const guestCart = sourceCart.docs[0]\n\n // Fetch the target (user's) cart\n const targetCart = await payload.findByID({\n id: targetCartID,\n collection: cartsSlug,\n depth: 0,\n overrideAccess: false,\n req,\n })\n\n if (!targetCart) {\n return {\n cart: null,\n message: `Target cart with ID ${targetCartID} not found`,\n success: false,\n }\n }\n\n const sourceItems: CartItemData[] = (guestCart?.items as CartItemData[]) || []\n const targetItems: CartItemData[] = (targetCart.items as CartItemData[]) || []\n\n // Merge items from source into target\n const mergedItems: CartItemData[] = [...targetItems]\n\n for (const sourceItem of sourceItems) {\n // Find if this item already exists in target cart\n const existingIndex = mergedItems.findIndex((targetItem) =>\n cartItemMatcher({ existingItem: targetItem, newItem: sourceItem }),\n )\n\n if (existingIndex !== -1) {\n // Item exists in target - add quantities\n const existingItem = mergedItems[existingIndex]!\n mergedItems[existingIndex] = {\n ...existingItem,\n quantity: existingItem.quantity + sourceItem.quantity,\n }\n } else {\n // Item doesn't exist in target - add it\n // Omit the source item's array row `id` so Payload generates a new one.\n // In SQL, array items are stored in separate tables with their own IDs,\n // and using IDs from another cart's array would cause conflicts.\n const { id: _omit, ...sourceItemWithoutId } = sourceItem\n mergedItems.push(sourceItemWithoutId as CartItemData)\n }\n }\n\n // Update the target cart with merged items\n const updatedCart = await payload.update({\n id: targetCartID,\n collection: cartsSlug,\n data: {\n items: mergedItems,\n },\n depth: 0,\n overrideAccess: false,\n req,\n })\n\n // Delete the source (guest) cart after successful merge\n // Using overrideAccess: true because we've already verified the secret above\n try {\n await payload.delete({\n id: sourceCartID,\n collection: cartsSlug,\n overrideAccess: true,\n req,\n })\n } catch {\n // Silently fail on delete - the merge was still successful\n // The cart may have already been deleted or access denied\n }\n\n return {\n cart: updatedCart,\n message: `Merged ${sourceItems.length} items from guest cart`,\n success: true,\n }\n}\n"],"names":["getItemID","field","undefined","id","defaultMergeItemMatcher","args","existingItem","newItem","existingProductID","product","newProductID","existingVariantID","variant","newVariantID","mergeCart","cartItemMatcher","cartsSlug","payload","req","sourceCartID","sourceSecret","targetCartID","sourceCart","find","collection","depth","limit","overrideAccess","where","and","equals","secret","docs","length","cart","message","success","guestCart","targetCart","findByID","sourceItems","items","targetItems","mergedItems","sourceItem","existingIndex","findIndex","targetItem","quantity","_omit","sourceItemWithoutId","push","updatedCart","update","data","delete"],"mappings":"AAIA;;CAEC,GACD,MAAMA,YAAY,CAChBC;IAMA,IAAI,CAACA,OAAO;QACV,OAAOC;IACT;IACA,OAAO,OAAOD,UAAU,WAAWA,MAAME,EAAE,GAAGF;AAChD;AAEA;;CAEC,GACD,MAAMG,0BAA0B,CAACC;IAI/B,MAAM,EAAEC,YAAY,EAAEC,OAAO,EAAE,GAAGF;IAElC,MAAMG,oBAAoBR,UAAUM,aAAaG,OAAO;IACxD,MAAMC,eAAeV,UAAUO,QAAQE,OAAO;IAE9C,IAAID,sBAAsBE,cAAc;QACtC,OAAO;IACT;IAEA,MAAMC,oBAAoBX,UAAUM,aAAaM,OAAO;IACxD,MAAMC,eAAeb,UAAUO,QAAQK,OAAO;IAE9C,OAAOD,sBAAsBE;AAC/B;AAkCA;;;;;;;;;;;;;;;CAeC,GACD,OAAO,MAAMC,YAAY,OAAOT;IAC9B,MAAM,EACJU,kBAAkBX,uBAAuB,EACzCY,SAAS,EACTC,OAAO,EACPC,GAAG,EACHC,YAAY,EACZC,YAAY,EACZC,YAAY,EACb,GAAGhB;IAEJ,yDAAyD;IACzD,kGAAkG;IAClG,MAAMiB,aAAa,MAAML,QAAQM,IAAI,CAAC;QACpCC,YAAYR;QACZS,OAAO;QACPC,OAAO;QACPC,gBAAgB;QAChBT;QACAU,OAAO;YACLC,KAAK;gBAAC;oBAAE1B,IAAI;wBAAE2B,QAAQX;oBAAa;gBAAE;gBAAG;oBAAEY,QAAQ;wBAAED,QAAQV;oBAAa;gBAAE;aAAE;QAC/E;IACF;IAEA,IAAI,CAACE,WAAWU,IAAI,IAAIV,WAAWU,IAAI,CAACC,MAAM,KAAK,GAAG;QACpD,OAAO;YACLC,MAAM;YACNC,SAAS,CAAC,oBAAoB,EAAEhB,aAAa,6BAA6B,CAAC;YAC3EiB,SAAS;QACX;IACF;IAEA,MAAMC,YAAYf,WAAWU,IAAI,CAAC,EAAE;IAEpC,iCAAiC;IACjC,MAAMM,aAAa,MAAMrB,QAAQsB,QAAQ,CAAC;QACxCpC,IAAIkB;QACJG,YAAYR;QACZS,OAAO;QACPE,gBAAgB;QAChBT;IACF;IAEA,IAAI,CAACoB,YAAY;QACf,OAAO;YACLJ,MAAM;YACNC,SAAS,CAAC,oBAAoB,EAAEd,aAAa,UAAU,CAAC;YACxDe,SAAS;QACX;IACF;IAEA,MAAMI,cAA8B,AAACH,WAAWI,SAA4B,EAAE;IAC9E,MAAMC,cAA8B,AAACJ,WAAWG,KAAK,IAAuB,EAAE;IAE9E,sCAAsC;IACtC,MAAME,cAA8B;WAAID;KAAY;IAEpD,KAAK,MAAME,cAAcJ,YAAa;QACpC,kDAAkD;QAClD,MAAMK,gBAAgBF,YAAYG,SAAS,CAAC,CAACC,aAC3ChC,gBAAgB;gBAAET,cAAcyC;gBAAYxC,SAASqC;YAAW;QAGlE,IAAIC,kBAAkB,CAAC,GAAG;YACxB,yCAAyC;YACzC,MAAMvC,eAAeqC,WAAW,CAACE,cAAc;YAC/CF,WAAW,CAACE,cAAc,GAAG;gBAC3B,GAAGvC,YAAY;gBACf0C,UAAU1C,aAAa0C,QAAQ,GAAGJ,WAAWI,QAAQ;YACvD;QACF,OAAO;YACL,wCAAwC;YACxC,wEAAwE;YACxE,wEAAwE;YACxE,iEAAiE;YACjE,MAAM,EAAE7C,IAAI8C,KAAK,EAAE,GAAGC,qBAAqB,GAAGN;YAC9CD,YAAYQ,IAAI,CAACD;QACnB;IACF;IAEA,2CAA2C;IAC3C,MAAME,cAAc,MAAMnC,QAAQoC,MAAM,CAAC;QACvClD,IAAIkB;QACJG,YAAYR;QACZsC,MAAM;YACJb,OAAOE;QACT;QACAlB,OAAO;QACPE,gBAAgB;QAChBT;IACF;IAEA,wDAAwD;IACxD,6EAA6E;IAC7E,IAAI;QACF,MAAMD,QAAQsC,MAAM,CAAC;YACnBpD,IAAIgB;YACJK,YAAYR;YACZW,gBAAgB;YAChBT;QACF;IACF,EAAE,OAAM;IACN,2DAA2D;IAC3D,0DAA0D;IAC5D;IAEA,OAAO;QACLgB,MAAMkB;QACNjB,SAAS,CAAC,OAAO,EAAEK,YAAYP,MAAM,CAAC,sBAAsB,CAAC;QAC7DG,SAAS;IACX;AACF,EAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeItem.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/operations/removeItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAInF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,UAAU,SAAgB,cAAc,KAAG,OAAO,CAAC,mBAAmB,CAuDlF,CAAA"}
@@ -0,0 +1,69 @@
1
+ import { createRequestWithSecret } from './createRequestWithSecret.js';
2
+ /**
3
+ * Removes an item from a cart by its row ID.
4
+ *
5
+ * This handler is isolated and can be used from:
6
+ * - Custom endpoints
7
+ * - Local API operations
8
+ * - Hooks
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const result = await removeItem({
13
+ * payload,
14
+ * cartsSlug: 'carts',
15
+ * cartID: '123',
16
+ * itemID: 'item-row-id',
17
+ * })
18
+ * ```
19
+ */ export const removeItem = async (args)=>{
20
+ const { cartID, cartsSlug, itemID, payload, req, secret } = args;
21
+ // Inject secret into request context for access control
22
+ const reqWithSecret = createRequestWithSecret(req, secret);
23
+ const cart = await payload.findByID({
24
+ id: cartID,
25
+ collection: cartsSlug,
26
+ depth: 0,
27
+ overrideAccess: false,
28
+ req: reqWithSecret
29
+ });
30
+ if (!cart) {
31
+ return {
32
+ cart: null,
33
+ message: `Cart with ID ${cartID} not found`,
34
+ success: false
35
+ };
36
+ }
37
+ const existingItems = cart.items || [];
38
+ // Find the item by its row ID
39
+ const itemIndex = existingItems.findIndex((item)=>item.id === itemID);
40
+ if (itemIndex === -1) {
41
+ return {
42
+ cart,
43
+ message: `Item with ID ${itemID} not found in cart`,
44
+ success: false
45
+ };
46
+ }
47
+ // Remove the item
48
+ const updatedItems = [
49
+ ...existingItems
50
+ ];
51
+ updatedItems.splice(itemIndex, 1);
52
+ const updatedCart = await payload.update({
53
+ id: cartID,
54
+ collection: cartsSlug,
55
+ data: {
56
+ items: updatedItems
57
+ },
58
+ depth: 0,
59
+ overrideAccess: false,
60
+ req: reqWithSecret
61
+ });
62
+ return {
63
+ cart: updatedCart,
64
+ message: 'Item removed from cart',
65
+ success: true
66
+ };
67
+ };
68
+
69
+ //# sourceMappingURL=removeItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/operations/removeItem.ts"],"sourcesContent":["import type { CartItemData, CartOperationResult, RemoveItemArgs } from './types.js'\n\nimport { createRequestWithSecret } from './createRequestWithSecret.js'\n\n/**\n * Removes an item from a cart by its row ID.\n *\n * This handler is isolated and can be used from:\n * - Custom endpoints\n * - Local API operations\n * - Hooks\n *\n * @example\n * ```ts\n * const result = await removeItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * })\n * ```\n */\nexport const removeItem = async (args: RemoveItemArgs): Promise<CartOperationResult> => {\n const { cartID, cartsSlug, itemID, payload, req, secret } = args\n\n // Inject secret into request context for access control\n const reqWithSecret = createRequestWithSecret(req, secret)\n\n const cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n if (!cart) {\n return {\n cart: null,\n message: `Cart with ID ${cartID} not found`,\n success: false,\n }\n }\n\n const existingItems: CartItemData[] = (cart.items as CartItemData[]) || []\n\n // Find the item by its row ID\n const itemIndex = existingItems.findIndex((item) => item.id === itemID)\n\n if (itemIndex === -1) {\n return {\n cart,\n message: `Item with ID ${itemID} not found in cart`,\n success: false,\n }\n }\n\n // Remove the item\n const updatedItems = [...existingItems]\n updatedItems.splice(itemIndex, 1)\n\n const updatedCart = await payload.update({\n id: cartID,\n collection: cartsSlug,\n data: {\n items: updatedItems,\n },\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n return {\n cart: updatedCart,\n message: 'Item removed from cart',\n success: true,\n }\n}\n"],"names":["createRequestWithSecret","removeItem","args","cartID","cartsSlug","itemID","payload","req","secret","reqWithSecret","cart","findByID","id","collection","depth","overrideAccess","message","success","existingItems","items","itemIndex","findIndex","item","updatedItems","splice","updatedCart","update","data"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,+BAA8B;AAEtE;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,MAAMC,aAAa,OAAOC;IAC/B,MAAM,EAAEC,MAAM,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAO,EAAEC,GAAG,EAAEC,MAAM,EAAE,GAAGN;IAE5D,wDAAwD;IACxD,MAAMO,gBAAgBT,wBAAwBO,KAAKC;IAEnD,MAAME,OAAO,MAAMJ,QAAQK,QAAQ,CAAC;QAClCC,IAAIT;QACJU,YAAYT;QACZU,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,IAAI,CAACC,MAAM;QACT,OAAO;YACLA,MAAM;YACNM,SAAS,CAAC,aAAa,EAAEb,OAAO,UAAU,CAAC;YAC3Cc,SAAS;QACX;IACF;IAEA,MAAMC,gBAAgC,AAACR,KAAKS,KAAK,IAAuB,EAAE;IAE1E,8BAA8B;IAC9B,MAAMC,YAAYF,cAAcG,SAAS,CAAC,CAACC,OAASA,KAAKV,EAAE,KAAKP;IAEhE,IAAIe,cAAc,CAAC,GAAG;QACpB,OAAO;YACLV;YACAM,SAAS,CAAC,aAAa,EAAEX,OAAO,kBAAkB,CAAC;YACnDY,SAAS;QACX;IACF;IAEA,kBAAkB;IAClB,MAAMM,eAAe;WAAIL;KAAc;IACvCK,aAAaC,MAAM,CAACJ,WAAW;IAE/B,MAAMK,cAAc,MAAMnB,QAAQoB,MAAM,CAAC;QACvCd,IAAIT;QACJU,YAAYT;QACZuB,MAAM;YACJR,OAAOI;QACT;QACAT,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,OAAO;QACLC,MAAMe;QACNT,SAAS;QACTC,SAAS;IACX;AACF,EAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/operations/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Checks if a value is a NumericOperator.
3
+ */ export function isNumericOperator(value) {
4
+ return typeof value === 'object' && value !== null && '$inc' in value;
5
+ }
6
+
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/operations/types.ts"],"sourcesContent":["import type { DefaultDocumentIDType, Payload, PayloadRequest } from 'payload'\n\n/**\n * Represents an item in the cart with populated or ID references.\n */\nexport type CartItemData = {\n [key: string]: unknown\n /**\n * The ID of the cart item. Array item IDs are always strings in Payload,\n * regardless of the database adapter's default ID type.\n */\n id?: string\n product: { [key: string]: unknown; id: DefaultDocumentIDType } | DefaultDocumentIDType\n quantity: number\n variant?: { [key: string]: unknown; id: DefaultDocumentIDType } | DefaultDocumentIDType\n}\n\n/**\n * Represents a new item to be added to the cart.\n */\nexport type NewCartItem = {\n [key: string]: unknown\n product: DefaultDocumentIDType\n quantity?: number\n variant?: DefaultDocumentIDType\n}\n\n/**\n * Arguments for the cart item matcher function.\n */\nexport type CartItemMatcherArgs = {\n /** The existing cart item to compare against */\n existingItem: CartItemData\n /** The new item being added */\n newItem: NewCartItem\n}\n\n/**\n * 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 */\nexport type CartItemMatcher = (args: CartItemMatcherArgs) => boolean\n\n/**\n * MongoDB-style update operator for numeric fields.\n * Supports $inc for increment/decrement operations.\n *\n * @example\n * ```ts\n * // Set quantity to 5\n * { quantity: 5 }\n *\n * // Increment quantity by 1\n * { quantity: { $inc: 1 } }\n *\n * // Decrement quantity by 2\n * { quantity: { $inc: -2 } }\n * ```\n */\nexport type NumericOperator = {\n /** Increment by this value (use negative to decrement) */\n $inc: number\n}\n\n/**\n * A field value that can be either a direct value or an operator.\n */\nexport type FieldWithOperator<T> = NumericOperator | T\n\n/**\n * Checks if a value is a NumericOperator.\n */\nexport function isNumericOperator(value: unknown): value is NumericOperator {\n return typeof value === 'object' && value !== null && '$inc' in value\n}\n\n/**\n * Base arguments for all cart operations.\n */\nexport type BaseCartOperationArgs = {\n /** The cart ID to operate on */\n cartID: DefaultDocumentIDType\n /** The carts collection slug */\n cartsSlug: string\n /** Payload instance */\n payload: Payload\n /** Optional request context for access control */\n req?: PayloadRequest\n /** Secret for guest cart access */\n secret?: string\n}\n\n/**\n * Arguments for the addItem operation.\n */\nexport type AddItemArgs = {\n /** Custom matcher function to determine item uniqueness */\n cartItemMatcher?: CartItemMatcher\n /** The item to add */\n item: NewCartItem\n /** Quantity to add (defaults to 1) */\n quantity?: number\n} & BaseCartOperationArgs\n\n/**\n * Arguments for the removeItem operation.\n */\nexport type RemoveItemArgs = {\n /**\n * The cart item row ID to remove.\n * Array item IDs are always strings in Payload, regardless of the database adapter's default ID type.\n */\n itemID: string\n} & BaseCartOperationArgs\n\n/**\n * Arguments for the updateItem operation.\n * Supports MongoDB-style operators for flexible updates.\n */\nexport type UpdateItemArgs = {\n /**\n * The cart item row ID to update.\n * Array item IDs are always strings in Payload, regardless of the database adapter's default ID type.\n */\n itemID: string\n /**\n * The quantity value or operator.\n * - Direct number: Sets the quantity to this value\n * - { $inc: n }: Increments quantity by n (use negative to decrement)\n *\n * @example\n * ```ts\n * // Set quantity to 5\n * { quantity: 5 }\n *\n * // Increment by 1\n * { quantity: { $inc: 1 } }\n *\n * // Decrement by 1\n * { quantity: { $inc: -1 } }\n * ```\n */\n quantity: FieldWithOperator<number>\n /** Whether to remove the item if quantity reaches 0 (defaults to true) */\n removeOnZero?: boolean\n} & BaseCartOperationArgs\n\n/**\n * Arguments for the clearCart operation.\n */\nexport type ClearCartArgs = BaseCartOperationArgs\n\n/**\n * Result of a cart operation.\n */\nexport type CartOperationResult<T = unknown> = {\n cart: T\n message: string\n success: boolean\n}\n"],"names":["isNumericOperator","value"],"mappings":"AAqEA;;CAEC,GACD,OAAO,SAASA,kBAAkBC,KAAc;IAC9C,OAAO,OAAOA,UAAU,YAAYA,UAAU,QAAQ,UAAUA;AAClE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateItem.d.ts","sourceRoot":"","sources":["../../../../src/collections/carts/operations/updateItem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKnF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,UAAU,SAAgB,cAAc,KAAG,OAAO,CAAC,mBAAmB,CA8ElF,CAAA"}
@@ -0,0 +1,110 @@
1
+ import { createRequestWithSecret } from './createRequestWithSecret.js';
2
+ import { isNumericOperator } from './types.js';
3
+ /**
4
+ * Updates an item in the cart using MongoDB-style operators.
5
+ *
6
+ * This handler is isolated and can be used from:
7
+ * - Custom endpoints
8
+ * - Local API operations
9
+ * - Hooks
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // Set quantity to 5
14
+ * const result = await updateItem({
15
+ * payload,
16
+ * cartsSlug: 'carts',
17
+ * cartID: '123',
18
+ * itemID: 'item-row-id',
19
+ * quantity: 5,
20
+ * })
21
+ *
22
+ * // Increment by 1
23
+ * const result = await updateItem({
24
+ * payload,
25
+ * cartsSlug: 'carts',
26
+ * cartID: '123',
27
+ * itemID: 'item-row-id',
28
+ * quantity: { $inc: 1 },
29
+ * })
30
+ *
31
+ * // Decrement by 2
32
+ * const result = await updateItem({
33
+ * payload,
34
+ * cartsSlug: 'carts',
35
+ * cartID: '123',
36
+ * itemID: 'item-row-id',
37
+ * quantity: { $inc: -2 },
38
+ * })
39
+ * ```
40
+ */ export const updateItem = async (args)=>{
41
+ const { cartID, cartsSlug, itemID, payload, quantity, removeOnZero = true, req, secret } = args;
42
+ // Inject secret into request context for access control
43
+ const reqWithSecret = createRequestWithSecret(req, secret);
44
+ const cart = await payload.findByID({
45
+ id: cartID,
46
+ collection: cartsSlug,
47
+ depth: 0,
48
+ overrideAccess: false,
49
+ req: reqWithSecret
50
+ });
51
+ if (!cart) {
52
+ return {
53
+ cart: null,
54
+ message: `Cart with ID ${cartID} not found`,
55
+ success: false
56
+ };
57
+ }
58
+ const existingItems = cart.items || [];
59
+ // Find the item by its row ID
60
+ const itemIndex = existingItems.findIndex((item)=>item.id === itemID);
61
+ if (itemIndex === -1) {
62
+ return {
63
+ cart,
64
+ message: `Item with ID ${itemID} not found in cart`,
65
+ success: false
66
+ };
67
+ }
68
+ const updatedItems = [
69
+ ...existingItems
70
+ ];
71
+ const existingItem = updatedItems[itemIndex];
72
+ const currentQuantity = existingItem.quantity;
73
+ // Calculate new quantity based on operator or direct value
74
+ let newQuantity;
75
+ if (isNumericOperator(quantity)) {
76
+ // $inc operator: add to current value
77
+ newQuantity = currentQuantity + quantity.$inc;
78
+ } else {
79
+ // Direct value: set to this value
80
+ newQuantity = quantity;
81
+ }
82
+ if (newQuantity <= 0 && removeOnZero) {
83
+ // Remove the item if quantity reaches 0 or below
84
+ updatedItems.splice(itemIndex, 1);
85
+ } else {
86
+ // Update the quantity (minimum 1 if not removing on zero)
87
+ updatedItems[itemIndex] = {
88
+ ...existingItem,
89
+ quantity: removeOnZero ? newQuantity : Math.max(1, newQuantity)
90
+ };
91
+ }
92
+ const updatedCart = await payload.update({
93
+ id: cartID,
94
+ collection: cartsSlug,
95
+ data: {
96
+ items: updatedItems
97
+ },
98
+ depth: 0,
99
+ overrideAccess: false,
100
+ req: reqWithSecret
101
+ });
102
+ const wasRemoved = newQuantity <= 0 && removeOnZero;
103
+ return {
104
+ cart: updatedCart,
105
+ message: wasRemoved ? 'Item removed from cart' : 'Item quantity updated',
106
+ success: true
107
+ };
108
+ };
109
+
110
+ //# sourceMappingURL=updateItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/collections/carts/operations/updateItem.ts"],"sourcesContent":["import type { CartItemData, CartOperationResult, UpdateItemArgs } from './types.js'\n\nimport { createRequestWithSecret } from './createRequestWithSecret.js'\nimport { isNumericOperator } from './types.js'\n\n/**\n * Updates an item in the cart using MongoDB-style operators.\n *\n * This handler is isolated and can be used from:\n * - Custom endpoints\n * - Local API operations\n * - Hooks\n *\n * @example\n * ```ts\n * // Set quantity to 5\n * const result = await updateItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * quantity: 5,\n * })\n *\n * // Increment by 1\n * const result = await updateItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * quantity: { $inc: 1 },\n * })\n *\n * // Decrement by 2\n * const result = await updateItem({\n * payload,\n * cartsSlug: 'carts',\n * cartID: '123',\n * itemID: 'item-row-id',\n * quantity: { $inc: -2 },\n * })\n * ```\n */\nexport const updateItem = async (args: UpdateItemArgs): Promise<CartOperationResult> => {\n const { cartID, cartsSlug, itemID, payload, quantity, removeOnZero = true, req, secret } = args\n\n // Inject secret into request context for access control\n const reqWithSecret = createRequestWithSecret(req, secret)\n\n const cart = await payload.findByID({\n id: cartID,\n collection: cartsSlug,\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n if (!cart) {\n return {\n cart: null,\n message: `Cart with ID ${cartID} not found`,\n success: false,\n }\n }\n\n const existingItems: CartItemData[] = (cart.items as CartItemData[]) || []\n\n // Find the item by its row ID\n const itemIndex = existingItems.findIndex((item) => item.id === itemID)\n\n if (itemIndex === -1) {\n return {\n cart,\n message: `Item with ID ${itemID} not found in cart`,\n success: false,\n }\n }\n\n const updatedItems = [...existingItems]\n const existingItem = updatedItems[itemIndex]!\n const currentQuantity = existingItem.quantity\n\n // Calculate new quantity based on operator or direct value\n let newQuantity: number\n if (isNumericOperator(quantity)) {\n // $inc operator: add to current value\n newQuantity = currentQuantity + quantity.$inc\n } else {\n // Direct value: set to this value\n newQuantity = quantity\n }\n\n if (newQuantity <= 0 && removeOnZero) {\n // Remove the item if quantity reaches 0 or below\n updatedItems.splice(itemIndex, 1)\n } else {\n // Update the quantity (minimum 1 if not removing on zero)\n updatedItems[itemIndex] = {\n ...existingItem,\n quantity: removeOnZero ? newQuantity : Math.max(1, newQuantity),\n }\n }\n\n const updatedCart = await payload.update({\n id: cartID,\n collection: cartsSlug,\n data: {\n items: updatedItems,\n },\n depth: 0,\n overrideAccess: false,\n req: reqWithSecret,\n })\n\n const wasRemoved = newQuantity <= 0 && removeOnZero\n\n return {\n cart: updatedCart,\n message: wasRemoved ? 'Item removed from cart' : 'Item quantity updated',\n success: true,\n }\n}\n"],"names":["createRequestWithSecret","isNumericOperator","updateItem","args","cartID","cartsSlug","itemID","payload","quantity","removeOnZero","req","secret","reqWithSecret","cart","findByID","id","collection","depth","overrideAccess","message","success","existingItems","items","itemIndex","findIndex","item","updatedItems","existingItem","currentQuantity","newQuantity","$inc","splice","Math","max","updatedCart","update","data","wasRemoved"],"mappings":"AAEA,SAASA,uBAAuB,QAAQ,+BAA8B;AACtE,SAASC,iBAAiB,QAAQ,aAAY;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCC,GACD,OAAO,MAAMC,aAAa,OAAOC;IAC/B,MAAM,EAAEC,MAAM,EAAEC,SAAS,EAAEC,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,eAAe,IAAI,EAAEC,GAAG,EAAEC,MAAM,EAAE,GAAGR;IAE3F,wDAAwD;IACxD,MAAMS,gBAAgBZ,wBAAwBU,KAAKC;IAEnD,MAAME,OAAO,MAAMN,QAAQO,QAAQ,CAAC;QAClCC,IAAIX;QACJY,YAAYX;QACZY,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,IAAI,CAACC,MAAM;QACT,OAAO;YACLA,MAAM;YACNM,SAAS,CAAC,aAAa,EAAEf,OAAO,UAAU,CAAC;YAC3CgB,SAAS;QACX;IACF;IAEA,MAAMC,gBAAgC,AAACR,KAAKS,KAAK,IAAuB,EAAE;IAE1E,8BAA8B;IAC9B,MAAMC,YAAYF,cAAcG,SAAS,CAAC,CAACC,OAASA,KAAKV,EAAE,KAAKT;IAEhE,IAAIiB,cAAc,CAAC,GAAG;QACpB,OAAO;YACLV;YACAM,SAAS,CAAC,aAAa,EAAEb,OAAO,kBAAkB,CAAC;YACnDc,SAAS;QACX;IACF;IAEA,MAAMM,eAAe;WAAIL;KAAc;IACvC,MAAMM,eAAeD,YAAY,CAACH,UAAU;IAC5C,MAAMK,kBAAkBD,aAAanB,QAAQ;IAE7C,2DAA2D;IAC3D,IAAIqB;IACJ,IAAI5B,kBAAkBO,WAAW;QAC/B,sCAAsC;QACtCqB,cAAcD,kBAAkBpB,SAASsB,IAAI;IAC/C,OAAO;QACL,kCAAkC;QAClCD,cAAcrB;IAChB;IAEA,IAAIqB,eAAe,KAAKpB,cAAc;QACpC,iDAAiD;QACjDiB,aAAaK,MAAM,CAACR,WAAW;IACjC,OAAO;QACL,0DAA0D;QAC1DG,YAAY,CAACH,UAAU,GAAG;YACxB,GAAGI,YAAY;YACfnB,UAAUC,eAAeoB,cAAcG,KAAKC,GAAG,CAAC,GAAGJ;QACrD;IACF;IAEA,MAAMK,cAAc,MAAM3B,QAAQ4B,MAAM,CAAC;QACvCpB,IAAIX;QACJY,YAAYX;QACZ+B,MAAM;YACJd,OAAOI;QACT;QACAT,OAAO;QACPC,gBAAgB;QAChBR,KAAKE;IACP;IAEA,MAAMyB,aAAaR,eAAe,KAAKpB;IAEvC,OAAO;QACLI,MAAMqB;QACNf,SAASkB,aAAa,2BAA2B;QACjDjB,SAAS;IACX;AACF,EAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusBeforeRead.d.ts","sourceRoot":"","sources":["../../../src/collections/carts/statusBeforeRead.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,eAAO,MAAM,gBAAgB,EAAE,SAiB9B,CAAA"}
@@ -0,0 +1,18 @@
1
+ export const statusBeforeRead = ({ data })=>{
2
+ if (data?.purchasedAt) {
3
+ return 'purchased';
4
+ }
5
+ if (data?.createdAt) {
6
+ const timeNow = new Date().getTime();
7
+ const createdAt = new Date(data.createdAt).getTime();
8
+ const differenceToCheck = 7 * 24 * 60 * 60 * 1000 // 7 days
9
+ ;
10
+ if (timeNow - createdAt < differenceToCheck) {
11
+ // If the cart was created within the last 7 days, it is considered 'active'
12
+ return 'active';
13
+ }
14
+ }
15
+ return 'abandoned';
16
+ };
17
+
18
+ //# sourceMappingURL=statusBeforeRead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/collections/carts/statusBeforeRead.ts"],"sourcesContent":["import type { FieldHook } from 'payload'\n\nexport const statusBeforeRead: FieldHook = ({ data }) => {\n if (data?.purchasedAt) {\n return 'purchased'\n }\n\n if (data?.createdAt) {\n const timeNow = new Date().getTime()\n const createdAt = new Date(data.createdAt).getTime()\n const differenceToCheck = 7 * 24 * 60 * 60 * 1000 // 7 days\n\n if (timeNow - createdAt < differenceToCheck) {\n // If the cart was created within the last 7 days, it is considered 'active'\n return 'active'\n }\n }\n\n return 'abandoned'\n}\n"],"names":["statusBeforeRead","data","purchasedAt","createdAt","timeNow","Date","getTime","differenceToCheck"],"mappings":"AAEA,OAAO,MAAMA,mBAA8B,CAAC,EAAEC,IAAI,EAAE;IAClD,IAAIA,MAAMC,aAAa;QACrB,OAAO;IACT;IAEA,IAAID,MAAME,WAAW;QACnB,MAAMC,UAAU,IAAIC,OAAOC,OAAO;QAClC,MAAMH,YAAY,IAAIE,KAAKJ,KAAKE,SAAS,EAAEG,OAAO;QAClD,MAAMC,oBAAoB,IAAI,KAAK,KAAK,KAAK,KAAK,SAAS;;QAE3D,IAAIH,UAAUD,YAAYI,mBAAmB;YAC3C,4EAA4E;YAC5E,OAAO;QACT;IACF;IAEA,OAAO;AACT,EAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createOrdersCollection.d.ts","sourceRoot":"","sources":["../../../src/collections/orders/createOrdersCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAO1E,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,sBAAsB,GAAG,SAAS,GAAG,iBAAiB,CAAC,CAAA;IAClF;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,EAAE,CAAA;IACvB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,sBAAsB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,gBAwLtD,CAAA"}
@@ -0,0 +1,163 @@
1
+ import { amountField } from '../../fields/amountField.js';
2
+ import { cartItemsField } from '../../fields/cartItemsField.js';
3
+ import { currencyField } from '../../fields/currencyField.js';
4
+ import { accessOR } from '../../utilities/accessComposition.js';
5
+ export const createOrdersCollection = (props)=>{
6
+ const { access, addressFields, currenciesConfig, customersSlug = 'users', enableVariants = false, productsSlug = 'products', transactionsSlug = 'transactions', variantsSlug = 'variants' } = props || {};
7
+ const fields = [
8
+ {
9
+ type: 'tabs',
10
+ tabs: [
11
+ {
12
+ fields: [
13
+ cartItemsField({
14
+ enableVariants,
15
+ overrides: {
16
+ name: 'items',
17
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
18
+ t('plugin-ecommerce:items'),
19
+ labels: {
20
+ plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
21
+ t('plugin-ecommerce:items'),
22
+ singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
23
+ t('plugin-ecommerce:item')
24
+ }
25
+ },
26
+ productsSlug,
27
+ variantsSlug
28
+ })
29
+ ],
30
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
31
+ t('plugin-ecommerce:orderDetails')
32
+ },
33
+ {
34
+ fields: [
35
+ ...addressFields ? [
36
+ {
37
+ name: 'shippingAddress',
38
+ type: 'group',
39
+ fields: addressFields,
40
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
41
+ t('plugin-ecommerce:shippingAddress')
42
+ }
43
+ ] : []
44
+ ],
45
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
46
+ t('plugin-ecommerce:shipping')
47
+ }
48
+ ]
49
+ },
50
+ {
51
+ name: 'customer',
52
+ type: 'relationship',
53
+ admin: {
54
+ position: 'sidebar'
55
+ },
56
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
57
+ t('plugin-ecommerce:customer'),
58
+ relationTo: customersSlug
59
+ },
60
+ {
61
+ name: 'customerEmail',
62
+ type: 'email',
63
+ admin: {
64
+ position: 'sidebar'
65
+ },
66
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
67
+ t('plugin-ecommerce:customerEmail')
68
+ },
69
+ {
70
+ name: 'transactions',
71
+ type: 'relationship',
72
+ access: {
73
+ create: access.adminOnlyFieldAccess,
74
+ read: access.adminOnlyFieldAccess,
75
+ update: access.adminOnlyFieldAccess
76
+ },
77
+ admin: {
78
+ position: 'sidebar'
79
+ },
80
+ hasMany: true,
81
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
82
+ t('plugin-ecommerce:transactions'),
83
+ relationTo: transactionsSlug
84
+ },
85
+ {
86
+ name: 'status',
87
+ type: 'select',
88
+ admin: {
89
+ position: 'sidebar'
90
+ },
91
+ defaultValue: 'processing',
92
+ interfaceName: 'OrderStatus',
93
+ label: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
94
+ t('plugin-ecommerce:status'),
95
+ options: [
96
+ {
97
+ // @ts-expect-error - translations are not typed in plugins yet
98
+ label: ({ t })=>t('plugin-ecommerce:processing'),
99
+ value: 'processing'
100
+ },
101
+ {
102
+ // @ts-expect-error - translations are not typed in plugins yet
103
+ label: ({ t })=>t('plugin-ecommerce:completed'),
104
+ value: 'completed'
105
+ },
106
+ {
107
+ // @ts-expect-error - translations are not typed in plugins yet
108
+ label: ({ t })=>t('plugin-ecommerce:cancelled'),
109
+ value: 'cancelled'
110
+ },
111
+ {
112
+ // @ts-expect-error - translations are not typed in plugins yet
113
+ label: ({ t })=>t('plugin-ecommerce:refunded'),
114
+ value: 'refunded'
115
+ }
116
+ ]
117
+ },
118
+ ...currenciesConfig ? [
119
+ {
120
+ type: 'row',
121
+ admin: {
122
+ position: 'sidebar'
123
+ },
124
+ fields: [
125
+ amountField({
126
+ currenciesConfig
127
+ }),
128
+ currencyField({
129
+ currenciesConfig
130
+ })
131
+ ]
132
+ }
133
+ ] : []
134
+ ];
135
+ const baseConfig = {
136
+ slug: 'orders',
137
+ access: {
138
+ create: access.isAdmin,
139
+ delete: access.isAdmin,
140
+ read: accessOR(access.isAdmin, access.isDocumentOwner),
141
+ update: access.isAdmin
142
+ },
143
+ admin: {
144
+ description: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
145
+ t('plugin-ecommerce:ordersCollectionDescription'),
146
+ group: 'Ecommerce',
147
+ useAsTitle: 'createdAt'
148
+ },
149
+ fields,
150
+ labels: {
151
+ plural: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
152
+ t('plugin-ecommerce:orders'),
153
+ singular: ({ t })=>// @ts-expect-error - translations are not typed in plugins yet
154
+ t('plugin-ecommerce:order')
155
+ },
156
+ timestamps: true
157
+ };
158
+ return {
159
+ ...baseConfig
160
+ };
161
+ };
162
+
163
+ //# sourceMappingURL=createOrdersCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/collections/orders/createOrdersCollection.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport type { AccessConfig, CurrenciesConfig } from '../../types/index.js'\n\nimport { amountField } from '../../fields/amountField.js'\nimport { cartItemsField } from '../../fields/cartItemsField.js'\nimport { currencyField } from '../../fields/currencyField.js'\nimport { accessOR } from '../../utilities/accessComposition.js'\n\ntype Props = {\n access: Pick<AccessConfig, 'adminOnlyFieldAccess' | 'isAdmin' | 'isDocumentOwner'>\n /**\n * Array of fields used for capturing the shipping address data.\n */\n addressFields?: Field[]\n currenciesConfig?: CurrenciesConfig\n /**\n * Slug of the customers collection, defaults to 'users'.\n */\n customersSlug?: string\n enableVariants?: boolean\n /**\n * Slug of the products collection, defaults to 'products'.\n */\n productsSlug?: string\n /**\n * Slug of the transactions collection, defaults to 'transactions'.\n */\n transactionsSlug?: string\n /**\n * Slug of the variants collection, defaults to 'variants'.\n */\n variantsSlug?: string\n}\n\nexport const createOrdersCollection: (props: Props) => CollectionConfig = (props) => {\n const {\n access,\n addressFields,\n currenciesConfig,\n customersSlug = 'users',\n enableVariants = false,\n productsSlug = 'products',\n transactionsSlug = 'transactions',\n variantsSlug = 'variants',\n } = props || {}\n\n const fields: Field[] = [\n {\n type: 'tabs',\n tabs: [\n {\n fields: [\n cartItemsField({\n enableVariants,\n overrides: {\n name: 'items',\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 label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:orderDetails'),\n },\n {\n fields: [\n ...(addressFields\n ? [\n {\n name: 'shippingAddress',\n type: 'group',\n fields: addressFields,\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:shippingAddress'),\n } as Field,\n ]\n : []),\n ],\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:shipping'),\n },\n ],\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: 'customerEmail',\n type: 'email',\n admin: {\n position: 'sidebar',\n },\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:customerEmail'),\n },\n {\n name: 'transactions',\n type: 'relationship',\n access: {\n create: access.adminOnlyFieldAccess,\n read: access.adminOnlyFieldAccess,\n update: access.adminOnlyFieldAccess,\n },\n admin: {\n position: 'sidebar',\n },\n hasMany: true,\n label: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:transactions'),\n relationTo: transactionsSlug,\n },\n {\n name: 'status',\n type: 'select',\n admin: {\n position: 'sidebar',\n },\n defaultValue: 'processing',\n interfaceName: 'OrderStatus',\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:processing'),\n value: 'processing',\n },\n {\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:completed'),\n value: 'completed',\n },\n {\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:cancelled'),\n value: 'cancelled',\n },\n {\n // @ts-expect-error - translations are not typed in plugins yet\n label: ({ t }) => t('plugin-ecommerce:refunded'),\n value: 'refunded',\n },\n ],\n },\n\n ...(currenciesConfig\n ? [\n {\n type: 'row',\n admin: {\n position: 'sidebar',\n },\n fields: [\n amountField({\n currenciesConfig,\n }),\n currencyField({\n currenciesConfig,\n }),\n ],\n } as Field,\n ]\n : []),\n ]\n\n const baseConfig: CollectionConfig = {\n slug: 'orders',\n access: {\n create: access.isAdmin,\n delete: access.isAdmin,\n read: accessOR(access.isAdmin, access.isDocumentOwner),\n update: access.isAdmin,\n },\n admin: {\n description: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:ordersCollectionDescription'),\n group: 'Ecommerce',\n useAsTitle: 'createdAt',\n },\n fields,\n labels: {\n plural: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:orders'),\n singular: ({ t }) =>\n // @ts-expect-error - translations are not typed in plugins yet\n t('plugin-ecommerce:order'),\n },\n timestamps: true,\n }\n\n return { ...baseConfig }\n}\n"],"names":["amountField","cartItemsField","currencyField","accessOR","createOrdersCollection","props","access","addressFields","currenciesConfig","customersSlug","enableVariants","productsSlug","transactionsSlug","variantsSlug","fields","type","tabs","overrides","name","label","t","labels","plural","singular","admin","position","relationTo","create","adminOnlyFieldAccess","read","update","hasMany","defaultValue","interfaceName","options","value","baseConfig","slug","isAdmin","delete","isDocumentOwner","description","group","useAsTitle","timestamps"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createProductsCollection.d.ts","sourceRoot":"","sources":["../../../src/collections/products/createProductsCollection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAM3F,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,wBAAwB,GAAG,SAAS,CAAC,CAAA;IAChE,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,gBA2DxD,CAAA"}