@reactionary/source 0.6.1 → 0.6.3

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 (453) hide show
  1. package/README.md +33 -11
  2. package/examples/node/package.json +7 -7
  3. package/examples/node/src/basic/basic-node-provider-model-extension.spec.ts +11 -5
  4. package/examples/node/src/basic/basic-node-provider-query-extension.spec.ts +9 -3
  5. package/examples/node/src/basic/basic-node-setup.spec.ts +6 -2
  6. package/examples/node/src/basic/client-creation.spec.ts +6 -6
  7. package/examples/node/src/utils.ts +48 -48
  8. package/examples/node/tsconfig.lib.json +2 -1
  9. package/package.json +1 -1
  10. package/packages/algolia/README.md +11 -0
  11. package/{providers/google-analytics → packages/algolia}/eslint.config.mjs +0 -2
  12. package/{providers → packages}/algolia/package.json +7 -5
  13. package/{providers/posthog → packages/algolia}/project.json +6 -6
  14. package/{providers/algolia/src/providers/analytics.provider.ts → packages/algolia/src/capabilities/analytics.capability.ts} +6 -6
  15. package/packages/algolia/src/capabilities/index.ts +3 -0
  16. package/{providers/algolia/src/providers/product-recommendations.provider.ts → packages/algolia/src/capabilities/product-recommendations.capability.ts} +3 -3
  17. package/packages/algolia/src/capabilities/product-search.capability.ts +119 -0
  18. package/packages/algolia/src/core/initialize.ts +82 -0
  19. package/packages/algolia/src/core/initialize.types.ts +107 -0
  20. package/packages/algolia/src/factories/index.ts +1 -0
  21. package/packages/algolia/src/factories/product-search/product-search.factory.ts +182 -0
  22. package/{providers/fake → packages/algolia}/src/index.ts +3 -2
  23. package/packages/algolia/src/schema/capabilities.schema.ts +84 -0
  24. package/{providers → packages}/algolia/src/test/analytics.spec.ts +12 -4
  25. package/packages/algolia/src/test/client-builder-product-search-extension.example.ts +85 -0
  26. package/packages/algolia/vite.config.ts +26 -0
  27. package/packages/algolia/vitest.config.mts +21 -0
  28. package/packages/commercetools/README.md +11 -0
  29. package/{core → packages/commercetools}/eslint.config.mjs +2 -2
  30. package/packages/commercetools/package.json +17 -0
  31. package/{providers → packages}/commercetools/project.json +7 -8
  32. package/{providers/commercetools/src/providers/cart.provider.ts → packages/commercetools/src/capabilities/cart.capability.ts} +68 -194
  33. package/{providers/commercetools/src/providers/category.provider.ts → packages/commercetools/src/capabilities/category.capability.ts} +26 -66
  34. package/{providers/commercetools/src/providers/checkout.provider.ts → packages/commercetools/src/capabilities/checkout.capability.ts} +51 -323
  35. package/{providers/commercetools/src/providers/identity.provider.ts → packages/commercetools/src/capabilities/identity.capability.ts} +36 -16
  36. package/packages/commercetools/src/capabilities/index.ts +15 -0
  37. package/{providers/commercetools/src/providers/inventory.provider.ts → packages/commercetools/src/capabilities/inventory.capability.ts} +14 -32
  38. package/packages/commercetools/src/capabilities/order-search.capability.ts +135 -0
  39. package/packages/commercetools/src/capabilities/order.capability.ts +67 -0
  40. package/{providers/commercetools/src/providers/price.provider.ts → packages/commercetools/src/capabilities/price.capability.ts} +38 -52
  41. package/{providers/commercetools/src/providers/product-associations.provider.ts → packages/commercetools/src/capabilities/product-associations.capability.ts} +40 -105
  42. package/{providers/commercetools/src/providers/product-list.provider.ts → packages/commercetools/src/capabilities/product-list.capability.ts} +39 -24
  43. package/{providers/commercetools/src/providers/product-reviews.provider.ts → packages/commercetools/src/capabilities/product-reviews.capability.ts} +35 -15
  44. package/{providers/commercetools/src/providers/product-search.provider.ts → packages/commercetools/src/capabilities/product-search.capability.ts} +18 -171
  45. package/packages/commercetools/src/capabilities/product.capability.ts +133 -0
  46. package/{providers/commercetools/src/providers/profile.provider.ts → packages/commercetools/src/capabilities/profile.capability.ts} +28 -74
  47. package/{providers/commercetools/src/providers/store.provider.ts → packages/commercetools/src/capabilities/store.capability.ts} +14 -32
  48. package/packages/commercetools/src/core/capability-descriptors.ts +324 -0
  49. package/{providers → packages}/commercetools/src/core/client.ts +2 -2
  50. package/packages/commercetools/src/core/initialize.ts +58 -0
  51. package/packages/commercetools/src/core/initialize.types.ts +174 -0
  52. package/packages/commercetools/src/factories/cart/cart.factory.ts +142 -0
  53. package/packages/commercetools/src/factories/category/category.factory.ts +77 -0
  54. package/packages/commercetools/src/factories/checkout/checkout-initializer-overrides.example.ts +94 -0
  55. package/packages/commercetools/src/factories/checkout/checkout.factory.ts +338 -0
  56. package/packages/commercetools/src/factories/identity/identity.factory.ts +26 -0
  57. package/packages/commercetools/src/factories/inventory/inventory.factory.ts +49 -0
  58. package/packages/commercetools/src/factories/order/order.factory.ts +149 -0
  59. package/packages/commercetools/src/factories/order-search/order-search.factory.ts +108 -0
  60. package/packages/commercetools/src/factories/price/price.factory.ts +76 -0
  61. package/packages/commercetools/src/factories/product/product-capability-custom-method-only.example.ts +47 -0
  62. package/packages/commercetools/src/factories/product/product-capability-schema-signature-extension.example.ts +61 -0
  63. package/packages/commercetools/src/factories/product/product-factory-baseline.example.ts +14 -0
  64. package/packages/commercetools/src/factories/product/product-factory-schema-and-parse-extension.example.ts +35 -0
  65. package/packages/commercetools/src/factories/product/product-factory-schema-extension.example.ts +23 -0
  66. package/packages/commercetools/src/factories/product/product-initializer-factory-extension.example.ts +41 -0
  67. package/packages/commercetools/src/factories/product/product.factory.ts +220 -0
  68. package/packages/commercetools/src/factories/product/utils.example.ts +9 -0
  69. package/packages/commercetools/src/factories/product-associations/product-associations.factory.ts +103 -0
  70. package/packages/commercetools/src/factories/product-list/product-list.factory.ts +122 -0
  71. package/packages/commercetools/src/factories/product-reviews/product-reviews.factory.ts +81 -0
  72. package/packages/commercetools/src/factories/product-search/product-search.factory.ts +182 -0
  73. package/packages/commercetools/src/factories/profile/profile.factory.ts +94 -0
  74. package/packages/commercetools/src/factories/store/store.factory.ts +49 -0
  75. package/packages/commercetools/src/index.ts +30 -0
  76. package/packages/commercetools/src/schema/capabilities.schema.ts +260 -0
  77. package/{providers → packages}/commercetools/src/test/caching.spec.ts +24 -8
  78. package/packages/commercetools/src/test/client-builder-merge-extensions.example.ts +125 -0
  79. package/{providers/algolia → packages/commercetools}/tsconfig.json +1 -1
  80. package/{core → packages/commercetools}/tsconfig.lib.json +1 -1
  81. package/packages/commercetools/tsconfig.spec.json +28 -0
  82. package/packages/commercetools/vite.config.ts +26 -0
  83. package/packages/commercetools/vitest.config.mts +21 -0
  84. package/{providers/fake → packages/core}/eslint.config.mjs +2 -1
  85. package/{core → packages/core}/package.json +7 -7
  86. package/packages/core/project.json +33 -0
  87. package/{core/src/providers/analytics.provider.ts → packages/core/src/capabilities/analytics.capability.ts} +8 -8
  88. package/{core/src/providers/base.provider.ts → packages/core/src/capabilities/base.capability.ts} +2 -2
  89. package/{core/src/providers/cart.provider.ts → packages/core/src/capabilities/cart.capability.ts} +13 -11
  90. package/{core/src/providers/category.provider.ts → packages/core/src/capabilities/category.capability.ts} +12 -10
  91. package/{core/src/providers/checkout.provider.ts → packages/core/src/capabilities/checkout.capability.ts} +15 -11
  92. package/{core/src/providers/identity.provider.ts → packages/core/src/capabilities/identity.capability.ts} +8 -8
  93. package/packages/core/src/capabilities/index.ts +18 -0
  94. package/{core/src/providers/inventory.provider.ts → packages/core/src/capabilities/inventory.capability.ts} +5 -5
  95. package/{core/src/providers/order-search.provider.ts → packages/core/src/capabilities/order-search.capability.ts} +5 -3
  96. package/{core/src/providers/order.provider.ts → packages/core/src/capabilities/order.capability.ts} +5 -5
  97. package/{core/src/providers/price.provider.ts → packages/core/src/capabilities/price.capability.ts} +6 -6
  98. package/{core/src/providers/product-associations.provider.ts → packages/core/src/capabilities/product-associations.capability.ts} +7 -5
  99. package/{core/src/providers/product-list.provider.ts → packages/core/src/capabilities/product-list.capability.ts} +14 -9
  100. package/{core/src/providers/product-recommendations.provider.ts → packages/core/src/capabilities/product-recommendations.capability.ts} +21 -21
  101. package/{core/src/providers/product-reviews.provider.ts → packages/core/src/capabilities/product-reviews.capability.ts} +9 -5
  102. package/packages/core/src/capabilities/product-search.capability.ts +48 -0
  103. package/{core/src/providers/product.provider.ts → packages/core/src/capabilities/product.capability.ts} +7 -7
  104. package/{core/src/providers/profile.provider.ts → packages/core/src/capabilities/profile.capability.ts} +9 -9
  105. package/{core/src/providers/store.provider.ts → packages/core/src/capabilities/store.capability.ts} +3 -3
  106. package/packages/core/src/client/client-builder.ts +131 -0
  107. package/packages/core/src/client/client.ts +35 -0
  108. package/{core → packages/core}/src/decorators/reactionary.decorator.ts +7 -7
  109. package/packages/core/src/factories/cart.factory.ts +40 -0
  110. package/packages/core/src/factories/category.factory.ts +40 -0
  111. package/packages/core/src/factories/checkout.factory.ts +59 -0
  112. package/packages/core/src/factories/identity.factory.ts +26 -0
  113. package/packages/core/src/factories/index.ts +15 -0
  114. package/packages/core/src/factories/inventory.factory.ts +26 -0
  115. package/packages/core/src/factories/order-search.factory.ts +33 -0
  116. package/packages/core/src/factories/order.factory.ts +21 -0
  117. package/packages/core/src/factories/price.factory.ts +29 -0
  118. package/packages/core/src/factories/product-associations.factory.ts +30 -0
  119. package/packages/core/src/factories/product-list.factory.ts +82 -0
  120. package/packages/core/src/factories/product-reviews.factory.ts +58 -0
  121. package/packages/core/src/factories/product-search.factory.ts +31 -0
  122. package/packages/core/src/factories/product.factory.ts +21 -0
  123. package/packages/core/src/factories/profile.factory.ts +23 -0
  124. package/packages/core/src/factories/store.factory.ts +21 -0
  125. package/packages/core/src/index.ts +8 -0
  126. package/packages/core/src/test/client-builder.spec.ts +141 -0
  127. package/{core → packages/core}/src/test/reactionary.decorator.spec.ts +27 -27
  128. package/{providers/meilisearch → packages/core}/tsconfig.json +1 -1
  129. package/{providers/medusa → packages/core}/tsconfig.lib.json +1 -2
  130. package/packages/core/tsconfig.spec.json +28 -0
  131. package/packages/core/vite.config.ts +26 -0
  132. package/packages/core/vitest.config.mts +21 -0
  133. package/packages/fake/README.md +11 -0
  134. package/{providers/algolia → packages/fake}/eslint.config.mjs +2 -1
  135. package/{providers → packages}/fake/package.json +6 -4
  136. package/{providers → packages}/fake/project.json +7 -8
  137. package/{providers/fake/src/providers/analytics.provider.ts → packages/fake/src/capabilities/analytics.capability.ts} +2 -2
  138. package/{providers/fake/src/providers/cart.provider.ts → packages/fake/src/capabilities/cart.capability.ts} +24 -15
  139. package/packages/fake/src/capabilities/category.capability.ts +199 -0
  140. package/{providers/fake/src/providers/checkout.provider.ts → packages/fake/src/capabilities/checkout.capability.ts} +40 -21
  141. package/{providers/fake/src/providers/identity.provider.ts → packages/fake/src/capabilities/identity.capability.ts} +40 -34
  142. package/packages/fake/src/capabilities/index.ts +15 -0
  143. package/packages/fake/src/capabilities/inventory.capability.ts +74 -0
  144. package/packages/fake/src/capabilities/order-search.capability.ts +86 -0
  145. package/{providers/fake/src/providers/order.provider.ts → packages/fake/src/capabilities/order.capability.ts} +22 -38
  146. package/{providers/fake/src/providers/price.provider.ts → packages/fake/src/capabilities/price.capability.ts} +42 -34
  147. package/{providers/fake/src/providers/product-associations.provider.ts → packages/fake/src/capabilities/product-associations.capability.ts} +24 -11
  148. package/{providers/fake/src/providers/product-reviews.provider.ts → packages/fake/src/capabilities/product-reviews.capability.ts} +72 -70
  149. package/{providers/fake/src/providers/product-search.provider.ts → packages/fake/src/capabilities/product-search.capability.ts} +44 -71
  150. package/{providers/fake/src/providers/product.provider.ts → packages/fake/src/capabilities/product.capability.ts} +35 -33
  151. package/packages/fake/src/capabilities/profile.capability.ts +154 -0
  152. package/packages/fake/src/capabilities/store.capability.ts +72 -0
  153. package/packages/fake/src/core/initialize.ts +274 -0
  154. package/packages/fake/src/core/initialize.types.ts +164 -0
  155. package/packages/fake/src/factories/cart/cart.factory.ts +34 -0
  156. package/packages/fake/src/factories/category/category.factory.ts +40 -0
  157. package/packages/fake/src/factories/checkout/checkout.factory.ts +53 -0
  158. package/packages/fake/src/factories/identity/identity.factory.ts +25 -0
  159. package/packages/fake/src/factories/index.ts +14 -0
  160. package/packages/fake/src/factories/inventory/inventory.factory.ts +25 -0
  161. package/packages/fake/src/factories/order/order.factory.ts +22 -0
  162. package/packages/fake/src/factories/order-search/order-search.factory.ts +27 -0
  163. package/packages/fake/src/factories/price/price.factory.ts +26 -0
  164. package/packages/fake/src/factories/product/product.factory.ts +22 -0
  165. package/packages/fake/src/factories/product-associations/product-associations.factory.ts +25 -0
  166. package/packages/fake/src/factories/product-reviews/product-reviews.factory.ts +53 -0
  167. package/packages/fake/src/factories/product-search/product-search.factory.ts +27 -0
  168. package/packages/fake/src/factories/profile/profile.factory.ts +22 -0
  169. package/packages/fake/src/factories/store/store.factory.ts +22 -0
  170. package/{providers/algolia → packages/fake}/src/index.ts +4 -3
  171. package/packages/fake/src/schema/capabilities.schema.ts +178 -0
  172. package/{providers/fake/src/test/cart.provider.spec.ts → packages/fake/src/test/cart.capability.spec.ts} +24 -7
  173. package/{providers/fake/src/test/category.provider.spec.ts → packages/fake/src/test/category.capability.spec.ts} +7 -4
  174. package/{providers/fake/src/test/checkout.provider.spec.ts → packages/fake/src/test/checkout.capability.spec.ts} +15 -5
  175. package/packages/fake/src/test/client-builder-product-extension.example.ts +75 -0
  176. package/{providers/fake/src/test/order-search.provider.spec.ts → packages/fake/src/test/order-search.capability.spec.ts} +7 -10
  177. package/{providers/fake/src/test/order.provider.spec.ts → packages/fake/src/test/order.capability.spec.ts} +7 -9
  178. package/{providers/fake/src/test/price.provider.spec.ts → packages/fake/src/test/price.capability.spec.ts} +6 -4
  179. package/{providers/fake/src/test/product.provider.spec.ts → packages/fake/src/test/product.capability.spec.ts} +10 -4
  180. package/{providers/fake/src/test/profile.provider.spec.ts → packages/fake/src/test/profile.capability.spec.ts} +7 -5
  181. package/{providers/commercetools → packages/fake}/tsconfig.json +1 -1
  182. package/packages/fake/tsconfig.lib.json +23 -0
  183. package/packages/fake/tsconfig.spec.json +28 -0
  184. package/packages/fake/vite.config.ts +26 -0
  185. package/packages/fake/vitest.config.mts +21 -0
  186. package/packages/google-analytics/eslint.config.mjs +23 -0
  187. package/{providers → packages}/google-analytics/package.json +7 -5
  188. package/{providers → packages}/google-analytics/project.json +5 -5
  189. package/{providers/google-analytics/src/providers/analytics.provider.ts → packages/google-analytics/src/capabilities/analytics.capability.ts} +2 -2
  190. package/packages/google-analytics/src/core/initialize.ts +41 -0
  191. package/packages/google-analytics/src/core/initialize.types.ts +47 -0
  192. package/{providers → packages}/google-analytics/src/index.ts +2 -1
  193. package/packages/google-analytics/src/schema/capabilities.schema.ts +36 -0
  194. package/{providers/google-analytics/src/test/analytics.provider.spec.ts → packages/google-analytics/src/test/analytics.capability.spec.ts} +7 -7
  195. package/packages/google-analytics/tsconfig.json +24 -0
  196. package/packages/google-analytics/tsconfig.lib.json +23 -0
  197. package/packages/google-analytics/tsconfig.spec.json +28 -0
  198. package/{providers → packages}/google-analytics/vite.config.ts +2 -2
  199. package/{providers → packages}/google-analytics/vitest.config.mts +2 -2
  200. package/packages/medusa/README.md +11 -0
  201. package/packages/medusa/eslint.config.mjs +23 -0
  202. package/packages/medusa/package.json +17 -0
  203. package/{providers → packages}/medusa/project.json +7 -8
  204. package/{providers/medusa/src/providers/cart.provider.ts → packages/medusa/src/capabilities/cart.capability.ts} +34 -21
  205. package/{providers/medusa/src/providers/category.provider.ts → packages/medusa/src/capabilities/category.capability.ts} +31 -13
  206. package/{providers/medusa/src/providers/checkout.provider.ts → packages/medusa/src/capabilities/checkout.capability.ts} +43 -18
  207. package/{providers/medusa/src/providers/identity.provider.ts → packages/medusa/src/capabilities/identity.capability.ts} +3 -3
  208. package/{providers/medusa/src/providers/inventory.provider.ts → packages/medusa/src/capabilities/inventory.capability.ts} +22 -8
  209. package/{providers/medusa/src/providers/order-search.provider.ts → packages/medusa/src/capabilities/order-search.capability.ts} +17 -6
  210. package/{providers/medusa/src/providers/order.provider.ts → packages/medusa/src/capabilities/order.capability.ts} +18 -6
  211. package/{providers/medusa/src/providers/price.provider.ts → packages/medusa/src/capabilities/price.capability.ts} +27 -8
  212. package/{providers/medusa/src/providers/product-associations.provider.ts → packages/medusa/src/capabilities/product-associations.capability.ts} +20 -9
  213. package/{providers/medusa/src/providers/product-recommendations.provider.ts → packages/medusa/src/capabilities/product-recommendations.capability.ts} +3 -3
  214. package/{providers/medusa/src/providers/product-search.provider.ts → packages/medusa/src/capabilities/product-search.capability.ts} +20 -32
  215. package/{providers/medusa/src/providers/product.provider.ts → packages/medusa/src/capabilities/product.capability.ts} +48 -12
  216. package/{providers/medusa/src/providers/profile.provider.ts → packages/medusa/src/capabilities/profile.capability.ts} +37 -13
  217. package/packages/medusa/src/core/initialize.ts +330 -0
  218. package/packages/medusa/src/core/initialize.types.ts +184 -0
  219. package/packages/medusa/src/factories/cart/cart.factory.ts +34 -0
  220. package/packages/medusa/src/factories/category/category.factory.ts +37 -0
  221. package/packages/medusa/src/factories/checkout/checkout.factory.ts +50 -0
  222. package/packages/medusa/src/factories/identity/identity.factory.ts +22 -0
  223. package/packages/medusa/src/factories/index.ts +12 -0
  224. package/packages/medusa/src/factories/inventory/inventory.factory.ts +25 -0
  225. package/packages/medusa/src/factories/order/order.factory.ts +22 -0
  226. package/packages/medusa/src/factories/order-search/order-search.factory.ts +27 -0
  227. package/packages/medusa/src/factories/price/price.factory.ts +26 -0
  228. package/packages/medusa/src/factories/product/product.factory.ts +22 -0
  229. package/packages/medusa/src/factories/product-associations/product-associations.factory.ts +25 -0
  230. package/packages/medusa/src/factories/product-search/product-search.factory.ts +27 -0
  231. package/packages/medusa/src/factories/profile/profile.factory.ts +22 -0
  232. package/packages/medusa/src/index.ts +17 -0
  233. package/packages/medusa/src/schema/capabilities.schema.ts +231 -0
  234. package/{providers/medusa/src/test/cart.provider.spec.ts → packages/medusa/src/test/cart.capability.spec.ts} +20 -4
  235. package/{providers/medusa/src/test/category.provider.spec.ts → packages/medusa/src/test/category.capability.spec.ts} +7 -4
  236. package/{providers → packages}/medusa/src/test/checkout.spec.ts +9 -9
  237. package/{providers/medusa/src/test/identity.provider.spec.ts → packages/medusa/src/test/identity.capability.spec.ts} +3 -3
  238. package/{providers/medusa/src/test/inventory.provider.spec.ts → packages/medusa/src/test/inventory.capability.spec.ts} +6 -4
  239. package/{providers/medusa/src/test/large-cart.provider.spec.ts → packages/medusa/src/test/large-cart.capability.spec.ts} +14 -8
  240. package/{providers/medusa/src/test/price.provider.spec.ts → packages/medusa/src/test/price.capability.spec.ts} +10 -3
  241. package/{providers/medusa/src/test/product.provider.spec.ts → packages/medusa/src/test/product.capability.spec.ts} +6 -4
  242. package/{providers/medusa/src/test/search.provider.spec.ts → packages/medusa/src/test/search.capability.spec.ts} +20 -7
  243. package/{providers → packages}/medusa/src/utils/medusa-helpers.ts +1 -1
  244. package/packages/medusa/tsconfig.json +24 -0
  245. package/packages/medusa/tsconfig.lib.json +23 -0
  246. package/packages/medusa/tsconfig.spec.json +28 -0
  247. package/packages/medusa/vite.config.ts +26 -0
  248. package/packages/medusa/vitest.config.mts +21 -0
  249. package/packages/meilisearch/README.md +11 -0
  250. package/packages/meilisearch/eslint.config.mjs +23 -0
  251. package/packages/meilisearch/package.json +15 -0
  252. package/{providers → packages}/meilisearch/project.json +7 -8
  253. package/packages/meilisearch/src/capabilities/index.ts +3 -0
  254. package/{providers/meilisearch/src/providers/order-search.provider.ts → packages/meilisearch/src/capabilities/order-search.capability.ts} +22 -7
  255. package/{providers/meilisearch/src/providers/product-recommendations.provider.ts → packages/meilisearch/src/capabilities/product-recommendations.capability.ts} +3 -3
  256. package/{providers/meilisearch/src/providers/product-search.provider.ts → packages/meilisearch/src/capabilities/product-search.capability.ts} +25 -9
  257. package/packages/meilisearch/src/core/initialize.ts +94 -0
  258. package/packages/meilisearch/src/core/initialize.types.ts +119 -0
  259. package/packages/meilisearch/src/factories/index.ts +2 -0
  260. package/packages/meilisearch/src/factories/order-search/order-search.factory.ts +27 -0
  261. package/packages/meilisearch/src/factories/product-search/product-search.factory.ts +27 -0
  262. package/packages/meilisearch/src/index.ts +9 -0
  263. package/packages/meilisearch/src/schema/capabilities.schema.ts +98 -0
  264. package/packages/meilisearch/tsconfig.json +24 -0
  265. package/packages/meilisearch/tsconfig.lib.json +23 -0
  266. package/packages/meilisearch/tsconfig.spec.json +28 -0
  267. package/packages/meilisearch/vite.config.ts +26 -0
  268. package/packages/meilisearch/vitest.config.mts +21 -0
  269. package/tsconfig.base.json +13 -21
  270. package/core/project.json +0 -34
  271. package/core/src/client/client-builder.ts +0 -84
  272. package/core/src/client/client.ts +0 -35
  273. package/core/src/index.ts +0 -6
  274. package/core/src/providers/index.ts +0 -18
  275. package/core/src/providers/product-search.provider.ts +0 -61
  276. package/core/src/test/client-builder.spec.ts +0 -60
  277. package/core/tsconfig.json +0 -24
  278. package/core/tsconfig.spec.json +0 -4
  279. package/core/vitest.config.ts +0 -14
  280. package/providers/algolia/README.md +0 -56
  281. package/providers/algolia/project.json +0 -34
  282. package/providers/algolia/src/core/initialize.ts +0 -27
  283. package/providers/algolia/src/providers/index.ts +0 -3
  284. package/providers/algolia/src/providers/product-search.provider.ts +0 -236
  285. package/providers/algolia/src/schema/capabilities.schema.ts +0 -10
  286. package/providers/algolia/tsconfig.lib.json +0 -10
  287. package/providers/algolia/tsconfig.spec.json +0 -4
  288. package/providers/algolia/vitest.config.ts +0 -14
  289. package/providers/commercetools/README.md +0 -65
  290. package/providers/commercetools/eslint.config.mjs +0 -22
  291. package/providers/commercetools/package.json +0 -15
  292. package/providers/commercetools/src/core/initialize.ts +0 -174
  293. package/providers/commercetools/src/index.ts +0 -15
  294. package/providers/commercetools/src/providers/index.ts +0 -15
  295. package/providers/commercetools/src/providers/order-search.provider.ts +0 -229
  296. package/providers/commercetools/src/providers/order.provider.ts +0 -198
  297. package/providers/commercetools/src/providers/product.provider.ts +0 -312
  298. package/providers/commercetools/src/schema/capabilities.schema.ts +0 -22
  299. package/providers/commercetools/tsconfig.lib.json +0 -10
  300. package/providers/commercetools/tsconfig.spec.json +0 -4
  301. package/providers/commercetools/vitest.config.ts +0 -15
  302. package/providers/fake/README.md +0 -23
  303. package/providers/fake/src/core/initialize.ts +0 -105
  304. package/providers/fake/src/providers/category.provider.ts +0 -184
  305. package/providers/fake/src/providers/index.ts +0 -15
  306. package/providers/fake/src/providers/inventory.provider.ts +0 -72
  307. package/providers/fake/src/providers/order-search.provider.ts +0 -78
  308. package/providers/fake/src/providers/profile.provider.ts +0 -147
  309. package/providers/fake/src/providers/store.provider.ts +0 -56
  310. package/providers/fake/src/schema/capabilities.schema.ts +0 -21
  311. package/providers/fake/tsconfig.json +0 -25
  312. package/providers/fake/tsconfig.lib.json +0 -11
  313. package/providers/fake/tsconfig.spec.json +0 -4
  314. package/providers/fake/vitest.config.ts +0 -14
  315. package/providers/google-analytics/src/core/initialize.ts +0 -16
  316. package/providers/google-analytics/src/schema/capabilities.schema.ts +0 -10
  317. package/providers/medusa/README.md +0 -30
  318. package/providers/medusa/TESTING.md +0 -98
  319. package/providers/medusa/eslint.config.mjs +0 -19
  320. package/providers/medusa/package.json +0 -15
  321. package/providers/medusa/src/core/initialize.ts +0 -87
  322. package/providers/medusa/src/index.ts +0 -15
  323. package/providers/medusa/src/schema/capabilities.schema.ts +0 -20
  324. package/providers/medusa/tsconfig.json +0 -24
  325. package/providers/medusa/tsconfig.spec.json +0 -4
  326. package/providers/medusa/vitest.config.ts +0 -15
  327. package/providers/meilisearch/README.md +0 -48
  328. package/providers/meilisearch/eslint.config.mjs +0 -22
  329. package/providers/meilisearch/package.json +0 -13
  330. package/providers/meilisearch/src/core/initialize.ts +0 -27
  331. package/providers/meilisearch/src/index.ts +0 -7
  332. package/providers/meilisearch/src/providers/index.ts +0 -2
  333. package/providers/meilisearch/src/schema/capabilities.schema.ts +0 -11
  334. package/providers/meilisearch/tsconfig.lib.json +0 -10
  335. package/providers/meilisearch/tsconfig.spec.json +0 -4
  336. package/providers/meilisearch/vitest.config.ts +0 -14
  337. package/providers/posthog/README.md +0 -7
  338. package/providers/posthog/eslint.config.mjs +0 -22
  339. package/providers/posthog/package.json +0 -12
  340. package/providers/posthog/src/core/initialize.ts +0 -11
  341. package/providers/posthog/src/index.ts +0 -4
  342. package/providers/posthog/src/schema/capabilities.schema.ts +0 -8
  343. package/providers/posthog/src/schema/configuration.schema.ts +0 -8
  344. package/providers/posthog/tsconfig.json +0 -21
  345. package/providers/posthog/tsconfig.lib.json +0 -9
  346. /package/{providers → packages}/algolia/src/schema/configuration.schema.ts +0 -0
  347. /package/{providers → packages}/algolia/src/schema/index.ts +0 -0
  348. /package/{providers → packages}/algolia/src/schema/product-recommendation.schema.ts +0 -0
  349. /package/{providers → packages}/algolia/src/schema/search.schema.ts +0 -0
  350. /package/{providers/google-analytics → packages/algolia}/tsconfig.json +0 -0
  351. /package/{providers/google-analytics → packages/algolia}/tsconfig.lib.json +0 -0
  352. /package/{providers/google-analytics → packages/algolia}/tsconfig.spec.json +0 -0
  353. /package/{providers → packages}/commercetools/src/core/token-cache.ts +0 -0
  354. /package/{providers → packages}/commercetools/src/schema/commercetools.schema.ts +0 -0
  355. /package/{providers → packages}/commercetools/src/schema/configuration.schema.ts +0 -0
  356. /package/{providers → packages}/commercetools/src/schema/session.schema.ts +0 -0
  357. /package/{providers → packages}/commercetools/src/test/identity.spec.ts +0 -0
  358. /package/{providers → packages}/commercetools/src/test/test-utils.ts +0 -0
  359. /package/{core → packages/core}/README.md +0 -0
  360. /package/{core → packages/core}/src/cache/cache.interface.ts +0 -0
  361. /package/{core → packages/core}/src/cache/index.ts +0 -0
  362. /package/{core → packages/core}/src/cache/memory-cache.ts +0 -0
  363. /package/{core → packages/core}/src/cache/noop-cache.ts +0 -0
  364. /package/{core → packages/core}/src/cache/redis-cache.ts +0 -0
  365. /package/{core → packages/core}/src/client/index.ts +0 -0
  366. /package/{core → packages/core}/src/decorators/index.ts +0 -0
  367. /package/{core → packages/core}/src/initialization.ts +0 -0
  368. /package/{core → packages/core}/src/metrics/metrics.ts +0 -0
  369. /package/{core → packages/core}/src/schemas/capabilities.schema.ts +0 -0
  370. /package/{core → packages/core}/src/schemas/errors/generic.error.ts +0 -0
  371. /package/{core → packages/core}/src/schemas/errors/index.ts +0 -0
  372. /package/{core → packages/core}/src/schemas/errors/invalid-input.error.ts +0 -0
  373. /package/{core → packages/core}/src/schemas/errors/invalid-output.error.ts +0 -0
  374. /package/{core → packages/core}/src/schemas/errors/not-found.error.ts +0 -0
  375. /package/{core → packages/core}/src/schemas/index.ts +0 -0
  376. /package/{core → packages/core}/src/schemas/models/analytics.model.ts +0 -0
  377. /package/{core → packages/core}/src/schemas/models/base.model.ts +0 -0
  378. /package/{core → packages/core}/src/schemas/models/cart.model.ts +0 -0
  379. /package/{core → packages/core}/src/schemas/models/category.model.ts +0 -0
  380. /package/{core → packages/core}/src/schemas/models/checkout.model.ts +0 -0
  381. /package/{core → packages/core}/src/schemas/models/cost.model.ts +0 -0
  382. /package/{core → packages/core}/src/schemas/models/currency.model.ts +0 -0
  383. /package/{core → packages/core}/src/schemas/models/identifiers.model.ts +0 -0
  384. /package/{core → packages/core}/src/schemas/models/identity.model.ts +0 -0
  385. /package/{core → packages/core}/src/schemas/models/index.ts +0 -0
  386. /package/{core → packages/core}/src/schemas/models/inventory.model.ts +0 -0
  387. /package/{core → packages/core}/src/schemas/models/order-search.model.ts +0 -0
  388. /package/{core → packages/core}/src/schemas/models/order.model.ts +0 -0
  389. /package/{core → packages/core}/src/schemas/models/payment.model.ts +0 -0
  390. /package/{core → packages/core}/src/schemas/models/price.model.ts +0 -0
  391. /package/{core → packages/core}/src/schemas/models/product-associations.model.ts +0 -0
  392. /package/{core → packages/core}/src/schemas/models/product-list.model.ts +0 -0
  393. /package/{core → packages/core}/src/schemas/models/product-recommendations.model.ts +0 -0
  394. /package/{core → packages/core}/src/schemas/models/product-reviews.model.ts +0 -0
  395. /package/{core → packages/core}/src/schemas/models/product-search.model.ts +0 -0
  396. /package/{core → packages/core}/src/schemas/models/product.model.ts +0 -0
  397. /package/{core → packages/core}/src/schemas/models/profile.model.ts +0 -0
  398. /package/{core → packages/core}/src/schemas/models/shipping-method.model.ts +0 -0
  399. /package/{core → packages/core}/src/schemas/models/store.model.ts +0 -0
  400. /package/{core → packages/core}/src/schemas/mutations/analytics/index.ts +0 -0
  401. /package/{core → packages/core}/src/schemas/mutations/analytics/product-add-to-cart.mutation.ts +0 -0
  402. /package/{core → packages/core}/src/schemas/mutations/analytics/product-details-view.mutation.ts +0 -0
  403. /package/{core → packages/core}/src/schemas/mutations/analytics/product-summary-click.mutation.ts +0 -0
  404. /package/{core → packages/core}/src/schemas/mutations/analytics/product-summary-view.mutation.ts +0 -0
  405. /package/{core → packages/core}/src/schemas/mutations/analytics/purchase.mutation.ts +0 -0
  406. /package/{core → packages/core}/src/schemas/mutations/base.mutation.ts +0 -0
  407. /package/{core → packages/core}/src/schemas/mutations/cart.mutation.ts +0 -0
  408. /package/{core → packages/core}/src/schemas/mutations/checkout.mutation.ts +0 -0
  409. /package/{core → packages/core}/src/schemas/mutations/identity.mutation.ts +0 -0
  410. /package/{core → packages/core}/src/schemas/mutations/index.ts +0 -0
  411. /package/{core → packages/core}/src/schemas/mutations/inventory.mutation.ts +0 -0
  412. /package/{core → packages/core}/src/schemas/mutations/price.mutation.ts +0 -0
  413. /package/{core → packages/core}/src/schemas/mutations/product-list.mutation.ts +0 -0
  414. /package/{core → packages/core}/src/schemas/mutations/product-reviews.mutation.ts +0 -0
  415. /package/{core → packages/core}/src/schemas/mutations/product.mutation.ts +0 -0
  416. /package/{core → packages/core}/src/schemas/mutations/profile.mutation.ts +0 -0
  417. /package/{core → packages/core}/src/schemas/mutations/search.mutation.ts +0 -0
  418. /package/{core → packages/core}/src/schemas/queries/analytics.query.ts +0 -0
  419. /package/{core → packages/core}/src/schemas/queries/base.query.ts +0 -0
  420. /package/{core → packages/core}/src/schemas/queries/cart.query.ts +0 -0
  421. /package/{core → packages/core}/src/schemas/queries/category.query.ts +0 -0
  422. /package/{core → packages/core}/src/schemas/queries/checkout.query.ts +0 -0
  423. /package/{core → packages/core}/src/schemas/queries/identity.query.ts +0 -0
  424. /package/{core → packages/core}/src/schemas/queries/index.ts +0 -0
  425. /package/{core → packages/core}/src/schemas/queries/inventory.query.ts +0 -0
  426. /package/{core → packages/core}/src/schemas/queries/order-search.query.ts +0 -0
  427. /package/{core → packages/core}/src/schemas/queries/order.query.ts +0 -0
  428. /package/{core → packages/core}/src/schemas/queries/price.query.ts +0 -0
  429. /package/{core → packages/core}/src/schemas/queries/product-associations.query.ts +0 -0
  430. /package/{core → packages/core}/src/schemas/queries/product-list.query.ts +0 -0
  431. /package/{core → packages/core}/src/schemas/queries/product-recommendations.query.ts +0 -0
  432. /package/{core → packages/core}/src/schemas/queries/product-reviews.query.ts +0 -0
  433. /package/{core → packages/core}/src/schemas/queries/product-search.query.ts +0 -0
  434. /package/{core → packages/core}/src/schemas/queries/product.query.ts +0 -0
  435. /package/{core → packages/core}/src/schemas/queries/profile.query.ts +0 -0
  436. /package/{core → packages/core}/src/schemas/queries/store.query.ts +0 -0
  437. /package/{core → packages/core}/src/schemas/result.ts +0 -0
  438. /package/{core → packages/core}/src/schemas/session.schema.ts +0 -0
  439. /package/{core → packages/core}/src/test/request-context.spec.ts +0 -0
  440. /package/{core → packages/core}/src/zod-utils.ts +0 -0
  441. /package/{providers → packages}/fake/src/schema/configuration.schema.ts +0 -0
  442. /package/{providers → packages}/fake/src/test/test-utils.ts +0 -0
  443. /package/{providers → packages}/fake/src/utilities/jitter.ts +0 -0
  444. /package/{providers → packages}/fake/src/utilities/seed.ts +0 -0
  445. /package/{providers → packages}/google-analytics/README.md +0 -0
  446. /package/{providers → packages}/google-analytics/src/schema/configuration.schema.ts +0 -0
  447. /package/{providers → packages}/medusa/src/core/client.ts +0 -0
  448. /package/{providers → packages}/medusa/src/schema/configuration.schema.ts +0 -0
  449. /package/{providers → packages}/medusa/src/schema/medusa.schema.ts +0 -0
  450. /package/{providers → packages}/medusa/src/test/test-utils.ts +0 -0
  451. /package/{providers → packages}/meilisearch/src/schema/configuration.schema.ts +0 -0
  452. /package/{providers → packages}/meilisearch/src/schema/index.ts +0 -0
  453. /package/{providers → packages}/meilisearch/src/schema/search.schema.ts +0 -0
