2020-09-28 16:55:03 +00:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
import fs from 'fs';
|
|
|
|
|
|
|
|
import Terrain50 from 'terrain50';
|
|
|
|
|
|
|
|
import a from '../../Helpers/Ansi.mjs';
|
|
|
|
import l from '../../Helpers/Log.mjs';
|
|
|
|
|
|
|
|
import { percentage } from '../../Helpers/MathsHelpers.mjs';
|
|
|
|
import { write_safe, end_safe } from '../../Helpers/StreamHelpers.mjs';
|
|
|
|
|
|
|
|
export default async function(settings) {
|
|
|
|
// 1: Parse settings
|
|
|
|
let stream_in = process.stdin;
|
|
|
|
if(settings.cli.input !== "-") {
|
|
|
|
l.log(`Reading from ${a.hicol}${settings.cli.input}${a.reset}`);
|
|
|
|
stream_in = fs.createReadStream(settings.cli.input);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
l.log(`Reading from stdin`);
|
|
|
|
|
|
|
|
let stream_out = process.stdout;
|
|
|
|
if(settings.cli.output !== "-") {
|
|
|
|
l.log(`Writing to ${a.hicol}${settings.cli.output}${a.reset}`);
|
|
|
|
stream_out = fs.createWriteStream(settings.cli.output);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
l.log(`Writing to stdout`);
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
|
|
|
|
|
|
let result_map = await Terrain50.AnalyseFrequencies(
|
2021-01-15 17:06:42 +00:00
|
|
|
Terrain50.ParseStream(stream_in, settings.cli.tolerant ? /\s+/ : " "),
|
2020-09-28 17:02:55 +00:00
|
|
|
settings.cli.ignore_nodata,
|
|
|
|
settings.cli.quiet
|
2020-09-28 16:55:03 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
let result_arr = [];
|
|
|
|
for(const [ key, value ] of result_map) {
|
|
|
|
result_arr.push([ key, value ]);
|
|
|
|
}
|
|
|
|
result_arr.sort((a, b) => a[0] - b[0]);
|
|
|
|
|
|
|
|
for(const [ key, value ] of result_arr) {
|
|
|
|
await write_safe(stream_out, `${key} ${value}\n`);
|
|
|
|
}
|
|
|
|
await end_safe(stream_out);
|
|
|
|
|
|
|
|
stream_in.destroy();
|
|
|
|
}
|