Architecture
Le dépôt
text
dwa-platform/
├── apps/
│ ├── extension/ Extension VS Code + serveur de langage (TypeScript, LSP)
│ ├── theme-hub/ Portail des thèmes (Cloudflare Workers, D1, R2, Better Auth, React)
│ ├── mcp/ Serveur MCP (à construire)
│ └── site/ Ce site de documentation (VitePress)
├── packages/
│ └── core/ Catalogue Core v1 et validateur des thèmes, partagés
├── theme/
│ ├── DWA.css Thème de référence (@theme DWA)
│ └── archive/ Anciennes versions — ne pas modifier ni enregistrer
├── docs/language/ Guide du langage (référence), nomenclature, catalogue visuel
├── examples/ Présentations d’essai
└── scripts/ test-changed.mjs : parcours e2e touchés par une modificationComment les pièces s’emboîtent
text
┌──────────────── Poste de l’auteur ────────────────┐
│ │
Markdown ──┤ VS Code ── Extension DWA ── Serveur de langage │
│ │ │ │
│ │ └── Rendu Chromium (mesure) │
│ └────── Export PPTX │
│ │ │
└─────────────────┼──────────────────────────────────┘
│ HTTPS, jeton révocable
▼
Portail des thèmes (Worker)
├── D1 : droits, thèmes, versions, rapports
├── R2 ou stockage de l’organisation : CSS privés
└── API Claude (facultatif) : assistant de l’éditeur- Le cœur partagé (
packages/core/) contient le catalogue du langage (src/catalog.ts) et le validateur des thèmes (src/theme-rules/). L’extension, le portail (serveur et éditeur) et ce site l’importent en source : une règle n’est écrite qu’une fois. - Le reste du cœur du langage (
apps/extension/src/language/,render/,export/) ne dépend pas de VS Code. Il sera extrait quand le serveur MCP en aura besoin. - L’extension appelle l’API des extensions du portail (
src/hub/↔apps/theme-hub/worker/routes/device.ts,/device-api/v2). Toute modification de l’API garde les deux côtés compatibles. - Ce site importe le catalogue partagé et le
package.jsonde l’extension pour générer la référence des classes et les commandes et paramètres ; les exemples de slides sont rendus avec Marp Core ettheme/DWA.cssà la construction.
Le portail en détail
text
apps/theme-hub/
├── worker/ API (Cloudflare Worker)
│ ├── routes/ account, orgs, themes, device (API des extensions)
│ ├── auth.ts Better Auth : code email + SSO OIDC
│ ├── storage.ts stockage multicloud (R2, S3 compatible, Azure)
│ └── ai.ts assistant de l’éditeur (Claude)
├── web/ interface React + shadcn/ui + Tailwind (Vite), servie par le Worker
│ └── src/editor/ éditeur, validation en Web Worker, mesure géométrique en iframe isolée
├── migrations/ base D1 (SQLite)
└── tests/ parcours e2e : API, intégrations, interface (Chromium)L’extension en détail
| Fichier | Rôle |
|---|---|
src/extension.ts | Intégration VS Code (commandes, suggestions inline, export) |
src/server.ts | Serveur de langage : complétion, survol, diagnostics, corrections |
src/language/catalog.ts | Réexporte le catalogue de packages/core |
src/language/language.ts | Analyse du Markdown et règles |
src/language/activation.ts | Détection du thème et activation |
src/language/transitions.ts | Réserve des titres et légendes (expérimental) |
src/render/renderer.ts | Mesure du rendu, dans un processus séparé |
src/render/callout-fit.ts | Taille automatique des callouts |
src/export/pptx.ts | Export PowerPoint, indépendant de VS Code |
src/hub/hub.ts | Thèmes d’organisation : connexion, choix, vérification, barre d’état, validation |
src/hub/hub-client.ts | Client de l’API des extensions, indépendant de VS Code |
src/hub/store.ts | Thèmes installés dans le stockage global, une version active par thème |
src/hub/theme-server.ts | Serveur 127.0.0.1 qui expose les thèmes installés à Marp |