@@ -0,0 +1,23 @@
1
+ import baseConfig from '../../eslint.config.mjs';
2
+
3
+ export default [
4
+ ...baseConfig,
5
+ {
6
+ files: ['**/*.json'],
7
+ rules: {
8
+ '@nx/dependency-checks': [
9
+ 'error',
10
+ {
11
+ ignoredFiles: [
12
+ '{projectRoot}/eslint.config.{js,cjs,mjs,ts,cts,mts}',
13
+ '{projectRoot}/esbuild.config.{js,ts,mjs,mts}',
14
+ '{projectRoot}/vite.config.{js,ts,mjs,mts}',
15
+ ],
16
+ },
17
+ ],
18
+ },
19
+ languageOptions: {
20
+ parser: await import('jsonc-eslint-parser'),
21
+ },
22
+ },
23
+ ];
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "@reactionary/google-analytics",
3
3
  "version": "0.0.1",
4
- "main": "index.js",
5
- "types": "src/index.d.ts",
4
+ "type": "module",
5
+ "main": "./index.js",
6
+ "types": "./src/index.d.ts",
6
7
  "dependencies": {
7
8
  "@reactionary/core": "0.0.1",
8
- "zod": "4.1.9"
9
+ "zod": "4.1.9",
10
+ "vitest": "^4.0.9",
11
+ "@nx/vite": "22.4.5"
9
12
  },
