medusa-product-helper 0.0.13 → 0.0.18

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 (29) hide show
  1. package/.medusa/server/src/admin/index.js +59 -117
  2. package/.medusa/server/src/admin/index.mjs +59 -117
  3. package/.medusa/server/src/api/store/product-helper/products/route.js +112 -0
  4. package/.medusa/server/src/api/store/product-helper/products/validators.js +3 -1
  5. package/.medusa/server/src/config/product-helper-options.js +15 -1
  6. package/.medusa/server/src/index.js +101 -0
  7. package/.medusa/server/src/providers/filter-providers/availability-provider.js +82 -0
  8. package/.medusa/server/src/providers/filter-providers/base-filter-provider.js +14 -0
  9. package/.medusa/server/src/providers/filter-providers/base-product-provider.js +59 -0
  10. package/.medusa/server/src/providers/filter-providers/category-provider.js +36 -0
  11. package/.medusa/server/src/providers/filter-providers/collection-provider.js +36 -0
  12. package/.medusa/server/src/providers/filter-providers/index.js +58 -0
  13. package/.medusa/server/src/providers/filter-providers/metadata-provider.js +69 -0
  14. package/.medusa/server/src/providers/filter-providers/price-range-provider.js +95 -0
  15. package/.medusa/server/src/providers/filter-providers/promotion-provider.js +134 -0
  16. package/.medusa/server/src/providers/filter-providers/promotion-window-provider.js +85 -0
  17. package/.medusa/server/src/providers/filter-providers/rating-provider.js +69 -0
  18. package/.medusa/server/src/services/dynamic-filter-service.js +525 -0
  19. package/.medusa/server/src/services/filter-provider-loader.js +107 -0
  20. package/.medusa/server/src/services/filter-provider-registry.js +43 -0
  21. package/.medusa/server/src/services/product-filter-service.js +183 -0
  22. package/.medusa/server/src/shared/product-metadata/utils.js +66 -116
  23. package/.medusa/server/src/utils/query-builders/product-filters.js +89 -111
  24. package/.medusa/server/src/utils/query-parser.js +51 -0
  25. package/.medusa/server/src/workflows/add-to-wishlist.js +12 -26
  26. package/.medusa/server/src/workflows/get-wishlist.js +53 -51
  27. package/.medusa/server/src/workflows/remove-from-wishlist.js +3 -8
  28. package/README.md +89 -0
  29. package/package.json +3 -3
@@ -82,6 +82,13 @@ const RatingSchema = zod_1.z.object({
82
82
  max: zod_1.z.number({ coerce: true }).min(0).max(5).default(5),
83
83
  require_reviews: zod_1.z.boolean().default(false),
84
84
  });
85
+ const FilterProviderConfigSchema = zod_1.z.union([
86
+ zod_1.z.string(), // File path or module name
87
+ zod_1.z.object({
88
+ path: zod_1.z.string(),
89
+ options: zod_1.z.record(zod_1.z.unknown()).optional(),
90
+ }),
91
+ ]);
85
92
  const ProductHelperOptionsSchema = zod_1.z.object({
86
93
  metadata: MetadataSchema.default({
87
94
  products: {
@@ -115,6 +122,11 @@ const ProductHelperOptionsSchema = zod_1.z.object({
115
122
  max: 5,
116
123
  require_reviews: false,
117
124
  }),
125
+ filterProviders: zod_1.z
126
+ .array(FilterProviderConfigSchema)
127
+ .optional()
128
+ .default([]),
129
+ disableBuiltInProviders: zod_1.z.array(zod_1.z.string()).optional().default([]),
118
130
  });
119
131
  exports.DEFAULT_PRODUCT_HELPER_OPTIONS = normalizeProductHelperOptions({});
120
132
  const PLUGIN_NAME = "medusa-product-helper";
@@ -132,6 +144,8 @@ function normalizeProductHelperOptions(input) {
132
144
  descriptors: (0, utils_2.normalizeMetadataDescriptors)(parsed.metadata.categories.descriptors),
133
145
  },
134
146
  },
147
+ filterProviders: parsed.filterProviders ?? [],
148
+ disableBuiltInProviders: parsed.disableBuiltInProviders ?? [],
135
149
  };
136
150
  }
