@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 @@
1
+ {"version":3,"sources":["../../src/utilities/accessComposition.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport type { Access, AccessArgs, Where } from 'payload'\n\nimport { accessAND, conditional, accessOR } from './accessComposition'\n\n// Mock access args for testing\nconst mockArgs: AccessArgs = {\n req: {\n user: null,\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n}\n\nconst mockArgsWithUser: AccessArgs = {\n req: {\n user: { id: '123', email: 'test@example.com' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n}\n\ndescribe('Access Composition Utilities', () => {\n describe('or', () => {\n it('should return true when first checker returns true', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => false\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return true when any checker returns true', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => true\n const checker3: Access = async () => false\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return false when all checkers return false', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => false\n const checker3: Access = async () => false\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should combine Where queries with OR logic', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n or: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should return true when one checker returns true and others return Where queries', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => true\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should ignore false values when combining Where queries', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => false\n const checker4: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessOR(checker1, checker2, checker3, checker4)(mockArgs)\n\n expect(result).toEqual({\n or: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should return a single Where query when only one checker returns a Where query', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => false\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toEqual({\n or: [{ customer: { equals: '123' } }],\n })\n })\n\n it('should short-circuit on first true result for performance', async () => {\n let secondCheckerCalled = false\n\n const checker1: Access = async () => true\n const checker2: Access = async () => {\n secondCheckerCalled = true\n return false\n }\n\n await accessOR(checker1, checker2)(mockArgs)\n\n expect(secondCheckerCalled).toBe(false)\n })\n\n it('should handle empty checkers array', async () => {\n const result = await accessOR()(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should handle complex nested Where queries', async () => {\n const checker1: Access = async () =>\n ({\n and: [{ customer: { equals: '123' } }, { status: { equals: 'active' } }],\n }) as Where\n const checker2: Access = async () => ({\n role: { equals: 'admin' },\n })\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n or: [\n { and: [{ customer: { equals: '123' } }, { status: { equals: 'active' } }] },\n { role: { equals: 'admin' } },\n ],\n })\n })\n })\n\n describe('and', () => {\n it('should return false when any checker returns false', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => false\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should return true when all checkers return true', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => true\n const checker3: Access = async () => true\n\n const result = await accessAND(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should combine Where queries with AND logic', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n and: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should return false when one checker returns false and others return Where queries', async () => {\n const checker1: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker2: Access = async () => false\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should return Where query when all checkers return Where queries except one returns true', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => ({\n status: { equals: 'published' },\n })\n\n const result = await accessAND(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toEqual({\n and: [{ customer: { equals: '123' } }, { status: { equals: 'published' } }],\n })\n })\n\n it('should short-circuit on first false result for performance', async () => {\n let secondCheckerCalled = false\n\n const checker1: Access = async () => false\n const checker2: Access = async () => {\n secondCheckerCalled = true\n return true\n }\n\n await accessAND(checker1, checker2)(mockArgs)\n\n expect(secondCheckerCalled).toBe(false)\n })\n\n it('should handle empty checkers array', async () => {\n const result = await accessAND()(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return a single Where query when only one checker returns a Where query', async () => {\n const checker1: Access = async () => true\n const checker2: Access = async () => ({\n customer: { equals: '123' },\n })\n const checker3: Access = async () => true\n\n const result = await accessAND(checker1, checker2, checker3)(mockArgs)\n\n expect(result).toEqual({\n and: [{ customer: { equals: '123' } }],\n })\n })\n\n it('should handle complex nested Where queries', async () => {\n const checker1: Access = async () => ({\n or: [{ customer: { equals: '123' } }, { customer: { equals: '456' } }],\n })\n const checker2: Access = async () => ({\n status: { equals: 'active' },\n })\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toEqual({\n and: [\n { or: [{ customer: { equals: '123' } }, { customer: { equals: '456' } }] },\n { status: { equals: 'active' } },\n ],\n })\n })\n\n it('should return false immediately when first checker returns false', async () => {\n const checker1: Access = async () => false\n const checker2: Access = async () => {\n throw new Error('Should not be called')\n }\n\n const result = await accessAND(checker1, checker2)(mockArgs)\n\n expect(result).toBe(false)\n })\n })\n\n describe('conditional', () => {\n it('should apply checker when condition is true', async () => {\n const checker: Access = async () => true\n\n const result = await conditional(true, checker)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should return false when condition is false', async () => {\n const checker: Access = async () => true\n\n const result = await conditional(false, checker)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should apply checker when condition function returns true', async () => {\n const condition = ({ req }: AccessArgs) => !!req.user\n const checker: Access = async () => true\n\n const result = await conditional(condition, checker)(mockArgsWithUser)\n\n expect(result).toBe(true)\n })\n\n it('should return false when condition function returns false', async () => {\n const condition = ({ req }: AccessArgs) => !!req.user\n const checker: Access = async () => true\n\n const result = await conditional(condition, checker)(mockArgs)\n\n expect(result).toBe(false)\n })\n\n it('should pass Where query through when condition is true', async () => {\n const checker: Access = async () => ({\n customer: { equals: '123' },\n })\n\n const result = await conditional(true, checker)(mockArgs)\n\n expect(result).toEqual({\n customer: { equals: '123' },\n })\n })\n\n it('should not call checker when condition is false', async () => {\n let checkerCalled = false\n\n const checker: Access = async () => {\n checkerCalled = true\n return true\n }\n\n await conditional(false, checker)(mockArgs)\n\n expect(checkerCalled).toBe(false)\n })\n\n it('should evaluate condition function each time', async () => {\n const condition = ({ req }: AccessArgs) => !!req.user\n const checker: Access = async () => true\n\n // First call without user\n const result1 = await conditional(condition, checker)(mockArgs)\n expect(result1).toBe(false)\n\n // Second call with user\n const result2 = await conditional(condition, checker)(mockArgsWithUser)\n expect(result2).toBe(true)\n })\n\n it('should work with false checker result when condition is true', async () => {\n const checker: Access = async () => false\n\n const result = await conditional(true, checker)(mockArgs)\n\n expect(result).toBe(false)\n })\n })\n\n describe('combined composition', () => {\n it('should compose or, and, and conditional together', async () => {\n const isAdmin: Access = async ({ req }) => req.user?.role === 'admin'\n const isOwner: Access = async ({ req }) => ({\n customer: { equals: req.user?.id },\n })\n const isGuest: Access = async ({ req }) => !req.user\n\n const allowGuestCarts = true\n\n const access = accessOR(isAdmin, accessAND(isOwner), conditional(allowGuestCarts, isGuest))\n\n // Guest user (no user)\n const guestResult = await access(mockArgs)\n expect(guestResult).toBe(true)\n\n // Admin user\n const adminResult = await access({\n req: {\n user: { id: '123', role: 'admin' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(adminResult).toBe(true)\n\n // Regular user (owner)\n const ownerResult = await access({\n req: {\n user: { id: '123', role: 'customer' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(ownerResult).toEqual({\n or: [{ and: [{ customer: { equals: '123' } }] }],\n })\n })\n\n it('should handle complex nested compositions', async () => {\n const checker1: Access = async () => ({\n status: { equals: 'published' },\n })\n const checker2: Access = async () => ({\n visibility: { equals: 'public' },\n })\n const checker3: Access = async ({ req }) => !!req.user\n const checker4: Access = async () => ({\n customer: { equals: '123' },\n })\n\n // ((published AND public) OR (authenticated AND customer=123))\n const access = accessOR(accessAND(checker1, checker2), accessAND(checker3, checker4))\n\n // Without user\n const result1 = await access(mockArgs)\n expect(result1).toEqual({\n or: [\n {\n and: [{ status: { equals: 'published' } }, { visibility: { equals: 'public' } }],\n },\n ],\n })\n\n // With user\n const result2 = await access(mockArgsWithUser)\n expect(result2).toEqual({\n or: [\n {\n and: [{ status: { equals: 'published' } }, { visibility: { equals: 'public' } }],\n },\n {\n and: [{ customer: { equals: '123' } }],\n },\n ],\n })\n })\n\n it('should handle conditional inside or composition', async () => {\n const isAdmin: Access = async () => false\n const isGuest: Access = async () => true\n const allowGuestAccess = true\n\n const access = accessOR(isAdmin, conditional(allowGuestAccess, isGuest))\n\n const result = await access(mockArgs)\n expect(result).toBe(true)\n })\n\n it('should handle conditional inside and composition', async () => {\n const hasPermission: Access = async () => ({\n permissions: { contains: 'read' },\n })\n const isActiveUser: Access = async () => true\n const featureFlagEnabled = true\n\n const access = accessAND(hasPermission, conditional(featureFlagEnabled, isActiveUser))\n\n const result = await access(mockArgs)\n expect(result).toEqual({\n and: [{ permissions: { contains: 'read' } }],\n })\n })\n\n it('should correctly handle multiple levels of nesting', async () => {\n const a: Access = async () => true\n const b: Access = async () => false\n const c: Access = async () => ({ field1: { equals: 'value1' } })\n const d: Access = async () => ({ field2: { equals: 'value2' } })\n\n // (a AND (b OR (c AND d)))\n const access = accessAND(a, accessOR(b, accessAND(c, d)))\n\n const result = await access(mockArgs)\n expect(result).toEqual({\n and: [\n { or: [{ and: [{ field1: { equals: 'value1' } }, { field2: { equals: 'value2' } }] }] },\n ],\n })\n })\n })\n\n describe('edge cases and failure scenarios', () => {\n it('should handle checker that throws an error', async () => {\n const checker1: Access = async () => {\n throw new Error('Access check failed')\n }\n const checker2: Access = async () => true\n\n await expect(accessOR(checker1, checker2)(mockArgs)).rejects.toThrow('Access check failed')\n })\n\n it('should handle null or undefined returns gracefully', async () => {\n const checker1: Access = async () => null as any\n const checker2: Access = async () => undefined as any\n const checker3: Access = async () => true\n\n const result = await accessOR(checker1, checker2, checker3)(mockArgs)\n expect(result).toBe(true)\n })\n\n it('should handle deeply nested Where queries', async () => {\n const checker: Access = async () =>\n ({\n and: [\n {\n or: [\n { field1: { equals: 'value1' } },\n {\n and: [{ field2: { equals: 'value2' } }, { field3: { equals: 'value3' } }],\n },\n ],\n },\n { field4: { not_equals: 'value4' } },\n ],\n }) as Where\n\n const result = await accessOR(checker)(mockArgs)\n\n expect(result).toEqual({\n or: [\n {\n and: [\n {\n or: [\n { field1: { equals: 'value1' } },\n {\n and: [{ field2: { equals: 'value2' } }, { field3: { equals: 'value3' } }],\n },\n ],\n },\n { field4: { not_equals: 'value4' } },\n ],\n },\n ],\n })\n })\n\n it('should handle all checkers returning null/undefined', async () => {\n const checker1: Access = async () => null as any\n const checker2: Access = async () => undefined as any\n\n const result = await accessOR(checker1, checker2)(mockArgs)\n\n // null and undefined should be treated as false\n expect(result).toBe(false)\n })\n\n it('should handle Where query with empty object', async () => {\n const checker: Access = async () => ({}) as Where\n\n const result = await accessOR(checker)(mockArgs)\n\n expect(result).toEqual({})\n })\n\n it('should handle conditional with complex condition function', async () => {\n const condition = ({ req }: AccessArgs): boolean => {\n return !!(req.user && req.user.email && req.user.email.endsWith('@admin.com'))\n }\n\n const checker: Access = async () => true\n\n // Non-admin email\n const result1 = await conditional(\n condition,\n checker,\n )({\n req: {\n user: { id: '123', email: 'user@example.com' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(result1).toBe(false)\n\n // Admin email\n const result2 = await conditional(\n condition,\n checker,\n )({\n req: {\n user: { id: '123', email: 'admin@admin.com' },\n headers: new Headers(),\n payload: {} as any,\n context: {},\n } as any,\n })\n expect(result2).toBe(true)\n })\n\n it('should handle alternating true/false in or correctly', async () => {\n const checkers: Access[] = [\n async () => false,\n async () => false,\n async () => false,\n async () => true, // This should cause short-circuit\n async () => {\n throw new Error('Should not be called')\n },\n ]\n\n const result = await accessOR(...checkers)(mockArgs)\n\n expect(result).toBe(true)\n })\n\n it('should handle alternating true/false in and correctly', async () => {\n const checkers: Access[] = [\n async () => true,\n async () => true,\n async () => false, // This should cause short-circuit\n async () => {\n throw new Error('Should not be called')\n },\n ]\n\n const result = await accessAND(...checkers)(mockArgs)\n\n expect(result).toBe(false)\n })\n })\n})\n"],"names":["describe","it","expect","accessAND","conditional","accessOR","mockArgs","req","user","headers","Headers","payload","context","mockArgsWithUser","id","email","checker1","checker2","result","toBe","checker3","customer","equals","status","toEqual","or","checker4","secondCheckerCalled","and","role","Error","checker","condition","checkerCalled","result1","result2","isAdmin","isOwner","isGuest","allowGuestCarts","access","guestResult","adminResult","ownerResult","visibility","allowGuestAccess","hasPermission","permissions","contains","isActiveUser","featureFlagEnabled","a","b","c","field1","d","field2","rejects","toThrow","undefined","field3","field4","not_equals","endsWith","checkers"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultProductsValidation.d.ts","sourceRoot":"","sources":["../../src/utilities/defaultProductsValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAI3D,eAAO,MAAM,yBAAyB,EAAE,kBAqCvC,CAAA"}
@@ -0,0 +1,40 @@
1
+ import { MissingPrice, OutOfStock } from './errorCodes.js';
2
+ export const defaultProductsValidation = ({ currenciesConfig, currency, product, quantity = 1, variant })=>{
3
+ if (!currency) {
4
+ throw new Error('Currency must be provided for product validation.');
5
+ }
6
+ const priceField = `priceIn${currency.toUpperCase()}`;
7
+ if (variant) {
8
+ if (!variant[priceField]) {
9
+ throw new Error(`Variant with ID ${variant.id} does not have a price in ${currency}.`);
10
+ }
11
+ if (variant.inventory === 0 || variant.inventory && variant.inventory < quantity) {
12
+ throw new Error(`Variant with ID ${variant.id} is out of stock or does not have enough inventory.`);
13
+ }
14
+ } else if (product) {
15
+ // Validate the product's details only if the variant is not provided as it can have its own inventory and price
16
+ if (!product[priceField]) {
17
+ throw new Error(`Product does not have a price in.`, {
18
+ cause: {
19
+ code: MissingPrice,
20
+ codes: [
21
+ product.id,
22
+ currency
23
+ ]
24
+ }
25
+ });
26
+ }
27
+ if (product.inventory === 0 || product.inventory && product.inventory < quantity) {
28
+ throw new Error(`Product is out of stock or does not have enough inventory.`, {
29
+ cause: {
30
+ code: OutOfStock,
31
+ codes: [
32
+ product.id
33
+ ]
34
+ }
35
+ });
36
+ }
37
+ }
38
+ };
39
+
40
+ //# sourceMappingURL=defaultProductsValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/defaultProductsValidation.ts"],"sourcesContent":["import type { ProductsValidation } from '../types/index.js'\n\nimport { MissingPrice, OutOfStock } from './errorCodes.js'\n\nexport const defaultProductsValidation: ProductsValidation = ({\n currenciesConfig,\n currency,\n product,\n quantity = 1,\n variant,\n}) => {\n if (!currency) {\n throw new Error('Currency must be provided for product validation.')\n }\n\n const priceField = `priceIn${currency.toUpperCase()}`\n\n if (variant) {\n if (!variant[priceField]) {\n throw new Error(`Variant with ID ${variant.id} does not have a price in ${currency}.`)\n }\n\n if (variant.inventory === 0 || (variant.inventory && variant.inventory < quantity)) {\n throw new Error(\n `Variant with ID ${variant.id} is out of stock or does not have enough inventory.`,\n )\n }\n } else if (product) {\n // Validate the product's details only if the variant is not provided as it can have its own inventory and price\n if (!product[priceField]) {\n throw new Error(`Product does not have a price in.`, {\n cause: { code: MissingPrice, codes: [product.id, currency] },\n })\n }\n\n if (product.inventory === 0 || (product.inventory && product.inventory < quantity)) {\n throw new Error(`Product is out of stock or does not have enough inventory.`, {\n cause: { code: OutOfStock, codes: [product.id] },\n })\n }\n }\n}\n"],"names":["MissingPrice","OutOfStock","defaultProductsValidation","currenciesConfig","currency","product","quantity","variant","Error","priceField","toUpperCase","id","inventory","cause","code","codes"],"mappings":"AAEA,SAASA,YAAY,EAAEC,UAAU,QAAQ,kBAAiB;AAE1D,OAAO,MAAMC,4BAAgD,CAAC,EAC5DC,gBAAgB,EAChBC,QAAQ,EACRC,OAAO,EACPC,WAAW,CAAC,EACZC,OAAO,EACR;IACC,IAAI,CAACH,UAAU;QACb,MAAM,IAAII,MAAM;IAClB;IAEA,MAAMC,aAAa,CAAC,OAAO,EAAEL,SAASM,WAAW,IAAI;IAErD,IAAIH,SAAS;QACX,IAAI,CAACA,OAAO,CAACE,WAAW,EAAE;YACxB,MAAM,IAAID,MAAM,CAAC,gBAAgB,EAAED,QAAQI,EAAE,CAAC,0BAA0B,EAAEP,SAAS,CAAC,CAAC;QACvF;QAEA,IAAIG,QAAQK,SAAS,KAAK,KAAML,QAAQK,SAAS,IAAIL,QAAQK,SAAS,GAAGN,UAAW;YAClF,MAAM,IAAIE,MACR,CAAC,gBAAgB,EAAED,QAAQI,EAAE,CAAC,mDAAmD,CAAC;QAEtF;IACF,OAAO,IAAIN,SAAS;QAClB,gHAAgH;QAChH,IAAI,CAACA,OAAO,CAACI,WAAW,EAAE;YACxB,MAAM,IAAID,MAAM,CAAC,iCAAiC,CAAC,EAAE;gBACnDK,OAAO;oBAAEC,MAAMd;oBAAce,OAAO;wBAACV,QAAQM,EAAE;wBAAEP;qBAAS;gBAAC;YAC7D;QACF;QAEA,IAAIC,QAAQO,SAAS,KAAK,KAAMP,QAAQO,SAAS,IAAIP,QAAQO,SAAS,GAAGN,UAAW;YAClF,MAAM,IAAIE,MAAM,CAAC,0DAA0D,CAAC,EAAE;gBAC5EK,OAAO;oBAAEC,MAAMb;oBAAYc,OAAO;wBAACV,QAAQM,EAAE;qBAAC;gBAAC;YACjD;QACF;IACF;AACF,EAAC"}
@@ -0,0 +1,384 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { EUR, USD } from '../currencies/index.js';
3
+ import { defaultProductsValidation } from './defaultProductsValidation';
4
+ import { MissingPrice, OutOfStock } from './errorCodes';
5
+ describe('defaultProductsValidation', ()=>{
6
+ const currenciesConfig = {
7
+ defaultCurrency: 'USD',
8
+ supportedCurrencies: [
9
+ USD,
10
+ EUR
11
+ ]
12
+ };
13
+ describe('currency validation', ()=>{
14
+ it('should throw error when currency is not provided', ()=>{
15
+ const product = {
16
+ id: 'product-1',
17
+ priceInUSD: 1000
18
+ };
19
+ expect(()=>{
20
+ defaultProductsValidation({
21
+ currenciesConfig,
22
+ currency: '',
23
+ product: product,
24
+ quantity: 1
25
+ });
26
+ }).toThrow('Currency must be provided for product validation.');
27
+ });
28
+ it('should throw error when currency is undefined', ()=>{
29
+ const product = {
30
+ id: 'product-1',
31
+ priceInUSD: 1000
32
+ };
33
+ expect(()=>{
34
+ defaultProductsValidation({
35
+ currenciesConfig,
36
+ currency: undefined,
37
+ product: product,
38
+ quantity: 1
39
+ });
40
+ }).toThrow('Currency must be provided for product validation.');
41
+ });
42
+ });
43
+ describe('variant validation', ()=>{
44
+ it('should validate variant price exists', ()=>{
45
+ const variant = {
46
+ id: 'variant-1',
47
+ priceInEUR: 900,
48
+ inventory: 10
49
+ };
50
+ expect(()=>{
51
+ defaultProductsValidation({
52
+ currenciesConfig,
53
+ currency: 'usd',
54
+ product: {},
55
+ quantity: 1,
56
+ variant: variant
57
+ });
58
+ }).toThrow('Variant with ID variant-1 does not have a price in usd.');
59
+ });
60
+ it('should pass when variant has price in requested currency', ()=>{
61
+ const variant = {
62
+ id: 'variant-1',
63
+ priceInUSD: 1000,
64
+ inventory: 10
65
+ };
66
+ expect(()=>{
67
+ defaultProductsValidation({
68
+ currenciesConfig,
69
+ currency: 'usd',
70
+ product: {},
71
+ quantity: 1,
72
+ variant: variant
73
+ });
74
+ }).not.toThrow();
75
+ });
76
+ it('should handle case-insensitive currency codes', ()=>{
77
+ const variant = {
78
+ id: 'variant-1',
79
+ priceInUSD: 1000,
80
+ inventory: 10
81
+ };
82
+ expect(()=>{
83
+ defaultProductsValidation({
84
+ currenciesConfig,
85
+ currency: 'USD',
86
+ product: {},
87
+ quantity: 1,
88
+ variant: variant
89
+ });
90
+ }).not.toThrow();
91
+ });
92
+ it('should throw error when variant inventory is 0', ()=>{
93
+ const variant = {
94
+ id: 'variant-1',
95
+ priceInUSD: 1000,
96
+ inventory: 0
97
+ };
98
+ expect(()=>{
99
+ defaultProductsValidation({
100
+ currenciesConfig,
101
+ currency: 'usd',
102
+ product: {},
103
+ quantity: 1,
104
+ variant: variant
105
+ });
106
+ }).toThrow('Variant with ID variant-1 is out of stock or does not have enough inventory.');
107
+ });
108
+ it('should throw error when variant inventory is less than quantity', ()=>{
109
+ const variant = {
110
+ id: 'variant-1',
111
+ priceInUSD: 1000,
112
+ inventory: 5
113
+ };
114
+ expect(()=>{
115
+ defaultProductsValidation({
116
+ currenciesConfig,
117
+ currency: 'usd',
118
+ product: {},
119
+ quantity: 10,
120
+ variant: variant
121
+ });
122
+ }).toThrow('Variant with ID variant-1 is out of stock or does not have enough inventory.');
123
+ });
124
+ it('should pass when variant inventory equals quantity', ()=>{
125
+ const variant = {
126
+ id: 'variant-1',
127
+ priceInUSD: 1000,
128
+ inventory: 5
129
+ };
130
+ expect(()=>{
131
+ defaultProductsValidation({
132
+ currenciesConfig,
133
+ currency: 'usd',
134
+ product: {},
135
+ quantity: 5,
136
+ variant: variant
137
+ });
138
+ }).not.toThrow();
139
+ });
140
+ it('should pass when variant inventory is greater than quantity', ()=>{
141
+ const variant = {
142
+ id: 'variant-1',
143
+ priceInUSD: 1000,
144
+ inventory: 10
145
+ };
146
+ expect(()=>{
147
+ defaultProductsValidation({
148
+ currenciesConfig,
149
+ currency: 'usd',
150
+ product: {},
151
+ quantity: 5,
152
+ variant: variant
153
+ });
154
+ }).not.toThrow();
155
+ });
156
+ it('should pass when variant has no inventory field (unlimited stock)', ()=>{
157
+ const variant = {
158
+ id: 'variant-1',
159
+ priceInUSD: 1000
160
+ };
161
+ expect(()=>{
162
+ defaultProductsValidation({
163
+ currenciesConfig,
164
+ currency: 'usd',
165
+ product: {},
166
+ quantity: 100,
167
+ variant: variant
168
+ });
169
+ }).not.toThrow();
170
+ });
171
+ });
172
+ describe('product validation', ()=>{
173
+ it('should validate product price exists', ()=>{
174
+ const product = {
175
+ id: 'product-1',
176
+ priceInEUR: 900,
177
+ inventory: 10
178
+ };
179
+ expect(()=>{
180
+ defaultProductsValidation({
181
+ currenciesConfig,
182
+ currency: 'usd',
183
+ product: product,
184
+ quantity: 1
185
+ });
186
+ }).toThrow('Product does not have a price in.');
187
+ });
188
+ it('should include error cause with MissingPrice code', ()=>{
189
+ const product = {
190
+ id: 'product-1',
191
+ priceInEUR: 900,
192
+ inventory: 10
193
+ };
194
+ try {
195
+ defaultProductsValidation({
196
+ currenciesConfig,
197
+ currency: 'usd',
198
+ product: product,
199
+ quantity: 1
200
+ });
201
+ } catch (error) {
202
+ expect(error.cause).toEqual({
203
+ code: MissingPrice,
204
+ codes: [
205
+ 'product-1',
206
+ 'usd'
207
+ ]
208
+ });
209
+ }
210
+ });
211
+ it('should pass when product has price in requested currency', ()=>{
212
+ const product = {
213
+ id: 'product-1',
214
+ priceInUSD: 1000,
215
+ inventory: 10
216
+ };
217
+ expect(()=>{
218
+ defaultProductsValidation({
219
+ currenciesConfig,
220
+ currency: 'usd',
221
+ product: product,
222
+ quantity: 1
223
+ });
224
+ }).not.toThrow();
225
+ });
226
+ it('should throw error when product inventory is 0', ()=>{
227
+ const product = {
228
+ id: 'product-1',
229
+ priceInUSD: 1000,
230
+ inventory: 0
231
+ };
232
+ expect(()=>{
233
+ defaultProductsValidation({
234
+ currenciesConfig,
235
+ currency: 'usd',
236
+ product: product,
237
+ quantity: 1
238
+ });
239
+ }).toThrow('Product is out of stock or does not have enough inventory.');
240
+ });
241
+ it('should include error cause with OutOfStock code', ()=>{
242
+ const product = {
243
+ id: 'product-1',
244
+ priceInUSD: 1000,
245
+ inventory: 0
246
+ };
247
+ try {
248
+ defaultProductsValidation({
249
+ currenciesConfig,
250
+ currency: 'usd',
251
+ product: product,
252
+ quantity: 1
253
+ });
254
+ } catch (error) {
255
+ expect(error.cause).toEqual({
256
+ code: OutOfStock,
257
+ codes: [
258
+ 'product-1'
259
+ ]
260
+ });
261
+ }
262
+ });
263
+ it('should throw error when product inventory is less than quantity', ()=>{
264
+ const product = {
265
+ id: 'product-1',
266
+ priceInUSD: 1000,
267
+ inventory: 5
268
+ };
269
+ expect(()=>{
270
+ defaultProductsValidation({
271
+ currenciesConfig,
272
+ currency: 'usd',
273
+ product: product,
274
+ quantity: 10
275
+ });
276
+ }).toThrow('Product is out of stock or does not have enough inventory.');
277
+ });
278
+ it('should pass when product inventory equals quantity', ()=>{
279
+ const product = {
280
+ id: 'product-1',
281
+ priceInUSD: 1000,
282
+ inventory: 5
283
+ };
284
+ expect(()=>{
285
+ defaultProductsValidation({
286
+ currenciesConfig,
287
+ currency: 'usd',
288
+ product: product,
289
+ quantity: 5
290
+ });
291
+ }).not.toThrow();
292
+ });
293
+ it('should pass when product inventory is greater than quantity', ()=>{
294
+ const product = {
295
+ id: 'product-1',
296
+ priceInUSD: 1000,
297
+ inventory: 10
298
+ };
299
+ expect(()=>{
300
+ defaultProductsValidation({
301
+ currenciesConfig,
302
+ currency: 'usd',
303
+ product: product,
304
+ quantity: 5
305
+ });
306
+ }).not.toThrow();
307
+ });
308
+ it('should pass when product has no inventory field (unlimited stock)', ()=>{
309
+ const product = {
310
+ id: 'product-1',
311
+ priceInUSD: 1000
312
+ };
313
+ expect(()=>{
314
+ defaultProductsValidation({
315
+ currenciesConfig,
316
+ currency: 'usd',
317
+ product: product,
318
+ quantity: 100
319
+ });
320
+ }).not.toThrow();
321
+ });
322
+ it('should default quantity to 1 when not provided', ()=>{
323
+ const product = {
324
+ id: 'product-1',
325
+ priceInUSD: 1000,
326
+ inventory: 1
327
+ };
328
+ expect(()=>{
329
+ defaultProductsValidation({
330
+ currenciesConfig,
331
+ currency: 'usd',
332
+ product: product
333
+ });
334
+ }).not.toThrow();
335
+ });
336
+ });
337
+ describe('variant priority over product', ()=>{
338
+ it('should only validate variant when both product and variant are provided', ()=>{
339
+ const product = {
340
+ id: 'product-1',
341
+ priceInEUR: 900,
342
+ inventory: 0
343
+ };
344
+ const variant = {
345
+ id: 'variant-1',
346
+ priceInUSD: 1000,
347
+ inventory: 10
348
+ };
349
+ // Should not throw because variant validation takes priority
350
+ expect(()=>{
351
+ defaultProductsValidation({
352
+ currenciesConfig,
353
+ currency: 'usd',
354
+ product: product,
355
+ quantity: 1,
356
+ variant: variant
357
+ });
358
+ }).not.toThrow();
359
+ });
360
+ it('should not validate product inventory when variant is provided', ()=>{
361
+ const product = {
362
+ id: 'product-1',
363
+ priceInUSD: 1000,
364
+ inventory: 0
365
+ };
366
+ const variant = {
367
+ id: 'variant-1',
368
+ priceInUSD: 1000,
369
+ inventory: 10
370
+ };
371
+ expect(()=>{
372
+ defaultProductsValidation({
373
+ currenciesConfig,
374
+ currency: 'usd',
375
+ product: product,
376
+ quantity: 1,
377
+ variant: variant
378
+ });
379
+ }).not.toThrow();
380
+ });
381
+ });
382
+ });
383
+
384
+ //# sourceMappingURL=defaultProductsValidation.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/defaultProductsValidation.spec.ts"],"sourcesContent":["import { describe, it, expect } from 'vitest'\nimport type { CurrenciesConfig } from '../types/index.js'\n\nimport { EUR, USD } from '../currencies/index.js'\nimport { defaultProductsValidation } from './defaultProductsValidation'\nimport { MissingPrice, OutOfStock } from './errorCodes'\n\ndescribe('defaultProductsValidation', () => {\n const currenciesConfig: CurrenciesConfig = {\n defaultCurrency: 'USD',\n supportedCurrencies: [USD, EUR],\n }\n\n describe('currency validation', () => {\n it('should throw error when currency is not provided', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: '',\n product: product as any,\n quantity: 1,\n })\n }).toThrow('Currency must be provided for product validation.')\n })\n\n it('should throw error when currency is undefined', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: undefined as any,\n product: product as any,\n quantity: 1,\n })\n }).toThrow('Currency must be provided for product validation.')\n })\n })\n\n describe('variant validation', () => {\n it('should validate variant price exists', () => {\n const variant = {\n id: 'variant-1',\n priceInEUR: 900,\n inventory: 10,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: {} as any,\n quantity: 1,\n variant: variant as any,\n })\n }).toThrow('Variant with ID variant-1 does not have a price in usd.')\n })\n\n it('should pass when variant has price in requested currency', () => {\n const variant = {\n id: 'variant-1',\n priceInUSD: 1000,\n inventory: 10,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: {} as any,\n quantity: 1,\n variant: variant as any,\n })\n }).not.toThrow()\n })\n\n it('should handle case-insensitive currency codes', () => {\n const variant = {\n id: 'variant-1',\n priceInUSD: 1000,\n inventory: 10,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'USD',\n product: {} as any,\n quantity: 1,\n variant: variant as any,\n })\n }).not.toThrow()\n })\n\n it('should throw error when variant inventory is 0', () => {\n const variant = {\n id: 'variant-1',\n priceInUSD: 1000,\n inventory: 0,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: {} as any,\n quantity: 1,\n variant: variant as any,\n })\n }).toThrow('Variant with ID variant-1 is out of stock or does not have enough inventory.')\n })\n\n it('should throw error when variant inventory is less than quantity', () => {\n const variant = {\n id: 'variant-1',\n priceInUSD: 1000,\n inventory: 5,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: {} as any,\n quantity: 10,\n variant: variant as any,\n })\n }).toThrow('Variant with ID variant-1 is out of stock or does not have enough inventory.')\n })\n\n it('should pass when variant inventory equals quantity', () => {\n const variant = {\n id: 'variant-1',\n priceInUSD: 1000,\n inventory: 5,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: {} as any,\n quantity: 5,\n variant: variant as any,\n })\n }).not.toThrow()\n })\n\n it('should pass when variant inventory is greater than quantity', () => {\n const variant = {\n id: 'variant-1',\n priceInUSD: 1000,\n inventory: 10,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: {} as any,\n quantity: 5,\n variant: variant as any,\n })\n }).not.toThrow()\n })\n\n it('should pass when variant has no inventory field (unlimited stock)', () => {\n const variant = {\n id: 'variant-1',\n priceInUSD: 1000,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: {} as any,\n quantity: 100,\n variant: variant as any,\n })\n }).not.toThrow()\n })\n })\n\n describe('product validation', () => {\n it('should validate product price exists', () => {\n const product = {\n id: 'product-1',\n priceInEUR: 900,\n inventory: 10,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 1,\n })\n }).toThrow('Product does not have a price in.')\n })\n\n it('should include error cause with MissingPrice code', () => {\n const product = {\n id: 'product-1',\n priceInEUR: 900,\n inventory: 10,\n }\n\n try {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 1,\n })\n } catch (error: any) {\n expect(error.cause).toEqual({\n code: MissingPrice,\n codes: ['product-1', 'usd'],\n })\n }\n })\n\n it('should pass when product has price in requested currency', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n inventory: 10,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 1,\n })\n }).not.toThrow()\n })\n\n it('should throw error when product inventory is 0', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n inventory: 0,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 1,\n })\n }).toThrow('Product is out of stock or does not have enough inventory.')\n })\n\n it('should include error cause with OutOfStock code', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n inventory: 0,\n }\n\n try {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 1,\n })\n } catch (error: any) {\n expect(error.cause).toEqual({\n code: OutOfStock,\n codes: ['product-1'],\n })\n }\n })\n\n it('should throw error when product inventory is less than quantity', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n inventory: 5,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 10,\n })\n }).toThrow('Product is out of stock or does not have enough inventory.')\n })\n\n it('should pass when product inventory equals quantity', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n inventory: 5,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 5,\n })\n }).not.toThrow()\n })\n\n it('should pass when product inventory is greater than quantity', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n inventory: 10,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 5,\n })\n }).not.toThrow()\n })\n\n it('should pass when product has no inventory field (unlimited stock)', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 100,\n })\n }).not.toThrow()\n })\n\n it('should default quantity to 1 when not provided', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n inventory: 1,\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n })\n }).not.toThrow()\n })\n })\n\n describe('variant priority over product', () => {\n it('should only validate variant when both product and variant are provided', () => {\n const product = {\n id: 'product-1',\n priceInEUR: 900, // Missing USD price\n inventory: 0, // Out of stock\n }\n\n const variant = {\n id: 'variant-1',\n priceInUSD: 1000,\n inventory: 10,\n }\n\n // Should not throw because variant validation takes priority\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 1,\n variant: variant as any,\n })\n }).not.toThrow()\n })\n\n it('should not validate product inventory when variant is provided', () => {\n const product = {\n id: 'product-1',\n priceInUSD: 1000,\n inventory: 0, // Product out of stock\n }\n\n const variant = {\n id: 'variant-1',\n priceInUSD: 1000,\n inventory: 10, // But variant has stock\n }\n\n expect(() => {\n defaultProductsValidation({\n currenciesConfig,\n currency: 'usd',\n product: product as any,\n quantity: 1,\n variant: variant as any,\n })\n }).not.toThrow()\n })\n })\n})\n"],"names":["describe","it","expect","EUR","USD","defaultProductsValidation","MissingPrice","OutOfStock","currenciesConfig","defaultCurrency","supportedCurrencies","product","id","priceInUSD","currency","quantity","toThrow","undefined","variant","priceInEUR","inventory","not","error","cause","toEqual","code","codes"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,EAAE,EAAEC,MAAM,QAAQ,SAAQ;AAG7C,SAASC,GAAG,EAAEC,GAAG,QAAQ,yBAAwB;AACjD,SAASC,yBAAyB,QAAQ,8BAA6B;AACvE,SAASC,YAAY,EAAEC,UAAU,QAAQ,eAAc;AAEvDP,SAAS,6BAA6B;IACpC,MAAMQ,mBAAqC;QACzCC,iBAAiB;QACjBC,qBAAqB;YAACN;YAAKD;SAAI;IACjC;IAEAH,SAAS,uBAAuB;QAC9BC,GAAG,oDAAoD;YACrD,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;YACd;YAEAX,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;gBACZ;YACF,GAAGC,OAAO,CAAC;QACb;QAEAf,GAAG,iDAAiD;YAClD,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;YACd;YAEAX,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAUG;oBACVN,SAASA;oBACTI,UAAU;gBACZ;YACF,GAAGC,OAAO,CAAC;QACb;IACF;IAEAhB,SAAS,sBAAsB;QAC7BC,GAAG,wCAAwC;YACzC,MAAMiB,UAAU;gBACdN,IAAI;gBACJO,YAAY;gBACZC,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAAS,CAAC;oBACVI,UAAU;oBACVG,SAASA;gBACX;YACF,GAAGF,OAAO,CAAC;QACb;QAEAf,GAAG,4DAA4D;YAC7D,MAAMiB,UAAU;gBACdN,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAAS,CAAC;oBACVI,UAAU;oBACVG,SAASA;gBACX;YACF,GAAGG,GAAG,CAACL,OAAO;QAChB;QAEAf,GAAG,iDAAiD;YAClD,MAAMiB,UAAU;gBACdN,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAAS,CAAC;oBACVI,UAAU;oBACVG,SAASA;gBACX;YACF,GAAGG,GAAG,CAACL,OAAO;QAChB;QAEAf,GAAG,kDAAkD;YACnD,MAAMiB,UAAU;gBACdN,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAAS,CAAC;oBACVI,UAAU;oBACVG,SAASA;gBACX;YACF,GAAGF,OAAO,CAAC;QACb;QAEAf,GAAG,mEAAmE;YACpE,MAAMiB,UAAU;gBACdN,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAAS,CAAC;oBACVI,UAAU;oBACVG,SAASA;gBACX;YACF,GAAGF,OAAO,CAAC;QACb;QAEAf,GAAG,sDAAsD;YACvD,MAAMiB,UAAU;gBACdN,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAAS,CAAC;oBACVI,UAAU;oBACVG,SAASA;gBACX;YACF,GAAGG,GAAG,CAACL,OAAO;QAChB;QAEAf,GAAG,+DAA+D;YAChE,MAAMiB,UAAU;gBACdN,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAAS,CAAC;oBACVI,UAAU;oBACVG,SAASA;gBACX;YACF,GAAGG,GAAG,CAACL,OAAO;QAChB;QAEAf,GAAG,qEAAqE;YACtE,MAAMiB,UAAU;gBACdN,IAAI;gBACJC,YAAY;YACd;YAEAX,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAAS,CAAC;oBACVI,UAAU;oBACVG,SAASA;gBACX;YACF,GAAGG,GAAG,CAACL,OAAO;QAChB;IACF;IAEAhB,SAAS,sBAAsB;QAC7BC,GAAG,wCAAwC;YACzC,MAAMU,UAAU;gBACdC,IAAI;gBACJO,YAAY;gBACZC,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;gBACZ;YACF,GAAGC,OAAO,CAAC;QACb;QAEAf,GAAG,qDAAqD;YACtD,MAAMU,UAAU;gBACdC,IAAI;gBACJO,YAAY;gBACZC,WAAW;YACb;YAEA,IAAI;gBACFf,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;gBACZ;YACF,EAAE,OAAOO,OAAY;gBACnBpB,OAAOoB,MAAMC,KAAK,EAAEC,OAAO,CAAC;oBAC1BC,MAAMnB;oBACNoB,OAAO;wBAAC;wBAAa;qBAAM;gBAC7B;YACF;QACF;QAEAzB,GAAG,4DAA4D;YAC7D,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;gBACZ;YACF,GAAGM,GAAG,CAACL,OAAO;QAChB;QAEAf,GAAG,kDAAkD;YACnD,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;gBACZ;YACF,GAAGC,OAAO,CAAC;QACb;QAEAf,GAAG,mDAAmD;YACpD,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEA,IAAI;gBACFf,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;gBACZ;YACF,EAAE,OAAOO,OAAY;gBACnBpB,OAAOoB,MAAMC,KAAK,EAAEC,OAAO,CAAC;oBAC1BC,MAAMlB;oBACNmB,OAAO;wBAAC;qBAAY;gBACtB;YACF;QACF;QAEAzB,GAAG,mEAAmE;YACpE,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;gBACZ;YACF,GAAGC,OAAO,CAAC;QACb;QAEAf,GAAG,sDAAsD;YACvD,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;gBACZ;YACF,GAAGM,GAAG,CAACL,OAAO;QAChB;QAEAf,GAAG,+DAA+D;YAChE,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;gBACZ;YACF,GAAGM,GAAG,CAACL,OAAO;QAChB;QAEAf,GAAG,qEAAqE;YACtE,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;YACd;YAEAX,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;gBACZ;YACF,GAAGM,GAAG,CAACL,OAAO;QAChB;QAEAf,GAAG,kDAAkD;YACnD,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;gBACX;YACF,GAAGU,GAAG,CAACL,OAAO;QAChB;IACF;IAEAhB,SAAS,iCAAiC;QACxCC,GAAG,2EAA2E;YAC5E,MAAMU,UAAU;gBACdC,IAAI;gBACJO,YAAY;gBACZC,WAAW;YACb;YAEA,MAAMF,UAAU;gBACdN,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEA,6DAA6D;YAC7DlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;oBACVG,SAASA;gBACX;YACF,GAAGG,GAAG,CAACL,OAAO;QAChB;QAEAf,GAAG,kEAAkE;YACnE,MAAMU,UAAU;gBACdC,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEA,MAAMF,UAAU;gBACdN,IAAI;gBACJC,YAAY;gBACZO,WAAW;YACb;YAEAlB,OAAO;gBACLG,0BAA0B;oBACxBG;oBACAM,UAAU;oBACVH,SAASA;oBACTI,UAAU;oBACVG,SAASA;gBACX;YACF,GAAGG,GAAG,CAACL,OAAO;QAChB;IACF;AACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorCodes.d.ts","sourceRoot":"","sources":["../../src/utilities/errorCodes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,iBAAiB,CAAA;AAC1C,eAAO,MAAM,UAAU,eAAe,CAAA"}
@@ -0,0 +1,4 @@
1
+ export const MissingPrice = 'MissingPrice';
2
+ export const OutOfStock = 'OutOfStock';
3
+
4
+ //# sourceMappingURL=errorCodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/errorCodes.ts"],"sourcesContent":["export const MissingPrice = 'MissingPrice'\nexport const OutOfStock = 'OutOfStock'\n"],"names":["MissingPrice","OutOfStock"],"mappings":"AAAA,OAAO,MAAMA,eAAe,eAAc;AAC1C,OAAO,MAAMC,aAAa,aAAY"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCollectionSlugMap.d.ts","sourceRoot":"","sources":["../../src/utilities/getCollectionSlugMap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;AAE1F,KAAK,KAAK,GAAG;IACX,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,qBAAqB,EAAE,8BAA8B,CAAA;CACtD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,+CAG9B,KAAK,KAAG,iBAiCV,CAAA"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Generates a map of collection slugs based on the sanitized plugin configuration.
3
+ * Takes into consideration any collection overrides provided in the plugin.
4
+ * Variant-related slugs are only included when enableVariants is true.
5
+ */ export const getCollectionSlugMap = ({ enableVariants = false, sanitizedPluginConfig })=>{
6
+ const defaultSlugMap = {
7
+ addresses: 'addresses',
8
+ carts: 'carts',
9
+ customers: 'users',
10
+ orders: 'orders',
11
+ products: 'products',
12
+ transactions: 'transactions',
13
+ ...enableVariants ? {
14
+ variantOptions: 'variantOptions',
15
+ variants: 'variants',
16
+ variantTypes: 'variantTypes'
17
+ } : {}
18
+ };
19
+ const collectionSlugsMap = defaultSlugMap;
20
+ if (typeof sanitizedPluginConfig.customers === 'object' && sanitizedPluginConfig.customers.slug) {
21
+ collectionSlugsMap.customers = sanitizedPluginConfig.customers.slug;
22
+ }
23
+ // Only include variant slugs from slugMap if variants are enabled
24
+ const slugMapOverrides = sanitizedPluginConfig.slugMap || {};
25
+ if (!enableVariants) {
26
+ delete slugMapOverrides.variantOptions;
27
+ delete slugMapOverrides.variants;
28
+ delete slugMapOverrides.variantTypes;
29
+ }
30
+ return {
31
+ ...collectionSlugsMap,
32
+ ...slugMapOverrides
33
+ };
34
+ };
35
+
36
+ //# sourceMappingURL=getCollectionSlugMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/getCollectionSlugMap.ts"],"sourcesContent":["import type { CollectionSlugMap, SanitizedEcommercePluginConfig } from '../types/index.js'\n\ntype Props = {\n enableVariants?: boolean\n sanitizedPluginConfig: SanitizedEcommercePluginConfig\n}\n\n/**\n * Generates a map of collection slugs based on the sanitized plugin configuration.\n * Takes into consideration any collection overrides provided in the plugin.\n * Variant-related slugs are only included when enableVariants is true.\n */\nexport const getCollectionSlugMap = ({\n enableVariants = false,\n sanitizedPluginConfig,\n}: Props): CollectionSlugMap => {\n const defaultSlugMap: CollectionSlugMap = {\n addresses: 'addresses',\n carts: 'carts',\n customers: 'users',\n orders: 'orders',\n products: 'products',\n transactions: 'transactions',\n ...(enableVariants\n ? {\n variantOptions: 'variantOptions',\n variants: 'variants',\n variantTypes: 'variantTypes',\n }\n : {}),\n }\n\n const collectionSlugsMap: CollectionSlugMap = defaultSlugMap\n\n if (typeof sanitizedPluginConfig.customers === 'object' && sanitizedPluginConfig.customers.slug) {\n collectionSlugsMap.customers = sanitizedPluginConfig.customers.slug\n }\n\n // Only include variant slugs from slugMap if variants are enabled\n const slugMapOverrides = sanitizedPluginConfig.slugMap || {}\n\n if (!enableVariants) {\n delete slugMapOverrides.variantOptions\n delete slugMapOverrides.variants\n delete slugMapOverrides.variantTypes\n }\n\n return { ...collectionSlugsMap, ...slugMapOverrides }\n}\n"],"names":["getCollectionSlugMap","enableVariants","sanitizedPluginConfig","defaultSlugMap","addresses","carts","customers","orders","products","transactions","variantOptions","variants","variantTypes","collectionSlugsMap","slug","slugMapOverrides","slugMap"],"mappings":"AAOA;;;;CAIC,GACD,OAAO,MAAMA,uBAAuB,CAAC,EACnCC,iBAAiB,KAAK,EACtBC,qBAAqB,EACf;IACN,MAAMC,iBAAoC;QACxCC,WAAW;QACXC,OAAO;QACPC,WAAW;QACXC,QAAQ;QACRC,UAAU;QACVC,cAAc;QACd,GAAIR,iBACA;YACES,gBAAgB;YAChBC,UAAU;YACVC,cAAc;QAChB,IACA,CAAC,CAAC;IACR;IAEA,MAAMC,qBAAwCV;IAE9C,IAAI,OAAOD,sBAAsBI,SAAS,KAAK,YAAYJ,sBAAsBI,SAAS,CAACQ,IAAI,EAAE;QAC/FD,mBAAmBP,SAAS,GAAGJ,sBAAsBI,SAAS,CAACQ,IAAI;IACrE;IAEA,kEAAkE;IAClE,MAAMC,mBAAmBb,sBAAsBc,OAAO,IAAI,CAAC;IAE3D,IAAI,CAACf,gBAAgB;QACnB,OAAOc,iBAAiBL,cAAc;QACtC,OAAOK,iBAAiBJ,QAAQ;QAChC,OAAOI,iBAAiBH,YAAY;IACtC;IAEA,OAAO;QAAE,GAAGC,kBAAkB;QAAE,GAAGE,gBAAgB;IAAC;AACtD,EAAC"}