medusa-product-helper 0.0.16 → 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 (26) 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 +41 -5
  4. package/.medusa/server/src/api/store/product-helper/products/validators.js +2 -1
  5. package/.medusa/server/src/providers/filter-providers/availability-provider.js +53 -67
  6. package/.medusa/server/src/providers/filter-providers/base-filter-provider.js +1 -19
  7. package/.medusa/server/src/providers/filter-providers/base-product-provider.js +37 -100
  8. package/.medusa/server/src/providers/filter-providers/category-provider.js +15 -34
  9. package/.medusa/server/src/providers/filter-providers/collection-provider.js +15 -32
  10. package/.medusa/server/src/providers/filter-providers/index.js +13 -49
  11. package/.medusa/server/src/providers/filter-providers/metadata-provider.js +38 -57
  12. package/.medusa/server/src/providers/filter-providers/price-range-provider.js +66 -79
  13. package/.medusa/server/src/providers/filter-providers/promotion-provider.js +106 -169
  14. package/.medusa/server/src/providers/filter-providers/promotion-window-provider.js +53 -93
  15. package/.medusa/server/src/providers/filter-providers/rating-provider.js +47 -70
  16. package/.medusa/server/src/services/dynamic-filter-service.js +455 -744
  17. package/.medusa/server/src/services/filter-provider-loader.js +91 -139
  18. package/.medusa/server/src/services/filter-provider-registry.js +8 -107
  19. package/.medusa/server/src/services/product-filter-service.js +127 -174
  20. package/.medusa/server/src/shared/product-metadata/utils.js +66 -116
  21. package/.medusa/server/src/utils/query-builders/product-filters.js +89 -111
  22. package/.medusa/server/src/utils/query-parser.js +24 -76
  23. package/.medusa/server/src/workflows/add-to-wishlist.js +12 -26
  24. package/.medusa/server/src/workflows/get-wishlist.js +53 -51
  25. package/.medusa/server/src/workflows/remove-from-wishlist.js +3 -8
  26. package/package.json +1 -1
@@ -2,95 +2,81 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AvailabilityFilterProvider = void 0;
4
4
  const base_filter_provider_1 = require("./base-filter-provider");
5
- /**
6
- * Filter provider for filtering products by availability status.
7
- *
8
- * Handles availability filtering including:
9
- * - Status filters (in_stock, out_of_stock, etc.)
10
- * - Include preorder/backorder options
11
- * - Include gift cards option
12
- * - Publishable only option
13
- *
14
- * @example
15
- * ```ts
16
- * { availability: { statuses: ["in_stock"], include_preorder: true } }
17
- * ```
18
- */
19
5
  class AvailabilityFilterProvider extends base_filter_provider_1.BaseFilterProvider {
20
6
  apply(filters, value, context) {
21
- if (!value || typeof value !== "object" || Array.isArray(value)) {
7
+ if (!this.isValidConfig(value)) {
22
8
  return filters;
23
9
  }
24
- const availability = value;
25
- // Get defaults from options
26
- const includePreorder = availability.include_preorder !== undefined
27
- ? availability.include_preorder
28
- : context?.options?.availability?.include_preorder ?? true;
29
- const includeBackorder = availability.include_backorder !== undefined
30
- ? availability.include_backorder
31
- : context?.options?.availability?.include_backorder ?? true;
32
- const includeGiftCards = availability.include_gift_cards !== undefined
33
- ? availability.include_gift_cards
34
- : context?.options?.availability?.include_gift_cards ?? false;
35
- const publishableOnly = availability.publishable_only !== undefined
36
- ? availability.publishable_only
37
- : context?.options?.availability?.publishable_only ?? true;
10
+ const config = value;
38
11
  const result = { ...filters };
39
- // Apply status filter if provided
40
- if (availability.statuses && availability.statuses.length > 0) {
41
- result.status = availability.statuses;
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;
42
19
  }
43
- // Apply publishable filter
44
- if (publishableOnly) {
45
- result.status = Array.isArray(result.status)
46
- ? [...result.status, "published"]
47
- : ["published"];
20
+ if (publishable_only) {
21
+ result.status = this.mergeStatus(result.status, "published");
48
22
  }
49
- // Note: Preorder, backorder, and gift card filtering may require
50
- // additional logic based on variant inventory and product type
51
- // This is a simplified implementation
52
23
  return result;
53
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
+ }
54
50
  validate(value) {
55
- if (value === undefined || value === null) {
51
+ if (value == null)
56
52
  return;
57
- }
58
- if (typeof value !== "object" || Array.isArray(value)) {
53
+ if (!this.isValidConfig(value)) {
59
54
  throw new Error("availability must be an object");
60
55
  }
61
- const availability = value;
62
- if (availability.statuses !== undefined) {
63
- if (!Array.isArray(availability.statuses)) {
56
+ const config = value;
57
+ if (config.statuses !== undefined) {
58
+ if (!Array.isArray(config.statuses)) {
64
59
  throw new Error("availability.statuses must be an array");
65
60
  }
66
- if (!availability.statuses.every((status) => typeof status === "string" && status.trim().length > 0)) {
61
+ if (!config.statuses.every(s => typeof s === "string" && s.trim())) {
67
62
  throw new Error("availability.statuses must be an array of non-empty strings");
68
63
  }
69
64
  }
70
- if (availability.include_preorder !== undefined) {
71
- if (typeof availability.include_preorder !== "boolean") {
72
- throw new Error("availability.include_preorder must be a boolean");
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`);
73
74
  }
74
- }
75
- if (availability.include_backorder !== undefined) {
76
- if (typeof availability.include_backorder !== "boolean") {
77
- throw new Error("availability.include_backorder must be a boolean");
78
- }
79
- }
80
- if (availability.include_gift_cards !== undefined) {
81
- if (typeof availability.include_gift_cards !== "boolean") {
82
- throw new Error("availability.include_gift_cards must be a boolean");
83
- }
84
- }
85
- if (availability.publishable_only !== undefined) {
86
- if (typeof availability.publishable_only !== "boolean") {
87
- throw new Error("availability.publishable_only must be a boolean");
88
- }
89
- }
75
+ });
90
76
  }
91
77
  }
92
78
  exports.AvailabilityFilterProvider = AvailabilityFilterProvider;
93
79
  AvailabilityFilterProvider.identifier = "availability";
94
80
  AvailabilityFilterProvider.displayName = "Availability Filter";
95
81
  AvailabilityFilterProvider.description = "Filters products by availability status and options";
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhaWxhYmlsaXR5LXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9maWx0ZXItcHJvdmlkZXJzL2F2YWlsYWJpbGl0eS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQWEsMEJBQTJCLFNBQVEseUNBQWtCO0lBTWhFLEtBQUssQ0FDSCxPQUFnQyxFQUNoQyxLQUFjLEVBQ2QsT0FBdUI7UUFFdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sT0FBTyxDQUFBO1FBQ2hCLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxLQU1wQixDQUFBO1FBRUQsNEJBQTRCO1FBQzVCLE1BQU0sZUFBZSxHQUNuQixZQUFZLENBQUMsZ0JBQWdCLEtBQUssU0FBUztZQUN6QyxDQUFDLENBQUMsWUFBWSxDQUFDLGdCQUFnQjtZQUMvQixDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFBO1FBRTlELE1BQU0sZ0JBQWdCLEdBQ3BCLFlBQVksQ0FBQyxpQkFBaUIsS0FBSyxTQUFTO1lBQzFDLENBQUMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCO1lBQ2hDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsSUFBSSxJQUFJLENBQUE7UUFFL0QsTUFBTSxnQkFBZ0IsR0FDcEIsWUFBWSxDQUFDLGtCQUFrQixLQUFLLFNBQVM7WUFDM0MsQ0FBQyxDQUFDLFlBQVksQ0FBQyxrQkFBa0I7WUFDakMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixJQUFJLEtBQUssQ0FB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
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhaWxhYmlsaXR5LXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9maWx0ZXItcHJvdmlkZXJzL2F2YWlsYWJpbGl0eS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBK0U7QUFXL0UsTUFBYSwwQkFBMkIsU0FBUSx5Q0FBa0I7SUFLaEUsS0FBSyxDQUFDLE9BQWdDLEVBQUUsS0FBYyxFQUFFLE9BQXVCO1FBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLEtBQTJCLENBQUE7UUFDMUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFBO1FBRTdCLDBEQUEwRDtRQUMxRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4RixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4RixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUMxRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUU3RixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO1FBQ2pDLENBQUM7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
@@ -7,26 +7,8 @@ exports.BaseFilterProvider = void 0;
7
7
  * Filter providers extend this class to implement custom filtering logic
8
8
  * for product queries. Each provider handles a specific filter type identified
9
9
  * by its unique identifier.
10
- *
11
- * @example
12
- * ```ts
13
- * export class CategoryFilterProvider extends BaseFilterProvider {
14
- * static readonly identifier = "category_id"
15
- * static readonly displayName = "Category Filter"
16
- *
17
- * apply(filters: Record<string, unknown>, value: unknown, context?: FilterContext): Record<string, unknown> {
18
- * const categoryIds = Array.isArray(value) ? value : [value]
19
- * return {
20
- * ...filters,
21
- * categories: {
22
- * id: categoryIds.filter(Boolean),
23
- * },
24
- * }
25
- * }
26
- * }
27
- * ```
28
10
  */
29
11
  class BaseFilterProvider {
30
12
  }
31
13
  exports.BaseFilterProvider = BaseFilterProvider;
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWx0ZXItcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvYmFzZS1maWx0ZXItcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFzQixrQkFBa0I7Q0FnRnZDO0FBaEZELGdEQWdGQyJ9
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWx0ZXItcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvYmFzZS1maWx0ZXItcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBb0NBOzs7Ozs7R0FNRztBQUNILE1BQXNCLGtCQUFrQjtDQWdDdkM7QUFoQ0QsZ0RBZ0NDIn0=
@@ -2,116 +2,53 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BaseProductFilterProvider = void 0;
4
4
  const base_filter_provider_1 = require("./base-filter-provider");
5
- /**
6
- * Filter provider for base product filters (id, handle, tags, sales_channel_id).
7
- *
8
- * Combines multiple base product filters into a single provider:
9
- * - `id`: Filter by product IDs
10
- * - `handle`: Filter by product handles
11
- * - `tags`: Filter by product tags
12
- * - `sales_channel_id`: Filter by sales channel IDs
13
- *
14
- * @example
15
- * ```ts
16
- * { id: ["prod_123"], handle: ["product-handle"], tags: ["sale"] }
17
- * ```
18
- */
19
5
  class BaseProductFilterProvider extends base_filter_provider_1.BaseFilterProvider {
20
- apply(filters, value, context) {
21
- if (!value || typeof value !== "object") {
6
+ apply(filters, value) {
7
+ if (!this.isValidFilters(value))
22
8
  return filters;
23
- }
24
9
  const baseFilters = value;
25
10
  const result = { ...filters };
26
- // Handle id filter
27
- if (baseFilters.id) {
28
- const ids = Array.isArray(baseFilters.id)
29
- ? baseFilters.id
30
- : [baseFilters.id];
31
- const validIds = ids.filter((id) => id !== null && id !== undefined && id !== "");
32
- if (validIds.length > 0) {
33
- result.id = validIds;
34
- }
35
- }
36
- // Handle handle filter
37
- if (baseFilters.handle) {
38
- const handles = Array.isArray(baseFilters.handle)
39
- ? baseFilters.handle
40
- : [baseFilters.handle];
41
- const validHandles = handles.filter((handle) => handle !== null && handle !== undefined && handle !== "");
42
- if (validHandles.length > 0) {
43
- result.handle = validHandles;
44
- }
45
- }
46
- // Handle tags filter
47
- if (baseFilters.tags) {
48
- const tags = Array.isArray(baseFilters.tags)
49
- ? baseFilters.tags
50
- : [baseFilters.tags];
51
- const validTags = tags.filter((tag) => tag !== null && tag !== undefined && tag !== "");
52
- if (validTags.length > 0) {
53
- result.tags = {
54
- value: validTags,
55
- };
56
- }
57
- }
58
- // Handle sales_channel_id filter
59
- if (baseFilters.sales_channel_id) {
60
- const channelIds = Array.isArray(baseFilters.sales_channel_id)
61
- ? baseFilters.sales_channel_id
62
- : [baseFilters.sales_channel_id];
63
- const validChannelIds = channelIds.filter((id) => id !== null && id !== undefined && id !== "");
64
- if (validChannelIds.length > 0) {
65
- result.sales_channels = {
66
- id: validChannelIds,
67
- };
68
- }
69
- }
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 }));
70
15
  return result;
71
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
+ }
72
29
  validate(value) {
73
- if (value === undefined || value === null) {
30
+ if (value == null)
74
31
  return;
75
- }
76
- if (typeof value !== "object" || Array.isArray(value)) {
32
+ if (!this.isValidFilters(value)) {
77
33
  throw new Error("base_product must be an object");
78
34
  }
79
35
  const baseFilters = value;
80
- // Validate id
81
- if (baseFilters.id !== undefined) {
82
- const ids = Array.isArray(baseFilters.id)
83
- ? baseFilters.id
84
- : [baseFilters.id];
85
- if (!ids.every((id) => typeof id === "string" && id.trim().length > 0)) {
86
- throw new Error("base_product.id must be a string or array of non-empty strings");
87
- }
88
- }
89
- // Validate handle
90
- if (baseFilters.handle !== undefined) {
91
- const handles = Array.isArray(baseFilters.handle)
92
- ? baseFilters.handle
93
- : [baseFilters.handle];
94
- if (!handles.every((handle) => typeof handle === "string" && handle.trim().length > 0)) {
95
- throw new Error("base_product.handle must be a string or array of non-empty strings");
96
- }
97
- }
98
- // Validate tags
99
- if (baseFilters.tags !== undefined) {
100
- const tags = Array.isArray(baseFilters.tags)
101
- ? baseFilters.tags
102
- : [baseFilters.tags];
103
- if (!tags.every((tag) => typeof tag === "string" && tag.trim().length > 0)) {
104
- throw new Error("base_product.tags must be a string or array of non-empty strings");
105
- }
106
- }
107
- // Validate sales_channel_id
108
- if (baseFilters.sales_channel_id !== undefined) {
109
- const channelIds = Array.isArray(baseFilters.sales_channel_id)
110
- ? baseFilters.sales_channel_id
111
- : [baseFilters.sales_channel_id];
112
- if (!channelIds.every((id) => typeof id === "string" && id.trim().length > 0)) {
113
- throw new Error("base_product.sales_channel_id must be a string or array of non-empty strings");
114
- }
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`);
115
52
  }
116
53
  }
117
54
  }
@@ -119,4 +56,4 @@ exports.BaseProductFilterProvider = BaseProductFilterProvider;
119
56
  BaseProductFilterProvider.identifier = "base_product";
120
57
  BaseProductFilterProvider.displayName = "Base Product Filters";
121
58
  BaseProductFilterProvider.description = "Filters products by ID, handle, tags, and sales channel";
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9kdWN0LXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9maWx0ZXItcHJvdmlkZXJzL2Jhc2UtcHJvZHVjdC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQWEseUJBQTBCLFNBQVEseUNBQWtCO0lBTS9ELEtBQUssQ0FDSCxPQUFnQyxFQUNoQyxLQUFjLEVBQ2QsT0FBdUI7UUFFdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4QyxPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsS0FBZ0MsQ0FBQTtRQUNwRCxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUE7UUFFN0IsbUJBQW1CO1FBQ25CLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25CLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNoQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDcEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FDekIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUNyRCxDQUFBO1lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQTtZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixJQUFJLFdBQVcs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
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9kdWN0LXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9maWx0ZXItcHJvdmlkZXJzL2Jhc2UtcHJvZHVjdC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBK0U7QUFXL0UsTUFBYSx5QkFBMEIsU0FBUSx5Q0FBa0I7SUFLL0QsS0FBSyxDQUFDLE9BQWdDLEVBQUUsS0FBYztRQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLE9BQU8sQ0FBQTtRQUUvQyxNQUFNLFdBQVcsR0FBRyxLQUEyQixDQUFBO1FBQy9DLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQTtRQUU3QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQzdGLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFFNUgsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRU8sY0FBYyxDQUFDLEtB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
@@ -2,54 +2,35 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CategoryFilterProvider = void 0;
4
4
  const base_filter_provider_1 = require("./base-filter-provider");
5
- /**
6
- * Filter provider for filtering products by category IDs.
7
- *
8
- * Handles the `category_id` filter parameter, which accepts:
9
- * - A single category ID string
10
- * - An array of category ID strings
11
- *
12
- * @example
13
- * ```ts
14
- * // Single category
15
- * { category_id: "cat_123" }
16
- *
17
- * // Multiple categories
18
- * { category_id: ["cat_123", "cat_456"] }
19
- * ```
20
- */
21
5
  class CategoryFilterProvider extends base_filter_provider_1.BaseFilterProvider {
22
- apply(filters, value, context) {
23
- if (!value) {
6
+ apply(filters, value) {
7
+ const categoryIds = this.normalizeAndValidate(value);
8
+ if (categoryIds.length === 0) {
24
9
  return filters;
25
10
  }
26
- // Normalize to array
27
- const categoryIds = Array.isArray(value) ? value : [value];
28
- // Filter out empty values
29
- const validIds = categoryIds.filter((id) => id !== null && id !== undefined && id !== "");
30
- if (validIds.length === 0) {
31
- return filters;
32
- }
33
- // Apply category filter
34
11
  return {
35
12
  ...filters,
36
- categories: {
37
- id: validIds,
38
- },
13
+ categories: { id: categoryIds }
39
14
  };
40
15
  }
41
16
  validate(value) {
42
- if (value === undefined || value === null) {
17
+ if (value == null)
43
18
  return;
44
- }
45
- const ids = Array.isArray(value) ? value : [value];
46
- if (!ids.every((id) => typeof id === "string" && id.trim().length > 0)) {
19
+ const ids = this.normalizeAndValidate(value);
20
+ if (ids.length === 0) {
47
21
  throw new Error("category_id must be a string or array of non-empty strings");
48
22
  }
49
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
+ }
50
31
  }
51
32
  exports.CategoryFilterProvider = CategoryFilterProvider;
52
33
  CategoryFilterProvider.identifier = "category_id";
53
34
  CategoryFilterProvider.displayName = "Category Filter";
54
35
  CategoryFilterProvider.description = "Filters products by category IDs";
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvY2F0ZWdvcnktcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUVBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQWEsc0JBQXVCLFNBQVEseUNBQWtCO0lBSzVELEtBQUssQ0FDSCxPQUFnQyxFQUNoQyxLQUFjLEVBQ2QsT0FBdUI7UUFFdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELHFCQUFxQjtRQUNyQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFMUQsMEJBQTBCO1FBQzFCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQ2pDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxTQUFTLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FDckQsQ0FBQTtRQUVELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLE9BQU87WUFDTCxHQUFHLE9BQU87WUFDVixVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFLFFBQVE7YUFDYjtTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWM7UUFDckIsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVsRCxJQUNFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDUixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUN2RCxFQUNELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLDREQUE0RCxDQUM3RCxDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBbkRILHdEQW9EQztBQW5EaUIsaUNBQVUsR0FBRyxhQUFhLENBQUE7QUFDMUIsa0NBQVcsR0FBRyxpQkFBaUIsQ0FBQTtBQUMvQixrQ0FBVyxHQUFHLGtDQUFrQyxDQUFBIn0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvY2F0ZWdvcnktcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUVBQStFO0FBRS9FLE1BQWEsc0JBQXVCLFNBQVEseUNBQWtCO0lBSzVELEtBQUssQ0FBQyxPQUFnQyxFQUFFLEtBQWM7UUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRXBELElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDO1FBRUQsT0FBTztZQUNMLEdBQUcsT0FBTztZQUNWLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUU7U0FDaEMsQ0FBQTtJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYztRQUNyQixJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTTtRQUV6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFNUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQTtRQUMvRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBQWM7UUFDekMsSUFBSSxLQUFLLElBQUksSUFBSTtZQUFFLE9BQU8sRUFBRSxDQUFBO1FBRTVCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVsRCxPQUFPLEdBQUc7YUFDUCxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQWdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNqRixDQUFDOztBQW5DSCx3REFvQ0M7QUFuQ2lCLGlDQUFVLEdBQUcsYUFBYSxDQUFBO0FBQzFCLGtDQUFXLEdBQUcsaUJBQWlCLENBQUE7QUFDL0Isa0NBQVcsR0FBRyxrQ0FBa0MsQ0FBQSJ9
@@ -2,52 +2,35 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CollectionFilterProvider = void 0;
4
4
  const base_filter_provider_1 = require("./base-filter-provider");
5
- /**
6
- * Filter provider for filtering products by collection IDs.
7
- *
8
- * Handles the `collection_id` filter parameter, which accepts:
9
- * - A single collection ID string
10
- * - An array of collection ID strings
11
- *
12
- * @example
13
- * ```ts
14
- * // Single collection
15
- * { collection_id: "col_123" }
16
- *
17
- * // Multiple collections
18
- * { collection_id: ["col_123", "col_456"] }
19
- * ```
20
- */
21
5
  class CollectionFilterProvider extends base_filter_provider_1.BaseFilterProvider {
22
- apply(filters, value, context) {
23
- if (!value) {
6
+ apply(filters, value) {
7
+ const collectionIds = this.normalizeAndValidate(value);
8
+ if (collectionIds.length === 0) {
24
9
  return filters;
25
10
  }
26
- // Normalize to array
27
- const collectionIds = Array.isArray(value) ? value : [value];
28
- // Filter out empty values
29
- const validIds = collectionIds.filter((id) => id !== null && id !== undefined && id !== "");
30
- if (validIds.length === 0) {
31
- return filters;
32
- }
33
- // Apply collection filter
34
11
  return {
35
12
  ...filters,
36
- collection_id: validIds,
13
+ collection_id: collectionIds
37
14
  };
38
15
  }
39
16
  validate(value) {
40
- if (value === undefined || value === null) {
17
+ if (value == null)
41
18
  return;
42
- }
43
- const ids = Array.isArray(value) ? value : [value];
44
- if (!ids.every((id) => typeof id === "string" && id.trim().length > 0)) {
19
+ const ids = this.normalizeAndValidate(value);
20
+ if (ids.length === 0) {
45
21
  throw new Error("collection_id must be a string or array of non-empty strings");
46
22
  }
47
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
+ }
48
31
  }
49
32
  exports.CollectionFilterProvider = CollectionFilterProvider;
50
33
  CollectionFilterProvider.identifier = "collection_id";
51
34
  CollectionFilterProvider.displayName = "Collection Filter";
52
35
  CollectionFilterProvider.description = "Filters products by collection IDs";
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvZmlsdGVyLXByb3ZpZGVycy9jb2xsZWN0aW9uLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFhLHdCQUF5QixTQUFRLHlDQUFrQjtJQUs5RCxLQUFLLENBQ0gsT0FBZ0MsRUFDaEMsS0FBYyxFQUNkLE9BQXVCO1FBRXZCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sT0FBTyxDQUFBO1FBQ2hCLENBQUM7UUFFRCxxQkFBcUI7UUFDckIsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTVELDBCQUEwQjtRQUMxQixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUNuQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssU0FBUyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQ3JELENBQUE7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixPQUFPO1lBQ0wsR0FBRyxPQUFPO1lBQ1YsYUFBYSxFQUFFLFFBQVE7U0FDeEIsQ0FBQTtJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYztRQUNyQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFDLE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRWxELElBQ0UsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUNSLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3ZELEVBQ0QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsOERBQThELENBQy9ELENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs7QUFqREgsNERBa0RDO0FBakRpQixtQ0FBVSxHQUFHLGVBQWUsQ0FBQTtBQUM1QixvQ0FBVyxHQUFHLG1CQUFtQixDQUFBO0FBQ2pDLG9DQUFXLEdBQUcsb0NBQW9DLENBQUEifQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvZmlsdGVyLXByb3ZpZGVycy9jb2xsZWN0aW9uLXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlFQUErRTtBQUUvRSxNQUFhLHdCQUF5QixTQUFRLHlDQUFrQjtJQUs5RCxLQUFLLENBQUMsT0FBZ0MsRUFBRSxLQUFjO1FBQ3BELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUV0RCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELE9BQU87WUFDTCxHQUFHLE9BQU87WUFDVixhQUFhLEVBQUUsYUFBYTtTQUM3QixDQUFBO0lBQ0gsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFjO1FBQ3JCLElBQUksS0FBSyxJQUFJLElBQUk7WUFBRSxPQUFNO1FBRXpCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUU1QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFBO1FBQ2pGLENBQUM7SUFDSCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FBYztRQUN6QyxJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUE7UUFFNUIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRWxELE9BQU8sR0FBRzthQUNQLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQ2pGLENBQUM7O0FBbkNILDREQW9DQztBQW5DaUIsbUNBQVUsR0FBRyxlQUFlLENBQUE7QUFDNUIsb0NBQVcsR0FBRyxtQkFBbUIsQ0FBQTtBQUNqQyxvQ0FBVyxHQUFHLG9DQUFvQyxDQUFBIn0=
@@ -1,14 +1,9 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Filter Providers Module
4
- *
5
- * This module exports all filter providers and provides utilities
6
- * for registering built-in providers.
7
4
  */
8
5
  Object.defineProperty(exports, "__esModule", { value: true });
9
- 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;
10
- exports.registerBuiltInProviders = registerBuiltInProviders;
11
- exports.getBuiltInProviderIdentifiers = getBuiltInProviderIdentifiers;
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;
12
7
  var base_filter_provider_1 = require("./base-filter-provider");
13
8
  Object.defineProperty(exports, "BaseFilterProvider", { enumerable: true, get: function () { return base_filter_provider_1.BaseFilterProvider; } });
14
9
  var category_provider_1 = require("./category-provider");
@@ -38,10 +33,7 @@ const promotion_provider_2 = require("./promotion-provider");
38
33
  const availability_provider_2 = require("./availability-provider");
39
34
  const rating_provider_2 = require("./rating-provider");
40
35
  const base_product_provider_2 = require("./base-product-provider");
41
- /**
42
- * List of all built-in filter provider classes.
43
- */
44
- exports.BUILT_IN_PROVIDERS = [
36
+ const PROVIDERS = [
45
37
  category_provider_2.CategoryFilterProvider,
46
38
  collection_provider_2.CollectionFilterProvider,
47
39
  metadata_provider_2.MetadataFilterProvider,
@@ -52,43 +44,15 @@ exports.BUILT_IN_PROVIDERS = [
52
44
  rating_provider_2.RatingFilterProvider,
53
45
  base_product_provider_2.BaseProductFilterProvider,
54
46
  ];
55
- /**
56
- * Register all built-in filter providers with the registry.
57
- *
58
- * This function instantiates and registers all built-in providers.
59
- * Providers that are disabled (via disableBuiltInProviders option)
60
- * will be skipped.
61
- *
62
- * @param registry - Filter provider registry instance
63
- * @param disabledProviders - Optional array of provider identifiers to skip
64
- *
65
- * @example
66
- * ```ts
67
- * const registry = new FilterProviderRegistry()
68
- * registerBuiltInProviders(registry)
69
- *
70
- * // Or with disabled providers
71
- * registerBuiltInProviders(registry, ["rating"])
72
- * ```
73
- */
74
- function registerBuiltInProviders(registry, disabledProviders = []) {
75
- for (const ProviderClass of exports.BUILT_IN_PROVIDERS) {
76
- const identifier = ProviderClass.identifier;
77
- // Skip disabled providers
78
- if (disabledProviders.includes(identifier)) {
79
- continue;
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());
80
52
  }
81
- // Instantiate and register provider
82
- const provider = new ProviderClass();
83
- registry.register(provider);
84
- }
85
- }
86
- /**
87
- * Get all built-in provider identifiers.
88
- *
89
- * @returns Array of provider identifiers
90
- */
91
- function getBuiltInProviderIdentifiers() {
92
- return exports.BUILT_IN_PROVIDERS.map((ProviderClass) => ProviderClass.identifier);
93
- }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztHQUtHOzs7QUFnRUgsNERBZ0JDO0FBT0Qsc0VBRUM7QUF2RkQsK0RBSStCO0FBSDdCLDBIQUFBLGtCQUFrQixPQUFBO0FBS3BCLHlEQUE0RDtBQUFuRCwySEFBQSxzQkFBc0IsT0FBQTtBQUMvQiw2REFBZ0U7QUFBdkQsK0hBQUEsd0JBQXdCLE9BQUE7QUFDakMseURBQTREO0FBQW5ELDJIQUFBLHNCQUFzQixPQUFBO0FBQy9CLCtEQUFpRTtBQUF4RCxnSUFBQSx3QkFBd0IsT0FBQTtBQUNqQyx5RUFBMkU7QUFBbEUsMElBQUEsNkJBQTZCLE9BQUE7QUFDdEMsMkRBQThEO0FBQXJELDZIQUFBLHVCQUF1QixPQUFBO0FBQ2hDLGlFQUFvRTtBQUEzRCxtSUFBQSwwQkFBMEIsT0FBQTtBQUNuQyxxREFBd0Q7QUFBL0MsdUhBQUEsb0JBQW9CLE9BQUE7QUFDN0IsaUVBQW1FO0FBQTFELGtJQUFBLHlCQUF5QixPQUFBO0FBR2xDLDJEQUE0RDtBQUM1RCwrREFBZ0U7QUFDaEUsMkRBQTREO0FBQzVELGlFQUFpRTtBQUNqRSwyRUFBMkU7QUFDM0UsNkRBQThEO0FBQzlELG1FQUFvRTtBQUNwRSx1REFBd0Q7QUFDeEQsbUVBQW1FO0FBR25FOztHQUVHO0FBQ1UsUUFBQSxrQkFBa0IsR0FBRztJQUNoQywwQ0FBc0I7SUFDdEIsOENBQXdCO0lBQ3hCLDBDQUFzQjtJQUN0QiwrQ0FBd0I7SUFDeEIseURBQTZCO0lBQzdCLDRDQUF1QjtJQUN2QixrREFBMEI7SUFDMUIsc0NBQW9CO0lBQ3BCLGlEQUF5QjtDQUNqQixDQUFBO0FBRVY7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILFNBQWdCLHdCQUF3QixDQUN0QyxRQUFnQyxFQUNoQyxvQkFBOEIsRUFBRTtJQUVoQyxLQUFLLE1BQU0sYUFBYSxJQUFJLDBCQUFrQixFQUFFLENBQUM7UUFDL0MsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQTtRQUUzQywwQkFBMEI7UUFDMUIsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxTQUFRO1FBQ1YsQ0FBQztRQUVELG9DQUFvQztRQUNwQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFBO1FBQ3BDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0IsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsNkJBQTZCO0lBQzNDLE9BQU8sMEJBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDNUUsQ0FBQyJ9
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=