137
151
  function resolveProductHelperOptions(configModule) {
@@ -149,4 +163,4 @@ function resolveProductHelperOptions(configModule) {
149
163
  }
150
164
  return exports.DEFAULT_PRODUCT_HELPER_OPTIONS;
151
165
  }
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1oZWxwZXItb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb25maWcvcHJvZHVjdC1oZWxwZXItb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxS0Esc0VBc0JDO0FBRUQsa0VBbUJDO0FBaE5ELHFEQUFvRDtBQUNwRCw2QkFBdUI7QUFFdkIsNERBR3lDO0FBQ3pDLDREQUErRTtBQUUvRSxNQUFNLGdCQUFnQixHQUFHLE9BQUM7S0FDdkIsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDbEQsYUFBYSxFQUFFLE9BQUM7U0FDYixNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixNQUFNLENBQUMsQ0FBQyxFQUFFLG1DQUFtQyxDQUFDO1NBQzlDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3pDLFFBQVEsRUFBRTtJQUNiLEdBQUcsRUFBRSxPQUFDO1NBQ0gsTUFBTSxDQUFDO1FBQ04sTUFBTSxFQUFFLElBQUk7UUFDWixrQkFBa0IsRUFBRSw0QkFBNEI7S0FDakQsQ0FBQztTQUNELFdBQVcsRUFBRTtTQUNiLFFBQVEsRUFBRTtTQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDaEIsR0FBRyxFQUFFLE9BQUM7U0FDSCxNQUFNLENBQUM7UUFDTixNQUFNLEVBQUUsSUFBSTtRQUNaLGtCQUFrQixFQUFFLDRCQUE0QjtLQUNqRCxDQUFDO1NBQ0QsV0FBVyxFQUFFO1NBQ2IsUUFBUSxFQUFFO1NBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQztDQUNqQixDQUFDO0tBQ0QsTUFBTSxDQUNMLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFL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
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1oZWxwZXItb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb25maWcvcHJvZHVjdC1oZWxwZXItb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzTEEsc0VBd0JDO0FBRUQsa0VBbUJDO0FBbk9ELHFEQUFvRDtBQUNwRCw2QkFBdUI7QUFFdkIsNERBR3lDO0FBQ3pDLDREQUErRTtBQUUvRSxNQUFNLGdCQUFnQixHQUFHLE9BQUM7S0FDdkIsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDbEQsYUFBYSxFQUFFLE9BQUM7U0FDYixNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixNQUFNLENBQUMsQ0FBQyxFQUFFLG1DQUFtQyxDQUFDO1NBQzlDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3pDLFFBQVEsRUFBRTtJQUNiLEdBQUcsRUFBRSxPQUFDO1NBQ0gsTUFBTSxDQUFDO1FBQ04sTUFBTSxFQUFFLElBQUk7UUFDWixrQkFBa0IsRUFBRSw0QkFBNEI7S0FDakQsQ0FBQztTQUNELFdBQVcsRUFBRTtTQUNiLFFBQVEsRUFBRTtTQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDaEIsR0FBRyxFQUFFLE9BQUM7U0FDSCxNQUFNLENBQUM7UUFDTixNQUFNLEVBQUUsSUFBSTtRQUNaLGtCQUFrQixFQUFFLDRCQUE0QjtLQUNqRCxDQUFDO1NBQ0QsV0FBVyxFQUFFO1NBQ2IsUUFBUSxFQUFFO1NBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQztDQUNqQixDQUFDO0tBQ0QsTUFBTSxDQUNMLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFL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
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ /**
3
+ * Medusa Product Helper Plugin Entry Point
4
+ *
5
+ * This file exports all plugin resources including modules, helpers, workflows,
6
+ * and filter provider infrastructure.
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DYNAMIC_FILTER_SERVICE = exports.FILTER_PROVIDER_REGISTRY = exports.DEFAULT_PRODUCT_HELPER_OPTIONS = exports.normalizeProductHelperOptions = exports.resolveProductHelperOptions = exports.BUILT_IN_PROVIDERS = exports.getBuiltInProviderIdentifiers = exports.registerBuiltInProviders = exports.BaseProductFilterProvider = exports.RatingFilterProvider = exports.AvailabilityFilterProvider = exports.PromotionFilterProvider = exports.PromotionWindowFilterProvider = exports.PriceRangeFilterProvider = exports.MetadataFilterProvider = exports.CollectionFilterProvider = exports.CategoryFilterProvider = exports.BaseFilterProvider = exports.loadFilterProviders = exports.ProductFilterService = exports.DynamicFilterService = exports.FilterProviderRegistry = exports.WISHLIST_MODULE = exports.WishlistModule = void 0;
13
+ exports.initializeFilterProviders = initializeFilterProviders;
14
+ // Export modules
15
+ var wishlist_1 = require("./modules/wishlist");
16
+ Object.defineProperty(exports, "WishlistModule", { enumerable: true, get: function () { return __importDefault(wishlist_1).default; } });
17
+ var wishlist_2 = require("./modules/wishlist");
18
+ Object.defineProperty(exports, "WISHLIST_MODULE", { enumerable: true, get: function () { return wishlist_2.WISHLIST_MODULE; } });
19
+ // Export filter provider infrastructure
20
+ var filter_provider_registry_1 = require("./services/filter-provider-registry");
21
+ Object.defineProperty(exports, "FilterProviderRegistry", { enumerable: true, get: function () { return filter_provider_registry_1.FilterProviderRegistry; } });
22
+ var dynamic_filter_service_1 = require("./services/dynamic-filter-service");
23
+ Object.defineProperty(exports, "DynamicFilterService", { enumerable: true, get: function () { return dynamic_filter_service_1.DynamicFilterService; } });
24
+ var product_filter_service_1 = require("./services/product-filter-service");
25
+ Object.defineProperty(exports, "ProductFilterService", { enumerable: true, get: function () { return product_filter_service_1.ProductFilterService; } });
26
+ var filter_provider_loader_1 = require("./services/filter-provider-loader");
27
+ Object.defineProperty(exports, "loadFilterProviders", { enumerable: true, get: function () { return filter_provider_loader_1.loadFilterProviders; } });
28
+ // Export filter providers
29
+ var filter_providers_1 = require("./providers/filter-providers");
30
+ Object.defineProperty(exports, "BaseFilterProvider", { enumerable: true, get: function () { return filter_providers_1.BaseFilterProvider; } });
31
+ Object.defineProperty(exports, "CategoryFilterProvider", { enumerable: true, get: function () { return filter_providers_1.CategoryFilterProvider; } });
32
+ Object.defineProperty(exports, "CollectionFilterProvider", { enumerable: true, get: function () { return filter_providers_1.CollectionFilterProvider; } });
33
+ Object.defineProperty(exports, "MetadataFilterProvider", { enumerable: true, get: function () { return filter_providers_1.MetadataFilterProvider; } });
34
+ Object.defineProperty(exports, "PriceRangeFilterProvider", { enumerable: true, get: function () { return filter_providers_1.PriceRangeFilterProvider; } });
35
+ Object.defineProperty(exports, "PromotionWindowFilterProvider", { enumerable: true, get: function () { return filter_providers_1.PromotionWindowFilterProvider; } });
36
+ Object.defineProperty(exports, "PromotionFilterProvider", { enumerable: true, get: function () { return filter_providers_1.PromotionFilterProvider; } });
37
+ Object.defineProperty(exports, "AvailabilityFilterProvider", { enumerable: true, get: function () { return filter_providers_1.AvailabilityFilterProvider; } });
38
+ Object.defineProperty(exports, "RatingFilterProvider", { enumerable: true, get: function () { return filter_providers_1.RatingFilterProvider; } });
39
+ Object.defineProperty(exports, "BaseProductFilterProvider", { enumerable: true, get: function () { return filter_providers_1.BaseProductFilterProvider; } });
40
+ Object.defineProperty(exports, "registerBuiltInProviders", { enumerable: true, get: function () { return filter_providers_1.registerBuiltInProviders; } });
41
+ Object.defineProperty(exports, "getBuiltInProviderIdentifiers", { enumerable: true, get: function () { return filter_providers_1.getBuiltInProviderIdentifiers; } });
42
+ Object.defineProperty(exports, "BUILT_IN_PROVIDERS", { enumerable: true, get: function () { return filter_providers_1.BUILT_IN_PROVIDERS; } });
43
+ // Export configuration utilities
44
+ var product_helper_options_1 = require("./config/product-helper-options");
45
+ Object.defineProperty(exports, "resolveProductHelperOptions", { enumerable: true, get: function () { return product_helper_options_1.resolveProductHelperOptions; } });
46
+ Object.defineProperty(exports, "normalizeProductHelperOptions", { enumerable: true, get: function () { return product_helper_options_1.normalizeProductHelperOptions; } });
47
+ Object.defineProperty(exports, "DEFAULT_PRODUCT_HELPER_OPTIONS", { enumerable: true, get: function () { return product_helper_options_1.DEFAULT_PRODUCT_HELPER_OPTIONS; } });
48
+ // Service registration keys
49
+ exports.FILTER_PROVIDER_REGISTRY = "filterProviderRegistry";
50
+ exports.DYNAMIC_FILTER_SERVICE = "dynamicFilterService";
51
+ /**
52
+ * Initialize filter provider system.
53
+ *
54
+ * This function should be called during plugin initialization to:
55
+ * 1. Register FilterProviderRegistry and DynamicFilterService in the container
56
+ * 2. Register all built-in providers
57
+ * 3. Load and register custom providers from configuration
58
+ *
59
+ * Note: In Medusa v2, this should be called from a service initialization point
60
+ * or when the DynamicFilterService is first used. The service will auto-initialize
61
+ * if the registry is not pre-registered.
62
+ *
63
+ * @param container - Medusa container instance (must have register method)
64
+ * @param options - Plugin options containing filter provider configuration
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * import { initializeFilterProviders } from "medusa-product-helper"
69
+ *
70
+ * // In plugin initialization or service setup
71
+ * await initializeFilterProviders(container, pluginOptions)
72
+ * ```
73
+ */
74
+ async function initializeFilterProviders(container, options) {
75
+ const { FilterProviderRegistry } = await import("./services/filter-provider-registry.js");
76
+ const { DynamicFilterService } = await import("./services/dynamic-filter-service.js");
77
+ const { registerBuiltInProviders } = await import("./providers/filter-providers/index.js");
78
+ const { loadFilterProviders } = await import("./services/filter-provider-loader.js");
79
+ // Create and register registry
80
+ const registry = new FilterProviderRegistry();
81
+ container.register(exports.FILTER_PROVIDER_REGISTRY, registry);
82
+ // Register built-in providers
83
+ registerBuiltInProviders(registry, options.disableBuiltInProviders || []);
84
+ // Load and register custom providers
85
+ if (options.filterProviders && options.filterProviders.length > 0) {
86
+ try {
87
+ const customProviders = await loadFilterProviders(options.filterProviders);
88
+ for (const provider of customProviders) {
89
+ registry.register(provider);
90
+ }
91
+ }
92
+ catch (error) {
93
+ const errorMessage = error instanceof Error ? error.message : String(error);
94
+ console.error(`[medusa-product-helper] Failed to load custom filter providers: ${errorMessage}`);
95
+ // Don't throw - allow plugin to continue with built-in providers only
96
+ }
97
+ }
98
+ const dynamicFilterService = new DynamicFilterService(container);
99
+ container.register(exports.DYNAMIC_FILTER_SERVICE, dynamicFilterService);
100
+ }
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOzs7Ozs7QUE0RUgsOERBOERDO0FBeElELGlCQUFpQjtBQUNqQiwrQ0FBOEQ7QUFBckQsMkhBQUEsT0FBTyxPQUFrQjtBQUNsQywrQ0FBb0Q7QUFBM0MsMkdBQUEsZUFBZSxPQUFBO0FBR3hCLHdDQUF3QztBQUN4QyxnRkFBNEU7QUFBbkUsa0lBQUEsc0JBQXNCLE9BQUE7QUFDL0IsNEVBQXdFO0FBQS9ELDhIQUFBLG9CQUFvQixPQUFBO0FBQzdCLDRFQUF3RTtBQUEvRCw4SEFBQSxvQkFBb0IsT0FBQTtBQUM3Qiw0RUFBdUU7QUFBOUQsNkhBQUEsbUJBQW1CLE9BQUE7QUFHNUIsMEJBQTBCO0FBQzFCLGlFQWdCcUM7QUFmbkMsc0hBQUEsa0JBQWtCLE9BQUE7QUFHbEIsMEhBQUEsc0JBQXNCLE9BQUE7QUFDdEIsNEhBQUEsd0JBQXdCLE9BQUE7QUFDeEIsMEhBQUEsc0JBQXNCLE9BQUE7QUFDdEIsNEhBQUEsd0JBQXdCLE9BQUE7QUFDeEIsaUlBQUEsNkJBQTZCLE9BQUE7QUFDN0IsMkhBQUEsdUJBQXVCLE9BQUE7QUFDdkIsOEhBQUEsMEJBQTBCLE9BQUE7QUFDMUIsd0hBQUEsb0JBQW9CLE9BQUE7QUFDcEIsNkhBQUEseUJBQXlCLE9BQUE7QUFDekIsNEhBQUEsd0JBQXdCLE9BQUE7QUFDeEIsaUlBQUEsNkJBQTZCLE9BQUE7QUFDN0Isc0hBQUEsa0JBQWtCLE9BQUE7QUFHcEIsaUNBQWlDO0FBQ2pDLDBFQU93QztBQU50QyxxSUFBQSwyQkFBMkIsT0FBQTtBQUMzQix1SUFBQSw2QkFBNkIsT0FBQTtBQUM3Qix3SUFBQSw4QkFBOEIsT0FBQTtBQVloQyw0QkFBNEI7QUFDZixRQUFBLHdCQUF3QixHQUFHLHdCQUF3QixDQUFBO0FBQ25ELFFBQUEsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUE7QUFFNUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSSxLQUFLLFVBQVUseUJBQXlCLENBQzdDLFNBR0MsRUFDRCxPQUdDO0lBRUQsTUFBTSxFQUFFLHNCQUFzQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQzdDLHdDQUF3QyxDQUN6QyxDQUFBO0lBQ0QsTUFBTSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQzNDLHNDQUFzQyxDQUN2QyxDQUFBO0lBQ0QsTUFBTSxFQUFFLHdCQUF3QixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQy9DLHVDQUF1QyxDQUN4QyxDQUFBO0lBQ0QsTUFBTSxFQUFFLG1CQUFtQixFQUFFLEdBQUcsTUFBTSxNQUFNLENBQzFDLHNDQUFzQyxDQUN2QyxDQUFBO0lBRUQsK0JBQStCO0lBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQTtJQUM3QyxTQUFTLENBQUMsUUFBUSxDQUFDLGdDQUF3QixFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRXRELDhCQUE4QjtJQUM5Qix3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRXpFLHFDQUFxQztJQUNyQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQUcsTUFBTSxtQkFBbUIsQ0FDL0MsT0FBTyxDQUFDLGVBQW1GLENBQzVGLENBQUE7WUFFRCxLQUFLLE1BQU0sUUFBUSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUN2QyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzdCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sWUFBWSxHQUNoQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDeEQsT0FBTyxDQUFDLEtBQUssQ0FDWCxtRUFBbUUsWUFBWSxFQUFFLENBQ2xGLENBQUE7WUFDRCxzRUFBc0U7UUFDeEUsQ0FBQztJQUNILENBQUM7SUFVRCxNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQ25ELFNBQTJDLENBQzVDLENBQUE7SUFDRCxTQUFTLENBQUMsUUFBUSxDQUFDLDhCQUFzQixFQUFFLG9CQUFvQixDQUFDLENBQUE7QUFDbEUsQ0FBQyJ9
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvailabilityFilterProvider = void 0;
4
+ const base_filter_provider_1 = require("./base-filter-provider");
5
+ class AvailabilityFilterProvider extends base_filter_provider_1.BaseFilterProvider {
6
+ apply(filters, value, context) {
7
+ if (!this.isValidConfig(value)) {
8
+ return filters;
9
+ }
10
+ const config = value;
11
+ const result = { ...filters };
12
+ // Get values from config or context options with defaults
13
+ const publishable_only = this.getBooleanValue(config, context, "publishable_only", true);
14
+ const include_preorder = this.getBooleanValue(config, context, "include_preorder", true);
15
+ const include_backorder = this.getBooleanValue(config, context, "include_backorder", true);
16
+ const include_gift_cards = this.getBooleanValue(config, context, "include_gift_cards", false);
17
+ if (config.statuses?.length) {
18
+ result.status = config.statuses;
19
+ }
20
+ if (publishable_only) {
21
+ result.status = this.mergeStatus(result.status, "published");
22
+ }
23
+ return result;
24
+ }
25
+ isValidConfig(value) {
26
+ return value != null && typeof value === "object" && !Array.isArray(value);
27
+ }
28
+ getBooleanValue(config, context, key, defaultValue) {
29
+ // First check config value
30
+ if (config[key] !== undefined) {
31
+ return config[key];
32
+ }
33
+ // Then check context options with proper type narrowing
34
+ const availabilityOptions = context?.options?.availability;
35
+ if (availabilityOptions && typeof availabilityOptions === "object") {
36
+ const value = availabilityOptions[key];
37
+ if (typeof value === "boolean") {
38
+ return value;
39
+ }
40
+ }
41
+ // Return default
42
+ return defaultValue;
43
+ }
44
+ mergeStatus(current, newStatus) {
45
+ if (Array.isArray(current)) {
46
+ return current.includes(newStatus) ? current : [...current, newStatus];
47
+ }
48
+ return [newStatus];
49
+ }
50
+ validate(value) {
51
+ if (value == null)
52
+ return;
53
+ if (!this.isValidConfig(value)) {
54
+ throw new Error("availability must be an object");
55
+ }
56
+ const config = value;
57
+ if (config.statuses !== undefined) {
58
+ if (!Array.isArray(config.statuses)) {
59
+ throw new Error("availability.statuses must be an array");
60
+ }
61
+ if (!config.statuses.every(s => typeof s === "string" && s.trim())) {
62
+ throw new Error("availability.statuses must be an array of non-empty strings");
63
+ }
64
+ }
65
+ const booleanFields = [
66
+ "include_preorder",
67
+ "include_backorder",
68
+ "include_gift_cards",
69
+ "publishable_only"
70
+ ];
71
+ booleanFields.forEach(field => {
72
+ if (config[field] !== undefined && typeof config[field] !== "boolean") {
73
+ throw new Error(`availability.${field} must be a boolean`);
74
+ }
75
+ });
76
+ }
77
+ }
78
+ exports.AvailabilityFilterProvider = AvailabilityFilterProvider;
79
+ AvailabilityFilterProvider.identifier = "availability";
80
+ AvailabilityFilterProvider.displayName = "Availability Filter";
81
+ AvailabilityFilterProvider.description = "Filters products by availability status and options";
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhaWxhYmlsaXR5LXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9maWx0ZXItcHJvdmlkZXJzL2F2YWlsYWJpbGl0eS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBK0U7QUFXL0UsTUFBYSwwQkFBMkIsU0FBUSx5Q0FBa0I7SUFLaEUsS0FBSyxDQUFDLE9BQWdDLEVBQUUsS0FBYyxFQUFFLE9BQXVCO1FBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLEtBQTJCLENBQUE7UUFDMUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFBO1FBRTdCLDBEQUEwRDtRQUMxRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4RixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4RixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUMxRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUU3RixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO1FBQ2pDLENBQUM7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
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseFilterProvider = void 0;
4
+ /**
5
+ * Base class for all filter providers.
6
+ *
7
+ * Filter providers extend this class to implement custom filtering logic
8
+ * for product queries. Each provider handles a specific filter type identified
9
+ * by its unique identifier.
10
+ */
11
+ class BaseFilterProvider {
12
+ }
13
+ exports.BaseFilterProvider = BaseFilterProvider;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWx0ZXItcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvYmFzZS1maWx0ZXItcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBb0NBOzs7Ozs7R0FNRztBQUNILE1BQXNCLGtCQUFrQjtDQWdDdkM7QUFoQ0QsZ0RBZ0NDIn0=
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseProductFilterProvider = void 0;
4
+ const base_filter_provider_1 = require("./base-filter-provider");
5
+ class BaseProductFilterProvider extends base_filter_provider_1.BaseFilterProvider {
6
+ apply(filters, value) {
7
+ if (!this.isValidFilters(value))
8
+ return filters;
9
+ const baseFilters = value;
10
+ const result = { ...filters };
11
+ this.processFilter(baseFilters.id, 'id', result, 'id');
12
+ this.processFilter(baseFilters.handle, 'handle', result, 'handle');
13
+ this.processFilter(baseFilters.tags, 'tags', result, 'tags', (values) => ({ value: values }));
14
+ this.processFilter(baseFilters.sales_channel_id, 'sales_channel_id', result, 'sales_channels', (values) => ({ id: values }));
15
+ return result;
16
+ }
17
+ isValidFilters(value) {
18
+ return value != null && typeof value === "object" && !Array.isArray(value);
19
+ }
20
+ processFilter(input, filterKey, result, outputKey, transform) {
21
+ if (input == null)
22
+ return;
23
+ const values = (Array.isArray(input) ? input : [input])
24
+ .filter((v) => typeof v === 'string' && v.trim() !== '');
25
+ if (values.length === 0)
26
+ return;
27
+ result[outputKey] = transform ? transform(values) : values;
28
+ }
29
+ validate(value) {
30
+ if (value == null)
31
+ return;
32
+ if (!this.isValidFilters(value)) {
33
+ throw new Error("base_product must be an object");
34
+ }
35
+ const baseFilters = value;
36
+ const validations = [
37
+ ['id', 'id'],
38
+ ['handle', 'handle'],
39
+ ['tags', 'tags'],
40
+ ['sales_channel_id', 'sales_channel_id']
41
+ ];
42
+ validations.forEach(([key, name]) => {
43
+ this.validateStringArray(baseFilters[key], name);
44
+ });
45
+ }
46
+ validateStringArray(value, fieldName) {
47
+ if (value === undefined)
48
+ return;
49
+ const values = Array.isArray(value) ? value : [value];
50
+ if (!values.every(v => typeof v === "string" && v.trim().length > 0)) {
51
+ throw new Error(`base_product.${fieldName} must be a string or array of non-empty strings`);
52
+ }
53
+ }
54
+ }
55
+ exports.BaseProductFilterProvider = BaseProductFilterProvider;
56
+ BaseProductFilterProvider.identifier = "base_product";
57
+ BaseProductFilterProvider.displayName = "Base Product Filters";
58
+ BaseProductFilterProvider.description = "Filters products by ID, handle, tags, and sales channel";
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9kdWN0LXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9maWx0ZXItcHJvdmlkZXJzL2Jhc2UtcHJvZHVjdC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBK0U7QUFXL0UsTUFBYSx5QkFBMEIsU0FBUSx5Q0FBa0I7SUFLL0QsS0FBSyxDQUFDLE9BQWdDLEVBQUUsS0FBYztRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLE9BQU8sQ0FBQTtRQUUvQyxNQUFNLFdBQVcsR0FBRyxLQUEyQixDQUFBO1FBQy9DLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQTtRQUU3QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQzdGLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFFNUgsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRU8sY0FBYyxDQUFDLEtB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
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CategoryFilterProvider = void 0;
4
+ const base_filter_provider_1 = require("./base-filter-provider");
5
+ class CategoryFilterProvider extends base_filter_provider_1.BaseFilterProvider {
6
+ apply(filters, value) {
7
+ const categoryIds = this.normalizeAndValidate(value);
8
+ if (categoryIds.length === 0) {
9
+ return filters;
10
+ }
11
+ return {
12
+ ...filters,
13
+ categories: { id: categoryIds }
14
+ };
15
+ }
16
+ validate(value) {
17
+ if (value == null)
18
+ return;
19
+ const ids = this.normalizeAndValidate(value);
20
+ if (ids.length === 0) {
21
+ throw new Error("category_id must be a string or array of non-empty strings");
22
+ }
23
+ }
24
+ normalizeAndValidate(value) {
25
+ if (value == null)
26
+ return [];
27
+ const ids = Array.isArray(value) ? value : [value];
28
+ return ids
29
+ .filter((id) => typeof id === "string" && id.trim().length > 0);
30
+ }
31
+ }
32
+ exports.CategoryFilterProvider = CategoryFilterProvider;
33
+ CategoryFilterProvider.identifier = "category_id";
34
+ CategoryFilterProvider.displayName = "Category Filter";
35
+ CategoryFilterProvider.description = "Filters products by category IDs";
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvY2F0ZWdvcnktcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUVBQStFO0FBRS9FLE1BQWEsc0JBQXVCLFNBQVEseUNBQWtCO0lBSzVELEtBQUssQ0FBQyxPQUFnQyxFQUFFLEtBQWM7UUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRXBELElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDO1FBRUQsT0FBTztZQUNMLEdBQUcsT0FBTztZQUNWLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUU7U0FDaEMsQ0FBQTtJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYztRQUNyQixJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTTtRQUV6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFNUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQTtRQUMvRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQWM7UUFDekMsSUFBSSxLQUFLLElBQUksSUFBSTtZQUFFLE9BQU8sRUFBRSxDQUFBO1FBRTVCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVsRCxPQUFPLEdBQUc7YUFDUCxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQWdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNqRixDQUFDOztBQW5DSCx3REFvQ0M7QUFuQ2lCLGlDQUFVLEdBQUcsYUFBYSxDQUFBO0FBQzFCLGtDQUFXLEdBQUcsaUJBQWlCLENBQUE7QUFDL0Isa0NBQVcsR0FBRyxrQ0FBa0MsQ0FBQSJ9
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CollectionFilterProvider = void 0;
4
+ const base_filter_provider_1 = require("./base-filter-provider");
5
+ class CollectionFilterProvider extends base_filter_provider_1.BaseFilterProvider {
6
+ apply(filters, value) {
7
+ const collectionIds = this.normalizeAndValidate(value);
8
+ if (collectionIds.length === 0) {
9
+ return filters;
10
+ }
11
+ return {
12
+ ...filters,
13
+ collection_id: collectionIds
14
+ };
15
+ }
16
+ validate(value) {
17
+ if (value == null)
18
+ return;
19
+ const ids = this.normalizeAndValidate(value);
20
+ if (ids.length === 0) {
21
+ throw new Error("collection_id must be a string or array of non-empty strings");
22
+ }
23
+ }
24
+ normalizeAndValidate(value) {
25
+ if (value == null)
26
+ return [];
27
+ const ids = Array.isArray(value) ? value : [value];
28
+ return ids
29
+ .filter((id) => typeof id === "string" && id.trim().length > 0);
30
+ }
31
+ }
32
+ exports.CollectionFilterProvider = CollectionFilterProvider;
33
+ CollectionFilterProvider.identifier = "collection_id";
34
+ CollectionFilterProvider.displayName = "Collection Filter";
35
+ CollectionFilterProvider.description = "Filters products by collection IDs";
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvZmlsdGVyLXByb3ZpZGVycy9jb2xsZWN0aW9uLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlFQUErRTtBQUUvRSxNQUFhLHdCQUF5QixTQUFRLHlDQUFrQjtJQUs5RCxLQUFLLENBQUMsT0FBZ0MsRUFBRSxLQUFjO1FBQ3BELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV0RCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELE9BQU87WUFDTCxHQUFHLE9BQU87WUFDVixhQUFhLEVBQUUsYUFBYTtTQUM3QixDQUFBO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFjO1FBQ3JCLElBQUksS0FBSyxJQUFJLElBQUk7WUFBRSxPQUFNO1FBRXpCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUU1QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFBO1FBQ2pGLENBQUM7SUFDSCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FBYztRQUN6QyxJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUE7UUFFNUIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRWxELE9BQU8sR0FBRzthQUNQLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2pGLENBQUM7O0FBbkNILDREQW9DQztBQW5DaUIsbUNBQVUsR0FBRyxlQUFlLENBQUE7QUFDNUIsb0NBQVcsR0FBRyxtQkFBbUIsQ0FBQTtBQUNqQyxvQ0FBVyxHQUFHLG9DQUFvQyxDQUFBIn0=
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * Filter Providers Module
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getBuiltInProviderIdentifiers = exports.registerBuiltInProviders = exports.BUILT_IN_PROVIDERS = exports.BaseProductFilterProvider = exports.RatingFilterProvider = exports.AvailabilityFilterProvider = exports.PromotionFilterProvider = exports.PromotionWindowFilterProvider = exports.PriceRangeFilterProvider = exports.MetadataFilterProvider = exports.CollectionFilterProvider = exports.CategoryFilterProvider = exports.BaseFilterProvider = void 0;
7
+ var base_filter_provider_1 = require("./base-filter-provider");
8
+ Object.defineProperty(exports, "BaseFilterProvider", { enumerable: true, get: function () { return base_filter_provider_1.BaseFilterProvider; } });
9
+ var category_provider_1 = require("./category-provider");
10
+ Object.defineProperty(exports, "CategoryFilterProvider", { enumerable: true, get: function () { return category_provider_1.CategoryFilterProvider; } });
11
+ var collection_provider_1 = require("./collection-provider");
12
+ Object.defineProperty(exports, "CollectionFilterProvider", { enumerable: true, get: function () { return collection_provider_1.CollectionFilterProvider; } });
13
+ var metadata_provider_1 = require("./metadata-provider");
14
+ Object.defineProperty(exports, "MetadataFilterProvider", { enumerable: true, get: function () { return metadata_provider_1.MetadataFilterProvider; } });
15
+ var price_range_provider_1 = require("./price-range-provider");
16
+ Object.defineProperty(exports, "PriceRangeFilterProvider", { enumerable: true, get: function () { return price_range_provider_1.PriceRangeFilterProvider; } });
17
+ var promotion_window_provider_1 = require("./promotion-window-provider");
18
+ Object.defineProperty(exports, "PromotionWindowFilterProvider", { enumerable: true, get: function () { return promotion_window_provider_1.PromotionWindowFilterProvider; } });
19
+ var promotion_provider_1 = require("./promotion-provider");
20
+ Object.defineProperty(exports, "PromotionFilterProvider", { enumerable: true, get: function () { return promotion_provider_1.PromotionFilterProvider; } });
21
+ var availability_provider_1 = require("./availability-provider");
22
+ Object.defineProperty(exports, "AvailabilityFilterProvider", { enumerable: true, get: function () { return availability_provider_1.AvailabilityFilterProvider; } });
23
+ var rating_provider_1 = require("./rating-provider");
24
+ Object.defineProperty(exports, "RatingFilterProvider", { enumerable: true, get: function () { return rating_provider_1.RatingFilterProvider; } });
25
+ var base_product_provider_1 = require("./base-product-provider");
26
+ Object.defineProperty(exports, "BaseProductFilterProvider", { enumerable: true, get: function () { return base_product_provider_1.BaseProductFilterProvider; } });
27
+ const category_provider_2 = require("./category-provider");
28
+ const collection_provider_2 = require("./collection-provider");
29
+ const metadata_provider_2 = require("./metadata-provider");
30
+ const price_range_provider_2 = require("./price-range-provider");
31
+ const promotion_window_provider_2 = require("./promotion-window-provider");
32
+ const promotion_provider_2 = require("./promotion-provider");
33
+ const availability_provider_2 = require("./availability-provider");
34
+ const rating_provider_2 = require("./rating-provider");
35
+ const base_product_provider_2 = require("./base-product-provider");
36
+ const PROVIDERS = [
37
+ category_provider_2.CategoryFilterProvider,
38
+ collection_provider_2.CollectionFilterProvider,
39
+ metadata_provider_2.MetadataFilterProvider,
40
+ price_range_provider_2.PriceRangeFilterProvider,
41
+ promotion_window_provider_2.PromotionWindowFilterProvider,
42
+ promotion_provider_2.PromotionFilterProvider,
43
+ availability_provider_2.AvailabilityFilterProvider,
44
+ rating_provider_2.RatingFilterProvider,
45
+ base_product_provider_2.BaseProductFilterProvider,
46
+ ];
47
+ exports.BUILT_IN_PROVIDERS = PROVIDERS;
48
+ const registerBuiltInProviders = (registry, disabledProviders = []) => {
49
+ PROVIDERS.forEach(P => {
50
+ if (!disabledProviders.includes(P.identifier)) {
51
+ registry.register(new P());
52
+ }
53
+ });
54
+ };
55
+ exports.registerBuiltInProviders = registerBuiltInProviders;
56
+ const getBuiltInProviderIdentifiers = () => PROVIDERS.map(p => p.identifier);
57
+ exports.getBuiltInProviderIdentifiers = getBuiltInProviderIdentifiers;
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCwrREFBcUc7QUFBNUYsMEhBQUEsa0JBQWtCLE9BQUE7QUFDM0IseURBQTREO0FBQW5ELDJIQUFBLHNCQUFzQixPQUFBO0FBQy9CLDZEQUFnRTtBQUF2RCwrSEFBQSx3QkFBd0IsT0FBQTtBQUNqQyx5REFBNEQ7QUFBbkQsMkhBQUEsc0JBQXNCLE9BQUE7QUFDL0IsK0RBQWlFO0FBQXhELGdJQUFBLHdCQUF3QixPQUFBO0FBQ2pDLHlFQUEyRTtBQUFsRSwwSUFBQSw2QkFBNkIsT0FBQTtBQUN0QywyREFBOEQ7QUFBckQsNkhBQUEsdUJBQXVCLE9BQUE7QUFDaEMsaUVBQW9FO0FBQTNELG1JQUFBLDBCQUEwQixPQUFBO0FBQ25DLHFEQUF3RDtBQUEvQyx1SEFBQSxvQkFBb0IsT0FBQTtBQUM3QixpRUFBbUU7QUFBMUQsa0lBQUEseUJBQXlCLE9BQUE7QUFHbEMsMkRBQTREO0FBQzVELCtEQUFnRTtBQUNoRSwyREFBNEQ7QUFDNUQsaUVBQWlFO0FBQ2pFLDJFQUEyRTtBQUMzRSw2REFBOEQ7QUFDOUQsbUVBQW9FO0FBQ3BFLHVEQUF3RDtBQUN4RCxtRUFBbUU7QUFFbkUsTUFBTSxTQUFTLEdBQUc7SUFDaEIsMENBQXNCO0lBQ3RCLDhDQUF3QjtJQUN4QiwwQ0FBc0I7SUFDdEIsK0NBQXdCO0lBQ3hCLHlEQUE2QjtJQUM3Qiw0Q0FBdUI7SUFDdkIsa0RBQTBCO0lBQzFCLHNDQUFvQjtJQUNwQixpREFBeUI7Q0FDakIsQ0FBQTtBQUVHLFFBQUEsa0JBQWtCLEdBQUcsU0FBUyxDQUFBO0FBRXBDLE1BQU0sd0JBQXdCLEdBQUcsQ0FDdEMsUUFBZ0MsRUFDaEMsb0JBQThCLEVBQUUsRUFDMUIsRUFBRTtJQUNSLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUM1QixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUE7QUFUWSxRQUFBLHdCQUF3Qiw0QkFTcEM7QUFFTSxNQUFNLDZCQUE2QixHQUFHLEdBQWEsRUFBRSxDQUMxRCxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBRHJCLFFBQUEsNkJBQTZCLGlDQUNSIn0=
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MetadataFilterProvider = void 0;
4
+ const base_filter_provider_1 = require("./base-filter-provider");
5
+ class MetadataFilterProvider extends base_filter_provider_1.BaseFilterProvider {
6
+ apply(filters, value, context) {
7
+ if (!this.isValidMetadata(value))
8
+ return filters;
9
+ const metadataFilters = value;
10
+ const allowlist = this.getAllowlist(context);
11
+ if (allowlist.size === 0)
12
+ return filters;
13
+ const allowedMetadata = this.filterByAllowlist(metadataFilters, allowlist);
14
+ if (Object.keys(allowedMetadata).length === 0) {
15
+ return filters;
16
+ }
17
+ return {
18
+ ...filters,
19
+ metadata: allowedMetadata
20
+ };
21
+ }
22
+ validate(value) {
23
+ if (value == null)
24
+ return;
25
+ if (!this.isValidMetadata(value)) {
26
+ throw new Error("metadata must be an object");
27
+ }
28
+ const metadata = value;
29
+ Object.entries(metadata).forEach(([key, val]) => {
30
+ if (!this.isValidKey(key)) {
31
+ throw new Error("metadata keys must be non-empty strings");
32
+ }
33
+ if (!this.isValidValue(val)) {
34
+ throw new Error(`metadata.${key} must be a string, number, boolean, or array of these types`);
35
+ }
36
+ });
37
+ }
38
+ isValidMetadata(value) {
39
+ return value != null && typeof value === "object" && !Array.isArray(value);
40
+ }
41
+ isValidKey(key) {
42
+ return typeof key === "string" && key.trim().length > 0;
43
+ }
44
+ isValidValue(value) {
45
+ const isValidPrimitive = (v) => typeof v === "string" || typeof v === "number" || typeof v === "boolean";
46
+ if (Array.isArray(value)) {
47
+ return value.every(isValidPrimitive);
48
+ }
49
+ return isValidPrimitive(value);
50
+ }
51
+ getAllowlist(context) {
52
+ const descriptors = context?.options?.metadata?.products?.descriptors || [];
53
+ return new Set(descriptors.filter(d => d.filterable).map(d => d.key));
54
+ }
55
+ filterByAllowlist(metadata, allowlist) {
56
+ const result = {};
57
+ Object.entries(metadata).forEach(([key, val]) => {
58
+ if (allowlist.has(key)) {
59
+ result[key] = val;
60
+ }
61
+ });
62
+ return result;
63
+ }
64
+ }
65
+ exports.MetadataFilterProvider = MetadataFilterProvider;
66
+ MetadataFilterProvider.identifier = "metadata";
67
+ MetadataFilterProvider.displayName = "Metadata Filter";
68
+ MetadataFilterProvider.description = "Filters products by metadata with allowlist validation";
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvbWV0YWRhdGEtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUVBQStFO0FBSy9FLE1BQWEsc0JBQXVCLFNBQVEseUNBQWtCO0lBSzVELEtBQUssQ0FBQyxPQUFnQyxFQUFFLEtBQWMsRUFBRSxPQUF1QjtRQUM3RSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLE9BQU8sQ0FBQTtRQUVoRCxNQUFNLGVBQWUsR0FBRyxLQUFzQyxDQUFBO1FBQzlELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFNUMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUM7WUFBRSxPQUFPLE9BQU8sQ0FBQTtRQUV4QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBRTFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELE9BQU87WUFDTCxHQUFHLE9BQU87WUFDVixRQUFRLEVBQUUsZUFBZTtTQUMxQixDQUFBO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFjO1FBQ3JCLElBQUksS0FBSyxJQUFJLElBQUk7WUFBRSxPQUFNO1FBRXpCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO1FBQy9DLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFzQyxDQUFBO1FBRXZE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