@devx-commerce/plugin-product-reviews
Version:
Product Reviews Plugin for Medusa
63 lines • 5.56 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.downloadAndParseCsvStep = exports.downloadAndParseCsvStepId = void 0;
const workflows_sdk_1 = require("@medusajs/workflows-sdk");
const utils_1 = require("@medusajs/utils");
const csv_parse_1 = require("csv-parse");
const axios_1 = __importDefault(require("axios"));
exports.downloadAndParseCsvStepId = "download-and-parse-csv";
exports.downloadAndParseCsvStep = (0, workflows_sdk_1.createStep)(exports.downloadAndParseCsvStepId, async (input) => {
try {
// Download the CSV file
const response = await axios_1.default.get(input.csv_url, {
responseType: "text",
timeout: 10000, // 10 seconds timeout
});
if (!response.data) {
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Downloaded CSV file is empty");
}
// Parse CSV data using promise
const records = await new Promise((resolve, reject) => {
const results = [];
const parser = (0, csv_parse_1.parse)(response.data, {
columns: true, // Treat first line as headers
skip_empty_lines: true,
trim: true,
})
.on("error", (error) => reject(error))
.on("end", () => resolve(results));
// If we only want headers, we'll just read the first row
if (input.headersOnly) {
parser.on("headers", (headers) => {
// Create an empty record with all headers
const emptyRecord = {};
headers.forEach((header) => {
emptyRecord[header] = "";
});
results.push(emptyRecord);
// Stop parsing after headers
parser.end();
});
}
else {
// Normal processing for full CSV
parser.on("data", (data) => results.push(data));
}
});
console.log("records: ", records);
return new workflows_sdk_1.StepResponse(records);
}
catch (error) {
if (error instanceof utils_1.MedusaError) {
throw error;
}
if (axios_1.default.isAxiosError(error)) {
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Failed to download CSV: ${error.message}`);
}
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Failed to parse CSV: ${error.message}`);
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQtYW5kLXBhcnNlLWNzdi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvcHJvZHVjdC1yZXZpZXdzL3N0ZXBzL2Rvd25sb2FkLWFuZC1wYXJzZS1jc3YudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkRBQW1FO0FBQ25FLDJDQUE4QztBQUM5Qyx5Q0FBa0M7QUFDbEMsa0RBQTBCO0FBSWIsUUFBQSx5QkFBeUIsR0FBRyx3QkFBd0IsQ0FBQztBQUVyRCxRQUFBLHVCQUF1QixHQUFHLElBQUEsMEJBQVUsRUFDL0MsaUNBQXlCLEVBQ3pCLEtBQUssRUFBRSxLQUFpRCxFQUFFLEVBQUU7SUFDMUQsSUFBSSxDQUFDO1FBQ0gsd0JBQXdCO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQzlDLFlBQVksRUFBRSxNQUFNO1lBQ3BCLE9BQU8sRUFBRSxLQUFLLEVBQUUscUJBQXFCO1NBQ3RDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsOEJBQThCLENBQy9CLENBQUM7UUFDSixDQUFDO1FBRUQsK0JBQStCO1FBQy9CLE1BQU0sT0FBTyxHQUFtQixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3BFLE1BQU0sT0FBTyxHQUFtQixFQUFFLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBQSxpQkFBSyxFQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsOEJBQThCO2dCQUM3QyxnQkFBZ0IsRUFBRSxJQUFJO2dCQUN0QixJQUFJLEVBQUUsSUFBSTthQUNYLENBQUM7aUJBQ0MsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNyQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBRXJDLHlEQUF5RDtZQUN6RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtvQkFDL0IsMENBQTBDO29CQUMxQyxNQUFNLFdBQVcsR0FBaUIsRUFBRSxDQUFDO29CQUNyQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBYyxFQUFFLEVBQUU7d0JBQ2pDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzFCLDZCQUE2QjtvQkFDN0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNmLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGlDQUFpQztnQkFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVsQyxPQUFPLElBQUksNEJBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksS0FBSyxZQUFZLG1CQUFXLEVBQUUsQ0FBQztZQUNqQyxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFRCxJQUFJLGVBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwyQkFBMkIsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUMzQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHdCQUF3QixLQUFLLENBQUMsT0FBTyxFQUFFLENBQ3hDLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUNGLENBQUMifQ==