UNPKG

@sugarcube/plugin-csv

Version:
121 lines (102 loc) 3.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _fp = require("lodash/fp"); var _fs = _interopRequireDefault(require("fs")); var _path = _interopRequireDefault(require("path")); var _csvStringify = _interopRequireDefault(require("csv-stringify")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const instrument = cfg => { const dataDir = (0, _fp.get)("csv.data_dir", cfg); const delimiter = (0, _fp.get)("csv.delimiter", cfg); const label = (0, _fp.get)("csv.label", cfg); const appendMode = (0, _fp.get)("csv.append", cfg); const columns = ["type", "term", "reason", "plugin"]; let file = filename => { if (filename == null) return null; if (!_fs.default.existsSync(dataDir)) _fs.default.mkdirSync(dataDir); const flags = appendMode ? "a" : "w"; let writeStream; if (appendMode) { try { _fs.default.accessSync(filename); writeStream = _fs.default.createWriteStream(filename, { flags }); } catch (err) { writeStream = _fs.default.createWriteStream(filename, { flags }); writeStream.write(`${columns.join(delimiter)}\n`); } } else { writeStream = _fs.default.createWriteStream(filename, { flags }); writeStream.write(`${columns.join(delimiter)}\n`); } // Memoize the write stream; file = () => writeStream; return file(); }; let csvWriter = filename => { if (filename == null) return null; const writeStream = file(filename); const csv = (0, _csvStringify.default)({ header: false, columns, delimiter }); csv.pipe(writeStream); // Memoize the CSV writer. csvWriter = () => csv; return csvWriter(); }; return { fail: ({ type, term, marker, reason, plugin }) => { // The filename construction is shared with the mail_failed_stats and // the csv_export_failed plugin. If updated here, update there as well. const filename = _path.default.join(dataDir, `failed-stats-${label == null ? "" : `${label}-`}${marker}.csv`); const writer = csvWriter(filename); if (writer != null) writer.write({ type, term, reason, plugin }); }, end: () => { const fileHandler = file(); const writer = csvWriter(); if (fileHandler != null) fileHandler.end(); if (writer != null) writer.end(); } }; }; instrument.desc = "Write failures to a CSV file [fail, end]."; instrument.argv = { "csv.data_dir": { type: "string", default: "./data", nargs: 1, desc: "Store the CSV file in this directory." }, "csv.label": { type: "string", nargs: 1, desc: "Add a label to the export file name." }, "csv.append": { type: "boolean", default: false, desc: "Append to a CSV file rather than overwrite." } }; var _default = instrument; exports.default = _default;