cesr
Version:
[](https://www.npmjs.com/package/cesr) [](https://github.com/lenkan/cesr-js/blob/main/LICENSE)
66 lines (65 loc) • 1.82 kB
JavaScript
import { parseMessages } from "../message.js";
function parseArgs(inputArgs, opts) {
const helpText = [
`Usage: cesr [options] <input>`,
"",
"Parses an input CESR stream.",
"",
"Arguments:",
" <input> The input file to parse. Use '-' for stdin. Can also be a URL.",
"",
"Options:",
...Object.entries(opts).map(([key, value]) => {
return ` ${key} ${value.description}`;
}),
].join("\n");
const args = [];
const options = {};
inputArgs.forEach((arg) => {
if (!arg.startsWith("--")) {
args.push(arg);
return;
}
if (arg.includes("=")) {
const [key, value] = arg.split("=");
options[key] = value;
return;
}
options[arg] = true;
});
return {
_: args,
options,
helpText,
};
}
function formatError(message, help) {
return `Error: ${message}\n\n${help}`;
}
export async function execute(cli) {
const app = parseArgs(cli.args, {
"--help": {
description: "Show help",
},
"--pretty": {
description: "Pretty print the output",
},
});
const input = app.options["--input"] || app._[0];
if (app.options["--help"]) {
console.log(app.helpText);
return;
}
if (typeof input !== "string" || input.length === 0) {
throw new Error(formatError("No input file specified.", app.helpText));
}
const stream = cli.read(input);
for await (const message of parseMessages(stream)) {
if (app.options["--pretty"]) {
console.dir(message, { depth: 100, colors: true });
}
else {
console.log(JSON.stringify(message));
}
}
}