@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,5 +1,5 @@
1
1
  import { describe, it, expect, beforeEach, vi, assert } from 'vitest';
2
- import { MedusaPriceProvider } from '../providers/price.provider.js';
2
+ import { MedusaPriceCapability } from '../capabilities/price.capability.js';
3
3
  import type { MedusaConfiguration } from '../schema/configuration.schema.js';
4
4
  import {
5
5
  PriceSchema,
@@ -9,6 +9,7 @@ import {
9
9
  } from '@reactionary/core';
10
10
  import { getMedusaTestConfiguration } from './test-utils.js';
11
11
  import { MedusaAPI } from '../core/client.js';
12
+ import { MedusaPriceFactory } from '../factories/price/price.factory.js';
12
13
 
13
14
  const testData = {
14
15
  skuWithoutTiers: '8712581327934',
@@ -17,7 +18,7 @@ const testData = {
17
18
 
18
19
  // FIXME: Currently broken in terms of actually looking up anything...
19
20
  describe('Medusa Price Provider', () => {
20
- let provider: MedusaPriceProvider;
21
+ let provider: MedusaPriceCapability;
21
22
  let reqCtx: RequestContext;
22
23
 
23
24
  beforeEach(() => {
@@ -25,7 +26,13 @@ describe('Medusa Price Provider', () => {
25
26
  const config = getMedusaTestConfiguration();
26
27
  const client = new MedusaAPI(config, reqCtx);
27
28
 
28
- provider = new MedusaPriceProvider(config, new NoOpCache(), reqCtx, client);
29
+ provider = new MedusaPriceCapability(
30
+ config,
31
+ new NoOpCache(),
32
+ reqCtx,
33
+ client,
34
+ new MedusaPriceFactory(PriceSchema),
35
+ );
29
36
  });
30
37
 
31
38
  it('should be able to get prices for a product without tiers', async () => {
@@ -5,10 +5,11 @@ import {
5
5
  ProductSchema,
6
6
  createInitialRequestContext,
7
7
  } from '@reactionary/core';
8
- import { MedusaProductProvider } from '../providers/product.provider.js';
8
+ import { MedusaProductCapability } from '../capabilities/product.capability.js';
9
9
  import { getMedusaTestConfiguration } from './test-utils.js';
10
10
  import { describe, expect, it, beforeAll, beforeEach, assert } from 'vitest';
11
11
  import { MedusaAPI } from '../index.js';
12
+ import { MedusaProductFactory } from '../factories/product/product.factory.js';
12
13
 
13
14
  const testData = {
14
15
  product: {
@@ -23,17 +24,18 @@ const testData = {
23
24
  };
24
25
 
25
26
  describe('Medusa Product Provider', () => {
26
- let provider: MedusaProductProvider;
27
+ let provider: MedusaProductCapability;
27
28
  let reqCtx: RequestContext;
28
29
 
29
30
  beforeEach(() => {
30
31
  reqCtx = createInitialRequestContext();
31
32
  const client = new MedusaAPI(getMedusaTestConfiguration(), reqCtx);
32
- provider = new MedusaProductProvider(
33
+ provider = new MedusaProductCapability(
33
34
  getMedusaTestConfiguration(),
34
35
  new NoOpCache(),
35
36
  reqCtx,
36
- client
37
+ client,
38
+ new MedusaProductFactory(ProductSchema),
37
39
  );
38
40
  });
39
41
 
@@ -1,10 +1,21 @@
1
1
  import 'dotenv/config';
2
- import { createInitialRequestContext, NoOpCache, ProductSearchQueryByTermSchema, ProductSearchResultItemSchema, type ProductSearchQueryCreateNavigationFilter } from '@reactionary/core';
2
+ import {
3
+ CategoryPaginatedResultSchema,
4
+ CategorySchema,
5
+ createInitialRequestContext,
6
+ NoOpCache,
7
+ ProductSearchQueryByTermSchema,
8
+ ProductSearchResultItemSchema,
9
+ ProductSearchResultSchema,
10
+ type ProductSearchQueryCreateNavigationFilter,
11
+ } from '@reactionary/core';
3
12
  import { assert, describe, expect, it } from 'vitest';
4
- import { MedusaSearchProvider } from '../providers/product-search.provider.js';
13
+ import { MedusaProductSearchCapability } from '../capabilities/product-search.capability.js';
5
14
  import { getMedusaTestConfiguration } from './test-utils.js';
6
15
  import { MedusaAPI } from '../index.js';
7
- import { MedusaCategoryProvider } from '../providers/category.provider.js';
16
+ import { MedusaCategoryCapability } from '../capabilities/category.capability.js';
17
+ import { MedusaCategoryFactory } from '../factories/category/category.factory.js';
18
+ import { MedusaProductSearchFactory } from '../factories/product-search/product-search.factory.js';
8
19
 
9
20
  const testData = {
10
21
  searchTerm: 'printer',
@@ -12,18 +23,20 @@ const testData = {
12
23
  describe('Medusa Search Provider', () => {
13
24
  const reqCtx = createInitialRequestContext();
14
25
  const client = new MedusaAPI(getMedusaTestConfiguration(), reqCtx);
15
- const provider = new MedusaSearchProvider(
26
+ const provider = new MedusaProductSearchCapability(
16
27
  getMedusaTestConfiguration(),
17
28
  new NoOpCache(),
18
29
  reqCtx,
19
- client
30
+ client,
31
+ new MedusaProductSearchFactory(ProductSearchResultSchema),
20
32
  );
21
33
 
22
- const categoryProvider = new MedusaCategoryProvider(
34
+ const categoryProvider = new MedusaCategoryCapability(
23
35
  getMedusaTestConfiguration(),
24
36
  new NoOpCache(),
25
37
  reqCtx,
26
- client
38
+ client,
39
+ new MedusaCategoryFactory(CategorySchema, CategoryPaginatedResultSchema),
27
40
  );
28
41
 
29
42
  it('should be able to get a result by term', async () => {
@@ -75,7 +75,7 @@ export function parseMedusaItemPrice(
75
75
  }
76
76
 
77
77
  /**
78
- * Handles provider errors with consistent formatting
78
+ * Handles capability implementation errors with consistent formatting
79
79
  */
80
80
  export function handleProviderError(action: string, error: unknown): never {
81
81
  if (debug.enabled) {
@@ -0,0 +1,24 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "module": "nodenext",
5
+ "moduleResolution": "nodenext",
6
+ "forceConsistentCasingInFileNames": true,
7
+ "strict": true,
8
+ "importHelpers": true,
9
+ "noImplicitOverride": true,
10
+ "noImplicitReturns": true,
11
+ "noFallthroughCasesInSwitch": true,
12
+ "noPropertyAccessFromIndexSignature": true
13
+ },
14
+ "files": [],
15
+ "include": [],
16
+ "references": [
17
+ {
18
+ "path": "./tsconfig.lib.json"
19
+ },
20
+ {
21
+ "path": "./tsconfig.spec.json"
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "../../dist/out-tsc",
5
+ "declaration": true,
6
+ "types": ["node"]
7
+ },
8
+ "include": ["src/**/*.ts"],
9
+ "exclude": [
10
+ "vite.config.ts",
11
+ "vite.config.mts",
12
+ "vitest.config.ts",
13
+ "vitest.config.mts",
14
+ "src/**/*.test.ts",
15
+ "src/**/*.spec.ts",
16
+ "src/**/*.test.tsx",
17
+ "src/**/*.spec.tsx",
18
+ "src/**/*.test.js",
19
+ "src/**/*.spec.js",
20
+ "src/**/*.test.jsx",
21
+ "src/**/*.spec.jsx"
22
+ ]
23
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "../../dist/out-tsc",
5
+ "types": [
6
+ "vitest/globals",
7
+ "vitest/importMeta",
8
+ "vite/client",
9
+ "node",
10
+ "vitest"
11
+ ]
12
+ },
13
+ "include": [
14
+ "vite.config.ts",
15
+ "vite.config.mts",
16
+ "vitest.config.ts",
17
+ "vitest.config.mts",
18
+ "src/**/*.test.ts",
19
+ "src/**/*.spec.ts",
20
+ "src/**/*.test.tsx",
21
+ "src/**/*.spec.tsx",
22
+ "src/**/*.test.js",
23
+ "src/**/*.spec.js",
24
+ "src/**/*.test.jsx",
25
+ "src/**/*.spec.jsx",
26
+ "src/**/*.d.ts"
27
+ ]
28
+ }
@@ -0,0 +1,26 @@
1
+ /// <reference types='vitest' />
2
+ import { defineConfig } from 'vite';
3
+ import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
4
+ import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
5
+
6
+ export default defineConfig(() => ({
7
+ root: import.meta.dirname,
8
+ cacheDir: '../../node_modules/.vite/packages/medusa',
9
+ plugins: [nxViteTsPaths(), nxCopyAssetsPlugin(['*.md'])],
10
+ // Uncomment this if you are using workers.
11
+ // worker: {
12
+ // plugins: () => [ nxViteTsPaths() ],
13
+ // },
14
+ test: {
15
+ name: 'medusa',
16
+ watch: false,
17
+ globals: true,
18
+ environment: 'node',
19
+ include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
20
+ reporters: ['default'],
21
+ coverage: {
22
+ reportsDirectory: '../../coverage/packages/medusa',
23
+ provider: 'v8' as const,
24
+ },
25
+ },
26
+ }));
@@ -0,0 +1,21 @@
1
+ import { defineConfig } from 'vitest/config';
2
+ import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
3
+ import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin';
4
+
5
+ export default defineConfig(() => ({
6
+ root: __dirname,
7
+ cacheDir: '../../node_modules/.vite/packages/medusa',
8
+ plugins: [nxViteTsPaths(), nxCopyAssetsPlugin(['*.md'])],
9
+ test: {
10
+ name: 'medusa',
11
+ watch: false,
12
+ globals: true,
13
+ environment: 'node',
14
+ include: ['{src,tests}/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
15
+ reporters: ['default'],
16
+ coverage: {
17
+ reportsDirectory: '../../coverage/packages/medusa',
18
+ provider: 'v8' as const,
19
+ },
20
+ },
21
+ }));
@@ -0,0 +1,11 @@
1
+ # meilisearch
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build meilisearch` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test meilisearch` to execute the unit tests via [Vitest](https://vitest.dev/).
@@ -0,0 +1,23 @@
1
+ import baseConfig from '../../eslint.config.mjs';
2
+
3
+ export default [
4
+ ...baseConfig,
5
+ {
6
+ files: ['**/*.json'],
7
+ rules: {
8
+ '@nx/dependency-checks': [
9
+ 'error',
10
+ {
11
+ ignoredFiles: [
12
+ '{projectRoot}/eslint.config.{js,cjs,mjs,ts,cts,mts}',
13
+ '{projectRoot}/esbuild.config.{js,ts,mjs,mts}',
14
+ '{projectRoot}/vite.config.{js,ts,mjs,mts}',
15
+ ],
16
+ },
17
+ ],
18
+ },
19
+ languageOptions: {
20
+ parser: await import('jsonc-eslint-parser'),
21
+ },
22
+ },
23
+ ];
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "@reactionary/meilisearch",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "main": "./index.js",
6
+ "types": "./src/index.d.ts",
7
+ "dependencies": {
8
+ "vitest": "^4.0.9",
9
+ "@nx/vite": "22.4.5",
10
+ "@reactionary/core": "0.0.1",
11
+ "zod": "4.1.9",
12
+ "meilisearch": "^0.55.0"
13
+ },
14
+ "sideEffects": false
15
+ }
@@ -1,14 +1,13 @@
1
1
  {
2
2
  "name": "meilisearch",
3
3
  "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
- "sourceRoot": "providers/meilisearch/src",
4
+ "sourceRoot": "packages/meilisearch/src",
5
5
  "projectType": "library",
6
6
  "release": {
7
7
  "version": {
8
+ "manifestRootsToUpdate": ["dist/{projectRoot}"],
8
9
  "currentVersionResolver": "git-tag",
9
- "fallbackCurrentVersionResolver": "disk",
10
- "preserveLocalDependencyProtocols": false,
11
- "manifestRootsToUpdate": ["dist/{projectRoot}"]
10
+ "fallbackCurrentVersionResolver": "disk"
12
11
  }
13
12
  },
14
13
  "tags": [],
@@ -17,10 +16,10 @@
17
16
  "executor": "@nx/esbuild:esbuild",
18
17
  "outputs": ["{options.outputPath}"],
19
18
  "options": {
20
- "outputPath": "dist/providers/meilisearch",
21
- "main": "providers/meilisearch/src/index.ts",
22
- "tsConfig": "providers/meilisearch/tsconfig.lib.json",
23
- "assets": ["providers/meilisearch/*.md"],
19
+ "outputPath": "dist/packages/meilisearch",
20
+ "main": "packages/meilisearch/src/index.ts",
21
+ "tsConfig": "packages/meilisearch/tsconfig.lib.json",
22
+ "assets": ["packages/meilisearch/*.md"],
24
23
  "format": ["esm"],
25
24
  "bundle": false
26
25
  }
@@ -0,0 +1,3 @@
1
+ export * from './product-search.capability.js';
2
+ export * from './product-recommendations.capability.js';
3
+ export * from './order-search.capability.js';
@@ -5,7 +5,7 @@ import {
5
5
  type OrderSearchResult,
6
6
  type OrderSearchResultItem,
7
7
  OrderSearchResultSchema,
8
- OrderSearchProvider,
8
+ OrderSearchCapability,
9
9
  Reactionary,
10
10
  type RequestContext,
11
11
  type Result,
@@ -19,9 +19,13 @@ import {
19
19
  AddressIdentifierSchema,
20
20
  type AddressIdentifier,
21
21
  type OrderInventoryStatus,
22
+ type OrderSearchFactory,
23
+ type OrderSearchFactoryOutput,
24
+ type OrderSearchFactoryWithOutput,
22
25
  } from '@reactionary/core';
23
26
  import { MeiliSearch, type SearchParams, type SearchResponse } from 'meilisearch';
24
27
  import type { MeilisearchConfiguration } from '../schema/configuration.schema.js';
28
+ import type { MeilisearchOrderSearchFactory } from '../factories/order-search/order-search.factory.js';
25
29
 
26
30
  interface MeilisearchNativeOrderAddress {
27
31
  address1: string;
@@ -44,12 +48,21 @@ interface MeilisearchNativeOrderRecord {
44
48
  currency: string;
45
49
  }
46
50
 
47
- export class MeilisearchOrderSearchProvider extends OrderSearchProvider {
51
+ export class MeilisearchOrderSearchCapability<
52
+ TFactory extends OrderSearchFactory = MeilisearchOrderSearchFactory,
53
+ > extends OrderSearchCapability<OrderSearchFactoryOutput<TFactory>> {
48
54
  protected config: MeilisearchConfiguration;
49
-
50
- constructor(config: MeilisearchConfiguration, cache: Cache, context: RequestContext) {
55
+ protected factory: OrderSearchFactoryWithOutput<TFactory>;
56
+
57
+ constructor(
58
+ config: MeilisearchConfiguration,
59
+ cache: Cache,
60
+ context: RequestContext,
61
+ factory: OrderSearchFactoryWithOutput<TFactory>,
62
+ ) {
51
63
  super(cache, context);
52
64
  this.config = config;
65
+ this.factory = factory;
53
66
  }
54
67
 
55
68
  protected queryByTermPayload(payload: OrderSearchQueryByTerm): SearchParams {
@@ -100,7 +113,9 @@ export class MeilisearchOrderSearchProvider extends OrderSearchProvider {
100
113
  inputSchema: OrderSearchQueryByTermSchema,
101
114
  outputSchema: OrderSearchResultSchema,
102
115
  })
103
- public async queryByTerm(payload: OrderSearchQueryByTerm): Promise<Result<OrderSearchResult>> {
116
+ public async queryByTerm(
117
+ payload: OrderSearchQueryByTerm,
118
+ ): Promise<Result<OrderSearchFactoryOutput<TFactory>>> {
104
119
  const client = new MeiliSearch({
105
120
  host: this.config.apiUrl,
106
121
  apiKey: this.config.apiKey,
@@ -114,9 +129,9 @@ export class MeilisearchOrderSearchProvider extends OrderSearchProvider {
114
129
  this.queryByTermPayload(payload)
115
130
  );
116
131
 
117
- const result = this.parsePaginatedResult(remote, payload) as OrderSearchResult;
132
+ const result = this.parsePaginatedResult(remote, payload);
118
133
 
119
- return success(result);
134
+ return success(this.factory.parseOrderSearchResult(this.context, result, payload));
120
135
  }
121
136
 
122
137
  protected mapOrderStatus(status: OrderStatus): string {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  type Cache,
3
- ProductRecommendationsProvider,
3
+ ProductRecommendationsCapability,
4
4
  type ProductRecommendation,
5
5
  type ProductRecommendationAlgorithmSimilarProductsQuery,
6
6
  type RequestContext,
@@ -15,7 +15,7 @@ import type { MeilisearchNativeRecord, MeilisearchNativeVariant } from '../schem
15
15
 
16
16
 
17
17
  /**
18
- * MeilisearchProductRecommendationsProvider
18
+ * MeilisearchProductRecommendationsCapability
19
19
  *
20
20
  * Provides product recommendations using Meilisearch's hybrid search and filtering capabilities.
21
21
  * Supports frequentlyBoughtTogether, similar, related, and trendingInCategory algorithms.
@@ -24,7 +24,7 @@ import type { MeilisearchNativeRecord, MeilisearchNativeVariant } from '../schem
24
24
  * For production use, consider implementing more sophisticated recommendation logic or integrating
25
25
  * with a dedicated recommendation engine.
26
26
  */
27
- export class MeilisearchProductRecommendationsProvider extends ProductRecommendationsProvider {
27
+ export class MeilisearchProductRecommendationsCapability extends ProductRecommendationsCapability {
28
28
  protected config: MeilisearchConfiguration;
29
29
 
30
30
  constructor(config: MeilisearchConfiguration, cache: Cache, context: RequestContext) {
@@ -5,7 +5,10 @@ import {
5
5
  type FacetValueIdentifier,
6
6
  FacetValueIdentifierSchema,
7
7
  ImageSchema,
8
- ProductSearchProvider,
8
+ ProductSearchCapability,
9
+ type ProductSearchFactory,
10
+ type ProductSearchFactoryOutput,
11
+ type ProductSearchFactoryWithOutput,
9
12
  type ProductSearchQueryByTerm,
10
13
  ProductSearchQueryByTermSchema,
11
14
  type ProductSearchQueryCreateNavigationFilter,
@@ -25,15 +28,25 @@ import {
25
28
  } from '@reactionary/core';
26
29
  import { MeiliSearch, type SearchParams, type SearchResponse } from 'meilisearch';
27
30
  import type { MeilisearchConfiguration } from '../schema/configuration.schema.js';
28
- import type { MeilisearchNativeRecord, MeilisearchNativeVariant, MeilisearchProductSearchResult } from '../schema/search.schema.js';
31
+ import type { MeilisearchNativeRecord, MeilisearchNativeVariant } from '../schema/search.schema.js';
32
+ import type { MeilisearchProductSearchFactory } from '../factories/product-search/product-search.factory.js';
29
33
 
30
34
 
31
- export class MeilisearchSearchProvider extends ProductSearchProvider {
35
+ export class MeilisearchProductSearchCapability<
36
+ TFactory extends ProductSearchFactory = MeilisearchProductSearchFactory,
37
+ > extends ProductSearchCapability<ProductSearchFactoryOutput<TFactory>> {
32
38
  protected config: MeilisearchConfiguration;
33
-
34
- constructor(config: MeilisearchConfiguration, cache: Cache, context: RequestContext) {
39
+ protected factory: ProductSearchFactoryWithOutput<TFactory>;
40
+
41
+ constructor(
42
+ config: MeilisearchConfiguration,
43
+ cache: Cache,
44
+ context: RequestContext,
45
+ factory: ProductSearchFactoryWithOutput<TFactory>,
46
+ ) {
35
47
  super(cache, context);
36
48
  this.config = config;
49
+ this.factory = factory;
37
50
  }
38
51
 
39
52
  protected queryByTermPayload(payload: ProductSearchQueryByTerm) {
@@ -85,7 +98,7 @@ export class MeilisearchSearchProvider extends ProductSearchProvider {
85
98
  })
86
99
  public override async queryByTerm(
87
100
  payload: ProductSearchQueryByTerm
88
- ): Promise<Result<ProductSearchResult>> {
101
+ ): Promise<Result<ProductSearchFactoryOutput<TFactory>>> {
89
102
  const client = new MeiliSearch({
90
103
  host: this.config.apiUrl,
91
104
  apiKey: this.config.apiKey,
@@ -96,7 +109,7 @@ export class MeilisearchSearchProvider extends ProductSearchProvider {
96
109
 
97
110
  const remote = await index.search<MeilisearchNativeRecord>(payload.search.term, this.queryByTermPayload(payload) as SearchParams);
98
111
 
99
- const result = this.parsePaginatedResult(remote, payload) as MeilisearchProductSearchResult;
112
+ const result = this.parsePaginatedResult(remote, payload);
100
113
 
101
114
  // mark selected facets as active
102
115
  for (const selectedFacet of payload.search.facets) {
@@ -109,7 +122,7 @@ export class MeilisearchSearchProvider extends ProductSearchProvider {
109
122
  }
110
123
  }
111
124
 
112
- return success(result);
125
+ return success(this.factory.parseSearchResult(this.context, result, payload));
113
126
  }
114
127
 
115
128
  public override async createCategoryNavigationFilter(payload: ProductSearchQueryCreateNavigationFilter): Promise<Result<FacetValueIdentifier>> {
@@ -136,7 +149,10 @@ export class MeilisearchSearchProvider extends ProductSearchProvider {
136
149
  return product;
137
150
  }
138
151
 
139
- protected override parseVariant(variant: MeilisearchNativeVariant, product: MeilisearchNativeRecord): ProductSearchResultItemVariant {
152
+ protected parseVariant(
153
+ variant: MeilisearchNativeVariant,
154
+ product: MeilisearchNativeRecord,
155
+ ): ProductSearchResultItemVariant {
140
156
  const result = ProductSearchResultItemVariantSchema.parse({
141
157
  variant: {
142
158
  sku: variant.sku
@@ -0,0 +1,94 @@
1
+ import type { Cache, RequestContext } from '@reactionary/core';
2
+ import { OrderSearchResultSchema, ProductSearchResultSchema } from '@reactionary/core';
3
+ import { MeilisearchProductSearchCapability } from '../capabilities/product-search.capability.js';
4
+ import { MeilisearchProductRecommendationsCapability } from '../capabilities/product-recommendations.capability.js';
5
+ import { MeilisearchOrderSearchCapability } from '../capabilities/order-search.capability.js';
6
+ import {
7
+ MeilisearchCapabilitiesSchema,
8
+ type MeilisearchCapabilities,
9
+ } from '../schema/capabilities.schema.js';
10
+ import type { MeilisearchConfiguration } from '../schema/configuration.schema.js';
11
+ import { MeilisearchOrderSearchFactory } from '../factories/order-search/order-search.factory.js';
12
+ import { MeilisearchProductSearchFactory } from '../factories/product-search/product-search.factory.js';
13
+ import {
14
+ type MeilisearchClientFromCapabilities,
15
+ resolveCapabilityWithFactory,
16
+ resolveDirectCapability,
17
+ } from './initialize.types.js';
18
+
19
+ export function withMeilisearchCapabilities<T extends MeilisearchCapabilities>(
20
+ configuration: MeilisearchConfiguration,
21
+ capabilities: T,
22
+ ) {
23
+ return (
24
+ cache: Cache,
25
+ context: RequestContext,
26
+ ): MeilisearchClientFromCapabilities<T> => {
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ const client: any = {};
29
+ const caps = MeilisearchCapabilitiesSchema.parse(capabilities);
30
+
31
+ if (caps.productSearch?.enabled) {
32
+ client.productSearch = resolveCapabilityWithFactory(
33
+ capabilities.productSearch,
34
+ {
35
+ factory: new MeilisearchProductSearchFactory(ProductSearchResultSchema),
36
+ capability: (args) =>
37
+ new MeilisearchProductSearchCapability(
38
+ args.config,
39
+ args.cache,
40
+ args.context,
41
+ args.factory,
42
+ ),
43
+ },
44
+ (factory) => ({
45
+ cache,
46
+ context,
47
+ config: configuration,
48
+ factory,
49
+ }),
50
+ );
51
+ }
52
+
53
+ if (caps.orderSearch?.enabled) {
54
+ client.orderSearch = resolveCapabilityWithFactory(
55
+ capabilities.orderSearch,
56
+ {
57
+ factory: new MeilisearchOrderSearchFactory(OrderSearchResultSchema),
58
+ capability: (args) =>
59
+ new MeilisearchOrderSearchCapability(
60
+ args.config,
61
+ args.cache,
62
+ args.context,
63
+ args.factory,
64
+ ),
65
+ },
66
+ (factory) => ({
67
+ cache,
68
+ context,
69
+ config: configuration,
70
+ factory,
71
+ }),
72
+ );
73
+ }
74
+
75
+ if (caps.productRecommendations?.enabled) {
76
+ client.productRecommendations = resolveDirectCapability(
77
+ capabilities.productRecommendations,
78
+ (args) =>
79
+ new MeilisearchProductRecommendationsCapability(
80
+ args.config,
81
+ args.cache,
82
+ args.context,
83
+ ),
84
+ {
85
+ cache,
86
+ context,
87
+ config: configuration,
88
+ },
89
+ );
90
+ }
91
+
92
+ return client;
93
+ };
94
+ }