@reactionary/source 0.3.18 → 0.6.2

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 (191) hide show
  1. package/README.md +28 -14
  2. package/core/src/client/client-builder.ts +54 -6
  3. package/core/src/factories/cart.factory.ts +40 -0
  4. package/core/src/factories/category.factory.ts +40 -0
  5. package/core/src/factories/checkout.factory.ts +59 -0
  6. package/core/src/factories/identity.factory.ts +26 -0
  7. package/core/src/factories/index.ts +15 -0
  8. package/core/src/factories/inventory.factory.ts +26 -0
  9. package/core/src/factories/order-search.factory.ts +33 -0
  10. package/core/src/factories/order.factory.ts +21 -0
  11. package/core/src/factories/price.factory.ts +29 -0
  12. package/core/src/factories/product-associations.factory.ts +30 -0
  13. package/core/src/factories/product-list.factory.ts +82 -0
  14. package/core/src/factories/product-reviews.factory.ts +58 -0
  15. package/core/src/factories/product-search.factory.ts +31 -0
  16. package/core/src/factories/product.factory.ts +21 -0
  17. package/core/src/factories/profile.factory.ts +23 -0
  18. package/core/src/factories/store.factory.ts +21 -0
  19. package/core/src/index.ts +3 -1
  20. package/core/src/providers/cart.provider.ts +12 -10
  21. package/core/src/providers/category.provider.ts +9 -7
  22. package/core/src/providers/checkout.provider.ts +14 -10
  23. package/core/src/providers/identity.provider.ts +7 -7
  24. package/core/src/providers/inventory.provider.ts +4 -4
  25. package/core/src/providers/order-search.provider.ts +4 -2
  26. package/core/src/providers/order.provider.ts +4 -4
  27. package/core/src/providers/price.provider.ts +5 -5
  28. package/core/src/providers/product-associations.provider.ts +6 -4
  29. package/core/src/providers/product-list.provider.ts +13 -8
  30. package/core/src/providers/product-reviews.provider.ts +8 -4
  31. package/core/src/providers/product-search.provider.ts +15 -28
  32. package/core/src/providers/product.provider.ts +6 -6
  33. package/core/src/providers/profile.provider.ts +8 -8
  34. package/core/src/providers/store.provider.ts +2 -2
  35. package/core/src/test/client-builder.spec.ts +81 -0
  36. package/examples/node/package.json +7 -7
  37. package/examples/node/src/basic/basic-node-provider-model-extension.spec.ts +10 -4
  38. package/examples/node/src/basic/basic-node-provider-query-extension.spec.ts +8 -2
  39. package/examples/node/src/basic/basic-node-setup.spec.ts +5 -1
  40. package/examples/node/src/basic/client-creation.spec.ts +3 -3
  41. package/examples/node/src/utils.ts +41 -41
  42. package/examples/node/tsconfig.lib.json +2 -1
  43. package/package.json +1 -1
  44. package/providers/algolia/src/core/initialize.ts +76 -21
  45. package/providers/algolia/src/core/initialize.types.ts +107 -0
  46. package/providers/algolia/src/factories/index.ts +1 -0
  47. package/providers/algolia/src/factories/product-search/product-search.factory.ts +182 -0
  48. package/providers/algolia/src/index.ts +2 -2
  49. package/providers/algolia/src/providers/analytics.provider.ts +4 -4
  50. package/providers/algolia/src/providers/product-search.provider.ts +67 -184
  51. package/providers/algolia/src/schema/capabilities.schema.ts +81 -7
  52. package/providers/algolia/src/test/analytics.spec.ts +9 -1
  53. package/providers/algolia/src/test/client-builder-product-search-extension.example.ts +85 -0
  54. package/providers/commercetools/src/core/capability-descriptors.ts +324 -0
  55. package/providers/commercetools/src/core/initialize.ts +35 -151
  56. package/providers/commercetools/src/core/initialize.types.ts +174 -0
  57. package/providers/commercetools/src/factories/cart/cart.factory.ts +142 -0
  58. package/providers/commercetools/src/factories/category/category.factory.ts +77 -0
  59. package/providers/commercetools/src/factories/checkout/checkout-initializer-overrides.example.ts +94 -0
  60. package/providers/commercetools/src/factories/checkout/checkout.factory.ts +338 -0
  61. package/providers/commercetools/src/factories/identity/identity.factory.ts +26 -0
  62. package/providers/commercetools/src/factories/inventory/inventory.factory.ts +49 -0
  63. package/providers/commercetools/src/factories/order/order.factory.ts +149 -0
  64. package/providers/commercetools/src/factories/order-search/order-search.factory.ts +108 -0
  65. package/providers/commercetools/src/factories/price/price.factory.ts +76 -0
  66. package/providers/commercetools/src/factories/product/product-factory-baseline.example.ts +14 -0
  67. package/providers/commercetools/src/factories/product/product-factory-schema-and-parse-extension.example.ts +35 -0
  68. package/providers/commercetools/src/factories/product/product-factory-schema-extension.example.ts +23 -0
  69. package/providers/commercetools/src/factories/product/product-initializer-factory-extension.example.ts +41 -0
  70. package/providers/commercetools/src/factories/product/product-provider-custom-method-only.example.ts +47 -0
  71. package/providers/commercetools/src/factories/product/product-provider-schema-signature-extension.example.ts +61 -0
  72. package/providers/commercetools/src/factories/product/product.factory.ts +220 -0
  73. package/providers/commercetools/src/factories/product/utils.example.ts +9 -0
  74. package/providers/commercetools/src/factories/product-associations/product-associations.factory.ts +103 -0
  75. package/providers/commercetools/src/factories/product-list/product-list.factory.ts +122 -0
  76. package/providers/commercetools/src/factories/product-reviews/product-reviews.factory.ts +81 -0
  77. package/providers/commercetools/src/factories/product-search/product-search.factory.ts +182 -0
  78. package/providers/commercetools/src/factories/profile/profile.factory.ts +94 -0
  79. package/providers/commercetools/src/factories/store/store.factory.ts +49 -0
  80. package/providers/commercetools/src/index.ts +15 -0
  81. package/providers/commercetools/src/providers/cart.provider.ts +67 -193
  82. package/providers/commercetools/src/providers/category.provider.ts +24 -64
  83. package/providers/commercetools/src/providers/checkout.provider.ts +50 -322
  84. package/providers/commercetools/src/providers/identity.provider.ts +35 -15
  85. package/providers/commercetools/src/providers/inventory.provider.ts +13 -31
  86. package/providers/commercetools/src/providers/order-search.provider.ts +16 -110
  87. package/providers/commercetools/src/providers/order.provider.ts +13 -144
  88. package/providers/commercetools/src/providers/price.provider.ts +37 -51
  89. package/providers/commercetools/src/providers/product-associations.provider.ts +39 -104
  90. package/providers/commercetools/src/providers/product-list.provider.ts +38 -23
  91. package/providers/commercetools/src/providers/product-reviews.provider.ts +34 -14
  92. package/providers/commercetools/src/providers/product-search.provider.ts +17 -170
  93. package/providers/commercetools/src/providers/product.provider.ts +20 -199
  94. package/providers/commercetools/src/providers/profile.provider.ts +27 -73
  95. package/providers/commercetools/src/providers/store.provider.ts +13 -31
  96. package/providers/commercetools/src/schema/capabilities.schema.ts +258 -20
  97. package/providers/commercetools/src/test/caching.spec.ts +18 -2
  98. package/providers/commercetools/src/test/client-builder-merge-extensions.example.ts +125 -0
  99. package/providers/fake/src/core/initialize.ts +213 -44
  100. package/providers/fake/src/core/initialize.types.ts +164 -0
  101. package/providers/fake/src/factories/cart/cart.factory.ts +34 -0
  102. package/providers/fake/src/factories/category/category.factory.ts +40 -0
  103. package/providers/fake/src/factories/checkout/checkout.factory.ts +53 -0
  104. package/providers/fake/src/factories/identity/identity.factory.ts +25 -0
  105. package/providers/fake/src/factories/index.ts +14 -0
  106. package/providers/fake/src/factories/inventory/inventory.factory.ts +25 -0
  107. package/providers/fake/src/factories/order/order.factory.ts +22 -0
  108. package/providers/fake/src/factories/order-search/order-search.factory.ts +27 -0
  109. package/providers/fake/src/factories/price/price.factory.ts +26 -0
  110. package/providers/fake/src/factories/product/product.factory.ts +22 -0
  111. package/providers/fake/src/factories/product-associations/product-associations.factory.ts +25 -0
  112. package/providers/fake/src/factories/product-reviews/product-reviews.factory.ts +53 -0
  113. package/providers/fake/src/factories/product-search/product-search.factory.ts +27 -0
  114. package/providers/fake/src/factories/profile/profile.factory.ts +22 -0
  115. package/providers/fake/src/factories/store/store.factory.ts +22 -0
  116. package/providers/fake/src/index.ts +2 -0
  117. package/providers/fake/src/providers/cart.provider.ts +23 -14
  118. package/providers/fake/src/providers/category.provider.ts +120 -105
  119. package/providers/fake/src/providers/checkout.provider.ts +39 -20
  120. package/providers/fake/src/providers/identity.provider.ts +40 -34
  121. package/providers/fake/src/providers/inventory.provider.ts +26 -24
  122. package/providers/fake/src/providers/order-search.provider.ts +38 -30
  123. package/providers/fake/src/providers/order.provider.ts +21 -37
  124. package/providers/fake/src/providers/price.provider.ts +42 -34
  125. package/providers/fake/src/providers/product-associations.provider.ts +23 -10
  126. package/providers/fake/src/providers/product-reviews.provider.ts +71 -69
  127. package/providers/fake/src/providers/product-search.provider.ts +43 -70
  128. package/providers/fake/src/providers/product.provider.ts +34 -32
  129. package/providers/fake/src/providers/profile.provider.ts +62 -55
  130. package/providers/fake/src/providers/store.provider.ts +38 -22
  131. package/providers/fake/src/schema/capabilities.schema.ts +175 -18
  132. package/providers/fake/src/test/cart.provider.spec.ts +20 -3
  133. package/providers/fake/src/test/category.provider.spec.ts +4 -1
  134. package/providers/fake/src/test/checkout.provider.spec.ts +12 -2
  135. package/providers/fake/src/test/client-builder-product-extension.example.ts +75 -0
  136. package/providers/fake/src/test/order-search.provider.spec.ts +4 -7
  137. package/providers/fake/src/test/order.provider.spec.ts +4 -6
  138. package/providers/fake/src/test/price.provider.spec.ts +3 -1
  139. package/providers/fake/src/test/product.provider.spec.ts +8 -2
  140. package/providers/fake/src/test/profile.provider.spec.ts +4 -2
  141. package/providers/google-analytics/src/core/initialize.ts +37 -12
  142. package/providers/google-analytics/src/core/initialize.types.ts +47 -0
  143. package/providers/google-analytics/src/index.ts +1 -0
  144. package/providers/google-analytics/src/schema/capabilities.schema.ts +31 -5
  145. package/providers/medusa/src/core/initialize.ts +324 -81
  146. package/providers/medusa/src/core/initialize.types.ts +184 -0
  147. package/providers/medusa/src/factories/cart/cart.factory.ts +34 -0
  148. package/providers/medusa/src/factories/category/category.factory.ts +37 -0
  149. package/providers/medusa/src/factories/checkout/checkout.factory.ts +50 -0
  150. package/providers/medusa/src/factories/identity/identity.factory.ts +22 -0
  151. package/providers/medusa/src/factories/index.ts +12 -0
  152. package/providers/medusa/src/factories/inventory/inventory.factory.ts +25 -0
  153. package/providers/medusa/src/factories/order/order.factory.ts +22 -0
  154. package/providers/medusa/src/factories/order-search/order-search.factory.ts +27 -0
  155. package/providers/medusa/src/factories/price/price.factory.ts +26 -0
  156. package/providers/medusa/src/factories/product/product.factory.ts +22 -0
  157. package/providers/medusa/src/factories/product-associations/product-associations.factory.ts +25 -0
  158. package/providers/medusa/src/factories/product-search/product-search.factory.ts +27 -0
  159. package/providers/medusa/src/factories/profile/profile.factory.ts +22 -0
  160. package/providers/medusa/src/index.ts +2 -0
  161. package/providers/medusa/src/providers/cart.provider.ts +33 -20
  162. package/providers/medusa/src/providers/category.provider.ts +30 -12
  163. package/providers/medusa/src/providers/checkout.provider.ts +42 -17
  164. package/providers/medusa/src/providers/identity.provider.ts +1 -1
  165. package/providers/medusa/src/providers/inventory.provider.ts +21 -7
  166. package/providers/medusa/src/providers/order-search.provider.ts +16 -5
  167. package/providers/medusa/src/providers/order.provider.ts +17 -5
  168. package/providers/medusa/src/providers/price.provider.ts +26 -7
  169. package/providers/medusa/src/providers/product-associations.provider.ts +19 -8
  170. package/providers/medusa/src/providers/product-search.provider.ts +19 -31
  171. package/providers/medusa/src/providers/product.provider.ts +47 -11
  172. package/providers/medusa/src/providers/profile.provider.ts +35 -11
  173. package/providers/medusa/src/schema/capabilities.schema.ts +229 -18
  174. package/providers/medusa/src/test/cart.provider.spec.ts +18 -2
  175. package/providers/medusa/src/test/category.provider.spec.ts +4 -1
  176. package/providers/medusa/src/test/checkout.spec.ts +9 -9
  177. package/providers/medusa/src/test/inventory.provider.spec.ts +3 -1
  178. package/providers/medusa/src/test/large-cart.provider.spec.ts +8 -2
  179. package/providers/medusa/src/test/price.provider.spec.ts +8 -1
  180. package/providers/medusa/src/test/product.provider.spec.ts +3 -1
  181. package/providers/medusa/src/test/search.provider.spec.ts +16 -3
  182. package/providers/meilisearch/src/core/initialize.ts +88 -21
  183. package/providers/meilisearch/src/core/initialize.types.ts +119 -0
  184. package/providers/meilisearch/src/factories/index.ts +2 -0
  185. package/providers/meilisearch/src/factories/order-search/order-search.factory.ts +27 -0
  186. package/providers/meilisearch/src/factories/product-search/product-search.factory.ts +27 -0
  187. package/providers/meilisearch/src/index.ts +2 -0
  188. package/providers/meilisearch/src/providers/index.ts +1 -0
  189. package/providers/meilisearch/src/providers/order-search.provider.ts +21 -6
  190. package/providers/meilisearch/src/providers/product-search.provider.ts +24 -8
  191. package/providers/meilisearch/src/schema/capabilities.schema.ts +95 -8
