SQL para Kysely

Gerador de Interfaces TypeScript Kysely a partir de SQL DDL

Manual técnico e gerador de tipos para converter esquemas DDL de SQL em interfaces TypeScript seguras para Kysely em PostgreSQL, MySQL e SQLite.

Predefinições:
Dialeto de Banco de Dados:
Convenção de Interfaces:
Convenção de Colunas:
SQL CREATE TABLE DDLPostgreSQL
/**
 * Generated by ToolsAA SQL to Kysely TypeGen
 * Target Dialect: POSTGRES
 * Generated Tables: 4
 */

import type { ColumnType, Generated, Insertable, Selectable, Updateable } from 'kysely';


// ==========================================
// Enums & Custom Value Types
// ==========================================
export type UserRole = 'OWNER' | 'ADMIN' | 'MEMBER' | 'BILLING_CONTACT';
export type SubscriptionStatus = 'TRIALING' | 'ACTIVE' | 'PAST_DUE' | 'CANCELED' | 'INCOMPLETE';
export type InvoiceStatus = 'DRAFT' | 'OPEN' | 'PAID' | 'UNCOLLECTIBLE' | 'VOID';

// ==========================================
// Table Interfaces
// ==========================================
export interface OrganizationsTable {
  id: Generated<string>; // PRIMARY KEY | DEFAULT: gen_random_uuid()
  slug: string;
  name: string;
  settings: ColumnType<Record<string, unknown> | null, string | Record<string, unknown> | null, string | Record<string, unknown> | null | undefined>;
  is_active: Generated<boolean>; // DEFAULT: true
  created_at: Generated<Date>; // DEFAULT: CURRENT_TIMESTAMP
  updated_at: Generated<Date>; // DEFAULT: CURRENT_TIMESTAMP
}

export interface UsersTable {
  id: Generated<string>; // PRIMARY KEY | DEFAULT: gen_random_uuid()
  organization_id: string; // FK -> organizations.id
  email: string;
  full_name: string | null;
  role: Generated<UserRole>; // DEFAULT: MEMBER
  avatar_url: string | null;
  last_login_at: Date | null;
  created_at: Generated<Date>; // DEFAULT: CURRENT_TIMESTAMP
}

export interface SubscriptionsTable {
  id: Generated<string>; // PRIMARY KEY | DEFAULT: gen_random_uuid()
  organization_id: string; // FK -> organizations.id
  stripe_customer_id: string;
  stripe_subscription_id: string | null;
  plan_tier: Generated<string>; // DEFAULT: starter
  seat_count: Generated<number>; // DEFAULT: 5
  status: Generated<SubscriptionStatus>; // DEFAULT: TRIALING
  current_period_start: Date;
  current_period_end: Date;
  cancel_at_period_end: Generated<boolean>; // DEFAULT: false
  created_at: Generated<Date>; // DEFAULT: CURRENT_TIMESTAMP
}

export interface InvoicesTable {
  id: Generated<string>; // PRIMARY KEY | DEFAULT: gen_random_uuid()
  organization_id: string; // FK -> organizations.id
  subscription_id: string | null; // FK -> subscriptions.id
  invoice_number: string;
  subtotal_cents: Generated<number>; // DEFAULT: 0
  tax_cents: Generated<number>; // DEFAULT: 0
  total_cents: Generated<number>; // DEFAULT: 0
  currency: Generated<string>; // DEFAULT: USD
  status: Generated<InvoiceStatus>; // DEFAULT: OPEN
  paid_at: Date | null;
  line_items: ColumnType<Record<string, unknown>, string | Record<string, unknown>, string | Record<string, unknown> | undefined>;
  created_at: Generated<Date>; // DEFAULT: CURRENT_TIMESTAMP
}

// ==========================================
// Master Database Interface
// ==========================================
export interface Database {
  organizations: OrganizationsTable;
  users: UsersTable;
  subscriptions: SubscriptionsTable;
  invoices: InvoicesTable;
}

