@stnd/core đż
LâintĂ©gration Standard est le socle technologique de lâĂ©cosystĂšme Utopie. Elle fournit un framework cohĂ©rent pour le design, le rendu des contenus, la gestion des modules et des utilitaires serveurs.
Ce document sert de référence technique pour les développeurs et les agents IA travaillant sur le projet.
đ Structure de lâArchitecture
Le concept repose sur une séparation stricte entre le Core (statique, testé) et les Modules/Spores (dynamiques, spécifiques au projet).
- Standard Integration (
standard.js) : Lâorchestrateur. Il gĂšre lâauto-discovery des modules, injecte les routes, les styles et configure les modules virtuels. - Core Helpers (
core/) : BibliothĂšques de fonctions pures pour lâauthentification, le formatage, la journalisation et les manipulations de donnĂ©es. - Press Engine (
@stnd/press) : Moteur de rendu Markdown haut de gamme (basé surmarkdown-it) avec support des runes, callouts Obsidian et typographie fine. - Design System (
@stnd/styles) : Tokens de design mathématiques, échelles typographiques et systÚme de couleurs OKLCH.
đ SystĂšme de Modules (Spores)
Les modules sont auto-dĂ©couverts et orchestrent Ă la fois la logique et lâinterface via un systĂšme de Hooks UnifiĂ©s.
Anatomie dâun module (index.module.js) :
export default {
id: ânom-du-moduleâ,
// Hooks : Le cerveau du module
// â .js, .ts â LOGIQUE (ex: astro hooks, app events)
// â .astro, .svelte, .md â INTERFACE (ex: header, footer)
hooks: {
âastro:config:setupâ: â./hooks/setup.jsâ, // Logique Astro
âheader:topâ: â./components/Banner.astroâ, // Point dâinjection UI
âapp:initâ: [â./init.tsâ, â./Widget.astroâ], // Mixte possible
},
routes: [{ path: â/ma-routeâ, entrypoint: â./routes/index.astroâ }],
styles: [â./styles.scssâ],
scripts: [â./client-side.jsâ],
middleware: â./middleware.jsâ,
};
Modules Virtuels & Rendu :
virtual:standard/hooks: Pour exécuter la logique (runHook).virtual:standard/components: Utilisé par le composant<Hook />pour le rendu UI.
Consommation UI :
import Hook from â@stnd/core/Hook.astroâ;
<Hook id=âheader:topâ />
đ RĂ©fĂ©rence des Helpers (Core & Server)
Importables via @stnd/server/[nom_du_fichier] ou @stnd/utils/[nom_du_fichier].
Authentification (@stnd/server/auth.js)
| Fonction | Signature | Description |
|---|---|---|
signJWT |
signJWT(payload, secret) |
Signe un token JWT via Web Crypto API. |
verifyJWT |
verifyJWT(token, secret) |
Vérifie et décode un JWT. |
getSession |
getSession(request, secret) |
Extrait la session depuis les cookies. |
createSession |
createSession(payload, secret) |
GénÚre le header Set-Cookie. |
Browser & Client (@stnd/client)
| Fonction | Signature | Description |
|---|---|---|
copyToClipboard |
copyToClipboard(text) |
Copie dans le presse-papier (avec fallback). |
emit |
emit(name, detail) |
Bus dâĂ©vĂ©nements global (window.dispatchEvent). |
on |
on(name, callback) |
Ăcouteur dâĂ©vĂ©nements global. |
standardGateView |
standardGateView(view) |
Ouvre une vue spécifique dans le Gate. |
standardGatePrompt |
standardGatePrompt(text) |
Ouvre le Gate avec un texte pré-rempli. |
Document Converter (@stnd/server/document-converter.js)
| Fonction | Signature | Description |
|---|---|---|
convertDocumentToMarkdown |
convertDocumentToMarkdown(file) |
Convertit DOCX, PDF, HTML ou RTF en Markdown. |
isSupportedDocument |
isSupportedDocument(file) |
Vérifie si le fichier est convertible. |
E-Ink Optimization (@stnd/client/eink.js)
| Fonction | Signature | Description |
|---|---|---|
initEInk |
initEInk(options) |
Initialise la détection et les styles E-Ink. |
toggleEInkMode |
toggleEInkMode() |
Bascule manuellement le mode E-Ink. |
Utils & Data (@stnd/utils/index.js & @stnd/utils/slugify.js)
| Fonction | Signature | Description |
|---|---|---|
slugify |
slugify(text) |
Slug robuste et universel. |
deepMerge |
deepMerge(target, source) |
Fusion profonde dâobjets. |
getExcerpt |
getExcerpt(content, opts) |
Extrait un résumé (HTML/MD). |
formatDate |
formatDate(date, format) |
Formatage de dates multilingue. |
getReadingTime |
getReadingTime(text) |
Temps de lecture estimé. |
validateEmail |
validateEmail(email) |
Validation dâemail simplifiĂ©e. |
Autres Helpers :
@stnd/server/cors.js:getCorsHeaders,handleCorsPreFlight.@stnd/server/errors.js: Classes dâerreurs standardisĂ©es (StandardError,AuthError, etc.).@stnd/server/filename.js:sanitizeFilename,makeUniqueFilename.@stnd/log: SystĂšme de log colorĂ© (log.info,log.success,log.banner).@stnd/core/src/collections.js:defineStandardCollection(Astro Content Layer helper).
đš Design Tokens (CSS Variables)
Le systĂšme utilise des variables CSS (âstnd-* ou variables racines :root) pour la cohĂ©rence.
đ GĂ©omĂ©trie & Rythme (packages/styles/_standard-01-token.scss)
| Variable | Valeur par défaut | Description |
|---|---|---|
âratio-golden |
1.618 |
Proportion dâor pour les mises en page. |
âratio-silver |
1.414 |
Proportion dâargent pour les Ă©chelles. |
âbaseline |
1rlh |
LâunitĂ© de base du rythme vertical. |
âspace |
var(âbaseline) |
Espacement de base. |
âspace-[1-12] |
var(âspace) * n |
Ăchelle dâespacement modulaire. |
âscale-[2-8] |
modular scale |
Ăchelle typographique exponentielle. |
âline-width |
~42rem |
Largeur de lecture optimale (mesure). |
âradius |
âleading |
Rayon de bordure cohérent avec le rythme. |
đš Couleurs (packages/styles/_standard-02-color.scss)
SystĂšme basĂ© sur OKLCH gĂ©nĂ©rant une harmonie Ă partir de âcolor-accent.
| Token Sémantique | Description |
|---|---|
âcolor-background |
Fond de page (papier en clair, noir retro en sombre). |
âcolor-foreground |
Couleur de texte principale. |
âcolor-accent |
Couleur de marque/action (génÚre tout le reste). |
âcolor-surface |
Couleur pour les cartes/conteneurs. |
âcolor-border |
Bordures subtiles. |
âcolor-[green|red|yellow|blue] |
Couleurs pigmentaires dĂ©rivĂ©es de lâaccent. |
âcolor-success|error|warning |
Ătats sĂ©mantiques. |
đ Breakpoints SCSS
$mobile: 600px$small: 768px$large: 1024px$wide: 1440px
đĄ Notes pour lâIA
- Module Integration: Standardized on âModuleâ terminology (formerly Folios/Spores).
- Actions: Core actions are now fully decanted into their respective modules and aggregated via
virtual:standard/actions. - ModĂšle de DonnĂ©es : La logique mĂ©tier doit ĂȘtre dans les modĂšles (
model/) ou les helperscore/. Les composants Astro sont rĂ©servĂ©s Ă lâaffichage. - Typographie : Respectez le rythme vertical en utilisant
var(âspace-*)pour les marges etvar(âscale-*)pour les tailles de police.