Início
SQL para TypeBox

Gerador de Esquemas TypeScript TypeBox a partir de SQL DDL

Converta instruções SQL CREATE TABLE em esquemas de validação em tempo de execução @sinclair/typebox usando Type.Object, Type.String, Type.Number e Type.Optional.

Presets:
Dialeto SQL:
Estratégia de nulos:
Modo de data:
Formato de texto:
Entrada SQL DDL3 tabelas detectadas
import { Type, Static } from '@sinclair/typebox';

UserRole {
  SUPERADMIN = 'SUPERADMIN',
  ORG_ADMIN = 'ORG_ADMIN',
  MEMBER = 'MEMBER',
  BILLING = 'BILLING',
  GUEST = 'GUEST',
}
UserRoleSchema = Type.Enum(UserRole);
UserRoleType = Static<typeof UserRoleSchema>;

SubscriptionStatus {
  TRIALING = 'TRIALING',
  ACTIVE = 'ACTIVE',
  PAST_DUE = 'PAST_DUE',
  CANCELED = 'CANCELED',
}
SubscriptionStatusSchema = Type.Enum(SubscriptionStatus);
SubscriptionStatusType = Static<typeof SubscriptionStatusSchema>;

/**
 * TypeBox Schema for SQL table "organizations"
 * Primary Key: [id]
 */
OrganizationSchema = Type.Object({
  id: Type.String({ format: 'uuid' }),
  slug: Type.String({ maxLength: 64 }),
  name: Type.String({ maxLength: 255 }),
  billingEmail: Type.String({ format: 'email', maxLength: 255 }),
  status: SubscriptionStatusSchema,
  settings: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
  isActive: Type.Boolean({ default: true }),
  createdAt: Type.String({ format: 'date-time' }),
  updatedAt: Type.String({ format: 'date-time' }),
}, { additionalProperties: false });
Organization = Static<typeof OrganizationSchema>;

/**
 * TypeBox Schema for SQL table "users"
 * Primary Key: [id]
 */
UserSchema = Type.Object({
  id: Type.String({ format: 'uuid' }),
  organizationId: Type.String({ format: 'uuid' }),
  email: Type.String({ format: 'email', maxLength: 255 }),
  fullName: Type.Optional(Type.String({ maxLength: 120 })),
  avatarUrl: Type.Optional(Type.String({ format: 'uri', maxLength: 500 })),
  role: UserRoleSchema,
  phoneNumber: Type.Optional(Type.String({ maxLength: 32 })),
  isVerified: Type.Boolean({ default: false }),
  lastLoginAt: Type.Optional(Type.String({ format: 'date-time' })),
  createdAt: Type.String({ format: 'date-time' }),
}, { additionalProperties: false });
User = Static<typeof UserSchema>;

/**
 * TypeBox Schema for SQL table "audit_logs"
 * Primary Key: [id]
 */
AuditLogSchema = Type.Object({
  id: Type.Integer({ minimum: 0 }),
  organizationId: Type.String({ format: 'uuid' }),
  actorId: Type.Optional(Type.String({ format: 'uuid' })),
  eventName: Type.String({ maxLength: 100 }),
  ipAddress: Type.Optional(Type.String({ format: 'ipv4' })),
  userAgent: Type.Optional(Type.String({ maxLength: 500 })),
  payload: Type.Optional(Type.Record(Type.String(), Type.Unknown())),
  createdAt: Type.String({ format: 'date-time' }),
}, { additionalProperties: false });
AuditLog = Static<typeof AuditLogSchema>;
Tabelas detectadas
3
Colunas processadas
27
Esquemas TypeBox
14

Processamento no cliente

Processamento de alto desempenho executado inteiramente na memória do navegador.

Privacidade sem envio a servidores

Todas as cargas de dados permanecem estritamente locais, sem comunicação com servidores externos.

Exportação pronta para produção

Formatos de saída limpos e otimizados, prontos para implantação imediata em produção.

Referência técnica e guia de arquitetura

Guia do Desenvolvedor: Gerador de Schemas TypeScript TypeBox a partir de DDL SQL — Guia de referência

Converta instruções SQL CREATE TABLE em esquemas de validação em tempo de execução @sinclair/typebox usando Type.Object, Type.String, Type.Number e Type.Optional.

Parâmetros principais e controles

Dialeto SQLEnum ('postgres' | 'mysql' | 'sqlite' | 'generic')

Seleciona o mapeamento de tipos específico do banco de dados para tipos como UUID, JSONB, ENUM, SERIAL e DATETIME.

Padrão: 'postgres'
Modo de NulabilidadeEnum ('optional' | 'union-null' | 'optional-null')

Controla como colunas anuláveis sem NOT NULL são mapeadas: Type.Optional(T), Type.Union([T, Type.Null()]) ou ambos.

Padrão: 'optional'
Gerar Tipos EstáticosBoolean

