@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,330 @@
1
+ import type {
2
+ Cache,
3
+ RequestContext,
4
+ } from '@reactionary/core';
5
+ import {
6
+ CartIdentifierSchema,
7
+ CartSchema,
8
+ CategoryPaginatedResultSchema,
9
+ CategorySchema,
10
+ CheckoutSchema,
11
+ InventorySchema,
12
+ OrderSchema,
13
+ OrderSearchResultSchema,
14
+ PaymentMethodSchema,
15
+ PriceSchema,
16
+ ProductAssociationSchema,
17
+ ProductSchema,
18
+ ProductSearchResultSchema,
19
+ ProfileSchema,
20
+ ShippingMethodSchema,
21
+ } from '@reactionary/core';
22
+ import { MedusaCartCapability } from '../capabilities/cart.capability.js';
23
+ import { MedusaCategoryCapability } from '../capabilities/category.capability.js';
24
+ import { MedusaCheckoutCapability } from '../capabilities/checkout.capability.js';
25
+ import { MedusaIdentityCapability } from '../capabilities/identity.capability.js';
26
+ import { MedusaInventoryCapability } from '../capabilities/inventory.capability.js';
27
+ import { MedusaOrderSearchCapability } from '../capabilities/order-search.capability.js';
28
+ import { MedusaOrderCapability } from '../capabilities/order.capability.js';
29
+ import { MedusaPriceCapability } from '../capabilities/price.capability.js';
30
+ import { MedusaProductSearchCapability } from '../capabilities/product-search.capability.js';
31
+ import { MedusaProductRecommendationsCapability } from '../capabilities/product-recommendations.capability.js';
32
+ import { MedusaProductCapability } from '../capabilities/product.capability.js';
33
+ import { MedusaProductAssociationsCapability } from '../capabilities/product-associations.capability.js';
34
+ import { MedusaProfileCapability } from '../capabilities/profile.capability.js';
35
+ import {
36
+ MedusaCapabilitiesSchema,
37
+ type MedusaCapabilities,
38
+ } from '../schema/capabilities.schema.js';
39
+ import {
40
+ MedusaConfigurationSchema,
41
+ type MedusaConfiguration,
42
+ } from '../schema/configuration.schema.js';
43
+ import { MedusaAPI } from './client.js';
44
+ import {
45
+ MedusaCartFactory,
46
+ MedusaCategoryFactory,
47
+ MedusaCheckoutFactory,
48
+ MedusaInventoryFactory,
49
+ MedusaOrderFactory,
50
+ MedusaOrderSearchFactory,
51
+ MedusaPriceFactory,
52
+ MedusaProductAssociationsFactory,
53
+ MedusaProductFactory,
54
+ MedusaProductSearchFactory,
55
+ MedusaProfileFactory,
56
+ } from '../factories/index.js';
57
+ import {
58
+ type MedusaClientFromCapabilities,
59
+ resolveCapabilityWithFactory,
60
+ resolveDirectCapability,
61
+ } from './initialize.types.js';
62
+
63
+ export function withMedusaCapabilities<T extends MedusaCapabilities>(
64
+ configuration: MedusaConfiguration,
65
+ capabilities: T,
66
+ ) {
67
+ return (
68
+ cache: Cache,
69
+ context: RequestContext,
70
+ ): MedusaClientFromCapabilities<T> => {
71
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
+ const client: any = {};
73
+ const config = MedusaConfigurationSchema.parse(configuration);
74
+ const caps = MedusaCapabilitiesSchema.parse(capabilities);
75
+ const medusaApi = new MedusaAPI(config, context);
76
+
77
+ const buildCapabilityArgs = <TFactory,>(factory: TFactory) => ({
78
+ cache,
79
+ context,
80
+ config,
81
+ medusaApi,
82
+ factory,
83
+ });
84
+
85
+ if (caps.product?.enabled) {
86
+ client.product = resolveCapabilityWithFactory(
87
+ capabilities.product,
88
+ {
89
+ factory: new MedusaProductFactory(ProductSchema),
90
+ capability: (args) =>
91
+ new MedusaProductCapability(
92
+ args.config,
93
+ args.cache,
94
+ args.context,
95
+ args.medusaApi,
96
+ args.factory,
97
+ ),
98
+ },
99
+ buildCapabilityArgs,
100
+ );
101
+ }
102
+
103
+ if (caps.productSearch?.enabled) {
104
+ client.productSearch = resolveCapabilityWithFactory(
105
+ capabilities.productSearch,
106
+ {
107
+ factory: new MedusaProductSearchFactory(ProductSearchResultSchema),
108
+ capability: (args) =>
109
+ new MedusaProductSearchCapability(
110
+ args.config,
111
+ args.cache,
112
+ args.context,
113
+ args.medusaApi,
114
+ args.factory,
115
+ ),
116
+ },
117
+ buildCapabilityArgs,
118
+ );
119
+ }
120
+
121
+ if (caps.category?.enabled) {
122
+ client.category = resolveCapabilityWithFactory(
123
+ capabilities.category,
124
+ {
125
+ factory: new MedusaCategoryFactory(
126
+ CategorySchema,
127
+ CategoryPaginatedResultSchema,
128
+ ),
129
+ capability: (args) =>
130
+ new MedusaCategoryCapability(
131
+ args.config,
132
+ args.cache,
133
+ args.context,
134
+ args.medusaApi,
135
+ args.factory,
136
+ ),
137
+ },
138
+ buildCapabilityArgs,
139
+ );
140
+ }
141
+
142
+ if (caps.checkout?.enabled) {
143
+ client.checkout = resolveCapabilityWithFactory(
144
+ capabilities.checkout,
145
+ {
146
+ factory: new MedusaCheckoutFactory(
147
+ CheckoutSchema,
148
+ ShippingMethodSchema,
149
+ PaymentMethodSchema,
150
+ ),
151
+ capability: (args) =>
152
+ new MedusaCheckoutCapability(
153
+ args.config,
154
+ args.cache,
155
+ args.context,
156
+ args.medusaApi,
157
+ args.factory,
158
+ ),
159
+ },
160
+ buildCapabilityArgs,
161
+ );
162
+ }
163
+
164
+ if (caps.productRecommendations?.enabled) {
165
+ client.productRecommendations = resolveDirectCapability(
166
+ capabilities.productRecommendations,
167
+ (args) =>
168
+ new MedusaProductRecommendationsCapability(
169
+ args.config,
170
+ args.cache,
171
+ args.context,
172
+ args.medusaApi,
173
+ ),
174
+ {
175
+ cache,
176
+ context,
177
+ config,
178
+ medusaApi,
179
+ },
180
+ );
181
+ }
182
+
183
+ if (caps.cart?.enabled) {
184
+ client.cart = resolveCapabilityWithFactory(
185
+ capabilities.cart,
186
+ {
187
+ factory: new MedusaCartFactory(CartSchema, CartIdentifierSchema),
188
+ capability: (args) =>
189
+ new MedusaCartCapability(
190
+ args.config,
191
+ args.cache,
192
+ args.context,
193
+ args.medusaApi,
194
+ args.factory,
195
+ ),
196
+ },
197
+ buildCapabilityArgs,
198
+ );
199
+ }
200
+
201
+ if (caps.price?.enabled) {
202
+ client.price = resolveCapabilityWithFactory(
203
+ capabilities.price,
204
+ {
205
+ factory: new MedusaPriceFactory(PriceSchema),
206
+ capability: (args) =>
207
+ new MedusaPriceCapability(
208
+ args.config,
209
+ args.cache,
210
+ args.context,
211
+ args.medusaApi,
212
+ args.factory,
213
+ ),
214
+ },
215
+ buildCapabilityArgs,
216
+ );
217
+ }
218
+
219
+ if (caps.inventory?.enabled) {
220
+ client.inventory = resolveCapabilityWithFactory(
221
+ capabilities.inventory,
222
+ {
223
+ factory: new MedusaInventoryFactory(InventorySchema),
224
+ capability: (args) =>
225
+ new MedusaInventoryCapability(
226
+ args.config,
227
+ args.cache,
228
+ args.context,
229
+ args.medusaApi,
230
+ args.factory,
231
+ ),
232
+ },
233
+ buildCapabilityArgs,
234
+ );
235
+ }
236
+
237
+ if (caps.identity?.enabled) {
238
+ client.identity = resolveDirectCapability(
239
+ capabilities.identity,
240
+ (args) =>
241
+ new MedusaIdentityCapability(
242
+ args.config,
243
+ args.cache,
244
+ args.context,
245
+ args.medusaApi,
246
+ ),
247
+ {
248
+ cache,
249
+ context,
250
+ config,
251
+ medusaApi,
252
+ },
253
+ );
254
+ }
255
+
256
+ if (caps.profile?.enabled) {
257
+ client.profile = resolveCapabilityWithFactory(
258
+ capabilities.profile,
259
+ {
260
+ factory: new MedusaProfileFactory(ProfileSchema),
261
+ capability: (args) =>
262
+ new MedusaProfileCapability(
263
+ args.config,
264
+ args.cache,
265
+ args.context,
266
+ args.medusaApi,
267
+ args.factory,
268
+ ),
269
+ },
270
+ buildCapabilityArgs,
271
+ );
272
+ }
273
+
274
+ if (caps.order?.enabled) {
275
+ client.order = resolveCapabilityWithFactory(
276
+ capabilities.order,
277
+ {
278
+ factory: new MedusaOrderFactory(OrderSchema),
279
+ capability: (args) =>
280
+ new MedusaOrderCapability(
281
+ args.config,
282
+ args.cache,
283
+ args.context,
284
+ args.medusaApi,
285
+ args.factory,
286
+ ),
287
+ },
288
+ buildCapabilityArgs,
289
+ );
290
+ }
291
+
292
+ if (caps.orderSearch?.enabled) {
293
+ client.orderSearch = resolveCapabilityWithFactory(
294
+ capabilities.orderSearch,
295
+ {
296
+ factory: new MedusaOrderSearchFactory(OrderSearchResultSchema),
297
+ capability: (args) =>
298
+ new MedusaOrderSearchCapability(
299
+ args.config,
300
+ args.cache,
301
+ args.context,
302
+ args.medusaApi,
303
+ args.factory,
304
+ ),
305
+ },
306
+ buildCapabilityArgs,
307
+ );
308
+ }
309
+
310
+ if (caps.productAssociations?.enabled) {
311
+ client.productAssociations = resolveCapabilityWithFactory(
312
+ capabilities.productAssociations,
313
+ {
314
+ factory: new MedusaProductAssociationsFactory(ProductAssociationSchema),
315
+ capability: (args) =>
316
+ new MedusaProductAssociationsCapability(
317
+ args.config,
318
+ args.cache,
319
+ args.context,
320
+ args.medusaApi,
321
+ args.factory,
322
+ ),
323
+ },
324
+ buildCapabilityArgs,
325
+ );
326
+ }
327
+
328
+ return client;
329
+ };
330
+ }
@@ -0,0 +1,184 @@
1
+ import type {
2
+ CartFactory,
3
+ CategoryFactory,
4
+ CheckoutFactory,
5
+ ClientFromCapabilities,
6
+ InventoryFactory,
7
+ OrderFactory,
8
+ OrderSearchFactory,
9
+ PriceFactory,
10
+ ProductAssociationsFactory,
11
+ ProductFactory,
12
+ ProductRecommendationsCapability,
13
+ ProductSearchFactory,
14
+ ProfileFactory,
15
+ } from '@reactionary/core';
16
+ import type { MedusaCapabilities } from '../schema/capabilities.schema.js';
17
+ import type { MedusaCartFactory } from '../factories/cart/cart.factory.js';
18
+ import type { MedusaCategoryFactory } from '../factories/category/category.factory.js';
19
+ import type { MedusaCheckoutFactory } from '../factories/checkout/checkout.factory.js';
20
+ import type { MedusaInventoryFactory } from '../factories/inventory/inventory.factory.js';
21
+ import type { MedusaOrderFactory } from '../factories/order/order.factory.js';
22
+ import type { MedusaOrderSearchFactory } from '../factories/order-search/order-search.factory.js';
23
+ import type { MedusaPriceFactory } from '../factories/price/price.factory.js';
24
+ import type { MedusaProductAssociationsFactory } from '../factories/product-associations/product-associations.factory.js';
25
+ import type { MedusaProductFactory } from '../factories/product/product.factory.js';
26
+ import type { MedusaProductSearchFactory } from '../factories/product-search/product-search.factory.js';
27
+ import type { MedusaProfileFactory } from '../factories/profile/profile.factory.js';
28
+ import type { MedusaCartCapability } from '../capabilities/cart.capability.js';
29
+ import type { MedusaCategoryCapability } from '../capabilities/category.capability.js';
30
+ import type { MedusaCheckoutCapability } from '../capabilities/checkout.capability.js';
31
+ import type { MedusaInventoryCapability } from '../capabilities/inventory.capability.js';
32
+ import type { MedusaOrderCapability } from '../capabilities/order.capability.js';
33
+ import type { MedusaOrderSearchCapability } from '../capabilities/order-search.capability.js';
34
+ import type { MedusaPriceCapability } from '../capabilities/price.capability.js';
35
+ import type { MedusaProductAssociationsCapability } from '../capabilities/product-associations.capability.js';
36
+ import type { MedusaProductCapability } from '../capabilities/product.capability.js';
37
+ import type { MedusaProductSearchCapability } from '../capabilities/product-search.capability.js';
38
+ import type { MedusaProfileCapability } from '../capabilities/profile.capability.js';
39
+ import type { MedusaProductRecommendationsCapability } from '../capabilities/product-recommendations.capability.js';
40
+ import type { MedusaIdentityCapability } from '../capabilities/identity.capability.js';
41
+
42
+ type OverridableCapabilityKey =
43
+ | 'product'
44
+ | 'productSearch'
45
+ | 'cart'
46
+ | 'checkout'
47
+ | 'category'
48
+ | 'price'
49
+ | 'order'
50
+ | 'orderSearch'
51
+ | 'inventory'
52
+ | 'profile'
53
+ | 'productAssociations';
54
+
55
+ type EnabledCapability<TCapability> =
56
+ TCapability extends { enabled: true } ? true : false;
57
+
58
+ type NormalizeConfiguredCapabilities<T extends MedusaCapabilities> =
59
+ Omit<T, OverridableCapabilityKey | 'productRecommendations'> & {
60
+ [K in OverridableCapabilityKey]?: EnabledCapability<T[K]>;
61
+ } & {
62
+ productRecommendations?: EnabledCapability<T['productRecommendations']>;
63
+ identity?: EnabledCapability<T['identity']>;
64
+ };
65
+
66
+ type ExtractCapabilityFactory<TCapability, TContract, TDefaultFactory> =
67
+ TCapability extends { enabled: true; factory?: infer TFactory }
68
+ ? TFactory extends TContract
69
+ ? TFactory
70
+ : TDefaultFactory
71
+ : TDefaultFactory;
72
+
73
+ type ExtractCapabilityImplementation<TCapability, TDefaultCapability> =
74
+ TCapability extends { enabled: true; capability?: infer TCapabilityFactory }
75
+ ? TCapabilityFactory extends (...args: unknown[]) => infer TResolvedCapability
76
+ ? TResolvedCapability
77
+ : TDefaultCapability
78
+ : TDefaultCapability;
79
+
80
+ type FactoryContractMap = {
81
+ product: ProductFactory;
82
+ productSearch: ProductSearchFactory;
83
+ cart: CartFactory;
84
+ checkout: CheckoutFactory;
85
+ category: CategoryFactory;
86
+ price: PriceFactory;
87
+ order: OrderFactory;
88
+ orderSearch: OrderSearchFactory;
89
+ inventory: InventoryFactory;
90
+ profile: ProfileFactory;
91
+ productAssociations: ProductAssociationsFactory;
92
+ };
93
+
94
+ type DefaultFactoryMap = {
95
+ product: MedusaProductFactory;
96
+ productSearch: MedusaProductSearchFactory;
97
+ cart: MedusaCartFactory;
98
+ checkout: MedusaCheckoutFactory;
99
+ category: MedusaCategoryFactory;
100
+ price: MedusaPriceFactory;
101
+ order: MedusaOrderFactory;
102
+ orderSearch: MedusaOrderSearchFactory;
103
+ inventory: MedusaInventoryFactory;
104
+ profile: MedusaProfileFactory;
105
+ productAssociations: MedusaProductAssociationsFactory;
106
+ };
107
+
108
+ type ResolvedFactoryMap<T extends MedusaCapabilities> = {
109
+ [K in OverridableCapabilityKey]: ExtractCapabilityFactory<
110
+ T[K],
111
+ FactoryContractMap[K],
112
+ DefaultFactoryMap[K]
113
+ >;
114
+ };
115
+
116
+ type DefaultCapabilityMap<T extends MedusaCapabilities> = {
117
+ product: MedusaProductCapability<ResolvedFactoryMap<T>['product']>;
118
+ productSearch: MedusaProductSearchCapability<ResolvedFactoryMap<T>['productSearch']>;
119
+ cart: MedusaCartCapability<ResolvedFactoryMap<T>['cart']>;
120
+ checkout: MedusaCheckoutCapability<ResolvedFactoryMap<T>['checkout']>;
121
+ category: MedusaCategoryCapability<ResolvedFactoryMap<T>['category']>;
122
+ price: MedusaPriceCapability<ResolvedFactoryMap<T>['price']>;
123
+ order: MedusaOrderCapability<ResolvedFactoryMap<T>['order']>;
124
+ orderSearch: MedusaOrderSearchCapability<ResolvedFactoryMap<T>['orderSearch']>;
125
+ inventory: MedusaInventoryCapability<ResolvedFactoryMap<T>['inventory']>;
126
+ profile: MedusaProfileCapability<ResolvedFactoryMap<T>['profile']>;
127
+ productAssociations: MedusaProductAssociationsCapability<
128
+ ResolvedFactoryMap<T>['productAssociations']
129
+ >;
130
+ identity: MedusaIdentityCapability;
131
+ productRecommendations: MedusaProductRecommendationsCapability;
132
+ };
133
+
134
+ type CapabilityImplementationMap<T extends MedusaCapabilities> = {
135
+ [K in OverridableCapabilityKey | 'productRecommendations' | 'identity']: ExtractCapabilityImplementation<
136
+ T[K],
137
+ DefaultCapabilityMap<T>[K]
138
+ >;
139
+ };
140
+
141
+ type EnabledCapabilityOverrideMap<T extends MedusaCapabilities> = {
142
+ [K in OverridableCapabilityKey | 'productRecommendations' | 'identity' as T[K] extends {
143
+ enabled: true;
144
+ }
145
+ ? K
146
+ : never]: CapabilityImplementationMap<T>[K];
147
+ };
148
+
149
+ export type MedusaClientFromCapabilities<T extends MedusaCapabilities> = Omit<
150
+ ClientFromCapabilities<NormalizeConfiguredCapabilities<T>>,
151
+ OverridableCapabilityKey | 'productRecommendations' | 'identity'
152
+ > &
153
+ EnabledCapabilityOverrideMap<T>;
154
+
155
+ export function resolveCapabilityWithFactory<TFactory, TResolvedCapability, TCapabilityArgs>(
156
+ capability:
157
+ | {
158
+ factory?: TFactory;
159
+ capability?: (args: TCapabilityArgs) => TResolvedCapability;
160
+ }
161
+ | undefined,
162
+ defaults: {
163
+ factory: TFactory;
164
+ capability: (args: TCapabilityArgs) => TResolvedCapability;
165
+ },
166
+ buildCapabilityArgs: (factory: TFactory) => TCapabilityArgs,
167
+ ): TResolvedCapability {
168
+ const factory = capability?.factory ?? defaults.factory;
169
+ const capabilityFactory = capability?.capability ?? defaults.capability;
170
+ return capabilityFactory(buildCapabilityArgs(factory));
171
+ }
172
+
173
+ export function resolveDirectCapability<TResolvedCapability, TCapabilityArgs>(
174
+ capability:
175
+ | {
176
+ capability?: (args: TCapabilityArgs) => TResolvedCapability;
177
+ }
178
+ | undefined,
179
+ defaultCapability: (args: TCapabilityArgs) => TResolvedCapability,
180
+ args: TCapabilityArgs,
181
+ ): TResolvedCapability {
182
+ const capabilityFactory = capability?.capability ?? defaultCapability;
183
+ return capabilityFactory(args);
184
+ }
@@ -0,0 +1,34 @@
1
+ import type {
2
+ AnyCartIdentifierSchema,
3
+ AnyCartSchema,
4
+ CartFactory,
5
+ CartIdentifierSchema,
6
+ CartSchema,
7
+ RequestContext,
8
+ } from '@reactionary/core';
9
+ import type * as z from 'zod';
10
+
11
+ export class MedusaCartFactory<
12
+ TCartSchema extends AnyCartSchema = typeof CartSchema,
13
+ TCartIdentifierSchema extends AnyCartIdentifierSchema = typeof CartIdentifierSchema,
14
+ > implements CartFactory<TCartSchema, TCartIdentifierSchema>
15
+ {
16
+ public readonly cartSchema: TCartSchema;
17
+ public readonly cartIdentifierSchema: TCartIdentifierSchema;
18
+
19
+ constructor(cartSchema: TCartSchema, cartIdentifierSchema: TCartIdentifierSchema) {
20
+ this.cartSchema = cartSchema;
21
+ this.cartIdentifierSchema = cartIdentifierSchema;
22
+ }
23
+
24
+ public parseCart(_context: RequestContext, data: unknown): z.output<TCartSchema> {
25
+ return this.cartSchema.parse(data);
26
+ }
27
+
28
+ public parseCartIdentifier(
29
+ _context: RequestContext,
30
+ data: unknown,
31
+ ): z.output<TCartIdentifierSchema> {
32
+ return this.cartIdentifierSchema.parse(data);
33
+ }
34
+ }
@@ -0,0 +1,37 @@
1
+ import type {
2
+ AnyCategoryPaginatedResultSchema,
3
+ AnyCategorySchema,
4
+ CategoryFactory,
5
+ CategoryPaginatedResultSchema,
6
+ CategorySchema,
7
+ RequestContext,
8
+ } from '@reactionary/core';
9
+ import type * as z from 'zod';
10
+
11
+ export class MedusaCategoryFactory<
12
+ TCategorySchema extends AnyCategorySchema = typeof CategorySchema,
13
+ TCategoryPaginatedSchema extends AnyCategoryPaginatedResultSchema = typeof CategoryPaginatedResultSchema,
14
+ > implements CategoryFactory<TCategorySchema, TCategoryPaginatedSchema>
15
+ {
16
+ public readonly categorySchema: TCategorySchema;
17
+ public readonly categoryPaginatedResultSchema: TCategoryPaginatedSchema;
18
+
19
+ constructor(
20
+ categorySchema: TCategorySchema,
21
+ categoryPaginatedResultSchema: TCategoryPaginatedSchema,
22
+ ) {
23
+ this.categorySchema = categorySchema;
24
+ this.categoryPaginatedResultSchema = categoryPaginatedResultSchema;
25
+ }
26
+
27
+ public parseCategory(_context: RequestContext, data: unknown): z.output<TCategorySchema> {
28
+ return this.categorySchema.parse(data);
29
+ }
30
+
31
+ public parseCategoryPaginatedResult(
32
+ _context: RequestContext,
33
+ data: unknown,
34
+ ): z.output<TCategoryPaginatedSchema> {
35
+ return this.categoryPaginatedResultSchema.parse(data);
36
+ }
37
+ }
@@ -0,0 +1,50 @@
1
+ import type {
2
+ AnyCheckoutSchema,
3
+ AnyPaymentMethodSchema,
4
+ AnyShippingMethodSchema,
5
+ CheckoutFactory,
6
+ CheckoutSchema,
7
+ PaymentMethodSchema,
8
+ RequestContext,
9
+ ShippingMethodSchema,
10
+ } from '@reactionary/core';
11
+ import type * as z from 'zod';
12
+
13
+ export class MedusaCheckoutFactory<
14
+ TCheckoutSchema extends AnyCheckoutSchema = typeof CheckoutSchema,
15
+ TShippingMethodSchema extends AnyShippingMethodSchema = typeof ShippingMethodSchema,
16
+ TPaymentMethodSchema extends AnyPaymentMethodSchema = typeof PaymentMethodSchema,
17
+ > implements CheckoutFactory<TCheckoutSchema, TShippingMethodSchema, TPaymentMethodSchema>
18
+ {
19
+ public readonly checkoutSchema: TCheckoutSchema;
20
+ public readonly shippingMethodSchema: TShippingMethodSchema;
21
+ public readonly paymentMethodSchema: TPaymentMethodSchema;
22
+
23
+ constructor(
24
+ checkoutSchema: TCheckoutSchema,
25
+ shippingMethodSchema: TShippingMethodSchema,
26
+ paymentMethodSchema: TPaymentMethodSchema,
27
+ ) {
28
+ this.checkoutSchema = checkoutSchema;
29
+ this.shippingMethodSchema = shippingMethodSchema;
30
+ this.paymentMethodSchema = paymentMethodSchema;
31
+ }
32
+
33
+ public parseCheckout(_context: RequestContext, data: unknown): z.output<TCheckoutSchema> {
34
+ return this.checkoutSchema.parse(data);
35
+ }
36
+
37
+ public parseShippingMethod(
38
+ _context: RequestContext,
39
+ data: unknown,
40
+ ): z.output<TShippingMethodSchema> {
41
+ return this.shippingMethodSchema.parse(data);
42
+ }
43
+
44
+ public parsePaymentMethod(
45
+ _context: RequestContext,
46
+ data: unknown,
47
+ ): z.output<TPaymentMethodSchema> {
48
+ return this.paymentMethodSchema.parse(data);
49
+ }
50
+ }
@@ -0,0 +1,22 @@
1
+ import type {
2
+ AnyIdentitySchema,
3
+ IdentityFactory,
4
+ IdentitySchema,
5
+ RequestContext,
6
+ } from '@reactionary/core';
7
+ import type * as z from 'zod';
8
+
9
+ export class MedusaIdentityFactory<
10
+ TIdentitySchema extends AnyIdentitySchema = typeof IdentitySchema,
11
+ > implements IdentityFactory<TIdentitySchema>
12
+ {
13
+ public readonly identitySchema: TIdentitySchema;
14
+
15
+ constructor(identitySchema: TIdentitySchema) {
16
+ this.identitySchema = identitySchema;
17
+ }
18
+
19
+ public parseIdentity(_context: RequestContext, data: unknown): z.output<TIdentitySchema> {
20
+ return this.identitySchema.parse(data);
21
+ }
22
+ }
@@ -0,0 +1,12 @@
1
+ export * from './cart/cart.factory.js';
2
+ export * from './category/category.factory.js';
3
+ export * from './checkout/checkout.factory.js';
4
+ export * from './identity/identity.factory.js';
5
+ export * from './inventory/inventory.factory.js';
6
+ export * from './order/order.factory.js';
7
+ export * from './order-search/order-search.factory.js';
8
+ export * from './price/price.factory.js';
9
+ export * from './product/product.factory.js';
10
+ export * from './product-associations/product-associations.factory.js';
11
+ export * from './product-search/product-search.factory.js';
12
+ export * from './profile/profile.factory.js';
@@ -0,0 +1,25 @@
1
+ import type {
2
+ AnyInventorySchema,
3
+ InventoryFactory,
4
+ InventorySchema,
5
+ RequestContext,
6
+ } from '@reactionary/core';
7
+ import type * as z from 'zod';
8
+
9
+ export class MedusaInventoryFactory<
10
+ TInventorySchema extends AnyInventorySchema = typeof InventorySchema,
11
+ > implements InventoryFactory<TInventorySchema>
12
+ {
13
+ public readonly inventorySchema: TInventorySchema;
14
+
15
+ constructor(inventorySchema: TInventorySchema) {
16
+ this.inventorySchema = inventorySchema;
17
+ }
18
+
19
+ public parseInventory(
20
+ _context: RequestContext,
21
+ data: unknown,
22
+ ): z.output<TInventorySchema> {
23
+ return this.inventorySchema.parse(data);
24
+ }
25
+ }