nodefony 10.0.0-alpha.7 → 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 (53) hide show
  1. package/.ai/symbols.json +304 -27
  2. package/dist/node/cli/create.js +12 -2
  3. package/dist/node/cli/helpReport.js +8 -0
  4. package/dist/node/cli/projectScripts.js +109 -0
  5. package/dist/node/cli/scaffold/engine.js +99 -84
  6. package/dist/node/cli/scaffold/entityFields.js +78 -15
  7. package/dist/node/cli/scaffold/help.js +3 -3
  8. package/dist/node/cli/scaffold/spec.js +1 -1
  9. package/dist/node/cli/scaffold/versions.js +3 -2
  10. package/dist/node/cli/see.js +227 -0
  11. package/dist/node/cli/startMenu.js +1 -7
  12. package/dist/node/kernel/CliKernel.js +15 -0
  13. package/dist/node/kernel/commands/ScriptsCommand.js +82 -0
  14. package/dist/node/kernel/commands/SeeCommand.js +49 -0
  15. package/dist/node/package.js +1 -1
  16. package/dist/types/cli/helpReport.d.ts +19 -0
  17. package/dist/types/cli/projectScripts.d.ts +67 -0
  18. package/dist/types/cli/scaffold/engine.d.ts +2 -2
  19. package/dist/types/cli/scaffold/entityFields.d.ts +45 -6
  20. package/dist/types/cli/see.d.ts +90 -0
  21. package/dist/types/kernel/commands/ScriptsCommand.d.ts +32 -0
  22. package/dist/types/kernel/commands/SeeCommand.d.ts +33 -0
  23. package/man/nodefony.1 +7 -1
  24. package/package.json +3 -3
  25. package/templates/app/agent-instructions/AGENTS.md.tpl +421 -0
  26. package/templates/app/base/README.md.tpl +76 -34
  27. package/templates/app/base/package.json.tpl +32 -7
  28. package/templates/app/complete/github/workflows/production.yml.tpl +9 -0
  29. package/templates/entity/base/nodefony/entity/__PASCAL__.ts.tpl +36 -6
  30. package/templates/entity/tests/tests/__KEBAB__.e2e.test.ts.tpl +37 -7
  31. package/templates/entity/tests/tests/__KEBAB__.test.ts.tpl +23 -7
  32. package/dist/client/types/src/client/transport/websocket.d.ts +0 -5
  33. package/dist/types/client/transport/websocket.d.ts +0 -5
  34. package/templates/app/agents/AGENTS.md.tpl +0 -314
  35. package/templates/app/agents/nodefony/ajouter-une-brique.md.tpl +0 -60
  36. package/templates/app/agents/nodefony/avant-de-coder.md.tpl +0 -76
  37. package/templates/app/agents/nodefony/commandes.md.tpl +0 -44
  38. package/templates/app/agents/nodefony/depannage.md.tpl +0 -39
  39. package/templates/app/agents/nodefony/donnees-et-fichiers.md.tpl +0 -31
  40. package/templates/app/agents/nodefony/inspecter-l-app.md.tpl +0 -174
  41. package/templates/app/agents/nodefony/lancer-le-serveur.md.tpl +0 -50
  42. package/templates/app/agents/nodefony/securite-et-droits.md.tpl +0 -129
  43. package/templates/app/agents/nodefony/temps-reel.md.tpl +0 -3
  44. package/templates/app/agents/nodefony/variables-d-environnement.md.tpl +0 -56
  45. package/templates/front/angular/frontend/src/app/app.component.ts.tpl +0 -30
  46. package/templates/front/react/frontend/src/App.tsx.tpl +0 -26
  47. package/templates/front/svelte/frontend/src/App.svelte.tpl +0 -19
  48. package/templates/front/vue/frontend/src/App.vue.tpl +0 -23
  49. /package/templates/app/{agents → agent-instructions}/POINTEUR.md.tpl +0 -0
  50. /package/templates/app/{agents → agent-instructions}/client/angular.md +0 -0
  51. /package/templates/app/{agents → agent-instructions}/client/react.md +0 -0
  52. /package/templates/app/{agents → agent-instructions}/client/svelte.md +0 -0
  53. /package/templates/app/{agents → agent-instructions}/client/vue.md +0 -0
package/.ai/symbols.json CHANGED
@@ -2,14 +2,14 @@
2
2
  "version": "2.0.0",
3
3
  "repoRoot": ".",
4
4
  "stats": {
5
- "files": 842,
6
- "symbols": 4140,
7
- "classes": 394,
8
- "interfaces": 1104,
9
- "types": 451,
5
+ "files": 847,
6
+ "symbols": 4172,
7
+ "classes": 395,
8
+ "interfaces": 1112,
9
+ "types": 452,
10
10
  "enums": 4,
11
- "functions": 1778,
12
- "constants": 409
11
+ "functions": 1798,
12
+ "constants": 411
13
13
  },
