MODELAGEM DE DOMÍNIO · SOBRE TYPEBOX

Modele o domínio.
Mantenha as invariantes.

Seu domínio tem regras.
Dê a elas um lugar para viver.

Um framework TypeScript para propriedades, entidades e casos de uso. Valide na fronteira. Mantenha seu modelo consistente. Escolha sua infraestrutura.

Ver no GitHub
Código aberto. Licença MIT. Seu para construir.
user.tsTypeScript
import { blueprintOf, entityOf } from "@afora/core"; class User extends entityOf(  blueprintOf((ctx) => ({    name: ctx.text,    email: ctx.email,    token: ctx.string,  })),  { unique: ["email"], sensitive: ["token"] },) {} const user = new User({  name: "Ada",  email: "  Ada@Example.com  ",  token: "keep-it-private",}); JSON.stringify(user);// email → "ada@example.com"// token → "********"
Uma definição. Tipos e runtime em sintonia.
INTEGRADO À SUA STACK
BunNode.js ≥ 22Browsers & WorkersTypeBoxStandard Schema V1
DE DENTRO PARA FORA

Pequenas partes. Um modelo coeso.

Comece com um valor. Componha até chegar
ao comportamento da sua aplicação.

03 / Record

Mantém o valor. Rejeita chaves não declaradas em qualquer nível.

class User extends recordOf(UserProps) {}
const user = new User({ name: "Ada", email: "ada@example.com" });
EnvironmentConfiguração validada, disponível onde seu domínio precisa.
REGRAS QUE ACOMPANHAM SEUS DADOS

Deixe o modelo fazer o trabalho.

01 / INVARIANTS
email: ctx.email,
name: ctx.text({ min: 2 }),

Válido por construção

Propriedades validam e normalizam cada valor. Records rejeitam chaves não declaradas, inclusive em objetos aninhados.

02 / SENSITIVE DATA
JSON.stringify(account);
// token: "********"

O privado continua privado

Propriedades sensíveis são mascaradas por toJSON(), em qualquer nível. A serialização respeita as regras do seu modelo.

03 / LAYERED EXCEPTIONS
error.layer; // "use-case"
error.trace; // the path to the failure

Erros que sabem de onde vêm

Cada exceção carrega sua camada e um trace. Acompanhe a falha da fronteira até a propriedade que a causou.

SEU DOMÍNIO, SUA INFRAESTRUTURA

Defina uma vez.
Conecte onde importa.

O framework é o código que você controla e executa. Componha commands e outputs e conecte as ferramentas da sua aplicação.