@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.
- package/README.md +33 -11
- package/examples/node/package.json +7 -7
- package/examples/node/src/basic/basic-node-provider-model-extension.spec.ts +11 -5
- package/examples/node/src/basic/basic-node-provider-query-extension.spec.ts +9 -3
- package/examples/node/src/basic/basic-node-setup.spec.ts +6 -2
- package/examples/node/src/basic/client-creation.spec.ts +6 -6
- package/examples/node/src/utils.ts +48 -48
- package/examples/node/tsconfig.lib.json +2 -1
- package/package.json +1 -1
- package/packages/algolia/README.md +11 -0
- package/{providers/google-analytics → packages/algolia}/eslint.config.mjs +0 -2
- package/{providers → packages}/algolia/package.json +7 -5
- package/{providers/posthog → packages/algolia}/project.json +6 -6
- package/{providers/algolia/src/providers/analytics.provider.ts → packages/algolia/src/capabilities/analytics.capability.ts} +6 -6
- package/packages/algolia/src/capabilities/index.ts +3 -0
- package/{providers/algolia/src/providers/product-recommendations.provider.ts → packages/algolia/src/capabilities/product-recommendations.capability.ts} +3 -3
- package/packages/algolia/src/capabilities/product-search.capability.ts +119 -0
- package/packages/algolia/src/core/initialize.ts +82 -0
- package/packages/algolia/src/core/initialize.types.ts +107 -0
- package/packages/algolia/src/factories/index.ts +1 -0
- package/packages/algolia/src/factories/product-search/product-search.factory.ts +182 -0
- package/{providers/fake → packages/algolia}/src/index.ts +3 -2
- package/packages/algolia/src/schema/capabilities.schema.ts +84 -0
- package/{providers → packages}/algolia/src/test/analytics.spec.ts +12 -4
- package/packages/algolia/src/test/client-builder-product-search-extension.example.ts +85 -0
- package/packages/algolia/vite.config.ts +26 -0
- package/packages/algolia/vitest.config.mts +21 -0
- package/packages/commercetools/README.md +11 -0
- package/{core → packages/commercetools}/eslint.config.mjs +2 -2
- package/packages/commercetools/package.json +17 -0
- package/{providers → packages}/commercetools/project.json +7 -8
- package/{providers/commercetools/src/providers/cart.provider.ts → packages/commercetools/src/capabilities/cart.capability.ts} +68 -194
- package/{providers/commercetools/src/providers/category.provider.ts → packages/commercetools/src/capabilities/category.capability.ts} +26 -66
- package/{providers/commercetools/src/providers/checkout.provider.ts → packages/commercetools/src/capabilities/checkout.capability.ts} +51 -323
- package/{providers/commercetools/src/providers/identity.provider.ts → packages/commercetools/src/capabilities/identity.capability.ts} +36 -16
- package/packages/commercetools/src/capabilities/index.ts +15 -0
- package/{providers/commercetools/src/providers/inventory.provider.ts → packages/commercetools/src/capabilities/inventory.capability.ts} +14 -32
- package/packages/commercetools/src/capabilities/order-search.capability.ts +135 -0
- package/packages/commercetools/src/capabilities/order.capability.ts +67 -0
- package/{providers/commercetools/src/providers/price.provider.ts → packages/commercetools/src/capabilities/price.capability.ts} +38 -52
- package/{providers/commercetools/src/providers/product-associations.provider.ts → packages/commercetools/src/capabilities/product-associations.capability.ts} +40 -105
- package/{providers/commercetools/src/providers/product-list.provider.ts → packages/commercetools/src/capabilities/product-list.capability.ts} +39 -24
- package/{providers/commercetools/src/providers/product-reviews.provider.ts → packages/commercetools/src/capabilities/product-reviews.capability.ts} +35 -15
- package/{providers/commercetools/src/providers/product-search.provider.ts → packages/commercetools/src/capabilities/product-search.capability.ts} +18 -171
- package/packages/commercetools/src/capabilities/product.capability.ts +133 -0
- package/{providers/commercetools/src/providers/profile.provider.ts → packages/commercetools/src/capabilities/profile.capability.ts} +28 -74
- package/{providers/commercetools/src/providers/store.provider.ts → packages/commercetools/src/capabilities/store.capability.ts} +14 -32
- package/packages/commercetools/src/core/capability-descriptors.ts +324 -0
- package/{providers → packages}/commercetools/src/core/client.ts +2 -2
- package/packages/commercetools/src/core/initialize.ts +58 -0
- package/packages/commercetools/src/core/initialize.types.ts +174 -0
- package/packages/commercetools/src/factories/cart/cart.factory.ts +142 -0
- package/packages/commercetools/src/factories/category/category.factory.ts +77 -0
- package/packages/commercetools/src/factories/checkout/checkout-initializer-overrides.example.ts +94 -0
- package/packages/commercetools/src/factories/checkout/checkout.factory.ts +338 -0
- package/packages/commercetools/src/factories/identity/identity.factory.ts +26 -0
- package/packages/commercetools/src/factories/inventory/inventory.factory.ts +49 -0
- package/packages/commercetools/src/factories/order/order.factory.ts +149 -0
- package/packages/commercetools/src/factories/order-search/order-search.factory.ts +108 -0
- package/packages/commercetools/src/factories/price/price.factory.ts +76 -0
- package/packages/commercetools/src/factories/product/product-capability-custom-method-only.example.ts +47 -0
- package/packages/commercetools/src/factories/product/product-capability-schema-signature-extension.example.ts +61 -0
- package/packages/commercetools/src/factories/product/product-factory-baseline.example.ts +14 -0
- package/packages/commercetools/src/factories/product/product-factory-schema-and-parse-extension.example.ts +35 -0
- package/packages/commercetools/src/factories/product/product-factory-schema-extension.example.ts +23 -0
- package/packages/commercetools/src/factories/product/product-initializer-factory-extension.example.ts +41 -0
- package/packages/commercetools/src/factories/product/product.factory.ts +220 -0
- package/packages/commercetools/src/factories/product/utils.example.ts +9 -0
- package/packages/commercetools/src/factories/product-associations/product-associations.factory.ts +103 -0
- package/packages/commercetools/src/factories/product-list/product-list.factory.ts +122 -0
- package/packages/commercetools/src/factories/product-reviews/product-reviews.factory.ts +81 -0
- package/packages/commercetools/src/factories/product-search/product-search.factory.ts +182 -0
- package/packages/commercetools/src/factories/profile/profile.factory.ts +94 -0
- package/packages/commercetools/src/factories/store/store.factory.ts +49 -0
- package/packages/commercetools/src/index.ts +30 -0
- package/packages/commercetools/src/schema/capabilities.schema.ts +260 -0
- package/{providers → packages}/commercetools/src/test/caching.spec.ts +24 -8
- package/packages/commercetools/src/test/client-builder-merge-extensions.example.ts +125 -0
- package/{providers/algolia → packages/commercetools}/tsconfig.json +1 -1
- package/{core → packages/commercetools}/tsconfig.lib.json +1 -1
- package/packages/commercetools/tsconfig.spec.json +28 -0
- package/packages/commercetools/vite.config.ts +26 -0
- package/packages/commercetools/vitest.config.mts +21 -0
- package/{providers/fake → packages/core}/eslint.config.mjs +2 -1
- package/{core → packages/core}/package.json +7 -7
- package/packages/core/project.json +33 -0
- package/{core/src/providers/analytics.provider.ts → packages/core/src/capabilities/analytics.capability.ts} +8 -8
- package/{core/src/providers/base.provider.ts → packages/core/src/capabilities/base.capability.ts} +2 -2
- package/{core/src/providers/cart.provider.ts → packages/core/src/capabilities/cart.capability.ts} +13 -11
- package/{core/src/providers/category.provider.ts → packages/core/src/capabilities/category.capability.ts} +12 -10
- package/{core/src/providers/checkout.provider.ts → packages/core/src/capabilities/checkout.capability.ts} +15 -11
- package/{core/src/providers/identity.provider.ts → packages/core/src/capabilities/identity.capability.ts} +8 -8
- package/packages/core/src/capabilities/index.ts +18 -0
- package/{core/src/providers/inventory.provider.ts → packages/core/src/capabilities/inventory.capability.ts} +5 -5
- package/{core/src/providers/order-search.provider.ts → packages/core/src/capabilities/order-search.capability.ts} +5 -3
- package/{core/src/providers/order.provider.ts → packages/core/src/capabilities/order.capability.ts} +5 -5
- package/{core/src/providers/price.provider.ts → packages/core/src/capabilities/price.capability.ts} +6 -6
- package/{core/src/providers/product-associations.provider.ts → packages/core/src/capabilities/product-associations.capability.ts} +7 -5
- package/{core/src/providers/product-list.provider.ts → packages/core/src/capabilities/product-list.capability.ts} +14 -9
- package/{core/src/providers/product-recommendations.provider.ts → packages/core/src/capabilities/product-recommendations.capability.ts} +21 -21
- package/{core/src/providers/product-reviews.provider.ts → packages/core/src/capabilities/product-reviews.capability.ts} +9 -5
- package/packages/core/src/capabilities/product-search.capability.ts +48 -0
- package/{core/src/providers/product.provider.ts → packages/core/src/capabilities/product.capability.ts} +7 -7
- package/{core/src/providers/profile.provider.ts → packages/core/src/capabilities/profile.capability.ts} +9 -9
- package/{core/src/providers/store.provider.ts → packages/core/src/capabilities/store.capability.ts} +3 -3
- package/packages/core/src/client/client-builder.ts +131 -0
- package/packages/core/src/client/client.ts +35 -0
- package/{core → packages/core}/src/decorators/reactionary.decorator.ts +7 -7
- package/packages/core/src/factories/cart.factory.ts +40 -0
- package/packages/core/src/factories/category.factory.ts +40 -0
- package/packages/core/src/factories/checkout.factory.ts +59 -0
- package/packages/core/src/factories/identity.factory.ts +26 -0
- package/packages/core/src/factories/index.ts +15 -0
- package/packages/core/src/factories/inventory.factory.ts +26 -0
- package/packages/core/src/factories/order-search.factory.ts +33 -0
- package/packages/core/src/factories/order.factory.ts +21 -0
- package/packages/core/src/factories/price.factory.ts +29 -0
- package/packages/core/src/factories/product-associations.factory.ts +30 -0
- package/packages/core/src/factories/product-list.factory.ts +82 -0
- package/packages/core/src/factories/product-reviews.factory.ts +58 -0
- package/packages/core/src/factories/product-search.factory.ts +31 -0
- package/packages/core/src/factories/product.factory.ts +21 -0
- package/packages/core/src/factories/profile.factory.ts +23 -0
- package/packages/core/src/factories/store.factory.ts +21 -0
- package/packages/core/src/index.ts +8 -0
- package/packages/core/src/test/client-builder.spec.ts +141 -0
- package/{core → packages/core}/src/test/reactionary.decorator.spec.ts +27 -27
- package/{providers/meilisearch → packages/core}/tsconfig.json +1 -1
- package/{providers/medusa → packages/core}/tsconfig.lib.json +1 -2
- package/packages/core/tsconfig.spec.json +28 -0
- package/packages/core/vite.config.ts +26 -0
- package/packages/core/vitest.config.mts +21 -0
- package/packages/fake/README.md +11 -0
- package/{providers/algolia → packages/fake}/eslint.config.mjs +2 -1
- package/{providers → packages}/fake/package.json +6 -4
- package/{providers → packages}/fake/project.json +7 -8
- package/{providers/fake/src/providers/analytics.provider.ts → packages/fake/src/capabilities/analytics.capability.ts} +2 -2
- package/{providers/fake/src/providers/cart.provider.ts → packages/fake/src/capabilities/cart.capability.ts} +24 -15
- package/packages/fake/src/capabilities/category.capability.ts +199 -0
- package/{providers/fake/src/providers/checkout.provider.ts → packages/fake/src/capabilities/checkout.capability.ts} +40 -21
- package/{providers/fake/src/providers/identity.provider.ts → packages/fake/src/capabilities/identity.capability.ts} +40 -34
- package/packages/fake/src/capabilities/index.ts +15 -0
- package/packages/fake/src/capabilities/inventory.capability.ts +74 -0
- package/packages/fake/src/capabilities/order-search.capability.ts +86 -0
- package/{providers/fake/src/providers/order.provider.ts → packages/fake/src/capabilities/order.capability.ts} +22 -38
- package/{providers/fake/src/providers/price.provider.ts → packages/fake/src/capabilities/price.capability.ts} +42 -34
- package/{providers/fake/src/providers/product-associations.provider.ts → packages/fake/src/capabilities/product-associations.capability.ts} +24 -11
- package/{providers/fake/src/providers/product-reviews.provider.ts → packages/fake/src/capabilities/product-reviews.capability.ts} +72 -70
- package/{providers/fake/src/providers/product-search.provider.ts → packages/fake/src/capabilities/product-search.capability.ts} +44 -71
- package/{providers/fake/src/providers/product.provider.ts → packages/fake/src/capabilities/product.capability.ts} +35 -33
- package/packages/fake/src/capabilities/profile.capability.ts +154 -0
- package/packages/fake/src/capabilities/store.capability.ts +72 -0
- package/packages/fake/src/core/initialize.ts +274 -0
- package/packages/fake/src/core/initialize.types.ts +164 -0
- package/packages/fake/src/factories/cart/cart.factory.ts +34 -0
- package/packages/fake/src/factories/category/category.factory.ts +40 -0
- package/packages/fake/src/factories/checkout/checkout.factory.ts +53 -0
- package/packages/fake/src/factories/identity/identity.factory.ts +25 -0
- package/packages/fake/src/factories/index.ts +14 -0
- package/packages/fake/src/factories/inventory/inventory.factory.ts +25 -0
- package/packages/fake/src/factories/order/order.factory.ts +22 -0
- package/packages/fake/src/factories/order-search/order-search.factory.ts +27 -0
- package/packages/fake/src/factories/price/price.factory.ts +26 -0
- package/packages/fake/src/factories/product/product.factory.ts +22 -0
- package/packages/fake/src/factories/product-associations/product-associations.factory.ts +25 -0
- package/packages/fake/src/factories/product-reviews/product-reviews.factory.ts +53 -0
- package/packages/fake/src/factories/product-search/product-search.factory.ts +27 -0
- package/packages/fake/src/factories/profile/profile.factory.ts +22 -0
- package/packages/fake/src/factories/store/store.factory.ts +22 -0
- package/{providers/algolia → packages/fake}/src/index.ts +4 -3
- package/packages/fake/src/schema/capabilities.schema.ts +178 -0
- package/{providers/fake/src/test/cart.provider.spec.ts → packages/fake/src/test/cart.capability.spec.ts} +24 -7
- package/{providers/fake/src/test/category.provider.spec.ts → packages/fake/src/test/category.capability.spec.ts} +7 -4
- package/{providers/fake/src/test/checkout.provider.spec.ts → packages/fake/src/test/checkout.capability.spec.ts} +15 -5
- package/packages/fake/src/test/client-builder-product-extension.example.ts +75 -0
- package/{providers/fake/src/test/order-search.provider.spec.ts → packages/fake/src/test/order-search.capability.spec.ts} +7 -10
- package/{providers/fake/src/test/order.provider.spec.ts → packages/fake/src/test/order.capability.spec.ts} +7 -9
- package/{providers/fake/src/test/price.provider.spec.ts → packages/fake/src/test/price.capability.spec.ts} +6 -4
- package/{providers/fake/src/test/product.provider.spec.ts → packages/fake/src/test/product.capability.spec.ts} +10 -4
- package/{providers/fake/src/test/profile.provider.spec.ts → packages/fake/src/test/profile.capability.spec.ts} +7 -5
- package/{providers/commercetools → packages/fake}/tsconfig.json +1 -1
- package/packages/fake/tsconfig.lib.json +23 -0
- package/packages/fake/tsconfig.spec.json +28 -0
- package/packages/fake/vite.config.ts +26 -0
- package/packages/fake/vitest.config.mts +21 -0
- package/packages/google-analytics/eslint.config.mjs +23 -0
- package/{providers → packages}/google-analytics/package.json +7 -5
- package/{providers → packages}/google-analytics/project.json +5 -5
- package/{providers/google-analytics/src/providers/analytics.provider.ts → packages/google-analytics/src/capabilities/analytics.capability.ts} +2 -2
- package/packages/google-analytics/src/core/initialize.ts +41 -0
- package/packages/google-analytics/src/core/initialize.types.ts +47 -0
- package/{providers → packages}/google-analytics/src/index.ts +2 -1
- package/packages/google-analytics/src/schema/capabilities.schema.ts +36 -0
- package/{providers/google-analytics/src/test/analytics.provider.spec.ts → packages/google-analytics/src/test/analytics.capability.spec.ts} +7 -7
- package/packages/google-analytics/tsconfig.json +24 -0
- package/packages/google-analytics/tsconfig.lib.json +23 -0
- package/packages/google-analytics/tsconfig.spec.json +28 -0
- package/{providers → packages}/google-analytics/vite.config.ts +2 -2
- package/{providers → packages}/google-analytics/vitest.config.mts +2 -2
- package/packages/medusa/README.md +11 -0
- package/packages/medusa/eslint.config.mjs +23 -0
- package/packages/medusa/package.json +17 -0
- package/{providers → packages}/medusa/project.json +7 -8
- package/{providers/medusa/src/providers/cart.provider.ts → packages/medusa/src/capabilities/cart.capability.ts} +34 -21
- package/{providers/medusa/src/providers/category.provider.ts → packages/medusa/src/capabilities/category.capability.ts} +31 -13
- package/{providers/medusa/src/providers/checkout.provider.ts → packages/medusa/src/capabilities/checkout.capability.ts} +43 -18
- package/{providers/medusa/src/providers/identity.provider.ts → packages/medusa/src/capabilities/identity.capability.ts} +3 -3
- package/{providers/medusa/src/providers/inventory.provider.ts → packages/medusa/src/capabilities/inventory.capability.ts} +22 -8
- package/{providers/medusa/src/providers/order-search.provider.ts → packages/medusa/src/capabilities/order-search.capability.ts} +17 -6
- package/{providers/medusa/src/providers/order.provider.ts → packages/medusa/src/capabilities/order.capability.ts} +18 -6
- package/{providers/medusa/src/providers/price.provider.ts → packages/medusa/src/capabilities/price.capability.ts} +27 -8
- package/{providers/medusa/src/providers/product-associations.provider.ts → packages/medusa/src/capabilities/product-associations.capability.ts} +20 -9
- package/{providers/medusa/src/providers/product-recommendations.provider.ts → packages/medusa/src/capabilities/product-recommendations.capability.ts} +3 -3
- package/{providers/medusa/src/providers/product-search.provider.ts → packages/medusa/src/capabilities/product-search.capability.ts} +20 -32
- package/{providers/medusa/src/providers/product.provider.ts → packages/medusa/src/capabilities/product.capability.ts} +48 -12
- package/{providers/medusa/src/providers/profile.provider.ts → packages/medusa/src/capabilities/profile.capability.ts} +37 -13
- package/packages/medusa/src/core/initialize.ts +330 -0
- package/packages/medusa/src/core/initialize.types.ts +184 -0
- package/packages/medusa/src/factories/cart/cart.factory.ts +34 -0
- package/packages/medusa/src/factories/category/category.factory.ts +37 -0
- package/packages/medusa/src/factories/checkout/checkout.factory.ts +50 -0
- package/packages/medusa/src/factories/identity/identity.factory.ts +22 -0
- package/packages/medusa/src/factories/index.ts +12 -0
- package/packages/medusa/src/factories/inventory/inventory.factory.ts +25 -0
- package/packages/medusa/src/factories/order/order.factory.ts +22 -0
- package/packages/medusa/src/factories/order-search/order-search.factory.ts +27 -0
- package/packages/medusa/src/factories/price/price.factory.ts +26 -0
- package/packages/medusa/src/factories/product/product.factory.ts +22 -0
- package/packages/medusa/src/factories/product-associations/product-associations.factory.ts +25 -0
- package/packages/medusa/src/factories/product-search/product-search.factory.ts +27 -0
- package/packages/medusa/src/factories/profile/profile.factory.ts +22 -0
- package/packages/medusa/src/index.ts +17 -0
- package/packages/medusa/src/schema/capabilities.schema.ts +231 -0
- package/{providers/medusa/src/test/cart.provider.spec.ts → packages/medusa/src/test/cart.capability.spec.ts} +20 -4
- package/{providers/medusa/src/test/category.provider.spec.ts → packages/medusa/src/test/category.capability.spec.ts} +7 -4
- package/{providers → packages}/medusa/src/test/checkout.spec.ts +9 -9
- package/{providers/medusa/src/test/identity.provider.spec.ts → packages/medusa/src/test/identity.capability.spec.ts} +3 -3
- package/{providers/medusa/src/test/inventory.provider.spec.ts → packages/medusa/src/test/inventory.capability.spec.ts} +6 -4
- package/{providers/medusa/src/test/large-cart.provider.spec.ts → packages/medusa/src/test/large-cart.capability.spec.ts} +14 -8
- package/{providers/medusa/src/test/price.provider.spec.ts → packages/medusa/src/test/price.capability.spec.ts} +10 -3
- package/{providers/medusa/src/test/product.provider.spec.ts → packages/medusa/src/test/product.capability.spec.ts} +6 -4
- package/{providers/medusa/src/test/search.provider.spec.ts → packages/medusa/src/test/search.capability.spec.ts} +20 -7
- package/{providers → packages}/medusa/src/utils/medusa-helpers.ts +1 -1
- package/packages/medusa/tsconfig.json +24 -0
- package/packages/medusa/tsconfig.lib.json +23 -0
- package/packages/medusa/tsconfig.spec.json +28 -0
- package/packages/medusa/vite.config.ts +26 -0
- package/packages/medusa/vitest.config.mts +21 -0
- package/packages/meilisearch/README.md +11 -0
- package/packages/meilisearch/eslint.config.mjs +23 -0
- package/packages/meilisearch/package.json +15 -0
- package/{providers → packages}/meilisearch/project.json +7 -8
- package/packages/meilisearch/src/capabilities/index.ts +3 -0
- package/{providers/meilisearch/src/providers/order-search.provider.ts → packages/meilisearch/src/capabilities/order-search.capability.ts} +22 -7
- package/{providers/meilisearch/src/providers/product-recommendations.provider.ts → packages/meilisearch/src/capabilities/product-recommendations.capability.ts} +3 -3
- package/{providers/meilisearch/src/providers/product-search.provider.ts → packages/meilisearch/src/capabilities/product-search.capability.ts} +25 -9
- package/packages/meilisearch/src/core/initialize.ts +94 -0
- package/packages/meilisearch/src/core/initialize.types.ts +119 -0
- package/packages/meilisearch/src/factories/index.ts +2 -0
- package/packages/meilisearch/src/factories/order-search/order-search.factory.ts +27 -0
- package/packages/meilisearch/src/factories/product-search/product-search.factory.ts +27 -0
- package/packages/meilisearch/src/index.ts +9 -0
- package/packages/meilisearch/src/schema/capabilities.schema.ts +98 -0
- package/packages/meilisearch/tsconfig.json +24 -0
- package/packages/meilisearch/tsconfig.lib.json +23 -0
- package/packages/meilisearch/tsconfig.spec.json +28 -0
- package/packages/meilisearch/vite.config.ts +26 -0
- package/packages/meilisearch/vitest.config.mts +21 -0
- package/tsconfig.base.json +13 -21
- package/core/project.json +0 -34
- package/core/src/client/client-builder.ts +0 -84
- package/core/src/client/client.ts +0 -35
- package/core/src/index.ts +0 -6
- package/core/src/providers/index.ts +0 -18
- package/core/src/providers/product-search.provider.ts +0 -61
- package/core/src/test/client-builder.spec.ts +0 -60
- package/core/tsconfig.json +0 -24
- package/core/tsconfig.spec.json +0 -4
- package/core/vitest.config.ts +0 -14
- package/providers/algolia/README.md +0 -56
- package/providers/algolia/project.json +0 -34
- package/providers/algolia/src/core/initialize.ts +0 -27
- package/providers/algolia/src/providers/index.ts +0 -3
- package/providers/algolia/src/providers/product-search.provider.ts +0 -236
- package/providers/algolia/src/schema/capabilities.schema.ts +0 -10
- package/providers/algolia/tsconfig.lib.json +0 -10
- package/providers/algolia/tsconfig.spec.json +0 -4
- package/providers/algolia/vitest.config.ts +0 -14
- package/providers/commercetools/README.md +0 -65
- package/providers/commercetools/eslint.config.mjs +0 -22
- package/providers/commercetools/package.json +0 -15
- package/providers/commercetools/src/core/initialize.ts +0 -174
- package/providers/commercetools/src/index.ts +0 -15
- package/providers/commercetools/src/providers/index.ts +0 -15
- package/providers/commercetools/src/providers/order-search.provider.ts +0 -229
- package/providers/commercetools/src/providers/order.provider.ts +0 -198
- package/providers/commercetools/src/providers/product.provider.ts +0 -312
- package/providers/commercetools/src/schema/capabilities.schema.ts +0 -22
- package/providers/commercetools/tsconfig.lib.json +0 -10
- package/providers/commercetools/tsconfig.spec.json +0 -4
- package/providers/commercetools/vitest.config.ts +0 -15
- package/providers/fake/README.md +0 -23
- package/providers/fake/src/core/initialize.ts +0 -105
- package/providers/fake/src/providers/category.provider.ts +0 -184
- package/providers/fake/src/providers/index.ts +0 -15
- package/providers/fake/src/providers/inventory.provider.ts +0 -72
- package/providers/fake/src/providers/order-search.provider.ts +0 -78
- package/providers/fake/src/providers/profile.provider.ts +0 -147
- package/providers/fake/src/providers/store.provider.ts +0 -56
- package/providers/fake/src/schema/capabilities.schema.ts +0 -21
- package/providers/fake/tsconfig.json +0 -25
- package/providers/fake/tsconfig.lib.json +0 -11
- package/providers/fake/tsconfig.spec.json +0 -4
- package/providers/fake/vitest.config.ts +0 -14
- package/providers/google-analytics/src/core/initialize.ts +0 -16
- package/providers/google-analytics/src/schema/capabilities.schema.ts +0 -10
- package/providers/medusa/README.md +0 -30
- package/providers/medusa/TESTING.md +0 -98
- package/providers/medusa/eslint.config.mjs +0 -19
- package/providers/medusa/package.json +0 -15
- package/providers/medusa/src/core/initialize.ts +0 -87
- package/providers/medusa/src/index.ts +0 -15
- package/providers/medusa/src/schema/capabilities.schema.ts +0 -20
- package/providers/medusa/tsconfig.json +0 -24
- package/providers/medusa/tsconfig.spec.json +0 -4
- package/providers/medusa/vitest.config.ts +0 -15
- package/providers/meilisearch/README.md +0 -48
- package/providers/meilisearch/eslint.config.mjs +0 -22
- package/providers/meilisearch/package.json +0 -13
- package/providers/meilisearch/src/core/initialize.ts +0 -27
- package/providers/meilisearch/src/index.ts +0 -7
- package/providers/meilisearch/src/providers/index.ts +0 -2
- package/providers/meilisearch/src/schema/capabilities.schema.ts +0 -11
- package/providers/meilisearch/tsconfig.lib.json +0 -10
- package/providers/meilisearch/tsconfig.spec.json +0 -4
- package/providers/meilisearch/vitest.config.ts +0 -14
- package/providers/posthog/README.md +0 -7
- package/providers/posthog/eslint.config.mjs +0 -22
- package/providers/posthog/package.json +0 -12
- package/providers/posthog/src/core/initialize.ts +0 -11
- package/providers/posthog/src/index.ts +0 -4
- package/providers/posthog/src/schema/capabilities.schema.ts +0 -8
- package/providers/posthog/src/schema/configuration.schema.ts +0 -8
- package/providers/posthog/tsconfig.json +0 -21
- package/providers/posthog/tsconfig.lib.json +0 -9
- /package/{providers → packages}/algolia/src/schema/configuration.schema.ts +0 -0
- /package/{providers → packages}/algolia/src/schema/index.ts +0 -0
- /package/{providers → packages}/algolia/src/schema/product-recommendation.schema.ts +0 -0
- /package/{providers → packages}/algolia/src/schema/search.schema.ts +0 -0
- /package/{providers/google-analytics → packages/algolia}/tsconfig.json +0 -0
- /package/{providers/google-analytics → packages/algolia}/tsconfig.lib.json +0 -0
- /package/{providers/google-analytics → packages/algolia}/tsconfig.spec.json +0 -0
- /package/{providers → packages}/commercetools/src/core/token-cache.ts +0 -0
- /package/{providers → packages}/commercetools/src/schema/commercetools.schema.ts +0 -0
- /package/{providers → packages}/commercetools/src/schema/configuration.schema.ts +0 -0
- /package/{providers → packages}/commercetools/src/schema/session.schema.ts +0 -0
- /package/{providers → packages}/commercetools/src/test/identity.spec.ts +0 -0
- /package/{providers → packages}/commercetools/src/test/test-utils.ts +0 -0
- /package/{core → packages/core}/README.md +0 -0
- /package/{core → packages/core}/src/cache/cache.interface.ts +0 -0
- /package/{core → packages/core}/src/cache/index.ts +0 -0
- /package/{core → packages/core}/src/cache/memory-cache.ts +0 -0
- /package/{core → packages/core}/src/cache/noop-cache.ts +0 -0
- /package/{core → packages/core}/src/cache/redis-cache.ts +0 -0
- /package/{core → packages/core}/src/client/index.ts +0 -0
- /package/{core → packages/core}/src/decorators/index.ts +0 -0
- /package/{core → packages/core}/src/initialization.ts +0 -0
- /package/{core → packages/core}/src/metrics/metrics.ts +0 -0
- /package/{core → packages/core}/src/schemas/capabilities.schema.ts +0 -0
- /package/{core → packages/core}/src/schemas/errors/generic.error.ts +0 -0
- /package/{core → packages/core}/src/schemas/errors/index.ts +0 -0
- /package/{core → packages/core}/src/schemas/errors/invalid-input.error.ts +0 -0
- /package/{core → packages/core}/src/schemas/errors/invalid-output.error.ts +0 -0
- /package/{core → packages/core}/src/schemas/errors/not-found.error.ts +0 -0
- /package/{core → packages/core}/src/schemas/index.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/analytics.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/base.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/cart.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/category.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/checkout.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/cost.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/currency.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/identifiers.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/identity.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/index.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/inventory.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/order-search.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/order.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/payment.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/price.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/product-associations.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/product-list.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/product-recommendations.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/product-reviews.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/product-search.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/product.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/profile.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/shipping-method.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/models/store.model.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/analytics/index.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/analytics/product-add-to-cart.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/analytics/product-details-view.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/analytics/product-summary-click.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/analytics/product-summary-view.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/analytics/purchase.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/base.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/cart.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/checkout.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/identity.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/index.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/inventory.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/price.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/product-list.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/product-reviews.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/product.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/profile.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/mutations/search.mutation.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/analytics.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/base.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/cart.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/category.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/checkout.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/identity.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/index.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/inventory.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/order-search.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/order.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/price.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/product-associations.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/product-list.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/product-recommendations.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/product-reviews.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/product-search.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/product.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/profile.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/queries/store.query.ts +0 -0
- /package/{core → packages/core}/src/schemas/result.ts +0 -0
- /package/{core → packages/core}/src/schemas/session.schema.ts +0 -0
- /package/{core → packages/core}/src/test/request-context.spec.ts +0 -0
- /package/{core → packages/core}/src/zod-utils.ts +0 -0
- /package/{providers → packages}/fake/src/schema/configuration.schema.ts +0 -0
- /package/{providers → packages}/fake/src/test/test-utils.ts +0 -0
- /package/{providers → packages}/fake/src/utilities/jitter.ts +0 -0
- /package/{providers → packages}/fake/src/utilities/seed.ts +0 -0
- /package/{providers → packages}/google-analytics/README.md +0 -0
- /package/{providers → packages}/google-analytics/src/schema/configuration.schema.ts +0 -0
- /package/{providers → packages}/medusa/src/core/client.ts +0 -0
- /package/{providers → packages}/medusa/src/schema/configuration.schema.ts +0 -0
- /package/{providers → packages}/medusa/src/schema/medusa.schema.ts +0 -0
- /package/{providers → packages}/medusa/src/test/test-utils.ts +0 -0
- /package/{providers → packages}/meilisearch/src/schema/configuration.schema.ts +0 -0
- /package/{providers → packages}/meilisearch/src/schema/index.ts +0 -0
- /package/{providers → packages}/meilisearch/src/schema/search.schema.ts +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
ProductAssociationsCapability,
|
|
3
3
|
Reactionary,
|
|
4
4
|
type ProductAssociationsGetAccessoriesQuery,
|
|
5
5
|
type ProductAssociationsGetSparepartsQuery,
|
|
@@ -7,23 +7,36 @@ import {
|
|
|
7
7
|
type Result,
|
|
8
8
|
success,
|
|
9
9
|
type ProductAssociation,
|
|
10
|
+
type Cache,
|
|
10
11
|
type ProductSearchResultItem,
|
|
12
|
+
type RequestContext,
|
|
13
|
+
} from '@reactionary/core';
|
|
14
|
+
import type {
|
|
15
|
+
ProductAssociationsFactory,
|
|
16
|
+
ProductAssociationsFactoryOutput,
|
|
17
|
+
ProductAssociationsFactoryWithOutput,
|
|
11
18
|
} from '@reactionary/core';
|
|
12
19
|
import type { FakeConfiguration } from '../schema/configuration.schema.js';
|
|
13
|
-
import {
|
|
20
|
+
import { en, Faker } from '@faker-js/faker';
|
|
14
21
|
import { calcSeed } from '../utilities/seed.js';
|
|
22
|
+
import type { FakeProductAssociationsFactory } from '../factories/product-associations/product-associations.factory.js';
|
|
15
23
|
|
|
16
|
-
export class
|
|
24
|
+
export class FakeProductAssociationsCapability<
|
|
25
|
+
TFactory extends ProductAssociationsFactory = FakeProductAssociationsFactory,
|
|
26
|
+
> extends ProductAssociationsCapability<ProductAssociationsFactoryOutput<TFactory>> {
|
|
17
27
|
protected config: FakeConfiguration;
|
|
28
|
+
protected factory: ProductAssociationsFactoryWithOutput<TFactory>;
|
|
18
29
|
protected faker: Faker;
|
|
19
30
|
|
|
20
31
|
constructor(
|
|
21
32
|
config: FakeConfiguration,
|
|
22
|
-
cache:
|
|
23
|
-
context:
|
|
33
|
+
cache: Cache,
|
|
34
|
+
context: RequestContext,
|
|
35
|
+
factory: ProductAssociationsFactoryWithOutput<TFactory>,
|
|
24
36
|
) {
|
|
25
37
|
super(cache, context);
|
|
26
38
|
this.config = config;
|
|
39
|
+
this.factory = factory;
|
|
27
40
|
this.faker = new Faker({ locale: [en] });
|
|
28
41
|
}
|
|
29
42
|
|
|
@@ -35,7 +48,7 @@ export class FakeProductAssociationsProvider extends ProductAssociationsProvider
|
|
|
35
48
|
})
|
|
36
49
|
public override async getAccessories(
|
|
37
50
|
query: ProductAssociationsGetAccessoriesQuery
|
|
38
|
-
): Promise<Result<
|
|
51
|
+
): Promise<Result<ProductAssociationsFactoryOutput<TFactory>[]>> {
|
|
39
52
|
const associatedProducts = this.generateFakeAssociatedProducts(query.forProduct.key, query.numberOfAccessories || 4, 'accessory');
|
|
40
53
|
|
|
41
54
|
const result: ProductAssociation[] = associatedProducts.map(product => ({
|
|
@@ -46,7 +59,7 @@ export class FakeProductAssociationsProvider extends ProductAssociationsProvider
|
|
|
46
59
|
product,
|
|
47
60
|
} satisfies ProductAssociation));
|
|
48
61
|
|
|
49
|
-
return success(result);
|
|
62
|
+
return success(result.map((x) => this.factory.parseAssociation(this.context, x)));
|
|
50
63
|
}
|
|
51
64
|
|
|
52
65
|
@Reactionary({
|
|
@@ -57,7 +70,7 @@ export class FakeProductAssociationsProvider extends ProductAssociationsProvider
|
|
|
57
70
|
})
|
|
58
71
|
public override async getSpareparts(
|
|
59
72
|
query: ProductAssociationsGetSparepartsQuery
|
|
60
|
-
): Promise<Result<
|
|
73
|
+
): Promise<Result<ProductAssociationsFactoryOutput<TFactory>[]>> {
|
|
61
74
|
const associatedProducts = this.generateFakeAssociatedProducts(query.forProduct.key, query.numberOfSpareparts || 4, 'sparepart');
|
|
62
75
|
|
|
63
76
|
const result: ProductAssociation[] = associatedProducts.map(product => ({
|
|
@@ -68,7 +81,7 @@ export class FakeProductAssociationsProvider extends ProductAssociationsProvider
|
|
|
68
81
|
product,
|
|
69
82
|
} satisfies ProductAssociation));
|
|
70
83
|
|
|
71
|
-
return success(result);
|
|
84
|
+
return success(result.map((x) => this.factory.parseAssociation(this.context, x)));
|
|
72
85
|
}
|
|
73
86
|
|
|
74
87
|
@Reactionary({
|
|
@@ -79,7 +92,7 @@ export class FakeProductAssociationsProvider extends ProductAssociationsProvider
|
|
|
79
92
|
})
|
|
80
93
|
public override async getReplacements(
|
|
81
94
|
query: ProductAssociationsGetReplacementsQuery
|
|
82
|
-
): Promise<Result<
|
|
95
|
+
): Promise<Result<ProductAssociationsFactoryOutput<TFactory>[]>> {
|
|
83
96
|
const associatedProducts = this.generateFakeAssociatedProducts(query.forProduct.key, query.numberOfReplacements || 4, 'replacement');
|
|
84
97
|
|
|
85
98
|
const result: ProductAssociation[] = associatedProducts.map(product => ({
|
|
@@ -90,7 +103,7 @@ export class FakeProductAssociationsProvider extends ProductAssociationsProvider
|
|
|
90
103
|
product,
|
|
91
104
|
} satisfies ProductAssociation));
|
|
92
105
|
|
|
93
|
-
return success(result);
|
|
106
|
+
return success(result.map((x) => this.factory.parseAssociation(this.context, x)));
|
|
94
107
|
}
|
|
95
108
|
|
|
96
109
|
private generateFakeAssociatedProducts(baseProductKey: string, count: number, type: string): ProductSearchResultItem[] {
|
|
@@ -1,54 +1,61 @@
|
|
|
1
1
|
import {
|
|
2
|
-
ProductReviewsProvider,
|
|
3
|
-
Reactionary,
|
|
4
|
-
success,
|
|
5
|
-
error,
|
|
6
|
-
ProductReviewSchema,
|
|
7
2
|
ProductRatingSummarySchema,
|
|
8
3
|
ProductReviewPaginatedResultSchema,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
4
|
+
ProductReviewSchema,
|
|
5
|
+
ProductReviewsCapability,
|
|
6
|
+
Reactionary,
|
|
7
|
+
error,
|
|
8
|
+
success,
|
|
9
|
+
type Cache,
|
|
10
|
+
type InvalidInputError,
|
|
11
|
+
type ProductIdentifier,
|
|
12
|
+
type ProductRatingSummary,
|
|
13
|
+
type ProductReviewsFactory,
|
|
14
|
+
type ProductReviewsFactoryRatingOutput,
|
|
15
|
+
type ProductReviewsFactoryReviewOutput,
|
|
16
|
+
type ProductReviewsFactoryReviewPaginatedOutput,
|
|
17
|
+
type ProductReviewsFactoryWithOutput,
|
|
18
|
+
type ProductReviewsGetRatingSummaryQuery,
|
|
19
|
+
type ProductReviewsListQuery,
|
|
20
|
+
type ProductReview,
|
|
21
|
+
type ProductReviewMutationSubmit,
|
|
22
|
+
type RequestContext,
|
|
23
|
+
type Result,
|
|
23
24
|
} from '@reactionary/core';
|
|
24
25
|
import type { FakeConfiguration } from '../schema/configuration.schema.js';
|
|
25
26
|
import { base, en, Faker } from '@faker-js/faker';
|
|
26
27
|
import { calcSeed } from '../utilities/seed.js';
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
import type { FakeProductReviewsFactory } from '../factories/product-reviews/product-reviews.factory.js';
|
|
29
|
+
|
|
30
|
+
export class FakeProductReviewsCapability<
|
|
31
|
+
TFactory extends ProductReviewsFactory = FakeProductReviewsFactory,
|
|
32
|
+
> extends ProductReviewsCapability<
|
|
33
|
+
ProductReviewsFactoryRatingOutput<TFactory>,
|
|
34
|
+
ProductReviewsFactoryReviewPaginatedOutput<TFactory>,
|
|
35
|
+
ProductReviewsFactoryReviewOutput<TFactory>
|
|
36
|
+
> {
|
|
29
37
|
protected config: FakeConfiguration;
|
|
38
|
+
protected factory: ProductReviewsFactoryWithOutput<TFactory>;
|
|
30
39
|
private faker: Faker;
|
|
31
40
|
|
|
32
41
|
constructor(
|
|
33
42
|
config: FakeConfiguration,
|
|
34
43
|
cache: Cache,
|
|
35
|
-
context: RequestContext
|
|
44
|
+
context: RequestContext,
|
|
45
|
+
factory: ProductReviewsFactoryWithOutput<TFactory>,
|
|
36
46
|
) {
|
|
37
47
|
super(cache, context);
|
|
38
48
|
this.config = config;
|
|
39
|
-
this.
|
|
49
|
+
this.factory = factory;
|
|
50
|
+
this.faker = new Faker({ locale: [en, base] });
|
|
40
51
|
}
|
|
41
52
|
|
|
42
53
|
protected createReviewsForProduct(productIdentifier: ProductIdentifier): ProductReview[] {
|
|
43
54
|
const seed = calcSeed(productIdentifier.key);
|
|
44
|
-
this.faker.seed(seed);
|
|
45
|
-
|
|
46
|
-
const hasAnyReviews = this.faker.datatype.boolean({ probability: 0.5 }); // 50% chance that the product has reviews
|
|
47
|
-
if (!hasAnyReviews) {
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
55
|
+
this.faker.seed(seed);
|
|
50
56
|
|
|
51
|
-
|
|
57
|
+
const hasAnyReviews = this.faker.datatype.boolean({ probability: 0.5 });
|
|
58
|
+
if (!hasAnyReviews || productIdentifier.key === 'unknown-product-id') {
|
|
52
59
|
return [];
|
|
53
60
|
}
|
|
54
61
|
|
|
@@ -56,9 +63,9 @@ export class FakeProductReviewsProvider extends ProductReviewsProvider {
|
|
|
56
63
|
const totalReviews = this.faker.number.int({ min: 1, max: 20 });
|
|
57
64
|
|
|
58
65
|
for (let i = 0; i < totalReviews; i++) {
|
|
59
|
-
const hasReply = this.faker.datatype.boolean({ probability: 0.3 });
|
|
66
|
+
const hasReply = this.faker.datatype.boolean({ probability: 0.3 });
|
|
60
67
|
|
|
61
|
-
|
|
68
|
+
reviews.push({
|
|
62
69
|
identifier: {
|
|
63
70
|
key: `fake-review-${productIdentifier.key}-${i}`,
|
|
64
71
|
},
|
|
@@ -69,48 +76,38 @@ export class FakeProductReviewsProvider extends ProductReviewsProvider {
|
|
|
69
76
|
title: this.faker.lorem.sentence(),
|
|
70
77
|
content: this.faker.lorem.paragraphs({ min: 1, max: 5 }),
|
|
71
78
|
createdAt: this.faker.date.past({ years: 1 }).toISOString(),
|
|
72
|
-
updatedAt: this.faker.datatype.boolean()
|
|
79
|
+
updatedAt: this.faker.datatype.boolean()
|
|
80
|
+
? this.faker.date.recent({ days: 30 }).toISOString()
|
|
81
|
+
: undefined,
|
|
73
82
|
verified: this.faker.datatype.boolean(),
|
|
74
83
|
reply: hasReply ? this.faker.lorem.sentences(2) : undefined,
|
|
75
84
|
repliedAt: hasReply ? this.faker.date.recent({ days: 7 }).toISOString() : undefined,
|
|
76
|
-
|
|
77
|
-
} satisfies ProductReview;
|
|
78
|
-
|
|
79
|
-
reviews.push(review);
|
|
85
|
+
});
|
|
80
86
|
}
|
|
81
87
|
|
|
82
|
-
return reviews.sort(
|
|
88
|
+
return reviews.sort(
|
|
89
|
+
(a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(),
|
|
90
|
+
);
|
|
83
91
|
}
|
|
84
92
|
|
|
85
|
-
|
|
86
93
|
@Reactionary({
|
|
87
94
|
outputSchema: ProductRatingSummarySchema,
|
|
88
95
|
cache: true,
|
|
89
96
|
cacheTimeToLiveInSeconds: 300,
|
|
90
97
|
currencyDependentCaching: false,
|
|
91
|
-
localeDependentCaching: false
|
|
98
|
+
localeDependentCaching: false,
|
|
92
99
|
})
|
|
93
100
|
public override async getRatingSummary(
|
|
94
|
-
query: ProductReviewsGetRatingSummaryQuery
|
|
95
|
-
): Promise<Result<
|
|
96
|
-
|
|
101
|
+
query: ProductReviewsGetRatingSummaryQuery,
|
|
102
|
+
): Promise<Result<ProductReviewsFactoryRatingOutput<TFactory>>> {
|
|
97
103
|
const reviews = this.createReviewsForProduct(query.product);
|
|
98
104
|
if (reviews.length === 0) {
|
|
99
|
-
// If there are no reviews, return a summary with averageRating 0 and totalRatings 0
|
|
100
105
|
const emptySummary = this.createEmptyProductRatingSummary({ product: query.product });
|
|
101
|
-
return success(emptySummary);
|
|
106
|
+
return success(this.factory.parseRatingSummary(this.context, emptySummary));
|
|
102
107
|
}
|
|
103
108
|
|
|
104
109
|
const totalRatings = reviews.length;
|
|
105
|
-
const averageRating = reviews.reduce((sum, review) => sum + review.rating, 0) /
|
|
106
|
-
|
|
107
|
-
const ratingDistribution = {
|
|
108
|
-
'1': reviews.filter(x => x.rating === 1).length,
|
|
109
|
-
'2': reviews.filter(x => x.rating === 2).length,
|
|
110
|
-
'3': reviews.filter(x => x.rating === 3).length,
|
|
111
|
-
'4': reviews.filter(x => x.rating === 4).length,
|
|
112
|
-
'5': reviews.filter(x => x.rating === 5).length,
|
|
113
|
-
};
|
|
110
|
+
const averageRating = reviews.reduce((sum, review) => sum + review.rating, 0) / totalRatings;
|
|
114
111
|
|
|
115
112
|
const summary: ProductRatingSummary = {
|
|
116
113
|
identifier: {
|
|
@@ -118,10 +115,16 @@ export class FakeProductReviewsProvider extends ProductReviewsProvider {
|
|
|
118
115
|
},
|
|
119
116
|
averageRating,
|
|
120
117
|
totalRatings,
|
|
121
|
-
ratingDistribution
|
|
118
|
+
ratingDistribution: {
|
|
119
|
+
'1': reviews.filter((x) => x.rating === 1).length,
|
|
120
|
+
'2': reviews.filter((x) => x.rating === 2).length,
|
|
121
|
+
'3': reviews.filter((x) => x.rating === 3).length,
|
|
122
|
+
'4': reviews.filter((x) => x.rating === 4).length,
|
|
123
|
+
'5': reviews.filter((x) => x.rating === 5).length,
|
|
124
|
+
},
|
|
122
125
|
};
|
|
123
126
|
|
|
124
|
-
return success(summary);
|
|
127
|
+
return success(this.factory.parseRatingSummary(this.context, summary));
|
|
125
128
|
}
|
|
126
129
|
|
|
127
130
|
@Reactionary({
|
|
@@ -129,19 +132,18 @@ export class FakeProductReviewsProvider extends ProductReviewsProvider {
|
|
|
129
132
|
cache: true,
|
|
130
133
|
cacheTimeToLiveInSeconds: 60,
|
|
131
134
|
currencyDependentCaching: false,
|
|
132
|
-
localeDependentCaching: true
|
|
135
|
+
localeDependentCaching: true,
|
|
133
136
|
})
|
|
134
137
|
public override async findReviews(
|
|
135
|
-
query: ProductReviewsListQuery
|
|
136
|
-
): Promise<Result<
|
|
138
|
+
query: ProductReviewsListQuery,
|
|
139
|
+
): Promise<Result<ProductReviewsFactoryReviewPaginatedOutput<TFactory>>> {
|
|
137
140
|
const pageSize = query.paginationOptions?.pageSize ?? 20;
|
|
138
141
|
const pageNumber = query.paginationOptions?.pageNumber ?? 1;
|
|
139
142
|
|
|
140
143
|
const reviews = this.createReviewsForProduct(query.product);
|
|
141
|
-
|
|
142
144
|
const returnedReviews = reviews.slice((pageNumber - 1) * pageSize, pageNumber * pageSize);
|
|
143
145
|
|
|
144
|
-
const
|
|
146
|
+
const result = {
|
|
145
147
|
items: returnedReviews,
|
|
146
148
|
totalCount: reviews.length,
|
|
147
149
|
pageSize,
|
|
@@ -149,7 +151,7 @@ export class FakeProductReviewsProvider extends ProductReviewsProvider {
|
|
|
149
151
|
totalPages: Math.ceil(reviews.length / Math.max(pageSize, 1)),
|
|
150
152
|
};
|
|
151
153
|
|
|
152
|
-
return success(
|
|
154
|
+
return success(this.factory.parseReviewPaginatedResult(this.context, result));
|
|
153
155
|
}
|
|
154
156
|
|
|
155
157
|
@Reactionary({
|
|
@@ -157,18 +159,18 @@ export class FakeProductReviewsProvider extends ProductReviewsProvider {
|
|
|
157
159
|
cache: false,
|
|
158
160
|
cacheTimeToLiveInSeconds: 0,
|
|
159
161
|
currencyDependentCaching: false,
|
|
160
|
-
localeDependentCaching: false
|
|
162
|
+
localeDependentCaching: false,
|
|
161
163
|
})
|
|
162
164
|
public override async submitReview(
|
|
163
|
-
mutation: ProductReviewMutationSubmit
|
|
164
|
-
): Promise<Result<
|
|
165
|
-
// For fake provider, we always succeed and return a fake review
|
|
166
|
-
|
|
165
|
+
mutation: ProductReviewMutationSubmit,
|
|
166
|
+
): Promise<Result<ProductReviewsFactoryReviewOutput<TFactory>>> {
|
|
167
167
|
if (this.context.session.identityContext.identity.type !== 'Registered') {
|
|
168
|
-
return error<InvalidInputError>({
|
|
168
|
+
return error<InvalidInputError>({
|
|
169
|
+
type: 'InvalidInput',
|
|
170
|
+
error: 'Only registered users can submit reviews.',
|
|
171
|
+
});
|
|
169
172
|
}
|
|
170
173
|
|
|
171
|
-
|
|
172
174
|
const review: ProductReview = {
|
|
173
175
|
identifier: {
|
|
174
176
|
key: this.faker.string.uuid(),
|
|
@@ -182,6 +184,6 @@ export class FakeProductReviewsProvider extends ProductReviewsProvider {
|
|
|
182
184
|
verified: this.faker.datatype.boolean(),
|
|
183
185
|
};
|
|
184
186
|
|
|
185
|
-
return success(review);
|
|
187
|
+
return success(this.factory.parseReview(this.context, review));
|
|
186
188
|
}
|
|
187
189
|
}
|
|
@@ -1,45 +1,47 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ImageSchema,
|
|
3
|
-
|
|
3
|
+
ProductSearchCapability,
|
|
4
4
|
ProductSearchQueryByTermSchema,
|
|
5
5
|
ProductSearchResultItemSchema,
|
|
6
6
|
ProductSearchResultSchema,
|
|
7
7
|
Reactionary,
|
|
8
8
|
success,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
ProductSearchResultItemVariant,
|
|
21
|
-
|
|
22
|
-
Result,
|
|
23
|
-
} from '@reactionary/core';
|
|
24
|
-
import type {
|
|
25
|
-
RequestContext,
|
|
26
|
-
ProductSearchQueryByTerm,
|
|
9
|
+
type Cache,
|
|
10
|
+
type FacetIdentifier,
|
|
11
|
+
type FacetValueIdentifier,
|
|
12
|
+
type ProductSearchFactory,
|
|
13
|
+
type ProductSearchFactoryOutput,
|
|
14
|
+
type ProductSearchFactoryWithOutput,
|
|
15
|
+
type ProductSearchQueryByTerm,
|
|
16
|
+
type ProductSearchQueryCreateNavigationFilter,
|
|
17
|
+
type ProductSearchResult,
|
|
18
|
+
type ProductSearchResultFacet,
|
|
19
|
+
type ProductSearchResultItem,
|
|
20
|
+
type ProductSearchResultItemVariant,
|
|
21
|
+
type RequestContext,
|
|
22
|
+
type Result,
|
|
27
23
|
} from '@reactionary/core';
|
|
28
24
|
import type { FakeConfiguration } from '../schema/configuration.schema.js';
|
|
29
25
|
import { Faker, en, base } from '@faker-js/faker';
|
|
30
26
|
import { jitter } from '../utilities/jitter.js';
|
|
27
|
+
import type { FakeProductSearchFactory } from '../factories/product-search/product-search.factory.js';
|
|
31
28
|
|
|
32
|
-
export class
|
|
29
|
+
export class FakeProductSearchCapability<
|
|
30
|
+
TFactory extends ProductSearchFactory = FakeProductSearchFactory,
|
|
31
|
+
> extends ProductSearchCapability<ProductSearchFactoryOutput<TFactory>> {
|
|
33
32
|
protected config: FakeConfiguration;
|
|
33
|
+
protected factory: ProductSearchFactoryWithOutput<TFactory>;
|
|
34
34
|
|
|
35
35
|
constructor(
|
|
36
36
|
config: FakeConfiguration,
|
|
37
|
-
cache:
|
|
38
|
-
context: RequestContext
|
|
37
|
+
cache: Cache,
|
|
38
|
+
context: RequestContext,
|
|
39
|
+
factory: ProductSearchFactoryWithOutput<TFactory>,
|
|
39
40
|
) {
|
|
40
41
|
super(cache, context);
|
|
41
42
|
|
|
42
43
|
this.config = config;
|
|
44
|
+
this.factory = factory;
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
@Reactionary({
|
|
@@ -47,25 +49,17 @@ export class FakeSearchProvider extends ProductSearchProvider {
|
|
|
47
49
|
outputSchema: ProductSearchResultSchema,
|
|
48
50
|
})
|
|
49
51
|
public override async queryByTerm(
|
|
50
|
-
payload: ProductSearchQueryByTerm
|
|
51
|
-
): Promise<Result<
|
|
52
|
+
payload: ProductSearchQueryByTerm,
|
|
53
|
+
): Promise<Result<ProductSearchFactoryOutput<TFactory>>> {
|
|
52
54
|
await jitter(this.config.jitter.mean, this.config.jitter.deviation);
|
|
53
55
|
|
|
54
56
|
const query = payload.search;
|
|
55
57
|
|
|
56
58
|
const querySpecificity =
|
|
57
|
-
20 -
|
|
58
|
-
query.term.length -
|
|
59
|
-
query.paginationOptions.pageNumber -
|
|
60
|
-
query.facets.length;
|
|
59
|
+
20 - query.term.length - query.paginationOptions.pageNumber - query.facets.length;
|
|
61
60
|
const totalProducts = 10 * querySpecificity;
|
|
62
|
-
const totalPages = Math.ceil(
|
|
63
|
-
|
|
64
|
-
);
|
|
65
|
-
const productsOnPage = Math.min(
|
|
66
|
-
totalProducts,
|
|
67
|
-
query.paginationOptions.pageSize
|
|
68
|
-
);
|
|
61
|
+
const totalPages = Math.ceil(totalProducts / query.paginationOptions.pageSize);
|
|
62
|
+
const productsOnPage = Math.min(totalProducts, query.paginationOptions.pageSize);
|
|
69
63
|
|
|
70
64
|
const productGenerator = new Faker({
|
|
71
65
|
seed: querySpecificity,
|
|
@@ -77,8 +71,8 @@ export class FakeSearchProvider extends ProductSearchProvider {
|
|
|
77
71
|
locale: [en, base],
|
|
78
72
|
});
|
|
79
73
|
|
|
80
|
-
const products =
|
|
81
|
-
const facets =
|
|
74
|
+
const products: ProductSearchResultItem[] = [];
|
|
75
|
+
const facets: ProductSearchResultFacet[] = [];
|
|
82
76
|
|
|
83
77
|
for (let i = 0; i < productsOnPage; i++) {
|
|
84
78
|
const srcUrl = productGenerator.image.urlPicsumPhotos({
|
|
@@ -93,12 +87,12 @@ export class FakeSearchProvider extends ProductSearchProvider {
|
|
|
93
87
|
altText: 'Fake product image',
|
|
94
88
|
height: 300,
|
|
95
89
|
width: 300,
|
|
96
|
-
}
|
|
90
|
+
});
|
|
97
91
|
|
|
98
92
|
products.push(
|
|
99
93
|
ProductSearchResultItemSchema.parse({
|
|
100
94
|
identifier: {
|
|
101
|
-
key:
|
|
95
|
+
key: `product_${productGenerator.commerce.isbn()}`,
|
|
102
96
|
},
|
|
103
97
|
name: productGenerator.commerce.productName(),
|
|
104
98
|
slug: productGenerator.lorem.slug(),
|
|
@@ -111,18 +105,16 @@ export class FakeSearchProvider extends ProductSearchProvider {
|
|
|
111
105
|
options: undefined,
|
|
112
106
|
} satisfies Partial<ProductSearchResultItemVariant>,
|
|
113
107
|
],
|
|
114
|
-
}
|
|
108
|
+
}),
|
|
115
109
|
);
|
|
116
110
|
}
|
|
117
111
|
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
for (const base of facetBase) {
|
|
112
|
+
for (const baseFacet of ['color', 'size']) {
|
|
121
113
|
const facet: ProductSearchResultFacet = {
|
|
122
114
|
identifier: {
|
|
123
|
-
key:
|
|
115
|
+
key: baseFacet,
|
|
124
116
|
},
|
|
125
|
-
name:
|
|
117
|
+
name: baseFacet,
|
|
126
118
|
values: [],
|
|
127
119
|
};
|
|
128
120
|
|
|
@@ -130,7 +122,7 @@ export class FakeSearchProvider extends ProductSearchProvider {
|
|
|
130
122
|
const valueKey = i.toString();
|
|
131
123
|
const isActive =
|
|
132
124
|
query.facets.find(
|
|
133
|
-
(x) => x.facet.key === facet.identifier.key && x.key === valueKey
|
|
125
|
+
(x) => x.facet.key === facet.identifier.key && x.key === valueKey,
|
|
134
126
|
) !== undefined;
|
|
135
127
|
|
|
136
128
|
facet.values.push({
|
|
@@ -149,7 +141,7 @@ export class FakeSearchProvider extends ProductSearchProvider {
|
|
|
149
141
|
facets.push(facet);
|
|
150
142
|
}
|
|
151
143
|
|
|
152
|
-
const result =
|
|
144
|
+
const result = {
|
|
153
145
|
identifier: {
|
|
154
146
|
term: query.term,
|
|
155
147
|
paginationOptions: {
|
|
@@ -159,19 +151,19 @@ export class FakeSearchProvider extends ProductSearchProvider {
|
|
|
159
151
|
facets: query.facets,
|
|
160
152
|
filters: [],
|
|
161
153
|
},
|
|
162
|
-
facets
|
|
154
|
+
facets,
|
|
163
155
|
items: products,
|
|
164
156
|
pageNumber: query.paginationOptions.pageNumber,
|
|
165
157
|
pageSize: query.paginationOptions.pageSize,
|
|
166
158
|
totalCount: totalProducts,
|
|
167
|
-
totalPages
|
|
168
|
-
} satisfies ProductSearchResult
|
|
159
|
+
totalPages,
|
|
160
|
+
} satisfies ProductSearchResult;
|
|
169
161
|
|
|
170
|
-
return success(result);
|
|
162
|
+
return success(this.factory.parseSearchResult(this.context, result, payload));
|
|
171
163
|
}
|
|
172
164
|
|
|
173
165
|
public override async createCategoryNavigationFilter(
|
|
174
|
-
payload: ProductSearchQueryCreateNavigationFilter
|
|
166
|
+
payload: ProductSearchQueryCreateNavigationFilter,
|
|
175
167
|
): Promise<Result<FacetValueIdentifier>> {
|
|
176
168
|
const facetIdentifier = {
|
|
177
169
|
key: 'category',
|
|
@@ -184,23 +176,4 @@ export class FakeSearchProvider extends ProductSearchProvider {
|
|
|
184
176
|
return success(facetValueIdentifier);
|
|
185
177
|
}
|
|
186
178
|
|
|
187
|
-
protected override parseFacetValue(
|
|
188
|
-
facetValueIdentifier: FacetValueIdentifier,
|
|
189
|
-
label: string,
|
|
190
|
-
count: number
|
|
191
|
-
): ProductSearchResultFacetValue {
|
|
192
|
-
throw new Error('Method not implemented.');
|
|
193
|
-
}
|
|
194
|
-
protected override parseFacet(
|
|
195
|
-
facetIdentifier: FacetIdentifier,
|
|
196
|
-
facetValue: unknown
|
|
197
|
-
): ProductSearchResultFacet {
|
|
198
|
-
throw new Error('Method not implemented.');
|
|
199
|
-
}
|
|
200
|
-
protected override parseVariant(
|
|
201
|
-
variant: unknown,
|
|
202
|
-
product: unknown
|
|
203
|
-
): ProductSearchResultItemVariant {
|
|
204
|
-
throw new Error('Method not implemented.');
|
|
205
|
-
}
|
|
206
179
|
}
|