mirror of
https://github.com/sbrl/terrain50-cli.git
synced 2024-07-01 11:14:54 +00:00
49 lines
1.2 KiB
JavaScript
49 lines
1.2 KiB
JavaScript
|
"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';
|
||
|
|
||
|
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 count = settings.cli.count,
|
||
|
offset = settings.cli.offset;
|
||
|
|
||
|
// ------------------------------------------------------------------------
|
||
|
|
||
|
let i = -1;
|
||
|
for await(let next of Terrain50.ParseStream(stream_in)) {
|
||
|
i++;
|
||
|
|
||
|
if(i < offset) continue;
|
||
|
|
||
|
let is_last = i - offset >= count;
|
||
|
await next.serialise(stream_out, is_last);
|
||
|
|
||
|
let percentage = percentage(i - offset, count);
|
||
|
process.stderr.write(`Written ${i - offset} / count objects (~${count.toFixed(2)}%) \r`);
|
||
|
}
|
||
|
l.log(`Slicing complete`);
|
||
|
}
|