@nodefony/devkit 10.0.0-alpha.6 → 10.0.0-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/_virtual/{_@oxc-project_runtime@0.149.0 → _@oxc-project_runtime@0.150.0}/helpers/esm/decorate.js +1 -1
  2. package/dist/_virtual/{_@oxc-project_runtime@0.149.0 → _@oxc-project_runtime@0.150.0}/helpers/esm/decorateMetadata.js +1 -1
  3. package/dist/_virtual/{_@oxc-project_runtime@0.149.0 → _@oxc-project_runtime@0.150.0}/helpers/esm/decorateParam.js +1 -1
  4. package/dist/index.js +2 -2
  5. package/dist/nodefony/controllers/DevkitController.js +2 -2
  6. package/dist/nodefony/controllers/McpController.js +3 -3
  7. package/dist/nodefony/service/DevkitService.js +2 -2
  8. package/docs/index.md +2 -2
  9. package/package.json +8 -8
  10. package/skills/nodefony-add-crud/SKILL.md +11 -2
  11. package/skills/nodefony-add-realtime-channel/SKILL.md +9 -0
  12. package/skills/nodefony-add-service/SKILL.md +9 -0
  13. package/skills/nodefony-browser/SKILL.md +31 -23
  14. package/skills/nodefony-dev/SKILL.md +497 -0
  15. package/skills/nodefony-dev/scripts/docs.mjs +544 -0
  16. package/skills/nodefony-devops/SKILL.md +198 -0
  17. package/skills/nodefony-devops/references/compose.md +125 -0
  18. package/skills/nodefony-devops/references/frontal.md +119 -0
  19. package/skills/nodefony-devops/references/image.md +136 -0
  20. package/skills/nodefony-devops/references/kubernetes.md +189 -0
  21. package/skills/nodefony-devops/references/podman.md +103 -0
  22. package/skills/nodefony-devops/references/secrets.md +108 -0
  23. package/skills/nodefony-devops/references/variables.md +174 -0
  24. package/skills/nodefony-migrate-schema/SKILL.md +50 -17
  25. package/skills/nodefony-protect-route/SKILL.md +78 -0
