Pular para o conteúdo principal

Tools

O TyForge fornece um conjunto de utilitários genéricos reutilizáveis em todo o framework e projetos consumidores. Cada ferramenta resolve um problema específico sem depender de domínio ou framework.

Ferramentas disponíveis

TypeGuard

Classe estática para verificação e narrowing de tipos em tempo de execução. Todos os métodos retornam Result<T, ExceptionValidation> ou type guards nativos do TypeScript.

Regra fundamental: nunca use typeof manualmente no projeto. Toda verificação de tipo primitivo deve passar pelo TypeGuard.

import { TypeGuard } from "tyforge";

const result = TypeGuard.isString(value, "fieldName", 1, 255);
if (result.success) {
// result.value é a string já com trim
}

Documentação completa do TypeGuard

ToolObjectTransform

Utilitário para achatar e desachatar objetos aninhados. Usado internamente pela configuração (async loadTyForgeConfig) e pelo linter para validar configs com chaves compostas como schema.validate.create.

import { ToolObjectTransform } from "tyforge";

const obj = { schema: { validate: { create: "full" } } };
const flat = ToolObjectTransform.flatten(obj);
// Map { "schema.validate.create" => "full" }

const restored = ToolObjectTransform.unflatten(flat);
// { schema: { validate: { create: "full" } } }

Métodos:

MétodoAssinaturaDescrição
flatten(obj, prefix?) => Map<string, unknown>Achata objeto aninhado em um Map com chaves compostas por .
unflatten(flat) => Record<string, unknown>Reconstrói objeto aninhado a partir de um Map achatado

O unflatten possui proteção contra chaves perigosas (__proto__, constructor, prototype), ignorando-as silenciosamente.

ToolCliParser

Parser leve de argumentos de linha de comando. Não depende de bibliotecas externas.

import { ToolCliParser } from "tyforge";

const cli = new ToolCliParser(process.argv.slice(2));

cli.hasFlag("--fix"); // boolean
cli.getFlagValue("--format"); // string | undefined
cli.getPositionalArgs(); // string[]

Métodos:

MétodoRetornoDescrição
hasFlag(name)booleanVerifica se a flag existe nos argumentos
getFlagValue(name)string | undefinedRetorna o valor do próximo argumento após a flag
getPositionalArgs()string[]Retorna argumentos que não são flags nem valores de flags

ToolFileDiscovery

Descoberta recursiva de arquivos por extensão ou caminhos específicos. Ignora node_modules e .git automaticamente.

import { ToolFileDiscovery } from "tyforge";

const discovery = new ToolFileDiscovery("src", ["**/__tests__/**"]);

const allTs = discovery.findByExtension(".ts");
const specific = discovery.findByPaths(["src/tools", "src/lint"], ".ts");

Métodos:

MétodoRetornoDescrição
findByExtension(ext)string[]Busca recursiva por extensão no diretório raiz
findByPaths(paths, ext)string[]Busca em caminhos específicos (arquivos ou diretórios)

O construtor aceita um array de padrões glob para exclusão (ex: ["**/node_modules/**"]).

ToolGit

Utilitário para operações Git simples, usado pelo linter no modo --staged.

import { ToolGit } from "tyforge";

const staged = ToolGit.getStagedFiles(".ts");
// Retorna array de caminhos de arquivos .ts staged no git

Métodos:

MétodoRetornoDescrição
getStagedFiles(ext?)string[]Lista arquivos staged (Added, Copied, Modified) filtrados por extensão

Usa git diff --cached --name-only --diff-filter=ACM internamente. Retorna array vazio se o comando falhar (ex: diretório não é um repositório git).

ToolHeaderSecurity

Sanitização de headers HTTP contra CRLF injection e prototype pollution.

import { ToolHeaderSecurity } from "tyforge";

const sanitized = ToolHeaderSecurity.sanitizeHeaders({
"Authorization": "Bearer token",
"X-Custom\r\nInjected": "value",
});
// Remove caracteres CRLF e null bytes dos headers
// Rejeita keys __proto__, constructor, prototype

ToolNetworkSecurity

Resolução DNS e validação contra ranges de IP privados para prevenção de SSRF.

import { ToolNetworkSecurity } from "tyforge";

ToolNetworkSecurity.isPrivateIp("10.0.0.1"); // true
ToolNetworkSecurity.isPrivateIp("169.254.169.254"); // true (cloud metadata)
ToolNetworkSecurity.isPrivateIp("::ffff:10.0.0.1"); // true (IPv4-mapped IPv6)

const result = await ToolNetworkSecurity.resolveAndValidate("api.example.com");
// { valid: true, ip: "203.0.113.1" }

Disponível via subpath tyforge/tools/network-security (Node.js only). Consumidores podem usar em override de validateEndpointDns() para adicionar proteção contra DNS rebinding.

Próximos passos

  • TypeGuard — referência completa de todos os métodos de verificação de tipo