Schema como Código
A Ideia Central
Seção intitulada “A Ideia Central”No Rebase, suas definições de coleção TypeScript são a única fonte de verdade. A partir de um conjunto de objetos TypeScript, o Rebase gera:
- Tabelas PostgreSQL via geração de schema Drizzle ORM
- UI CRUD — formulários, tabelas, validação, tipos de campo
- Endpoints da API REST com filtragem, ordenação e paginação
- SDK Cliente — operações de dados com segurança de tipo
- Políticas RLS — Segurança em Nível de Linha no Postgres
Isso significa que seu schema é:
- Controlado por versão — cada alteração é um commit git
- Com segurança de tipo — TypeScript detecta erros em tempo de compilação
- Revisável — as alterações de schema passam por pull requests
- Portátil — a mesma definição funciona no frontend, backend e CLI
Edição Visual com Manipulação de AST
Seção intitulada “Edição Visual com Manipulação de AST”O Rebase também oferece um editor visual de coleções no modo Studio. Quando um não-desenvolvedor usa o editor visual para adicionar um campo:
- O Studio não modifica diretamente o banco de dados
- Em vez disso, ele usa ts-morph para analisar seu arquivo fonte TypeScript como uma AST
- Ele insere a nova definição de propriedade precisamente no bloco
properties - Todo o código existente, callbacks e lógica personalizada são preservados intocados
- O arquivo é salvo, acionando o hot reload
Essa abordagem de “UI como Gerador de Código” significa que as edições visuais produzem o mesmo TypeScript limpo que um desenvolvedor escreveria manualmente.
Pipeline de Geração de Schema
Seção intitulada “Pipeline de Geração de Schema”TypeScript Collections │ ▼ rebase schema generate │ ▼ Drizzle Schema (schema.generated.ts) │ ▼ rebase db generate │ ▼ SQL Migration Files │ ▼ rebase db migrate │ ▼ PostgreSQL TablesExemplo
Seção intitulada “Exemplo”Dada esta coleção:
const productsCollection: EntityCollection = { slug: "products", table: "products", properties: { name: { type: "string", name: "Name", validation: { required: true } }, price: { type: "number", name: "Price", columnType: "numeric" }, active: { type: "boolean", name: "Active", defaultValue: true }, created_at: { type: "date", name: "Created", autoValue: "on_create" } }};O Rebase gera este schema Drizzle:
// schema.generated.tsimport { pgTable, varchar, numeric, boolean, timestamp } from "drizzle-orm/pg-core";
export const products = pgTable("products", { id: serial("id").primaryKey(), name: varchar("name").notNull(), price: numeric("price"), active: boolean("active").default(true), created_at: timestamp("created_at").defaultNow()});O que produz este SQL:
CREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL, price NUMERIC, active BOOLEAN DEFAULT true, created_at TIMESTAMP DEFAULT NOW());Segurança e Objetos de Banco de Dados Não Mapeados
Seção intitulada “Segurança e Objetos de Banco de Dados Não Mapeados”Quando o Rebase atualiza o schema do banco de dados, ele mapeia as definições de coleção TypeScript para as tabelas do banco de dados. Para garantir que os objetos do banco de dados não mapeados (por exemplo, tabelas, views, enums) nunca sejam descartados ou modificados, o Rebase implementa várias camadas de segurança:
- Filtragem Estrita de Tabelas (
tablesFilter): A configuração Drizzle gerada restringe dinamicamente a sincronização apenas às tabelas exportadas no schema gerado. Quaisquer tabelas não reconhecidas ou tabelas de sistemas legados existentes no banco de dados são ignoradas pelo mecanismo de sincronização. - Restrições de Schema (
schemaFilter): A sincronização do banco de dados é restrita exclusivamente ao schemapublic. Tabelas de banco de dados internas, schemas personalizados e tabelas específicas de extensões não são tocadas. - Proteção de Funções e Extensões: O Drizzle é configurado para não gerenciar funções de banco de dados (
entities.roles: false) ou tabelas auxiliares de extensões como PostGIS. - Confirmação Interativa no Modo de Desenvolvimento: Ao executar
rebase db pushem desenvolvimento, a CLI é executada com as flags--stricte--verbose, o que garante que os desenvolvedores devem revisar e aprovar explicitamente quaisquer ações SQL destrutivas antes de serem executadas.
Próximos Passos
Seção intitulada “Próximos Passos”- Coleções — Referência completa de configuração de coleção
- Propriedades — Mapeamentos detalhados de tipos de coluna