10
- "type": "module",
11
- "sideEffects": false
13
+ "sideEffets": false
12
14
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "google-analytics",
3
3
  "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
- "sourceRoot": "providers/google-analytics/src",
4
+ "sourceRoot": "packages/google-analytics/src",
5
5
  "projectType": "library",
6
6
  "release": {
7
7
  "version": {
@@ -16,10 +16,10 @@
16
16
  "executor": "@nx/esbuild:esbuild",
17
17
  "outputs": ["{options.outputPath}"],
18
18
  "options": {
19
- "outputPath": "dist/providers/google-analytics",
20
- "main": "providers/google-analytics/src/index.ts",
21
- "tsConfig": "providers/google-analytics/tsconfig.lib.json",
22
- "assets": ["providers/google-analytics/*.md"],
19
+ "outputPath": "dist/packages/google-analytics",
20
+ "main": "packages/google-analytics/src/index.ts",
21
+ "tsConfig": "packages/google-analytics/tsconfig.lib.json",
22
+ "assets": ["packages/google-analytics/*.md"],
23
23
  "format": ["esm"],
24
24
  "bundle": false
25
25
  }
@@ -1,5 +1,5 @@
1
1
  import {
2
- AnalyticsProvider,
2
+ AnalyticsCapability,
3
3
  type RequestContext,
4
4
  type Cache,
5
5
  type AnalyticsMutationProductSummaryViewEvent,
@@ -10,7 +10,7 @@ import {
10
10
  } from '@reactionary/core';
11
11
  import type { GoogleAnalyticsConfiguration } from '../schema/configuration.schema.js';
12
12
 
13
- export class GoogleAnalyticsAnalyticsProvider extends AnalyticsProvider {
13
+ export class GoogleAnalyticsAnalyticsCapability extends AnalyticsCapability {
14
14
  protected config: GoogleAnalyticsConfiguration;
15
15
 
16
16
  constructor(
@@ -0,0 +1,41 @@
1
+ import type { Cache, RequestContext } from '@reactionary/core';
2
+ import {
3
+ GoogleAnalyticsCapabilitiesSchema,
4
+ type GoogleAnalyticsCapabilities,
5
+ } from '../schema/capabilities.schema.js';
6
+ import type { GoogleAnalyticsConfiguration } from '../schema/configuration.schema.js';
7
+ import { GoogleAnalyticsAnalyticsCapability } from '../capabilities/analytics.capability.js';
8
+ import {
9
+ type GoogleAnalyticsClientFromCapabilities,
10
+ resolveDirectCapability,
11
+ } from './initialize.types.js';
12
+
13
+ export function withGoogleAnalyticsCapabilities<
14
+ T extends GoogleAnalyticsCapabilities,
15
+ >(configuration: GoogleAnalyticsConfiguration, capabilities: T) {
16
+ return (
17
+ cache: Cache,
18
+ context: RequestContext,
19
+ ): GoogleAnalyticsClientFromCapabilities<T> => {
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ const client: any = {};
22
+ const caps = GoogleAnalyticsCapabilitiesSchema.parse(capabilities);
23
+
24
+ if (caps.analytics?.enabled) {
25
+ client.analytics = resolveDirectCapability(
26
+ capabilities.analytics,
27
+ (args) => new GoogleAnalyticsAnalyticsCapability(args.cache, args.context, args.config),
28
+ {
29
+ cache,
30
+ context,
31
+ config: configuration,
32
+ },
33
+ );
34
+ }
35
+
36
+ return client;
37
+ };
38
+ }
39
+
40
+ // Backward-compatibility alias.
41
+ export const googleAnalyticsCapabilities = withGoogleAnalyticsCapabilities;
@@ -0,0 +1,47 @@
1
+ import type { ClientFromCapabilities } from '@reactionary/core';
2
+ import type { GoogleAnalyticsCapabilities } from '../schema/capabilities.schema.js';
3
+ import type { GoogleAnalyticsAnalyticsCapability } from '../capabilities/analytics.capability.js';
4
+
5
+ type EnabledCapability<TCapability> =
6
+ TCapability extends { enabled: true } ? true : false;
7
+
8
+ type NormalizeConfiguredCapabilities<T extends GoogleAnalyticsCapabilities> =
9
+ Omit<T, 'analytics'> & {
10
+ analytics?: EnabledCapability<T['analytics']>;
11
+ };
12
+
13
+ type ExtractCapabilityImplementation<TCapability, TDefaultCapability> =
14
+ TCapability extends { enabled: true; capability?: infer TCapabilityFactory }
15
+ ? TCapabilityFactory extends (...args: unknown[]) => infer TResolvedCapability
16
+ ? TResolvedCapability
17
+ : TDefaultCapability
18
+ : TDefaultCapability;
19
+
20
+ type CapabilityOverride<
21
+ TCapability,
22
+ TKey extends string,
23
+ TResolvedCapability,
24
+ > = TCapability extends { enabled: true }
25
+ ? { [K in TKey]: TResolvedCapability }
26
+ : Record<never, never>;
27
+
28
+ type AnalyticsCapabilityFor<T extends GoogleAnalyticsCapabilities> =
29
+ ExtractCapabilityImplementation<T['analytics'], GoogleAnalyticsAnalyticsCapability>;
30
+
31
+ export type GoogleAnalyticsClientFromCapabilities<
32
+ T extends GoogleAnalyticsCapabilities,
33
+ > = Omit<ClientFromCapabilities<NormalizeConfiguredCapabilities<T>>, 'analytics'> &
34
+ CapabilityOverride<T['analytics'], 'analytics', AnalyticsCapabilityFor<T>>;
35
+
36
+ export function resolveDirectCapability<TResolvedCapability, TCapabilityArgs>(
37
+ capability:
38
+ | {
39
+ capability?: (args: TCapabilityArgs) => TResolvedCapability;
40
+ }
41
+ | undefined,
42
+ defaultCapability: (args: TCapabilityArgs) => TResolvedCapability,
43
+ args: TCapabilityArgs,
44
+ ): TResolvedCapability {
45
+ const capabilityFactory = capability?.capability ?? defaultCapability;
46
+ return capabilityFactory(args);
47
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './core/initialize.js';
2
- export * from './providers/analytics.provider.js';
2
+ export * from './core/initialize.types.js';
3
+ export * from './capabilities/analytics.capability.js';
3
4
  export * from './schema/capabilities.schema.js';
4
5
  export * from './schema/configuration.schema.js';
@@ -0,0 +1,36 @@
1
+ import type { AnalyticsCapability, Cache, RequestContext } from '@reactionary/core';
2
+ import { CapabilitiesSchema } from '@reactionary/core';
3
+ import type { GoogleAnalyticsConfiguration } from './configuration.schema.js';
4
+ import * as z from 'zod';
5
+
6
+ const AnalyticsCapabilitySchema = z.looseObject({
7
+ enabled: z.boolean(),
8
+ capability: z.unknown().optional(),
9
+ });
10
+
11
+ export const GoogleAnalyticsCapabilitiesSchema = CapabilitiesSchema.pick({
12
+ analytics: true,
13
+ })
14
+ .extend({
15
+ analytics: AnalyticsCapabilitySchema.optional(),
16
+ })
17
+ .partial();
18
+
19
+ export interface GoogleAnalyticsCapabilityFactoryArgs {
20
+ cache: Cache;
21
+ context: RequestContext;
22
+ config: GoogleAnalyticsConfiguration;
23
+ }
24
+
25
+ export interface GoogleAnalyticsAnalyticsCapabilityConfig<
26
+ TCapability extends AnalyticsCapability = AnalyticsCapability,
27
+ > {
28
+ enabled: boolean;
29
+ capability?: (args: GoogleAnalyticsCapabilityFactoryArgs) => TCapability;
30
+ }
31
+
32
+ export type GoogleAnalyticsCapabilities<
33
+ TAnalyticsCapability extends AnalyticsCapability = AnalyticsCapability,
34
+ > = {
35
+ analytics?: GoogleAnalyticsAnalyticsCapabilityConfig<TAnalyticsCapability>;
36
+ };
@@ -6,12 +6,12 @@ import {
6
6
  NoOpCache,
7
7
  createInitialRequestContext,
8
8
  } from '@reactionary/core';
9
- import { describe, expect, it, beforeAll, beforeEach, assert } from 'vitest';
10
- import { GoogleAnalyticsAnalyticsProvider } from '../providers/analytics.provider.js';
9
+ import { describe, it, beforeEach } from 'vitest';
10
+ import { GoogleAnalyticsAnalyticsCapability } from '../capabilities/analytics.capability.js';
11
11
  import type { GoogleAnalyticsConfiguration } from '../schema/configuration.schema.js';
12
12
 
13
- describe('Google Analytics Analytics Provider', () => {
14
- let provider: GoogleAnalyticsAnalyticsProvider;
13
+ describe('Google Analytics Analytics Capability', () => {
14
+ let capability: GoogleAnalyticsAnalyticsCapability;
15
15
  let reqCtx: RequestContext;
16
16
 
17
17
  beforeEach(() => {
@@ -22,7 +22,7 @@ describe('Google Analytics Analytics Provider', () => {
22
22
  url: process.env['GOOGLE_ANALYTICS_URL'] || '',
23
23
  } satisfies GoogleAnalyticsConfiguration;
24
24
 
25
- provider = new GoogleAnalyticsAnalyticsProvider(
25
+ capability = new GoogleAnalyticsAnalyticsCapability(
26
26
  new NoOpCache(),
27
27
  reqCtx,
28
28
  config
@@ -38,7 +38,7 @@ describe('Google Analytics Analytics Provider', () => {
38
38
  }]
39
39
  } satisfies AnalyticsMutationProductSummaryViewEvent;
40
40
 
41
- const result = await provider.track(event);
41
+ await capability.track(event);
42
42
  });
43
43
 
44
44
  it('should be able to track a purchase', async () => {
@@ -87,7 +87,7 @@ describe('Google Analytics Analytics Provider', () => {
87
87
  },
88
88
  } satisfies AnalyticsMutationPurchaseEvent;
89
89
 
90
- await provider.track(event);
90
+ await capability.track(event);
91
91
  });
92
92
  });
93
93
  });
@@ -0,0 +1,24 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "module": "nodenext",
5
+ "moduleResolution": "nodenext",
6
+ "forceConsistentCasingInFileNames": true,
7
+ "strict": true,
8
+ "importHelpers": true,
9
+ "noImplicitOverride": true,
10
+ "noImplicitReturns": true,
11
+ "noFallthroughCasesInSwitch": true,
12
+ "noPropertyAccessFromIndexSignature": true
13
+ },
14
+ "files": [],
15
+ "include": [],
16
+ "references": [
17
+ {
18
+ "path": "./tsconfig.lib.json"
19
+ },
20
+ {
21
+ "path": "./tsconfig.spec.json"
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "../../dist/out-tsc",
5
+ "declaration": true,
6
+ "types": ["node"]
7
+ },
8
+ "include": ["src/**/*.ts"],
9
+ "exclude": [
10
+ "vite.config.ts",
11
+ "vite.config.mts",
12
+ "vitest.config.ts",
13
+ "vitest.config.mts",
14
+ "src/**/*.test.ts",
15
+ "src/**/*.spec.ts",
16
+ "src/**/*.test.tsx",
17
+ "src/**/*.spec.tsx",
18
+ "src/**/*.test.js",
19
+ "src/**/*.spec.js",
20
+ "src/**/*.test.jsx",
21
+ "src/**/*.spec.jsx"
22
+ ]
23
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "../../dist/out-tsc",
5
+ "types": [
6
+ "vitest/globals",
7
+ "vitest/importMeta",
8
+ "vite/client",
9
+ "node",
10
+ "vitest"
11
+ ]
12
+ },
13
+ "include": [
14
+ "vite.config.ts",
15
+ "vite.config.mts",
16
+ "vitest.config.ts",
17
+ "vitest.config.mts",
18
+ "src/**/*.test.ts",
19
+ "src/**/*.spec.ts",
20
+ "src/**/*.test.tsx",
21
+ "src/**/*.spec.tsx",
22
+ "src/**/*.test.js",
23
+ "src/**/*.spec.js",
24
+ "src/**/*.test.jsx",
25
+ "src/**/*.spec.jsx",
26
+ "src/**/*.d.ts"
27
+ ]
28
+ }
@@ -5,7 +5,7 @@ import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
5
5
 
6
6
  export default defineConfig(() => ({
7
7
  root: import.meta.dirname,
8
- cacheDir: '../../node_modules/.vite/providers/google-analytics',
8
+ cacheDir: '../../node_modules/.vite/packages/google-analytics',
9
9
  plugins: [nxViteTsPaths(), nxCopyAssetsPlugin(['*.md'])],
10
10
  // Uncomment this if you are using workers.
11
11
  // worker: {
@@ -19,7 +19,7 @@ export default defineConfig(() => ({
19
19
  include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
20
20
  reporters: ['default'],
21
21
  coverage: {
22
- reportsDirectory: '../../coverage/providers/google-analytics',
22
+ reportsDirectory: '../../coverage/packages/google-analytics',
23
23
  provider: 'v8' as const,
24
24
  },
25
25
  },
@@ -4,7 +4,7 @@ import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
4
4
 
5
5
  export default defineConfig(() => ({
6
6
  root: __dirname,
7
- cacheDir: '../../node_modules/.vite/providers/google-analytics',
7
+ cacheDir: '../../node_modules/.vite/packages/google-analytics',
8
8
  plugins: [nxViteTsPaths(), nxCopyAssetsPlugin(['*.md'])],
9
9
  test: {
10
10
  name: 'google-analytics',
@@ -14,7 +14,7 @@ export default defineConfig(() => ({
14
14
  include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
15
15
  reporters: ['default'],
16
16
  coverage: {
17
- reportsDirectory: '../../coverage/providers/google-analytics',
17
+ reportsDirectory: '../../coverage/packages/google-analytics',
18
18
  provider: 'v8' as const,
19
19
  },
20
20
  },
@@ -0,0 +1,11 @@
1
+ # medusa
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build medusa` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test medusa` to execute the unit tests via [Vitest](https://vitest.dev/).
@@ -0,0 +1,23 @@
1
+ import baseConfig from '../../eslint.config.mjs';
2
+
3
+ export default [
4
+ ...baseConfig,
5
+ {
6
+ files: ['**/*.json'],
7
+ rules: {
8
+ '@nx/dependency-checks': [
9
+ 'error',
10
+ {
11
+ ignoredFiles: [
12
+ '{projectRoot}/eslint.config.{js,cjs,mjs,ts,cts,mts}',
13
+ '{projectRoot}/esbuild.config.{js,ts,mjs,mts}',
14
+ '{projectRoot}/vite.config.{js,ts,mjs,mts}',
15
+ ],
16
+ },
17
+ ],
18
+ },
19
+ languageOptions: {
20
+ parser: await import('jsonc-eslint-parser'),
21
+ },
22
+ },
23
+ ];
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "@reactionary/medusa",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "main": "./index.js",
6
+ "types": "./src/index.d.ts",
7
+ "dependencies": {
8
+ "@medusajs/js-sdk": "^2.13.3",
9
+ "@reactionary/core": "0.0.1",
10
+ "debug": "^4.4.3",
11
+ "@medusajs/types": "^2.13.3",
12
+ "zod": "4.1.9",
13
+ "vitest": "^4.0.9",
14
+ "@nx/vite": "22.4.5"
15
+ },
16
+ "sideEffects": false
17
+ }
@@ -1,14 +1,13 @@
1
1
  {
2
2
  "name": "medusa",
3
3
  "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
- "sourceRoot": "providers/medusa/src",
4
+ "sourceRoot": "packages/medusa/src",
5
5
  "projectType": "library",
6
6
  "release": {
7
7
  "version": {
8
+ "manifestRootsToUpdate": ["dist/{projectRoot}"],
8
9
  "currentVersionResolver": "git-tag",
9
- "fallbackCurrentVersionResolver": "disk",
10
- "preserveLocalDependencyProtocols": false,
11
- "manifestRootsToUpdate": ["dist/{projectRoot}"]
10
+ "fallbackCurrentVersionResolver": "disk"
12
11
  }
13
12
  },
14
13
  "tags": [],
@@ -17,10 +16,10 @@
17
16
  "executor": "@nx/esbuild:esbuild",
18
17
  "outputs": ["{options.outputPath}"],
19
18
  "options": {
20
- "outputPath": "dist/providers/medusa",
21
- "main": "providers/medusa/src/index.ts",
22
- "tsConfig": "providers/medusa/tsconfig.lib.json",
23
- "assets": ["providers/medusa/*.md"],
19
+ "outputPath": "dist/packages/medusa",
20
+ "main": "packages/medusa/src/index.ts",
21
+ "tsConfig": "packages/medusa/tsconfig.lib.json",
22
+ "assets": ["packages/medusa/*.md"],
24
23
  "format": ["esm"],
25
24
  "bundle": false
26
25
  }
@@ -3,6 +3,10 @@ import type {
3
3
  Cart,
4
4
  CartIdentifier,
5
5
  CartItem,
6
+ CartFactory,
7
+ CartFactoryCartOutput,
8
+ CartFactoryIdentifierOutput,
9
+ CartFactoryWithOutput,
6
10
  CartMutationApplyCoupon,
7
11
  CartMutationChangeCurrency,
8
12
  CartMutationDeleteCart,
@@ -29,7 +33,7 @@ import {
29
33
  CartMutationItemQuantityChangeSchema,
30
34
  CartMutationItemRemoveSchema,
31
35
  CartMutationRemoveCouponSchema,
32
- CartProvider,
36
+ CartCapability,
33
37
  CartQueryByIdSchema,
34
38
  CartSchema,
35
39
  error,
@@ -49,11 +53,18 @@ import {
49
53
  parseMedusaItemPrice,
50
54
  } from '../utils/medusa-helpers.js';
51
55
  import type { StoreAddCartLineItem, StoreCart, StoreCartAddPromotion, StoreCartLineItem, StoreCartRemovePromotion, StoreCartResponse, StoreCreateCart, StoreProduct, StoreUpdateCart, StoreUpdateCartLineItem } from '@medusajs/types';
56
+ import type { MedusaCartFactory } from '../factories/cart/cart.factory.js';
52
57
 
53
58
  const debug = createDebug('reactionary:medusa:cart');
54
59
 
55
- export class MedusaCartProvider extends CartProvider {
60
+ export class MedusaCartCapability<
61
+ TFactory extends CartFactory = MedusaCartFactory,
62
+ > extends CartCapability<
63
+ CartFactoryCartOutput<TFactory>,
64
+ CartFactoryIdentifierOutput<TFactory>
65
+ > {
56
66
  protected config: MedusaConfiguration;
67
+ protected factory: CartFactoryWithOutput<TFactory>;
57
68
  /**
58
69
  * This controls which fields are always included when fetching a cart
59
70
  * You can override this in a subclass to add more fields as needed.
@@ -66,10 +77,12 @@ export class MedusaCartProvider extends CartProvider {
66
77
  config: MedusaConfiguration,
67
78
  cache: Cache,
68
79
  context: RequestContext,
69
- public medusaApi: MedusaAPI
80
+ public medusaApi: MedusaAPI,
81
+ factory: CartFactoryWithOutput<TFactory>,
70
82
  ) {
71
83
  super(cache, context);
72
84
  this.config = config;
85
+ this.factory = factory;
73
86
  }
74
87
 
75
88
  @Reactionary({
@@ -78,7 +91,7 @@ export class MedusaCartProvider extends CartProvider {
78
91
  })
79
92
  public override async getById(
80
93
  payload: CartQueryById
81
- ): Promise<Result<Cart, NotFoundError>> {
94
+ ): Promise<Result<CartFactoryCartOutput<TFactory>, NotFoundError>> {
82
95
  try {
83
96
  const client = await this.getClient();
84
97
  const medusaId = payload.cart as MedusaCartIdentifier;
@@ -132,7 +145,7 @@ export class MedusaCartProvider extends CartProvider {
132
145
  })
133
146
  public override async add(
134
147
  payload: CartMutationItemAdd
135
- ): Promise<Result<Cart>> {
148
+ ): Promise<Result<CartFactoryCartOutput<TFactory>>> {
136
149
  try {
137
150
  const client = await this.getClient();
138
151
 
@@ -190,7 +203,7 @@ export class MedusaCartProvider extends CartProvider {
190
203
  })
191
204
  public override async remove(
192
205
  payload: CartMutationItemRemove
193
- ): Promise<Result<Cart>> {
206
+ ): Promise<Result<CartFactoryCartOutput<TFactory>>> {
194
207
  try {
195
208
  const client = await this.getClient();
196
209
  const medusaId = payload.cart as MedusaCartIdentifier;
@@ -231,7 +244,7 @@ export class MedusaCartProvider extends CartProvider {
231
244
  })
232
245
  public override async changeQuantity(
233
246
  payload: CartMutationItemQuantityChange
234
- ): Promise<Result<Cart>> {
247
+ ): Promise<Result<CartFactoryCartOutput<TFactory>>> {
235
248
  if (payload.quantity < 1) {
236
249
  throw new Error(
237
250
  'Changing quantity to 0 is not allowed. Use the remove call instead.'
@@ -267,7 +280,7 @@ export class MedusaCartProvider extends CartProvider {
267
280
  outputSchema: CartIdentifierSchema,
268
281
  })
269
282
  public override async getActiveCartId(): Promise<
270
- Result<CartIdentifier, NotFoundError>
283
+ Result<CartFactoryIdentifierOutput<TFactory>, NotFoundError>
271
284
  > {
272
285
  try {
273
286
  const client = await this.getClient();
@@ -278,12 +291,10 @@ export class MedusaCartProvider extends CartProvider {
278
291
  if (activeCartId) {
279
292
  try {
280
293
  await client.store.cart.retrieve(activeCartId);
281
- return success(
282
- MedusaCartIdentifierSchema.parse({
283
- key: activeCartId,
284
- region_id: (await this.medusaApi.getActiveRegion()).id,
285
- })
286
- );
294
+ return success(this.factory.parseCartIdentifier(this.context, {
295
+ key: activeCartId,
296
+ region_id: (await this.medusaApi.getActiveRegion()).id,
297
+ }));
287
298
  } catch {
288
299
  // Cart doesn't exist, create new one
289
300
  }
@@ -360,7 +371,7 @@ export class MedusaCartProvider extends CartProvider {
360
371
  })
361
372
  public override async applyCouponCode(
362
373
  payload: CartMutationApplyCoupon
363
- ): Promise<Result<Cart>> {
374
+ ): Promise<Result<CartFactoryCartOutput<TFactory>>> {
364
375
  try {
365
376
  const client = await this.getClient();
366
377
  const medusaId = payload.cart as MedusaCartIdentifier;
@@ -414,7 +425,7 @@ export class MedusaCartProvider extends CartProvider {
414
425
  })
415
426
  public override async removeCouponCode(
416
427
  payload: CartMutationRemoveCoupon
417
- ): Promise<Result<Cart>> {
428
+ ): Promise<Result<CartFactoryCartOutput<TFactory>>> {
418
429
  try {
419
430
  const client = await this.getClient();
420
431
  const medusaId = payload.cart as MedusaCartIdentifier;
@@ -468,7 +479,7 @@ export class MedusaCartProvider extends CartProvider {
468
479
  })
469
480
  public override async changeCurrency(
470
481
  payload: CartMutationChangeCurrency
471
- ): Promise<Result<Cart>> {
482
+ ): Promise<Result<CartFactoryCartOutput<TFactory>>> {
472
483
  try {
473
484
  const client = await this.getClient();
474
485
 
@@ -512,7 +523,9 @@ export class MedusaCartProvider extends CartProvider {
512
523
  }
513
524
 
514
525
 
515
- protected async createCart(currency?: string): Promise<CartIdentifier> {
526
+ protected async createCart(
527
+ currency?: string,
528
+ ): Promise<CartFactoryIdentifierOutput<TFactory>> {
516
529
  try {
517
530
  const client = await this.getClient();
518
531
 
@@ -524,7 +537,7 @@ export class MedusaCartProvider extends CartProvider {
524
537
  );
525
538
 
526
539
  if (response.cart) {
527
- const cartIdentifier = MedusaCartIdentifierSchema.parse({
540
+ const cartIdentifier = this.factory.parseCartIdentifier(this.context, {
528
541
  key: response.cart.id,
529
542
  region_id: response.cart.region_id,
530
543
  });
@@ -601,7 +614,7 @@ export class MedusaCartProvider extends CartProvider {
601
614
  * @param remote
602
615
  * @returns
603
616
  */
604
- protected parseSingle(remote: StoreCart): Cart {
617
+ protected parseSingle(remote: StoreCart): CartFactoryCartOutput<TFactory> {
605
618
  const identifier = MedusaCartIdentifierSchema.parse({
606
619
  key: remote.id,
607
620
  region_id: remote.region_id,
@@ -659,6 +672,6 @@ export class MedusaCartProvider extends CartProvider {
659
672
  },
660
673
  } satisfies Cart;
661
674
 
662
- return result;
675
+ return this.factory.parseCart(this.context, result);
663
676
  }
664
677
  }