@sugarcube/plugin-csv
Version:
CSV based input and output for SugarCube.
67 lines (52 loc) • 2.06 kB
JavaScript
;
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"));
var _pluginFs = require("@sugarcube/plugin-fs");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const plugin = (envelope, {
cfg,
log,
stats
}) => {
const delimiter = (0, _fp.get)("csv.delimiter", cfg);
const marker = (0, _fp.get)("marker", cfg);
const dataDir = (0, _fp.get)("csv.data_dir", cfg);
return (0, _pluginFs.mkdirP)(dataDir).then(() => {
const diffStats = Object.keys(stats.get("diff")).map(key => [key, (0, _fp.getOr)([], "units", stats.get("diff")[key])]).filter(([, units]) => units.length > 0);
if (diffStats.length === 0) return;
const destDir = _path.default.resolve(dataDir, marker); // eslint-disable-next-line promise/no-nesting, consistent-return
return (0, _pluginFs.mkdirP)(destDir).then(() => Promise.all(diffStats.map(([key, units]) => {
const filename = _path.default.resolve(destDir, `${key}.csv`);
const csv = (0, _csvStringify.default)({
header: true,
quotedString: true,
delimiter
});
log.debug(`Writing ${key} stats to ${filename}.`); // Pipe the csv stream into the file.
csv.pipe(_fs.default.createWriteStream(filename)); // eslint-disable-next-line promise/avoid-new
return new Promise((resolve, reject) => {
csv.on("error", reject);
csv.on("finish", () => resolve(envelope));
units.forEach(r => csv.write(r));
csv.end();
});
})));
}).then(() => envelope);
};
plugin.desc = "Export the diff stats as CSV files.";
plugin.argv = {
"csv.data_dir": {
type: "string",
nargs: 1,
default: "./data/diff_stats",
desc: "Export the diff stats as CSV files."
}
};
var _default = plugin;
exports.default = _default;