This repository has been archived by the owner on Jan 14, 2020. It is now read-only.
/
randwiches.js
executable file
·68 lines (56 loc) · 1.62 KB
/
randwiches.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/env node
const argv = require('optimist').argv;
const phrases = require('../lib/phrases');
const iteratorStream = require('iterator-stream');
const fs = require('fs');
const pathutil = require('path');
const util = require('util');
function log() {
const args = [].slice.call(arguments);
const str = util.format.apply(util, args);
process.stderr.write(str + '\n');
}
function usage(err) {
if (err) log('\nError:', err, '\n');
log('%s -n <count> [files-to-exclude, ...]', argv.$0);
log(' Prints a bunch of random phrases to stdout.');
log(' If given files, will avoid any phrases that appear in those files');
process.exit(1);
}
function fileToArray(file) {
return (fs.readFileSync(pathutil.join(process.cwd(), file))
.toString()
.trim()
.split('\n'));
}
function inArrayFilter(array) {
return function (v) {
if (array.indexOf(v) > -1) log('DUPLICATE:', v);
return array.indexOf(v) == -1;
};
}
function main() {
const count = argv.n || argv.count
const excludeFiles = argv._;
var exclude = [];
if (!count)
return usage('requires -n');
log('generating', count, 'phrases');
var filter = function (x) { return true };
if (excludeFiles.length) {
log('excluding', excludeFiles);
exclude = (excludeFiles
.map(fileToArray)
.reduce(function (exclude, phrases) {
return exclude.concat(phrases);
}, exclude));
}
iteratorStream(phrases.iterator, {
transform: function (v) { return v.join('-') },
filter: inArrayFilter(exclude),
take: count,
separator: '\n',
method: 'random'
}).pipe(process.stdout);
}
if (!module.parent) main();