82 lines
2.2 KiB
JavaScript
82 lines
2.2 KiB
JavaScript
"use strict";
|
|
|
|
import fs from 'fs';
|
|
|
|
import a from '../../Helpers/Ansi.mjs';
|
|
import Terrain50 from 'terrain50';
|
|
|
|
function summarise_obj(obj) {
|
|
console.log(`Format: ASC`);
|
|
console.log(`Claimed size: ${obj.meta.ncols}x${obj.meta.nrows}`);
|
|
console.log(`Actual size: ${obj.data[0].length}x${obj.data.length}`);
|
|
console.log(`Lower-left corner: (${obj.meta.xllcorner}, ${obj.meta.yllcorner})`);
|
|
console.log(`Cell size: ${obj.meta.cellsize}`);
|
|
if(typeof obj.meta.NODATA_value !== "undefined")
|
|
console.log(`NODATA value: ${obj.meta.NODATA_value}`);
|
|
console.log(`Metadata keys: ${Object.keys(obj.meta).join(", ")}`);
|
|
}
|
|
|
|
export default async function(settings) {
|
|
let iterator = null;
|
|
switch(settings.cli.mode) {
|
|
case "single":
|
|
let obj = Terrain50.Parse(
|
|
settings.cli.input == "-"
|
|
? fs.readFileSync(0, "utf-8")
|
|
: await fs.promises.readFile(settings.cli.input, "utf-8")
|
|
);
|
|
summarise_obj(obj);
|
|
break;
|
|
|
|
case "stream":
|
|
let stream = process.stdin;
|
|
if(settings.cli.input !== "-")
|
|
stream = fs.createReadStream(settings.cli.input, "utf-8");
|
|
|
|
let i = 0;
|
|
for await(let next of Terrain50.ParseStream(stream)) {
|
|
process.stderr.write(`${a.fgreen}>>>>> ${a.hicol}`);
|
|
process.stdout.write(`Item ${i}`);
|
|
process.stderr.write(`${a.reset}${a.fgreen} <<<<<${a.reset}`);
|
|
console.log();
|
|
summarise_obj(next);
|
|
|
|
i++;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
console.error(`Error: Unknown mode ${settings.cli.mode} (possible modes: single, stream)`);
|
|
process.exit(1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Displays the errors returned by a Terrain50 validation function.
|
|
* (e.g. `Terrain50.Validate(str)`, or `obj.validate()`)
|
|
* @param {[type]} errors [description]
|
|
* @return {[type]} [description]
|
|
*/
|
|
function display_errors(errors) {
|
|
if(errors.length > 0) {
|
|
for(let error of errors) {
|
|
switch(error.level) {
|
|
case "warning":
|
|
console.log(`${a.fyellow}${a.hicol}${error}${a.reset}`);
|
|
break;
|
|
case "error":
|
|
console.log(`${a.fred}${a.hicol}${error}${a.reset}`);
|
|
break;
|
|
default:
|
|
console.log(error);
|
|
break;
|
|
}
|
|
}
|
|
process.exit(1);
|
|
}
|
|
else {
|
|
console.log(`${a.fgreen}Validation completed successfully - no issues detected :D${a.reset}`);
|
|
}
|
|
}
|