Esquema como Código
La Idea Principal
Sección titulada «La Idea Principal»En Rebase, sus definiciones de colección de TypeScript son la única fuente de verdad. A partir de un conjunto de objetos TypeScript, Rebase genera:
- Tablas PostgreSQL a través de la generación de esquemas Drizzle ORM
- UI CRUD — formularios, tablas, validación, tipos de campo
- Endpoints de API REST con filtrado, ordenación y paginación
- SDK de Cliente — operaciones de datos con seguridad de tipos
- Políticas RLS — Seguridad a Nivel de Fila en Postgres
Esto significa que su esquema es:
- Controlado por versiones — cada cambio es un commit de git
- Con seguridad de tipos — TypeScript detecta errores en tiempo de compilación
- Revisable — los cambios de esquema pasan por pull requests
- Portátil — la misma definición funciona en frontend, backend y CLI
Edición Visual con Manipulación de AST
Sección titulada «Edición Visual con Manipulación de AST»Rebase también proporciona un editor visual de colecciones en modo Studio. Cuando un no-desarrollador utiliza el editor visual para añadir un campo:
- El Studio no modifica directamente la base de datos
- En su lugar, utiliza ts-morph para analizar su archivo fuente TypeScript como un AST
- Inserta la nueva definición de propiedad precisamente en el bloque
properties - Todo el código existente, callbacks y lógica personalizada se conservan intactos
- El archivo se guarda, lo que activa la recarga en caliente
Este enfoque de “UI como Generador de Código” significa que las ediciones visuales producen el mismo TypeScript limpio que un desarrollador escribiría a mano.
Pipeline de Generación de Esquemas
Sección titulada «Pipeline de Generación de Esquemas»TypeScript Collections │ ▼ rebase schema generate │ ▼ Drizzle Schema (schema.generated.ts) │ ▼ rebase db generate │ ▼ SQL Migration Files │ ▼ rebase db migrate │ ▼ PostgreSQL TablesEjemplo
Sección titulada «Ejemplo»Dada esta colección:
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" } }};Rebase genera este esquema 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()});Lo que produce este SQL:
CREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL, price NUMERIC, active BOOLEAN DEFAULT true, created_at TIMESTAMP DEFAULT NOW());Seguridad y Objetos de Base de Datos no Mapeados
Sección titulada «Seguridad y Objetos de Base de Datos no Mapeados»Cuando Rebase actualiza el esquema de la base de datos, mapea las definiciones de colección de TypeScript a las tablas de la base de datos. Para garantizar que los objetos de base de datos no mapeados (por ejemplo, tablas, vistas, enumeraciones) nunca se eliminen ni modifiquen, Rebase implementa varias capas de seguridad:
- Filtrado Estricto de Tablas (
tablesFilter): La configuración de Drizzle generada restringe dinámicamente la sincronización solo a las tablas exportadas en el esquema generado. El motor de sincronización ignora cualquier tabla no reconocida o tablas de sistemas heredados que existan en la base de datos. - Restricciones de Esquema (
schemaFilter): La sincronización de la base de datos se restringe exclusivamente al esquemapublic. Las tablas internas de la base de datos, los esquemas personalizados y las tablas específicas de extensiones no se modifican. - Protección de Roles y Extensiones: Drizzle está configurado para no gestionar roles de base de datos (
entities.roles: false) ni tablas auxiliares de extensiones como PostGIS. - Confirmación Interactiva en Modo de Desarrollo: Al ejecutar
rebase db pushen desarrollo, la CLI se ejecuta con los flags--stricty--verbose, lo que garantiza que los desarrolladores deban revisar y aprobar explícitamente cualquier acción SQL destructiva antes de que se ejecute.
Siguientes Pasos
Sección titulada «Siguientes Pasos»- Colecciones — Referencia completa de la configuración de colecciones
- Propiedades — Mapeos detallados de tipos de columna