UNPKG

@medusajs/core-flows

Version:

Set of workflow definitions for Medusa

121 lines 5.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.normalizeV1Products = void 0; const utils_1 = require("@medusajs/framework/utils"); const basicFieldsToOmit = [ // Fields with slightly different naming "Product MID Code", "Product HS Code", "Variant MID Code", "Variant HS Code", "Variant EAN", "Variant UPC", "Variant SKU", // Fields no longer present in v2 "Variant Inventory Quantity", "Product Profile Name", "Product Profile Type", // Fields that are remapped "Product Collection Handle", "Product Collection Title", "Product Type", "Product Tags", ]; // This is primarily to have backwards compatibility with v1 exports // Although it also makes v2 import template more dynamic // it's better to not expose eg. "Product MID Code" as an available public API so we can remove this code at some point. const normalizeV1Products = (rawProducts, supportingData) => { const productTypesMap = new Map(supportingData.productTypes.map((pt) => [pt.value, pt.id])); const productCollectionsMap = new Map(supportingData.productCollections.map((pc) => [pc.handle, pc.id])); const salesChannelsMap = new Map(supportingData.salesChannels.map((sc) => [sc.name, sc.id])); const shippingProfilesIds = new Set(supportingData.shippingProfiles.map((sp) => sp.id)); return rawProducts.map((product) => { let finalRes = { ...product, "Product Mid Code": product["Product MID Code"] ?? product["Product Mid Code"], "Product Hs Code": product["Product HS Code"] ?? product["Product Hs Code"], "Variant MID Code": product["Variant MID Code"] ?? product["Variant Mid Code"], "Variant Hs Code": product["Variant HS Code"] ?? product["Variant Hs Code"], "Variant Ean": product["Variant EAN"] ?? product["Variant Ean"], "Variant Upc": product["Variant UPC"] ?? product["Variant Upc"], "Variant Sku": product["Variant SKU"] ?? product["Variant Sku"], }; basicFieldsToOmit.forEach((field) => { delete finalRes[field]; }); // You can either pass "Product Tags" or "Product Tag <IDX>", but not both const tags = product["Product Tags"]?.toString()?.split(","); if (tags) { finalRes = { ...finalRes, ...tags.reduce((agg, tag, i) => { agg[`Product Tag ${i + 1}`] = tag; return agg; }, {}), }; } const productTypeValue = product["Product Type"]; if (productTypeValue) { if (!productTypesMap.has(productTypeValue)) { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Product type with value '${productTypeValue}' does not exist`); } finalRes["Product Type Id"] = productTypesMap.get(productTypeValue); } const productCollectionHandle = product["Product Collection Handle"]; if (productCollectionHandle) { if (!productCollectionsMap.has(productCollectionHandle)) { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Product collection with handle '${productCollectionHandle}' does not exist`); } finalRes["Product Collection Id"] = productCollectionsMap.get(productCollectionHandle); } // We have to iterate over all fields for the ones that are index-based Object.entries(finalRes).forEach(([key, value]) => { if (key.startsWith("Price")) { delete finalRes[key]; if (value) { finalRes[`Variant ${key}`] = value; } } if (key.startsWith("Option")) { delete finalRes[key]; if (value) { finalRes[`Variant ${key}`] = value; } } if (key.startsWith("Image")) { delete finalRes[key]; if (value) { finalRes[`Product Image ${key.split(" ")[1]}`] = value; } } if (key.startsWith("Sales Channel")) { delete finalRes[key]; if (key.endsWith("Id") && value) { if (!salesChannelsMap.has(value)) { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Sales channel with name '${value}' does not exist`); } finalRes[`Product Sales Channel ${key.split(" ")[2]}`] = salesChannelsMap.get(value); } } if (key.startsWith("Shipping Profile Id")) { if (!value) { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Shipping Profile Id is required when importing products"); } if (!shippingProfilesIds.has(value)) { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Shipping profile: '${value}' does not exist`); } } if (key.startsWith("Product Category") && (key.endsWith("Handle") || key.endsWith("Name") || key.endsWith("Description"))) { delete finalRes[key]; } // Note: Product categories from v1 are not imported to v2 }); return finalRes; }); }; exports.normalizeV1Products = normalizeV1Products; //# sourceMappingURL=normalize-v1-import.js.map