medusa-product-helper 0.0.13 → 0.0.16
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/api/store/product-helper/products/route.js +76 -0
- package/.medusa/server/src/api/store/product-helper/products/validators.js +2 -1
- package/.medusa/server/src/config/product-helper-options.js +15 -1
- package/.medusa/server/src/index.js +101 -0
- package/.medusa/server/src/providers/filter-providers/availability-provider.js +96 -0
- package/.medusa/server/src/providers/filter-providers/base-filter-provider.js +32 -0
- package/.medusa/server/src/providers/filter-providers/base-product-provider.js +122 -0
- package/.medusa/server/src/providers/filter-providers/category-provider.js +55 -0
- package/.medusa/server/src/providers/filter-providers/collection-provider.js +53 -0
- package/.medusa/server/src/providers/filter-providers/index.js +94 -0
- package/.medusa/server/src/providers/filter-providers/metadata-provider.js +88 -0
- package/.medusa/server/src/providers/filter-providers/price-range-provider.js +108 -0
- package/.medusa/server/src/providers/filter-providers/promotion-provider.js +197 -0
- package/.medusa/server/src/providers/filter-providers/promotion-window-provider.js +125 -0
- package/.medusa/server/src/providers/filter-providers/rating-provider.js +92 -0
- package/.medusa/server/src/services/dynamic-filter-service.js +814 -0
- package/.medusa/server/src/services/filter-provider-loader.js +155 -0
- package/.medusa/server/src/services/filter-provider-registry.js +142 -0
- package/.medusa/server/src/services/product-filter-service.js +230 -0
- package/.medusa/server/src/utils/query-parser.js +103 -0
- package/README.md +89 -0
- package/package.json +3 -3
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const product_helper_options_1 = require("../../../../config/product-helper-options");
|
|
6
|
+
const product_filter_service_1 = require("../../../../services/product-filter-service");
|
|
7
|
+
const query_parser_1 = require("../../../../utils/query-parser");
|
|
8
|
+
const validators_1 = require("./validators");
|
|
9
|
+
/**
|
|
10
|
+
* GET /store/product-helper/products
|
|
11
|
+
*
|
|
12
|
+
* List products with advanced filtering capabilities.
|
|
13
|
+
*
|
|
14
|
+
* Matches Medusa's official /store/products API format while adding
|
|
15
|
+
* support for custom filter providers and advanced filtering.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```bash
|
|
19
|
+
* # Basic filter
|
|
20
|
+
* GET /store/product-helper/products?category_id=cat_123
|
|
21
|
+
*
|
|
22
|
+
* # Multiple filters
|
|
23
|
+
* GET /store/product-helper/products?category_id=cat_123&price_min=10&price_max=100
|
|
24
|
+
*
|
|
25
|
+
* # Custom filter (if provider registered)
|
|
26
|
+
* GET /store/product-helper/products?margin[min]=20&margin[max]=40
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
const GET = async (req, res) => {
|
|
30
|
+
try {
|
|
31
|
+
// Normalize query parameters to handle both bracketed and nested formats
|
|
32
|
+
// e.g., price_range[min]=10 -> { price_range: { min: "10" } }
|
|
33
|
+
const rawQuery = req.query || {};
|
|
34
|
+
const normalizedQuery = (0, query_parser_1.normalizeQueryParams)(rawQuery);
|
|
35
|
+
// Validate query parameters using zod schema
|
|
36
|
+
// This ensures type safety and catches invalid inputs early
|
|
37
|
+
const validatedQuery = validators_1.StoreProductHelperFilterQuerySchema.parse(normalizedQuery);
|
|
38
|
+
// Resolve plugin options
|
|
39
|
+
const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
40
|
+
const options = (0, product_helper_options_1.resolveProductHelperOptions)(configModule);
|
|
41
|
+
// Apply filters using ProductFilterService
|
|
42
|
+
// This service will merge custom filters with req.filterableFields
|
|
43
|
+
const filterService = new product_filter_service_1.ProductFilterService(req.scope);
|
|
44
|
+
const { products, count, metadata } = await filterService.applyFilterPlanWithMedusaContext({
|
|
45
|
+
queryConfig: req.queryConfig,
|
|
46
|
+
filterableFields: req.filterableFields || {},
|
|
47
|
+
pricingContext: req.pricingContext,
|
|
48
|
+
query: validatedQuery,
|
|
49
|
+
}, options);
|
|
50
|
+
// Return response matching Medusa's format
|
|
51
|
+
res.json({
|
|
52
|
+
products: products,
|
|
53
|
+
count: metadata?.count || count || products.length,
|
|
54
|
+
offset: metadata?.skip || 0,
|
|
55
|
+
limit: metadata?.take || products.length,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
// Handle validation errors
|
|
60
|
+
if (error && typeof error === "object" && "issues" in error) {
|
|
61
|
+
// Zod validation error
|
|
62
|
+
res.status(400).json({
|
|
63
|
+
message: "Invalid query parameters",
|
|
64
|
+
errors: error.issues,
|
|
65
|
+
});
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// Handle other errors
|
|
69
|
+
const errorMessage = error instanceof Error ? error.message : "Internal server error";
|
|
70
|
+
res.status(500).json({
|
|
71
|
+
message: errorMessage,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
exports.GET = GET;
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb2R1Y3QtaGVscGVyL3Byb2R1Y3RzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHFEQUFxRTtBQUNyRSxzRkFBdUY7QUFDdkYsd0ZBQWtGO0FBQ2xGLGlFQUFxRTtBQUNyRSw2Q0FFcUI7QUFnQnJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUF1QixFQUN2QixHQUF1RCxFQUN2RCxFQUFFO0lBQ0YsSUFBSSxDQUFDO1FBQ0gseUVBQXlFO1FBQ3pFLDhEQUE4RDtRQUM5RCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQTtRQUNoQyxNQUFNLGVBQWUsR0FBRyxJQUFBLG1DQUFvQixFQUMxQyxRQUFtQyxDQUNwQyxDQUFBO1FBRUQsNkNBQTZDO1FBQzdDLDREQUE0RDtRQUM1RCxNQUFNLGNBQWMsR0FBRyxnREFBbUMsQ0FBQyxLQUFLLENBQzlELGVBQWUsQ0FDaEIsQ0FBQTtRQUVELHlCQUF5QjtRQUN6QixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUMvRSxNQUFNLE9BQU8sR0FBRyxJQUFBLG9EQUEyQixFQUFDLFlBQVksQ0FBQyxDQUFBO1FBRXpELDJDQUEyQztRQUMzQyxtRUFBbUU7UUFDbkUsTUFBTSxhQUFhLEdBQUcsSUFBSSw2Q0FBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekQsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxhQUFhLENBQUMsZ0NBQWdDLENBQ3hGO1lBQ0UsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXO1lBQzVCLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFO1lBQzVDLGNBQWMsRUFBRSxHQUFHLENBQUMsY0FBYztZQUNsQyxLQUFLLEVBQUUsY0FBeUM7U0FDakQsRUFDRCxPQUFPLENBQ1IsQ0FBQTtRQUVELDJDQUEyQztRQUMzQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ1AsUUFBUSxFQUFFLFFBQW9DO1lBQzlDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLEtBQUssSUFBSSxRQUFRLENBQUMsTUFBTTtZQUNsRCxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDO1lBQzNCLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNO1NBQ3pDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsMkJBQTJCO1FBQzNCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7WUFDNUQsdUJBQXVCO1lBQ3ZCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNuQixPQUFPLEVBQUUsMEJBQTBCO2dCQUNuQyxNQUFNLEVBQUcsS0FBK0IsQ0FBQyxNQUFNO2FBQ0MsQ0FBQyxDQUFBO1lBQ25ELE9BQU07UUFDUixDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLE1BQU0sWUFBWSxHQUNoQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQTtRQUNsRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixPQUFPLEVBQUUsWUFBWTtTQUMyQixDQUFDLENBQUE7SUFDckQsQ0FBQztBQUNILENBQUMsQ0FBQTtBQTVEWSxRQUFBLEdBQUcsT0E0RGYifQ==
|
|
@@ -146,6 +146,7 @@ exports.StoreProductHelperFilterQuerySchema = zod_1.z
|
|
|
146
146
|
rating_max: optionalNumberish,
|
|
147
147
|
rating_required: booleanish.default(false),
|
|
148
148
|
})
|
|
149
|
+
.passthrough() // Allow unknown properties for custom filter providers
|
|
149
150
|
.refine((value) => typeof value.price_min === "undefined" ||
|
|
150
151
|
typeof value.price_max === "undefined" ||
|
|
151
152
|
value.price_min <= value.price_max, {
|
|
@@ -168,4 +169,4 @@ exports.StoreBestSellingQuerySchema = zod_1.z.object({
|
|
|
168
169
|
variant_id: stringArray,
|
|
169
170
|
product_id: stringArray,
|
|
170
171
|
});
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvcHJvZHVjdC1oZWxwZXIvcHJvZHVjdHMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBdUI7QUFFdkIsTUFBTSxjQUFjLEdBQUcsT0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ3hELE1BQU0saUJBQWlCLEdBQUcsT0FBQztLQUN4QixLQUFLLENBQUMsQ0FBQyxPQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0tBQ2hELFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ25CLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMxRCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQ1gsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN2QixDQUFDLENBQUMsS0FBSztRQUNQLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUVwRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMsQ0FBQyxDQUFBO0FBRUosTUFBTSxXQUFXLEdBQUcsT0FBQztLQUNsQixLQUFLLENBQUMsQ0FBQyxP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
|
|
@@ -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,
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1oZWxwZXItb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb25maWcvcHJvZHVjdC1oZWxwZXItb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzTEEsc0VBd0JDO0FBRUQsa0VBbUJDO0FBbk9ELHFEQUFvRDtBQUNwRCw2QkFBdUI7QUFFdkIsNERBR3lDO0FBQ3pDLDREQUErRTtBQUUvRSxNQUFNLGdCQUFnQixHQUFHLE9BQUM7S0FDdkIsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDbEQsYUFBYSxFQUFFLE9BQUM7U0FDYixNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixNQUFNLENBQUMsQ0FBQyxFQUFFLG1DQUFtQyxDQUFDO1NBQzlDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3pDLFFBQVEsRUFBRTtJQUNiLEdBQUcsRUFBRSxPQUFDO1NBQ0gsTUFBTSxDQUFDO1FBQ04sTUFBTSxFQUFFLElBQUk7UUFDWixrQkFBa0IsRUFBRSw0QkFBNEI7S0FDakQsQ0FBQztTQUNELFdBQVcsRUFBRTtTQUNiLFFBQVEsRUFBRTtTQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDaEIsR0FBRyxFQUFFLE9BQUM7U0FDSCxNQUFNLENBQUM7UUFDTixNQUFNLEVBQUUsSUFBSTtRQUNaLGtCQUFrQixFQUFFLDRCQUE0QjtLQUNqRCxDQUFDO1NBQ0QsV0FBVyxFQUFFO1NBQ2IsUUFBUSxFQUFFO1NBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQztDQUNqQixDQUFDO0tBQ0QsTUFBTSxDQUNMLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFLLENBQUMsR0FBRyxLQUFLLElBQUk7SUFDbEIsS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJO0lBQ2pCLEtBQUssQ0FBQyxHQUFjLElBQUssS0FBSyxDQUFDLEdBQWMsRUFDaEQ7SUFDRSxPQUFPLEVBQUUsNkNBQTZDO0lBQ3RELElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQztDQUNkLENBQ0YsQ0FBQTtBQUVILE1BQU0sd0JBQXdCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxHQUFHLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEIsS0FBSyxFQUFFLE9BQUM7U0FDTCxNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN4RCxRQUFRLEVBQUU7SUFDYixJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBb0IsQ0FBQztJQUNsQyxVQUFVLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Q0FDdkMsQ0FBQyxDQUFBO0FBRUYsTUFBTSx3QkFBd0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hDLFdBQVcsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztDQUMzRCxDQUFDLENBQUE7QUFFRixNQUFNLHFCQUFxQixHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQztJQUM1RCxxQkFBcUIsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztDQUNqRCxDQUFDLENBQUE7QUFFRixNQUFNLGNBQWMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzlCLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUM7UUFDdEMsV0FBVyxFQUFFLEVBQUU7UUFDZixxQkFBcUIsRUFBRSxJQUFJO0tBQzVCLENBQUM7SUFDRixVQUFVLEVBQUUsd0JBQXdCLENBQUMsT0FBTyxDQUFDO1FBQzNDLFdBQVcsRUFBRSxFQUFFO0tBQ2hCLENBQUM7Q0FDSCxDQUFDLENBQUE7QUFFRixNQUFNLHFCQUFxQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDckMsa0JBQWtCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7SUFDaEUsZ0JBQWdCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO0lBQzVELDBCQUEwQixFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0NBQ3RELENBQUMsQ0FBQTtBQUVGLE1BQU0sa0JBQWtCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsQyxnQkFBZ0IsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM1QyxnQkFBZ0IsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzQyxpQkFBaUIsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM1QyxrQkFBa0IsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM5QyxnQkFBZ0IsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztDQUM1QyxDQUFDLENBQUE7QUFFRixNQUFNLFlBQVksR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVCLE9BQU8sRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNsQyxHQUFHLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RCxHQUFHLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RCxlQUFlLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Q0FDNUMsQ0FBQyxDQUFBO0FBRUYsTUFBTSwwQkFBMEIsR0FBRyxPQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3pDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSwyQkFBMkI7SUFDdkMsT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2hCLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtLQUMxQyxDQUFDO0NBQ0gsQ0FBQyxDQUFBO0FBRUYsTUFBTSwwQkFBMEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFDLFFBQVEsRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQy9CLFFBQVEsRUFBRTtZQUNSLFdBQVcsRUFBRSxFQUFFO1lBQ2YscUJBQXFCLEVBQUUsSUFBSTtTQUM1QjtRQUNELFVBQVUsRUFBRTtZQUNWLFdBQVcsRUFBRSxFQUFFO1NBQ2hCO0tBQ0YsQ0FBQztJQUNGLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUM1QyxLQUFLLEVBQUUsUUFBUTtRQUNmLEdBQUcsRUFBRSxJQUFJO1FBQ1QsR0FBRyxFQUFFLElBQUk7S0FDVixDQUFDO0lBQ0YsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsT0FBTyxDQUFDO1FBQzlDLGtCQUFrQixFQUFFLGlCQUFpQjtRQUNyQyxnQkFBZ0IsRUFBRSxlQUFlO1FBQ2pDLDBCQUEwQixFQUFFLElBQUk7S0FDakMsQ0FBQztJQUNGLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFDdkMsZ0JBQWdCLEVBQUUsS0FBSztRQUN2QixnQkFBZ0IsRUFBRSxJQUFJO1FBQ3RCLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsa0JBQWtCLEVBQUUsS0FBSztRQUN6QixnQkFBZ0IsRUFBRSxJQUFJO0tBQ3ZCLENBQUM7SUFDRixNQUFNLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUMzQixPQUFPLEVBQUUsSUFBSTtRQUNiLEdBQUcsRUFBRSxDQUFDO1FBQ04sR0FBRyxFQUFFLENBQUM7UUFDTixlQUFlLEVBQUUsS0FBSztLQUN2QixDQUFDO0lBQ0YsZUFBZSxFQUFFLE9BQUM7U0FDZixLQUFLLENBQUMsMEJBQTBCLENBQUM7U0FDakMsUUFBUSxFQUFFO1NBQ1YsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUNkLHVCQUF1QixFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztDQUNwRSxDQUFDLENBQUE7QUF3QlcsUUFBQSw4QkFBOEIsR0FDekMsNkJBQTZCLENBQUMsRUFBRSxDQUFDLENBQUE7QUFFbkMsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUE7QUFhM0MsU0FBZ0IsNkJBQTZCLENBQzNDLEtBQXNDO0lBRXRDLE1BQU0sTUFBTSxHQUFHLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUE7SUFFNUQsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNULFFBQVEsRUFBRTtZQUNSLFFBQVEsRUFBRTtnQkFDUixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUTtnQkFDM0IsV0FBVyxFQUFFLElBQUEsb0NBQTRCLEVBQ3ZDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDckM7YUFDRjtZQUNELFVBQVUsRUFBRTtnQkFDVixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVTtnQkFDN0IsV0FBVyxFQUFFLElBQUEsb0NBQTRCLEVBQ3ZDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FDdkM7YUFDRjtTQUNGO1FBQ0QsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlLElBQUksRUFBRTtRQUM3Qyx1QkFBdUIsRUFBRSxNQUFNLENBQUMsdUJBQXVCLElBQUksRUFBRTtLQUM5RCxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQWdCLDJCQUEyQixDQUN6QyxZQUFnQztJQUVoQyxNQUFNLE9BQU8sR0FBRyxZQUFZLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUUzQyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksSUFBQSxnQkFBUSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQzNCLE1BQUs7WUFDUCxDQUFDO1lBQ0QsU0FBUTtRQUNWLENBQUM7UUFFRCxJQUFJLE1BQU0sRUFBRSxPQUFPLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDcEMsT0FBTyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdEQsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLHNDQUE4QixDQUFBO0FBQ3ZDLENBQUMifQ==
|
|
@@ -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,96 @@
|
|
|
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
|
+
/**
|
|
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
|
+
class AvailabilityFilterProvider extends base_filter_provider_1.BaseFilterProvider {
|
|
20
|
+
apply(filters, value, context) {
|
|
21
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
22
|
+
return filters;
|
|
23
|
+
}
|
|
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;
|
|
38
|
+
const result = { ...filters };
|
|
39
|
+
// Apply status filter if provided
|
|
40
|
+
if (availability.statuses && availability.statuses.length > 0) {
|
|
41
|
+
result.status = availability.statuses;
|
|
42
|
+
}
|
|
43
|
+
// Apply publishable filter
|
|
44
|
+
if (publishableOnly) {
|
|
45
|
+
result.status = Array.isArray(result.status)
|
|
46
|
+
? [...result.status, "published"]
|
|
47
|
+
: ["published"];
|
|
48
|
+
}
|
|
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
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
validate(value) {
|
|
55
|
+
if (value === undefined || value === null) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (typeof value !== "object" || Array.isArray(value)) {
|
|
59
|
+
throw new Error("availability must be an object");
|
|
60
|
+
}
|
|
61
|
+
const availability = value;
|
|
62
|
+
if (availability.statuses !== undefined) {
|
|
63
|
+
if (!Array.isArray(availability.statuses)) {
|
|
64
|
+
throw new Error("availability.statuses must be an array");
|
|
65
|
+
}
|
|
66
|
+
if (!availability.statuses.every((status) => typeof status === "string" && status.trim().length > 0)) {
|
|
67
|
+
throw new Error("availability.statuses must be an array of non-empty strings");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (availability.include_preorder !== undefined) {
|
|
71
|
+
if (typeof availability.include_preorder !== "boolean") {
|
|
72
|
+
throw new Error("availability.include_preorder must be a boolean");
|
|
73
|
+
}
|
|
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
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.AvailabilityFilterProvider = AvailabilityFilterProvider;
|
|
93
|
+
AvailabilityFilterProvider.identifier = "availability";
|
|
94
|
+
AvailabilityFilterProvider.displayName = "Availability Filter";
|
|
95
|
+
AvailabilityFilterProvider.description = "Filters products by availability status and options";
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhaWxhYmlsaXR5LXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9maWx0ZXItcHJvdmlkZXJzL2F2YWlsYWJpbGl0eS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQWEsMEJBQTJCLFNBQVEseUNBQWtCO0lBTWhFLEtBQUssQ0FDSCxPQUFnQyxFQUNoQyxLQUFjLEVBQ2QsT0FBdUI7UUFFdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sT0FBTyxDQUFBO1FBQ2hCLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxLQU1wQixDQUFBO1FBRUQsNEJBQTRCO1FBQzVCLE1BQU0sZUFBZSxHQUNuQixZQUFZLENBQUMsZ0JBQWdCLEtBQUssU0FBUztZQUN6QyxDQUFDLENBQUMsWUFBWSxDQUFDLGdCQUFnQjtZQUMvQixDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFBO1FBRTlELE1BQU0sZ0JBQWdCLEdBQ3BCLFlBQVksQ0FBQyxpQkFBaUIsS0FBSyxTQUFTO1lBQzFDLENBQUMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCO1lBQ2hDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsSUFBSSxJQUFJLENBQUE7UUFFL0QsTUFBTSxnQkFBZ0IsR0FDcEIsWUFBWSxDQUFDLGtCQUFrQixLQUFLLFNBQVM7WUFDM0MsQ0FBQyxDQUFDLFlBQVksQ0FBQyxrQkFBa0I7WUFDakMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixJQUFJLEtBQUssQ0FB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
|
|
@@ -0,0 +1,32 @@
|
|
|
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
|
+
* @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
|
+
*/
|
|
29
|
+
class BaseFilterProvider {
|
|
30
|
+
}
|
|
31
|
+
exports.BaseFilterProvider = BaseFilterProvider;
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWx0ZXItcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvYmFzZS1maWx0ZXItcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFzQixrQkFBa0I7Q0FnRnZDO0FBaEZELGdEQWdGQyJ9
|
|
@@ -0,0 +1,122 @@
|
|
|
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
|
+
/**
|
|
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
|
+
class BaseProductFilterProvider extends base_filter_provider_1.BaseFilterProvider {
|
|
20
|
+
apply(filters, value, context) {
|
|
21
|
+
if (!value || typeof value !== "object") {
|
|
22
|
+
return filters;
|
|
23
|
+
}
|
|
24
|
+
const baseFilters = value;
|
|
25
|
+
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
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
validate(value) {
|
|
73
|
+
if (value === undefined || value === null) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (typeof value !== "object" || Array.isArray(value)) {
|
|
77
|
+
throw new Error("base_product must be an object");
|
|
78
|
+
}
|
|
79
|
+
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
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.BaseProductFilterProvider = BaseProductFilterProvider;
|
|
119
|
+
BaseProductFilterProvider.identifier = "base_product";
|
|
120
|
+
BaseProductFilterProvider.displayName = "Base Product Filters";
|
|
121
|
+
BaseProductFilterProvider.description = "Filters products by ID, handle, tags, and sales channel";
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wcm9kdWN0LXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9maWx0ZXItcHJvdmlkZXJzL2Jhc2UtcHJvZHVjdC1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQWEseUJBQTBCLFNBQVEseUNBQWtCO0lBTS9ELEtBQUssQ0FDSCxPQUFnQyxFQUNoQyxLQUFjLEVBQ2QsT0FBdUI7UUFFdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4QyxPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsS0FBZ0MsQ0FBQTtRQUNwRCxNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUE7UUFFN0IsbUJBQW1CO1FBQ25CLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25CLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNoQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDcEIsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FDekIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUNyRCxDQUFBO1lBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQTtZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7Z0JBQy9DLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTTtnQkFDcEIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3hCLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQ2pDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FDckUsQ0FBQTtZQUNELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUE7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ2xCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUMzQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQ3pELENBQUE7WUFDRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxJQUFJLEdBQUc7b0JBQ1osS0FBSyxFQUFFLFNBQVM7aUJBQ2pCLENBQUE7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDO2dCQUM1RCxDQUFDLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtnQkFDOUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDbEMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDdkMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUNyRCxDQUFBO1lBQ0QsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMvQixNQUFNLENBQUMsY0FBYyxHQUFHO29CQUN0QixFQUFFLEVBQUUsZUFBZTtpQkFDcEIsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWM7UUFDckIsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUE7UUFDbkQsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLEtBQWdDLENBQUE7UUFFcEQsY0FBYztRQUNkLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDaEIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ3BCLElBQ0UsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUNSLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3ZELEVBQ0QsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUE7WUFDbkYsQ0FBQztRQUNILENBQUM7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNO2dCQUNwQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDeEIsSUFDRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQ1osQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDbkUsRUFDRCxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQTtZQUN2RixDQUFDO1FBQ0gsQ0FBQztRQUVELGdCQUFnQjtRQUNoQixJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUMxQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ2xCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0QixJQUNFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDVCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUMxRCxFQUNELENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFBO1lBQ3JGLENBQUM7UUFDSCxDQUFDO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksV0FBVyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQy9DLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDO2dCQUM1RCxDQUFDLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtnQkFDOUIsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUE7WUFDbEMsSUFDRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQ2YsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDdkQsRUFDRCxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQTtZQUNqRyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBL0lILDhEQWdKQztBQS9JaUIsb0NBQVUsR0FBRyxjQUFjLENBQUE7QUFDM0IscUNBQVcsR0FBRyxzQkFBc0IsQ0FBQTtBQUNwQyxxQ0FBVyxHQUN6Qix5REFBeUQsQ0FBQSJ9
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
/**
|
|
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
|
+
class CategoryFilterProvider extends base_filter_provider_1.BaseFilterProvider {
|
|
22
|
+
apply(filters, value, context) {
|
|
23
|
+
if (!value) {
|
|
24
|
+
return filters;
|
|
25
|
+
}
|
|
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
|
+
return {
|
|
35
|
+
...filters,
|
|
36
|
+
categories: {
|
|
37
|
+
id: validIds,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
validate(value) {
|
|
42
|
+
if (value === undefined || value === null) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const ids = Array.isArray(value) ? value : [value];
|
|
46
|
+
if (!ids.every((id) => typeof id === "string" && id.trim().length > 0)) {
|
|
47
|
+
throw new Error("category_id must be a string or array of non-empty strings");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.CategoryFilterProvider = CategoryFilterProvider;
|
|
52
|
+
CategoryFilterProvider.identifier = "category_id";
|
|
53
|
+
CategoryFilterProvider.displayName = "Category Filter";
|
|
54
|
+
CategoryFilterProvider.description = "Filters products by category IDs";
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvY2F0ZWdvcnktcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUVBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQWEsc0JBQXVCLFNBQVEseUNBQWtCO0lBSzVELEtBQUssQ0FDSCxPQUFnQyxFQUNoQyxLQUFjLEVBQ2QsT0FBdUI7UUFFdkIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELHFCQUFxQjtRQUNyQixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFMUQsMEJBQTBCO1FBQzFCLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQ2pDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxTQUFTLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FDckQsQ0FBQTtRQUVELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQixPQUFPLE9BQU8sQ0FBQTtRQUNoQixDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLE9BQU87WUFDTCxHQUFHLE9BQU87WUFDVixVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFLFFBQVE7YUFDYjtTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWM7UUFDckIsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUVsRCxJQUNFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDUixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUN2RCxFQUNELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLDREQUE0RCxDQUM3RCxDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBbkRILHdEQW9EQztBQW5EaUIsaUNBQVUsR0FBRyxhQUFhLENBQUE7QUFDMUIsa0NBQVcsR0FBRyxpQkFBaUIsQ0FBQTtBQUMvQixrQ0FBVyxHQUFHLGtDQUFrQyxDQUFBIn0=
|