lightweight-sdk/spec/packages.md
Nicolas 10bc209038
Some checks failed
CI / build-lint-test (pull_request) Failing after 29s
Ajouter @lightweight-sdk/service-registry (packages/common)
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>
2026-09-18 13:59:58 +02:00

2.8 KiB

Registre des packages

Package Catégorie Version Statut
@lightweight-sdk/web-component client 0.0.2 migré depuis lightweight-sdk-web-component, non modifié

Ajouter un package

pnpm create-package <client|common|server> <nom-du-package>

Le script scaffolde package.json, tsconfig.json, src/index.ts + un test, un README.md, ajoute le package aux project references racine et met à jour ce tableau automatiquement. Reste à faire à la main : décrire le package, l'implémenter, et créer un changeset (pnpm changeset) quand il est prêt à être publié.

Champs package.json obligatoires pour tout package du monorepo

  • name (@lightweight-sdk/<nom>), version, description
  • main (dist/index.js), types (dist/index.d.ts), files: ["dist"]
  • engines.node >= 22
  • publishConfig.registry pointant vers le registre npm privé (https://git.dev.kyuno.fr/api/packages/kyuno/npm/)
  • typedocOptions.entryPoints (sauf exception documentée, voir ci-dessous)

Observations sur @lightweight-sdk/web-component (non traitées, laissées telles quelles)

Le code source de ce package a été migré strictement à l'identique depuis l'ancien repo lightweight-sdk-web-component, sans aucune édition (décision explicite de l'auteur). Quelques points relevés à la lecture, non corrigés, à traiter soi-même dans une PR dédiée si souhaité :

  • connectedCallback()/disconnectedCallback() (abstractComponent.ts), la constante CUSTOM_COMPONENT_CONFIG (component.type.ts) et REQUEST_DOM_LINK_KEY (component.tools.ts) n'ont pas de TSDoc complet — c'est pourquoi ce package est exclu de la validation docs:check dans typedoc.json (exclude: ["packages/client/web-component/**"]).
  • Deux usages de any (ConstructorFunction.new(...args: any[]), parseModuleToHtml(mod: any)) — visibles comme avertissements Biome non bloquants (noExplicitAny).
  • Le paramètre constructor dans component.tools.ts masque un nom global restreint (noShadowRestrictedNames) — désactivé pour ce package via un overrides dans biome.json.
  • Le style de formatage d'origine (4 espaces, guillemets doubles) diffère de la config Biome du monorepo (tabulations, guillemets simples) — le formatter Biome est désactivé pour ce package via le même overrides.
  • REQUEST_DOM_LINK_KEY semble ne plus être utilisé nulle part dans le code (le mécanisme actif est le tableau __linkedProperties) — potentiellement mort, mais pas supprimé.
  • Quelques typos mineures ("atatched", "attriute") et un commentaire en français dans LinkToDom qui ne correspond plus exactement au comportement (throw au lieu d'un simple avertissement). | @lightweight-sdk/service-registry | common | 0.0.1 | brouillon |