@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
@@ -1,11 +1,16 @@
1
1
  import {
2
- ProductAssociationsProvider,
2
+ ProductAssociationsCapability,
3
3
  Reactionary,
4
4
  ImageSchema,
5
5
  ProductSearchResultItemVariantSchema,
6
6
  ProductVariantIdentifierSchema,
7
7
  success,
8
8
  } from '@reactionary/core';
9
+ import type {
10
+ ProductAssociationsFactory,
11
+ ProductAssociationsFactoryOutput,
12
+ ProductAssociationsFactoryWithOutput,
13
+ } from '@reactionary/core';
9
14
  import type {
10
15
  ProductVariantIdentifier,
11
16
  ProductIdentifier,
@@ -22,20 +27,26 @@ import type {
22
27
  import type { MedusaConfiguration } from '../schema/configuration.schema.js';
23
28
  import type { MedusaAPI } from '../core/client.js';
24
29
  import type { StoreProduct, StoreProductVariant } from '@medusajs/types';
30
+ import type { MedusaProductAssociationsFactory } from '../factories/product-associations/product-associations.factory.js';
25
31
 
26
- export class MedusaProductAssociationsProvider extends ProductAssociationsProvider {
32
+ export class MedusaProductAssociationsCapability<
33
+ TFactory extends ProductAssociationsFactory = MedusaProductAssociationsFactory,
34
+ > extends ProductAssociationsCapability<ProductAssociationsFactoryOutput<TFactory>> {
27
35
  protected config: MedusaConfiguration;
28
36
  protected medusa: MedusaAPI;
37
+ protected factory: ProductAssociationsFactoryWithOutput<TFactory>;
29
38
 
30
39
  constructor(
31
40
  config: MedusaConfiguration,
32
41
  cache: Cache,
33
42
  context: RequestContext,
34
- medusa: MedusaAPI
43
+ medusa: MedusaAPI,
44
+ factory: ProductAssociationsFactoryWithOutput<TFactory>,
35
45
  ) {
36
46
  super(cache, context);
37
47
  this.config = config;
38
48
  this.medusa = medusa;
49
+ this.factory = factory;
39
50
  }
40
51
 
41
52
  protected async fetchAssociatedProductsFor(productKey: ProductIdentifier, maxNumberOfAssociations: number, attributeName: string): Promise<ProductSearchResultItem[]> {
@@ -87,7 +98,7 @@ export class MedusaProductAssociationsProvider extends ProductAssociationsProvid
87
98
  })
88
99
  public override async getAccessories(
89
100
  query: ProductAssociationsGetAccessoriesQuery
90
- ): Promise<Result<ProductAssociation[]>> {
101
+ ): Promise<Result<ProductAssociationsFactoryOutput<TFactory>[]>> {
91
102
  const associatedProducts = await this.fetchAssociatedProductsFor(query.forProduct, query.numberOfAccessories || 4, 'reactionaryaccessories');
92
103
 
93
104
  const result: ProductAssociation[] = associatedProducts.map(product => ({
@@ -98,7 +109,7 @@ export class MedusaProductAssociationsProvider extends ProductAssociationsProvid
98
109
  product,
99
110
  } satisfies ProductAssociation));
100
111
 
101
- return success(result);
112
+ return success(result.map((x) => this.factory.parseAssociation(this.context, x)));
102
113
  }
103
114
 
104
115
  @Reactionary({
@@ -109,7 +120,7 @@ export class MedusaProductAssociationsProvider extends ProductAssociationsProvid
109
120
  })
110
121
  public override async getSpareparts(
111
122
  query: ProductAssociationsGetSparepartsQuery
112
- ): Promise<Result<ProductAssociation[]>> {
123
+ ): Promise<Result<ProductAssociationsFactoryOutput<TFactory>[]>> {
113
124
  const associatedProducts = await this.fetchAssociatedProductsFor(query.forProduct, query.numberOfSpareparts || 4, 'reactionaryspareparts');
114
125
 
115
126
  const result: ProductAssociation[] = associatedProducts.map(product => ({
@@ -120,7 +131,7 @@ export class MedusaProductAssociationsProvider extends ProductAssociationsProvid
120
131
  product,
121
132
  } satisfies ProductAssociation));
122
133
 
123
- return success(result);
134
+ return success(result.map((x) => this.factory.parseAssociation(this.context, x)));
124
135
  }
125
136
 
126
137
  @Reactionary({
@@ -131,7 +142,7 @@ export class MedusaProductAssociationsProvider extends ProductAssociationsProvid
131
142
  })
132
143
  public override async getReplacements(
133
144
  query: ProductAssociationsGetReplacementsQuery
134
- ): Promise<Result<ProductAssociation[]>> {
145
+ ): Promise<Result<ProductAssociationsFactoryOutput<TFactory>[]>> {
135
146
  const associatedProducts = await this.fetchAssociatedProductsFor(query.forProduct, query.numberOfReplacements || 4, 'reactionaryreplacements');
136
147
 
137
148
  const result: ProductAssociation[] = associatedProducts.map(product => ({
@@ -142,7 +153,7 @@ export class MedusaProductAssociationsProvider extends ProductAssociationsProvid
142
153
  product,
143
154
  } satisfies ProductAssociation));
144
155
 
145
- return success(result);
156
+ return success(result.map((x) => this.factory.parseAssociation(this.context, x)));
146
157
  }
147
158
 
148
159
  protected parseSingle(_body: StoreProduct): ProductSearchResultItem {
@@ -2,7 +2,7 @@ import type { StoreCollection, StoreProduct, StoreProductVariant } from '@medusa
2
2
  import {
3
3
  error,
4
4
  ImageSchema,
5
- ProductRecommendationsProvider,
5
+ ProductRecommendationsCapability,
6
6
  ProductSearchResultItemVariantSchema,
7
7
  ProductVariantIdentifierSchema,
8
8
  success,
@@ -23,7 +23,7 @@ import type { MedusaConfiguration } from '../schema/configuration.schema.js';
23
23
  const debug = createDebug('reactionary:medusa:product-recommendations');
24
24
 
25
25
  /**
26
- * MedusaProductRecommendationsProvider
26
+ * MedusaProductRecommendationsCapability
27
27
  *
28
28
  * Provides product recommendations using Medusa's collection-based product grouping.
29
29
  * Only overrides the getCollection method to fetch products from Medusa collections.
@@ -32,7 +32,7 @@ const debug = createDebug('reactionary:medusa:product-recommendations');
32
32
  * curated product recommendations. Collections are typically manually managed or
33
33
  * created through Medusa's admin panel or API.
34
34
  */
35
- export class MedusaProductRecommendationsProvider extends ProductRecommendationsProvider {
35
+ export class MedusaProductRecommendationsCapability extends ProductRecommendationsCapability {
36
36
  protected config: MedusaConfiguration;
37
37
  protected medusaApi: MedusaAPI;
38
38
 
@@ -1,5 +1,5 @@
1
1
  import {
2
- ProductSearchProvider,
2
+ ProductSearchCapability,
3
3
  ProductSearchQueryByTermSchema,
4
4
  type Cache,
5
5
  type RequestContext,
@@ -17,6 +17,9 @@ import {
17
17
  type ProductSearchResultItemVariant,
18
18
  type FacetIdentifier,
19
19
  type FacetValueIdentifier,
20
+ type ProductSearchFactory,
21
+ type ProductSearchFactoryOutput,
22
+ type ProductSearchFactoryWithOutput,
20
23
  type ProductSearchResultFacet,
21
24
  type ProductSearchResultFacetValue,
22
25
  Reactionary,
@@ -37,20 +40,26 @@ import type {
37
40
  StoreProductListResponse,
38
41
  StoreProductVariant,
39
42
  } from '@medusajs/types';
43
+ import type { MedusaProductSearchFactory } from '../factories/product-search/product-search.factory.js';
40
44
 
41
45
  const debug = createDebug('reactionary:medusa:search');
42
46
 
43
- export class MedusaSearchProvider extends ProductSearchProvider {
47
+ export class MedusaProductSearchCapability<
48
+ TFactory extends ProductSearchFactory = MedusaProductSearchFactory,
49
+ > extends ProductSearchCapability<ProductSearchFactoryOutput<TFactory>> {
44
50
  protected config: MedusaConfiguration;
51
+ protected factory: ProductSearchFactoryWithOutput<TFactory>;
45
52
 
46
53
  constructor(
47
54
  config: MedusaConfiguration,
48
55
  cache: Cache,
49
56
  context: RequestContext,
50
- public medusaApi: MedusaAPI
57
+ public medusaApi: MedusaAPI,
58
+ factory: ProductSearchFactoryWithOutput<TFactory>,
51
59
  ) {
52
60
  super(cache, context);
53
61
  this.config = config;
62
+ this.factory = factory;
54
63
  }
55
64
 
56
65
  protected async resolveCategoryIdByExternalId(
@@ -114,7 +123,7 @@ export class MedusaSearchProvider extends ProductSearchProvider {
114
123
  })
115
124
  public override async queryByTerm(
116
125
  payload: ProductSearchQueryByTerm
117
- ): Promise<Result<ProductSearchResult>> {
126
+ ): Promise<Result<ProductSearchFactoryOutput<TFactory>>> {
118
127
  const client = await this.medusaApi.getClient();
119
128
 
120
129
  let categoryIdToFind: string | null = null;
@@ -141,22 +150,20 @@ export class MedusaSearchProvider extends ProductSearchProvider {
141
150
 
142
151
  const response = await client.store.product.list(this.queryByTermPayload(payload, categoryIdToFind));
143
152
 
144
- const result = this.parsePaginatedResult(response) as ProductSearchResult;
153
+ const result = this.parsePaginatedResult(response, payload);
145
154
  if (debug.enabled) {
146
155
  debug(
147
156
  `Search for term "${payload.search.term}" returned ${response.products.length} products (page ${payload.search.paginationOptions.pageNumber} of ${result.totalPages})`
148
157
  );
149
158
  }
150
159
 
151
- // Set result metadata
152
- result.identifier = {
153
- ...payload.search,
154
- };
155
-
156
- return success(result);
160
+ return success(this.factory.parseSearchResult(this.context, result, payload));
157
161
  }
158
162
 
159
- protected parsePaginatedResult(remote: StoreProductListResponse) {
163
+ protected parsePaginatedResult(
164
+ remote: StoreProductListResponse,
165
+ query: ProductSearchQueryByTerm,
166
+ ) {
160
167
  // Parse facets
161
168
  // no facets available from Medusa at the moment
162
169
 
@@ -166,13 +173,7 @@ export class MedusaSearchProvider extends ProductSearchProvider {
166
173
 
167
174
  const result = {
168
175
  identifier: {
169
- facets: [],
170
- filters: [],
171
- paginationOptions: {
172
- pageNumber: 1,
173
- pageSize: 0,
174
- },
175
- term: '',
176
+ ...query.search,
176
177
  },
177
178
  pageNumber: (Math.ceil(remote.offset / remote.limit) || 0) + 1,
178
179
  pageSize: remote.limit,
@@ -237,17 +238,4 @@ export class MedusaSearchProvider extends ProductSearchProvider {
237
238
  return success(facetValueIdentifier);
238
239
  }
239
240
 
240
- protected override parseFacetValue(
241
- facetValueIdentifier: FacetValueIdentifier,
242
- label: string,
243
- count: number
244
- ): ProductSearchResultFacetValue {
245
- throw new Error('Method not implemented.');
246
- }
247
- protected override parseFacet(
248
- facetIdentifier: FacetIdentifier,
249
- facetValue: unknown
250
- ): ProductSearchResultFacet {
251
- throw new Error('Method not implemented.');
252
- }
253
241
  }
@@ -1,8 +1,28 @@
1
- import type { Cache, Image, NotFoundError, Product, ProductAttribute, ProductAttributeIdentifier, ProductAttributeValueIdentifier, ProductOptionIdentifier, ProductOptionValueIdentifier, ProductQueryById, ProductQueryBySKU, ProductQueryBySlug, ProductVariant, ProductVariantOption, RequestContext, Result } from '@reactionary/core';
1
+ import type {
2
+ Cache,
3
+ Image,
4
+ NotFoundError,
5
+ Product,
6
+ ProductAttribute,
7
+ ProductAttributeIdentifier,
8
+ ProductAttributeValueIdentifier,
9
+ ProductFactory,
10
+ ProductFactoryOutput,
11
+ ProductFactoryWithOutput,
12
+ ProductOptionIdentifier,
13
+ ProductOptionValueIdentifier,
14
+ ProductQueryById,
15
+ ProductQueryBySKU,
16
+ ProductQueryBySlug,
17
+ ProductVariant,
18
+ ProductVariantOption,
19
+ RequestContext,
20
+ Result,
21
+ } from '@reactionary/core';
2
22
  import {
3
23
  CategoryIdentifierSchema,
4
24
  ProductIdentifierSchema,
5
- ProductProvider,
25
+ ProductCapability,
6
26
  ProductQueryByIdSchema,
7
27
  ProductQueryBySKUSchema,
8
28
  ProductQueryBySlugSchema,
@@ -16,16 +36,27 @@ import type { MedusaAPI } from '../core/client.js';
16
36
  import type { MedusaConfiguration } from '../schema/configuration.schema.js';
17
37
 
18
38
  import type { StoreProduct, StoreProductImage, StoreProductVariant } from '@medusajs/types';
39
+ import type { MedusaProductFactory } from '../factories/product/product.factory.js';
19
40
 
20
41
  const debug = createDebug('reactionary:medusa:product');
21
42
 
22
- export class MedusaProductProvider extends ProductProvider {
43
+ export class MedusaProductCapability<
44
+ TFactory extends ProductFactory = MedusaProductFactory,
45
+ > extends ProductCapability<ProductFactoryOutput<TFactory>> {
23
46
  protected config: MedusaConfiguration;
24
- protected alwaysIncludedFields = ["+metadata.*","+categories.metadata.*","+external_id"]
25
-
26
- constructor(config: MedusaConfiguration, cache: Cache, context: RequestContext, public medusaApi: MedusaAPI) {
47
+ protected alwaysIncludedFields = ["+metadata.*","+categories.metadata.*","+external_id"];
48
+ protected factory: ProductFactoryWithOutput<TFactory>;
49
+
50
+ constructor(
51
+ config: MedusaConfiguration,
52
+ cache: Cache,
53
+ context: RequestContext,
54
+ public medusaApi: MedusaAPI,
55
+ factory: ProductFactoryWithOutput<TFactory>,
56
+ ) {
27
57
  super(cache, context);
28
58
  this.config = config;
59
+ this.factory = factory;
29
60
  }
30
61
 
31
62
  protected getByIdPayload(payload: ProductQueryById) {
@@ -45,7 +76,9 @@ export class MedusaProductProvider extends ProductProvider {
45
76
  currencyDependentCaching: false,
46
77
  localeDependentCaching: true
47
78
  })
48
- public override async getById(payload: ProductQueryById): Promise<Result<Product>> {
79
+ public override async getById(
80
+ payload: ProductQueryById,
81
+ ): Promise<Result<ProductFactoryOutput<TFactory>>> {
49
82
  const client = await this.medusaApi.getClient();
50
83
  if (debug.enabled) {
51
84
  debug(`Fetching product by ID: ${payload.identifier.key}`);
@@ -81,7 +114,9 @@ export class MedusaProductProvider extends ProductProvider {
81
114
  currencyDependentCaching: false,
82
115
  localeDependentCaching: true
83
116
  })
84
- public override async getBySlug(payload: ProductQueryBySlug): Promise<Result<Product, NotFoundError>> {
117
+ public override async getBySlug(
118
+ payload: ProductQueryBySlug,
119
+ ): Promise<Result<ProductFactoryOutput<TFactory>, NotFoundError>> {
85
120
  const client = await this.medusaApi.getClient();
86
121
  if (debug.enabled) {
87
122
  debug(`Fetching product by slug: ${payload.slug}`);
@@ -111,7 +146,9 @@ export class MedusaProductProvider extends ProductProvider {
111
146
  currencyDependentCaching: false,
112
147
  localeDependentCaching: true
113
148
  })
114
- public override async getBySKU(payload: ProductQueryBySKU): Promise<Result<Product>> {
149
+ public override async getBySKU(
150
+ payload: ProductQueryBySKU,
151
+ ): Promise<Result<ProductFactoryOutput<TFactory>>> {
115
152
  if (debug.enabled) {
116
153
  debug(`Fetching product by SKU: ${Array.isArray(payload) ? payload.join(', ') : payload}`);
117
154
  }
@@ -129,7 +166,7 @@ export class MedusaProductProvider extends ProductProvider {
129
166
  return success(this.parseSingle(product));
130
167
  }
131
168
 
132
- protected parseSingle(_body: StoreProduct): Product {
169
+ protected parseSingle(_body: StoreProduct): ProductFactoryOutput<TFactory> {
133
170
  const identifier = ProductIdentifierSchema.parse({ key: _body.external_id || _body.id });
134
171
  const name = _body.title;
135
172
  const slug = _body.handle;
@@ -171,7 +208,7 @@ export class MedusaProductProvider extends ProductProvider {
171
208
  variants: otherVariants,
172
209
  } satisfies Product;
173
210
 
174
- return result;
211
+ return this.factory.parseProduct(this.context, result);
175
212
  }
176
213
 
177
214
  protected parseVariant(variant: StoreProductVariant, product: StoreProduct) {
@@ -275,4 +312,3 @@ export class MedusaProductProvider extends ProductProvider {
275
312
  return sharedAttributes;
276
313
  }
277
314
  }
278
-
@@ -13,7 +13,7 @@ import {
13
13
  type Cache,
14
14
  type Result,
15
15
  type NotFoundError,
16
- ProfileProvider,
16
+ ProfileCapability,
17
17
  Reactionary,
18
18
  ProfileSchema,
19
19
  ProfileMutationUpdateSchema,
@@ -24,6 +24,9 @@ import {
24
24
  ProfileMutationSetBillingAddressSchema,
25
25
  success,
26
26
  type Address,
27
+ type ProfileFactory,
28
+ type ProfileFactoryOutput,
29
+ type ProfileFactoryWithOutput,
27
30
  ProfileQueryByIdSchema,
28
31
  error
29
32
  } from '@reactionary/core';
@@ -31,10 +34,11 @@ import type { MedusaConfiguration } from '../schema/configuration.schema.js';
31
34
  import type { MedusaAPI } from '../core/client.js';
32
35
  import createDebug from 'debug';
33
36
  import type { StoreCreateCustomerAddress, StoreCustomer, StoreCustomerAddress } from '@medusajs/types';
37
+ import type { MedusaProfileFactory } from '../factories/profile/profile.factory.js';
34
38
 
35
39
  const debug = createDebug('reactionary:medusa:profile');
36
40
  /**
37
- * Medusa Profile Provider
41
+ * Medusa Profile Capability
38
42
  *
39
43
  * Implements profile management using Medusa's customer APIs.
40
44
  *
@@ -43,26 +47,33 @@ const debug = createDebug('reactionary:medusa:profile');
43
47
  * - handle guest user scenarios (if applicable).
44
48
  * - improve error handling and edge cases.
45
49
  */
46
- export class MedusaProfileProvider extends ProfileProvider {
50
+ export class MedusaProfileCapability<
51
+ TFactory extends ProfileFactory = MedusaProfileFactory,
52
+ > extends ProfileCapability<ProfileFactoryOutput<TFactory>> {
47
53
  protected config: MedusaConfiguration;
48
54
  protected includedFields = ['+metadata.*'];
55
+ protected factory: ProfileFactoryWithOutput<TFactory>;
49
56
 
50
57
  constructor(
51
58
  config: MedusaConfiguration,
52
59
  cache: Cache,
53
60
  context: RequestContext,
54
- public medusaApi: MedusaAPI
61
+ public medusaApi: MedusaAPI,
62
+ factory: ProfileFactoryWithOutput<TFactory>,
55
63
  ) {
56
64
  super(cache, context);
57
65
 
58
66
  this.config = config;
67
+ this.factory = factory;
59
68
  }
60
69
 
61
70
  @Reactionary({
62
71
  inputSchema: ProfileQueryByIdSchema,
63
72
  outputSchema: ProfileSchema,
64
73
  })
65
- public async getById(payload: ProfileQueryById): Promise<Result<Profile, NotFoundError>> {
74
+ public async getById(
75
+ payload: ProfileQueryById,
76
+ ): Promise<Result<ProfileFactoryOutput<TFactory>, NotFoundError>> {
66
77
  debug('getById', payload);
67
78
 
68
79
  const client = await this.medusaApi.getClient();
@@ -91,7 +102,9 @@ export class MedusaProfileProvider extends ProfileProvider {
91
102
  inputSchema: ProfileMutationUpdateSchema,
92
103
  outputSchema: ProfileSchema,
93
104
  })
94
- public async update(payload: ProfileMutationUpdate): Promise<Result<Profile, NotFoundError>> {
105
+ public async update(
106
+ payload: ProfileMutationUpdate,
107
+ ): Promise<Result<ProfileFactoryOutput<TFactory>, NotFoundError>> {
95
108
  debug('update', payload);
96
109
 
97
110
  const client = await this.medusaApi.getClient();
@@ -120,7 +133,9 @@ export class MedusaProfileProvider extends ProfileProvider {
120
133
  inputSchema: ProfileMutationAddShippingAddressSchema,
121
134
  outputSchema: ProfileSchema,
122
135
  })
123
- public async addShippingAddress(payload: ProfileMutationAddShippingAddress): Promise<Result<Profile, NotFoundError>> {
136
+ public async addShippingAddress(
137
+ payload: ProfileMutationAddShippingAddress,
138
+ ): Promise<Result<ProfileFactoryOutput<TFactory>, NotFoundError>> {
124
139
  debug('addShippingAddress', payload);
125
140
 
126
141
  const client = await this.medusaApi.getClient();
@@ -162,7 +177,9 @@ export class MedusaProfileProvider extends ProfileProvider {
162
177
  inputSchema: ProfileMutationUpdateShippingAddressSchema,
163
178
  outputSchema: ProfileSchema,
164
179
  })
165
- public async updateShippingAddress(payload: ProfileMutationUpdateShippingAddress): Promise<Result<Profile, NotFoundError>> {
180
+ public async updateShippingAddress(
181
+ payload: ProfileMutationUpdateShippingAddress,
182
+ ): Promise<Result<ProfileFactoryOutput<TFactory>, NotFoundError>> {
166
183
  debug('updateShippingAddress', payload);
167
184
 
168
185
  const client = await this.medusaApi.getClient();
@@ -203,7 +220,9 @@ export class MedusaProfileProvider extends ProfileProvider {
203
220
  inputSchema: ProfileMutationRemoveShippingAddressSchema,
204
221
  outputSchema: ProfileSchema,
205
222
  })
206
- public async removeShippingAddress(payload: ProfileMutationRemoveShippingAddress): Promise<Result<Profile, NotFoundError>> {
223
+ public async removeShippingAddress(
224
+ payload: ProfileMutationRemoveShippingAddress,
225
+ ): Promise<Result<ProfileFactoryOutput<TFactory>, NotFoundError>> {
207
226
  debug('removeShippingAddress', payload);
208
227
  const client = await this.medusaApi.getClient();
209
228
 
@@ -247,7 +266,9 @@ export class MedusaProfileProvider extends ProfileProvider {
247
266
  inputSchema: ProfileMutationMakeShippingAddressDefaultSchema,
248
267
  outputSchema: ProfileSchema,
249
268
  })
250
- public async makeShippingAddressDefault(payload: ProfileMutationMakeShippingAddressDefault): Promise<Result<Profile, NotFoundError>> {
269
+ public async makeShippingAddressDefault(
270
+ payload: ProfileMutationMakeShippingAddressDefault,
271
+ ): Promise<Result<ProfileFactoryOutput<TFactory>, NotFoundError>> {
251
272
  debug('makeShippingAddressDefault', payload);
252
273
 
253
274
  const client = await this.medusaApi.getClient();
@@ -289,7 +310,9 @@ export class MedusaProfileProvider extends ProfileProvider {
289
310
  inputSchema: ProfileMutationSetBillingAddressSchema,
290
311
  outputSchema: ProfileSchema,
291
312
  })
292
- public async setBillingAddress(payload: ProfileMutationSetBillingAddress): Promise<Result<Profile, NotFoundError>> {
313
+ public async setBillingAddress(
314
+ payload: ProfileMutationSetBillingAddress,
315
+ ): Promise<Result<ProfileFactoryOutput<TFactory>, NotFoundError>> {
293
316
  debug('setBillingAddress', payload);
294
317
 
295
318
 
@@ -361,7 +384,7 @@ export class MedusaProfileProvider extends ProfileProvider {
361
384
  }
362
385
  }
363
386
 
364
- protected parseSingle(customer: StoreCustomer): Profile {
387
+ protected parseSingle(customer: StoreCustomer): ProfileFactoryOutput<TFactory> {
365
388
  const email = customer.email;
366
389
  const emailVerified = customer.metadata?.['email_verified'] === 'true';
367
390
 
@@ -386,7 +409,7 @@ export class MedusaProfileProvider extends ProfileProvider {
386
409
 
387
410
  alternateShippingAddresses.push(...addresses.filter(x => ! (x.is_default_billing || x.is_default_shipping)).map( addr => this.parseAddress(addr)));
388
411
 
389
- return {
412
+ const result = {
390
413
  identifier: {
391
414
  userId: customer.id,
392
415
  },
@@ -400,6 +423,7 @@ export class MedusaProfileProvider extends ProfileProvider {
400
423
  createdAt: new Date(customer.created_at || '').toISOString(),
401
424
  updatedAt: new Date(customer.updated_at || '').toISOString()
402
425
  } satisfies Profile;
426
+ return this.factory.parseProfile(this.context, result);
403
427
  }
404
428
 
405
429