@medusajs/core-flows
Version:
Set of workflow definitions for Medusa
51 lines • 2.5 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseProductCsvStep = exports.parseProductCsvStepId = void 0;
const utils_1 = require("@medusajs/framework/utils");
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
const normalize_for_import_1 = require("../helpers/normalize-for-import");
const normalize_v1_import_1 = require("../helpers/normalize-v1-import");
const utils_2 = require("../utils");
exports.parseProductCsvStepId = "parse-product-csv";
/**
* This step parses a CSV file holding products to import, returning the products as
* objects that can be imported.
*
* @example
* const data = parseProductCsvStep("products.csv")
*/
exports.parseProductCsvStep = (0, workflows_sdk_1.createStep)(exports.parseProductCsvStepId, async (fileContent, { container }) => {
const regionService = container.resolve(utils_1.Modules.REGION);
const productService = container.resolve(utils_1.Modules.PRODUCT);
const salesChannelService = container.resolve(utils_1.Modules.SALES_CHANNEL);
const fulfillmentService = container.resolve(utils_1.Modules.FULFILLMENT);
const csvProducts = (0, utils_2.convertCsvToJson)(fileContent);
const [productTypes, productCollections, salesChannels, shippingProfiles] = await Promise.all([
productService.listProductTypes({}, {}),
productService.listProductCollections({}, {}),
salesChannelService.listSalesChannels({}, {}),
fulfillmentService.listShippingProfiles({}, {}),
]);
const v1Normalized = (0, normalize_v1_import_1.normalizeV1Products)(csvProducts, {
productTypes,
productCollections,
salesChannels,
shippingProfiles,
});
// We use the handle to group products and variants correctly.
v1Normalized.forEach((product) => {
if (!product["Product Handle"]) {
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Product handle is required when importing products");
}
});
const [allRegions, allTags] = await Promise.all([
regionService.listRegions({}, { select: ["id", "name", "currency_code"] }),
productService.listProductTags({}, { select: ["id", "value"] }),
]);
const normalizedData = (0, normalize_for_import_1.normalizeForImport)(v1Normalized, {
regions: allRegions,
tags: allTags,
});
return new workflows_sdk_1.StepResponse(normalizedData);
});
//# sourceMappingURL=parse-product-csv.js.map
;