Schema DSL
En bref
Le package @ontologie/schema fournit des builders TypeScript pour declarer vos entites metier, relations et mutations de maniere type-safe. Le schema compile vers un manifeste JSON pousse vers votre workspace.
Installation
npm install @ontologie/schema
Declarer une entite
import { objectType, string, number, date, boolean, enumType } from '@ontologie/schema';
const Status = enumType('Status', ['draft', 'active', 'archived']);
const Contract = objectType('Contract', {
title: string().required(),
amount: number().required().indexed(),
status: Status.default('draft'),
signedAt: date().optional(),
autoRenew: boolean().default(false),
});
Types primitifs
| Type | Description | Exemple |
|---|---|---|
string() | Texte | Nom, description, email |
number() | Numerique | Montant, quantite |
date() | Date ISO 8601 | Echeance, signature |
boolean() | Vrai/faux | Actif, verifie |
json() | Objet arbitraire | Metadata, configuration |
Modificateurs de proprietes
| Modificateur | Effet |
|---|---|
.required() | Champ obligatoire a la creation |
.optional() | Champ facultatif (par defaut) |
.default(value) | Valeur par defaut |
.indexed() | Indexe pour les recherches |
.mutableBy([actions]) | Restreint la modification aux actions listees |
Enumerations
const Priority = enumType('Priority', ['low', 'medium', 'high', 'critical']);
Les valeurs peuvent etre ajoutees mais pas supprimees sans changement de schema majeur.
Relations (Links)
import { link } from '@ontologie/schema';
const ContractVendor = link('Contract', 'Vendor', {
cardinality: 'many_to_one',
label: 'fournisseur',
});
| Cardinalite | Description |
|---|---|
one_to_one | Relation 1:1 |
one_to_many | Un parent, plusieurs enfants |
many_to_one | Plusieurs enfants, un parent |
many_to_many | Relation N:N |
Actions
Les actions declarent des mutations gouvernees sur vos entites :
import { action } from '@ontologie/schema';
const ApproveContract = action('Contract.approve')
.input({ approverNote: string().optional() })
.when({ status: { eq: 'draft' } })
.risk('medium')
.executionMode('plan_only')
.roles(['manager', 'admin']);
Modes d'execution
| Mode | Description |
|---|---|
descriptive | Aucune mutation — information seulement |
plan_only | Genere un plan signe, necessite approbation |
twin_apply | Execute sur le digital twin (reversible) |
human_handoff | Delegation a un humain |
workflow_handoff | Delegation a un workflow |
external_commit | Commit vers un systeme externe |
Niveaux de risque
| Risque | TTL du plan | Usage |
|---|---|---|
low | 7 jours | Lectures, mises a jour mineures |
medium | 24 heures | Modifications standard |
high | 1 heure | Suppressions, actions financieres |
Preconditions (.when())
Operateurs disponibles : .eq(), .neq(), .in(), .notIn(), .gt(), .gte(), .lt(), .lte(), .contains(), .startsWith().
// L'action n'est executable que si le montant > 10000
const EscalateContract = action('Contract.escalate')
.when({ amount: { gt: 10000 } })
.risk('high');
Compilation
Exportez votre schema via compile() :
import { compile } from '@ontologie/schema';
export default compile({
types: [Contract, Vendor, Priority, Status],
actions: [ApproveContract, EscalateContract],
links: [ContractVendor],
});
Workflow CLI
# Generer le manifeste et verifier les differences
npx ontologie schema diff
# Pousser le schema vers votre workspace
npx ontologie schema push
# Generer les types TypeScript depuis le manifeste
npx ontologie generate
Voir aussi
- SDK TypeScript — Vue d'ensemble du SDK
- Requetes — Interroger vos entites
- Plans et Actions — Executer des mutations gouvernees
- Reference API — Endpoints REST