40 lines
1.2 KiB
JavaScript
40 lines
1.2 KiB
JavaScript
"use strict";
|
|
|
|
import fs from 'fs';
|
|
|
|
import nexline from 'nexline';
|
|
|
|
import a from '../../Helpers/Ansi.mjs';
|
|
import l from '../../Helpers/Log.mjs';
|
|
import Terrain50 from 'terrain50';
|
|
import { write_safe, end_safe } from '../../Helpers/StreamHelpers.mjs';
|
|
import settings from '../../Bootstrap/settings.mjs';
|
|
|
|
async function process_filename(filepath, stream_out) {
|
|
const stream_in = fs.createReadStream(filepath);
|
|
let i = 0;
|
|
for await(const frame of Terrain50.ParseStream(stream_in, settings.cli.tolerant ? /\s+/ : " ")) {
|
|
const obj = frame.to_json();
|
|
await write_safe(stream_out, JSON.stringify(obj) + "\n");
|
|
i++;
|
|
}
|
|
return i;
|
|
}
|
|
|
|
export default async function(settings) {
|
|
let stream_out = process.stdout;
|
|
if(settings.cli.output !== "-")
|
|
stream_out = fs.createWriteStream(settings.cli.output);
|
|
|
|
if(!(settings.cli.input instanceof Array))
|
|
settings.cli.input = [ settings.cli.input ];
|
|
|
|
let frames = 0;
|
|
for(let filepath of settings.cli.input) {
|
|
l.log(`Processing ${a.hicol}${filepath}${a.reset} from CLI argument`);
|
|
frames += await process_filename(filepath, stream_out);
|
|
}
|
|
|
|
l.log(`${a.hicol}${a.fgreen}Done${a.reset}, serialised ${a.hicol}${a.fgreen}${frames}${a.reset} frames in total`);
|
|
}
|