// ==========================================
// Convenience Entity Models (Select / Insert / Update)
// ==========================================
export type Organization = Selectable<OrganizationsTable>;
export type NewOrganization = Insertable<OrganizationsTable>;
export type OrganizationUpdate = Updateable<OrganizationsTable>;

export type User = Selectable<UsersTable>;
export type NewUser = Insertable<UsersTable>;
export type UserUpdate = Updateable<UsersTable>;

export type Subscription = Selectable<SubscriptionsTable>;
export type NewSubscription = Insertable<SubscriptionsTable>;
export type SubscriptionUpdate = Updateable<SubscriptionsTable>;

export type Invoic = Selectable<InvoicesTable>;
export type NewInvoic = Insertable<InvoicesTable>;
export type InvoicUpdate = Updateable<InvoicesTable>;
Tabelas Mapeadas4Entidades independentes
Colunas Convertidas38Atributos com tipagem
Relações e ChavesPostgreSQL
4Restrições de chave primária e estrangeira

Privacidade Local Sem Uploads

Todo o processamento SQL e a síntese de tipos TypeScript são executados 100% no seu navegador. Os dados da sua estrutura nunca saem do seu computador.

Precisão e Tipagem Kysely

Mapeamento rigoroso de tipos SQL para TypeScript, envolvendo chaves autoincrementadas e defaults em Generated<T> e colunas complexas em ColumnType.

Selectable, Insertable e Updateable

Produz a interface raiz Database e os tipos auxiliares Selectable<T>, Insertable<T> e Updateable<T> prontos para usar com o query builder Kysely.

Referência técnica e guia de arquitetura

Referência de Desenvolvedor Sql To Kysely — Guia de referência

Manual técnico e gerador de tipos para converter esquemas DDL de SQL em interfaces TypeScript seguras para Kysely em PostgreSQL, MySQL e SQLite.

Parâmetros principais e controles

dialect'postgres' | 'mysql' | 'sqlite'

Mecanismo de banco de dados SQL de destino que controla o mapeamento de tipos de dados específicos do dialeto e restrições.

Padrão: 'postgres'
variableCasing'pascal' | 'snake' | 'raw'

Estratégia de nomenclatura aplicada às interfaces de tabela TypeScript geradas e tipos de modelo exportados.

Padrão: 'pascal'
columnCasing'raw' | 'camel'

Estratégia de transformação dos nomes das colunas para compatibilidade com o esquema SQL nativo ou o CamelCasePlugin do Kysely.

Padrão: 'raw'
outputTab'schema' | 'multifile' | 'relations' | 'config'

Estrutura do código gerado: arquivo único database.ts, exportação modular multi-arquivo, tipos de relacionamentos ou configuração do cliente.

Padrão: 'schema'

Dicas profissionais e melhores práticas

Uso de Generated em Chaves PK

Mapeie colunas auto-incrementais, seriais e com valores padrão para Generated<T> ou ColumnType<Select, Insert, Update> do Kysely. Isso assegura que o TypeScript exija os campos em consultas SELECT, mas os torne opcionais em operações de INSERT.

Suporte ao Plugin CamelCase

Ao definir columnCasing como 'camel', inicialize o cliente com new Kysely({ plugins: [new CamelCasePlugin()] }). Sem o plugin em tempo de execução, o Kysely enviará nomes camelCase diretamente ao banco SQL, causando falhas de coluna inexistente.

Tipagem Estrita de JSONB

Em colunas PostgreSQL JSONB ou MySQL JSON geradas como unknown, especifique tipos de DTO customizados usando ColumnType<UserMeta, string | UserMeta, string | UserMeta> para manter validação estrutural rígida em consultas e mutações.

Problemas comuns e solução de problemas

PostgreSQL TIMESTAMPTZ é serializado como string em vez de objeto Date em consultas de runtime

