UNPKG

@sugarcube/plugin-csv

Version:
78 lines (62 loc) 2.48 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 = "diff_glob_pattern"; const diffPlugin = (envelope, { cfg, log, stats }) => { const patterns = _core.envelope.queriesByType(querySource, envelope); const delimiter = (0, _fp.get)("csv.delimiter", cfg); const idFields = sToA(",", (0, _fp.get)("csv.id_fields", cfg)); const entity = (0, _fp.merge)(_core.data.emptyOne(), { _sc_id_fields: idFields }); 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(`Diffing data from ${fs.length} files.`)), (0, _parse.parseMany)(delimiter), (0, _dashp.tapP)(xs => log.info(`Diffing ${xs.length} from CSV with ${envelope.data.length} from envelope.`)), xs => { const toDiff = _core.envelope.envelopeData(xs); const added = _core.envelope.difference(envelope, toDiff); const removed = _core.envelope.difference(toDiff, envelope); const shared = _core.envelope.intersection(toDiff, envelope); const strip = (0, _fp.map)(u => (0, _fp.pick)(u._sc_id_fields.concat(["_sc_id_hash"]), u)); const diff = { added: { count: added.data.length, units: strip(added.data) }, removed: { count: removed.data.length, units: strip(removed.data) }, shared: { count: shared.data.length }, meta: { count: toDiff.data.length, pipeline: cfg.plugins.join(",") } }; stats.update("diff", (0, _fp.merge)(diff)); log.info(`${added.data.length} units added.`); log.info(`${removed.data.length} units removed.`); log.info(`${shared.data.length} units shared.`); log.info(`Diffing: ${diff.meta.count}/${envelope.data.length} (${diff.meta.pipeline}).`); return envelope; }], patterns); }; const plugin = _core.plugin.liftManyA2([_assertions.assertIdFields, diffPlugin]); plugin.desc = "Import CSV files and diff with the current envelope."; var _default = plugin; exports.default = _default;