@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,102 +1,108 @@
1
1
  import {
2
+ type AnonymousIdentity,
3
+ type Cache,
2
4
  type Identity,
3
- type IdentityQuerySelf,
5
+ type IdentityFactory,
6
+ type IdentityFactoryOutput,
7
+ type IdentityFactoryWithOutput,
4
8
  type IdentityMutationLogin,
9
+ IdentityMutationLoginSchema,
5
10
  type IdentityMutationLogout,
6
- type RequestContext,
7
- type Cache,
8
- IdentityProvider,
11
+ IdentityMutationLogoutSchema,
9
12
  type IdentityMutationRegister,
10
- type AnonymousIdentity,
11
- type RegisteredIdentity,
12
- Reactionary,
13
13
  IdentityMutationRegisterSchema,
14
- IdentitySchema,
15
- IdentityMutationLogoutSchema,
16
- IdentityMutationLoginSchema,
14
+ type IdentityQuerySelf,
17
15
  IdentityQuerySelfSchema,
16
+ IdentityCapability,
17
+ IdentitySchema,
18
+ type RegisteredIdentity,
19
+ type RequestContext,
18
20
  type Result,
21
+ Reactionary,
19
22
  success,
20
23
  } from '@reactionary/core';
21
24
  import type { FakeConfiguration } from '../schema/configuration.schema.js';
22
25
  import { base, en, Faker } from '@faker-js/faker';
26
+ import type { FakeIdentityFactory } from '../factories/identity/identity.factory.js';
23
27
 
