OmniRoute/bin/cli/program.mjs
Diego Rodrigues de Sa e Souza 79d03575ee
feat(cli): suporte i18n completo — 42 locales, --lang flag, config lang get/set/list (#2285)
feat(cli): suporte i18n completo — 42 locales, --lang flag, config lang get/set/list

- 42 locale files in bin/cli/locales/ (en + pt-BR fully translated, 29 with common/program, 11 scaffolds)
- --lang <code> global flag for per-execution override
- config lang get/set/list subcommands
- Locale persistence via ~/.omniroute/.env
- Path traversal protection via regex validation in normalize()
- Script generate-locales.mjs for scaffolding new locales
- Unit tests for lang commands + normalization security

Integrated into release/v3.8.0
2026-05-15 13:14:14 -03:00

40 lines
1.5 KiB
JavaScript

import { Command, Option } from "commander";
import { readFileSync } from "node:fs";
import { join, dirname } from "node:path";
import { fileURLToPath } from "node:url";
import { registerCommands } from "./commands/registry.mjs";
import { t } from "./i18n.mjs";
const __dirname = dirname(fileURLToPath(import.meta.url));
const pkg = JSON.parse(readFileSync(join(__dirname, "..", "..", "package.json"), "utf8"));
export function createProgram() {
const program = new Command();
program
.name("omniroute")
.description(t("program.description"))
.version(pkg.version, "-v, --version", t("program.version"))
.addOption(
new Option("--output <format>", t("program.output"))
.choices(["table", "json", "jsonl", "csv"])
.default("table")
)
.addOption(new Option("-q, --quiet", t("program.quiet")))
.addOption(new Option("--no-color", t("program.no_color")))
.addOption(new Option("--timeout <ms>", t("program.timeout")).default("30000"))
.addOption(new Option("--api-key <key>", t("program.api_key")).env("OMNIROUTE_API_KEY"))
.addOption(new Option("--base-url <url>", t("program.base_url")).env("OMNIROUTE_BASE_URL"))
.addOption(
new Option(
"--context <name>",
t("program.context") || "Server context/profile to use for this command"
).env("OMNIROUTE_CONTEXT")
)
.addOption(new Option("--lang <code>", t("program.lang")))
.showHelpAfterError(true)
.exitOverride();
registerCommands(program);
return program;
}