@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,14 +1,13 @@
1
1
  {
2
2
  "name": "fake",
3
3
  "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
- "sourceRoot": "providers/fake/src",
4
+ "sourceRoot": "packages/fake/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/fake",
21
- "main": "providers/fake/src/index.ts",
22
- "tsConfig": "providers/fake/tsconfig.lib.json",
23
- "assets": ["providers/fake/*.md"],
19
+ "outputPath": "dist/packages/fake",
20
+ "main": "packages/fake/src/index.ts",
21
+ "tsConfig": "packages/fake/tsconfig.lib.json",
22
+ "assets": ["packages/fake/*.md"],
24
23
  "format": ["esm"],
25
24
  "bundle": false
26
25
  }
@@ -3,12 +3,12 @@ import type {
3
3
  Cache,
4
4
  RequestContext} from '@reactionary/core';
5
5
  import {
6
- AnalyticsProvider
6
+ AnalyticsCapability
7
7
  } from '@reactionary/core';
8
8
  import type * as z from 'zod';
9
9
  import type { FakeConfiguration } from '../schema/configuration.schema.js';
10
10
 
11
- export class FakeAnalyticsProvider extends AnalyticsProvider {
11
+ export class FakeAnalyticsCapability extends AnalyticsCapability {
12
12
  protected config: FakeConfiguration;
13
13
 
14
14
  constructor(config: FakeConfiguration, cache: Cache, context: RequestContext) {
@@ -1,5 +1,8 @@
1
1
  import type {
2
2
  Cart,
3
+ CartFactory,
4
+ CartFactoryCartOutput,
5
+ CartFactoryWithOutput,
3
6
  CartQueryById,
4
7
  CartMutationItemAdd,
5
8
  CartMutationItemRemove,
@@ -23,7 +26,7 @@ import {
23
26
  CartMutationItemQuantityChangeSchema,
24
27
  CartMutationItemRemoveSchema,
25
28
  CartMutationRemoveCouponSchema,
26
- CartProvider,
29
+ CartCapability,
27
30
  CartQueryByIdSchema,
28
31
  CartSchema,
29
32
  Reactionary,
@@ -33,16 +36,21 @@ import {
33
36
  } from '@reactionary/core';
34
37
  import type { FakeConfiguration } from '../schema/configuration.schema.js';
35
38
  import { Faker, en, base } from '@faker-js/faker';
39
+ import type { FakeCartFactory } from '../factories/cart/cart.factory.js';
36
40
 
37
- export class FakeCartProvider extends CartProvider {
41
+ export class FakeCartCapability<
42
+ TFactory extends CartFactory = FakeCartFactory,
43
+ > extends CartCapability<CartFactoryCartOutput<TFactory>, CartIdentifier> {
38
44
  protected config: FakeConfiguration;
45
+ protected factory: CartFactoryWithOutput<TFactory>;
39
46
  private carts: Map<string, Cart> = new Map();
40
47
  private generator: Faker;
41
48
 
42
49
  constructor(
43
50
  config: FakeConfiguration,
44
51
  cache: Cache,
45
- context: RequestContext
52
+ context: RequestContext,
53
+ factory: CartFactoryWithOutput<TFactory>,
46
54
  ) {
47
55
  super(cache, context);
48
56
  this.generator = new Faker({
@@ -50,6 +58,7 @@ export class FakeCartProvider extends CartProvider {
50
58
  seed: config.seeds.product,
51
59
  });
52
60
  this.config = config;
61
+ this.factory = factory;
53
62
  }
54
63
 
55
64
  @Reactionary({
@@ -58,7 +67,7 @@ export class FakeCartProvider extends CartProvider {
58
67
  })
59
68
  public override async getById(
60
69
  payload: CartQueryById
61
- ): Promise<Result<Cart, NotFoundError>> {
70
+ ): Promise<Result<CartFactoryCartOutput<TFactory>, NotFoundError>> {
62
71
  const cartId = payload.cart.key;
63
72
 
64
73
  if (payload.cart.key === '') {
@@ -79,14 +88,14 @@ export class FakeCartProvider extends CartProvider {
79
88
  if (!cart) {
80
89
  throw new Error(`Cart with id ${cartId} not found`);
81
90
  }
82
- return success(cart);
91
+ return success(this.factory.parseCart(this.context, cart));
83
92
  }
84
93
 
85
94
  @Reactionary({
86
95
  inputSchema: CartMutationItemAddSchema,
87
96
  outputSchema: CartSchema,
88
97
  })
89
- public override async add(payload: CartMutationItemAdd): Promise<Result<Cart>> {
98
+ public override async add(payload: CartMutationItemAdd): Promise<Result<CartFactoryCartOutput<TFactory>>> {
90
99
  const cartId = payload?.cart?.key || `cart-${this.generator.string.uuid()}`;
91
100
  const cart = unwrapValue(await this.getById({ cart: { key: cartId } }));
92
101
 
@@ -133,14 +142,14 @@ export class FakeCartProvider extends CartProvider {
133
142
 
134
143
  this.recalculateCart(cart);
135
144
 
136
- return success(cart);
145
+ return success(this.factory.parseCart(this.context, cart));
137
146
  }
138
147
 
139
148
  @Reactionary({
140
149
  inputSchema: CartMutationItemRemoveSchema,
141
150
  outputSchema: CartSchema,
142
151
  })
143
- public override async remove(payload: CartMutationItemRemove): Promise<Result<Cart>> {
152
+ public override async remove(payload: CartMutationItemRemove): Promise<Result<CartFactoryCartOutput<TFactory>>> {
144
153
  const cartId = payload.cart.key || `cart-${this.generator.string.uuid()}`;
145
154
  const cart = unwrapValue(await this.getById({ cart: { key: cartId } }));
146
155
 
@@ -149,7 +158,7 @@ export class FakeCartProvider extends CartProvider {
149
158
  );
150
159
  this.recalculateCart(cart);
151
160
 
152
- return success(cart);
161
+ return success(this.factory.parseCart(this.context, cart));
153
162
  }
154
163
 
155
164
  @Reactionary({
@@ -158,7 +167,7 @@ export class FakeCartProvider extends CartProvider {
158
167
  })
159
168
  public override async changeQuantity(
160
169
  payload: CartMutationItemQuantityChange
161
- ): Promise<Result<Cart>> {
170
+ ): Promise<Result<CartFactoryCartOutput<TFactory>>> {
162
171
  const cartId = payload.cart.key || `cart-${this.generator.string.uuid()}`;
163
172
  const cart = unwrapValue(await this.getById({ cart: { key: cartId } }));
164
173
 
@@ -166,13 +175,13 @@ export class FakeCartProvider extends CartProvider {
166
175
  (item) => item.identifier.key === payload.item.key
167
176
  );
168
177
  if (payload.quantity < 1) {
169
- return success(cart);
178
+ return success(this.factory.parseCart(this.context, cart));
170
179
  }
171
180
  if (item) {
172
181
  item.quantity = payload.quantity;
173
182
  }
174
183
  this.recalculateCart(cart);
175
- return success(cart);
184
+ return success(this.factory.parseCart(this.context, cart));
176
185
  }
177
186
 
178
187
  @Reactionary({
@@ -196,7 +205,7 @@ export class FakeCartProvider extends CartProvider {
196
205
  })
197
206
  public override applyCouponCode(
198
207
  payload: CartMutationApplyCoupon
199
- ): Promise<Result<Cart>> {
208
+ ): Promise<Result<CartFactoryCartOutput<TFactory>>> {
200
209
  throw new Error('Method not implemented.');
201
210
  }
202
211
 
@@ -206,7 +215,7 @@ export class FakeCartProvider extends CartProvider {
206
215
  })
207
216
  public override removeCouponCode(
208
217
  payload: CartMutationRemoveCoupon
209
- ): Promise<Result<Cart>> {
218
+ ): Promise<Result<CartFactoryCartOutput<TFactory>>> {
210
219
  throw new Error('Method not implemented.');
211
220
  }
212
221
 
@@ -216,7 +225,7 @@ export class FakeCartProvider extends CartProvider {
216
225
  })
217
226
  public override changeCurrency(
218
227
  payload: CartMutationChangeCurrency
219
- ): Promise<Result<Cart>> {
228
+ ): Promise<Result<CartFactoryCartOutput<TFactory>>> {
220
229
  throw new Error('Method not implemented.');
221
230
  }
222
231
 
@@ -0,0 +1,199 @@
1
+ import type {
2
+ Cache,
3
+ Category,
4
+ CategoryFactory,
5
+ CategoryFactoryCategoryOutput,
6
+ CategoryFactoryPaginatedOutput,
7
+ CategoryFactoryWithOutput,
8
+ CategoryPaginatedResult,
9
+ CategoryQueryById,
10
+ CategoryQueryBySlug,
11
+ CategoryQueryForBreadcrumb,
12
+ CategoryQueryForChildCategories,
13
+ CategoryQueryForTopCategories,
14
+ NotFoundError,
15
+ RequestContext,
16
+ Result,
17
+ } from '@reactionary/core';
18
+ import {
19
+ CategoryPaginatedResultSchema,
20
+ CategoryCapability,
21
+ CategoryQueryByIdSchema,
22
+ CategoryQueryBySlugSchema,
23
+ CategoryQueryForBreadcrumbSchema,
24
+ CategoryQueryForChildCategoriesSchema,
25
+ CategoryQueryForTopCategoriesSchema,
26
+ CategorySchema,
27
+ Reactionary,
28
+ error,
29
+ success,
30
+ } from '@reactionary/core';
31
+ import type { FakeConfiguration } from '../schema/configuration.schema.js';
32
+ import * as z from 'zod';
33
+ import { Faker, en, base } from '@faker-js/faker';
34
+ import type { FakeCategoryFactory } from '../factories/category/category.factory.js';
35
+
36
+ export class FakeCategoryCapability<
37
+ TFactory extends CategoryFactory = FakeCategoryFactory,
38
+ > extends CategoryCapability<
39
+ CategoryFactoryCategoryOutput<TFactory>,
40
+ CategoryFactoryPaginatedOutput<TFactory>
41
+ > {
42
+ protected config: FakeConfiguration;
43
+ protected factory: CategoryFactoryWithOutput<TFactory>;
44
+
45
+ protected topCategories: Category[] = [];
46
+ protected childCategories = new Map<string, Category[]>();
47
+ protected allCategories = new Map<string, Category>();
48
+
49
+ protected categoryGenerator: Faker;
50
+
51
+ protected generateFakeCategory(parent: Category | undefined, index: number): Category {
52
+ const name = parent
53
+ ? `${parent.name}-${index}`
54
+ : this.categoryGenerator.commerce.department();
55
+
56
+ const identifier = { key: name.toLowerCase().replace(/\s+/g, '-') };
57
+ const category = {
58
+ identifier,
59
+ images: [],
60
+ name,
61
+ slug: `${identifier.key}-slug`,
62
+ text: this.categoryGenerator.lorem.sentences(3),
63
+ parentCategory: parent?.identifier,
64
+ } satisfies Category;
65
+
66
+ this.allCategories.set(identifier.key, category);
67
+ return category;
68
+ }
69
+
70
+ constructor(
71
+ config: FakeConfiguration,
72
+ cache: Cache,
73
+ context: RequestContext,
74
+ factory: CategoryFactoryWithOutput<TFactory>,
75
+ ) {
76
+ super(cache, context);
77
+ this.config = config;
78
+ this.factory = factory;
79
+ this.categoryGenerator = new Faker({
80
+ seed: this.config.seeds.category,
81
+ locale: [en, base],
82
+ });
83
+
84
+ for (let i = 0; i < 6; i++) {
85
+ this.topCategories.push(this.generateFakeCategory(undefined, i));
86
+ }
87
+
88
+ this.topCategories.forEach((parentCategory) => {
89
+ const children: Category[] = [];
90
+ for (let j = 0; j < 5; j++) {
91
+ const childCategory = this.generateFakeCategory(parentCategory, j);
92
+ children.push(childCategory);
93
+
94
+ const subCategoryChildren: Category[] = [];
95
+ for (let k = 0; k < 5; k++) {
96
+ subCategoryChildren.push(this.generateFakeCategory(childCategory, k));
97
+ }
98
+ this.childCategories.set(childCategory.identifier.key, subCategoryChildren);
99
+ }
100
+ this.childCategories.set(parentCategory.identifier.key, children);
101
+ });
102
+ }
103
+
104
+ @Reactionary({
105
+ inputSchema: CategoryQueryByIdSchema,
106
+ outputSchema: CategorySchema,
107
+ })
108
+ public override async getById(
109
+ payload: CategoryQueryById,
110
+ ): Promise<Result<CategoryFactoryCategoryOutput<TFactory>, NotFoundError>> {
111
+ const category = this.allCategories.get(payload.id.key);
112
+
113
+ if (!category) {
114
+ return error<NotFoundError>({
115
+ type: 'NotFound',
116
+ identifier: payload,
117
+ });
118
+ }
119
+
120
+ return success(this.factory.parseCategory(this.context, category));
121
+ }
122
+
123
+ @Reactionary({
124
+ inputSchema: CategoryQueryBySlugSchema,
125
+ outputSchema: CategorySchema,
126
+ })
127
+ public override async getBySlug(
128
+ payload: CategoryQueryBySlug,
129
+ ): Promise<Result<CategoryFactoryCategoryOutput<TFactory>, NotFoundError>> {
130
+ for (const category of this.allCategories.values()) {
131
+ if (category.slug === payload.slug) {
132
+ return success(this.factory.parseCategory(this.context, category));
133
+ }
134
+ }
135
+
136
+ return error<NotFoundError>({
137
+ type: 'NotFound',
138
+ identifier: payload,
139
+ });
140
+ }
141
+
142
+ @Reactionary({
143
+ inputSchema: CategoryQueryForBreadcrumbSchema,
144
+ outputSchema: z.array(CategorySchema),
145
+ })
146
+ public override async getBreadcrumbPathToCategory(
147
+ payload: CategoryQueryForBreadcrumb,
148
+ ): Promise<Result<CategoryFactoryCategoryOutput<TFactory>[]>> {
149
+ const path: Category[] = [];
150
+ let next = this.allCategories.get(payload.id.key);
151
+
152
+ while (next) {
153
+ path.unshift(next);
154
+ if (!next.parentCategory) {
155
+ break;
156
+ }
157
+ next = this.allCategories.get(next.parentCategory.key);
158
+ }
159
+
160
+ return success(path.map((x) => this.factory.parseCategory(this.context, x)));
161
+ }
162
+
163
+ @Reactionary({
164
+ inputSchema: CategoryQueryForTopCategoriesSchema,
165
+ outputSchema: CategoryPaginatedResultSchema,
166
+ })
167
+ public override async findTopCategories(
168
+ _payload: CategoryQueryForTopCategories,
169
+ ): Promise<Result<CategoryFactoryPaginatedOutput<TFactory>>> {
170
+ const result = {
171
+ items: this.topCategories,
172
+ pageSize: this.topCategories.length,
173
+ pageNumber: 1,
174
+ totalCount: this.topCategories.length,
175
+ totalPages: 1,
176
+ } satisfies CategoryPaginatedResult;
177
+
178
+ return success(this.factory.parseCategoryPaginatedResult(this.context, result));
179
+ }
180
+
181
+ @Reactionary({
182
+ inputSchema: CategoryQueryForChildCategoriesSchema,
183
+ outputSchema: CategoryPaginatedResultSchema,
184
+ })
185
+ public override async findChildCategories(
186
+ payload: CategoryQueryForChildCategories,
187
+ ): Promise<Result<CategoryFactoryPaginatedOutput<TFactory>>> {
188
+ const items = this.childCategories.get(payload.parentId.key) || [];
189
+ const result = {
190
+ items,
191
+ pageSize: items.length,
192
+ pageNumber: 1,
193
+ totalCount: items.length,
194
+ totalPages: 1,
195
+ } satisfies CategoryPaginatedResult;
196
+
197
+ return success(this.factory.parseCategoryPaginatedResult(this.context, result));
198
+ }
199
+ }
@@ -1,5 +1,5 @@
1
1
  import {
2
- CheckoutProvider,
2
+ CheckoutCapability,
3
3
  type Checkout,
4
4
  type CheckoutMutationAddPaymentInstruction,
5
5
  type CheckoutMutationFinalizeCheckout,
@@ -29,21 +29,35 @@ import {
29
29
  CheckoutMutationFinalizeCheckoutSchema,
30
30
  success,
31
31
  type CheckoutIdentifier,
32
+ type CheckoutFactory,
33
+ type CheckoutFactoryCheckoutOutput,
34
+ type CheckoutFactoryPaymentMethodOutput,
35
+ type CheckoutFactoryShippingMethodOutput,
36
+ type CheckoutFactoryWithOutput,
32
37
  PaymentMethodSchema,
33
38
  ShippingMethodSchema,
34
39
  } from '@reactionary/core';
35
40
  import type { FakeConfiguration } from '../schema/configuration.schema.js';
36
41
  import { base, en, Faker } from '@faker-js/faker';
37
42
  import * as z from 'zod';
43
+ import type { FakeCheckoutFactory } from '../factories/checkout/checkout.factory.js';
38
44
 
39
- export class FakeCheckoutProvider extends CheckoutProvider {
45
+ export class FakeCheckoutCapability<
46
+ TFactory extends CheckoutFactory = FakeCheckoutFactory,
47
+ > extends CheckoutCapability<
48
+ CheckoutFactoryCheckoutOutput<TFactory>,
49
+ CheckoutFactoryShippingMethodOutput<TFactory>,
50
+ CheckoutFactoryPaymentMethodOutput<TFactory>
51
+ > {
40
52
  protected config: FakeConfiguration;
41
53
  protected generator: Faker;
54
+ protected factory: CheckoutFactoryWithOutput<TFactory>;
42
55
 
43
56
  constructor(
44
57
  config: FakeConfiguration,
45
58
  cache: Cache,
46
- context: RequestContext
59
+ context: RequestContext,
60
+ factory: CheckoutFactoryWithOutput<TFactory>,
47
61
  ) {
48
62
  super(cache, context);
49
63
 
@@ -53,6 +67,7 @@ export class FakeCheckoutProvider extends CheckoutProvider {
53
67
  locale: [en, base],
54
68
  seed: config.seeds.product,
55
69
  });
70
+ this.factory = factory;
56
71
  }
57
72
 
58
73
  @Reactionary({
@@ -61,10 +76,10 @@ export class FakeCheckoutProvider extends CheckoutProvider {
61
76
  })
62
77
  public override async initiateCheckoutForCart(
63
78
  payload: CheckoutMutationInitiateCheckout
64
- ): Promise<Result<Checkout>> {
79
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
65
80
  const checkout = this.composeBaseCheckout(payload.cart.identifier);
66
81
 
67
- return success(checkout);
82
+ return success(this.factory.parseCheckout(this.context, checkout));
68
83
  }
69
84
 
70
85
  @Reactionary({
@@ -73,10 +88,10 @@ export class FakeCheckoutProvider extends CheckoutProvider {
73
88
  })
74
89
  public override async getById(
75
90
  payload: CheckoutQueryById
76
- ): Promise<Result<Checkout, NotFoundError>> {
91
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>, NotFoundError>> {
77
92
  const checkout = this.composeBaseCheckout(payload.identifier);
78
93
 
79
- return success(checkout);
94
+ return success(this.factory.parseCheckout(this.context, checkout));
80
95
  }
81
96
 
82
97
  @Reactionary({
@@ -85,10 +100,10 @@ export class FakeCheckoutProvider extends CheckoutProvider {
85
100
  })
86
101
  public override async setShippingAddress(
87
102
  payload: CheckoutMutationSetShippingAddress
88
- ): Promise<Result<Checkout>> {
103
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
89
104
  const checkout = this.composeBaseCheckout(payload.checkout);
90
105
 
91
- return success(checkout);
106
+ return success(this.factory.parseCheckout(this.context, checkout));
92
107
  }
93
108
 
94
109
  @Reactionary({
@@ -97,7 +112,7 @@ export class FakeCheckoutProvider extends CheckoutProvider {
97
112
  })
98
113
  public override async getAvailableShippingMethods(
99
114
  payload: CheckoutQueryForAvailableShippingMethods
100
- ): Promise<Result<ShippingMethod[]>> {
115
+ ): Promise<Result<CheckoutFactoryShippingMethodOutput<TFactory>[]>> {
101
116
  const methods = [
102
117
  {
103
118
  name: 'Fake',
@@ -114,7 +129,9 @@ export class FakeCheckoutProvider extends CheckoutProvider {
114
129
  },
115
130
  ] satisfies Array<ShippingMethod>;
116
131
 
117
- return success(methods);
132
+ return success(
133
+ methods.map((method) => this.factory.parseShippingMethod(this.context, method)),
134
+ );
118
135
  }
119
136
 
120
137
  @Reactionary({
@@ -123,7 +140,7 @@ export class FakeCheckoutProvider extends CheckoutProvider {
123
140
  })
124
141
  public override async getAvailablePaymentMethods(
125
142
  payload: CheckoutQueryForAvailablePaymentMethods
126
- ): Promise<Result<PaymentMethod[]>> {
143
+ ): Promise<Result<CheckoutFactoryPaymentMethodOutput<TFactory>[]>> {
127
144
  const methods = [
128
145
  {
129
146
  description: 'A fake payment method for paying at some point',
@@ -136,7 +153,9 @@ export class FakeCheckoutProvider extends CheckoutProvider {
136
153
  },
137
154
  ] satisfies Array<PaymentMethod>;
138
155
 
139
- return success(methods);
156
+ return success(
157
+ methods.map((method) => this.factory.parsePaymentMethod(this.context, method)),
158
+ );
140
159
  }
141
160
 
142
161
  @Reactionary({
@@ -145,10 +164,10 @@ export class FakeCheckoutProvider extends CheckoutProvider {
145
164
  })
146
165
  public override async addPaymentInstruction(
147
166
  payload: CheckoutMutationAddPaymentInstruction
148
- ): Promise<Result<Checkout>> {
167
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
149
168
  const checkout = this.composeBaseCheckout(payload.checkout);
150
169
 
151
- return success(checkout);
170
+ return success(this.factory.parseCheckout(this.context, checkout));
152
171
  }
153
172
 
154
173
  @Reactionary({
@@ -157,10 +176,10 @@ export class FakeCheckoutProvider extends CheckoutProvider {
157
176
  })
158
177
  public override async removePaymentInstruction(
159
178
  payload: CheckoutMutationRemovePaymentInstruction
160
- ): Promise<Result<Checkout>> {
179
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
161
180
  const checkout = this.composeBaseCheckout(payload.checkout);
162
181
 
163
- return success(checkout);
182
+ return success(this.factory.parseCheckout(this.context, checkout));
164
183
  }
165
184
 
166
185
  @Reactionary({
@@ -169,10 +188,10 @@ export class FakeCheckoutProvider extends CheckoutProvider {
169
188
  })
170
189
  public override async setShippingInstruction(
171
190
  payload: CheckoutMutationSetShippingInstruction
172
- ): Promise<Result<Checkout>> {
191
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
173
192
  const checkout = this.composeBaseCheckout(payload.checkout);
174
193
 
175
- return success(checkout);
194
+ return success(this.factory.parseCheckout(this.context, checkout));
176
195
  }
177
196
 
178
197
  @Reactionary({
@@ -181,10 +200,10 @@ export class FakeCheckoutProvider extends CheckoutProvider {
181
200
  })
182
201
  public override async finalizeCheckout(
183
202
  payload: CheckoutMutationFinalizeCheckout
184
- ): Promise<Result<Checkout>> {
203
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
185
204
  const checkout = this.composeBaseCheckout(payload.checkout);
186
205
 
187
- return success(checkout);
206
+ return success(this.factory.parseCheckout(this.context, checkout));
188
207
  }
189
208
 
190
209
  protected composeBaseCheckout(identifier?: CheckoutIdentifier) {