UNPKG

cesr

Version:

[![NPM Version](https://img.shields.io/npm/v/cesr.svg?style=flat)](https://www.npmjs.com/package/cesr) [![NPM License](https://img.shields.io/npm/l/cesr.svg?style=flat)](https://github.com/lenkan/cesr-js/blob/main/LICENSE)

66 lines (65 loc) 1.82 kB
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)); } } }