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.
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.
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 → "********"Comece com um valor. Componha até chegar
ao comportamento da sua aplicação.
class User extends recordOf(UserProps) {}
const user = new User({ name: "Ada", email: "ada@example.com" });email: ctx.email,
name: ctx.text({ min: 2 }),Propriedades validam e normalizam cada valor. Records rejeitam chaves não declaradas, inclusive em objetos aninhados.
JSON.stringify(account);
// token: "********"Propriedades sensíveis são mascaradas por toJSON(), em qualquer nível. A serialização respeita as regras do seu modelo.
error.layer; // "use-case"
error.trace; // the path to the failureCada exceção carrega sua camada e um trace. Acompanhe a falha da fronteira até a propriedade que a causou.
O framework é o código que você controla e executa. Componha commands e outputs e conecte as ferramentas da sua aplicação.