@sugarcube/plugin-tika
Version:
Parse files and metadata using Tika.
67 lines (51 loc) • 2.05 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 _core = require("@sugarcube/core");
var _pluginFs = require("@sugarcube/plugin-fs");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const plugin = (envelope, {
cfg,
log
}) => {
const dataDir = (0, _fp.get)("tika.data_dir", cfg);
return (0, _pluginFs.mkdirP)(dataDir).then(() => _core.envelope.fmapDataAsync(unit => {
const medias = unit._sc_media.filter(m => m.type !== "tika_location_text" || m.type !== "tika_location_meta");
if (medias.length === 0) return unit;
const destDir = _path.default.resolve(dataDir, unit._sc_id_hash); // eslint-disable-next-line promise/no-nesting
return Promise.all(medias.map(({
type,
term,
field
}) => {
const name = type === "tika_location_meta" ? "meta.json" : "text";
const out = type === "tika_location_meta" ? JSON.stringify(term) : term;
const target = _path.default.resolve(destDir, field, `${name}`);
log.debug(`Writing ${name} to ${target}.`); // eslint-disable-next-line promise/no-nesting
return (0, _pluginFs.mkdirP)(_path.default.resolve(destDir, field || "")).then(() => _fs.default.writeFileSync(target, out)).then(() => Promise.all([(0, _pluginFs.md5sum)(target), (0, _pluginFs.sha256sum)(target)])).then(([md5, sha256]) => ({
location: target,
md5,
sha256,
type
}));
})).then(downloads => (0, _fp.merge)(unit, {
_sc_downloads: unit._sc_downloads.concat(downloads)
}));
}, envelope));
};
plugin.desc = "Write tika extracted content to disk.";
plugin.argv = {
"tika.data_dir": {
type: "string",
nargs: 1,
default: "./data/tika_location",
desc: "Store all tika files in this location."
}
};
var _default = plugin;
exports.default = _default;