medusa-product-helper 0.0.1
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 +23 -0
- package/.medusa/server/src/admin/index.mjs +24 -0
- package/.medusa/server/src/api/admin/plugin/route.js +7 -0
- package/.medusa/server/src/api/store/plugin/route.js +7 -0
- package/.medusa/server/src/api/store/product-helper/products/validators.js +171 -0
- package/.medusa/server/src/config/product-helper-options.js +131 -0
- package/.medusa/server/src/shared/product-metadata/types.js +5 -0
- package/.medusa/server/src/shared/product-metadata/utils.js +195 -0
- package/.medusa/server/src/utils/query-builders/product-filters.js +137 -0
- package/README.md +64 -0
- package/package.json +70 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const i18nTranslations0 = {};
|
|
3
|
+
const widgetModule = { widgets: [] };
|
|
4
|
+
const routeModule = {
|
|
5
|
+
routes: []
|
|
6
|
+
};
|
|
7
|
+
const menuItemModule = {
|
|
8
|
+
menuItems: []
|
|
9
|
+
};
|
|
10
|
+
const formModule = { customFields: {} };
|
|
11
|
+
const displayModule = {
|
|
12
|
+
displays: {}
|
|
13
|
+
};
|
|
14
|
+
const i18nModule = { resources: i18nTranslations0 };
|
|
15
|
+
const plugin = {
|
|
16
|
+
widgetModule,
|
|
17
|
+
routeModule,
|
|
18
|
+
menuItemModule,
|
|
19
|
+
formModule,
|
|
20
|
+
displayModule,
|
|
21
|
+
i18nModule
|
|
22
|
+
};
|
|
23
|
+
module.exports = plugin;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const i18nTranslations0 = {};
|
|
2
|
+
const widgetModule = { widgets: [] };
|
|
3
|
+
const routeModule = {
|
|
4
|
+
routes: []
|
|
5
|
+
};
|
|
6
|
+
const menuItemModule = {
|
|
7
|
+
menuItems: []
|
|
8
|
+
};
|
|
9
|
+
const formModule = { customFields: {} };
|
|
10
|
+
const displayModule = {
|
|
11
|
+
displays: {}
|
|
12
|
+
};
|
|
13
|
+
const i18nModule = { resources: i18nTranslations0 };
|
|
14
|
+
const plugin = {
|
|
15
|
+
widgetModule,
|
|
16
|
+
routeModule,
|
|
17
|
+
menuItemModule,
|
|
18
|
+
formModule,
|
|
19
|
+
displayModule,
|
|
20
|
+
i18nModule
|
|
21
|
+
};
|
|
22
|
+
export {
|
|
23
|
+
plugin as default
|
|
24
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
async function GET(req, res) {
|
|
5
|
+
res.sendStatus(200);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUtDO0FBTE0sS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDIn0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
async function GET(req, res) {
|
|
5
|
+
res.sendStatus(200);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3BsdWdpbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUtDO0FBTE0sS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDIn0=
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StoreBestSellingQuerySchema = exports.StoreProductHelperFilterQuerySchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const numberOrString = zod_1.z.union([zod_1.z.number(), zod_1.z.string()]);
|
|
6
|
+
const optionalNumberish = zod_1.z
|
|
7
|
+
.union([zod_1.z.undefined(), zod_1.z.null(), numberOrString])
|
|
8
|
+
.transform((value) => {
|
|
9
|
+
if (value === undefined || value === null || value === "") {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
const numeric = typeof value === "number"
|
|
13
|
+
? value
|
|
14
|
+
: Number(String(value).replace(/,/g, "").trim());
|
|
15
|
+
if (Number.isNaN(numeric)) {
|
|
16
|
+
throw new Error("Invalid numeric value");
|
|
17
|
+
}
|
|
18
|
+
return numeric;
|
|
19
|
+
});
|
|
20
|
+
const positiveInt = zod_1.z
|
|
21
|
+
.union([zod_1.z.string(), zod_1.z.number()])
|
|
22
|
+
.default(20)
|
|
23
|
+
.transform((value) => {
|
|
24
|
+
const parsed = Number(value);
|
|
25
|
+
if (Number.isNaN(parsed) || parsed <= 0) {
|
|
26
|
+
return 20;
|
|
27
|
+
}
|
|
28
|
+
return Math.floor(parsed);
|
|
29
|
+
});
|
|
30
|
+
const nonNegativeInt = zod_1.z
|
|
31
|
+
.union([zod_1.z.string(), zod_1.z.number()])
|
|
32
|
+
.default(0)
|
|
33
|
+
.transform((value) => {
|
|
34
|
+
const parsed = Number(value);
|
|
35
|
+
if (Number.isNaN(parsed) || parsed < 0) {
|
|
36
|
+
return 0;
|
|
37
|
+
}
|
|
38
|
+
return Math.floor(parsed);
|
|
39
|
+
});
|
|
40
|
+
const stringArray = zod_1.z
|
|
41
|
+
.union([
|
|
42
|
+
zod_1.z.string().transform((value) => value
|
|
43
|
+
.split(",")
|
|
44
|
+
.map((entry) => entry.trim())
|
|
45
|
+
.filter(Boolean)),
|
|
46
|
+
zod_1.z.array(zod_1.z.string()),
|
|
47
|
+
])
|
|
48
|
+
.optional()
|
|
49
|
+
.transform((value) => (Array.isArray(value) ? value : []));
|
|
50
|
+
const metadataValue = zod_1.z.union([
|
|
51
|
+
zod_1.z.string(),
|
|
52
|
+
zod_1.z.number(),
|
|
53
|
+
zod_1.z.boolean(),
|
|
54
|
+
zod_1.z.array(zod_1.z.union([zod_1.z.string(), zod_1.z.number(), zod_1.z.boolean()])),
|
|
55
|
+
]);
|
|
56
|
+
const metadataFilterInput = zod_1.z
|
|
57
|
+
.union([zod_1.z.record(metadataValue), zod_1.z.string()])
|
|
58
|
+
.optional()
|
|
59
|
+
.transform((value) => {
|
|
60
|
+
if (!value) {
|
|
61
|
+
return {};
|
|
62
|
+
}
|
|
63
|
+
if (typeof value === "string") {
|
|
64
|
+
try {
|
|
65
|
+
const parsed = JSON.parse(value);
|
|
66
|
+
if (parsed && typeof parsed === "object") {
|
|
67
|
+
return parsed;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// fallthrough
|
|
72
|
+
}
|
|
73
|
+
return {};
|
|
74
|
+
}
|
|
75
|
+
return value;
|
|
76
|
+
});
|
|
77
|
+
const booleanish = zod_1.z
|
|
78
|
+
.union([zod_1.z.boolean(), zod_1.z.string(), zod_1.z.number()])
|
|
79
|
+
.optional()
|
|
80
|
+
.transform((value) => {
|
|
81
|
+
if (typeof value === "boolean") {
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
if (typeof value === "number") {
|
|
85
|
+
return value !== 0;
|
|
86
|
+
}
|
|
87
|
+
if (typeof value === "string") {
|
|
88
|
+
const normalized = value.trim().toLowerCase();
|
|
89
|
+
if (["true", "1", "yes", "y"].includes(normalized)) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
if (["false", "0", "no", "n"].includes(normalized)) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
});
|
|
98
|
+
const dateish = zod_1.z
|
|
99
|
+
.union([zod_1.z.date(), zod_1.z.string(), zod_1.z.number()])
|
|
100
|
+
.optional()
|
|
101
|
+
.transform((value) => {
|
|
102
|
+
if (typeof value === "undefined" || value === null) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
if (value instanceof Date) {
|
|
106
|
+
return value;
|
|
107
|
+
}
|
|
108
|
+
if (typeof value === "string") {
|
|
109
|
+
const trimmed = value.trim();
|
|
110
|
+
if (!trimmed) {
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
const parsed = new Date(trimmed);
|
|
114
|
+
return Number.isNaN(parsed.getTime()) ? undefined : parsed;
|
|
115
|
+
}
|
|
116
|
+
const parsed = new Date(value);
|
|
117
|
+
return Number.isNaN(parsed.getTime()) ? undefined : parsed;
|
|
118
|
+
});
|
|
119
|
+
exports.StoreProductHelperFilterQuerySchema = zod_1.z
|
|
120
|
+
.object({
|
|
121
|
+
q: zod_1.z.string().optional(),
|
|
122
|
+
id: stringArray,
|
|
123
|
+
handle: stringArray,
|
|
124
|
+
collection_id: stringArray,
|
|
125
|
+
category_id: stringArray,
|
|
126
|
+
tags: stringArray,
|
|
127
|
+
sales_channel_id: stringArray,
|
|
128
|
+
limit: positiveInt,
|
|
129
|
+
offset: nonNegativeInt,
|
|
130
|
+
order: zod_1.z.string().optional(),
|
|
131
|
+
fields: stringArray,
|
|
132
|
+
expand: stringArray,
|
|
133
|
+
price_min: optionalNumberish,
|
|
134
|
+
price_max: optionalNumberish,
|
|
135
|
+
metadata: metadataFilterInput,
|
|
136
|
+
promotion_start: dateish,
|
|
137
|
+
promotion_end: dateish,
|
|
138
|
+
promotion_active_on: dateish,
|
|
139
|
+
include_open_promotions: booleanish.default(true),
|
|
140
|
+
availability_status: stringArray,
|
|
141
|
+
include_preorder: booleanish.default(true),
|
|
142
|
+
include_backorder: booleanish.default(true),
|
|
143
|
+
include_gift_cards: booleanish.default(false),
|
|
144
|
+
publishable_only: booleanish.default(true),
|
|
145
|
+
rating_min: optionalNumberish,
|
|
146
|
+
rating_max: optionalNumberish,
|
|
147
|
+
rating_required: booleanish.default(false),
|
|
148
|
+
})
|
|
149
|
+
.refine((value) => typeof value.price_min === "undefined" ||
|
|
150
|
+
typeof value.price_max === "undefined" ||
|
|
151
|
+
value.price_min <= value.price_max, {
|
|
152
|
+
message: "price_min must be less than or equal to price_max",
|
|
153
|
+
path: ["price_max"],
|
|
154
|
+
})
|
|
155
|
+
.refine((value) => typeof value.rating_min === "undefined" ||
|
|
156
|
+
typeof value.rating_max === "undefined" ||
|
|
157
|
+
value.rating_min <= value.rating_max, {
|
|
158
|
+
message: "rating_min must be less than or equal to rating_max",
|
|
159
|
+
path: ["rating_max"],
|
|
160
|
+
});
|
|
161
|
+
exports.StoreBestSellingQuerySchema = zod_1.z.object({
|
|
162
|
+
limit: positiveInt.default(10),
|
|
163
|
+
offset: nonNegativeInt.default(0),
|
|
164
|
+
sales_channel_id: stringArray,
|
|
165
|
+
region_id: stringArray,
|
|
166
|
+
timeframe_from: dateish,
|
|
167
|
+
timeframe_to: dateish,
|
|
168
|
+
variant_id: stringArray,
|
|
169
|
+
product_id: stringArray,
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvcHJvZHVjdC1oZWxwZXIvcHJvZHVjdHMvdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBdUI7QUFFdkIsTUFBTSxjQUFjLEdBQUcsT0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ3hELE1BQU0saUJBQWlCLEdBQUcsT0FBQztLQUN4QixLQUFLLENBQUMsQ0FBQyxPQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0tBQ2hELFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ25CLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUMxRCxPQUFPLFNBQVMsQ0FBQTtJQUNsQixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQ1gsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN2QixDQUFDLENBQUMsS0FBSztRQUNQLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUVwRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMsQ0FBQyxDQUFBO0FBRUosTUFBTSxXQUFXLEdBQUcsT0FBQztLQUNsQixLQUFLLENBQUMsQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7S0FDL0IsT0FBTyxDQUFDLEVBQUUsQ0FBQztLQUNYLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ25CLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUMzQixDQUFDLENBQUMsQ0FBQTtBQUVKLE1BQU0sY0FBYyxHQUFHLE9BQUM7S0FDckIsS0FBSyxDQUFDLENBQUMsT0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQy9CLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDVixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNuQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUIsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDM0IsQ0FBQyxDQUFDLENBQUE7QUFFSixNQUFNLFdBQVcsR0FBRyxPQUFDO0tBQ2xCLEtBQUssQ0FBQztJQUNMLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUM3QixLQUFLO1NBQ0YsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUNWLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FDbkI7SUFDRCxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztDQUNwQixDQUFDO0tBQ0QsUUFBUSxFQUFFO0tBQ1YsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUU1RCxNQUFNLGFBQWEsR0FBRyxPQUFDLENBQUMsS0FBSyxDQUFDO0lBQzVCLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDVixPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ1YsT0FBQyxDQUFDLE9BQU8sRUFBRTtJQUNYLE9BQUMsQ0FBQyxLQUFLLENBQUMsT0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztDQUN4RCxDQUFDLENBQUE7QUFFRixNQUFNLG1CQUFtQixHQUFHLE9BQUM7S0FDMUIsS0FBSyxDQUFDLENBQUMsT0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUM1QyxRQUFRLEVBQUU7S0FDVixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNuQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDaEMsSUFBSSxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3pDLE9BQU8sTUFBaUMsQ0FBQTtZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGNBQWM7UUFDaEIsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyxDQUFDLENBQUE7QUFFSixNQUFNLFVBQVUsR0FBRyxPQUFDO0tBQ2pCLEtBQUssQ0FBQyxDQUFDLE9BQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7S0FDNUMsUUFBUSxFQUFFO0tBQ1YsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDbkIsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQTtJQUNwQixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDN0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQyxDQUFDLENBQUE7QUFFSixNQUFNLE9BQU8sR0FBRyxPQUFDO0tBQ2QsS0FBSyxDQUFDLENBQUMsT0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUN6QyxRQUFRLEVBQUU7S0FDVixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNuQixJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbkQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQzVCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNoQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO0lBQzVELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM5QixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO0FBQzVELENBQUMsQ0FBQyxDQUFBO0FBRVMsUUFBQSxtQ0FBbUMsR0FBRyxPQUFDO0tBQ2pELE1BQU0sQ0FBQztJQUNOLENBQUMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3hCLEVBQUUsRUFBRSxXQUFXO0lBQ2YsTUFBTSxFQUFFLFdBQVc7SUFDbkIsYUFBYSxFQUFFLFdBQVc7SUFDMUIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsSUFBSSxFQUFFLFdBQVc7SUFDakIsZ0JBQWdCLEVBQUUsV0FBVztJQUM3QixLQUFLLEVBQUUsV0FBVztJQUNsQixNQUFNLEVBQUUsY0FBYztJQUN0QixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixNQUFNLEVBQUUsV0FBVztJQUNuQixNQUFNLEVBQUUsV0FBVztJQUNuQixTQUFTLEVBQUUsaUJBQWlCO0lBQzVCLFNBQVMsRUFBRSxpQkFBaUI7SUFDNUIsUUFBUSxFQUFFLG1CQUFtQjtJQUM3QixlQUFlLEVBQUUsT0FBTztJQUN4QixhQUFhLEVBQUUsT0FBTztJQUN0QixtQkFBbUIsRUFBRSxPQUFPO0lBQzVCLHVCQUF1QixFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ2pELG1CQUFtQixFQUFFLFdBQVc7SUFDaEMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDMUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDM0Msa0JBQWtCLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDN0MsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDMUMsVUFBVSxFQUFFLGlCQUFpQjtJQUM3QixVQUFVLEVBQUUsaUJBQWlCO0lBQzdCLGVBQWUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUMzQyxDQUFDO0tBQ0QsTUFBTSxDQUNMLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixPQUFPLEtBQUssQ0FBQyxTQUFTLEtBQUssV0FBVztJQUN0QyxPQUFPLEtBQUssQ0FBQyxTQUFTLEtBQUssV0FBVztJQUNyQyxLQUFLLENBQUMsU0FBb0IsSUFBSyxLQUFLLENBQUMsU0FBb0IsRUFDNUQ7SUFDRSxPQUFPLEVBQUUsbURBQW1EO0lBQzVELElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQztDQUNwQixDQUNGO0tBQ0EsTUFBTSxDQUNMLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixPQUFPLEtBQUssQ0FBQyxVQUFVLEtBQUssV0FBVztJQUN2QyxPQUFPLEtBQUssQ0FBQyxVQUFVLEtBQUssV0FBVztJQUN0QyxLQUFLLENBQUMsVUFBcUIsSUFBSyxLQUFLLENBQUMsVUFBcUIsRUFDOUQ7SUFDRSxPQUFPLEVBQUUscURBQXFEO0lBQzlELElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQztDQUNyQixDQUNGLENBQUE7QUFNVSxRQUFBLDJCQUEyQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDbEQsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzlCLE1BQU0sRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqQyxnQkFBZ0IsRUFBRSxXQUFXO0lBQzdCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLGNBQWMsRUFBRSxPQUFPO0lBQ3ZCLFlBQVksRUFBRSxPQUFPO0lBQ3JCLFVBQVUsRUFBRSxXQUFXO0lBQ3ZCLFVBQVUsRUFBRSxXQUFXO0NBQ3hCLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_PRODUCT_HELPER_OPTIONS = void 0;
|
|
4
|
+
exports.normalizeProductHelperOptions = normalizeProductHelperOptions;
|
|
5
|
+
exports.resolveProductHelperOptions = resolveProductHelperOptions;
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
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
|
+
const PriceRangeSchema = zod_1.z
|
|
11
|
+
.object({
|
|
12
|
+
label: zod_1.z.string().min(1).max(64).default("custom"),
|
|
13
|
+
currency_code: zod_1.z
|
|
14
|
+
.string()
|
|
15
|
+
.trim()
|
|
16
|
+
.length(3, "currency_code must be ISO alpha-3")
|
|
17
|
+
.transform((value) => value.toLowerCase())
|
|
18
|
+
.optional(),
|
|
19
|
+
min: zod_1.z
|
|
20
|
+
.number({
|
|
21
|
+
coerce: true,
|
|
22
|
+
invalid_type_error: "price min must be a number",
|
|
23
|
+
})
|
|
24
|
+
.nonnegative()
|
|
25
|
+
.nullable()
|
|
26
|
+
.default(null),
|
|
27
|
+
max: zod_1.z
|
|
28
|
+
.number({
|
|
29
|
+
coerce: true,
|
|
30
|
+
invalid_type_error: "price max must be a number",
|
|
31
|
+
})
|
|
32
|
+
.nonnegative()
|
|
33
|
+
.nullable()
|
|
34
|
+
.default(null),
|
|
35
|
+
})
|
|
36
|
+
.refine((value) => value.min === null ||
|
|
37
|
+
value.max === null ||
|
|
38
|
+
value.min <= value.max, {
|
|
39
|
+
message: "price min must be less than or equal to max",
|
|
40
|
+
path: ["max"],
|
|
41
|
+
});
|
|
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
|
+
});
|
|
51
|
+
const PromotionWindowSchema = zod_1.z.object({
|
|
52
|
+
start_metadata_key: zod_1.z.string().min(1).default("promotion_start"),
|
|
53
|
+
end_metadata_key: zod_1.z.string().min(1).default("promotion_end"),
|
|
54
|
+
treat_open_ended_as_active: zod_1.z.boolean().default(true),
|
|
55
|
+
});
|
|
56
|
+
const AvailabilitySchema = zod_1.z.object({
|
|
57
|
+
require_in_stock: zod_1.z.boolean().default(false),
|
|
58
|
+
include_preorder: zod_1.z.boolean().default(true),
|
|
59
|
+
include_backorder: zod_1.z.boolean().default(true),
|
|
60
|
+
include_gift_cards: zod_1.z.boolean().default(false),
|
|
61
|
+
publishable_only: zod_1.z.boolean().default(true),
|
|
62
|
+
});
|
|
63
|
+
const RatingSchema = zod_1.z.object({
|
|
64
|
+
enabled: zod_1.z.boolean().default(true),
|
|
65
|
+
min: zod_1.z.number({ coerce: true }).min(0).max(5).default(0),
|
|
66
|
+
max: zod_1.z.number({ coerce: true }).min(0).max(5).default(5),
|
|
67
|
+
require_reviews: zod_1.z.boolean().default(false),
|
|
68
|
+
});
|
|
69
|
+
const ProductHelperOptionsSchema = zod_1.z.object({
|
|
70
|
+
metadata: zod_1.z
|
|
71
|
+
.object({
|
|
72
|
+
descriptors: zod_1.z.array(MetadataDescriptorSchema).default([]),
|
|
73
|
+
expose_client_helpers: zod_1.z.boolean().default(true),
|
|
74
|
+
})
|
|
75
|
+
.default({
|
|
76
|
+
descriptors: [],
|
|
77
|
+
expose_client_helpers: true,
|
|
78
|
+
}),
|
|
79
|
+
price_ranges: zod_1.z.array(PriceRangeSchema).default([]),
|
|
80
|
+
default_price_range: PriceRangeSchema.default({
|
|
81
|
+
label: "custom",
|
|
82
|
+
min: null,
|
|
83
|
+
max: null,
|
|
84
|
+
}),
|
|
85
|
+
promotion_window: PromotionWindowSchema.default({
|
|
86
|
+
start_metadata_key: "promotion_start",
|
|
87
|
+
end_metadata_key: "promotion_end",
|
|
88
|
+
treat_open_ended_as_active: true,
|
|
89
|
+
}),
|
|
90
|
+
availability: AvailabilitySchema.default({
|
|
91
|
+
require_in_stock: false,
|
|
92
|
+
include_preorder: true,
|
|
93
|
+
include_backorder: true,
|
|
94
|
+
include_gift_cards: false,
|
|
95
|
+
publishable_only: true,
|
|
96
|
+
}),
|
|
97
|
+
rating: RatingSchema.default({
|
|
98
|
+
enabled: true,
|
|
99
|
+
min: 0,
|
|
100
|
+
max: 5,
|
|
101
|
+
require_reviews: false,
|
|
102
|
+
}),
|
|
103
|
+
});
|
|
104
|
+
exports.DEFAULT_PRODUCT_HELPER_OPTIONS = normalizeProductHelperOptions({});
|
|
105
|
+
const PLUGIN_NAME = "medusa-product-helper";
|
|
106
|
+
function normalizeProductHelperOptions(input) {
|
|
107
|
+
const parsed = ProductHelperOptionsSchema.parse(input ?? {});
|
|
108
|
+
return {
|
|
109
|
+
...parsed,
|
|
110
|
+
metadata: {
|
|
111
|
+
...parsed.metadata,
|
|
112
|
+
descriptors: (0, utils_2.normalizeMetadataDescriptors)(parsed.metadata.descriptors),
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function resolveProductHelperOptions(configModule) {
|
|
117
|
+
const plugins = configModule?.plugins ?? [];
|
|
118
|
+
for (const plugin of plugins) {
|
|
119
|
+
if ((0, utils_1.isString)(plugin)) {
|
|
120
|
+
if (plugin === PLUGIN_NAME) {
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (plugin?.resolve === PLUGIN_NAME) {
|
|
126
|
+
return normalizeProductHelperOptions(plugin.options);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return exports.DEFAULT_PRODUCT_HELPER_OPTIONS;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1oZWxwZXItb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb25maWcvcHJvZHVjdC1oZWxwZXItb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErSUEsc0VBWUM7QUFFRCxrRUFtQkM7QUFoTEQscURBQW9EO0FBQ3BELDZCQUF1QjtBQUV2Qiw0REFHeUM7QUFDekMsNERBQStFO0FBRS9FLE1BQU0sZ0JBQWdCLEdBQUcsT0FBQztLQUN2QixNQUFNLENBQUM7SUFDTixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUNsRCxhQUFhLEVBQUUsT0FBQztTQUNiLE1BQU0sRUFBRTtTQUNSLElBQUksRUFBRTtTQUNOLE1BQU0sQ0FBQyxDQUFDLEVBQUUsbUNBQW1DLENBQUM7U0FDOUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDekMsUUFBUSxFQUFFO0lBQ2IsR0FBRyxFQUFFLE9BQUM7U0FDSCxNQUFNLENBQUM7UUFDTixNQUFNLEVBQUUsSUFBSTtRQUNaLGtCQUFrQixFQUFFLDRCQUE0QjtLQUNqRCxDQUFDO1NBQ0QsV0FBVyxFQUFFO1NBQ2IsUUFBUSxFQUFFO1NBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNoQixHQUFHLEVBQUUsT0FBQztTQUNILE1BQU0sQ0FBQztRQUNOLE1BQU0sRUFBRSxJQUFJO1FBQ1osa0JBQWtCLEVBQUUsNEJBQTRCO0tBQ2pELENBQUM7U0FDRCxXQUFXLEVBQUU7U0FDYixRQUFRLEVBQUU7U0FDVixPQUFPLENBQUMsSUFBSSxDQUFDO0NBQ2pCLENBQUM7S0FDRCxNQUFNLENBQ0wsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNSLEtBQUss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
|
|
@@ -0,0 +1,5 @@
|
|
|
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=
|
|
@@ -0,0 +1,195 @@
|
|
|
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
|
+
/**
|
|
12
|
+
* Normalizes arbitrary input (typically plugin options) into a clean descriptor list.
|
|
13
|
+
* - Filters out invalid entries.
|
|
14
|
+
* - Deduplicates by key (first occurrence wins).
|
|
15
|
+
* - Trims key and label whitespace.
|
|
16
|
+
*/
|
|
17
|
+
function normalizeMetadataDescriptors(input) {
|
|
18
|
+
if (!Array.isArray(input)) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
const seenKeys = new Set();
|
|
22
|
+
const normalized = [];
|
|
23
|
+
for (const item of input) {
|
|
24
|
+
if (!item || typeof item !== "object") {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const key = getNormalizedKey(item.key);
|
|
28
|
+
if (!key || seenKeys.has(key)) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const type = getNormalizedType(item.type);
|
|
32
|
+
if (!type) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const label = getNormalizedLabel(item.label);
|
|
36
|
+
normalized.push({
|
|
37
|
+
key,
|
|
38
|
+
type,
|
|
39
|
+
...(label ? { label } : {}),
|
|
40
|
+
});
|
|
41
|
+
seenKeys.add(key);
|
|
42
|
+
}
|
|
43
|
+
return normalized;
|
|
44
|
+
}
|
|
45
|
+
function getDescriptorMap(descriptors) {
|
|
46
|
+
return descriptors.reduce((acc, descriptor) => {
|
|
47
|
+
acc[descriptor.key] = descriptor;
|
|
48
|
+
return acc;
|
|
49
|
+
}, {});
|
|
50
|
+
}
|
|
51
|
+
function buildInitialFormState(descriptors, metadata) {
|
|
52
|
+
return descriptors.reduce((acc, descriptor) => {
|
|
53
|
+
const currentValue = metadata && typeof metadata === "object"
|
|
54
|
+
? metadata[descriptor.key]
|
|
55
|
+
: undefined;
|
|
56
|
+
acc[descriptor.key] = normalizeFormValue(descriptor, currentValue);
|
|
57
|
+
return acc;
|
|
58
|
+
}, {});
|
|
59
|
+
}
|
|
60
|
+
function buildMetadataPayload({ descriptors, values, originalMetadata, }) {
|
|
61
|
+
const base = originalMetadata && typeof originalMetadata === "object"
|
|
62
|
+
? { ...originalMetadata }
|
|
63
|
+
: {};
|
|
64
|
+
descriptors.forEach((descriptor) => {
|
|
65
|
+
const rawValue = values[descriptor.key];
|
|
66
|
+
const coerced = coerceMetadataValue(descriptor, rawValue);
|
|
67
|
+
if (typeof coerced === "undefined") {
|
|
68
|
+
delete base[descriptor.key];
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
base[descriptor.key] = coerced;
|
|
72
|
+
});
|
|
73
|
+
return base;
|
|
74
|
+
}
|
|
75
|
+
function hasMetadataChanges({ descriptors, values, originalMetadata, }) {
|
|
76
|
+
const next = buildMetadataPayload({ descriptors, values, originalMetadata });
|
|
77
|
+
const prev = originalMetadata && typeof originalMetadata === "object"
|
|
78
|
+
? originalMetadata
|
|
79
|
+
: {};
|
|
80
|
+
return descriptors.some((descriptor) => {
|
|
81
|
+
const prevValue = prev[descriptor.key];
|
|
82
|
+
const nextValue = next[descriptor.key];
|
|
83
|
+
return !isDeepEqual(prevValue, nextValue);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function validateValueForDescriptor(descriptor, value) {
|
|
87
|
+
if (descriptor.type === "number") {
|
|
88
|
+
if (value === "" || value === null || typeof value === "undefined") {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
const numericValue = typeof value === "number" ? value : Number(String(value).trim());
|
|
92
|
+
if (Number.isNaN(numericValue)) {
|
|
93
|
+
return "Enter a valid number";
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (descriptor.type === "file") {
|
|
97
|
+
if (!value) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
// eslint-disable-next-line no-new
|
|
102
|
+
new URL(String(value).trim());
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
return "Enter a valid URL";
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
110
|
+
function normalizeFormValue(descriptor, currentValue) {
|
|
111
|
+
if (descriptor.type === "bool") {
|
|
112
|
+
return Boolean(currentValue);
|
|
113
|
+
}
|
|
114
|
+
if ((descriptor.type === "number" || descriptor.type === "text") &&
|
|
115
|
+
typeof currentValue === "number") {
|
|
116
|
+
return currentValue.toString();
|
|
117
|
+
}
|
|
118
|
+
if (typeof currentValue === "string" || typeof currentValue === "number") {
|
|
119
|
+
return String(currentValue);
|
|
120
|
+
}
|
|
121
|
+
return "";
|
|
122
|
+
}
|
|
123
|
+
function coerceMetadataValue(descriptor, value) {
|
|
124
|
+
if (value === "" || value === null || typeof value === "undefined") {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
if (descriptor.type === "bool") {
|
|
128
|
+
if (typeof value === "boolean") {
|
|
129
|
+
return value;
|
|
130
|
+
}
|
|
131
|
+
if (typeof value === "number") {
|
|
132
|
+
return value !== 0;
|
|
133
|
+
}
|
|
134
|
+
if (typeof value === "string") {
|
|
135
|
+
const normalized = value.trim().toLowerCase();
|
|
136
|
+
if (!normalized) {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
if (["true", "1", "yes", "y", "on"].includes(normalized)) {
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
if (["false", "0", "no", "n", "off"].includes(normalized)) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return Boolean(value);
|
|
147
|
+
}
|
|
148
|
+
if (descriptor.type === "number") {
|
|
149
|
+
if (typeof value === "number") {
|
|
150
|
+
return value;
|
|
151
|
+
}
|
|
152
|
+
const parsed = Number(String(value).trim());
|
|
153
|
+
return Number.isNaN(parsed) ? undefined : parsed;
|
|
154
|
+
}
|
|
155
|
+
return String(value).trim();
|
|
156
|
+
}
|
|
157
|
+
function getNormalizedKey(value) {
|
|
158
|
+
if (typeof value !== "string") {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
const trimmed = value.trim();
|
|
162
|
+
return trimmed.length ? trimmed : null;
|
|
163
|
+
}
|
|
164
|
+
function getNormalizedType(value) {
|
|
165
|
+
if (typeof value !== "string") {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
const type = value.trim().toLowerCase();
|
|
169
|
+
return VALID_FIELD_TYPES.has(type) ? type : null;
|
|
170
|
+
}
|
|
171
|
+
function getNormalizedLabel(value) {
|
|
172
|
+
if (typeof value !== "string") {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
const trimmed = value.trim();
|
|
176
|
+
return trimmed.length ? trimmed : undefined;
|
|
177
|
+
}
|
|
178
|
+
function isDeepEqual(a, b) {
|
|
179
|
+
if (a === b) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
if (typeof a === "object" &&
|
|
183
|
+
typeof b === "object" &&
|
|
184
|
+
a !== null &&
|
|
185
|
+
b !== null) {
|
|
186
|
+
const aKeys = Object.keys(a);
|
|
187
|
+
const bKeys = Object.keys(b);
|
|
188
|
+
if (aKeys.length !== bKeys.length) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
return aKeys.every((key) => isDeepEqual(a[key], b[key]));
|
|
192
|
+
}
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2hhcmVkL3Byb2R1Y3QtbWV0YWRhdGEvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFrQkEsb0VBbUNDO0FBRUQsNENBT0M7QUFFRCxzREFnQkM7QUFFRCxvREEyQkM7QUFFRCxnREFvQkM7QUFFRCxnRUErQkM7QUFwS0QsbUNBS2dCO0FBS2hCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQW9CLDRCQUFvQixDQUFDLENBQUE7QUFFMUU7Ozs7O0dBS0c7QUFDSCxTQUFnQiw0QkFBNEIsQ0FDMUMsS0FBYztJQUVkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtJQUNsQyxNQUFNLFVBQVUsR0FBeUIsRUFBRSxDQUFBO0lBRTNDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxTQUFRO1FBQ1YsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFFLElBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMvQyxJQUFJLENBQUMsR0FBRyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixTQUFRO1FBQ1YsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFFLElBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNsRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixTQUFRO1FBQ1YsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFFLElBQVksQ0FBQyxLQUFLLENB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
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildProductFilterPlan = buildProductFilterPlan;
|
|
4
|
+
exports.buildBestSellingPlan = buildBestSellingPlan;
|
|
5
|
+
function buildProductFilterPlan({ query, options, }) {
|
|
6
|
+
const baseFilters = {};
|
|
7
|
+
if (query.id?.length) {
|
|
8
|
+
baseFilters.id = query.id;
|
|
9
|
+
}
|
|
10
|
+
if (query.handle?.length) {
|
|
11
|
+
baseFilters.handle = query.handle;
|
|
12
|
+
}
|
|
13
|
+
if (query.collection_id?.length) {
|
|
14
|
+
baseFilters.collection_id = query.collection_id;
|
|
15
|
+
}
|
|
16
|
+
if (query.category_id?.length) {
|
|
17
|
+
baseFilters.categories = {
|
|
18
|
+
id: query.category_id,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
if (query.tags?.length) {
|
|
22
|
+
baseFilters.tags = {
|
|
23
|
+
value: query.tags,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (query.sales_channel_id?.length) {
|
|
27
|
+
baseFilters.sales_channels = {
|
|
28
|
+
id: query.sales_channel_id,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const metadataAllowList = new Set(options.metadata.descriptors.map((descriptor) => descriptor.key));
|
|
32
|
+
const metadataFilters = metadataAllowList.size === 0
|
|
33
|
+
? {}
|
|
34
|
+
: Object.entries(query.metadata ?? {}).reduce((acc, [key, value]) => {
|
|
35
|
+
if (metadataAllowList.has(key)) {
|
|
36
|
+
acc[key] = value;
|
|
37
|
+
}
|
|
38
|
+
return acc;
|
|
39
|
+
}, {});
|
|
40
|
+
const priceRange = typeof query.price_min !== "undefined" ||
|
|
41
|
+
typeof query.price_max !== "undefined"
|
|
42
|
+
? {
|
|
43
|
+
min: query.price_min,
|
|
44
|
+
max: query.price_max,
|
|
45
|
+
}
|
|
46
|
+
: options.default_price_range.min !== null ||
|
|
47
|
+
options.default_price_range.max !== null
|
|
48
|
+
? {
|
|
49
|
+
min: options.default_price_range.min ?? undefined,
|
|
50
|
+
max: options.default_price_range.max ?? undefined,
|
|
51
|
+
currency_code: options.default_price_range.currency_code,
|
|
52
|
+
}
|
|
53
|
+
: undefined;
|
|
54
|
+
const promotionWindow = {
|
|
55
|
+
startKey: options.promotion_window.start_metadata_key,
|
|
56
|
+
endKey: options.promotion_window.end_metadata_key,
|
|
57
|
+
range: query.promotion_start || query.promotion_end
|
|
58
|
+
? {
|
|
59
|
+
start: query.promotion_start,
|
|
60
|
+
end: query.promotion_end,
|
|
61
|
+
}
|
|
62
|
+
: undefined,
|
|
63
|
+
activeOn: query.promotion_active_on,
|
|
64
|
+
includeOpen: typeof query.include_open_promotions === "boolean"
|
|
65
|
+
? query.include_open_promotions
|
|
66
|
+
: options.promotion_window.treat_open_ended_as_active,
|
|
67
|
+
};
|
|
68
|
+
const availability = {
|
|
69
|
+
statuses: query.availability_status ?? [],
|
|
70
|
+
include_preorder: typeof query.include_preorder === "boolean"
|
|
71
|
+
? query.include_preorder
|
|
72
|
+
: options.availability.include_preorder,
|
|
73
|
+
include_backorder: typeof query.include_backorder === "boolean"
|
|
74
|
+
? query.include_backorder
|
|
75
|
+
: options.availability.include_backorder,
|
|
76
|
+
include_gift_cards: typeof query.include_gift_cards === "boolean"
|
|
77
|
+
? query.include_gift_cards
|
|
78
|
+
: options.availability.include_gift_cards,
|
|
79
|
+
publishable_only: typeof query.publishable_only === "boolean"
|
|
80
|
+
? query.publishable_only
|
|
81
|
+
: options.availability.publishable_only,
|
|
82
|
+
};
|
|
83
|
+
const rating = options.rating.enabled
|
|
84
|
+
? {
|
|
85
|
+
enabled: true,
|
|
86
|
+
min: typeof query.rating_min !== "undefined"
|
|
87
|
+
? query.rating_min
|
|
88
|
+
: options.rating.min,
|
|
89
|
+
max: typeof query.rating_max !== "undefined"
|
|
90
|
+
? query.rating_max
|
|
91
|
+
: options.rating.max,
|
|
92
|
+
require_reviews: typeof query.rating_required === "boolean"
|
|
93
|
+
? query.rating_required
|
|
94
|
+
: options.rating.require_reviews,
|
|
95
|
+
}
|
|
96
|
+
: {
|
|
97
|
+
enabled: false,
|
|
98
|
+
require_reviews: false,
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
pagination: {
|
|
102
|
+
limit: query.limit,
|
|
103
|
+
offset: query.offset,
|
|
104
|
+
},
|
|
105
|
+
projection: {
|
|
106
|
+
fields: query.fields,
|
|
107
|
+
expand: query.expand,
|
|
108
|
+
order: query.order,
|
|
109
|
+
q: query.q,
|
|
110
|
+
},
|
|
111
|
+
baseFilters,
|
|
112
|
+
metadataFilters,
|
|
113
|
+
priceRange,
|
|
114
|
+
promotionWindow,
|
|
115
|
+
availability,
|
|
116
|
+
rating,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function buildBestSellingPlan(query) {
|
|
120
|
+
return {
|
|
121
|
+
pagination: {
|
|
122
|
+
limit: query.limit,
|
|
123
|
+
offset: query.offset,
|
|
124
|
+
},
|
|
125
|
+
timeframe: query.timeframe_from || query.timeframe_to
|
|
126
|
+
? {
|
|
127
|
+
from: query.timeframe_from,
|
|
128
|
+
to: query.timeframe_to,
|
|
129
|
+
}
|
|
130
|
+
: undefined,
|
|
131
|
+
sales_channel_id: query.sales_channel_id,
|
|
132
|
+
region_id: query.region_id,
|
|
133
|
+
product_id: query.product_id,
|
|
134
|
+
variant_id: query.variant_id,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1maWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3F1ZXJ5LWJ1aWxkZXJzL3Byb2R1Y3QtZmlsdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdFQSx3REFvSkM7QUFFRCxvREFvQkM7QUExS0QsU0FBZ0Isc0JBQXNCLENBQUMsRUFDckMsS0FBSyxFQUNMLE9BQU8sR0FJUjtJQUNDLE1BQU0sV0FBVyxHQUE0QixFQUFFLENBQUE7SUFFL0MsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLFdBQVcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQTtJQUMzQixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtJQUNuQyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtJQUNqRCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzlCLFdBQVcsQ0FBQyxVQUFVLEdBQUc7WUFDdkIsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXO1NBQ3RCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLFdBQVcsQ0FBQyxJQUFJLEdBQUc7WUFDakIsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO1NBQ2xCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDbkMsV0FBVyxDQUFDLGNBQWMsR0FBRztZQUMzQixFQUFFLEVB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
|
package/README.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://www.medusajs.com">
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/59018053/229103275-b5e482bb-4601-46e6-8142-244f531cebdb.svg">
|
|
5
|
+
<source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/59018053/229103726-e5b529a3-9b3f-4970-8a1f-c6af37f087bf.svg">
|
|
6
|
+
<img alt="Medusa logo" src="https://user-images.githubusercontent.com/59018053/229103726-e5b529a3-9b3f-4970-8a1f-c6af37f087bf.svg">
|
|
7
|
+
</picture>
|
|
8
|
+
</a>
|
|
9
|
+
</p>
|
|
10
|
+
<h1 align="center">
|
|
11
|
+
Medusa Plugin Starter
|
|
12
|
+
</h1>
|
|
13
|
+
|
|
14
|
+
<h4 align="center">
|
|
15
|
+
<a href="https://docs.medusajs.com">Documentation</a> |
|
|
16
|
+
<a href="https://www.medusajs.com">Website</a>
|
|
17
|
+
</h4>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
Building blocks for digital commerce
|
|
21
|
+
</p>
|
|
22
|
+
<p align="center">
|
|
23
|
+
<a href="https://github.com/medusajs/medusa/blob/master/CONTRIBUTING.md">
|
|
24
|
+
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" alt="PRs welcome!" />
|
|
25
|
+
</a>
|
|
26
|
+
<a href="https://www.producthunt.com/posts/medusa"><img src="https://img.shields.io/badge/Product%20Hunt-%231%20Product%20of%20the%20Day-%23DA552E" alt="Product Hunt"></a>
|
|
27
|
+
<a href="https://discord.gg/xpCwq3Kfn8">
|
|
28
|
+
<img src="https://img.shields.io/badge/chat-on%20discord-7289DA.svg" alt="Discord Chat" />
|
|
29
|
+
</a>
|
|
30
|
+
<a href="https://twitter.com/intent/follow?screen_name=medusajs">
|
|
31
|
+
<img src="https://img.shields.io/twitter/follow/medusajs.svg?label=Follow%20@medusajs" alt="Follow @medusajs" />
|
|
32
|
+
</a>
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
## Compatibility
|
|
36
|
+
|
|
37
|
+
This starter is compatible with versions >= 2.4.0 of `@medusajs/medusa`.
|
|
38
|
+
|
|
39
|
+
## Getting Started
|
|
40
|
+
|
|
41
|
+
Visit the [Quickstart Guide](https://docs.medusajs.com/learn/installation) to set up a server.
|
|
42
|
+
|
|
43
|
+
Visit the [Plugins documentation](https://docs.medusajs.com/learn/fundamentals/plugins) to learn more about plugins and how to create them.
|
|
44
|
+
|
|
45
|
+
Visit the [Docs](https://docs.medusajs.com/learn/installation#get-started) to learn more about our system requirements.
|
|
46
|
+
|
|
47
|
+
## What is Medusa
|
|
48
|
+
|
|
49
|
+
Medusa is a set of commerce modules and tools that allow you to build rich, reliable, and performant commerce applications without reinventing core commerce logic. The modules can be customized and used to build advanced ecommerce stores, marketplaces, or any product that needs foundational commerce primitives. All modules are open-source and freely available on npm.
|
|
50
|
+
|
|
51
|
+
Learn more about [Medusa’s architecture](https://docs.medusajs.com/learn/introduction/architecture) and [commerce modules](https://docs.medusajs.com/learn/fundamentals/modules/commerce-modules) in the Docs.
|
|
52
|
+
|
|
53
|
+
## Community & Contributions
|
|
54
|
+
|
|
55
|
+
The community and core team are available in [GitHub Discussions](https://github.com/medusajs/medusa/discussions), where you can ask for support, discuss roadmap, and share ideas.
|
|
56
|
+
|
|
57
|
+
Join our [Discord server](https://discord.com/invite/medusajs) to meet other community members.
|
|
58
|
+
|
|
59
|
+
## Other channels
|
|
60
|
+
|
|
61
|
+
- [GitHub Issues](https://github.com/medusajs/medusa/issues)
|
|
62
|
+
- [Twitter](https://twitter.com/medusajs)
|
|
63
|
+
- [LinkedIn](https://www.linkedin.com/company/medusajs)
|
|
64
|
+
- [Medusa Blog](https://medusajs.com/blog/)
|
package/package.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "medusa-product-helper",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "A starter for Medusa plugins.",
|
|
5
|
+
"author": "Medusa (https://medusajs.com)",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"files": [
|
|
8
|
+
".medusa/server"
|
|
9
|
+
],
|
|
10
|
+
"exports": {
|
|
11
|
+
"./package.json": "./package.json",
|
|
12
|
+
"./workflows": "./.medusa/server/src/workflows/index.js",
|
|
13
|
+
"./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
14
|
+
"./modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
15
|
+
"./providers/*": "./.medusa/server/src/providers/*/index.js",
|
|
16
|
+
"./*": "./.medusa/server/src/*.js",
|
|
17
|
+
"./admin": {
|
|
18
|
+
"import": "./.medusa/server/src/admin/index.mjs",
|
|
19
|
+
"require": "./.medusa/server/src/admin/index.js",
|
|
20
|
+
"default": "./.medusa/server/src/admin/index.js"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"medusa",
|
|
25
|
+
"plugin",
|
|
26
|
+
"medusa-plugin-other",
|
|
27
|
+
"medusa-plugin",
|
|
28
|
+
"medusa-v2"
|
|
29
|
+
],
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "medusa plugin:build",
|
|
32
|
+
"dev": "medusa plugin:develop",
|
|
33
|
+
"prepublishOnly": "medusa plugin:build"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@medusajs/admin-sdk": "2.11.2",
|
|
37
|
+
"@medusajs/cli": "2.11.2",
|
|
38
|
+
"@medusajs/framework": "2.11.2",
|
|
39
|
+
"@medusajs/medusa": "2.11.2",
|
|
40
|
+
"@medusajs/test-utils": "2.11.2",
|
|
41
|
+
"@medusajs/ui": "4.0.25",
|
|
42
|
+
"@medusajs/icons": "2.11.2",
|
|
43
|
+
"@swc/core": "1.5.7",
|
|
44
|
+
"@types/node": "^20.0.0",
|
|
45
|
+
"@types/react": "^18.3.2",
|
|
46
|
+
"@types/react-dom": "^18.2.25",
|
|
47
|
+
"prop-types": "^15.8.1",
|
|
48
|
+
"react": "^18.2.0",
|
|
49
|
+
"react-dom": "^18.2.0",
|
|
50
|
+
"ts-node": "^10.9.2",
|
|
51
|
+
"typescript": "^5.6.2",
|
|
52
|
+
"vite": "^5.2.11",
|
|
53
|
+
"yalc": "^1.0.0-pre.53"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"zod": "^3.23.8"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"@medusajs/admin-sdk": "2.11.2",
|
|
60
|
+
"@medusajs/cli": "2.11.2",
|
|
61
|
+
"@medusajs/framework": "2.11.2",
|
|
62
|
+
"@medusajs/test-utils": "2.11.2",
|
|
63
|
+
"@medusajs/medusa": "2.11.2",
|
|
64
|
+
"@medusajs/ui": "4.0.25",
|
|
65
|
+
"@medusajs/icons": "2.11.2"
|
|
66
|
+
},
|
|
67
|
+
"engines": {
|
|
68
|
+
"node": ">=20"
|
|
69
|
+
}
|
|
70
|
+
}
|