#!/usr/bin/env node import {EOL} from "os"; import {basename, dirname, resolve} from "path"; import {readFileSync} from "fs"; import {fileURLToPath} from "url"; import rw from "rw"; import {program} from "commander"; import iconv from "iconv-lite"; import {dsvFormat} from "../src/index.js"; const progname = basename(process.argv[1]); const defaultOutDelimiter = progname.slice(-3) === "tsv" ? "\t" : ","; const options = program .version(JSON.parse(readFileSync(resolve(dirname(fileURLToPath(import.meta.url)), "../package.json"))).version) .usage("[options] [file]") .option("-o, --out ", "output file name; defaults to “-” for stdout", "-") .option("-w, --output-delimiter ", "output delimiter character", defaultOutDelimiter) .option("-n, --newline-delimited", "accept newline-delimited JSON") .option("--input-encoding ", "input character encoding; defaults to “utf8”", "utf8") .option("--output-encoding ", "output character encoding; defaults to “utf8”", "utf8") .parse(process.argv) .opts(); const outFormat = dsvFormat(options.outputDelimiter); rw.dash.readFile(program.args[0] || "-", (error, text) => { if (error) throw error; text = iconv.decode(text, options.inputEncoding); rw.dash.writeFile(options.out, iconv.encode(outFormat.format(options.newlineDelimited ? text.trim().split(/\r?\n/g).map((line) => JSON.parse(line)) : JSON.parse(text)) + EOL, options.outputEncoding), (error) => { if (error) throw error; }); });