14
14
  "symbols": {
15
15
  "Cli": {
@@ -2293,6 +2293,64 @@
2293
2293
  "module": "@nodefony/core",
2294
2294
  "description": "Racine du PROJET Nodefony courant (app générée / app utilisateur) : remonte depuis `from` jusqu'au premier dossier portant `nodefony.config.ts` + `package.json`. Deux consommateurs, une seule défin…"
2295
2295
  },
2296
+ "IProjectScript": {
2297
+ "name": "IProjectScript",
2298
+ "kind": "interface",
2299
+ "file": "src/nodefony/src/cli/projectScripts.ts",
2300
+ "exported": true,
2301
+ "module": "@nodefony/core",
2302
+ "extends": null,
2303
+ "description": "Un script `npm` du projet courant, tel que l'aide le rend."
2304
+ },
2305
+ "IProjectScriptGroup": {
2306
+ "name": "IProjectScriptGroup",
2307
+ "kind": "interface",
2308
+ "file": "src/nodefony/src/cli/projectScripts.ts",
2309
+ "exported": true,
2310
+ "module": "@nodefony/core",
2311
+ "extends": null,
2312
+ "description": "Une famille de scripts, telle que l'aide la rend."
2313
+ },
2314
+ "readProjectScripts": {
2315
+ "name": "readProjectScripts",
2316
+ "kind": "function",
2317
+ "file": "src/nodefony/src/cli/projectScripts.ts",
2318
+ "exported": true,
2319
+ "module": "@nodefony/core",
2320
+ "description": "Apparie les scripts d'un manifeste avec leurs descriptions. Fonction **pure** : elle ne touche pas au disque, ce qui la rend éprouvable sans monter un projet. Les scripts sortent dans l'ordre du ma…"
2321
+ },
2322
+ "loadProjectScripts": {
2323
+ "name": "loadProjectScripts",
2324
+ "kind": "function",
2325
+ "file": "src/nodefony/src/cli/projectScripts.ts",
2326
+ "exported": true,
2327
+ "module": "@nodefony/core",
2328
+ "description": "Lit les scripts du `package.json` d'un dossier. Ne lève **jamais** : un projet sans manifeste, illisible ou mal formé rend une liste vide. Cette fonction sert à enrichir une aide — une aide qui pla…"
2329
+ },
2330
+ "formatProjectScripts": {
2331
+ "name": "formatProjectScripts",
2332
+ "kind": "function",
2333
+ "file": "src/nodefony/src/cli/projectScripts.ts",
2334
+ "exported": true,
2335
+ "module": "@nodefony/core",
2336
+ "description": "Rend les scripts en texte aligné, pour la fin d'une aide de commande. Rend une chaîne **vide** quand aucun script ne porte de description : une section vide, ou une liste de noms sans explication, …"
2337
+ },
2338
+ "groupOfScript": {
2339
+ "name": "groupOfScript",
2340
+ "kind": "function",
2341
+ "file": "src/nodefony/src/cli/projectScripts.ts",
2342
+ "exported": true,
2343
+ "module": "@nodefony/core",
2344
+ "description": "Range un script dans sa famille."
2345
+ },
2346
+ "groupProjectScripts": {
2347
+ "name": "groupProjectScripts",
2348
+ "kind": "function",
2349
+ "file": "src/nodefony/src/cli/projectScripts.ts",
2350
+ "exported": true,
2351
+ "module": "@nodefony/core",
2352
+ "description": "Groupe les scripts décrits, familles vides retirées. Dans une famille, l'ordre est **alphabétique** : il est stable, et il place naturellement `build` avant `build:core`, `test` avant `test:all`."
2353
+ },
2296
2354
  "askPasswordMasked": {
2297
2355
  "name": "askPasswordMasked",
2298
2356
  "kind": "function",
@@ -2342,6 +2400,70 @@
2342
2400
  "module": "@nodefony/core",
2343
2401
  "description": "Interface `readline` ANCRÉE — même garantie, pour le front natif du scaffold. Le scaffold de `create app` ne passe pas par `@inquirer/prompts` : il pose ses questions en `node:readline/promises`, s…"
2344
2402
  },
2403
+ "SeeMode": {
2404
+ "name": "SeeMode",
2405
+ "kind": "type",
2406
+ "file": "src/nodefony/src/cli/see.ts",
2407
+ "exported": true,
2408
+ "module": "@nodefony/core",
2409
+ "description": "Le mode demandé — l'inspection est le cas nominal."
2410
+ },
2411
+ "pickMode": {
2412
+ "name": "pickMode",
2413
+ "kind": "function",
2414
+ "file": "src/nodefony/src/cli/see.ts",
2415
+ "exported": true,
2416
+ "module": "@nodefony/core",
2417
+ "description": "Lit le mode dans une ligne de commande."
2418
+ },
2419
+ "scriptArguments": {
2420
+ "name": "scriptArguments",
2421
+ "kind": "function",
2422
+ "file": "src/nodefony/src/cli/see.ts",
2423
+ "exported": true,
2424
+ "module": "@nodefony/core",
2425
+ "description": "Les arguments à passer au script, mode retiré."
2426
+ },
2427
+ "missingDependencies": {
2428
+ "name": "missingDependencies",
2429
+ "kind": "function",
2430
+ "file": "src/nodefony/src/cli/see.ts",
2431
+ "exported": true,
2432
+ "module": "@nodefony/core",
2433
+ "description": "Les paquets d'un mode qui manquent à un projet. Constaté sur disque, jamais déduit d'un `package.json` : ce qui compte est ce qui est INSTALLÉ. Un paquet déclaré mais absent de `node_modules` ferai…"
2434
+ },
2435
+ "resolveBrowserScript": {
2436
+ "name": "resolveBrowserScript",
2437
+ "kind": "function",
2438
+ "file": "src/nodefony/src/cli/see.ts",
2439
+ "exported": true,
2440
+ "module": "@nodefony/core",
2441
+ "description": "Le script du navigateur piloté, pour un mode."
2442
+ },
2443
+ "runSeeCommand": {
2444
+ "name": "runSeeCommand",
2445
+ "kind": "function",
2446
+ "file": "src/nodefony/src/cli/see.ts",
2447
+ "exported": true,
2448
+ "module": "@nodefony/core",
2449
+ "description": "Commande `nodefony see` — ouvrir une page dans un navigateur piloté et la MESURER. Trois modes sous une seule entrée, et c'est délibéré : déplacer cinq scripts npm vers trois commandes n'aurait fai…"
2450
+ },
2451
+ "BROWSER_SCRIPTS_DIR": {
2452
+ "name": "BROWSER_SCRIPTS_DIR",
2453
+ "kind": "const",
2454
+ "file": "src/nodefony/src/cli/see.ts",
2455
+ "exported": true,
2456
+ "module": "@nodefony/core",
2457
+ "description": "Où vivent les scripts du navigateur piloté, dans le paquet qui les publie. C'est un CONTRAT entre deux paquets : le cœur compose ce chemin, `@nodefony/devkit` le sert. Exporté pour qu'un test le co…"
2458
+ },
2459
+ "BROWSER_PROBES": {
2460
+ "name": "BROWSER_PROBES",
2461
+ "kind": "const",
2462
+ "file": "src/nodefony/src/cli/see.ts",
2463
+ "exported": true,
2464
+ "module": "@nodefony/core",
2465
+ "description": "Les sondes attendues dans ce dossier, une par mode."
2466
+ },
2345
2467
  "IStartMenuModuleCommand": {
2346
2468
  "name": "IStartMenuModuleCommand",
2347
2469
  "kind": "interface",
@@ -6789,7 +6911,7 @@
6789
6911
  "exported": true,
6790
6912
  "module": "@nodefony/core",
6791
6913
  "extends": null,
6792
- "description": "Un champ déclaré, après analyse de `title:string!` ou `author:ref:User`."
6914
+ "description": "Un champ déclaré, après analyse de `title:string` ou `author:ref:User`."
6793
6915
  },
6794
6916
  "IEntityIndex": {
6795
6917
  "name": "IEntityIndex",
@@ -6859,7 +6981,7 @@
6859
6981
  "file": "src/nodefony/src/cli/scaffold/entityFields.ts",
6860
6982
  "exported": true,
6861
6983
  "module": "@nodefony/core",
6862
- "description": "Analyse la déclaration textuelle des champs. Grammaire : `nom:type[?][!][=defaut][:index]` · `nom:ref:Entité[?][!][:index]` - `?` → nullable (sinon **NOT NULL** : une colonne nullable est une décis…"
6984
+ "description": "Analyse la déclaration textuelle des champs. Grammaire : `nom:type[?][=defaut][:index|:unique]` · `nom:ref:Entité[?][:index|:unique]` - `?` → nullable (sinon **NOT NULL** : une colonne nullable est…"
6863
6985
  },
6864
6986
  "parseEntityIndexes": {
6865
6987
  "name": "parseEntityIndexes",
@@ -6877,6 +6999,14 @@
6877
6999
  "module": "@nodefony/core",
6878
7000
  "description": "Ce que chaque type de champ devient, dans chaque moteur. Montrer la traduction plutôt que la promettre : `json` devient `jsonb` en PostgreSQL et une colonne texte en SQLite, `string` un `varchar(25…"
6879
7001
  },
7002
+ "entityTableSymbol": {
7003
+ "name": "entityTableSymbol",
7004
+ "kind": "function",
7005
+ "file": "src/nodefony/src/cli/scaffold/entityFields.ts",
7006
+ "exported": true,
7007
+ "module": "@nodefony/core",
7008
+ "description": "Nom de la variable qui porte la table Drizzle d'une entité (`User` → `userTable`). Une seule implémentation, parce qu'il y a deux producteurs : le gabarit d'entité DÉCLARE cette variable, et une en…"
7009
+ },
6880
7010
  "buildEntityCodegen": {
6881
7011
  "name": "buildEntityCodegen",
6882
7012
  "kind": "function",
@@ -8809,16 +8939,6 @@
8809
8939
  "module": "@nodefony/core",
8810
8940
  "description": "Catégorie (`msgid`) réservée à ce que le transport dit de LUI-MÊME. Les entrées qui la portent sont **exclues** de la remontée : sans cette exclusion, un envoi qui échoue journalise son échec, ce q…"
8811
8941
  },
8812
- "Websocket": {
8813
- "name": "Websocket",
8814
- "kind": "class",
8815
- "file": "src/nodefony/src/client/transport/websocket.ts",
8816
- "exported": true,
8817
- "module": "@nodefony/core",
8818
- "extends": "Service",
8819
- "implements": [],
8820
- "decorators": []
8821
- },
8822
8942
  "NodefonyVueOptions": {
8823
8943
  "name": "NodefonyVueOptions",
8824
8944
  "kind": "interface",
@@ -10667,6 +10787,28 @@
10667
10787
  "module": "@nodefony/core",
10668
10788
  "description": "Applique la topologie résolue — flow **PARTAGÉ** par les commandes de lancement (`cluster`, `production`). Appelé depuis leur `onKernelStart` (phase `onStart`), donc AVANT que l'unique Kernel ne dé…"
10669
10789
  },
10790
+ "Scripts": {
10791
+ "name": "Scripts",
10792
+ "kind": "class",
10793
+ "file": "src/nodefony/src/kernel/commands/ScriptsCommand.ts",
10794
+ "exported": true,
10795
+ "module": "@nodefony/core",
10796
+ "extends": "Command",
10797
+ "implements": [],
10798
+ "decorators": [],
10799
+ "description": "Commande `nodefony scripts` — ce que font les scripts `npm` de ce projet. `package.json` est du JSON : il n'accepte aucun commentaire, et le seul indice de ce que fait un script y est son NOM. Sur …"
10800
+ },
10801
+ "See": {
10802
+ "name": "See",
10803
+ "kind": "class",
10804
+ "file": "src/nodefony/src/kernel/commands/SeeCommand.ts",
10805
+ "exported": true,
10806
+ "module": "@nodefony/core",
10807
+ "extends": "Command",
10808
+ "implements": [],
10809
+ "decorators": [],
10810
+ "description": "Commande `nodefony see` — ouvrir une page dans un navigateur piloté et la MESURER. **Exécutée en « standalone » (zéro boot)**, comme `doctor`, `env` et `card` : l'enregistrement ici sert au help et…"
10811
+ },
10670
10812
  "@nodefony/core:Status": {
10671
10813
  "name": "Status",
10672
10814
  "kind": "class",
@@ -16912,8 +17054,7 @@
16912
17054
  "implements": [
16913
17055
  "IResolver"
16914
17056
  ],
16915
- "decorators": [],
16916
- "description": "Résout une route vers son couple controller/action et exécute l'action — UN Resolver est alloué par requête HTTP (et par connexion WS, réutilisé par message). **POJO volontaire** (V3.1) : n'étend P…"
17057
+ "decorators": []
16917
17058
  },
16918
17059
  "ControllerWithInitialize": {
16919
17060
  "name": "ControllerWithInitialize",
@@ -22843,6 +22984,14 @@
22843
22984
  "module": "@nodefony/drizzle",
22844
22985
  "description": "Ce qu'un refus veut dire QUAND ON CONNAÎT LE MODE DE SCHÉMA. Le même fait mécanique n'a pas la même cause selon le mode, et le geste change avec la cause. Constaté en exécutant la commande pour de …"
22845
22986
  },
22987
+ "alreadyInTargetState": {
22988
+ "name": "alreadyInTargetState",
22989
+ "kind": "function",
22990
+ "file": "src/packages/@nodefony/drizzle/nodefony/src/migrator/explain.ts",
22991
+ "exported": true,
22992
+ "module": "@nodefony/drizzle",
22993
+ "description": "L'échec vient-il de ce que la base est DÉJÀ dans l'état que la migration vise ? Le cas est fréquent et sa sortie n'était nommée nulle part : le message de reprise proposait de corriger le fichier o…"
22994
+ },
22846
22995
  "MIGRATION_FORMAT_VERSION": {
22847
22996
  "name": "MIGRATION_FORMAT_VERSION",
22848
22997
  "kind": "const",
@@ -23303,6 +23452,14 @@
23303
23452
  "module": "@nodefony/drizzle",
23304
23453
  "description": "L'effacement d'une base est-il ACCEPTÉ dans cet environnement ? **Liste blanche, jamais liste noire** : seul `development` passe. Un `staging`, un `test`, un environnement que personne n'a pensé à …"
23305
23454
  },
23455
+ "generateApplyAllowed": {
23456
+ "name": "generateApplyAllowed",
23457
+ "kind": "function",
23458
+ "file": "src/packages/@nodefony/drizzle/nodefony/src/migrator/resolve.ts",
23459
+ "exported": true,
23460
+ "module": "@nodefony/drizzle",
23461
+ "description": "`orm:generate --apply` est-il recevable dans cet environnement ? Écrire une migration et l'appliquer dans le même souffle suppose qu'on relit le SQL produit entre les deux — ce que personne ne fait…"
23462
+ },
23306
23463
  "resolveDdlMode": {
23307
23464
  "name": "resolveDdlMode",
23308
23465
  "kind": "function",
@@ -23311,6 +23468,14 @@
23311
23468
  "module": "@nodefony/drizzle",
23312
23469
  "description": "Le mode de schéma qui s'applique à un connecteur. Règle des défauts, et son pourquoi : **appliquer des migrations au démarrage n'est jamais un défaut**. C'est la norme unanime des outils de migrati…"
23313
23470
  },
23471
+ "appVersionsMigrations": {
23472
+ "name": "appVersionsMigrations",
23473
+ "kind": "function",
23474
+ "file": "src/packages/@nodefony/drizzle/nodefony/src/migrator/resolve.ts",
23475
+ "exported": true,
23476
+ "module": "@nodefony/drizzle",
23477
+ "description": "L'application versionne-t-elle au moins une migration ? Lecture SYNCHRONE et bornée à un `readdirSync` par connecteur au démarrage — hors de tout chemin de requête. Elle doit l'être : le mode de sc…"
23478
+ },
23314
23479
  "resolveCheckMode": {
23315
23480
  "name": "resolveCheckMode",
23316
23481
  "kind": "function",
@@ -23709,6 +23874,58 @@
23709
23874
  "module": "@nodefony/drizzle",
23710
23875
  "description": "Séparateur de statements produit par drizzle-kit."
23711
23876
  },
23877
+ "IResolvedForeignKey": {
23878
+ "name": "IResolvedForeignKey",
23879
+ "kind": "interface",
23880
+ "file": "src/packages/@nodefony/drizzle/nodefony/src/orm-core/ddlPlan.ts",
23881
+ "exported": true,
23882
+ "module": "@nodefony/drizzle",
23883
+ "extends": null,
23884
+ "description": "Ordre de création des tables, et contraintes qu'il faut renoncer à poser. Module **pur** (aucune base, aucun Drizzle) : c'est la seule partie du DDL dérivé qui demande un raisonnement, donc la seul…"
23885
+ },
23886
+ "ITableDependency": {
23887
+ "name": "ITableDependency",
23888
+ "kind": "interface",
23889
+ "file": "src/packages/@nodefony/drizzle/nodefony/src/orm-core/ddlPlan.ts",
23890
+ "exported": true,
23891
+ "module": "@nodefony/drizzle",
23892
+ "extends": null,
23893
+ "description": "Une table à créer, et les tables que ses clés étrangères désignent."
23894
+ },
23895
+ "IOmittedForeignKey": {
23896
+ "name": "IOmittedForeignKey",
23897
+ "kind": "interface",
23898
+ "file": "src/packages/@nodefony/drizzle/nodefony/src/orm-core/ddlPlan.ts",
23899
+ "exported": true,
23900
+ "module": "@nodefony/drizzle",
23901
+ "extends": null,
23902
+ "description": "Une contrainte qu'on renonce à poser, et la raison qui le commande."
23903
+ },
23904
+ "IDdlPlan": {
23905
+ "name": "IDdlPlan",
23906
+ "kind": "interface",
23907
+ "file": "src/packages/@nodefony/drizzle/nodefony/src/orm-core/ddlPlan.ts",
23908
+ "exported": true,
23909
+ "module": "@nodefony/drizzle",
23910
+ "extends": null,
23911
+ "description": "Ordre de création, et ce qu'il a fallu abandonner en chemin."
23912
+ },
23913
+ "planTableCreation": {
23914
+ "name": "planTableCreation",
23915
+ "kind": "function",
23916
+ "file": "src/packages/@nodefony/drizzle/nodefony/src/orm-core/ddlPlan.ts",
23917
+ "exported": true,
23918
+ "module": "@nodefony/drizzle",
23919
+ "description": "Trie les tables pour que chaque cible naisse avant qui la désigne. Tri topologique (Kahn) sur le graphe des dépendances, avec deux écarts assumés au manuel : - **l'auto-référence ne compte pas** (`…"
23920
+ },
23921
+ "explainOmittedForeignKeys": {
23922
+ "name": "explainOmittedForeignKeys",
23923
+ "kind": "function",
23924
+ "file": "src/packages/@nodefony/drizzle/nodefony/src/orm-core/ddlPlan.ts",
23925
+ "exported": true,
23926
+ "module": "@nodefony/drizzle",
23927
+ "description": "Met en mots les contraintes abandonnées — le message que l'appelant journalise. Écrit pour être lu par celui qui découvre le problème dans ses journaux : il nomme les tables, la cause, et ce qu'il …"
23928
+ },
23712
23929
  "DrizzleOrm": {
23713
23930
  "name": "DrizzleOrm",
23714
23931
  "kind": "class",
@@ -23804,6 +24021,14 @@
23804
24021
  "extends": null,
23805
24022
  "description": "Pilotage transactionnel d'**une connexion**, abstrait du driver (INTERNE). Existe parce que les trois drivers pilotent une transaction différemment : `better-sqlite3` est synchrone sur une connexio…"
23806
24023
  },
24024
+ "seedEntityRow": {
24025
+ "name": "seedEntityRow",
24026
+ "kind": "function",
24027
+ "file": "src/packages/@nodefony/drizzle/nodefony/src/orm-core/seedRow.ts",
24028
+ "exported": true,
24029
+ "module": "@nodefony/drizzle",
24030
+ "description": "Insère une ligne minimale dans la table d'une entité, et rend son identifiant. Destiné aux **tests** : dès qu'une entité porte une relation (`author:ref:Author`), sa colonne est une vraie clé étran…"
24031
+ },
23807
24032
  "ViteBuilder": {
23808
24033
  "name": "ViteBuilder",
23809
24034
  "kind": "class",
@@ -23939,7 +24164,7 @@
23939
24164
  "implements": [],
23940
24165
  "decorators": []
23941
24166
  },
23942
- "@nodefony/http:Websocket": {
24167
+ "Websocket": {
23943
24168
  "name": "Websocket",
23944
24169
  "kind": "class",
23945
24170
  "file": "src/packages/@nodefony/http/nodefony/service/servers/server-websocket.ts",
@@ -26334,7 +26559,7 @@
26334
26559
  "file": "src/packages/@nodefony/security/nodefony/src/realtime/frameAuthorizer.ts",
26335
26560
  "exported": true,
26336
26561
  "module": "@nodefony/security",
26337
- "description": "Politique système par défaut des canaux d'**introspection serveur** : réservés aux administrateurs. DURCISSEMENT Zero Trust (P6) : avant, « authentifié suffisait » (tout `ROLE_USER` lisait `nodefon…"
26562
+ "description": "Politique système par défaut des canaux d'**introspection serveur** : réservés à l'exploitant de l'INSTANCE, pas à l'administrateur d'une application. Ce que ces canaux exposent est l'état du **pro…"
26338
26563
  },
26339
26564
  "DEFAULT_SYSTEM_PREFIXES": {
26340
26565
  "name": "DEFAULT_SYSTEM_PREFIXES",
@@ -26350,7 +26575,7 @@
26350
26575
  "file": "src/packages/@nodefony/security/nodefony/src/realtime/frameAuthorizer.ts",
26351
26576
  "exported": true,
26352
26577
  "module": "@nodefony/security",
26353
- "description": "Plancher des canaux de **sécurité** (`nodefony:audit`, P6.14 lot 4) : réservé au super-admin Nodefony (`ROLE_NODEFONY_ADMIN`) — un cran AU-DESSUS du plancher d'observabilité générique (`ROLE_ADMIN`…"
26578
+ "description": "Plancher des canaux de **sécurité** (`nodefony:audit`) : réservé à l'exploitant de l'instance (`ROLE_NODEFONY_ADMIN`). Même échelle que {@link SYSTEM_CHANNEL_POLICY} — le journal d'audit du pod n'e…"
26354
26579
  },
26355
26580
  "UPLINK_CHANNEL_POLICY": {
26356
26581
  "name": "UPLINK_CHANNEL_POLICY",
@@ -28159,7 +28384,6 @@
28159
28384
  "ServiceWithInit",
28160
28385
  "Module",
28161
28386
  "Fetch",
28162
- "Websocket",
28163
28387
  "Injector",
28164
28388
  "DevkitService",
28165
28389
  "DocumentationService",
@@ -28348,6 +28572,8 @@
28348
28572
  "Menu",
28349
28573
  "Outdated",
28350
28574
  "Prod",
28575
+ "Scripts",
28576
+ "See",
28351
28577
  "Status",
28352
28578
  "Stop",
28353
28579
  "Symbols",
@@ -28955,6 +29181,8 @@
28955
29181
  "src/nodefony/src/kernel/commands/MenuCommand.ts",
28956
29182
  "src/nodefony/src/kernel/commands/OutdatedCommand.ts",
28957
29183
  "src/nodefony/src/kernel/commands/ProdCommand.ts",
29184
+ "src/nodefony/src/kernel/commands/ScriptsCommand.ts",
29185
+ "src/nodefony/src/kernel/commands/SeeCommand.ts",
28958
29186
  "src/nodefony/src/kernel/commands/StatusCommand.ts",
28959
29187
  "src/nodefony/src/kernel/commands/StopCommand.ts",
28960
29188
  "src/nodefony/src/kernel/commands/SymbolsCommand.ts",
@@ -28990,7 +29218,6 @@
28990
29218
  "src/nodefony/src/kernel/Kernel.ts",
28991
29219
  "src/nodefony/src/kernel/Module.ts",
28992
29220
  "src/nodefony/src/service/fetchService.ts",
28993
- "src/nodefony/src/client/transport/websocket.ts",
28994
29221
  "src/nodefony/src/kernel/decorators/kernelDecorator.ts",
28995
29222
  "src/nodefony/src/kernel/injector/injector.ts",
28996
29223
  "src/packages/@nodefony/devkit/nodefony/service/DevkitService.ts",
@@ -29627,7 +29854,8 @@
29627
29854
  "src/packages/@nodefony/drizzle/nodefony/src/DrizzleTotpSecretStore.ts",
29628
29855
  "src/packages/@nodefony/drizzle/nodefony/src/DrizzleUserRepository.ts",
29629
29856
  "src/packages/@nodefony/drizzle/nodefony/src/DrizzleWebAuthnCredentialStore.ts",
29630
- "src/packages/@nodefony/drizzle/nodefony/src/DrizzleWebhookStore.ts"
29857
+ "src/packages/@nodefony/drizzle/nodefony/src/DrizzleWebhookStore.ts",
29858
+ "src/packages/@nodefony/drizzle/nodefony/src/orm-core/seedRow.ts"
29631
29859
  ],
29632
29860
  "MediasoupController": [
29633
29861
  "src/modules/mediasoup/index.ts"
@@ -31056,6 +31284,7 @@
31056
31284
  "src/nodefony/src/cli/create.ts",
31057
31285
  "src/nodefony/src/cli/env.ts",
31058
31286
  "src/nodefony/src/cli/gitHooks.ts",
31287
+ "src/nodefony/src/cli/see.ts",
31059
31288
  "src/nodefony/src/cli/symbols.ts",
31060
31289
  "src/nodefony/src/cli/scaffold/engine.ts",
31061
31290
  "src/nodefony/src/kernel/checks/runDoctor.ts",
@@ -31089,6 +31318,7 @@
31089
31318
  "src/nodefony/src/cli/create.ts",
31090
31319
  "src/nodefony/src/cli/env.ts",
31091
31320
  "src/nodefony/src/cli/gitHooks.ts",
31321
+ "src/nodefony/src/cli/see.ts",
31092
31322
  "src/nodefony/src/cli/symbols.ts",
31093
31323
  "src/nodefony/src/cli/image/index.ts",
31094
31324
  "src/nodefony/src/service/dev/devStatusReport.ts"
@@ -31112,6 +31342,7 @@
31112
31342
  "src/nodefony/src/cli/create.ts",
31113
31343
  "src/nodefony/src/cli/env.ts",
31114
31344
  "src/nodefony/src/cli/gitHooks.ts",
31345
+ "src/nodefony/src/cli/see.ts",
31115
31346
  "src/nodefony/src/cli/symbols.ts",
31116
31347
  "src/nodefony/src/cli/image/index.ts",
31117
31348
  "src/nodefony/src/cli/scaffold/help.ts",
@@ -31280,6 +31511,7 @@
31280
31511
  "portableSpawn": [
31281
31512
  "src/nodefony/src/cli/create.ts",
31282
31513
  "src/nodefony/src/cli/licenses.ts",
31514
+ "src/nodefony/src/cli/see.ts",
31283
31515
  "src/nodefony/src/kernel/commands/BuildCommand.ts",
31284
31516
  "src/nodefony/src/kernel/commands/MenuCommand.ts",
31285
31517
  "src/packages/@nodefony/studio/nodefony/service/ScaffoldService.ts"
@@ -31667,6 +31899,8 @@
31667
31899
  "src/nodefony/src/kernel/commands/OutdatedCommand.ts",
31668
31900
  "src/nodefony/src/kernel/commands/ProdCommand.ts",
31669
31901
  "src/nodefony/src/kernel/commands/runtimeLauncher.ts",
31902
+ "src/nodefony/src/kernel/commands/ScriptsCommand.ts",
31903
+ "src/nodefony/src/kernel/commands/SeeCommand.ts",
31670
31904
  "src/nodefony/src/kernel/commands/StatusCommand.ts",
31671
31905
  "src/nodefony/src/kernel/commands/StopCommand.ts",
31672
31906
  "src/nodefony/src/kernel/commands/SymbolsCommand.ts",
@@ -31878,6 +32112,14 @@
31878
32112
  "IHelpOption": [
31879
32113
  "src/nodefony/src/kernel/CliKernel.ts"
31880
32114
  ],
32115
+ "loadProjectScripts": [
32116
+ "src/nodefony/src/kernel/CliKernel.ts",
32117
+ "src/nodefony/src/kernel/commands/ScriptsCommand.ts"
32118
+ ],
32119
+ "groupProjectScripts": [
32120
+ "src/nodefony/src/kernel/CliKernel.ts",
32121
+ "src/nodefony/src/kernel/commands/ScriptsCommand.ts"
32122
+ ],
31881
32123
  "isDoctorCommand": [
31882
32124
  "src/nodefony/src/kernel/CliKernel.ts"
31883
32125
  ],
@@ -31908,6 +32150,16 @@
31908
32150
  "Symbols": [
31909
32151
  "src/nodefony/src/kernel/CliKernel.ts"
31910
32152
  ],
32153
+ "Scripts": [
32154
+ "src/nodefony/src/kernel/CliKernel.ts"
32155
+ ],
32156
+ "See": [
32157
+ "src/nodefony/src/kernel/CliKernel.ts"
32158
+ ],
32159
+ "runSeeCommand": [
32160
+ "src/nodefony/src/kernel/CliKernel.ts",
32161
+ "src/nodefony/src/kernel/commands/SeeCommand.ts"
32162
+ ],
31911
32163
  "runSymbolsCommand": [
31912
32164
  "src/nodefony/src/kernel/CliKernel.ts",
31913
32165
  "src/nodefony/src/kernel/commands/SymbolsCommand.ts"
@@ -32821,6 +33073,9 @@
32821
33073
  "buildEntityCodegen": [
32822
33074
  "src/nodefony/src/cli/scaffold/engine.ts"
32823
33075
  ],
33076
+ "entityTableSymbol": [
33077
+ "src/nodefony/src/cli/scaffold/engine.ts"
33078
+ ],
32824
33079
  "parseRowFieldNames": [
32825
33080
  "src/nodefony/src/cli/scaffold/engine.ts"
32826
33081
  ],
@@ -33568,6 +33823,8 @@
33568
33823
  "src/nodefony/src/kernel/commands/MenuCommand.ts",
33569
33824
  "src/nodefony/src/kernel/commands/OutdatedCommand.ts",
33570
33825
  "src/nodefony/src/kernel/commands/ProdCommand.ts",
33826
+ "src/nodefony/src/kernel/commands/ScriptsCommand.ts",
33827
+ "src/nodefony/src/kernel/commands/SeeCommand.ts",
33571
33828
  "src/nodefony/src/kernel/commands/StatusCommand.ts",
33572
33829
  "src/nodefony/src/kernel/commands/StopCommand.ts",
33573
33830
  "src/nodefony/src/kernel/commands/SymbolsCommand.ts",
@@ -34092,6 +34349,7 @@
34092
34349
  "src/packages/@nodefony/orm-core/nodefony/src/Entity.ts",
34093
34350
  "src/packages/@nodefony/orm-core/nodefony/src/EntityRegistry.ts",
34094
34351
  "src/packages/@nodefony/drizzle/nodefony/src/orm-core/DrizzleOrm.ts",
34352
+ "src/packages/@nodefony/drizzle/nodefony/src/orm-core/seedRow.ts",
34095
34353
  "src/packages/@nodefony/mongoose/nodefony/src/orm-core/MongooseOrm.ts",
34096
34354
  "src/packages/@nodefony/orm-core/nodefony/src/decorators/entitiesDecorator.ts",
34097
34355
  "src/packages/@nodefony/orm-core/nodefony/src/decorators/entityDecorator.ts"
@@ -34633,6 +34891,7 @@
34633
34891
  ],
34634
34892
  "readMigrationEnv": [
34635
34893
  "src/packages/@nodefony/drizzle/nodefony/command/migrateShared.ts",
34894
+ "src/packages/@nodefony/drizzle/nodefony/command/orm-generate.ts",
34636
34895
  "src/packages/@nodefony/drizzle/nodefony/command/orm-migrate.ts",
34637
34896
  "src/packages/@nodefony/drizzle/nodefony/command/orm-reset.ts",
34638
34897
  "src/packages/@nodefony/drizzle/nodefony/service/DrizzleService.ts",
@@ -34740,6 +34999,9 @@
34740
34999
  "src/packages/@nodefony/drizzle/nodefony/command/orm-migrate-baseline.ts",
34741
35000
  "src/packages/@nodefony/drizzle/nodefony/service/DrizzleService.ts"
34742
35001
  ],
35002
+ "generateApplyAllowed": [
35003
+ "src/packages/@nodefony/drizzle/nodefony/command/orm-generate.ts"
35004
+ ],
34743
35005
  "APP_SOURCE": [
34744
35006
  "src/packages/@nodefony/drizzle/nodefony/command/orm-generate.ts",
34745
35007
  "src/packages/@nodefony/drizzle/nodefony/src/migrator/DrizzleMigrator.ts"
@@ -35006,6 +35268,9 @@
35006
35268
  "src/packages/@nodefony/drizzle/nodefony/service/DrizzleService.ts",
35007
35269
  "src/packages/@nodefony/drizzle/nodefony/src/migrator/resolve.ts"
35008
35270
  ],
35271
+ "appVersionsMigrations": [
35272
+ "src/packages/@nodefony/drizzle/nodefony/service/DrizzleService.ts"
35273
+ ],
35009
35274
  "resolveCheckMode": [
35010
35275
  "src/packages/@nodefony/drizzle/nodefony/service/DrizzleService.ts"
35011
35276
  ],
@@ -37269,6 +37534,9 @@
37269
37534
  "src/packages/@nodefony/drizzle/nodefony/src/migrator/refusals.ts",
37270
37535
  "src/packages/@nodefony/drizzle/nodefony/src/migrator/resolve.ts"
37271
37536
  ],
37537
+ "alreadyInTargetState": [
37538
+ "src/packages/@nodefony/drizzle/nodefony/src/migrator/DrizzleMigrator.ts"
37539
+ ],
37272
37540
  "MigrationLockTimeoutError": [
37273
37541
  "src/packages/@nodefony/drizzle/nodefony/src/migrator/DrizzleMigrator.ts",
37274
37542
  "src/packages/@nodefony/drizzle/nodefony/src/migrator/drivers/mysqlDriver.ts",
@@ -37395,6 +37663,15 @@
37395
37663
  "DrizzleTransaction": [
37396
37664
  "src/packages/@nodefony/drizzle/nodefony/src/orm-core/DrizzleOrm.ts"
37397
37665
  ],
37666
+ "planTableCreation": [
37667
+ "src/packages/@nodefony/drizzle/nodefony/src/orm-core/DrizzleOrm.ts"
37668
+ ],
37669
+ "explainOmittedForeignKeys": [
37670
+ "src/packages/@nodefony/drizzle/nodefony/src/orm-core/DrizzleOrm.ts"
37671
+ ],
37672
+ "IResolvedForeignKey": [
37673
+ "src/packages/@nodefony/drizzle/nodefony/src/orm-core/DrizzleOrm.ts"
37674
+ ],
37398
37675
  "assertOrderOption": [
37399
37676
  "src/packages/@nodefony/drizzle/nodefony/src/orm-core/DrizzleRepository.ts",
37400
37677
  "src/packages/@nodefony/mongoose/nodefony/src/orm-core/MongooseRepository.ts"
@@ -118,8 +118,18 @@ function parseCreateArgv(argv) {
118
118
  else if (word === "--no-timestamps") answers.timestamps = false;
119
119
  else if (word === "--no-tests") answers.tests = false;
120
120
  else if (word === "--dir") dir = rest[++i];
121
- else if (word.startsWith("-")) return { error: `option inconnue : ${word}` };
122
- else positionals.push(word);
121
+ else if (word.startsWith("-")) {
122
+ const hint = {
123
+ "--name": "le NOM se donne en argument, juste après le type",
124
+ "--app-name": "le NOM se donne en argument, juste après le type",
125
+ "--project": "le NOM se donne en argument, juste après le type"
126
+ }[word];
127
+ if (hint !== void 0) {
128
+ const given = rest[i + 1];
129
+ return { error: `option inconnue : ${word} — ${hint} : ${given !== void 0 && !given.startsWith("-") ? `nodefony create ${positionals[0] ?? "app"} ${given}` : `nodefony create ${positionals[0] ?? "app"} <nom>`}` };
130
+ }
131
+ return { error: `option inconnue : ${word}` };
132
+ } else positionals.push(word);
123
133
  }
124
134
  const [type, name, ...extra] = positionals;
125
135
  if (help) return {
@@ -260,6 +260,14 @@ function renderHelp(model, opts) {
260
260
  const colOpt = Math.min(COLUMN_MAX, Math.max(0, ...model.globalOptions.map((o) => o.flags.length)));
261
261
  for (const opt of model.globalOptions) lines.push(...input(opt.flags, opt.description, colOpt, width, p, p.strong));
262
262
  }
263
+ if (model.projectScripts && model.projectScripts.length > 0) {
264
+ const colScript = Math.min(COLUMN_MAX, Math.max(0, ...model.projectScripts.flatMap((g) => g.scripts.map((s) => s.flags.length))));
265
+ for (const [i, group] of model.projectScripts.entries()) {
266
+ section(`SCRIPTS NPM · ${group.title}`);
267
+ if (i === 0) lines.push(` ${p.dim("Ils se lancent avec :")} ${p.action("npm run <nom>")}`, "");
268
+ for (const script of group.scripts) lines.push(...input(script.flags, script.description, colScript, width, p, p.action));
269
+ }
270
+ }
263
271
  if (model.modules && model.modules.length > 0) {
264
272
  lines.push("", ` ${p.strong(`Modules chargés (${model.modules.length})`)}`);
265
273
  for (const l of wrapList([...model.modules], width - 2)) lines.push(` ${p.dim(l)}`);