@@ -1,4 +1,4 @@
1
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorate.js
1
+ //#region \0@oxc-project+runtime@0.150.0/helpers/esm/decorate.js
2
2
  function __decorate(decorators, target, key, desc) {
3
3
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
4
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -1,4 +1,4 @@
1
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorateMetadata.js
1
+ //#region \0@oxc-project+runtime@0.150.0/helpers/esm/decorateMetadata.js
2
2
  function __decorateMetadata(k, v) {
3
3
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
4
4
  }
@@ -1,4 +1,4 @@
1
- //#region \0@oxc-project+runtime@0.149.0/helpers/esm/decorateParam.js
1
+ //#region \0@oxc-project+runtime@0.150.0/helpers/esm/decorateParam.js
2
2
  function __decorateParam(paramIndex, decorator) {
3
3
  return function(target, key) {
4
4
  decorator(target, key, paramIndex);
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import defaults, { devkitConfigSchema } from "./nodefony/config/config.js";
2
2
  import { defineDevkitConfig } from "./nodefony/config/defineModuleConfig.js";
3
3
  import { buildCard } from "./nodefony/src/card.js";
4
- import __decorateMetadata from "./_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorateMetadata.js";
5
- import __decorate from "./_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js";
4
+ import __decorateMetadata from "./_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorateMetadata.js";
5
+ import __decorate from "./_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorate.js";
6
6
  import DevkitService_default from "./nodefony/service/DevkitService.js";
7
7
  import DevkitController_default from "./nodefony/controllers/DevkitController.js";
8
8
  import McpController_default from "./nodefony/controllers/McpController.js";
@@ -1,5 +1,5 @@
1
- import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorateMetadata.js";
2
- import __decorate from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js";
1
+ import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorateMetadata.js";
2
+ import __decorate from "../../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorate.js";
3
3
  import { Controller, controller, route } from "@nodefony/framework";
4
4
  //#region nodefony/controllers/DevkitController.ts
5
5
  /**
@@ -1,6 +1,6 @@
1
- import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorateMetadata.js";
2
- import __decorate from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js";
3
- import __decorateParam from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorateParam.js";
1
+ import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorateMetadata.js";
2
+ import __decorate from "../../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorate.js";
3
+ import __decorateParam from "../../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorateParam.js";
4
4
  import { ACCESS_TOKEN_VERIFIER, JsonRpcError, Nodefony, authorizeProtectedResource, checkMcpAccess, collectMcpTools, handleMcpMessage, jsonRpcFailure, mcpCallerRoles, protectedResourceMetadataUrl, readBearerHeader } from "nodefony";
5
5
  import { Body, Controller, Headers, controller, route } from "@nodefony/framework";
6
6
  //#region nodefony/controllers/McpController.ts
@@ -1,7 +1,7 @@
1
1
  import defaults from "../config/config.js";
2
2
  import { buildCard } from "../src/card.js";
3
- import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorateMetadata.js";
4
- import __decorate from "../../_virtual/_@oxc-project_runtime@0.149.0/helpers/esm/decorate.js";
3
+ import __decorateMetadata from "../../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorateMetadata.js";
4
+ import __decorate from "../../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorate.js";
5
5
  import { Module, Nodefony, Service, extend, injectable, mcpDeclaredScopes } from "nodefony";
6
6
  //#region nodefony/service/DevkitService.ts
7
7
  /**
package/docs/index.md CHANGED
@@ -264,8 +264,8 @@ est absent de `tools/list` **et** inappelable en le nommant, et le refus dit
264
264
 
265
265
  > 🔴 **Tant que la porte n'authentifie personne, un outil à scopes ne sortira
266
266
  > jamais.** C'est le comportement voulu — fermé par défaut — mais il faut le
267
- > savoir avant de chercher une panne : `caller` vaut `{ authenticated: false,
268
- scopes: [] }` tant que le rôle _resource server_ décrit plus haut n'est pas
267
+ > savoir avant de chercher une panne : `caller` vaut
268
+ > `{ authenticated: false, scopes: [] }` tant que le rôle _resource server_ décrit plus haut n'est pas
269
269
  > branché. Le jour où il le sera, ces déclarations prendront effet sans qu'une
270
270
  > ligne d'outil change.
271
271
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nodefony/devkit",
3
- "version": "10.0.0-alpha.6",
3
+ "version": "10.0.0-alpha.8",
4
4
  "type": "module",
5
5
  "description": "Outillage de développement d'une application Nodefony : carte de visite du projet et portes de découverte pour un agent de développement",
6
6
  "author": "Christophe CAMENSULI <ccamensuli@gmail.com>",
@@ -25,17 +25,17 @@
25
25
  "coverage": "vitest run --coverage"
26
26
  },
27
27
  "peerDependencies": {
28
- "@nodefony/framework": "^10.0.0-alpha.6",
29
- "@nodefony/http": "^10.0.0-alpha.6",
30
- "nodefony": "^10.0.0-alpha.6",
31
- "zod": "^4.6.1",
28
+ "@nodefony/framework": "^10.0.0-alpha.8",
29
+ "@nodefony/http": "^10.0.0-alpha.8",
30
+ "nodefony": "^10.0.0-alpha.8",
31
+ "zod": "^4.6.5",
32
32
  "playwright": "^1.50.0",
33
33
  "lighthouse": "^13.0.0"
34
34
  },
35
35
  "devDependencies": {
36
- "@nodefony/framework": "^10.0.0-alpha.6",
37
- "@nodefony/http": "^10.0.0-alpha.6",
38
- "nodefony": "^10.0.0-alpha.6"
36
+ "@nodefony/framework": "^10.0.0-alpha.8",
37
+ "@nodefony/http": "^10.0.0-alpha.8",
38
+ "nodefony": "^10.0.0-alpha.8"
39
39
  },
40
40
  "dependencies": {
41
41
  "axe-core": "4.13.0",
@@ -17,6 +17,15 @@ description: >
17
17
 
18
18
  # add-crud — une ressource complète, générée
19
19
 
20
+ > 🧭 **Tu es arrivé ici directement ? Charge aussi `nodefony-dev`** — il porte la conduite
21
+ > commune (par où commencer, comment prouver que c'est fait) et les pièges qui coûtent une heure,
22
+ > serveur comme front. Cette page-ci ne couvre QUE son geste.
23
+ >
24
+ > Et si une réponse te manque, elle est probablement INSTALLÉE : `rg` ne descend pas dans
25
+ > `node_modules`, donc 70 pages de documentation y paraissent absentes. Une commande les lit, avec
26
+ > la ligne exacte :
27
+ > `node node_modules/@nodefony/devkit/skills/nodefony-dev/scripts/docs.mjs <termes>`.
28
+
20
29
  > ⚖️ **La confiance n'exclut pas le contrôle.** Ce que le générateur produit se relit ;
21
30
  > ce que tu écris à la main se prouve par un test.
22
31
 
@@ -35,7 +44,7 @@ se connecte qu'au démarrage), la pagination bornée **et son tri déclaré**, l
35
44
 
36
45
  ## La grammaire de champs
37
46
 
38
- `nom:type[?|!][:index]` — **non-null par défaut**, `?` rend facultatif, `!` pose une contrainte
47
+ `nom:type[?][:index|:unique]` — **non-null par défaut**, `?` rend facultatif, `:unique` pose une contrainte
39
48
  d'unicité, `:index` un index simple.
40
49
 
41
50
  | Type | Ce que ça produit |
@@ -73,7 +82,7 @@ index utiles sont composites : c'est ainsi qu'une table est réellement interrog
73
82
  Trois réglages, et ils ne touchent **que** le SQL — la propriété TypeScript reste `id`, `siteId` :
74
83
 
75
84
  ```bash
76
- npx nodefony create entity Session token:string! --table user_sessions --column-case snake --id-name session_id
85
+ npx nodefony create entity Session token:string:unique --table user_sessions --column-case snake --id-name session_id
77
86
  ```
78
87
 
79
88
  Faire suivre le TypeScript aurait transformé un réglage de nommage en refonte : le service, le
@@ -13,6 +13,15 @@ description: >
13
13
 
14
14
  # add-realtime-channel — le temps réel par sa couche
15
15
 
16
+ > 🧭 **Tu es arrivé ici directement ? Charge aussi `nodefony-dev`** — il porte la conduite
17
+ > commune (par où commencer, comment prouver que c'est fait) et les pièges qui coûtent une heure,
18
+ > serveur comme front. Cette page-ci ne couvre QUE son geste.
19
+ >
20
+ > Et si une réponse te manque, elle est probablement INSTALLÉE : `rg` ne descend pas dans
21
+ > `node_modules`, donc 70 pages de documentation y paraissent absentes. Une commande les lit, avec
22
+ > la ligne exacte :
23
+ > `node node_modules/@nodefony/devkit/skills/nodefony-dev/scripts/docs.mjs <termes>`.
24
+
16
25
  > ⚖️ **La confiance n'exclut pas le contrôle.** Un canal sans politique est **public par
17
26
  > construction** — c'est le comportement voulu du framework, pas un oubli. Ce qui n'est pas
18
27
  > déclaré fermé est ouvert.
@@ -14,6 +14,15 @@ description: >
14
14
 
15
15
  # add-service — un service que le conteneur connaît
16
16
 
17
+ > 🧭 **Tu es arrivé ici directement ? Charge aussi `nodefony-dev`** — il porte la conduite
18
+ > commune (par où commencer, comment prouver que c'est fait) et les pièges qui coûtent une heure,
19
+ > serveur comme front. Cette page-ci ne couvre QUE son geste.
20
+ >
21
+ > Et si une réponse te manque, elle est probablement INSTALLÉE : `rg` ne descend pas dans
22
+ > `node_modules`, donc 70 pages de documentation y paraissent absentes. Une commande les lit, avec
23
+ > la ligne exacte :
24
+ > `node node_modules/@nodefony/devkit/skills/nodefony-dev/scripts/docs.mjs <termes>`.
25
+
17
26
  > ⚖️ **La confiance n'exclut pas le contrôle.** Un service qui compile n'est pas un service
18
27
  > enregistré. Le seul juge est l'application en marche.
19
28
 
@@ -1,40 +1,48 @@
1
1
  ---
2
2
  name: nodefony-browser
3
3
  description: >
4
- Ouvre un écran de ton application dans un navigateur piloté pour le VOIR et surtout le MESURER —
4
+ Ouvre un écran de ton application Nodefony dans un navigateur piloté pour le VOIR et surtout le MESURER —
5
5
  contrastes et tailles réellement calculés par le moteur de rendu, audit d'accessibilité par
6
- axe-core, erreurs de console, requêtes HTTP, frames WebSocket. Fonctionne sur ta machine
7
- (Playwright) ou dans un conteneur jetable, au choix. Porte les sondes prêtes à l'emploi, le choix
8
- du thème clair ou sombre — un défaut d'affichage n'existe souvent que dans l'un des deux —, les
9
- contraintes de réseau qui font répondre `421` ou `401` à une application pourtant saine, et les
10
- pièges qui font conclure FAUX : mesurer avant que l'écran soit peuplé, observer un bundle qui
11
- n'est plus celui du code, prendre une condition d'arrêt qui réussit toujours. Sait aussi piloter
12
- un socket temps réel de bout en bout : accueil, abonnement à un canal, action, latence médiane,
13
- pont API, reconnexion. À charger AVANT de conclure quoi que ce soit sur un écran.
6
+ axe-core, erreurs de console, requêtes HTTP, frames WebSocket, sur ta machine ou dans un
7
+ conteneur jetable. Porte les sondes prêtes à l'emploi, le thème clair ou sombre — un défaut
8
+ d'affichage n'existe souvent que dans l'un des deux —, et les pièges qui font conclure FAUX :
9
+ mesurer avant que l'écran soit peuplé, ou observer un bundle qui n'est plus celui du code. Sait
10
+ aussi piloter un socket temps réel de bout en bout. À charger AVANT de conclure quoi que ce
11
+ soit sur un écran.
14
12
  Déclencheurs : "regarde l'écran", "vérifie l'affichage", "est-ce que ça s'affiche ?",
15
- "montre-moi la page", "lis la console", "y a-t-il des erreurs JS ?", "mesure le contraste",
16
- "cette couleur est-elle lisible ?", "capture d'écran", "vérifie l'accessibilité",
17
- "audit accessibilité", "audit WCAG", "en mode clair", "en mode sombre", "le thème sombre",
18
- "la page est-elle rapide ?", "temps de chargement", "responsive ?",
19
- "quelles requêtes fait la page ?", "le temps réel arrive-t-il jusqu'à l'écran ?",
20
- "teste le socket", "mesure la latence du websocket", "le canal pousse-t-il ?",
21
- "l'application démarre-t-elle vraiment ?".
13
+ "lis la console", "y a-t-il des erreurs JS ?", "mesure le contraste", "capture d'écran",
14
+ "vérifie l'accessibilité", "audit WCAG", "en mode sombre", "la page est-elle rapide ?",
15
+ "quelles requêtes fait la page ?", "teste le socket".
22
16
  ---
23
17
 
24
18
  # see-screen — voir et MESURER un écran
25
19
 
20
+ > 🧭 **Tu es arrivé ici directement ? Charge aussi `nodefony-dev`** — il porte la conduite
21
+ > commune (par où commencer, comment prouver que c'est fait) et les pièges qui coûtent une heure,
22
+ > serveur comme front. Cette page-ci ne couvre QUE son geste.
23
+ >
24
+ > Et si une réponse te manque, elle est probablement INSTALLÉE : `rg` ne descend pas dans
25
+ > `node_modules`, donc 70 pages de documentation y paraissent absentes. Une commande les lit, avec
26
+ > la ligne exacte :
27
+ > `node node_modules/@nodefony/devkit/skills/nodefony-dev/scripts/docs.mjs <termes>`.
28
+
26
29
  > ⚖️ **La confiance n'exclut pas le contrôle.** Un `curl` prouve qu'une route répond ; il ne dit
27
30
  > pas si l'écran se monte, s'alimente et ne crie pas dans la console.
28
31
 
29
32
  ## Le geste — sur ta machine
30
33
 
31
34
  ```bash
32
- npm run see:setup # dans une application générée — pose `playwright` et `axe-core`
33
- node node_modules/@nodefony/devkit/skills/nodefony-browser/scripts/inspect.mjs /
35
+ npx nodefony see / # dans une application : mesure l'écran
36
+ npx nodefony see / --install # la même, en posant d'abord `playwright` et `axe-core`
34
37
  ```
35
38
 
36
- Hors d'une application générée, le premier pas s'écrit en toutes lettres : `npm i -D playwright
37
- axe-core`, puis `npx playwright install chromium` si aucun navigateur n'est déjà là (§ suivant).
39
+ La commande résout elle-même la sonde et **dit ce qui manque** plutôt que d'échouer sur une trace de
40
+ résolution. Elle n'installe rien sans `--install` : l'outillage d'un navigateur piloté pèse des
41
+ centaines de mégaoctets une fois les navigateurs posés.
42
+
43
+ Hors d'une application Nodefony, le premier pas s'écrit en toutes lettres : `npm i -D playwright
44
+ axe-core`, puis `npx playwright install chromium` si aucun navigateur n'est déjà là (§ suivant), et
45
+ la sonde se lance par son chemin (`node node_modules/@nodefony/devkit/skills/nodefony-browser/scripts/inspect.mjs /`).
38
46
 
39
47
  C'est tout. Les sondes **constatent** où elles s'exécutent : sur ta machine elles visent
40
48
  `https://127.0.0.1:5152` et déposent leurs captures dans `tmp/browser/`. Rien à configurer tant que
@@ -275,9 +283,9 @@ Lighthouse complet, y compris **derrière une authentification** — ce que l'ex
275
283
  ne sait pas faire sur une application protégée.
276
284
 
277
285
  ```bash
278
- npm run audit:setup # pose `lighthouse` — SÉPARÉ de `see:setup` : une vingtaine
279
- # de mégaoctets, que tu ne paies que si tu audites
280
- npm run audit:web -- /tableau-de-bord
286
+ npx nodefony see /tableau-de-bord --audit # audite
287
+ npx nodefony see /tableau-de-bord --audit --install # pose `lighthouse` (une vingtaine de
288
+ # mégaoctets, payés seulement si tu audites)
281
289
  ```
282
290
 
283
291
  Hors d'une application générée, ou pour passer des identifiants :