O Kysely reflete o comportamento do driver de conexão. Configure pg.types.setTypeParser(1184, (val) => new Date(val)) ou tipifique a coluna como ColumnType<Date, string | Date, string | Date> para suportar objetos Date no SELECT e strings ISO no INSERT.

Erro 'column does not exist' em tempo de execução ao consultar com columnCasing definido como camel

Se columnCasing estiver como camel, o Kysely gera chaves em camelCase. É obrigatório registrar o CamelCasePlugin ao instanciar o cliente Kysely (new Kysely({ plugins: [new CamelCasePlugin()] })), caso contrário as consultas enviarão nomes camelCase diretamente para a engine SQL.

Perguntas frequentes (FAQ)

O Sql To Kysely transmite esquemas SQL proprietários ou definições de tabelas para servidores externos?▼

Não. Todo o parsing de SQL, percurso de AST, análise de dialeto e geração de interfaces TypeScript são executados estritamente na memória do navegador do lado do cliente. Nenhuma instrução DDL ou metadados de esquema são transmitidos via rede.

Como chaves primárias compostas são estruturadas na saída TypeScript gerada?▼

Chaves primárias compostas são identificadas a partir de restrições PRIMARY KEY de múltiplas colunas e mapeadas como propriedades não nulas na interface da tabela. O Kysely suporta filtros compostos diretamente via db.selectFrom('table').where((eb) => eb.and([...])).

Como o gerador trata tipos ENUM customizados do PostgreSQL e restrições CHECK inline?▼

Instruções CREATE TYPE ... AS ENUM do PostgreSQL são convertidas em uniões de strings exportadas no TypeScript (ex.: export type UserRole = 'admin' | 'user'). Restrições CHECK inline contendo listas de valores também são mapeadas como uniões literais estritas.

Quais são as diferenças arquiteturais entre os modos de exportação schema e multifile?▼

O modo schema consolida todas as interfaces de tabelas e a interface central Database em um único arquivo database.ts, ideal para projetos menores. O modo multifile divide cada entidade em seu próprio módulo no diretório tables/ e as reexporta no index.ts, evitando conflitos de merge em equipes grandes.

Ferramentas e utilitários relacionados

Todas as ferramentas →
Guia do Desenvolvedor do Gerador de Entidades MikroORM TypeScript a partir de SQL DDLDesenvolvimento

Converta instruções SQL CREATE TABLE em classes de entidade MikroORM com decoradores @Entity, @PrimaryKey, @Property, @Index e relações.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Esquemas Mongoose e Modelos TypeScript a partir de JSONDesenvolvimento

Infira e gere esquemas MongoDB Mongoose, interfaces Document de TypeScript, subdocumentos aninhados, timestamps e exportações de modelos a partir de JSON.

Abrir ferramenta→
Guia do Desenvolvedor do Gerador de Esquemas de Validação Yup a partir de JSONDesenvolvimento

Converta amostras JSON em esquemas de validação de objetos Yup com segurança de tipos, yup.string(), yup.number(), yup.array() e regras obrigatórias.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Esquemas de Validação Joi a partir de JSONDesenvolvimento

Converta estruturas de dados JSON em esquemas de validação Joi robustos com restrições Joi.object(), Joi.string(), Joi.number() e Joi.array().

Abrir ferramenta→
Guia do Desenvolvedor do Conversor de JSON para Esquema Apache Avro (.avsc)Desenvolvimento

Converta payloads JSON em esquemas Apache Avro (.avsc) para produção com namespaces personalizados, tipos primitivos e lógicos, campos union anuláveis e regras de compatibilidade.

Abrir ferramenta→
Guia do Desenvolvedor: Gerador de Esquemas de Validação Zod a partir de GraphQL SDLDesenvolvimento

Converta tipos, consultas e entradas GraphQL SDL em esquemas de validação Zod para tempo de execução (z.object, z.string, z.array) com gestão precisa de nulabilidade.

Abrir ferramenta→