Schéma comme Code
L’Idée Principale
Section intitulée « L’Idée Principale »Dans Rebase, vos définitions de collections TypeScript sont la source unique de vérité. À partir d’un ensemble d’objets TypeScript, Rebase génère :
- Tables PostgreSQL via la génération de schéma Drizzle ORM
- Interface utilisateur CRUD — formulaires, tables, validation, types de champs
- Points de terminaison d’API REST avec filtrage, tri et pagination
- SDK client — opérations de données sécurisées par le type
- Politiques RLS — Sécurité au niveau des lignes dans Postgres
Cela signifie que votre schéma est :
- Géré par version — chaque modification est un commit git
- Type-safe — TypeScript intercepte les erreurs à la compilation
- Révisable — les modifications de schéma passent par des pull requests
- Portable — la même définition fonctionne sur le frontend, le backend et la CLI
Édition Visuelle avec Manipulation d’AST
Section intitulée « Édition Visuelle avec Manipulation d’AST »Rebase fournit également un éditeur visuel de collections en mode Studio. Lorsqu’un non-développeur utilise l’éditeur visuel pour ajouter un champ :
- Le Studio ne modifie pas directement la base de données
- Au lieu de cela, il utilise ts-morph pour analyser votre fichier source TypeScript en tant qu’AST
- Il insère la nouvelle définition de propriété précisément dans le bloc
properties - Tout le code existant, les rappels et la logique personnalisée sont préservés intacts
- Le fichier est enregistré, déclenchant le rechargement à chaud
Cette approche “UI en tant que Générateur de Code” signifie que les modifications visuelles produisent le même code TypeScript propre qu’un développeur écrirait à la main.
Pipeline de Génération de Schéma
Section intitulée « Pipeline de Génération de Schéma »TypeScript Collections │ ▼ rebase schema generate │ ▼ Drizzle Schema (schema.generated.ts) │ ▼ rebase db generate │ ▼ SQL Migration Files │ ▼ rebase db migrate │ ▼ PostgreSQL TablesÉtant donnée cette collection :
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 génère ce schéma 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()});Ce qui produit ce SQL :
CREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR NOT NULL, price NUMERIC, active BOOLEAN DEFAULT true, created_at TIMESTAMP DEFAULT NOW());Sécurité & Objets de Base de Données Non Mappés
Section intitulée « Sécurité & Objets de Base de Données Non Mappés »Lorsque Rebase met à jour le schéma de base de données, il associe les définitions de collections TypeScript aux tables de la base de données. Pour garantir que les objets de base de données non mappés (par exemple, tables, vues, énumérations) ne soient jamais supprimés ou modifiés, Rebase implémente plusieurs couches de sécurité :
- Filtrage Strict des Tables (
tablesFilter) : La configuration Drizzle générée restreint dynamiquement la synchronisation aux seules tables exportées dans le schéma généré. Toute table non reconnue ou table de système hérité existant dans la base de données est ignorée par le moteur de synchronisation. - Restrictions de Schéma (
schemaFilter) : La synchronisation de la base de données est limitée exclusivement au schémapublic. Les tables de base de données internes, les schémas personnalisés et les tables spécifiques aux extensions ne sont pas touchés. - Protection des Rôles et des Extensions : Drizzle est configuré pour ne pas gérer les rôles de base de données (
entities.roles: false) ni les tables d’aide des extensions comme PostGIS. - Confirmation Interactive en Mode Dev : Lors de l’exécution de
rebase db pushen développement, la CLI s’exécute avec les indicateurs--strictet--verbose, ce qui garantit que les développeurs doivent explicitement examiner et approuver toutes les actions SQL destructrices avant qu’elles ne soient exécutées.
Prochaines Étapes
Section intitulée « Prochaines Étapes »- Collections — Référence complète de la configuration des collections
- Propriétés — Mappages détaillés des types de colonnes