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.
- package/.medusa/server/src/admin/index.js +59 -117
- package/.medusa/server/src/admin/index.mjs +59 -117
- package/.medusa/server/src/api/store/product-helper/products/route.js +41 -5
- package/.medusa/server/src/api/store/product-helper/products/validators.js +2 -1
- package/.medusa/server/src/providers/filter-providers/availability-provider.js +53 -67
- package/.medusa/server/src/providers/filter-providers/base-filter-provider.js +1 -19
- package/.medusa/server/src/providers/filter-providers/base-product-provider.js +37 -100
- package/.medusa/server/src/providers/filter-providers/category-provider.js +15 -34
- package/.medusa/server/src/providers/filter-providers/collection-provider.js +15 -32
- package/.medusa/server/src/providers/filter-providers/index.js +13 -49
- package/.medusa/server/src/providers/filter-providers/metadata-provider.js +38 -57
- package/.medusa/server/src/providers/filter-providers/price-range-provider.js +66 -79
- package/.medusa/server/src/providers/filter-providers/promotion-provider.js +106 -169
- package/.medusa/server/src/providers/filter-providers/promotion-window-provider.js +53 -93
- package/.medusa/server/src/providers/filter-providers/rating-provider.js +47 -70
- package/.medusa/server/src/services/dynamic-filter-service.js +455 -744
- package/.medusa/server/src/services/filter-provider-loader.js +91 -139
- package/.medusa/server/src/services/filter-provider-registry.js +8 -107
- package/.medusa/server/src/services/product-filter-service.js +127 -174
- package/.medusa/server/src/shared/product-metadata/utils.js +66 -116
- package/.medusa/server/src/utils/query-builders/product-filters.js +89 -111
- package/.medusa/server/src/utils/query-parser.js +24 -76
- package/.medusa/server/src/workflows/add-to-wishlist.js +12 -26
- package/.medusa/server/src/workflows/get-wishlist.js +53 -51
- package/.medusa/server/src/workflows/remove-from-wishlist.js +3 -8
- 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 (!
|
|
7
|
+
if (!this.isValidConfig(value)) {
|
|
22
8
|
return filters;
|
|
23
9
|
}
|
|
24
|
-
const
|
|
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
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
44
|
-
|
|
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
|
|
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
|
|
62
|
-
if (
|
|
63
|
-
if (!Array.isArray(
|
|
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 (!
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhaWxhYmlsaXR5LXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9maWx0ZXItcHJvdmlkZXJzL2F2YWlsYWJpbGl0eS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBK0U7QUFXL0UsTUFBYSwwQkFBMkIsU0FBUSx5Q0FBa0I7SUFLaEUsS0FBSyxDQUFDLE9BQWdDLEVBQUUsS0FBYyxFQUFFLE9BQXVCO1FBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLEtBQTJCLENBQUE7UUFDMUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFBO1FBRTdCLDBEQUEwRDtRQUMxRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4RixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN4RixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUMxRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUU3RixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO1FBQ2pDLENBQUM7UUFFRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDOUQsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFjO1FBQ2xDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFTyxlQUFlLENBQ3JCLE1BQTBCLEVBQzFCLE9BQWtDLEVBQ2xDLEdBQTZCLEVBQzdCLFlBQXFCO1FBRXJCLDJCQUEyQjtRQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQVksQ0FBQTtRQUMvQixDQUFDO1FBRUQsd0RBQXdEO1FBQ3hELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUE7UUFDMUQsSUFBSSxtQkFBbUIsSUFBSSxPQUFPLG1CQUFtQixLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25FLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLEdBQXVDLENBQUMsQ0FBQTtZQUMxRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixPQUFPLEtBQUssQ0FBQTtZQUNkLENBQUM7UUFDSCxDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLE9BQU8sWUFBWSxDQUFBO0lBQ3JCLENBQUM7SUFFTyxXQUFXLENBQUMsT0FBZ0IsRUFBRSxTQUFpQjtRQUNyRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUN4RSxDQUFDO1FBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYztRQUNyQixJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTTtRQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtRQUNuRCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsS0FBMkIsQ0FBQTtRQUUxQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQTtZQUMzRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ25FLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQTtZQUNoRixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFpQztZQUNsRCxrQkFBa0I7WUFDbEIsbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQixrQkFBa0I7U0FDbkIsQ0FBQTtRQUVELGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN0RSxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixLQUFLLG9CQUFvQixDQUFDLENBQUE7WUFDNUQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs7QUEvRkgsZ0VBZ0dDO0FBL0ZpQixxQ0FBVSxHQUFHLGNBQWMsQ0FBQTtBQUMzQixzQ0FBVyxHQUFHLHFCQUFxQixDQUFBO0FBQ25DLHNDQUFXLEdBQUcscURBQXFELENBQUEifQ==
|
|
@@ -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,
|
|
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
|
|
21
|
-
if (!value
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
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
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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,
|
|
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
|
|
23
|
-
|
|
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
|
|
17
|
+
if (value == null)
|
|
43
18
|
return;
|
|
44
|
-
|
|
45
|
-
|
|
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,
|
|
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
|
|
23
|
-
|
|
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:
|
|
13
|
+
collection_id: collectionIds
|
|
37
14
|
};
|
|
38
15
|
}
|
|
39
16
|
validate(value) {
|
|
40
|
-
if (value
|
|
17
|
+
if (value == null)
|
|
41
18
|
return;
|
|
42
|
-
|
|
43
|
-
|
|
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,
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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=
|