Que fait epicenter ?
Appliquer les motifs de frontière de service Whispering pour des capacités sans UI, des entrées explicites, la faillibilité des Result, des objets Live, des fabriques de cycle de vie et des variantes de plateforme. Utiliser lors de la création ou du remaniement de services, de contrats, de dispatcheurs de fournisseurs ou du baril $lib/services.
Démarrage rapide
- Installer le skill :
npx @epicenterhq/cli add epicenter - Générer un service :
npx @epicenterhq/cli generate service monService - Configurer les variantes : éditer
epicenter.config.js
Structure d'un service
$lib/services/
├── monService/
│ ├── index.ts # Baril d'exportation public
│ ├── contract.ts # Contrat du service
│ ├── provider.ts # Dispatcheur de fournisseurs
│ └── variants/
│ ├── default.ts # Implémentation par défaut
│ └── mock.ts # Implémentation simulée
Motifs clés
| Motif | Description |
|---|---|
| UI-free | Les services n'ont aucune dépendance vis-à-vis du framework UI. |
| Explicit inputs | Toutes les entrées sont typées et déclarées explicitement dans le contrat. |
| Result fallibility | Chaque opération retourne un type Result<T, E> pour gérer les erreurs de manière explicite. |
| Live objects | Les services exposent des objets 'live' qui reflètent l'état actuel via des Observables ou des signaux. |
| Lifecycle factories | Les services sont créés via des fabriques de cycle de vie pour encapsuler l'initialisation et le nettoyage. |
| Platform variants | Plusieurs implémentations (prod, dev, test, mock) peuvent coexister pour différentes plateformes. |
Utilisation dans le code
import { monService } from '$lib/services/monService';
const result = await monService.doSomething({ param: 'valeur' });
if (result.success) {
console.log(result.data);
} else {
console.error(result.error);
}
Configuration
Le fichier epicenter.config.js permet de spécifier les variantes par environnement :
export default {
services: {
monService: {
variant: process.env.NODE_ENV === 'production' ? 'default' : 'mock'
}
}
};
Documentation complète
Voir le dépôt EpicenterHQ/epicenter pour la documentation détaillée et les exemples avancés.