Prise en main : premier projet en 30 minutes

Sans serveur. Un bouton qui émet click, une pile qui compte les assiettes et publie plates_count. À la fin, une erreur volontaire pour voir le broker refuser un payload.

Tout le projet est dans tutos/projets/assiettes (téléchargement). Chaque étape montre le fichier complet, puis ce que dit la console.

  1. Copier fw/

    Le framework tient en deux fichiers, génériques, qu'on ne touche jamais : engine.js (l'interpréteur du catalogue) et broker.js (l'aiguilleur). Copiez-les depuis le chat ou depuis le squelette vide.

    assiettes/
      index.html                la composition
      fw/engine.js              jamais modifié
      fw/broker.js              jamais modifié
      catalogs/catalog.js       les contrats
      components/plates_button.js
      components/plates_stack.js
  2. Écrire le catalogue

    Deux contrats. click n'a aucun champ, mais il est déclaré : un payload vide est valide, un payload avec un champ ne l'est pas. Les examples et counterexamples prouvent le contrat, node test_engine.js les rejoue.

    $ node test_engine.js test_engine : catalogue prouvé
  3. Écrire le bouton

    Il émet click, ne reçoit rien, et ne sait pas qui l'écoute.

  4. Écrire la pile

    Elle reçoit click, compte, affiche, et publie plates_count. Remarquez le publish fait depuis handleMessage : il est mis en file, livré après le message courant.

  5. Composer dans index.html

    Un broker construit sur le catalogue, deux objets construits avec leur support. C'est le seul endroit qui connaît les deux composants. Puis l'audit, une fois tout monté.

    Ouvrir le projet. Cliquez deux fois : la pile affiche « 2 assiettes ». La console dit :

    AUDIT (orphan_emit): plates_count is emitted by stack, has no local subscriber and crosses no channel

    L'audit a raison : personne n'écoute encore plates_count. Pendant la construction, un orphelin est normal. Le tuto 2 lui donne un abonné.

  6. Lancer l'audit, cocher le mode verbeux

    Cochez « broker verbeux » puis cliquez : chaque réception, validation et livraison est tracée.

    INFO (broker): received from button: {"click":{}} INFO (broker): delivering click v1 to stack INFO (stack): reçoit {"click":{}} INFO (broker): received from stack: {"plates_count":{"count":3}}
  7. L'erreur volontaire

    Le bouton « émettre un payload invalide » publie { click: { who: "moi" } }. Le broker refuse, liste les violations, et la pile ne bouge pas :

    ERROR (broker): click v1 r0 from button invalid — dropped: - who: field not declared in catalog (R1)

    C'est la règle du message et de son contrat : tout champ est déclaré, un champ en trop est une violation. L'erreur est bruyante mais n'arrête rien.

Ce que vous venez de faire

Un catalogue en pure donnée, deux composants qui ne se connaissent pas, une composition en un seul endroit, un audit en fin de montage. C'est tout fwtozza. Le reste, c'est la même chose avec un serveur en face.