Verificando sessão…
StudyOpsÍndice do fundamento

CLI para ferramentas / Sessão 4

Briefing de leitura · Sessão 4 de 11

Exemplo guiado em TypeScript

Fundamento
CLI para ferramentas
Registro
Logbook local

Contexto de missão

Exemplo guiado em TypeScript

Esta leitura alimenta o fundamento CLI para ferramentas. Termine com uma evidência pequena antes de avançar.

Contexto
Sessão 4 de 11

O exemplo abaixo é uma adaptação didática para o StudyOps. Ele não copia uma implementação de uma fonte externa; usa o princípio de construir uma ferramenta pequena e exercitável.

type CliOptions = {
  inputPath: string;
  format: "text" | "json";
};

function parseArgs(argv: string[]): CliOptions {
  const [inputPath, formatFlag, formatValue] = argv;

  if (!inputPath) {
    throw new Error("uso: studyops-ingest <arquivo> [--format text|json]");
  }

  if (formatFlag && formatFlag !== "--format") {
    throw new Error(`opção desconhecida: ${formatFlag}`);
  }

  const format = formatValue ?? "text";

  if (format !== "text" && format !== "json") {
    throw new Error(`formato inválido: ${format}`);
  }

  return { inputPath, format };
}

function run(input: string, options: CliOptions): string {
  const lines = input.split(/\r?\n/).filter(Boolean);
  const result = { source: options.inputPath, lineCount: lines.length };

  return options.format === "json"
    ? JSON.stringify(result)
    : `${result.source}: ${result.lineCount} linhas`;
}

O fluxo fica separado em duas responsabilidades:

  • parseArgs transforma texto externo em opções válidas ou falha cedo.
  • run recebe dados já validados e produz uma saída determinística.

Essa separação facilita testar a lógica sem iniciar um processo de terminal. Depois, um pequeno entrypoint pode capturar a exceção, escrever a mensagem em stderr e encerrar com código diferente de zero.

Logbook técnico

Registro de campo desta sessão

Verificando sessão…

O conteúdo continua público. O registro técnico fica disponível após autenticação.