medusa-product-helper 0.0.28 → 0.0.30
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 +2 -1818
- package/.medusa/server/src/admin/index.mjs +4 -1820
- package/.medusa/server/src/config/product-helper-options.js +1 -67
- package/.medusa/server/src/providers/filter-providers/metadata-provider.js +30 -3
- package/.medusa/server/src/utils/query-builders/product-filters.js +34 -8
- package/package.json +1 -1
- package/.medusa/server/src/api/admin/product-metadata-config/route.js +0 -27
- package/.medusa/server/src/shared/product-metadata/types.js +0 -5
- package/.medusa/server/src/shared/product-metadata/utils.js +0 -153
|
@@ -5,8 +5,6 @@ exports.normalizeProductHelperOptions = normalizeProductHelperOptions;
|
|
|
5
5
|
exports.resolveProductHelperOptions = resolveProductHelperOptions;
|
|
6
6
|
const utils_1 = require("@medusajs/framework/utils");
|
|
7
7
|
const zod_1 = require("zod");
|
|
8
|
-
const types_1 = require("../shared/product-metadata/types");
|
|
9
|
-
const utils_2 = require("../shared/product-metadata/utils");
|
|
10
8
|
const PriceRangeSchema = zod_1.z
|
|
11
9
|
.object({
|
|
12
10
|
label: zod_1.z.string().min(1).max(64).default("custom"),
|
|
@@ -39,37 +37,6 @@ const PriceRangeSchema = zod_1.z
|
|
|
39
37
|
message: "price min must be less than or equal to max",
|
|
40
38
|
path: ["max"],
|
|
41
39
|
});
|
|
42
|
-
const MetadataDescriptorSchema = zod_1.z.object({
|
|
43
|
-
key: zod_1.z.string().min(1),
|
|
44
|
-
label: zod_1.z
|
|
45
|
-
.string()
|
|
46
|
-
.trim()
|
|
47
|
-
.transform((value) => (value.length ? value : undefined))
|
|
48
|
-
.optional(),
|
|
49
|
-
type: zod_1.z.enum(types_1.METADATA_FIELD_TYPES),
|
|
50
|
-
filterable: zod_1.z.boolean().default(false),
|
|
51
|
-
});
|
|
52
|
-
const MetadataCollectionSchema = zod_1.z.object({
|
|
53
|
-
descriptors: zod_1.z.array(MetadataDescriptorSchema).default([]),
|
|
54
|
-
});
|
|
55
|
-
const ProductMetadataSchema = MetadataCollectionSchema.extend({
|
|
56
|
-
expose_client_helpers: zod_1.z.boolean().default(true),
|
|
57
|
-
});
|
|
58
|
-
const MetadataSchema = zod_1.z.object({
|
|
59
|
-
products: ProductMetadataSchema.default({
|
|
60
|
-
descriptors: [],
|
|
61
|
-
expose_client_helpers: true,
|
|
62
|
-
}),
|
|
63
|
-
categories: MetadataCollectionSchema.default({
|
|
64
|
-
descriptors: [],
|
|
65
|
-
}),
|
|
66
|
-
orders: MetadataCollectionSchema.default({
|
|
67
|
-
descriptors: [],
|
|
68
|
-
}),
|
|
69
|
-
collections: MetadataCollectionSchema.default({
|
|
70
|
-
descriptors: [],
|
|
71
|
-
}),
|
|
72
|
-
});
|
|
73
40
|
const PromotionWindowSchema = zod_1.z.object({
|
|
74
41
|
start_metadata_key: zod_1.z.string().min(1).default("promotion_start"),
|
|
75
42
|
end_metadata_key: zod_1.z.string().min(1).default("promotion_end"),
|
|
@@ -101,21 +68,6 @@ const FilterProviderConfigSchema = zod_1.z.union([
|
|
|
101
68
|
}),
|
|
102
69
|
]);
|
|
103
70
|
const ProductHelperOptionsSchema = zod_1.z.object({
|
|
104
|
-
metadata: MetadataSchema.default({
|
|
105
|
-
products: {
|
|
106
|
-
descriptors: [],
|
|
107
|
-
expose_client_helpers: true,
|
|
108
|
-
},
|
|
109
|
-
categories: {
|
|
110
|
-
descriptors: [],
|
|
111
|
-
},
|
|
112
|
-
orders: {
|
|
113
|
-
descriptors: [],
|
|
114
|
-
},
|
|
115
|
-
collections: {
|
|
116
|
-
descriptors: [],
|
|
117
|
-
},
|
|
118
|
-
}),
|
|
119
71
|
default_price_range: PriceRangeSchema.default({
|
|
120
72
|
label: "custom",
|
|
121
73
|
min: null,
|
|
@@ -155,24 +107,6 @@ function normalizeProductHelperOptions(input) {
|
|
|
155
107
|
const parsed = ProductHelperOptionsSchema.parse(input ?? {});
|
|
156
108
|
return {
|
|
157
109
|
...parsed,
|
|
158
|
-
metadata: {
|
|
159
|
-
products: {
|
|
160
|
-
...parsed.metadata.products,
|
|
161
|
-
descriptors: (0, utils_2.normalizeMetadataDescriptors)(parsed.metadata.products.descriptors),
|
|
162
|
-
},
|
|
163
|
-
categories: {
|
|
164
|
-
...parsed.metadata.categories,
|
|
165
|
-
descriptors: (0, utils_2.normalizeMetadataDescriptors)(parsed.metadata.categories.descriptors),
|
|
166
|
-
},
|
|
167
|
-
orders: {
|
|
168
|
-
...parsed.metadata.orders,
|
|
169
|
-
descriptors: (0, utils_2.normalizeMetadataDescriptors)(parsed.metadata.orders.descriptors),
|
|
170
|
-
},
|
|
171
|
-
collections: {
|
|
172
|
-
...parsed.metadata.collections,
|
|
173
|
-
descriptors: (0, utils_2.normalizeMetadataDescriptors)(parsed.metadata.collections.descriptors),
|
|
174
|
-
},
|
|
175
|
-
},
|
|
176
110
|
filterProviders: parsed.filterProviders ?? [],
|
|
177
111
|
disableBuiltInProviders: parsed.disableBuiltInProviders ?? [],
|
|
178
112
|
};
|
|
@@ -192,4 +126,4 @@ function resolveProductHelperOptions(configModule) {
|
|
|
192
126
|
}
|
|
193
127
|
return exports.DEFAULT_PRODUCT_HELPER_OPTIONS;
|
|
194
128
|
}
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1oZWxwZXItb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb25maWcvcHJvZHVjdC1oZWxwZXItb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE0SUEsc0VBVUM7QUFFRCxrRUFtQkM7QUEzS0QscURBQW9EO0FBQ3BELDZCQUF1QjtBQUV2QixNQUFNLGdCQUFnQixHQUFHLE9BQUM7S0FDdkIsTUFBTSxDQUFDO0lBQ04sS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDbEQsYUFBYSxFQUFFLE9BQUM7U0FDYixNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixNQUFNLENBQUMsQ0FBQyxFQUFFLG1DQUFtQyxDQUFDO1NBQzlDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3pDLFFBQVEsRUFBRTtJQUNiLEdBQUcsRUFBRSxPQUFDO1NBQ0gsTUFBTSxDQUFDO1FBQ04sTUFBTSxFQUFFLElBQUk7UUFDWixrQkFBa0IsRUFBRSw0QkFBNEI7S0FDakQsQ0FBQztTQUNELFdBQVcsRUFBRTtTQUNiLFFBQVEsRUFBRTtTQUNWLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDaEIsR0FBRyxFQUFFLE9BQUM7U0FDSCxNQUFNLENBQUM7UUFDTixNQUFNLEVBQUUsSUFBSTtRQUNaLGtCQUFrQixFQUFFLDRCQUE0QjtLQUNqRCxDQUFDO1NBQ0QsV0FBVyxFQUFFO1NBQ2IsUUFBUSxFQUFFO1NBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQztDQUNqQixDQUFDO0tBQ0QsTUFBTSxDQUNMLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFLLENBQUMsR0FBRyxLQUFLLElBQUk7SUFDbEIs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
|
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MetadataFilterProvider = void 0;
|
|
4
4
|
const base_filter_provider_1 = require("./base-filter-provider");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
// Try to import dynamic-metadata plugin utilities
|
|
7
|
+
let resolveDynamicMetadataOptions = null;
|
|
8
|
+
try {
|
|
9
|
+
const dynamicMetadata = require("medusa-dynamic-metadata");
|
|
10
|
+
resolveDynamicMetadataOptions = dynamicMetadata.resolveDynamicMetadataOptions;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
// Plugin not available, will fall back to empty allowlist
|
|
14
|
+
}
|
|
5
15
|
class MetadataFilterProvider extends base_filter_provider_1.BaseFilterProvider {
|
|
6
16
|
apply(filters, value, context) {
|
|
7
17
|
if (!this.isValidMetadata(value))
|
|
@@ -53,8 +63,25 @@ class MetadataFilterProvider extends base_filter_provider_1.BaseFilterProvider {
|
|
|
53
63
|
return isValidPrimitive(value);
|
|
54
64
|
}
|
|
55
65
|
getAllowlist(context) {
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
// Try to get metadata descriptors from dynamic-metadata plugin
|
|
67
|
+
if (resolveDynamicMetadataOptions) {
|
|
68
|
+
try {
|
|
69
|
+
// Try to get container from request.scope (MedusaRequest has scope)
|
|
70
|
+
const request = context?.request;
|
|
71
|
+
if (request?.scope) {
|
|
72
|
+
const configModule = request.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
73
|
+
const dynamicMetadataOptions = resolveDynamicMetadataOptions(configModule);
|
|
74
|
+
const productDescriptors = dynamicMetadataOptions.entities.products?.descriptors || [];
|
|
75
|
+
return new Set(productDescriptors.filter(d => d.filterable).map(d => d.key));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
// Fall back to empty allowlist if dynamic-metadata plugin is not configured
|
|
80
|
+
console.warn("[MetadataFilterProvider] Failed to resolve dynamic-metadata options:", error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Fall back to empty allowlist (allows all metadata keys)
|
|
84
|
+
return new Set();
|
|
58
85
|
}
|
|
59
86
|
filterByAllowlist(metadata, allowlist) {
|
|
60
87
|
const result = {};
|
|
@@ -70,4 +97,4 @@ exports.MetadataFilterProvider = MetadataFilterProvider;
|
|
|
70
97
|
MetadataFilterProvider.identifier = "metadata";
|
|
71
98
|
MetadataFilterProvider.displayName = "Metadata Filter";
|
|
72
99
|
MetadataFilterProvider.description = "Filters products by metadata with allowlist validation";
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtcHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2ZpbHRlci1wcm92aWRlcnMvbWV0YWRhdGEtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUVBQStFO0FBQy9FLHFEQUFxRTtBQUtyRSxrREFBa0Q7QUFDbEQsSUFBSSw2QkFBNkIsR0FPckIsSUFBSSxDQUFBO0FBRWhCLElBQUksQ0FBQztJQUNILE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBQzFELDZCQUE2QixHQUFHLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQTtBQUMvRSxDQUFDO0FBQUMsTUFBTSxDQUFDO0lBQ1AsMERBQTBEO0FBQzVELENBQUM7QUFFRCxNQUFhLHNCQUF1QixTQUFRLHlDQUFrQjtJQUs1RCxLQUFLLENBQUMsT0FBZ0MsRUFBRSxLQUFjLEVBQUUsT0FBdUI7UUFDN0UsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxPQUFPLENBQUE7UUFFaEQsTUFBTSxlQUFlLEdBQUcsS0FBc0MsQ0FBQTtRQUM5RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTVDLHdFQUF3RTtRQUN4RSxpQ0FBaUM7UUFDakMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxlQUFlLENBQUUsbUNBQW1DO1lBQ3RELENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBRXRELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxPQUFPLENBQUE7UUFDaEIsQ0FBQztRQUVELGdFQUFnRTtR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
|
|
@@ -2,9 +2,18 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.buildProductFilterPlan = buildProductFilterPlan;
|
|
4
4
|
exports.buildBestSellingPlan = buildBestSellingPlan;
|
|
5
|
-
|
|
5
|
+
// Try to import dynamic-metadata plugin utilities
|
|
6
|
+
let resolveDynamicMetadataOptions = null;
|
|
7
|
+
try {
|
|
8
|
+
const dynamicMetadata = require("medusa-dynamic-metadata");
|
|
9
|
+
resolveDynamicMetadataOptions = dynamicMetadata.resolveDynamicMetadataOptions;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
// Plugin not available, will fall back to empty allowlist
|
|
13
|
+
}
|
|
14
|
+
function buildProductFilterPlan({ query, options, configModule, }) {
|
|
6
15
|
const baseFilters = buildBaseFilters(query);
|
|
7
|
-
const metadataFilters = buildMetadataFilters(query, options);
|
|
16
|
+
const metadataFilters = buildMetadataFilters(query, options, configModule);
|
|
8
17
|
const priceRange = buildPriceRange(query, options);
|
|
9
18
|
const promotionWindow = buildPromotionWindow(query, options);
|
|
10
19
|
const availability = buildAvailability(query, options);
|
|
@@ -44,12 +53,29 @@ function buildBaseFilters(query) {
|
|
|
44
53
|
}
|
|
45
54
|
return filters;
|
|
46
55
|
}
|
|
47
|
-
function buildMetadataFilters(query, options) {
|
|
48
|
-
|
|
49
|
-
.filter(descriptor => descriptor.filterable)
|
|
50
|
-
.map(descriptor => descriptor.key));
|
|
51
|
-
if (metadataAllowList.size === 0 || !query.metadata)
|
|
56
|
+
function buildMetadataFilters(query, options, configModule) {
|
|
57
|
+
if (!query.metadata)
|
|
52
58
|
return {};
|
|
59
|
+
// Try to get metadata descriptors from dynamic-metadata plugin
|
|
60
|
+
let metadataAllowList = new Set();
|
|
61
|
+
if (resolveDynamicMetadataOptions && configModule) {
|
|
62
|
+
try {
|
|
63
|
+
const dynamicMetadataOptions = resolveDynamicMetadataOptions(configModule);
|
|
64
|
+
const productDescriptors = dynamicMetadataOptions.entities.products?.descriptors || [];
|
|
65
|
+
metadataAllowList = new Set(productDescriptors
|
|
66
|
+
.filter((descriptor) => descriptor.filterable)
|
|
67
|
+
.map((descriptor) => descriptor.key));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Fall back to empty allowlist if dynamic-metadata plugin is not configured
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// If allowlist is empty, allow all metadata keys (treat as "allow all")
|
|
74
|
+
// Otherwise, filter by allowlist
|
|
75
|
+
if (metadataAllowList.size === 0) {
|
|
76
|
+
// Empty allowlist = allow all keys
|
|
77
|
+
return query.metadata;
|
|
78
|
+
}
|
|
53
79
|
return Object.entries(query.metadata).reduce((acc, [key, value]) => {
|
|
54
80
|
if (metadataAllowList.has(key))
|
|
55
81
|
acc[key] = value;
|
|
@@ -134,4 +160,4 @@ function buildBestSellingPlan(query) {
|
|
|
134
160
|
variant_id: query.variant_id,
|
|
135
161
|
};
|
|
136
162
|
}
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1maWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3F1ZXJ5LWJ1aWxkZXJzL3Byb2R1Y3QtZmlsdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdFQSx3REFpQ0M7QUFzSkQsb0RBV0M7QUExUEQsa0RBQWtEO0FBQ2xELElBQUksNkJBQTZCLEdBT3JCLElBQUksQ0FBQTtBQUVoQixJQUFJLENBQUM7SUFDSCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQTtJQUMxRCw2QkFBNkIsR0FBRyxlQUFlLENBQUMsNkJBQTZCLENBQUE7QUFDL0UsQ0FBQztBQUFDLE1BQU0sQ0FBQztJQUNQLDBEQUEwRDtBQUM1RCxDQUFDO0FBeUNELFNBQWdCLHNCQUFzQixDQUFDLEVBQ3JDLEtBQUssRUFDTCxPQUFPLEVBQ1AsWUFBWSxHQUtiO0lBQ0MsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0MsTUFBTSxlQUFlLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUMxRSxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ2xELE1BQU0sZUFBZSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM1RCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDdEQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUMxQyxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRWxELE9BQU87UUFDTCxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUN4RCxVQUFVLEVBQUU7WUFDVixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDcEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDWDtRQUNELFdBQVc7UUFDWCxlQUFlO1FBQ2YsVUFBVTtRQUNWLGVBQWU7UUFDZixZQUFZO1FBQ1osTUFBTTtRQUNOLFVBQVU7S0FDWCxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBb0M7SUFDNUQsTUFBTSxPQUFPLEdBQTRCLEVBQUUsQ0FBQTtJQUUzQyxJQUFJLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTTtRQUFFLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQTtJQUMzQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTTtRQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtJQUN2RCxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTTtRQUFFLE9BQU8sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtJQUM1RSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTTtRQUFFLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVELElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFLE1BQU07UUFBRSxPQUFPLENBQUMsY0FBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBRTNGLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUM5QixPQUFPLENBQUMsVUFBVSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNoRCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLEtBQW9DLEVBQ3BDLE9BQTZCLEVBQzdCLFlBQXNCO0lBRXRCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRTlCLCtEQUErRDtJQUMvRCxJQUFJLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUE7SUFFekMsSUFBSSw2QkFBNkIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUM7WUFDSCxNQUFNLHNCQUFzQixHQUFHLDZCQUE2QixDQUFDLFlBQVksQ0FBQyxDQUFBO1lBQzFFLE1BQU0sa0JBQWtCLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFBO1lBQ3RGLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUN6QixrQkFBa0I7aUJBQ2YsTUFBTSxDQUFDLENBQUMsVUFBOEIsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztpQkFDakUsR0FBRyxDQUFDLENBQUMsVUFBOEIsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUMzRCxDQUFBO1FBQ0gsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDRFQUE0RTtRQUM5RSxDQUFDO0lBQ0gsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSxpQ0FBaUM7SUFDakMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakMsbUNBQW1DO1FBQ25DLE9BQU8sS0FBSyxDQUFDLFFBQW1DLENBQUE7SUFDbEQsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUEwQixDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1FBQzFGLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDaEQsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDUixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3RCLEtBQW9DLEVBQ3BDLE9BQTZCO0lBRTdCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFBO0lBQ3BGLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFBO0lBRTVHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsT0FBTztZQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsU0FBUztZQUNwQixHQUFHLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDcEIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhO1NBQ3pELENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQixPQUFPO1lBQ0wsR0FBRyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksU0FBUztZQUNqRCxHQUFHLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxTQUFTO1lBQ2pELGFBQWEsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsYUFBYTtTQUN6RCxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUMzQixLQUFvQyxFQUNwQyxPQUE2QjtJQUU3QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUE7SUFFN0QsT0FBTztRQUNMLFFBQVEsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCO1FBQ3JELE1BQU0sRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCO1FBQ2pELEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN4RixRQUFRLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtRQUNuQyxXQUFXLEVBQUUsS0FBSyxDQUFDLHVCQUF1QixJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEI7S0FDbEcsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixLQUFvQyxFQUNwQyxPQUE2QjtJQUU3QixPQUFPO1FBQ0wsUUFBUSxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxFQUFFO1FBQ3pDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQjtRQUNqRixpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxpQkFBaUI7UUFDcEYsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCO1FBQ3ZGLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQjtLQUNsRixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUNsQixLQUFvQyxFQUNwQyxPQUE2QjtJQUU3QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUE7SUFDbkQsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSTtRQUNiLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRztRQUMzQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUc7UUFDM0MsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlO0tBQ3pFLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3RCLEtBQW9DLEVBQ3BDLE9BQTZCO0lBRTdCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUE7SUFDM0IsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUE7SUFDdkYsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUE7SUFDOUMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssS0FBSyxhQUFhLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7SUFFM0gsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSTtRQUNiLE1BQU0sRUFBRSxXQUFXO1FBQ25CLElBQUksRUFBRSxTQUFTO1FBQ2YsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNwSCxVQUFVLEVBQUUsS0FBSyxDQUFDLHNCQUFzQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLElBQUksQ0FBQztLQUMxRixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQWdCLG9CQUFvQixDQUFDLEtBQTRCO0lBQy9ELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQTtJQUUvRCxPQUFPO1FBQ0wsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDeEQsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQzVGLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7UUFDeEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUM1QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7S0FDN0IsQ0FBQTtBQUNILENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GET = GET;
|
|
4
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
-
const product_helper_options_1 = require("../../../config/product-helper-options");
|
|
6
|
-
const ENTITY_PARAM = {
|
|
7
|
-
PRODUCT: "product",
|
|
8
|
-
CATEGORY: "category",
|
|
9
|
-
ORDER: "order",
|
|
10
|
-
COLLECTION: "collection",
|
|
11
|
-
};
|
|
12
|
-
async function GET(req, res) {
|
|
13
|
-
const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
14
|
-
const options = (0, product_helper_options_1.resolveProductHelperOptions)(configModule);
|
|
15
|
-
const entity = req.query?.entity ?? ENTITY_PARAM.PRODUCT;
|
|
16
|
-
const metadataDescriptors = entity === ENTITY_PARAM.CATEGORY
|
|
17
|
-
? options.metadata.categories.descriptors
|
|
18
|
-
: entity === ENTITY_PARAM.ORDER
|
|
19
|
-
? options.metadata.orders.descriptors
|
|
20
|
-
: entity === ENTITY_PARAM.COLLECTION
|
|
21
|
-
? options.metadata.collections.descriptors
|
|
22
|
-
: options.metadata.products.descriptors;
|
|
23
|
-
res.json({
|
|
24
|
-
metadataDescriptors,
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3QtbWV0YWRhdGEtY29uZmlnL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBY0Esa0JBb0JDO0FBakNELHFEQUFxRTtBQUVyRSxtRkFBb0Y7QUFFcEYsTUFBTSxZQUFZLEdBQUc7SUFDbkIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsS0FBSyxFQUFFLE9BQU87SUFDZCxVQUFVLEVBQUUsWUFBWTtDQUNoQixDQUFBO0FBSUgsS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQy9ELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNwQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQ3hDLENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFBLG9EQUEyQixFQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3pELE1BQU0sTUFBTSxHQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBeUIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFBO0lBRTVFLE1BQU0sbUJBQW1CLEdBQ3ZCLE1BQU0sS0FBSyxZQUFZLENBQUMsUUFBUTtRQUM5QixDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVztRQUN6QyxDQUFDLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxLQUFLO1lBQy9CLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXO1lBQ3JDLENBQUMsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLFVBQVU7Z0JBQ3BDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXO2dCQUMxQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFBO0lBRTNDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDUCxtQkFBbUI7S0FDcEIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.METADATA_FIELD_TYPES = void 0;
|
|
4
|
-
exports.METADATA_FIELD_TYPES = ["number", "text", "file", "bool"];
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL3Byb2R1Y3QtbWV0YWRhdGEvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxvQkFBb0IsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBVSxDQUFBIn0=
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.normalizeMetadataDescriptors = normalizeMetadataDescriptors;
|
|
4
|
-
exports.getDescriptorMap = getDescriptorMap;
|
|
5
|
-
exports.buildInitialFormState = buildInitialFormState;
|
|
6
|
-
exports.buildMetadataPayload = buildMetadataPayload;
|
|
7
|
-
exports.hasMetadataChanges = hasMetadataChanges;
|
|
8
|
-
exports.validateValueForDescriptor = validateValueForDescriptor;
|
|
9
|
-
const types_1 = require("./types");
|
|
10
|
-
const VALID_FIELD_TYPES = new Set(types_1.METADATA_FIELD_TYPES);
|
|
11
|
-
const BOOLEAN_TRUES = new Set(["true", "1", "yes", "y", "on"]);
|
|
12
|
-
const BOOLEAN_FALSES = new Set(["false", "0", "no", "n", "off"]);
|
|
13
|
-
function normalizeMetadataDescriptors(input) {
|
|
14
|
-
if (!Array.isArray(input))
|
|
15
|
-
return [];
|
|
16
|
-
const seenKeys = new Set();
|
|
17
|
-
return input
|
|
18
|
-
.filter((item) => item && typeof item === "object")
|
|
19
|
-
.map(item => {
|
|
20
|
-
const key = normalizeKey(item.key);
|
|
21
|
-
const type = normalizeType(item.type);
|
|
22
|
-
const label = normalizeLabel(item.label);
|
|
23
|
-
const filterable = !!(item.filterable);
|
|
24
|
-
return { key, type, label, filterable };
|
|
25
|
-
})
|
|
26
|
-
.filter(({ key, type }) => key && type && !seenKeys.has(key))
|
|
27
|
-
.map(({ key, type, label, filterable }) => {
|
|
28
|
-
seenKeys.add(key);
|
|
29
|
-
return {
|
|
30
|
-
key: key,
|
|
31
|
-
type: type,
|
|
32
|
-
...(label && { label }),
|
|
33
|
-
...(filterable && { filterable: true })
|
|
34
|
-
};
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
function getDescriptorMap(descriptors) {
|
|
38
|
-
return descriptors.reduce((acc, descriptor) => {
|
|
39
|
-
acc[descriptor.key] = descriptor;
|
|
40
|
-
return acc;
|
|
41
|
-
}, {});
|
|
42
|
-
}
|
|
43
|
-
function buildInitialFormState(descriptors, metadata) {
|
|
44
|
-
const base = metadata && typeof metadata === "object" ? metadata : {};
|
|
45
|
-
return descriptors.reduce((acc, descriptor) => {
|
|
46
|
-
acc[descriptor.key] = normalizeFormValue(descriptor, base[descriptor.key]);
|
|
47
|
-
return acc;
|
|
48
|
-
}, {});
|
|
49
|
-
}
|
|
50
|
-
function buildMetadataPayload({ descriptors, values, originalMetadata, }) {
|
|
51
|
-
const base = originalMetadata && typeof originalMetadata === "object"
|
|
52
|
-
? { ...originalMetadata }
|
|
53
|
-
: {};
|
|
54
|
-
descriptors.forEach((descriptor) => {
|
|
55
|
-
const coerced = coerceMetadataValue(descriptor, values[descriptor.key]);
|
|
56
|
-
if (coerced === undefined) {
|
|
57
|
-
delete base[descriptor.key];
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
base[descriptor.key] = coerced;
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
return base;
|
|
64
|
-
}
|
|
65
|
-
function hasMetadataChanges({ descriptors, values, originalMetadata, }) {
|
|
66
|
-
const next = buildMetadataPayload({ descriptors, values, originalMetadata });
|
|
67
|
-
const prev = originalMetadata && typeof originalMetadata === "object"
|
|
68
|
-
? originalMetadata
|
|
69
|
-
: {};
|
|
70
|
-
return descriptors.some(({ key }) => !isDeepEqual(prev[key], next[key]));
|
|
71
|
-
}
|
|
72
|
-
function validateValueForDescriptor(descriptor, value) {
|
|
73
|
-
if (descriptor.type === "number") {
|
|
74
|
-
if (value == null || value === "")
|
|
75
|
-
return undefined;
|
|
76
|
-
const num = typeof value === "number" ? value : Number(String(value).trim());
|
|
77
|
-
return isNaN(num) ? "Enter a valid number" : undefined;
|
|
78
|
-
}
|
|
79
|
-
if (descriptor.type === "file") {
|
|
80
|
-
if (!value)
|
|
81
|
-
return undefined;
|
|
82
|
-
try {
|
|
83
|
-
new URL(String(value).trim());
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
return "Enter a valid URL";
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
|
-
function normalizeFormValue(descriptor, currentValue) {
|
|
93
|
-
if (descriptor.type === "bool")
|
|
94
|
-
return Boolean(currentValue);
|
|
95
|
-
if ((descriptor.type === "number" || descriptor.type === "text") && typeof currentValue === "number") {
|
|
96
|
-
return currentValue.toString();
|
|
97
|
-
}
|
|
98
|
-
if (typeof currentValue === "string" || typeof currentValue === "number") {
|
|
99
|
-
return String(currentValue);
|
|
100
|
-
}
|
|
101
|
-
return "";
|
|
102
|
-
}
|
|
103
|
-
function coerceMetadataValue(descriptor, value) {
|
|
104
|
-
if (value == null || value === "")
|
|
105
|
-
return undefined;
|
|
106
|
-
if (descriptor.type === "bool") {
|
|
107
|
-
if (typeof value === "boolean")
|
|
108
|
-
return value;
|
|
109
|
-
if (typeof value === "number")
|
|
110
|
-
return value !== 0;
|
|
111
|
-
const normalized = String(value).trim().toLowerCase();
|
|
112
|
-
if (!normalized)
|
|
113
|
-
return undefined;
|
|
114
|
-
if (BOOLEAN_TRUES.has(normalized))
|
|
115
|
-
return true;
|
|
116
|
-
if (BOOLEAN_FALSES.has(normalized))
|
|
117
|
-
return false;
|
|
118
|
-
return Boolean(value);
|
|
119
|
-
}
|
|
120
|
-
if (descriptor.type === "number") {
|
|
121
|
-
const num = typeof value === "number" ? value : Number(String(value).trim());
|
|
122
|
-
return isNaN(num) ? undefined : num;
|
|
123
|
-
}
|
|
124
|
-
// For text and file types, trim and check if empty
|
|
125
|
-
const trimmed = String(value).trim();
|
|
126
|
-
if (!trimmed)
|
|
127
|
-
return undefined;
|
|
128
|
-
return trimmed;
|
|
129
|
-
}
|
|
130
|
-
function normalizeKey(value) {
|
|
131
|
-
return typeof value === "string" ? value.trim() || undefined : undefined;
|
|
132
|
-
}
|
|
133
|
-
function normalizeType(value) {
|
|
134
|
-
if (typeof value !== "string")
|
|
135
|
-
return undefined;
|
|
136
|
-
const type = value.trim().toLowerCase();
|
|
137
|
-
return VALID_FIELD_TYPES.has(type) ? type : undefined;
|
|
138
|
-
}
|
|
139
|
-
function normalizeLabel(value) {
|
|
140
|
-
return typeof value === "string" ? value.trim() || undefined : undefined;
|
|
141
|
-
}
|
|
142
|
-
function isDeepEqual(a, b) {
|
|
143
|
-
if (a === b)
|
|
144
|
-
return true;
|
|
145
|
-
if (!a || !b || typeof a !== "object" || typeof b !== "object")
|
|
146
|
-
return false;
|
|
147
|
-
const aKeys = Object.keys(a);
|
|
148
|
-
const bKeys = Object.keys(b);
|
|
149
|
-
if (aKeys.length !== bKeys.length)
|
|
150
|
-
return false;
|
|
151
|
-
return aKeys.every(key => isDeepEqual(a[key], b[key]));
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL3Byb2R1Y3QtbWV0YWRhdGEvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSxvRUF5QkM7QUFFRCw0Q0FLQztBQUVELHNEQVVDO0FBRUQsb0RBd0JDO0FBRUQsZ0RBZUM7QUFFRCxnRUF1QkM7QUE5SEQsbUNBS2dCO0FBS2hCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQW9CLDRCQUFvQixDQUFDLENBQUE7QUFDMUUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUM5RCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0FBRWhFLFNBQWdCLDRCQUE0QixDQUFDLEtBQWM7SUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFFcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtJQUNsQyxPQUFPLEtBQUs7U0FDVCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQW1DLEVBQUUsQ0FDaEQsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FDakM7U0FDQSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDVixNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUUsSUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBRSxJQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDOUMsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFFLElBQVksQ0FBQyxLQUFLLENBQUMs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
|