@sugarcube/plugin-csv
Version:
CSV based input and output for SugarCube.
48 lines (37 loc) • 1.32 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.parseMany = exports.parse = void 0;
var _fp = require("lodash/fp");
var _dashp = require("dashp");
var _csvParse = _interopRequireDefault(require("csv-parse"));
var _fs = _interopRequireDefault(require("fs"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const parse = (0, _fp.curry)((delimiter, unit) => {
const records = [];
const parser = (0, _csvParse.default)({
delimiter,
columns: true
});
const input = _fs.default.createReadStream(unit.location); // eslint-disable-next-line promise/avoid-new
return new Promise((resolve, reject) => {
parser.on("error", reject);
parser.on("finish", () => resolve(records));
parser.on("readable", () => {
let record; // eslint-disable-next-line no-cond-assign
while (record = parser.read()) {
records.push((0, _fp.merge)(unit, record));
}
});
input.pipe(parser);
});
});
exports.parse = parse;
const parseMany = (0, _fp.curry)((delimiter, units) => (0, _dashp.fold)((memo, unit) => parse(delimiter, unit).then((0, _fp.concat)(memo)), [], units));
exports.parseMany = parseMany;
var _default = {
parse,
parseMany
};
exports.default = _default;
;