Ajouter @lightweight-sdk/service-registry (packages/common) #2
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/service-registry-package"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Résumé
Nouveau package
@lightweight-sdk/service-registry(packages/common/) : registre de services en singleton avec injection par décorateurs.ServiceRepository— singleton central. Un uid unique (crypto.randomUUID(), isomorphe) est généré à l'enregistrement de chaque service ; une seule instance partagée par service.@RegisterService()— décorateur de classe. Instancie (constructeur sans argument obligatoire) et enregistre automatiquement la classe décorée.@Service(target)— décorateur de propriété. Injection paresseuse et mémoïsée par référence de classe : la résolution se fait au premier accès à la propriété (pas à la décoration), donc insensible à l'ordre d'évaluation des modules entre un service et ses consommateurs. Après le premier accès, la propriété est remplacée par la valeur résolue.16 tests (Vitest),
docs:checkpasse sans aucun avertissement (couverture TSDoc complète, contrairement àweb-componentqui reste exclu).Corrections connexes trouvées en implémentant
tsconfig.base.json:useDefineForClassFields: falseajouté. Avectarget: ES2022, ce flag vauttruepar défaut, ce qui réinitialise silencieusement tout champ de classe sans initialiseur (logger!: T;) àundefinedsur l'instance à la construction — masquant l'accesseur posé sur le prototype par n'importe quel décorateur de propriété (@Serviceici, et@LinkToDomdansweb-component, qui fonctionnait par chance car jamais exercé par un test). Documenté dansspec/architecture.md.scripts/create-package.mjs:execFileSync('pnpm', …)ne résout pas le shim.cmdde pnpm sous Windows sansshell: true— trouvé en ré-utilisant le script pour scaffolder ce package (ENOENT). Corrigé pour les deux appels (pnpm install,pnpm exec biome check --write).Vérifié localement
pnpm lint,pnpm build,pnpm test(16/16),pnpm docs:checkpassent tous.pnpm changeset statusconfirme le bumpminorpour ce nouveau package.🤖 Generated with Claude Code
Registre de services en singleton avec injection par decorateurs : - ServiceRepository : singleton central, uid genere automatiquement (crypto.randomUUID) a l'enregistrement, une seule instance partagee par service. - @RegisterService() : decorateur de classe, instancie et enregistre automatiquement la classe decoree (constructeur sans argument). - @Service(target) : decorateur de propriete, injection paresseuse et memoisee par reference de classe (resolution au premier acces, pas a la decoration - insensible a l'ordre d'evaluation des modules). Fix connexe dans tsconfig.base.json : useDefineForClassFields desactive (target ES2022 l'active par defaut), sinon un champ de classe sans initialiseur est reinitialise a undefined sur l'instance a la construction et masque l'accesseur pose sur le prototype par un decorateur de propriete - touche @Service ici et @LinkToDom dans web-component. Documente dans spec/architecture.md. Fix connexe dans scripts/create-package.mjs : execFileSync('pnpm', ...) ne resout pas le shim .cmd de pnpm sous Windows sans shell: true (trouve en re-testant le script sur ce package). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>