@@ -0,0 +1,53 @@
1
+ import type {
2
+ AnyCheckoutSchema,
3
+ AnyPaymentMethodSchema,
4
+ AnyShippingMethodSchema,
5
+ CheckoutFactory,
6
+ CheckoutSchema,
7
+ PaymentMethodSchema,
8
+ RequestContext,
9
+ ShippingMethodSchema,
10
+ } from '@reactionary/core';
11
+ import type * as z from 'zod';
12
+
13
+ export class FakeCheckoutFactory<
14
+ TCheckoutSchema extends AnyCheckoutSchema = typeof CheckoutSchema,
15
+ TShippingMethodSchema extends AnyShippingMethodSchema = typeof ShippingMethodSchema,
16
+ TPaymentMethodSchema extends AnyPaymentMethodSchema = typeof PaymentMethodSchema,
17
+ > implements CheckoutFactory<TCheckoutSchema, TShippingMethodSchema, TPaymentMethodSchema>
18
+ {
19
+ public readonly checkoutSchema: TCheckoutSchema;
20
+ public readonly shippingMethodSchema: TShippingMethodSchema;
21
+ public readonly paymentMethodSchema: TPaymentMethodSchema;
22
+
23
+ constructor(
24
+ checkoutSchema: TCheckoutSchema,
25
+ shippingMethodSchema: TShippingMethodSchema,
26
+ paymentMethodSchema: TPaymentMethodSchema,
27
+ ) {
28
+ this.checkoutSchema = checkoutSchema;
29
+ this.shippingMethodSchema = shippingMethodSchema;
30
+ this.paymentMethodSchema = paymentMethodSchema;
31
+ }
32
+
33
+ public parseCheckout(
34
+ _context: RequestContext,
35
+ data: unknown,
36
+ ): z.output<TCheckoutSchema> {
37
+ return this.checkoutSchema.parse(data);
38
+ }
39
+
40
+ public parseShippingMethod(
41
+ _context: RequestContext,
42
+ data: unknown,
43
+ ): z.output<TShippingMethodSchema> {
44
+ return this.shippingMethodSchema.parse(data);
45
+ }
46
+
47
+ public parsePaymentMethod(
48
+ _context: RequestContext,
49
+ data: unknown,
50
+ ): z.output<TPaymentMethodSchema> {
51
+ return this.paymentMethodSchema.parse(data);
52
+ }
53
+ }
@@ -0,0 +1,25 @@
1
+ import type {
2
+ AnyIdentitySchema,
3
+ IdentityFactory,
4
+ IdentitySchema,
5
+ RequestContext,
6
+ } from '@reactionary/core';
7
+ import type * as z from 'zod';
8
+
9
+ export class FakeIdentityFactory<
10
+ TIdentitySchema extends AnyIdentitySchema = typeof IdentitySchema,
11
+ > implements IdentityFactory<TIdentitySchema>
12
+ {
13
+ public readonly identitySchema: TIdentitySchema;
14
+
15
+ constructor(identitySchema: TIdentitySchema) {
16
+ this.identitySchema = identitySchema;
17
+ }
18
+
19
+ public parseIdentity(
20
+ _context: RequestContext,
21
+ data: unknown,
22
+ ): z.output<TIdentitySchema> {
23
+ return this.identitySchema.parse(data);
24
+ }
25
+ }
@@ -0,0 +1,14 @@
1
+ export * from './cart/cart.factory.js';
2
+ export * from './category/category.factory.js';
3
+ export * from './checkout/checkout.factory.js';
4
+ export * from './identity/identity.factory.js';
5
+ export * from './inventory/inventory.factory.js';
6
+ export * from './order-search/order-search.factory.js';
7
+ export * from './order/order.factory.js';
8
+ export * from './price/price.factory.js';
9
+ export * from './product-associations/product-associations.factory.js';
10
+ export * from './product-reviews/product-reviews.factory.js';
11
+ export * from './product-search/product-search.factory.js';
12
+ export * from './product/product.factory.js';
13
+ export * from './profile/profile.factory.js';
14
+ export * from './store/store.factory.js';
@@ -0,0 +1,25 @@
1
+ import type {
2
+ AnyInventorySchema,
3
+ InventoryFactory,
4
+ InventorySchema,
5
+ RequestContext,
6
+ } from '@reactionary/core';
7
+ import type * as z from 'zod';
8
+
9
+ export class FakeInventoryFactory<
10
+ TInventorySchema extends AnyInventorySchema = typeof InventorySchema,
11
+ > implements InventoryFactory<TInventorySchema>
12
+ {
13
+ public readonly inventorySchema: TInventorySchema;
14
+
15
+ constructor(inventorySchema: TInventorySchema) {
16
+ this.inventorySchema = inventorySchema;
17
+ }
18
+
19
+ public parseInventory(
20
+ _context: RequestContext,
21
+ data: unknown,
22
+ ): z.output<TInventorySchema> {
23
+ return this.inventorySchema.parse(data);
24
+ }
25
+ }
@@ -0,0 +1,22 @@
1
+ import type {
2
+ AnyOrderSchema,
3
+ OrderFactory,
4
+ OrderSchema,
5
+ RequestContext,
6
+ } from '@reactionary/core';
7
+ import type * as z from 'zod';
8
+
9
+ export class FakeOrderFactory<
10
+ TOrderSchema extends AnyOrderSchema = typeof OrderSchema,
11
+ > implements OrderFactory<TOrderSchema>
12
+ {
13
+ public readonly orderSchema: TOrderSchema;
14
+
15
+ constructor(orderSchema: TOrderSchema) {
16
+ this.orderSchema = orderSchema;
17
+ }
18
+
19
+ public parseOrder(_context: RequestContext, data: unknown): z.output<TOrderSchema> {
20
+ return this.orderSchema.parse(data);
21
+ }
22
+ }
@@ -0,0 +1,27 @@
1
+ import type {
2
+ AnyOrderSearchResultSchema,
3
+ OrderSearchFactory,
4
+ OrderSearchQueryByTerm,
5
+ OrderSearchResultSchema,
6
+ RequestContext,
7
+ } from '@reactionary/core';
8
+ import type * as z from 'zod';
9
+
10
+ export class FakeOrderSearchFactory<
11
+ TOrderSearchResultSchema extends AnyOrderSearchResultSchema = typeof OrderSearchResultSchema,
12
+ > implements OrderSearchFactory<TOrderSearchResultSchema>
13
+ {
14
+ public readonly orderSearchResultSchema: TOrderSearchResultSchema;
15
+
16
+ constructor(orderSearchResultSchema: TOrderSearchResultSchema) {
17
+ this.orderSearchResultSchema = orderSearchResultSchema;
18
+ }
19
+
20
+ public parseOrderSearchResult(
21
+ _context: RequestContext,
22
+ data: unknown,
23
+ _query: OrderSearchQueryByTerm,
24
+ ): z.output<TOrderSearchResultSchema> {
25
+ return this.orderSearchResultSchema.parse(data);
26
+ }
27
+ }
@@ -0,0 +1,26 @@
1
+ import type {
2
+ AnyPriceSchema,
3
+ PriceFactory,
4
+ PriceSchema,
5
+ RequestContext,
6
+ } from '@reactionary/core';
7
+ import type * as z from 'zod';
8
+
9
+ export class FakePriceFactory<
10
+ TPriceSchema extends AnyPriceSchema = typeof PriceSchema,
11
+ > implements PriceFactory<TPriceSchema>
12
+ {
13
+ public readonly priceSchema: TPriceSchema;
14
+
15
+ constructor(priceSchema: TPriceSchema) {
16
+ this.priceSchema = priceSchema;
17
+ }
18
+
19
+ public parsePrice(
20
+ _context: RequestContext,
21
+ data: unknown,
22
+ _options?: { includeDiscounts: boolean },
23
+ ): z.output<TPriceSchema> {
24
+ return this.priceSchema.parse(data);
25
+ }
26
+ }
@@ -0,0 +1,22 @@
1
+ import type {
2
+ AnyProductSchema,
3
+ ProductFactory,
4
+ ProductSchema,
5
+ RequestContext,
6
+ } from '@reactionary/core';
7
+ import type * as z from 'zod';
8
+
9
+ export class FakeProductFactory<
10
+ TProductSchema extends AnyProductSchema = typeof ProductSchema,
11
+ > implements ProductFactory<TProductSchema>
12
+ {
13
+ public readonly productSchema: TProductSchema;
14
+
15
+ constructor(productSchema: TProductSchema) {
16
+ this.productSchema = productSchema;
17
+ }
18
+
19
+ public parseProduct(_context: RequestContext, data: unknown): z.output<TProductSchema> {
20
+ return this.productSchema.parse(data);
21
+ }
22
+ }
@@ -0,0 +1,25 @@
1
+ import type {
2
+ AnyProductAssociationSchema,
3
+ ProductAssociationSchema,
4
+ ProductAssociationsFactory,
5
+ RequestContext,
6
+ } from '@reactionary/core';
7
+ import type * as z from 'zod';
8
+
9
+ export class FakeProductAssociationsFactory<
10
+ TProductAssociationSchema extends AnyProductAssociationSchema = typeof ProductAssociationSchema,
11
+ > implements ProductAssociationsFactory<TProductAssociationSchema>
12
+ {
13
+ public readonly productAssociationSchema: TProductAssociationSchema;
14
+
15
+ constructor(productAssociationSchema: TProductAssociationSchema) {
16
+ this.productAssociationSchema = productAssociationSchema;
17
+ }
18
+
19
+ public parseAssociation(
20
+ _context: RequestContext,
21
+ data: unknown,
22
+ ): z.output<TProductAssociationSchema> {
23
+ return this.productAssociationSchema.parse(data);
24
+ }
25
+ }
@@ -0,0 +1,53 @@
1
+ import type {
2
+ AnyProductRatingSummarySchema,
3
+ AnyProductReviewPaginatedSchema,
4
+ AnyProductReviewSchema,
5
+ ProductRatingSummarySchema,
6
+ ProductReviewPaginatedResultSchema,
7
+ ProductReviewSchema,
8
+ ProductReviewsFactory,
9
+ RequestContext,
10
+ } from '@reactionary/core';
11
+ import type * as z from 'zod';
12
+
13
+ export class FakeProductReviewsFactory<
14
+ TRatingSummarySchema extends AnyProductRatingSummarySchema = typeof ProductRatingSummarySchema,
15
+ TReviewSchema extends AnyProductReviewSchema = typeof ProductReviewSchema,
16
+ TReviewPaginatedSchema extends AnyProductReviewPaginatedSchema = typeof ProductReviewPaginatedResultSchema,
17
+ > implements ProductReviewsFactory<TRatingSummarySchema, TReviewSchema, TReviewPaginatedSchema>
18
+ {
19
+ public readonly ratingSummarySchema: TRatingSummarySchema;
20
+ public readonly reviewSchema: TReviewSchema;
21
+ public readonly reviewPaginatedSchema: TReviewPaginatedSchema;
22
+
23
+ constructor(
24
+ ratingSummarySchema: TRatingSummarySchema,
25
+ reviewSchema: TReviewSchema,
26
+ reviewPaginatedSchema: TReviewPaginatedSchema,
27
+ ) {
28
+ this.ratingSummarySchema = ratingSummarySchema;
29
+ this.reviewSchema = reviewSchema;
30
+ this.reviewPaginatedSchema = reviewPaginatedSchema;
31
+ }
32
+
33
+ public parseRatingSummary(
34
+ _context: RequestContext,
35
+ data: unknown,
36
+ ): z.output<TRatingSummarySchema> {
37
+ return this.ratingSummarySchema.parse(data);
38
+ }
39
+
40
+ public parseReview(
41
+ _context: RequestContext,
42
+ data: unknown,
43
+ ): z.output<TReviewSchema> {
44
+ return this.reviewSchema.parse(data);
45
+ }
46
+
47
+ public parseReviewPaginatedResult(
48
+ _context: RequestContext,
49
+ data: unknown,
50
+ ): z.output<TReviewPaginatedSchema> {
51
+ return this.reviewPaginatedSchema.parse(data);
52
+ }
53
+ }
@@ -0,0 +1,27 @@
1
+ import type {
2
+ AnyProductSearchResultSchema,
3
+ ProductSearchFactory,
4
+ ProductSearchQueryByTerm,
5
+ ProductSearchResultSchema,
6
+ RequestContext,
7
+ } from '@reactionary/core';
8
+ import type * as z from 'zod';
9
+
10
+ export class FakeProductSearchFactory<
11
+ TProductSearchResultSchema extends AnyProductSearchResultSchema = typeof ProductSearchResultSchema,
12
+ > implements ProductSearchFactory<TProductSearchResultSchema>
13
+ {
14
+ public readonly productSearchResultSchema: TProductSearchResultSchema;
15
+
16
+ constructor(productSearchResultSchema: TProductSearchResultSchema) {
17
+ this.productSearchResultSchema = productSearchResultSchema;
18
+ }
19
+
20
+ public parseSearchResult(
21
+ _context: RequestContext,
22
+ data: unknown,
23
+ _query: ProductSearchQueryByTerm,
24
+ ): z.output<TProductSearchResultSchema> {
25
+ return this.productSearchResultSchema.parse(data);
26
+ }
27
+ }
@@ -0,0 +1,22 @@
1
+ import type {
2
+ AnyProfileSchema,
3
+ ProfileFactory,
4
+ ProfileSchema,
5
+ RequestContext,
6
+ } from '@reactionary/core';
7
+ import type * as z from 'zod';
8
+
9
+ export class FakeProfileFactory<
10
+ TProfileSchema extends AnyProfileSchema = typeof ProfileSchema,
11
+ > implements ProfileFactory<TProfileSchema>
12
+ {
13
+ public readonly profileSchema: TProfileSchema;
14
+
15
+ constructor(profileSchema: TProfileSchema) {
16
+ this.profileSchema = profileSchema;
17
+ }
18
+
19
+ public parseProfile(_context: RequestContext, data: unknown): z.output<TProfileSchema> {
20
+ return this.profileSchema.parse(data);
21
+ }
22
+ }
@@ -0,0 +1,22 @@
1
+ import type {
2
+ AnyStoreSchema,
3
+ RequestContext,
4
+ StoreFactory,
5
+ StoreSchema,
6
+ } from '@reactionary/core';
7
+ import type * as z from 'zod';
8
+
9
+ export class FakeStoreFactory<
10
+ TStoreSchema extends AnyStoreSchema = typeof StoreSchema,
11
+ > implements StoreFactory<TStoreSchema>
12
+ {
13
+ public readonly storeSchema: TStoreSchema;
14
+
15
+ constructor(storeSchema: TStoreSchema) {
16
+ this.storeSchema = storeSchema;
17
+ }
18
+
19
+ public parseStore(_context: RequestContext, data: unknown): z.output<TStoreSchema> {
20
+ return this.storeSchema.parse(data);
21
+ }
22
+ }
@@ -1,5 +1,7 @@
1
1
  export * from './core/initialize.js';
2
+ export * from './core/initialize.types.js';
2
3
 
3
4
  export * from './providers/index.js'
5
+ export * from './factories/index.js';
4
6
  export * from './schema/capabilities.schema.js';
5
7
  export * from './schema/configuration.schema.js';
@@ -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,
@@ -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 FakeCartProvider<
42
+ TFactory extends CartFactory = FakeCartFactory,
43
+ > extends CartProvider<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