UNPKG

@sugarcube/plugin-csv

Version:
54 lines (42 loc) 1.63 kB
"use strict"; 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;