@woocommerce/csv-export
Version:
WooCommerce utility library to convert data to CSV files.
84 lines (83 loc) • 2.96 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var index_exports = {};
__export(index_exports, {
downloadCSVFile: () => downloadCSVFile,
generateCSVDataFromTable: () => generateCSVDataFromTable,
generateCSVFileName: () => generateCSVFileName
});
module.exports = __toCommonJS(index_exports);
var import_browser_filesaver = require("browser-filesaver");
function escapeCSVValue(value) {
let stringValue = value.toString();
if (typeof value === "number") {
return stringValue;
}
if ([
"=",
"+",
"-",
// Only escape '-' if it's not part of a numeric value.
"@",
String.fromCharCode(9),
// tab
String.fromCharCode(13)
// carriage return
].includes(stringValue.charAt(0))) {
stringValue = `"'` + stringValue + '"';
} else if (stringValue.match(/[,"\s]/)) {
stringValue = '"' + stringValue.replace(/"/g, '""') + '"';
}
return stringValue;
}
function getCSVHeaders(headers) {
return Array.isArray(headers) ? headers.map((header) => escapeCSVValue(header.label)).join(",") : [];
}
function getCSVRows(rows) {
return Array.isArray(rows) ? rows.map(
(row) => row.map((rowItem) => {
if (void 0 === rowItem.value || rowItem.value === null) {
return "";
}
return escapeCSVValue(rowItem.value);
}).join(",")
).join("\n") : [];
}
function generateCSVDataFromTable(headers, rows) {
return [getCSVHeaders(headers), getCSVRows(rows)].filter((text) => text.length).join("\n");
}
function todayDateStr() {
const date = /* @__PURE__ */ new Date();
const dateStr = date.toISOString().split("T")[0];
return dateStr;
}
function generateCSVFileName(name = "", params = {}) {
const fileNameSections = [
name.toLowerCase().replace(/[^a-z0-9]/g, "-"),
todayDateStr(),
Object.keys(params).map(
(key) => key.toLowerCase().replace(/[^a-z0-9]/g, "-") + "-" + decodeURIComponent(params[key]).toLowerCase().replace(/[^a-z0-9]/g, "-")
).join("_")
].filter((text) => text.length);
return fileNameSections.join("_") + ".csv";
}
function downloadCSVFile(fileName, content) {
const blob = new Blob([content], { type: "text/csv;charset=utf-8" });
(0, import_browser_filesaver.saveAs)(blob, fileName);
}