24
- export class FakeIdentityProvider extends IdentityProvider {
28
+ export class FakeIdentityCapability<
29
+ TFactory extends IdentityFactory = FakeIdentityFactory,
30
+ > extends IdentityCapability<IdentityFactoryOutput<TFactory>> {
25
31
  protected config: FakeConfiguration;
32
+ protected factory: IdentityFactoryWithOutput<TFactory>;
26
33
  private currentIdentity: Identity | null = null;
27
34
 
28
35
  constructor(
29
36
  config: FakeConfiguration,
30
37
  cache: Cache,
31
- context: RequestContext
38
+ context: RequestContext,
39
+ factory: IdentityFactoryWithOutput<TFactory>,
32
40
  ) {
33
41
  super(cache, context);
34
42
 
35
43
  this.config = config;
44
+ this.factory = factory;
36
45
  }
37
46
 
38
47
  @Reactionary({
39
48
  inputSchema: IdentityQuerySelfSchema,
40
- outputSchema: IdentitySchema
49
+ outputSchema: IdentitySchema,
41
50
  })
42
51
  public override async getSelf(
43
- _payload: IdentityQuerySelf
44
- ): Promise<Result<Identity>> {
52
+ _payload: IdentityQuerySelf,
53
+ ): Promise<Result<IdentityFactoryOutput<TFactory>>> {
45
54
  if (!this.currentIdentity) {
46
- const model = {
55
+ this.currentIdentity = {
47
56
  type: 'Anonymous',
48
57
  } satisfies AnonymousIdentity;
49
-
50
- this.currentIdentity = model;
51
58
  }
52
59
 
53
- return success(this.currentIdentity);
60
+ return success(this.factory.parseIdentity(this.context, this.currentIdentity));
54
61
  }
55
62
 
56
63
  @Reactionary({
57
64
  inputSchema: IdentityMutationLoginSchema,
58
- outputSchema: IdentitySchema
65
+ outputSchema: IdentitySchema,
59
66
  })
60
67
  public override async login(
61
- payload: IdentityMutationLogin
62
- ): Promise<Result<Identity>> {
68
+ _payload: IdentityMutationLogin,
69
+ ): Promise<Result<IdentityFactoryOutput<TFactory>>> {
63
70
  const generator = new Faker({
64
71
  seed: 42,
65
72
  locale: [en, base],
66
73
  });
67
74
 
68
- const model = {
75
+ this.currentIdentity = {
69
76
  type: 'Registered',
70
77
  id: {
71
78
  userId: generator.string.alphanumeric(32),
72
79
  },
73
80
  } satisfies RegisteredIdentity;
74
81
 
75
- this.currentIdentity = model;
76
-
77
- return success(this.currentIdentity);
82
+ return success(this.factory.parseIdentity(this.context, this.currentIdentity));
78
83
  }
79
84
 
80
85
  @Reactionary({
81
86
  inputSchema: IdentityMutationLogoutSchema,
82
- outputSchema: IdentitySchema
87
+ outputSchema: IdentitySchema,
83
88
  })
84
89
  public override async logout(
85
- _payload: IdentityMutationLogout
86
- ): Promise<Result<Identity>> {
87
- const model = {
90
+ _payload: IdentityMutationLogout,
91
+ ): Promise<Result<IdentityFactoryOutput<TFactory>>> {
92
+ this.currentIdentity = {
88
93
  type: 'Anonymous',
89
94
  } satisfies AnonymousIdentity;
90
95
 
91
- this.currentIdentity = model;
92
- return success(this.currentIdentity);
96
+ return success(this.factory.parseIdentity(this.context, this.currentIdentity));
93
97
  }
94
98
 
95
99
  @Reactionary({
96
100
  inputSchema: IdentityMutationRegisterSchema,
97
- outputSchema: IdentitySchema
101
+ outputSchema: IdentitySchema,
98
102
  })
99
- public override register(payload: IdentityMutationRegister): Promise<Result<Identity>> {
103
+ public override register(
104
+ _payload: IdentityMutationRegister,
105
+ ): Promise<Result<IdentityFactoryOutput<TFactory>>> {
100
106
  throw new Error('Method not implemented.');
101
107
  }
102
108
  }
@@ -0,0 +1,15 @@
1
+ export * from './analytics.capability.js';
2
+ export * from './cart.capability.js';
3
+ export * from './category.capability.js';
4
+ export * from './checkout.capability.js';
5
+ export * from './identity.capability.js';
6
+ export * from './inventory.capability.js';
7
+ export * from './order-search.capability.js';
8
+ export * from './order.capability.js';
9
+ export * from './price.capability.js';
10
+ export * from './product.capability.js';
11
+ export * from './product-associations.capability.js';
12
+ export * from './product-reviews.capability.js';
13
+ export * from './product-search.capability.js';
14
+ export * from './profile.capability.js';
15
+ export * from './store.capability.js';
@@ -0,0 +1,74 @@
1
+ import { base, en, Faker } from '@faker-js/faker';
2
+ import type {
3
+ Cache,
4
+ InventoryFactory,
5
+ InventoryFactoryOutput,
6
+ InventoryFactoryWithOutput,
7
+ InventoryIdentifier,
8
+ InventoryQueryBySKU,
9
+ InventoryStatus,
10
+ NotFoundError,
11
+ RequestContext,
12
+ Result,
13
+ } from '@reactionary/core';
14
+ import {
15
+ InventoryCapability,
16
+ InventoryQueryBySKUSchema,
17
+ InventorySchema,
18
+ Reactionary,
19
+ success,
20
+ } from '@reactionary/core';
21
+ import type { FakeConfiguration } from '../schema/configuration.schema.js';
22
+ import type { FakeInventoryFactory } from '../factories/inventory/inventory.factory.js';
23
+
24
+ export class FakeInventoryCapability<
25
+ TFactory extends InventoryFactory = FakeInventoryFactory,
26
+ > extends InventoryCapability<InventoryFactoryOutput<TFactory>> {
27
+ protected config: FakeConfiguration;
28
+ protected factory: InventoryFactoryWithOutput<TFactory>;
29
+
30
+ constructor(
31
+ config: FakeConfiguration,
32
+ cache: Cache,
33
+ context: RequestContext,
34
+ factory: InventoryFactoryWithOutput<TFactory>,
35
+ ) {
36
+ super(cache, context);
37
+
38
+ this.config = config;
39
+ this.factory = factory;
40
+ }
41
+
42
+ @Reactionary({
43
+ inputSchema: InventoryQueryBySKUSchema,
44
+ outputSchema: InventorySchema,
45
+ })
46
+ public override async getBySKU(
47
+ payload: InventoryQueryBySKU,
48
+ ): Promise<Result<InventoryFactoryOutput<TFactory>, NotFoundError>> {
49
+ let hash = 0;
50
+ for (let i = 0; i < payload.variant.sku.length; i++) {
51
+ hash = (hash << 5) - hash + payload.variant.sku.charCodeAt(i);
52
+ hash &= hash;
53
+ }
54
+
55
+ const generator = new Faker({
56
+ seed: hash || 42,
57
+ locale: [en, base],
58
+ });
59
+
60
+ const quantity = generator.number.int({ min: 0, max: 100 });
61
+ const status: InventoryStatus = quantity > 0 ? 'inStock' : 'outOfStock';
62
+
63
+ const result = {
64
+ identifier: {
65
+ variant: payload.variant,
66
+ fulfillmentCenter: payload.fulfilmentCenter,
67
+ } satisfies InventoryIdentifier,
68
+ quantity,
69
+ status,
70
+ };
71
+
72
+ return success(this.factory.parseInventory(this.context, result));
73
+ }
74
+ }
@@ -0,0 +1,86 @@
1
+ import {
2
+ OrderSearchCapability,
3
+ OrderSearchQueryByTermSchema,
4
+ OrderSearchResultSchema,
5
+ Reactionary,
6
+ type Cache,
7
+ type OrderSearchFactory,
8
+ type OrderSearchFactoryOutput,
9
+ type OrderSearchFactoryWithOutput,
10
+ type OrderSearchQueryByTerm,
11
+ type OrderSearchResult,
12
+ type OrderSearchResultItem,
13
+ type RequestContext,
14
+ type Result,
15
+ success,
16
+ } from '@reactionary/core';
17
+ import type { FakeConfiguration } from '../schema/configuration.schema.js';
18
+ import { Faker, en, base } from '@faker-js/faker';
19
+ import type { FakeOrderSearchFactory } from '../factories/order-search/order-search.factory.js';
20
+
21
+ export class FakeOrderSearchCapability<
22
+ TFactory extends OrderSearchFactory = FakeOrderSearchFactory,
23
+ > extends OrderSearchCapability<OrderSearchFactoryOutput<TFactory>> {
24
+ protected config: FakeConfiguration;
25
+ protected generator: Faker;
26
+ protected factory: OrderSearchFactoryWithOutput<TFactory>;
27
+
28
+ constructor(
29
+ config: FakeConfiguration,
30
+ cache: Cache,
31
+ context: RequestContext,
32
+ factory: OrderSearchFactoryWithOutput<TFactory>,
33
+ ) {
34
+ super(cache, context);
35
+
36
+ this.config = config;
37
+ this.generator = new Faker({
38
+ locale: [en, base],
39
+ seed: config.seeds.product,
40
+ });
41
+ this.factory = factory;
42
+ }
43
+
44
+ @Reactionary({
45
+ inputSchema: OrderSearchQueryByTermSchema,
46
+ outputSchema: OrderSearchResultSchema,
47
+ })
48
+ public override async queryByTerm(
49
+ payload: OrderSearchQueryByTerm,
50
+ ): Promise<Result<OrderSearchFactoryOutput<TFactory>>> {
51
+ const items: OrderSearchResultItem[] = [];
52
+
53
+ for (let i = 0; i < payload.search.paginationOptions.pageSize; i++) {
54
+ items.push({
55
+ customerName: this.generator.company.name(),
56
+ identifier: {
57
+ key: this.generator.string.uuid(),
58
+ },
59
+ inventoryStatus: 'Allocated',
60
+ orderDate: this.generator.date.past().toString(),
61
+ orderStatus: 'Shipped',
62
+ totalAmount: {
63
+ currency: 'USD',
64
+ value: this.generator.number.int({ multipleOf: 100 }),
65
+ },
66
+ userId: {
67
+ userId: '1234',
68
+ },
69
+ });
70
+ }
71
+
72
+ const totalCount = this.generator.number.int({ min: items.length, max: 200 });
73
+ const totalPages = Math.ceil(totalCount / payload.search.paginationOptions.pageSize);
74
+
75
+ const result = {
76
+ identifier: payload.search,
77
+ items,
78
+ pageNumber: payload.search.paginationOptions.pageNumber,
79
+ pageSize: payload.search.paginationOptions.pageSize,
80
+ totalCount,
81
+ totalPages,
82
+ } satisfies OrderSearchResult;
83
+
84
+ return success(this.factory.parseOrderSearchResult(this.context, result, payload));
85
+ }
86
+ }
@@ -1,5 +1,5 @@
1
1
  import {
2
- OrderProvider,
2
+ OrderCapability,
3
3
  OrderQueryByIdSchema,
4
4
  OrderSchema,
5
5
  Reactionary,
@@ -7,30 +7,38 @@ import {
7
7
  type Cache,
8
8
  type NotFoundError,
9
9
  type Order,
10
+ type OrderFactory,
11
+ type OrderFactoryOutput,
12
+ type OrderFactoryWithOutput,
10
13
  type OrderQueryById,
11
14
  type RequestContext,
12
15
  type Result,
13
16
  } from '@reactionary/core';
14
17
  import type { FakeConfiguration } from '../schema/configuration.schema.js';
15
18
  import { Faker, en, base } from '@faker-js/faker';
19
+ import type { FakeOrderFactory } from '../factories/order/order.factory.js';
16
20
 
17
- export class FakeOrderProvider extends OrderProvider {
21
+ export class FakeOrderCapability<
22
+ TFactory extends OrderFactory = FakeOrderFactory,
23
+ > extends OrderCapability<OrderFactoryOutput<TFactory>> {
18
24
  protected config: FakeConfiguration;
19
25
  protected generator: Faker;
26
+ protected factory: OrderFactoryWithOutput<TFactory>;
20
27
 
21
28
  constructor(
22
29
  config: FakeConfiguration,
23
30
  cache: Cache,
24
- context: RequestContext
31
+ context: RequestContext,
32
+ factory: OrderFactoryWithOutput<TFactory>,
25
33
  ) {
26
34
  super(cache, context);
27
35
 
28
36
  this.config = config;
29
-
30
37
  this.generator = new Faker({
31
38
  locale: [en, base],
32
39
  seed: config.seeds.product,
33
40
  });
41
+ this.factory = factory;
34
42
  }
35
43
 
36
44
  @Reactionary({
@@ -38,8 +46,8 @@ export class FakeOrderProvider extends OrderProvider {
38
46
  outputSchema: OrderSchema,
39
47
  })
40
48
  public override async getById(
41
- payload: OrderQueryById
42
- ): Promise<Result<Order, NotFoundError>> {
49
+ payload: OrderQueryById,
50
+ ): Promise<Result<OrderFactoryOutput<TFactory>, NotFoundError>> {
43
51
  const order = {
44
52
  identifier: payload.order,
45
53
  inventoryStatus: 'Allocated',
@@ -47,60 +55,36 @@ export class FakeOrderProvider extends OrderProvider {
47
55
  orderStatus: 'Shipped',
48
56
  paymentInstructions: [],
49
57
  userId: {
50
- userId: '1234'
58
+ userId: '1234',
51
59
  },
52
60
  price: {
53
61
  grandTotal: {
54
62
  currency: 'USD',
55
- value: this.generator.number.float({
56
- min: 100,
57
- max: 10000,
58
- multipleOf: 25,
59
- }),
63
+ value: this.generator.number.float({ min: 100, max: 10000, multipleOf: 25 }),
60
64
  },
61
65
  totalDiscount: {
62
66
  currency: 'USD',
63
- value: this.generator.number.float({
64
- min: 100,
65
- max: 10000,
66
- multipleOf: 25,
67
- }),
67
+ value: this.generator.number.float({ min: 100, max: 10000, multipleOf: 25 }),
68
68
  },
69
69
  totalProductPrice: {
70
70
  currency: 'USD',
71
- value: this.generator.number.float({
72
- min: 100,
73
- max: 10000,
74
- multipleOf: 25,
75
- }),
71
+ value: this.generator.number.float({ min: 100, max: 10000, multipleOf: 25 }),
76
72
  },
77
73
  totalShipping: {
78
74
  currency: 'USD',
79
- value: this.generator.number.float({
80
- min: 100,
81
- max: 10000,
82
- multipleOf: 25,
83
- }),
75
+ value: this.generator.number.float({ min: 100, max: 10000, multipleOf: 25 }),
84
76
  },
85
77
  totalSurcharge: {
86
78
  currency: 'USD',
87
- value: this.generator.number.float({
88
- min: 100,
89
- max: 10000,
90
- multipleOf: 25,
91
- }),
79
+ value: this.generator.number.float({ min: 100, max: 10000, multipleOf: 25 }),
92
80
  },
93
81
  totalTax: {
94
82
  currency: 'USD',
95
- value: this.generator.number.float({
96
- min: 100,
97
- max: 10000,
98
- multipleOf: 25,
99
- }),
83
+ value: this.generator.number.float({ min: 100, max: 10000, multipleOf: 25 }),
100
84
  },
101
85
  },
102
86
  } satisfies Order;
103
87
 
104
- return success(order);
88
+ return success(this.factory.parseOrder(this.context, order));
105
89
  }
106
90
  }
@@ -1,30 +1,37 @@
1
1
  import {
2
- type RequestContext,
2
+ CustomerPriceQuerySchema,
3
+ ListPriceQuerySchema,
4
+ PriceCapability,
5
+ PriceSchema,
6
+ Reactionary,
7
+ success,
3
8
  type Cache,
4
- PriceProvider,
5
9
  type CustomerPriceQuery,
6
10
  type ListPriceQuery,
7
11
  type Price,
8
- Reactionary,
9
- CustomerPriceQuerySchema,
10
- PriceSchema,
11
- ListPriceQuerySchema,
12
- error,
13
- success,
12
+ type PriceFactory,
13
+ type PriceFactoryOutput,
14
+ type PriceFactoryWithOutput,
15
+ type RequestContext,
14
16
  type Result,
15
17
  } from '@reactionary/core';
16
- import type * as z from 'zod';
17
18
  import type { FakeConfiguration } from '../schema/configuration.schema.js';
18
19
  import { base, en, Faker } from '@faker-js/faker';
19
20
  import { calcSeed } from '../utilities/seed.js';
21
+ import type { FakePriceFactory } from '../factories/price/price.factory.js';
20
22
 
21
- export class FakePriceProvider extends PriceProvider {
23
+ export class FakePriceCapability<
24
+ TFactory extends PriceFactory = FakePriceFactory,
25
+ > extends PriceCapability<PriceFactoryOutput<TFactory>> {
22
26
  protected config: FakeConfiguration;
23
27
  protected faker: Faker;
28
+ protected factory: PriceFactoryWithOutput<TFactory>;
29
+
24
30
  constructor(
25
31
  config: FakeConfiguration,
26
32
  cache: Cache,
27
- context: RequestContext
33
+ context: RequestContext,
34
+ factory: PriceFactoryWithOutput<TFactory>,
28
35
  ) {
29
36
  super(cache, context);
30
37
 
@@ -32,6 +39,7 @@ export class FakePriceProvider extends PriceProvider {
32
39
  this.faker = new Faker({
33
40
  locale: [en, base],
34
41
  });
42
+ this.factory = factory;
35
43
  }
36
44
 
37
45
  protected createPrice(variantSku: string, mode: 'list' | 'customer'): Price {
@@ -40,34 +48,30 @@ export class FakePriceProvider extends PriceProvider {
40
48
  let price = this.faker.number.int({ min: 300, max: 100000 }) / 100;
41
49
  let onSale = false;
42
50
  if (mode === 'customer') {
43
- // For customer price, randomly decide if the product is on sale
44
- onSale = this.faker.datatype.boolean({ probability: 0.1 }); // 10% chance of being on sale
45
-
51
+ onSale = this.faker.datatype.boolean({ probability: 0.1 });
46
52
  if (onSale) {
47
- price = price * this.faker.number.float({ min: 0.5, max: 0.9 }); // Apply a random discount between 10% and 50%
53
+ price = price * this.faker.number.float({ min: 0.5, max: 0.9 });
48
54
  }
49
55
  }
50
56
 
51
57
  const tiers = [];
52
58
  if (variantSku.includes('with-tiers')) {
53
- // Add tiered pricing for SKUs that include "with-tiers"
54
59
  tiers.push({
55
60
  minimumQuantity: this.faker.number.int({ min: 2, max: 5 }),
56
61
  price: {
57
- value: price * 0.8, // 20% discount for tier 1
62
+ value: price * 0.8,
58
63
  currency: this.context.languageContext.currencyCode,
59
64
  },
60
65
  });
61
66
  tiers.push({
62
67
  minimumQuantity: this.faker.number.int({ min: 6, max: 10 }),
63
68
  price: {
64
- value: price * 0.6, // 40% discount for tier 2
69
+ value: price * 0.6,
65
70
  currency: this.context.languageContext.currencyCode,
66
71
  },
67
72
  });
68
73
  }
69
74
 
70
-
71
75
  return {
72
76
  identifier: {
73
77
  variant: {
@@ -80,32 +84,36 @@ export class FakePriceProvider extends PriceProvider {
80
84
  },
81
85
  onSale,
82
86
  tieredPrices: tiers,
83
- }
87
+ };
84
88
  }
85
89
 
86
-
87
-
88
90
  @Reactionary({
89
91
  inputSchema: ListPriceQuerySchema,
90
- outputSchema: PriceSchema
92
+ outputSchema: PriceSchema,
91
93
  })
92
- public override async getListPrice(payload: ListPriceQuery): Promise<Result<Price>> {
93
- if (payload.variant.sku === 'unknown-sku') {
94
- return success(this.createEmptyPriceResult(payload.variant.sku));
95
- }
94
+ public override async getListPrice(
95
+ payload: ListPriceQuery,
96
+ ): Promise<Result<PriceFactoryOutput<TFactory>>> {
97
+ const base =
98
+ payload.variant.sku === 'unknown-sku'
99
+ ? this.createEmptyPriceResult(payload.variant.sku)
100
+ : this.createPrice(payload.variant.sku, 'list');
96
101
 
97
- return success(this.createPrice(payload.variant.sku, 'list'));
102
+ return success(this.factory.parsePrice(this.context, base));
98
103
  }
99
104
 
100
105
  @Reactionary({
101
106
  inputSchema: CustomerPriceQuerySchema,
102
- outputSchema: PriceSchema
107
+ outputSchema: PriceSchema,
103
108
  })
104
- public override async getCustomerPrice(payload: CustomerPriceQuery): Promise<Result<Price>> {
105
- if (payload.variant.sku === 'unknown-sku') {
106
- return success(this.createEmptyPriceResult(payload.variant.sku));
107
- }
109
+ public override async getCustomerPrice(
110
+ payload: CustomerPriceQuery,
111
+ ): Promise<Result<PriceFactoryOutput<TFactory>>> {
112
+ const base =
113
+ payload.variant.sku === 'unknown-sku'
114
+ ? this.createEmptyPriceResult(payload.variant.sku)
115
+ : this.createPrice(payload.variant.sku, 'customer');
108
116
 
109
- return success(this.createPrice(payload.variant.sku, 'customer'));
117
+ return success(this.factory.parsePrice(this.context, base));
110
118
  }
111
119
  }