Gera declarações de tipo TypeScript complementares usando o utilitário Static<typeof Schema> do TypeBox.

Padrão: true
Formato de SaídaEnum ('standard' | 'fastify' | 'elysia')

Ajusta o código gerado para validação TypeBox padrão ou integração direta em rotas do Fastify ou Elysia.js.

Padrão: 'standard'

Dicas profissionais e melhores práticas

Como o TypeBox compila diretamente

Como o TypeBox compila diretamente para a especificação JSON Schema, você pode injetar os esquemas Type.Object nas rotas do Fastify ou Elysia.js, obtendo validação de alta performance e tipagem estática automática.

Para colunas JSON/JSONB no PostgreSQL

Para colunas JSON/JSONB no PostgreSQL ou MySQL, utilize Type.Unknown() ou Type.Record(Type.String(), Type.Any()) para garantir segurança estrutural sem comprometer a flexibilidade dos dados.

Em JavaScript

Em JavaScript, números acima de 2^53 - 1 perdem precisão. Para colunas BIGINT ou INT8 em APIs REST, recomenda-se gerar Type.String({ pattern: '^[0-9]+$' }) ou Type.BigInt() para evitar truncamentos.

Problemas comuns e solução de problemas

Colunas sem NOT NULL geram campos opcionais inesperados

No SQL DDL, colunas sem a cláusula explícita NOT NULL aceitam valores nulos por padrão. Se o atributo deve estar presente na carga útil admitindo null, altere o modo de nulabilidade para 'union-null' ou adicione NOT NULL no SQL.

Falha ao processar extensões proprietárias ou tipos compostos

Tipos específicos de bancos como PostGIS GEOMETRY ou HSTORE são mapeados para Type.Unknown(). Substitua-os por tipos primitivos padrão (como TEXT, JSONB ou BYTEA) antes da conversão.

Perguntas frequentes (FAQ)

O que é o @sinclair/typebox e por que converter DDL SQL para ele?▼

O TypeBox é um construtor de esquemas JSON Schema de alta performance para TypeScript que combina validação em tempo de execução com inferência de tipos estáticos, sendo a escolha ideal para frameworks como Fastify e Elysia.js.

Como o Static<typeof Schema> deriva tipos TypeScript em tempo de compilação?▼

Utilizando tipos condicionais avançados do TypeScript, o utilitário Static<typeof Schema> extrai a tipagem estática equivalente a partir do objeto JavaScript do esquema sem necessidade de gerar arquivos duplicados.

Como chaves primárias autoincrementais (SERIAL, AUTO_INCREMENT) são tratadas?▼

O gerador converte inteiros autoincrementais para Type.Integer({ minimum: 1 }). Em esquemas para operações de inserção (INSERT), esses campos podem ser envolvidos com Type.Optional(), pois o banco gera os identificadores.

Os esquemas SQL ou definições de tabelas são enviados para algum servidor?▼

Não. Todo o processamento sintático do SQL e a geração de código TypeBox ocorrem 100% no navegador do usuário, garantindo total privacidade e conformidade de segurança.

Ferramentas e utilitários relacionados

Todas as ferramentas →
Guia do Desenvolvedor do Gerador de Código cURL para Rust (reqwest e tokio)Desenvolvimento

Converta comandos cURL em requisições HTTP idiomáticas e assíncronas em Rust utilizando reqwest, serde_json, cabeçalhos customizados e runtime Tokio.

Abrir ferramenta→
Guia do Desenvolvedor do Gerador de Código cURL para Ruby (Net::HTTP e Faraday)Desenvolvimento

Converta comandos cURL em código Ruby limpo e idiomático utilizando Net::HTTP, URI, Faraday e manipulação nativa de JSON.

Abrir ferramenta→
Gerador de NetworkPolicy K8S Referência para DesenvolvedoresDesenvolvimento

Referência de engenharia para gerar manifestos declarativos de NetworkPolicy no Kubernetes, isolamento zero-trust de pods, regras de ingress/egress, blocos CIDR e múltiplas portas.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de YAML Kubernetes RBAC Role & ClusterRoleBindingDesenvolvimento

Crie manifestos Kubernetes RBAC para Role, ClusterRole, RoleBinding e ClusterRoleBinding com grupos de API, verbos de recursos e contas de serviço.

Abrir ferramenta→
Guia do Desenvolvedor do Gerador de YAML de Kubernetes StatefulSet & Headless ServiceDesenvolvimento

Gere manifestos de Kubernetes StatefulSet prontos para produção com Headless Service complementar, volumeClaimTemplates persistentes, réplicas e podManagementPolicy.

Abrir ferramenta→
Referência de Desenvolvedor para Nginx Location Match TesterDesenvolvimento

Guia técnico para teste de correspondência de blocos location no Nginx e avaliação de precedência de modificadores.

Abrir ferramenta→