@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.
- package/dist/_virtual/{_@oxc-project_runtime@0.149.0 → _@oxc-project_runtime@0.150.0}/helpers/esm/decorate.js +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.149.0 → _@oxc-project_runtime@0.150.0}/helpers/esm/decorateMetadata.js +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.149.0 → _@oxc-project_runtime@0.150.0}/helpers/esm/decorateParam.js +1 -1
- package/dist/index.js +2 -2
- package/dist/nodefony/controllers/DevkitController.js +2 -2
- package/dist/nodefony/controllers/McpController.js +3 -3
- package/dist/nodefony/service/DevkitService.js +2 -2
- package/docs/index.md +2 -2
- package/package.json +8 -8
- package/skills/nodefony-add-crud/SKILL.md +11 -2
- package/skills/nodefony-add-realtime-channel/SKILL.md +9 -0
- package/skills/nodefony-add-service/SKILL.md +9 -0
- package/skills/nodefony-browser/SKILL.md +31 -23
- package/skills/nodefony-dev/SKILL.md +497 -0
- package/skills/nodefony-dev/scripts/docs.mjs +544 -0
- package/skills/nodefony-devops/SKILL.md +198 -0
- package/skills/nodefony-devops/references/compose.md +125 -0
- package/skills/nodefony-devops/references/frontal.md +119 -0
- package/skills/nodefony-devops/references/image.md +136 -0
- package/skills/nodefony-devops/references/kubernetes.md +189 -0
- package/skills/nodefony-devops/references/podman.md +103 -0
- package/skills/nodefony-devops/references/secrets.md +108 -0
- package/skills/nodefony-devops/references/variables.md +174 -0
- package/skills/nodefony-migrate-schema/SKILL.md +50 -17
- package/skills/nodefony-protect-route/SKILL.md +78 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region \0@oxc-project+runtime@0.
|
|
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.
|
|
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
|
}
|
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.
|
|
5
|
-
import __decorate from "./_virtual/_@oxc-project_runtime@0.
|
|
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.
|
|
2
|
-
import __decorate from "../../_virtual/_@oxc-project_runtime@0.
|
|
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.
|
|
2
|
-
import __decorate from "../../_virtual/_@oxc-project_runtime@0.
|
|
3
|
-
import __decorateParam from "../../_virtual/_@oxc-project_runtime@0.
|
|
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.
|
|
4
|
-
import __decorate from "../../_virtual/_@oxc-project_runtime@0.
|
|
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
|
|
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.
|
|
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.
|
|
29
|
-
"@nodefony/http": "^10.0.0-alpha.
|
|
30
|
-
"nodefony": "^10.0.0-alpha.
|
|
31
|
-
"zod": "^4.6.
|
|
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.
|
|
37
|
-
"@nodefony/http": "^10.0.0-alpha.
|
|
38
|
-
"nodefony": "^10.0.0-alpha.
|
|
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[
|
|
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
|
|
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
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
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
|
-
|
|
33
|
-
|
|
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
|
-
|
|
37
|
-
|
|
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
|
-
|
|
279
|
-
|
|
280
|
-
|
|
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 :
|