@sugarcube/plugin-csv
Version:
CSV based input and output for SugarCube.
54 lines (42 loc) • 1.63 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _fp = require("lodash/fp");
var _dashp = require("dashp");
var _core = require("@sugarcube/core");
var _pluginFs = require("@sugarcube/plugin-fs");
var _parse = require("../parse");
var _assertions = require("../assertions");
const {
sToA
} = _core.utils;
const querySource = "glob_pattern";
const importPlugin = (envelope, {
cfg,
log
}) => {
const patterns = _core.envelope.queriesByType(querySource, envelope);
const delimiter = (0, _fp.get)("csv.delimiter", cfg);
const sourceName = (0, _fp.get)("csv.import_source", cfg);
const idFields = sToA(",", (0, _fp.get)("csv.id_fields", cfg));
const entity = (0, _fp.merge)(_core.data.emptyOne(), {
_sc_id_fields: idFields,
_sc_source: sourceName
});
return (0, _dashp.flowP)([// The order of the merge matters, otherwise the id_fields are merged badly.
(0, _dashp.flatmapP)(pattern => (0, _pluginFs.unfold)(pattern).then((0, _fp.map)(u => (0, _fp.merge)(u, entity)))), (0, _dashp.tapP)(fs => log.info(`Parsing data from ${fs.length} files.`)), (0, _parse.parseMany)(delimiter), (0, _dashp.tapP)(xs => log.info(`Parsed ${xs.length} units.`)), xs => _core.envelope.concatData(xs, envelope)], patterns);
};
const plugin = _core.plugin.liftManyA2([_assertions.assertIdFields, importPlugin]);
plugin.desc = "Import data from csv files.";
plugin.argv = {
"csv.import_source": {
type: "string",
default: "csv_import",
nargs: 1,
desc: "Set the _sc_source field."
}
};
var _default = plugin;
exports.default = _default;
;