Aller au contenu

⚙️ Moteur Instatic Core

Le cœur du moteur Instatic repose sur un modèle d'architecture réactif conçu pour éliminer la désynchronisation entre la base de données, l'arbre de nœuds visualisé dans le navigateur et les agents IA externes.


🌲 Le modèle de données unifié (NodeTree)

Contrairement aux CMS traditionnels qui séparent rigoureusement les pages statiques, les articles de blog et les composants graphiques dans des tables disparates, Instatic unifie l'ensemble de son contenu dans deux tables fondamentales : - data_tables : Définition des schémas de collections et tables virtuelles. - data_rows : Lignes d'enregistrements contenant soit des données structurées, soit l'arbre sérialisé des nœuds graphiques (NodeTree<TNode>).

export interface NodeTree<TNode> {
  rootId: string;
  nodes: Record<string, TNode>;
  viewportOverrides?: Record<string, ViewportOverride>;
}

⚡ Gestion de l'état avec Zustand & Mutative

Dans l'application d'administration (src/admin/pages/site/), le store d'édition est structuré en 12 slices spécialisées coordonnées par zustand-mutative :

  1. siteSlice : Gestion de l'arbre actif, sélection de la page ou du Visual Component (VC).
  2. canvasSlice : Modes de vue (Design multi-écrans vs Live interactif), zooms, repères.
  3. nodeSlice : CRUD sur les nœuds du document (insert, delete, move, rename, duplicate).
  4. styleSlice : Propriétés CSS calculées, règles de style par breakpoint, classes utilitaires.
  5. tokenSlice : Design tokens globaux (couleurs, échelles typographiques, espacements).
  6. historySlice : Système Undo/Redo basé sur des patchs JSON différentiels (complexité \(O(\Delta)\) au lieu de dupliquer tout le document \(O(N)\)).
  7. collabSlice : Relais de collaboration temps réel et synchronisation automatique avec le serveur.

🛡️ Sandbox QuickJS-WASM pour les Plugins

Pour permettre l'extension sans compromettre la sécurité de l'instance, tout code serveur tiers ou plugin s'exécute dans une machine virtuelle QuickJS compilée en WebAssembly : - Isolation mémoire totale : Aucun accès à process.env, au système de fichiers hôte ou aux sockets réseau non explicitement autorisés. - Budget de crash & auto-restart : Si un script de plugin lève une exception non gérée ou dépasse son quota mémoire, le worker est recyclé instantanément sans impacter le fil d'exécution principal (server/plugins/host/crashRecovery.ts).