@_all_docs/cache
Version:
Fetch, cache, & map/reduce :origin/{_all_docs,:packument}` documents for a set of lexographically sorted pivots by range or partition
47 lines (37 loc) • 1.34 kB
JavaScript
const { mapPackuments } = require('../src/map-reduce.js');
const { writeFile } = require('node:fs/promises');
const { join } = require('node:path');
const crypto = require('node:crypto');
function shortId(length) {
return crypto.randomBytes(Math.ceil(length / 2))
.toString('hex')
.slice(0, length);
}
const debug = require('debug')('_all_docs/run-packuments');
const cacheDir = join(__dirname, '..', 'cache');
const packumentsDir = join(cacheDir, 'packuments');
const argv = require('minimist')(process.argv.slice(2));
const { design, exec } = argv;
const designDoc = require(design);
const view = designDoc.views[exec];
const { map, reduce, group } = view;
(async function () {
const sid = shortId(4);
const results = await mapPackuments({
cacheDir: packumentsDir,
mapFn: map,
concurrency: 100
});
debug('write map output |', sid, results.length);
await writeFile(`map-${sid}.json`, JSON.stringify(results, null, 2), 'utf8');
if (reduce) {
const reduced = reduce(results);
debug('write reduce output |', sid);
await writeFile(`reduce-${sid}.json`, JSON.stringify(reduced, null, 2), 'utf8');
}
if (group) {
const groups = group(results);
debug('write group output |', sid);
await writeFile(`groups-${sid}.json`, JSON.stringify(groups, null, 2), 'utf8');
}
})();