Inicio
SQL a TypeBox

Generador de esquemas TypeScript TypeBox desde SQL DDL

Convierta sentencias SQL CREATE TABLE en esquemas de validación en tiempo de ejecución de @sinclair/typebox utilizando Type.Object, Type.String, Type.Number y Type.Optional.

Presets:
Dialecto SQL:
Estrategia para nulos:
Modo de fecha:
Formato de nombres:
Entrada SQL DDL3 tablas 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>;
Tablas detectadas
3
Columnas procesadas
27
Esquemas TypeBox
14

Procesamiento en el cliente

Procesamiento de alto rendimiento ejecutado íntegramente en la memoria del navegador.

Privacidad sin subida a servidores

Todos los datos permanecen estrictamente locales sin comunicación con servidores externos.

Exportación lista para producción

Formatos de salida limpios y optimizados listos para su integración inmediata en producción.

Referencia técnica y guía de arquitectura

Guía de desarrollo del generador de esquemas TypeBox TypeScript desde DDL SQL — Guía de referencia

Convierta sentencias SQL CREATE TABLE en esquemas de validación en tiempo de ejecución de @sinclair/typebox utilizando Type.Object, Type.String, Type.Number y Type.Optional.

Parámetros clave y controles

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

Selecciona el mapeo de tipos específico de la base de datos para tipos como UUID, JSONB, ENUM, SERIAL y DATETIME.

Por defecto: 'postgres'
Modo de nulabilidadEnum ('optional' | 'union-null' | 'optional-null')

Controla cómo se asignan las columnas sin NOT NULL: Type.Optional(T), Type.Union([T, Type.Null()]) o ambos.

Por defecto: 'optional'
Generar tipos estáticosBoolean

Genera declaraciones de tipo TypeScript complementarias utilizando la utilidad Static<typeof Schema> de TypeBox.

Por defecto: true
Formato de salidaEnum ('standard' | 'fastify' | 'elysia')

Adapta el código generado para validación TypeBox estándar o integración directa con esquemas de Fastify o Elysia.js.

Por defecto: 'standard'

Consejos profesionales y mejores prácticas

Dado que TypeBox genera

Dado que TypeBox genera especificaciones JSON Schema estándar, puede pasar directamente los esquemas Type.Object a rutas de Fastify o Elysia.js para obtener validación ultrarrápida e inferencia estática automática.

Para columnas JSON/JSONB de PostgreSQL

Para columnas JSON/JSONB de PostgreSQL o MySQL, utilice Type.Unknown() o Type.Record(Type.String(), Type.Any()) para admitir estructuras flexibles sin perder la robustez del esquema.

Dado que los números en JavaScript

Dado que los números en JavaScript pierden precisión más allá de 2^53 - 1, para columnas BIGINT o INT8 en APIs REST se recomienda utilizar Type.String({ pattern: '^[0-9]+$' }) o Type.BigInt().

Errores comunes y solución de problemas

Las columnas sin NOT NULL generan campos opcionales inesperados

En SQL DDL, las columnas sin restricción NOT NULL admiten valores nulos por defecto. Si el campo debe estar presente en el cuerpo de la petición admitiendo valor nulo, cambie el modo de nulabilidad a 'union-null' o agregue NOT NULL en su SQL.

Tipos compuestos o extensiones propietarias generan errores al procesar

Extensiones de bases de datos como PostGIS GEOMETRY o HSTORE no reconocidas se asignan por defecto a Type.Unknown(). Sustitúyalas por tipos primitivos estándar de SQL (como TEXT o JSONB) antes de convertir.

Preguntas frecuentes (FAQ)

¿Qué es @sinclair/typebox y por qué convertir sentencias DDL SQL a él?▼

TypeBox es un generador de tipos JSON Schema para TypeScript de alto rendimiento que unifica la validación en tiempo de ejecución con la inferencia de tipos estáticos, resultando ideal para frameworks modernos como Fastify y Elysia.js.

¿Cómo resuelve Static<typeof Schema> los tipos de TypeScript?▼

Mediante tipos condicionales avanzados de TypeScript, la utilidad Static<typeof Schema> infiere automáticamente la interfaz estática equivalente a partir del objeto de esquema JavaScript sin requerir generación adicional de código.

¿Cómo se manejan las claves primarias autoincrementales (SERIAL, AUTO_INCREMENT)?▼

Las columnas enteras autoincrementales se traducen a Type.Integer({ minimum: 1 }). En esquemas destinados a operaciones de inserción (INSERT), pueden envolverse en Type.Optional(), ya que la base de datos asigna el identificador automáticamente.

¿Se transmiten las definiciones SQL o credenciales a algún servidor remoto?▼

No. Todo el análisis del código SQL y la generación de esquemas TypeBox se ejecutan al 100 % en el navegador web del cliente. Sus datos y esquemas nunca salen de su entorno local.

Herramientas y utilidades relacionadas

Todas las herramientas →
Guía para Desarrolladores del Generador de Código cURL a Rust (reqwest y tokio)Desarrollo

Transforma comandos cURL en solicitudes HTTP asíncronas e idiomáticas en Rust utilizando reqwest, serde_json, encabezados personalizados y el runtime de Tokio.

Abrir herramienta→
Guía de desarrollo del generador de código cURL a Ruby (Net::HTTP y Faraday)Desarrollo

Convierte comandos cURL en código Ruby limpio e idiomático utilizando Net::HTTP, URI, Faraday y gestión nativa de JSON.

Abrir herramienta→
Generador de NetworkPolicy de K8S Referencia TécnicaDesarrollo

Guía técnica para generar manifiestos declarativos de NetworkPolicy en Kubernetes, aislamiento zero-trust de pods, reglas de ingress/egress, bloques CIDR y puertos múltiples.

Abrir herramienta→
Guía para Desarrolladores del Generador YAML de Kubernetes RBAC Role y ClusterRoleBindingDesarrollo

Diseñe manifiestos de Kubernetes RBAC para Role, ClusterRole, RoleBinding y ClusterRoleBinding con grupos de API, verbos de recursos y cuentas de servicio.

Abrir herramienta→
Guía del Desarrollador del Generador de YAML de StatefulSet y Headless Service de KubernetesDesarrollo

Genere manifiestos de Kubernetes StatefulSet de nivel de producción con Headless Service, plantillas de volumen persistente (volumeClaimTemplates), réplicas y podManagementPolicy.

Abrir herramienta→
Referencia para Desarrolladores de Nginx Location Match TesterDesarrollo

Guía técnica para probar la coincidencia de bloques location en Nginx y prioridades de modificadores en tiempo real.

Abrir herramienta→