nodefony 7.0.2 → 10.0.0-alpha.2

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 (903) hide show
  1. package/.ai/symbols.json +36135 -0
  2. package/LICENSE +544 -0
  3. package/README.md +316 -694
  4. package/bin/nodefony +2183 -85
  5. package/dist/client/Container.js +367 -0
  6. package/dist/client/Event.js +198 -0
  7. package/dist/client/Service.js +344 -0
  8. package/dist/client/Tools.js +162 -0
  9. package/dist/client/client/ClientKernel.js +276 -0
  10. package/dist/client/client/angular/index.js +352 -0
  11. package/dist/client/client/announce.js +212 -0
  12. package/dist/client/client/debugbar/DebugBar.js +1624 -0
  13. package/dist/client/client/debugbar/format.js +103 -0
  14. package/dist/client/client/debugbar/hmr.js +37 -0
  15. package/dist/client/client/debugbar/index.js +29 -0
  16. package/dist/client/client/debugbar/model.js +133 -0
  17. package/dist/client/client/debugbar/network.js +173 -0
  18. package/dist/client/client/debugbar/profile.js +114 -0
  19. package/dist/client/client/index.js +34 -0
  20. package/dist/client/client/react/index.js +268 -0
  21. package/dist/client/client/realtime/AdaptiveRate.js +240 -0
  22. package/dist/client/client/realtime/BrowserWsTransport.js +57 -0
  23. package/dist/client/client/realtime/RealtimeClient.js +898 -0
  24. package/dist/client/client/realtime/localEvents.js +56 -0
  25. package/dist/client/client/realtime/notice.js +125 -0
  26. package/dist/client/client/realtime/observe.js +280 -0
  27. package/dist/client/client/roles/index.js +3 -0
  28. package/dist/client/client/roles/registry.js +97 -0
  29. package/dist/client/client/roles/roles.js +91 -0
  30. package/dist/client/client/shim/events.js +88 -0
  31. package/dist/client/client/shim/util.js +20 -0
  32. package/dist/client/client/svelte/index.js +319 -0
  33. package/dist/client/client/syslog/context.js +122 -0
  34. package/dist/client/client/syslog/errors.js +49 -0
  35. package/dist/client/client/syslog/uplink.js +106 -0
  36. package/dist/client/client/vue/index.js +321 -0
  37. package/dist/client/colors.js +63 -0
  38. package/dist/client/debugbar.standalone.js +4274 -0
  39. package/dist/client/realtime/IRealtimeTransport.js +32 -0
  40. package/dist/client/realtime/JsonRpcPeer.js +251 -0
  41. package/dist/client/realtime/channelRate.js +39 -0
  42. package/dist/client/realtime/platformChannels.js +155 -0
  43. package/dist/client/syslog/Pdu.js +224 -0
  44. package/dist/client/syslog/Syslog.js +1159 -0
  45. package/dist/client/syslog/drivers/pduFlow.js +106 -0
  46. package/dist/client/syslog/drivers/pduProtocol.js +28 -0
  47. package/dist/client/syslog/logColor.js +80 -0
  48. package/dist/client/types/src/Container.d.ts +221 -0
  49. package/dist/client/types/src/Event.d.ts +171 -0
  50. package/dist/client/types/src/FileClass.d.ts +184 -0
  51. package/dist/client/types/src/Service.d.ts +165 -0
  52. package/dist/client/types/src/Tools.d.ts +116 -0
  53. package/dist/client/types/src/client/ClientKernel.d.ts +90 -0
  54. package/dist/client/types/src/client/IClientKernel.d.ts +195 -0
  55. package/dist/client/types/src/client/angular/index.d.ts +273 -0
  56. package/dist/client/types/src/client/announce.d.ts +74 -0
  57. package/dist/client/types/src/client/debugbar/DebugBar.d.ts +279 -0
  58. package/dist/client/types/src/client/debugbar/format.d.ts +48 -0
  59. package/dist/client/types/src/client/debugbar/hmr.d.ts +16 -0
  60. package/dist/client/types/src/client/debugbar/index.d.ts +30 -0
  61. package/dist/client/types/src/client/debugbar/model.d.ts +158 -0
  62. package/dist/client/types/src/client/debugbar/network.d.ts +55 -0
  63. package/dist/client/types/src/client/debugbar/profile.d.ts +99 -0
  64. package/dist/client/types/src/client/index.d.ts +47 -0
  65. package/dist/client/types/src/client/react/index.d.ts +207 -0
  66. package/dist/client/types/src/client/realtime/AdaptiveRate.d.ts +138 -0
  67. package/dist/client/types/src/client/realtime/BrowserWsTransport.d.ts +27 -0
  68. package/dist/client/types/src/client/realtime/RealtimeClient.d.ts +573 -0
  69. package/dist/client/types/src/client/realtime/localEvents.d.ts +53 -0
  70. package/dist/client/types/src/client/realtime/notice.d.ts +70 -0
  71. package/dist/client/types/src/client/realtime/observe.d.ts +284 -0
  72. package/dist/client/types/src/client/roles/index.d.ts +15 -0
  73. package/dist/client/types/src/client/roles/registry.d.ts +72 -0
  74. package/dist/client/types/src/client/roles/roles.d.ts +68 -0
  75. package/dist/client/types/src/client/shim/cli-color.d.ts +2 -0
  76. package/dist/client/types/src/client/shim/events.d.ts +39 -0
  77. package/dist/client/types/src/client/shim/util.d.ts +14 -0
  78. package/dist/client/types/src/client/svelte/index.d.ts +216 -0
  79. package/dist/client/types/src/client/syslog/context.d.ts +76 -0
  80. package/dist/client/types/src/client/syslog/errors.d.ts +46 -0
  81. package/dist/client/types/src/client/syslog/uplink.d.ts +89 -0
  82. package/dist/client/types/src/client/transport/websocket.d.ts +5 -0
  83. package/dist/client/types/src/client/vue/index.d.ts +234 -0
  84. package/dist/client/types/src/colors.d.ts +32 -0
  85. package/dist/client/types/src/config/infra.d.ts +171 -0
  86. package/dist/client/types/src/kernel/bootReport.d.ts +112 -0
  87. package/dist/client/types/src/kernel/readinessRegistry.d.ts +104 -0
  88. package/dist/client/types/src/realtime/IRealtimeSocket.d.ts +142 -0
  89. package/dist/client/types/src/realtime/IRealtimeTransport.d.ts +50 -0
  90. package/dist/client/types/src/realtime/JsonRpcPeer.d.ts +251 -0
  91. package/dist/client/types/src/realtime/RealtimeEventMap.d.ts +269 -0
  92. package/dist/client/types/src/realtime/channelRate.d.ts +55 -0
  93. package/dist/client/types/src/realtime/platformChannels.d.ts +147 -0
  94. package/dist/client/types/src/syslog/Pdu.d.ts +134 -0
  95. package/dist/client/types/src/syslog/Syslog.d.ts +482 -0
  96. package/dist/client/types/src/syslog/drivers/ILogDriver.d.ts +177 -0
  97. package/dist/client/types/src/syslog/drivers/pduFlow.d.ts +53 -0
  98. package/dist/client/types/src/syslog/drivers/pduProtocol.d.ts +20 -0
  99. package/dist/client/types/src/syslog/logColor.d.ts +59 -0
  100. package/dist/client/types/src/types/ICliKernel.d.ts +28 -0
  101. package/dist/client/types/src/types/ICommand.d.ts +14 -0
  102. package/dist/client/types/src/types/IContainer.d.ts +35 -0
  103. package/dist/client/types/src/types/IKernel.d.ts +138 -0
  104. package/dist/client/types/src/types/IMcpTool.d.ts +157 -0
  105. package/dist/client/types/src/types/IModule.d.ts +73 -0
  106. package/dist/client/types/src/types/IPage.d.ts +119 -0
  107. package/dist/client/types/src/types/IService.d.ts +62 -0
  108. package/dist/client/types/src/types/ISyslog.d.ts +58 -0
  109. package/dist/client/types/src/types/ITransport.d.ts +5 -0
  110. package/dist/client/types/src/types/globals.d.ts +47 -0
  111. package/dist/node/Cli.js +750 -0
  112. package/dist/node/Container.js +367 -0
  113. package/dist/node/Error.js +309 -0
  114. package/dist/node/Event.js +198 -0
  115. package/dist/node/FileClass.js +308 -0
  116. package/dist/node/Nodefony.js +78 -0
  117. package/dist/node/Service.js +344 -0
  118. package/dist/node/Tools.js +205 -0
  119. package/dist/node/bin/resolveLocalCli.js +10 -0
  120. package/dist/node/bundler/index.js +103 -0
  121. package/dist/node/cli/agentTargets.js +461 -0
  122. package/dist/node/cli/aiMcp.js +553 -0
  123. package/dist/node/cli/aiMcpReport.js +129 -0
  124. package/dist/node/cli/aiSync.js +323 -0
  125. package/dist/node/cli/aiSyncReport.js +142 -0
  126. package/dist/node/cli/card.js +186 -0
  127. package/dist/node/cli/cardReport.js +110 -0
  128. package/dist/node/cli/completion.js +415 -0
  129. package/dist/node/cli/create.js +805 -0
  130. package/dist/node/cli/env.js +332 -0
  131. package/dist/node/cli/envReport.js +159 -0
  132. package/dist/node/cli/execPortable.js +60 -0
  133. package/dist/node/cli/gitHooks.js +191 -0
  134. package/dist/node/cli/gitHooksReport.js +119 -0
  135. package/dist/node/cli/globalFlags.js +67 -0
  136. package/dist/node/cli/helpReport.js +288 -0
  137. package/dist/node/cli/manPage.js +165 -0
  138. package/dist/node/cli/nodefonyBin.js +61 -0
  139. package/dist/node/cli/outdated.js +144 -0
  140. package/dist/node/cli/progress.js +555 -0
  141. package/dist/node/cli/projectRoot.js +32 -0
  142. package/dist/node/cli/promptPassword.js +44 -0
  143. package/dist/node/cli/prompts.js +86 -0
  144. package/dist/node/cli/scaffold/destination.js +92 -0
  145. package/dist/node/cli/scaffold/engine.js +2156 -0
  146. package/dist/node/cli/scaffold/entityFields.js +589 -0
  147. package/dist/node/cli/scaffold/format.js +243 -0
  148. package/dist/node/cli/scaffold/interactive.js +124 -0
  149. package/dist/node/cli/scaffold/moduleLayout.js +38 -0
  150. package/dist/node/cli/scaffold/reservedEntities.js +74 -0
  151. package/dist/node/cli/scaffold/spec.js +704 -0
  152. package/dist/node/cli/scaffold/steps.js +40 -0
  153. package/dist/node/cli/scaffold/userContractSource.js +133 -0
  154. package/dist/node/cli/scaffold/versions.js +57 -0
  155. package/dist/node/cli/scaffold/writer.js +172 -0
  156. package/dist/node/cli/startMenu.js +496 -0
  157. package/dist/node/cli/symbols.js +205 -0
  158. package/dist/node/cli/sysexits.js +34 -0
  159. package/dist/node/cli/tableReport.js +184 -0
  160. package/dist/node/cli/usageReport.js +144 -0
  161. package/dist/node/colors.js +63 -0
  162. package/dist/node/command/Builder.js +153 -0
  163. package/dist/node/command/Command.js +348 -0
  164. package/dist/node/config/configProvenance.js +101 -0
  165. package/dist/node/config/defaults.js +39 -0
  166. package/dist/node/config/defineConfig.js +129 -0
  167. package/dist/node/config/defineEnv.js +264 -0
  168. package/dist/node/config/envExample.js +41 -0
  169. package/dist/node/config/envOverride.js +423 -0
  170. package/dist/node/config/infra.js +163 -0
  171. package/dist/node/config/reactivity.js +23 -0
  172. package/dist/node/config/reservedEnv.js +118 -0
  173. package/dist/node/config/schema.js +134 -0
  174. package/dist/node/config/use.js +24 -0
  175. package/dist/node/finder/File.js +49 -0
  176. package/dist/node/finder/FileResult.js +86 -0
  177. package/dist/node/finder/Finder.js +201 -0
  178. package/dist/node/finder/Result.js +45 -0
  179. package/dist/node/index.js +121 -0
  180. package/dist/node/kernel/BootConfigurationError.js +54 -0
  181. package/dist/node/kernel/CliKernel.js +630 -0
  182. package/dist/node/kernel/Kernel.js +2198 -0
  183. package/dist/node/kernel/Module.js +453 -0
  184. package/dist/node/kernel/adminPlane/adminCaller.js +98 -0
  185. package/dist/node/kernel/adminPlane/adminRbac.js +51 -0
  186. package/dist/node/kernel/adminPlane/catalog.js +158 -0
  187. package/dist/node/kernel/adminPlane/executeAdmin.js +78 -0
  188. package/dist/node/kernel/checks/deep.js +335 -0
  189. package/dist/node/kernel/checks/freshness.js +139 -0
  190. package/dist/node/kernel/checks/gating.js +231 -0
  191. package/dist/node/kernel/checks/guards.js +232 -0
  192. package/dist/node/kernel/checks/lastBoot.js +136 -0
  193. package/dist/node/kernel/checks/live.js +330 -0
  194. package/dist/node/kernel/checks/packageDeps.js +292 -0
  195. package/dist/node/kernel/checks/readiness.js +153 -0
  196. package/dist/node/kernel/checks/renderReport.js +780 -0
  197. package/dist/node/kernel/checks/report.js +421 -0
  198. package/dist/node/kernel/checks/runDoctor.js +731 -0
  199. package/dist/node/kernel/checks/surface.js +364 -0
  200. package/dist/node/kernel/checks/walk.js +100 -0
  201. package/dist/node/kernel/checks/wiring.js +450 -0
  202. package/dist/node/kernel/commands/AiMcpCommand.js +65 -0
  203. package/dist/node/kernel/commands/AiSyncCommand.js +48 -0
  204. package/dist/node/kernel/commands/BuildCommand.js +49 -0
  205. package/dist/node/kernel/commands/CardCommand.js +50 -0
  206. package/dist/node/kernel/commands/ClusterCommand.js +58 -0
  207. package/dist/node/kernel/commands/CompletionCommand.js +31 -0
  208. package/dist/node/kernel/commands/CreateCommand.js +45 -0
  209. package/dist/node/kernel/commands/DevCommand.js +99 -0
  210. package/dist/node/kernel/commands/DoctorCommand.js +115 -0
  211. package/dist/node/kernel/commands/EnvCommand.js +52 -0
  212. package/dist/node/kernel/commands/GitHooksCommand.js +47 -0
  213. package/dist/node/kernel/commands/InspectCommand.js +153 -0
  214. package/dist/node/kernel/commands/InstallCommand.js +20 -0
  215. package/dist/node/kernel/commands/MenuCommand.js +261 -0
  216. package/dist/node/kernel/commands/OutdatedCommand.js +164 -0
  217. package/dist/node/kernel/commands/ProdCommand.js +60 -0
  218. package/dist/node/kernel/commands/StatusCommand.js +30 -0
  219. package/dist/node/kernel/commands/StopCommand.js +35 -0
  220. package/dist/node/kernel/commands/SymbolsCommand.js +45 -0
  221. package/dist/node/kernel/commands/runtimeLauncher.js +95 -0
  222. package/dist/node/kernel/decorators/kernelDecorator.js +110 -0
  223. package/dist/node/kernel/injector/injector.js +137 -0
  224. package/dist/node/kernel/injector/serviceOrder.js +106 -0
  225. package/dist/node/kernel/inspect/adminSubjects.js +194 -0
  226. package/dist/node/kernel/inspect/docOutline.js +86 -0
  227. package/dist/node/kernel/lifecycleTags.js +76 -0
  228. package/dist/node/kernel/moduleConfig.js +75 -0
  229. package/dist/node/kernel/moduleGating.js +68 -0
  230. package/dist/node/kernel/readinessRegistry.js +98 -0
  231. package/dist/node/kernel/resolveModuleEntry.js +61 -0
  232. package/dist/node/mcp/caller.js +40 -0
  233. package/dist/node/mcp/guard.js +51 -0
  234. package/dist/node/mcp/protocol.js +157 -0
  235. package/dist/node/mcp/server.js +216 -0
  236. package/dist/node/mcp/tools.js +861 -0
  237. package/dist/node/oauth/authorizationServer.js +221 -0
  238. package/dist/node/oauth/protectedResource.js +293 -0
  239. package/dist/node/package.js +4 -0
  240. package/dist/node/realtime/IRealtimeTransport.js +32 -0
  241. package/dist/node/realtime/JsonRpcPeer.js +251 -0
  242. package/dist/node/realtime/RealtimeEventMap.js +15 -0
  243. package/dist/node/realtime/channelRate.js +39 -0
  244. package/dist/node/realtime/platformChannels.js +155 -0
  245. package/dist/node/runtime/GcScheduler.js +92 -0
  246. package/dist/node/runtime/RequestContext.js +76 -0
  247. package/dist/node/runtime/bearer.js +84 -0
  248. package/dist/node/runtime/engineEnvironment.js +79 -0
  249. package/dist/node/runtime/loadEnv.js +105 -0
  250. package/dist/node/runtime/pageFacets.js +85 -0
  251. package/dist/node/runtime/pageFilters.js +103 -0
  252. package/dist/node/runtime/pageGuard.js +84 -0
  253. package/dist/node/runtime/pageQuery.js +160 -0
  254. package/dist/node/runtime/pageSort.js +114 -0
  255. package/dist/node/runtime/redact.js +43 -0
  256. package/dist/node/runtime/withTimeout.js +71 -0
  257. package/dist/node/service/cluster/ClusterManager.js +202 -0
  258. package/dist/node/service/cluster/ClusterProbeAggregator.js +120 -0
  259. package/dist/node/service/cluster/ClusterRelay.js +74 -0
  260. package/dist/node/service/cluster/clusterMaster.js +65 -0
  261. package/dist/node/service/cluster/clusterMessage.js +70 -0
  262. package/dist/node/service/cluster/cpuQuota.js +59 -0
  263. package/dist/node/service/cluster/instanceProbe.js +52 -0
  264. package/dist/node/service/cluster/podEnvironment.js +48 -0
  265. package/dist/node/service/cluster/processProbe.js +70 -0
  266. package/dist/node/service/cluster/richProcessProbe.js +115 -0
  267. package/dist/node/service/cluster/topology.js +71 -0
  268. package/dist/node/service/dev/BootReporter.js +490 -0
  269. package/dist/node/service/dev/DevSupervisor.js +1004 -0
  270. package/dist/node/service/dev/bootVerdict.js +158 -0
  271. package/dist/node/service/dev/detachedStart.js +372 -0
  272. package/dist/node/service/dev/devProcess.js +1137 -0
  273. package/dist/node/service/dev/devProjects.js +138 -0
  274. package/dist/node/service/dev/devStatusReport.js +395 -0
  275. package/dist/node/service/dev/devStop.js +263 -0
  276. package/dist/node/service/fetchService.js +35 -0
  277. package/dist/node/service/gitService.js +62 -0
  278. package/dist/node/syslog/Pdu.js +224 -0
  279. package/dist/node/syslog/Syslog.js +1159 -0
  280. package/dist/node/syslog/drivers/ClusterFileLogDriver.js +114 -0
  281. package/dist/node/syslog/drivers/FileLogDriver.js +127 -0
  282. package/dist/node/syslog/drivers/ILogDriver.js +26 -0
  283. package/dist/node/syslog/drivers/LokiLogDriver.js +144 -0
  284. package/dist/node/syslog/drivers/MemoryLogDriver.js +33 -0
  285. package/dist/node/syslog/drivers/OpenSearchLogDriver.js +159 -0
  286. package/dist/node/syslog/drivers/builtinLogDrivers.js +114 -0
  287. package/dist/node/syslog/drivers/filterPdus.js +71 -0
  288. package/dist/node/syslog/drivers/logDriverRegistry.js +83 -0
  289. package/dist/node/syslog/drivers/opensearchShared.js +17 -0
  290. package/dist/node/syslog/drivers/pduFlow.js +106 -0
  291. package/dist/node/syslog/drivers/pduProtocol.js +28 -0
  292. package/dist/node/syslog/httpFetch.js +43 -0
  293. package/dist/node/syslog/logColor.js +80 -0
  294. package/dist/node/syslog/sinks/FileSink.js +142 -0
  295. package/dist/node/syslog/transports/BatchingHttpTransport.js +98 -0
  296. package/dist/node/syslog/transports/ConsoleTransport.js +14 -0
  297. package/dist/node/syslog/transports/FileTransport.js +17 -0
  298. package/dist/node/syslog/transports/HttpTransport.js +44 -0
  299. package/dist/node/syslog/transports/LokiTransport.js +80 -0
  300. package/dist/node/syslog/transports/OpenSearchTransport.js +53 -0
  301. package/dist/node/syslog/transports/SyslogTransport.js +13 -0
  302. package/dist/node/syslog/transports/index.js +8 -0
  303. package/dist/node/testing/index.js +190 -0
  304. package/dist/types/Cli.d.ts +177 -0
  305. package/dist/types/Container.d.ts +221 -0
  306. package/dist/types/Error.d.ts +162 -0
  307. package/dist/types/Event.d.ts +171 -0
  308. package/dist/types/FileClass.d.ts +184 -0
  309. package/dist/types/Nodefony.d.ts +66 -0
  310. package/dist/types/Service.d.ts +165 -0
  311. package/dist/types/Tools.d.ts +116 -0
  312. package/dist/types/bin/resolveLocalCli.d.ts +49 -0
  313. package/dist/types/bundler/index.d.ts +66 -0
  314. package/dist/types/cli/agentTargets.d.ts +378 -0
  315. package/dist/types/cli/aiMcp.d.ts +239 -0
  316. package/dist/types/cli/aiMcpReport.d.ts +113 -0
  317. package/dist/types/cli/aiSync.d.ts +68 -0
  318. package/dist/types/cli/aiSyncReport.d.ts +149 -0
  319. package/dist/types/cli/card.d.ts +49 -0
  320. package/dist/types/cli/cardReport.d.ts +127 -0
  321. package/dist/types/cli/completion.d.ts +154 -0
  322. package/dist/types/cli/create.d.ts +177 -0
  323. package/dist/types/cli/env.d.ts +103 -0
  324. package/dist/types/cli/envReport.d.ts +153 -0
  325. package/dist/types/cli/execPortable.d.ts +54 -0
  326. package/dist/types/cli/gitHooks.d.ts +48 -0
  327. package/dist/types/cli/gitHooksReport.d.ts +101 -0
  328. package/dist/types/cli/globalFlags.d.ts +48 -0
  329. package/dist/types/cli/helpReport.d.ts +110 -0
  330. package/dist/types/cli/manPage.d.ts +21 -0
  331. package/dist/types/cli/nodefonyBin.d.ts +45 -0
  332. package/dist/types/cli/outdated.d.ts +119 -0
  333. package/dist/types/cli/progress.d.ts +349 -0
  334. package/dist/types/cli/projectRoot.d.ts +19 -0
  335. package/dist/types/cli/promptPassword.d.ts +22 -0
  336. package/dist/types/cli/prompts.d.ts +102 -0
  337. package/dist/types/cli/scaffold/destination.d.ts +70 -0
  338. package/dist/types/cli/scaffold/engine.d.ts +545 -0
  339. package/dist/types/cli/scaffold/entityFields.d.ts +238 -0
  340. package/dist/types/cli/scaffold/format.d.ts +78 -0
  341. package/dist/types/cli/scaffold/interactive.d.ts +11 -0
  342. package/dist/types/cli/scaffold/moduleLayout.d.ts +69 -0
  343. package/dist/types/cli/scaffold/reservedEntities.d.ts +49 -0
  344. package/dist/types/cli/scaffold/spec.d.ts +159 -0
  345. package/dist/types/cli/scaffold/steps.d.ts +24 -0
  346. package/dist/types/cli/scaffold/userContractSource.d.ts +86 -0
  347. package/dist/types/cli/scaffold/versions.d.ts +14 -0
  348. package/dist/types/cli/scaffold/writer.d.ts +100 -0
  349. package/dist/types/cli/startMenu.d.ts +195 -0
  350. package/dist/types/cli/symbols.d.ts +84 -0
  351. package/dist/types/cli/sysexits.d.ts +31 -0
  352. package/dist/types/cli/tableReport.d.ts +44 -0
  353. package/dist/types/cli/usageReport.d.ts +108 -0
  354. package/dist/types/client/ClientKernel.d.ts +90 -0
  355. package/dist/types/client/IClientKernel.d.ts +195 -0
  356. package/dist/types/client/angular/index.d.ts +273 -0
  357. package/dist/types/client/announce.d.ts +74 -0
  358. package/dist/types/client/debugbar/DebugBar.d.ts +279 -0
  359. package/dist/types/client/debugbar/format.d.ts +48 -0
  360. package/dist/types/client/debugbar/hmr.d.ts +16 -0
  361. package/dist/types/client/debugbar/index.d.ts +30 -0
  362. package/dist/types/client/debugbar/model.d.ts +158 -0
  363. package/dist/types/client/debugbar/network.d.ts +55 -0
  364. package/dist/types/client/debugbar/profile.d.ts +99 -0
  365. package/dist/types/client/index.d.ts +47 -0
  366. package/dist/types/client/react/index.d.ts +207 -0
  367. package/dist/types/client/realtime/AdaptiveRate.d.ts +138 -0
  368. package/dist/types/client/realtime/BrowserWsTransport.d.ts +27 -0
  369. package/dist/types/client/realtime/RealtimeClient.d.ts +573 -0
  370. package/dist/types/client/realtime/localEvents.d.ts +53 -0
  371. package/dist/types/client/realtime/notice.d.ts +70 -0
  372. package/dist/types/client/realtime/observe.d.ts +284 -0
  373. package/dist/types/client/roles/index.d.ts +15 -0
  374. package/dist/types/client/roles/registry.d.ts +72 -0
  375. package/dist/types/client/roles/roles.d.ts +68 -0
  376. package/dist/types/client/shim/cli-color.d.ts +2 -0
  377. package/dist/types/client/shim/events.d.ts +39 -0
  378. package/dist/types/client/shim/util.d.ts +14 -0
  379. package/dist/types/client/svelte/index.d.ts +216 -0
  380. package/dist/types/client/syslog/context.d.ts +76 -0
  381. package/dist/types/client/syslog/errors.d.ts +46 -0
  382. package/dist/types/client/syslog/uplink.d.ts +89 -0
  383. package/dist/types/client/transport/websocket.d.ts +5 -0
  384. package/dist/types/client/vue/index.d.ts +234 -0
  385. package/dist/types/colors.d.ts +32 -0
  386. package/dist/types/command/Builder.d.ts +47 -0
  387. package/dist/types/command/Command.d.ts +268 -0
  388. package/dist/types/config/configMeta.d.ts +53 -0
  389. package/dist/types/config/configProvenance.d.ts +58 -0
  390. package/dist/types/config/defaults.d.ts +33 -0
  391. package/dist/types/config/defineConfig.d.ts +70 -0
  392. package/dist/types/config/defineEnv.d.ts +170 -0
  393. package/dist/types/config/envExample.d.ts +23 -0
  394. package/dist/types/config/envOverride.d.ts +236 -0
  395. package/dist/types/config/index.d.ts +23 -0
  396. package/dist/types/config/infra.d.ts +171 -0
  397. package/dist/types/config/reactivity.d.ts +36 -0
  398. package/dist/types/config/reservedEnv.d.ts +145 -0
  399. package/dist/types/config/schema.d.ts +113 -0
  400. package/dist/types/config/types.d.ts +374 -0
  401. package/dist/types/config/use.d.ts +80 -0
  402. package/dist/types/finder/File.d.ts +26 -0
  403. package/dist/types/finder/FileResult.d.ts +14 -0
  404. package/dist/types/finder/Finder.d.ts +51 -0
  405. package/dist/types/finder/Result.d.ts +10 -0
  406. package/dist/types/index.d.ts +205 -0
  407. package/dist/types/kernel/BootConfigurationError.d.ts +50 -0
  408. package/dist/types/kernel/CliKernel.d.ts +289 -0
  409. package/dist/types/kernel/Kernel.d.ts +1255 -0
  410. package/dist/types/kernel/Module.d.ts +326 -0
  411. package/dist/types/kernel/adminPlane/adminCaller.d.ts +105 -0
  412. package/dist/types/kernel/adminPlane/adminRbac.d.ts +44 -0
  413. package/dist/types/kernel/adminPlane/catalog.d.ts +122 -0
  414. package/dist/types/kernel/adminPlane/executeAdmin.d.ts +99 -0
  415. package/dist/types/kernel/bootReport.d.ts +112 -0
  416. package/dist/types/kernel/checks/deep.d.ts +122 -0
  417. package/dist/types/kernel/checks/freshness.d.ts +49 -0
  418. package/dist/types/kernel/checks/gating.d.ts +134 -0
  419. package/dist/types/kernel/checks/guards.d.ts +57 -0
  420. package/dist/types/kernel/checks/lastBoot.d.ts +189 -0
  421. package/dist/types/kernel/checks/live.d.ts +110 -0
  422. package/dist/types/kernel/checks/packageDeps.d.ts +44 -0
  423. package/dist/types/kernel/checks/readiness.d.ts +97 -0
  424. package/dist/types/kernel/checks/renderReport.d.ts +107 -0
  425. package/dist/types/kernel/checks/report.d.ts +414 -0
  426. package/dist/types/kernel/checks/runDoctor.d.ts +361 -0
  427. package/dist/types/kernel/checks/surface.d.ts +148 -0
  428. package/dist/types/kernel/checks/walk.d.ts +45 -0
  429. package/dist/types/kernel/checks/wiring.d.ts +54 -0
  430. package/dist/types/kernel/commands/AiMcpCommand.d.ts +39 -0
  431. package/dist/types/kernel/commands/AiSyncCommand.d.ts +28 -0
  432. package/dist/types/kernel/commands/BuildCommand.d.ts +13 -0
  433. package/dist/types/kernel/commands/CardCommand.d.ts +34 -0
  434. package/dist/types/kernel/commands/ClusterCommand.d.ts +29 -0
  435. package/dist/types/kernel/commands/CompletionCommand.d.ts +17 -0
  436. package/dist/types/kernel/commands/CreateCommand.d.ts +16 -0
  437. package/dist/types/kernel/commands/DevCommand.d.ts +40 -0
  438. package/dist/types/kernel/commands/DoctorCommand.d.ts +55 -0
  439. package/dist/types/kernel/commands/EnvCommand.d.ts +35 -0
  440. package/dist/types/kernel/commands/GitHooksCommand.d.ts +27 -0
  441. package/dist/types/kernel/commands/InspectCommand.d.ts +59 -0
  442. package/dist/types/kernel/commands/InstallCommand.d.ts +7 -0
  443. package/dist/types/kernel/commands/MenuCommand.d.ts +58 -0
  444. package/dist/types/kernel/commands/OutdatedCommand.d.ts +47 -0
  445. package/dist/types/kernel/commands/ProdCommand.d.ts +29 -0
  446. package/dist/types/kernel/commands/StatusCommand.d.ts +17 -0
  447. package/dist/types/kernel/commands/StopCommand.d.ts +17 -0
  448. package/dist/types/kernel/commands/SymbolsCommand.d.ts +29 -0
  449. package/dist/types/kernel/commands/runtimeLauncher.d.ts +76 -0
  450. package/dist/types/kernel/decorators/kernelDecorator.d.ts +76 -0
  451. package/dist/types/kernel/injector/injector.d.ts +47 -0
  452. package/dist/types/kernel/injector/serviceOrder.d.ts +29 -0
  453. package/dist/types/kernel/inspect/adminSubjects.d.ts +169 -0
  454. package/dist/types/kernel/inspect/docOutline.d.ts +53 -0
  455. package/dist/types/kernel/lifecycleTags.d.ts +79 -0
  456. package/dist/types/kernel/moduleConfig.d.ts +35 -0
  457. package/dist/types/kernel/moduleGating.d.ts +78 -0
  458. package/dist/types/kernel/readinessRegistry.d.ts +104 -0
  459. package/dist/types/kernel/resolveModuleEntry.d.ts +46 -0
  460. package/dist/types/mcp/caller.d.ts +55 -0
  461. package/dist/types/mcp/guard.d.ts +66 -0
  462. package/dist/types/mcp/protocol.d.ts +163 -0
  463. package/dist/types/mcp/server.d.ts +70 -0
  464. package/dist/types/mcp/tools.d.ts +209 -0
  465. package/dist/types/oauth/authorizationServer.d.ts +204 -0
  466. package/dist/types/oauth/protectedResource.d.ts +339 -0
  467. package/dist/types/realtime/IRealtimeSocket.d.ts +142 -0
  468. package/dist/types/realtime/IRealtimeTransport.d.ts +50 -0
  469. package/dist/types/realtime/JsonRpcPeer.d.ts +251 -0
  470. package/dist/types/realtime/RealtimeEventMap.d.ts +269 -0
  471. package/dist/types/realtime/channelRate.d.ts +55 -0
  472. package/dist/types/realtime/platformChannels.d.ts +147 -0
  473. package/dist/types/runtime/GcScheduler.d.ts +96 -0
  474. package/dist/types/runtime/RequestContext.d.ts +152 -0
  475. package/dist/types/runtime/bearer.d.ts +88 -0
  476. package/dist/types/runtime/engineEnvironment.d.ts +115 -0
  477. package/dist/types/runtime/loadEnv.d.ts +86 -0
  478. package/dist/types/runtime/pageFacets.d.ts +104 -0
  479. package/dist/types/runtime/pageFilters.d.ts +139 -0
  480. package/dist/types/runtime/pageGuard.d.ts +78 -0
  481. package/dist/types/runtime/pageQuery.d.ts +138 -0
  482. package/dist/types/runtime/pageSort.d.ts +86 -0
  483. package/dist/types/runtime/redact.d.ts +27 -0
  484. package/dist/types/runtime/withTimeout.d.ts +51 -0
  485. package/dist/types/service/cluster/ClusterManager.d.ts +112 -0
  486. package/dist/types/service/cluster/ClusterProbeAggregator.d.ts +68 -0
  487. package/dist/types/service/cluster/ClusterRelay.d.ts +57 -0
  488. package/dist/types/service/cluster/clusterMaster.d.ts +40 -0
  489. package/dist/types/service/cluster/clusterMessage.d.ts +94 -0
  490. package/dist/types/service/cluster/cpuQuota.d.ts +37 -0
  491. package/dist/types/service/cluster/instanceProbe.d.ts +82 -0
  492. package/dist/types/service/cluster/podEnvironment.d.ts +35 -0
  493. package/dist/types/service/cluster/processProbe.d.ts +53 -0
  494. package/dist/types/service/cluster/richProcessProbe.d.ts +77 -0
  495. package/dist/types/service/cluster/topology.d.ts +64 -0
  496. package/dist/types/service/dev/BootReporter.d.ts +67 -0
  497. package/dist/types/service/dev/DevSupervisor.d.ts +117 -0
  498. package/dist/types/service/dev/bootVerdict.d.ts +99 -0
  499. package/dist/types/service/dev/detachedStart.d.ts +164 -0
  500. package/dist/types/service/dev/devProcess.d.ts +638 -0
  501. package/dist/types/service/dev/devProjects.d.ts +121 -0
  502. package/dist/types/service/dev/devStatusReport.d.ts +141 -0
  503. package/dist/types/service/dev/devStop.d.ts +57 -0
  504. package/dist/types/service/fetchService.d.ts +29 -0
  505. package/dist/types/service/gitService.d.ts +24 -0
  506. package/dist/types/syslog/Pdu.d.ts +134 -0
  507. package/dist/types/syslog/Syslog.d.ts +482 -0
  508. package/dist/types/syslog/drivers/ClusterFileLogDriver.d.ts +40 -0
  509. package/dist/types/syslog/drivers/FileLogDriver.d.ts +55 -0
  510. package/dist/types/syslog/drivers/ILogDriver.d.ts +177 -0
  511. package/dist/types/syslog/drivers/LokiLogDriver.d.ts +44 -0
  512. package/dist/types/syslog/drivers/MemoryLogDriver.d.ts +20 -0
  513. package/dist/types/syslog/drivers/OpenSearchLogDriver.d.ts +40 -0
  514. package/dist/types/syslog/drivers/builtinLogDrivers.d.ts +43 -0
  515. package/dist/types/syslog/drivers/filterPdus.d.ts +21 -0
  516. package/dist/types/syslog/drivers/logDriverRegistry.d.ts +100 -0
  517. package/dist/types/syslog/drivers/opensearchShared.d.ts +11 -0
  518. package/dist/types/syslog/drivers/pduFlow.d.ts +53 -0
  519. package/dist/types/syslog/drivers/pduProtocol.d.ts +20 -0
  520. package/dist/types/syslog/httpFetch.d.ts +48 -0
  521. package/dist/types/syslog/logColor.d.ts +59 -0
  522. package/dist/types/syslog/sinks/FileSink.d.ts +78 -0
  523. package/dist/types/syslog/transports/BatchingHttpTransport.d.ts +59 -0
  524. package/dist/types/syslog/transports/ConsoleTransport.d.ts +8 -0
  525. package/dist/types/syslog/transports/FileTransport.d.ts +13 -0
  526. package/dist/types/syslog/transports/HttpTransport.d.ts +15 -0
  527. package/dist/types/syslog/transports/LokiTransport.d.ts +45 -0
  528. package/dist/types/syslog/transports/OpenSearchTransport.d.ts +40 -0
  529. package/dist/types/syslog/transports/SyslogTransport.d.ts +9 -0
  530. package/dist/types/syslog/transports/index.d.ts +12 -0
  531. package/dist/types/testing/index.d.ts +197 -0
  532. package/dist/types/types/IAdminApi.d.ts +246 -0
  533. package/dist/types/types/ICliKernel.d.ts +28 -0
  534. package/dist/types/types/ICommand.d.ts +14 -0
  535. package/dist/types/types/IContainer.d.ts +35 -0
  536. package/dist/types/types/IIdempotencyStore.d.ts +159 -0
  537. package/dist/types/types/IKernel.d.ts +138 -0
  538. package/dist/types/types/IMcpTool.d.ts +157 -0
  539. package/dist/types/types/IModule.d.ts +73 -0
  540. package/dist/types/types/IModuleManifest.d.ts +49 -0
  541. package/dist/types/types/IPage.d.ts +119 -0
  542. package/dist/types/types/IService.d.ts +62 -0
  543. package/dist/types/types/ISyslog.d.ts +58 -0
  544. package/dist/types/types/ITransport.d.ts +5 -0
  545. package/dist/types/types/globals.d.ts +47 -0
  546. package/docs/angular-services.md +318 -0
  547. package/docs/catalogue.md +184 -0
  548. package/docs/cli.md +369 -0
  549. package/docs/client.md +616 -0
  550. package/docs/debugbar.md +218 -0
  551. package/docs/environnement.md +308 -0
  552. package/docs/index.md +388 -0
  553. package/docs/kernel.md +670 -0
  554. package/docs/progression.md +228 -0
  555. package/docs/react-hooks.md +686 -0
  556. package/docs/request-context.md +507 -0
  557. package/docs/service.md +590 -0
  558. package/docs/svelte-reactivite.md +293 -0
  559. package/docs/syslog.md +848 -0
  560. package/docs/testing.md +203 -0
  561. package/docs/vue-composables.md +255 -0
  562. package/man/nodefony.1 +152 -0
  563. package/package.json +163 -83
  564. package/templates/app/agents/AGENTS.md.tpl +967 -0
  565. package/templates/app/agents/POINTEUR.md.tpl +12 -0
  566. package/templates/app/base/Dockerfile.tpl +104 -0
  567. package/templates/app/base/README.md.tpl +314 -0
  568. package/templates/app/base/dockerignore.tpl +28 -0
  569. package/templates/app/base/env.ts.tpl +130 -0
  570. package/templates/app/base/gitattributes.tpl +28 -0
  571. package/templates/app/base/github/workflows/ci.yml.tpl +91 -0
  572. package/templates/app/base/gitignore.tpl +46 -0
  573. package/templates/app/base/gitlab-ci.yml.tpl +42 -0
  574. package/templates/app/base/index.ts.tpl +69 -0
  575. package/templates/app/base/nodefony.config.ts.tpl +342 -0
  576. package/templates/app/base/oxlintrc.json.tpl +127 -0
  577. package/templates/app/base/package.json.tpl +75 -0
  578. package/templates/app/base/prettierignore.tpl +24 -0
  579. package/templates/app/base/prettierrc.json.tpl +12 -0
  580. package/templates/app/base/rolldown.config.ts.tpl +8 -0
  581. package/templates/app/base/tests/config.test.ts.tpl +29 -0
  582. package/templates/app/base/tests/e2e.setup.ts.tpl +181 -0
  583. package/templates/app/base/tests/e2e.test.ts.tpl +105 -0
  584. package/templates/app/base/tests/migrations.e2e.test.ts.tpl +579 -0
  585. package/templates/app/base/tsconfig.json.tpl +47 -0
  586. package/templates/app/base/vitest.config.ts.tpl +88 -0
  587. package/templates/app/base/vitest.e2e.config.ts.tpl +39 -0
  588. package/templates/app/complete/compose.yaml.tpl +328 -0
  589. package/templates/app/complete/deploy/migrate-job.yaml.tpl +100 -0
  590. package/templates/app/complete/docker/db/init-nodefony-e2e.sql.tpl +30 -0
  591. package/templates/app/complete/docker/grafana/provisioning/datasources/loki.yaml.tpl +15 -0
  592. package/templates/app/complete/env.local.tpl +11 -0
  593. package/templates/app/complete/env.tpl +53 -0
  594. package/templates/app/complete/nodefony/entity/User.ts.tpl +69 -0
  595. package/templates/app/complete/nodefony/security/provisionUsers.ts.tpl +124 -0
  596. package/templates/app/complete/nodefony/service/AppBannerService.ts.tpl +98 -0
  597. package/templates/app/complete/nodefony/service/AppInfoService.ts.tpl +85 -0
  598. package/templates/app/frontend/angular/frontend/src/accent.css.tpl +34 -0
  599. package/templates/app/frontend/angular/frontend/src/app/app.component.ts.tpl +400 -0
  600. package/templates/app/frontend/react/frontend/src/App.tsx.tpl +421 -0
  601. package/templates/app/frontend/react/frontend/src/accent.css.tpl +30 -0
  602. package/templates/app/frontend/shared/frontend/src/brand.ts.tpl +3 -0
  603. package/templates/app/frontend/shared/frontend/src/showcase.css.tpl +224 -0
  604. package/templates/app/frontend/shared/nodefony/controllers/AppController.ts.tpl +45 -0
  605. package/templates/app/frontend/svelte/frontend/src/App.svelte.tpl +371 -0
  606. package/templates/app/frontend/svelte/frontend/src/accent.css.tpl +34 -0
  607. package/templates/app/frontend/vue/frontend/src/App.vue.tpl +367 -0
  608. package/templates/app/frontend/vue/frontend/src/accent.css.tpl +34 -0
  609. package/templates/app/home/nodefony/controllers/HomeController.ts.tpl +38 -0
  610. package/templates/command/nodefony/command/__NAME__.ts.tpl +132 -0
  611. package/templates/controller/duplex/nodefony/controllers/__NAME__.ts.tpl +188 -0
  612. package/templates/controller/example/nodefony/controllers/__NAME__.ts.tpl +348 -0
  613. package/templates/controller/hello/nodefony/controllers/__NAME__.ts.tpl +143 -0
  614. package/templates/controller/realtime/nodefony/controllers/__NAME__.ts.tpl +153 -0
  615. package/templates/controller/realtime/tests/__KEBAB__-realtime.test.ts.tpl +79 -0
  616. package/templates/controller/rest/nodefony/controllers/__NAME__.ts.tpl +159 -0
  617. package/templates/entity/base/nodefony/entity/__PASCAL__.schema.ts.tpl +31 -0
  618. package/templates/entity/base/nodefony/entity/__PASCAL__.ts.tpl +68 -0
  619. package/templates/entity/controller/nodefony/controllers/__PASCAL__Controller.ts.tpl +335 -0
  620. package/templates/entity/service/nodefony/service/__PASCAL__Service.ts.tpl +126 -0
  621. package/templates/entity/tests/tests/__KEBAB__.e2e.test.ts.tpl +358 -0
  622. package/templates/entity/tests/tests/__KEBAB__.test.ts.tpl +87 -0
  623. package/templates/front/angular/frontend/src/app/app.component.ts.tpl +30 -0
  624. package/templates/front/base/nodefony/controllers/__NAME__.ts.tpl +60 -0
  625. package/templates/front/react/frontend/src/App.tsx.tpl +26 -0
  626. package/templates/front/svelte/frontend/src/App.svelte.tpl +19 -0
  627. package/templates/front/vue/frontend/src/App.vue.tpl +23 -0
  628. package/templates/module/ai/AGENTS.md.tpl +71 -0
  629. package/templates/module/base/README.md.tpl +62 -0
  630. package/templates/module/base/docs/index.md.tpl +55 -0
  631. package/templates/module/base/index.ts.tpl +50 -0
  632. package/templates/module/base/nodefony/config/config.ts.tpl +60 -0
  633. package/templates/module/base/nodefony/config/defineModuleConfig.ts.tpl +55 -0
  634. package/templates/module/base/nodefony/src/errors/__PASCAL__Error.ts.tpl +20 -0
  635. package/templates/module/base/package.json.tpl +53 -0
  636. package/templates/module/base/rolldown.config.ts.tpl +14 -0
  637. package/templates/module/base/tests/__KEBAB__.test.ts.tpl +39 -0
  638. package/templates/module/base/tsconfig.json.tpl +42 -0
  639. package/templates/module/base/vitest.config.ts.tpl +27 -0
  640. package/templates/module/packages/CLAUDE.md.tpl +51 -0
  641. package/templates/module/packages/MEMORY.md.tpl +39 -0
  642. package/templates/module/packages/tsconfig.declarations.json.tpl +19 -0
  643. package/templates/module/packages/tsconfig.tests.json.tpl +11 -0
  644. package/templates/module/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +14 -0
  645. package/templates/module/service/nodefony/interfaces/index.ts.tpl +1 -0
  646. package/templates/module/service/nodefony/service/__PASCAL__Service.ts.tpl +116 -0
  647. package/templates/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +19 -0
  648. package/templates/service/nodefony/service/__PASCAL__Service.ts.tpl +136 -0
  649. package/templates/service/tests/__PASCAL__Service.test.ts.tpl +53 -0
  650. package/templates/shared/front-entry/angular/frontend/src/main.ts.tpl +17 -0
  651. package/templates/shared/front-entry/react/frontend/src/main.tsx.tpl +11 -0
  652. package/templates/shared/front-entry/svelte/frontend/src/main.ts.tpl +13 -0
  653. package/templates/shared/front-entry/vue/frontend/src/main.ts.tpl +12 -0
  654. package/templates/shared/front-registrar/nodefony/frontend/register__PASCAL__Entry.ts.tpl +40 -0
  655. package/templates/shared/front-shell/frontend/index.html.tpl +39 -0
  656. package/templates/shared/ng-app-tsconfig/frontend/tsconfig.app.json.tpl +18 -0
  657. package/templates/shared/svelte-shim/frontend/src/env.d.ts.tpl +12 -0
  658. package/templates/shared/vue-shim/frontend/src/env.d.ts.tpl +15 -0
  659. package/.yarnclean +0 -45
  660. package/CHANGELOG.md +0 -406
  661. package/autoloader.es6 +0 -253
  662. package/builder.es6 +0 -366
  663. package/cli/builder/bundles/bundle.js +0 -328
  664. package/cli/builder/bundles/controller.js +0 -73
  665. package/cli/builder/bundles/users-bundle/.yarnclean +0 -45
  666. package/cli/builder/bundles/users-bundle/Command/fixtureTask.js +0 -47
  667. package/cli/builder/bundles/users-bundle/Command/usersCommand.js +0 -105
  668. package/cli/builder/bundles/users-bundle/Entity/mongoose/userEntity.js +0 -168
  669. package/cli/builder/bundles/users-bundle/Entity/sequelize/userEntity.js +0 -231
  670. package/cli/builder/bundles/users-bundle/Fixtures/users.js +0 -117
  671. package/cli/builder/bundles/users-bundle/Fixtures/usersFixtures.js +0 -114
  672. package/cli/builder/bundles/users-bundle/Resources/config/config.js +0 -90
  673. package/cli/builder/bundles/users-bundle/Resources/config/routing.js +0 -17
  674. package/cli/builder/bundles/users-bundle/Resources/config/security.js +0 -96
  675. package/cli/builder/bundles/users-bundle/Resources/config/services.js +0 -7
  676. package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.dev.config.js +0 -13
  677. package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.prod.config.js +0 -31
  678. package/cli/builder/bundles/users-bundle/Resources/config/webpack.config.js +0 -146
  679. package/cli/builder/bundles/users-bundle/Resources/js/users.js +0 -153
  680. package/cli/builder/bundles/users-bundle/Resources/public/favicon.ico +0 -0
  681. package/cli/builder/bundles/users-bundle/Resources/public/images/users-logo.png +0 -0
  682. package/cli/builder/bundles/users-bundle/Resources/scss/awesome/font-awesome.config.js +0 -11
  683. package/cli/builder/bundles/users-bundle/Resources/scss/custom.scss +0 -23
  684. package/cli/builder/bundles/users-bundle/Resources/scss/users.scss +0 -59
  685. package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/login.js +0 -235
  686. package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/users.js +0 -232
  687. package/cli/builder/bundles/users-bundle/Resources/translations/login.en_en.yml +0 -14
  688. package/cli/builder/bundles/users-bundle/Resources/translations/login.fr_fr.yml +0 -14
  689. package/cli/builder/bundles/users-bundle/Resources/translations/users.en_en.yml +0 -35
  690. package/cli/builder/bundles/users-bundle/Resources/translations/users.fr_fr.yml +0 -36
  691. package/cli/builder/bundles/users-bundle/Resources/views/base.html.twig +0 -32
  692. package/cli/builder/bundles/users-bundle/Resources/views/footer.html.twig +0 -7
  693. package/cli/builder/bundles/users-bundle/Resources/views/header.html.twig +0 -90
  694. package/cli/builder/bundles/users-bundle/Resources/views/login/login.html.twig +0 -43
  695. package/cli/builder/bundles/users-bundle/Resources/views/users/createUser.html.twig +0 -296
  696. package/cli/builder/bundles/users-bundle/Resources/views/users/readUsers.html.twig +0 -94
  697. package/cli/builder/bundles/users-bundle/controller/api/graphql/graphqlController.js +0 -56
  698. package/cli/builder/bundles/users-bundle/controller/api/graphql/userResolver.js +0 -121
  699. package/cli/builder/bundles/users-bundle/controller/api/graphql/usertype.js +0 -58
  700. package/cli/builder/bundles/users-bundle/controller/api/openapi/loginApiController.js +0 -210
  701. package/cli/builder/bundles/users-bundle/controller/api/openapi/restUserController.js +0 -244
  702. package/cli/builder/bundles/users-bundle/controller/loginController.js +0 -91
  703. package/cli/builder/bundles/users-bundle/controller/usersController.js +0 -332
  704. package/cli/builder/bundles/users-bundle/package.json +0 -58
  705. package/cli/builder/bundles/users-bundle/readme.md +0 -360
  706. package/cli/builder/bundles/users-bundle/services/usersService.js +0 -411
  707. package/cli/builder/bundles/users-bundle/src/providers/mongoose/userProvider.js +0 -47
  708. package/cli/builder/bundles/users-bundle/src/providers/sequelize/userProvider.js +0 -48
  709. package/cli/builder/bundles/users-bundle/tests/loginTest.js +0 -182
  710. package/cli/builder/bundles/users-bundle/usersBundle.js +0 -26
  711. package/cli/builder/microService/microService.js +0 -261
  712. package/cli/builder/microService/skeletons/.editorconfig +0 -18
  713. package/cli/builder/microService/skeletons/.env-cmdrc.js +0 -32
  714. package/cli/builder/microService/skeletons/.jshintrc +0 -37
  715. package/cli/builder/microService/skeletons/README.md +0 -117
  716. package/cli/builder/microService/skeletons/bin/bash/hello.sh +0 -5
  717. package/cli/builder/microService/skeletons/bin/cli +0 -13
  718. package/cli/builder/microService/skeletons/bin/python/hello.py +0 -20
  719. package/cli/builder/microService/skeletons/config/config.js +0 -29
  720. package/cli/builder/microService/skeletons/config/pm2.config.js +0 -72
  721. package/cli/builder/microService/skeletons/config/webpack/webpack.config.dev.js +0 -8
  722. package/cli/builder/microService/skeletons/config/webpack/webpack.config.prod.js +0 -25
  723. package/cli/builder/microService/skeletons/config/webpack.config.js +0 -114
  724. package/cli/builder/microService/skeletons/package.json +0 -76
  725. package/cli/builder/microService/skeletons/src/browser/index.css +0 -3
  726. package/cli/builder/microService/skeletons/src/browser/index.js +0 -16
  727. package/cli/builder/microService/skeletons/src/browser/socketio.js +0 -46
  728. package/cli/builder/microService/skeletons/src/cli/cli.js +0 -224
  729. package/cli/builder/microService/skeletons/src/cli/menu.js +0 -28
  730. package/cli/builder/microService/skeletons/src/n-api/README.md +0 -1
  731. package/cli/builder/microService/skeletons/src/n-api/binding.gyp +0 -14
  732. package/cli/builder/microService/skeletons/src/n-api/hello.cc +0 -14
  733. package/cli/builder/microService/skeletons/src/n-api/hello.js +0 -23
  734. package/cli/builder/microService/skeletons/src/n-api/package.json +0 -15
  735. package/cli/builder/microService/skeletons/src/node/examples/index.js +0 -120
  736. package/cli/builder/microService/skeletons/src/node/index.js +0 -102
  737. package/cli/builder/microService/skeletons/src/node/services/markdown/markdown.js +0 -27
  738. package/cli/builder/microService/skeletons/src/node/services/servers/http.js +0 -45
  739. package/cli/builder/microService/skeletons/src/node/services/servers/https.js +0 -44
  740. package/cli/builder/microService/skeletons/src/node/services/socketio/socketio.js +0 -46
  741. package/cli/builder/microService/skeletons/src/node/services/syscall/syscall.js +0 -111
  742. package/cli/builder/microService/skeletons/src/node/services/worker/thread.js +0 -59
  743. package/cli/builder/microService/skeletons/src/node/services/worker/worker.js +0 -60
  744. package/cli/builder/microService/skeletons/src/templates/base.html +0 -12
  745. package/cli/builder/microService/skeletons/src/templates/socket.html +0 -23
  746. package/cli/builder/microService/skeletons/tests/unit/serviceTest.js +0 -30
  747. package/cli/builder/project/project.js +0 -474
  748. package/cli/builder/project/skeletons/README.md +0 -778
  749. package/cli/builder/project/skeletons/bin/dev-deploy.sh +0 -5
  750. package/cli/builder/project/skeletons/bin/generateCertificates.sh.skeleton +0 -180
  751. package/cli/builder/project/skeletons/bin/prod-deploy.sh +0 -3
  752. package/cli/builder/project/skeletons/config/config.js.skeleton +0 -178
  753. package/cli/builder/project/skeletons/config/openssl/ca/openssl.cnf.skeleton +0 -150
  754. package/cli/builder/project/skeletons/config/openssl/ca_intermediate/openssl.cnf.skeleton +0 -152
  755. package/cli/builder/project/skeletons/config/pm2.config.js.skeleton +0 -62
  756. package/cli/builder/project/skeletons/documentation.html.twig +0 -24
  757. package/cli/builder/project/skeletons/editorconfig.skeleton +0 -18
  758. package/cli/builder/project/skeletons/eslintignore.skeleton +0 -15
  759. package/cli/builder/project/skeletons/eslintrc.js.skeleton +0 -97
  760. package/cli/builder/project/skeletons/gitignore.skeleton +0 -32
  761. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.37.entity-user.js +0 -137
  762. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.38.entity-session.js +0 -97
  763. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.39.entity-requests.js +0 -115
  764. package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.40.entity-jwts.js +0 -97
  765. package/cli/builder/project/skeletons/migrations/migrations.skeleton.js +0 -101
  766. package/cli/builder/project/skeletons/package.json.twig +0 -71
  767. package/cli/builder/react/reactBuilder.js +0 -224
  768. package/cli/builder/react/skeletons/app/Resources/databases/nodefony.db +0 -0
  769. package/cli/builder/react/skeletons/app/Resources/translations/messages.en_en.yml +0 -5
  770. package/cli/builder/react/skeletons/app/Resources/translations/messages.fr_fr.yml +0 -5
  771. package/cli/builder/react/skeletons/app/Resources/views/base.html.twig +0 -33
  772. package/cli/builder/react/skeletons/app/config/config.js +0 -392
  773. package/cli/builder/react/skeletons/app/config/routing.js +0 -10
  774. package/cli/builder/react/skeletons/app/config/security.js +0 -74
  775. package/cli/builder/react/skeletons/app/controller/appController.js +0 -22
  776. package/cli/builder/sandbox/sandBoxBuilder.js +0 -610
  777. package/cli/builder/sandbox/skeletons/Resources/css/entry.css +0 -48
  778. package/cli/builder/sandbox/skeletons/Resources/js/entry.js +0 -60
  779. package/cli/builder/sandbox/skeletons/Resources/public/manifest.json +0 -32
  780. package/cli/builder/sandbox/skeletons/Resources/translations/messages.en_en.yml +0 -5
  781. package/cli/builder/sandbox/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
  782. package/cli/builder/sandbox/skeletons/Resources/views/base.html.twig +0 -46
  783. package/cli/builder/sandbox/skeletons/Resources/views/index.html.twig +0 -34
  784. package/cli/builder/sandbox/skeletons/bootstrap/custom.scss +0 -27
  785. package/cli/builder/sandbox/skeletons/bootstrap/entry.scss +0 -60
  786. package/cli/builder/sandbox/skeletons/workbox/templates/index.html.twig +0 -32
  787. package/cli/builder/sandbox/skeletons/workbox/workers/service-worker.js +0 -196
  788. package/cli/builder/skeletons/Resources/public/favicon.ico +0 -0
  789. package/cli/builder/skeletons/Resources/public/images/app-logo.png +0 -0
  790. package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.html.twig +0 -1
  791. package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.json.twig +0 -24
  792. package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.html.twig +0 -1
  793. package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.json.twig +0 -20
  794. package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.html.twig +0 -1
  795. package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.json.twig +0 -20
  796. package/cli/builder/skeletons/Resources/views/framework-bundle/views/500.html.twig +0 -1
  797. package/cli/builder/skeletons/Resources/views/framework-bundle/views/base.html.twig +0 -30
  798. package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.html.twig +0 -1
  799. package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.json.twig +0 -24
  800. package/cli/builder/skeletons/Resources/views/framework-bundle/views/footer.html.twig +0 -33
  801. package/cli/builder/skeletons/Resources/views/framework-bundle/views/header.html.twig +0 -6
  802. package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.html.twig +0 -6
  803. package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.json.twig +0 -1
  804. package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.html.twig +0 -125
  805. package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.json.twig +0 -5
  806. package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.html.twig +0 -1
  807. package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.json.twig +0 -24
  808. package/cli/builder/skeletons/app/appKernel.js +0 -133
  809. package/cli/builder/skeletons/binding/binding.cc +0 -26
  810. package/cli/builder/skeletons/binding/binding.skeleton +0 -8
  811. package/cli/builder/skeletons/bundle/bundleClass.js +0 -37
  812. package/cli/builder/skeletons/command/commandClass.js +0 -11
  813. package/cli/builder/skeletons/command/taskClass.js +0 -20
  814. package/cli/builder/skeletons/config/config.js +0 -138
  815. package/cli/builder/skeletons/config/nodefony/elastic-bundle.js +0 -37
  816. package/cli/builder/skeletons/config/nodefony/framework-bundle.js +0 -22
  817. package/cli/builder/skeletons/config/nodefony/http-bundle.js +0 -104
  818. package/cli/builder/skeletons/config/nodefony/mail-bundle.js +0 -44
  819. package/cli/builder/skeletons/config/nodefony/mongoose-bundle.js +0 -51
  820. package/cli/builder/skeletons/config/nodefony/monitoring-bundle.js +0 -34
  821. package/cli/builder/skeletons/config/nodefony/realtime-bundle.js +0 -15
  822. package/cli/builder/skeletons/config/nodefony/redis-bundle.js +0 -44
  823. package/cli/builder/skeletons/config/nodefony/security-bundle.js +0 -25
  824. package/cli/builder/skeletons/config/nodefony/sequelize-bundle.js +0 -156
  825. package/cli/builder/skeletons/config/routing.js +0 -55
  826. package/cli/builder/skeletons/config/security.js +0 -102
  827. package/cli/builder/skeletons/config/services.js +0 -1
  828. package/cli/builder/skeletons/config/webpack/webpack.dev.config.js +0 -13
  829. package/cli/builder/skeletons/config/webpack/webpack.prod.config.js +0 -20
  830. package/cli/builder/skeletons/config/webpack.config.js +0 -148
  831. package/cli/builder/skeletons/controller/controllerClass.js +0 -75
  832. package/cli/builder/skeletons/package.json.twig +0 -57
  833. package/cli/builder/skeletons/unittest/testFile.js +0 -46
  834. package/cli/builder/vue/skeletons/Resources/public/images/app-logo.png +0 -0
  835. package/cli/builder/vue/skeletons/Resources/translations/messages.en_en.yml +0 -5
  836. package/cli/builder/vue/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
  837. package/cli/builder/vue/skeletons/vue.config.js +0 -129
  838. package/cli/builder/vue/vueBuilder.js +0 -410
  839. package/cli/generate/generate.es6 +0 -103
  840. package/cli/install/install.js +0 -190
  841. package/cli/sequelize/sequelize.js +0 -94
  842. package/cli/start.js +0 -702
  843. package/cli/tools/pm2.es6 +0 -112
  844. package/cli/tools/tools.es6 +0 -97
  845. package/cli.es6 +0 -925
  846. package/container.es6 +0 -272
  847. package/error.es6 +0 -293
  848. package/fileClass.es6 +0 -242
  849. package/finder/file.es6 +0 -33
  850. package/finder/fileResult.es6 +0 -138
  851. package/finder/finder2.es6 +0 -275
  852. package/finder.es6 +0 -427
  853. package/kernel/annotations/annotations.es6 +0 -286
  854. package/kernel/api/api.es6 +0 -61
  855. package/kernel/api/graphqlApi.es6 +0 -107
  856. package/kernel/api/jsonApi.es6 +0 -177
  857. package/kernel/api/openApi.es6 +0 -139
  858. package/kernel/api/schemas/openApiSchema.js +0 -394
  859. package/kernel/babylon.es6 +0 -162
  860. package/kernel/bundle.es6 +0 -1200
  861. package/kernel/cliKernel.es6 +0 -869
  862. package/kernel/command.es6 +0 -78
  863. package/kernel/commands/nodefonyCommand.es6 +0 -247
  864. package/kernel/commands/tasks/bundlesTask.es6 +0 -59
  865. package/kernel/controllers/controller.es6 +0 -791
  866. package/kernel/fixture.es6 +0 -19
  867. package/kernel/injections/injections.es6 +0 -424
  868. package/kernel/kernel.es6 +0 -1960
  869. package/kernel/kernelWatcher.es6 +0 -387
  870. package/kernel/orm/entity.es6 +0 -59
  871. package/kernel/orm/orm.es6 +0 -139
  872. package/kernel/reader.es6 +0 -290
  873. package/kernel/security/encoder.es6 +0 -17
  874. package/kernel/security/factories/factory.es6 +0 -111
  875. package/kernel/security/factories/passeportFactory.es6 +0 -61
  876. package/kernel/security/provider.es6 +0 -58
  877. package/kernel/security/providers/chainProvider.es6 +0 -99
  878. package/kernel/security/providers/memoryProvider.es6 +0 -55
  879. package/kernel/security/providers/providerManager.es6 +0 -67
  880. package/kernel/security/providers/userEntityProvider.es6 +0 -50
  881. package/kernel/security/role.es6 +0 -12
  882. package/kernel/security/secureArea.es6 +0 -431
  883. package/kernel/security/tokens/token.es6 +0 -171
  884. package/kernel/security/user.es6 +0 -106
  885. package/kernel/serviceRealTime.es6 +0 -21
  886. package/kernel/services/connectionsService.es6 +0 -93
  887. package/kernel/services/cron/cronService.es6 +0 -123
  888. package/kernel/task.es6 +0 -80
  889. package/kernel/templates.es6 +0 -22
  890. package/kernel/templating/twig.es6 +0 -218
  891. package/kernel/tests/cliTest.js +0 -59
  892. package/kernel/tests/containerTest.js +0 -232
  893. package/kernel/tests/kernelTest.js +0 -39
  894. package/nodefony.es6 +0 -1084
  895. package/notificationsCenter.es6 +0 -118
  896. package/protocol.es6 +0 -86
  897. package/protocols/bayeux.es6 +0 -174
  898. package/protocols/jsonRpc/jsonrpc.es6 +0 -56
  899. package/result.es6 +0 -99
  900. package/service.es6 +0 -288
  901. package/syslog/pdu.es6 +0 -141
  902. package/syslog/syslog.es6 +0 -754
  903. package/watcher.es6 +0 -113
@@ -0,0 +1,780 @@
1
+ import { COUNTED_FAMILIES, FAMILIES, TITLES, countFindings, createPalette, highlightCode, isSubrule, pluralize, preventedChecks, sectionTitle, skippedChecks, splitAction, stateSymbol, summaryLine, wrap } from "./report.js";
2
+ import { formatAge, lastBootFileFor } from "./lastBoot.js";
3
+ import path from "node:path";
4
+ //#region src/kernel/checks/renderReport.ts
5
+ /**
6
+ * Le rapport de `nodefony doctor` tel qu'un HUMAIN le lit — rendu PUR.
7
+ *
8
+ * Ce module ne connaît ni le terminal, ni l'horloge, ni l'environnement : la
9
+ * largeur, la couleur et l'instant lui sont DONNÉS, et il rend des lignes. Deux
10
+ * raisons, et la seconde est la vraie.
11
+ *
12
+ * 1. Il devient éprouvable ailleurs que dans le terminal où il tourne —
13
+ * c'est-à-dire en intégration continue, où il n'y en a pas.
14
+ * 2. Un rapport qui s'écrit au fil de l'eau ne peut pas se relire lui-même :
15
+ * impossible d'aligner une colonne sur le plus long titre, de regrouper deux
16
+ * contrôles qui partagent une raison, ou de compter ce qu'on vient d'écrire.
17
+ * Le rendu produit donc le document ENTIER avant qu'un seul octet ne sorte.
18
+ *
19
+ * ## Ce que la forme doit au lecteur
20
+ *
21
+ * Un diagnostic se lit en panne, souvent vite, parfois par quelqu'un qui ne
22
+ * connaît pas le projet. Il répond donc dans cet ordre : **où** l'on regarde,
23
+ * **l'état de chaque famille** d'un coup d'œil, le **détail** de ce qui ne va
24
+ * pas, ce qui n'a **pas pu être regardé**, puis un bilan chiffré. Rien d'autre :
25
+ * ce qui va bien ne se commente pas, et le bruit finit par masquer le signal.
26
+ */
27
+ /** L'indentation du corps, alignée sous le titre des lignes à puce. */
28
+ /**
29
+ * L'indentation du CONTENU d'un item.
30
+ *
31
+ * Le rendu tient sur une grille unique : un item commence colonne 4 (symbole ou
32
+ * numéro), son contenu colonne 7. Trois indentations différentes cohabitaient,
33
+ * et l'œil ne savait plus ce qui appartenait à quoi.
34
+ */
35
+ const BODY = " ";
36
+ /** L'indentation d'un ITEM — symbole, numéro, titre. */
37
+ const ITEM = " ";
38
+ /**
39
+ * Au-delà de cette longueur, une commande occupe sa ligne SEULE.
40
+ *
41
+ * Elle cesse alors de fixer la colonne où s'aligne la glose des autres.
42
+ */
43
+ const ACTION_COLUMN_MAX = 28;
44
+ /** Au-delà, une énumération cesse d'informer et se met à noyer le rapport. */
45
+ const PUCES_MAX = 3;
46
+ /**
47
+ * Une énumération BORNÉE, qui dit combien elle a tu.
48
+ *
49
+ * Le bilan d'un démarrage peut porter huit modules écartés et quatre messages
50
+ * critiques : quarante lignes qui repoussaient le reste du rapport hors de
51
+ * l'écran. Les trois premières suffisent à reconnaître le motif ; le compte
52
+ * total est déjà donné juste au-dessus, et le fichier de bilan porte le reste.
53
+ *
54
+ * @param items - les lignes à énumérer, déjà peintes.
55
+ * @param p - la peinture.
56
+ * @returns les puces, plus une mention du reste s'il y en a.
57
+ */
58
+ function firstFew(items, p) {
59
+ const lines = items.slice(0, PUCES_MAX).map((text) => `${BODY} · ${text}`);
60
+ const remainder = items.length - PUCES_MAX;
61
+ if (remainder > 0) lines.push(p.dim(`${BODY} · … et ${pluralize(remainder, "autre")}`));
62
+ return lines;
63
+ }
64
+ /**
65
+ * Un bilan de démarrage mérite d'être rapporté quand il porte une MAUVAISE
66
+ * nouvelle.
67
+ *
68
+ * Un démarrage abouti, complet et sans brique manquante ne se commente pas :
69
+ * l'afficher à chaque contrôle serait du bruit. Les avertissements seuls ne
70
+ * suffisent pas non plus à déclencher — un boot de développement en produit
71
+ * régulièrement.
72
+ *
73
+ * @param entry - le bilan lu.
74
+ * @returns `true` s'il y a quelque chose à dire.
75
+ */
76
+ function worthReporting(entry) {
77
+ return entry.status === "failed" || entry.healthy === false || Boolean(entry.bricksSkipped?.length) || Boolean(entry.errors);
78
+ }
79
+ /**
80
+ * Regroupe les contrôles sautés qui partagent la MÊME raison.
81
+ *
82
+ * Hors d'une application, quatre familles sont sautées pour un seul et même
83
+ * motif. Les énumérer une par une répète quatre fois la même phrase et le même
84
+ * geste : le lecteur croit à quatre problèmes distincts et cesse de lire avant
85
+ * la fin. Une seule entrée, quatre titres, un geste.
86
+ *
87
+ * @param skipped - les contrôles sautés, dans l'ordre de lecture.
88
+ * @returns un groupe par raison distincte, l'ordre du premier membre conservé.
89
+ */
90
+ function groupByReason(skipped) {
91
+ const groups = [];
92
+ for (const check of skipped) {
93
+ const existing = groups.find((g) => g.reason === check.reason && g.unlock === check.unlock);
94
+ if (existing) existing.titles.push(check.title);
95
+ else groups.push({
96
+ titles: [check.title],
97
+ reason: check.reason,
98
+ unlock: check.unlock
99
+ });
100
+ }
101
+ return groups;
102
+ }
103
+ /**
104
+ * Le document complet, ligne par ligne, sans retour chariot final.
105
+ *
106
+ * @param report - le diagnostic collecté.
107
+ * @param opts - le décor de rendu (largeur, couleur, instant).
108
+ * @returns les lignes à écrire, dans l'ordre.
109
+ */
110
+ function renderReport(report, opts) {
111
+ const { width, color, now, strict } = opts;
112
+ const p = createPalette(color);
113
+ const lines = [];
114
+ const skipped = skippedChecks(report.execution);
115
+ /** Ouvre une section : un titre, prolongé par un filet jusqu'au bord. */
116
+ const section = (name, teinte) => {
117
+ const { title, divider: trait } = sectionTitle(name, width);
118
+ lines.push("", teinte(p.strong(title)) + p.dim(trait), "");
119
+ };
120
+ lines.push(...enTete(report, opts, p));
121
+ lines.push(...bandeau(report, skipped, p));
122
+ section("ÉTAT", (t) => t);
123
+ lines.push(...renderSummary(report, p, width));
124
+ const problems = findingGroups(report).filter((g) => g.items.length > 0);
125
+ if (problems.length > 0) {
126
+ section("PROBLÈMES", p.failure);
127
+ const totalProblems = problems.reduce((n, g) => n + g.items.length, 0);
128
+ let index = 0;
129
+ for (const { title, items } of problems) for (const item of items) {
130
+ if (index > 0) lines.push("");
131
+ lines.push(...problemBlock(++index, totalProblems, title, item, p, opts));
132
+ }
133
+ }
134
+ if (skipped.length > 0) {
135
+ section("NON CONTRÔLÉ", p.warning);
136
+ lines.push(...uncheckedBlocks(skipped, p, opts));
137
+ if (strict) {
138
+ lines.push("");
139
+ const empeches = preventedChecks(skipped);
140
+ for (const l of wrap(empeches.length > 0 ? "mode strict : un contrôle EMPÊCHÉ fait échouer la commande." : skipped.every((c) => c.notApplicable) ? "mode strict : ce qui manque ici n'avait rien à examiner — le code de sortie n'en tient pas compte." : "mode strict : ce qui manque ici n'a pas été demandé, ou n'avait rien à examiner — le code de sortie n'en tient pas compte.", width, BODY)) lines.push(p.dim(l));
141
+ }
142
+ }
143
+ const openings = openSurface(report, width, p);
144
+ if (openings.length > 0) {
145
+ section("SURFACE OUVERTE", p.warning);
146
+ lines.push(...openings);
147
+ }
148
+ const retires = manquementsLive(report, "service-lost");
149
+ if (retires.length > 0) {
150
+ section("CE QUE L'ENVIRONNEMENT VISÉ RETIRE", p.warning);
151
+ for (const f of retires) for (const [i, l] of wrap(f.message, width, BODY).entries()) lines.push(i === 0 ? `${ITEM}${p.warning("—")} ${l.trim()}` : l);
152
+ lines.push("");
153
+ for (const l of wrap("Un module `policy: \"dev\"` est ÉCARTÉ là-bas : c'est sa raison d'être, et ces lignes sont alors normales. À regarder seulement si du code servi en production réclame l'un de ces services.", width - 4, " ")) lines.push(p.dim(l));
154
+ }
155
+ const tellingSummaries = report.lastBoots.filter(worthReporting);
156
+ if (tellingSummaries.length > 0) {
157
+ section(tellingSummaries.length > 1 ? "DERNIERS DÉMARRAGES" : "DERNIER DÉMARRAGE", p.warning);
158
+ let premier = true;
159
+ for (const startup of tellingSummaries) {
160
+ if (!premier) lines.push("");
161
+ premier = false;
162
+ lines.push(...lastStartup(startup, now, p, width));
163
+ }
164
+ }
165
+ const actions = nextActions(report, skipped);
166
+ if (actions.length > 0) {
167
+ section("À FAIRE ENSUITE", p.action);
168
+ lines.push(...actionList(actions, p, width));
169
+ }
170
+ lines.push("");
171
+ lines.push(...footer(report, skipped, p, width, opts.durationMs));
172
+ lines.push("");
173
+ return lines;
174
+ }
175
+ /**
176
+ * Le VERDICT, avant tout le reste.
177
+ *
178
+ * Il était en bas, et c'était le défaut le plus coûteux de ce rendu : la
179
+ * question qu'on se pose en lançant `doctor` est « est-ce que ça va ? », et
180
+ * elle n'obtenait sa réponse qu'après soixante lignes de détail. Un rapport se
181
+ * lit en panne, souvent vite : il doit répondre à la première ligne, puis
182
+ * justifier.
183
+ *
184
+ * @param report - le diagnostic.
185
+ * @param skipped - les contrôles qui n'ont pas eu lieu.
186
+ * @param p - la peinture.
187
+ * @returns une ligne, plus une ligne vide.
188
+ */
189
+ function bandeau(report, skipped, p) {
190
+ const total = countFindings(report);
191
+ const passes = passedCheckCount(report);
192
+ if (total > 0) {
193
+ const angles = skipped.length > 0 ? p.warning(` ${pluralize(skipped.length, "angle mort", "angles morts")}`) : "";
194
+ return [p.failure(` ${stateSymbol("echec")} ${p.strong(pluralize(total, "PROBLÈME").toUpperCase())}`) + angles];
195
+ }
196
+ if (passes === 0) return [p.warning(` ${stateSymbol("non-controle")} ${p.strong("AUCUN CONTRÔLE N'A PU ÊTRE FAIT ICI")}`)];
197
+ return [skipped.length > 0 ? p.ok(` ${stateSymbol("ok")} ${p.strong("RIEN À SIGNALER")}`) + p.warning(` (${pluralize(skipped.length, "angle mort", "angles morts")})`) : p.ok(` ${stateSymbol("ok")} ${p.strong("RIEN À SIGNALER")}`)];
198
+ }
199
+ /**
200
+ * Un problème, rendu comme une erreur de compilateur.
201
+ *
202
+ * La forme vient de ce qui se fait de mieux dans un terminal : un numéro pour
203
+ * s'y référer, le nom de la famille pour savoir DE QUOI on parle, une gouttière
204
+ * qui relie visuellement le constat à son geste, et le geste seul sur sa ligne,
205
+ * préfixé d'un chevron — c'est la seule chose qu'un lecteur pressé cherche, et
206
+ * elle doit se copier sans attraper le reste de la phrase.
207
+ *
208
+ * @param index - le rang du problème dans le rapport.
209
+ * @param family - le titre de la famille dont il vient.
210
+ * @param item - le manquement (message, et le fichier qui le porte).
211
+ * @param p - la peinture.
212
+ * @param opts - le décor (largeur, couleur).
213
+ * @returns les lignes du bloc.
214
+ */
215
+ function problemBlock(index, total, family, item, p, opts) {
216
+ const { width, color } = opts;
217
+ const { finding, action } = splitAction(item.message);
218
+ const lines = [];
219
+ const rang = String(index).padStart(String(total).length, " ");
220
+ lines.push(`${ITEM}${p.failure(p.strong(rang))} ${p.strong(family)}`);
221
+ const gutter = `${BODY}${p.dim("│")} `;
222
+ for (const l of wrap(finding, width - 10, "")) lines.push(gutter + highlightCode(l, p, color));
223
+ if (item.file) {
224
+ const behindGutter = `${BODY}│ ${item.file}`;
225
+ lines.push(behindGutter.length <= width ? gutter + p.dim(item.file) : `${BODY}${p.dim(item.file)}`);
226
+ }
227
+ lines.push(...actionLine(action, p, width));
228
+ return lines;
229
+ }
230
+ /**
231
+ * Les contrôles qui n'ont pas eu lieu, groupés par cause.
232
+ *
233
+ * @param skipped - les contrôles sautés.
234
+ * @param p - la peinture.
235
+ * @param opts - le décor.
236
+ * @returns les lignes de la section.
237
+ */
238
+ function uncheckedBlocks(skipped, p, opts) {
239
+ const { width, color } = opts;
240
+ const lines = [];
241
+ let premier = true;
242
+ for (const group of groupByReason(skipped)) {
243
+ if (!premier) lines.push("");
244
+ premier = false;
245
+ const [firstTitle, ...otherTitles] = wrap(group.titles.join(", "), width - 8, "");
246
+ lines.push(`${ITEM}${p.warning(stateSymbol("non-controle"))} ${p.strong(firstTitle ?? "")}`);
247
+ for (const l of otherTitles) lines.push(`${BODY}${p.strong(l)}`);
248
+ const gutter = `${BODY}${p.dim("│")} `;
249
+ for (const l of wrap(group.reason, width - 10, "")) lines.push(gutter + p.warning(highlightCode(l, p, color)));
250
+ lines.push(...actionLine(group.unlock, p, width));
251
+ }
252
+ return lines;
253
+ }
254
+ /**
255
+ * Le geste, seul sur sa ligne, sous un chevron.
256
+ *
257
+ * Les accents graves qui l'entourent dans le message SAUTENT : la ligne est
258
+ * déjà désignée comme une commande par son chevron, et un accent grave collé
259
+ * part avec la commande quand on la copie — puis le terminal se plaint d'un
260
+ * fichier introuvable.
261
+ *
262
+ * @param action - le geste, ou `undefined` s'il n'y en a pas.
263
+ * @param p - la peinture.
264
+ * @param width - largeur utile.
265
+ * @returns les lignes, vides s'il n'y a pas de geste.
266
+ */
267
+ function actionLine(action, p, width) {
268
+ if (!action) return [];
269
+ const cleaned = action.replace(/`/gu, "").trim();
270
+ return wrap(cleaned, width - 10, "").map((l, i) => i === 0 ? `${BODY}${p.action("▸")} ${p.action(l)}` : `${BODY} ${p.action(l)}`);
271
+ }
272
+ /**
273
+ * Les gestes du rapport, DÉDOUBLONNÉS et ordonnés.
274
+ *
275
+ * C'est ce qui manquait le plus : les gestes étaient dispersés dans le détail,
276
+ * chacun sous son problème, et le même `npm run build` pouvait apparaître trois
277
+ * fois. Un lecteur qui veut agir devait relire tout le rapport pour reconstituer
278
+ * la liste — et un agent, la deviner.
279
+ *
280
+ * L'ordre est celui des problèmes, puis des angles morts : ce qui EMPÊCHE
281
+ * d'abord, ce qui MANQUE ensuite.
282
+ *
283
+ * @param report - le diagnostic.
284
+ * @param skipped - les contrôles sautés.
285
+ * @returns les gestes, sans doublon, dans l'ordre où les faire.
286
+ */
287
+ function nextActions(report, skipped) {
288
+ const actions = [];
289
+ const vus = /* @__PURE__ */ new Set();
290
+ const add = (command, why) => {
291
+ const cleaned = command.replace(/^`|`$/gu, "").trim();
292
+ if (cleaned === "" || vus.has(cleaned)) return;
293
+ vus.add(cleaned);
294
+ actions.push({
295
+ command: cleaned,
296
+ why
297
+ });
298
+ };
299
+ for (const { title, items } of findingGroups(report)) for (const item of items) {
300
+ const { action } = splitAction(item.message);
301
+ if (action) add(action, title);
302
+ }
303
+ for (const group of groupByReason(skipped)) if (group.unlock) add(group.unlock, group.titles.join(", "));
304
+ return actions;
305
+ }
306
+ /**
307
+ * Ce qu'un geste répare, rendu SOUS lui quand il ne tient pas à sa droite.
308
+ *
309
+ * @param why - la famille que ce geste referme.
310
+ * @param indent - l'indentation, alignée sous la commande.
311
+ * @param width - largeur utile du terminal.
312
+ * @param p - la peinture.
313
+ * @returns les lignes, repliées pour ne jamais déborder.
314
+ */
315
+ function underAction(why, indent, width, p) {
316
+ return wrap(why, width - indent.length, "").map((l) => indent + p.dim(l));
317
+ }
318
+ /**
319
+ * La liste des gestes, numérotée et alignée.
320
+ *
321
+ * @param actions - les gestes, déjà dédoublonnés.
322
+ * @param p - la peinture.
323
+ * @param width - largeur utile.
324
+ * @returns les lignes de la section.
325
+ */
326
+ function actionList(actions, p, width) {
327
+ const shortLengths = actions.map((g) => g.command.length).filter((n) => n <= ACTION_COLUMN_MAX);
328
+ const column = shortLengths.length > 0 ? Math.max(...shortLengths) : 0;
329
+ const lines = [];
330
+ for (const [i, g] of actions.entries()) {
331
+ const rang = String(i + 1).padStart(String(actions.length).length, " ");
332
+ const indent = ITEM + " ".repeat(rang.length + 2);
333
+ const measure = `${ITEM}${rang} ${g.command}`;
334
+ const overflows = g.command.length > column;
335
+ const glose = overflows ? "" : ` ${" ".repeat(column - g.command.length)}${g.why}`;
336
+ if (measure.length <= width) {
337
+ const debut = `${ITEM}${p.dim(rang)} ${p.action(g.command)}`;
338
+ lines.push(glose !== "" && measure.length + glose.length <= width ? debut + p.dim(glose) : debut);
339
+ if (overflows || measure.length + glose.length > width) lines.push(...underAction(g.why, indent, width, p));
340
+ continue;
341
+ }
342
+ const [premiere, ...suite] = wrap(g.command, width - indent.length, "");
343
+ lines.push(`${ITEM}${p.dim(rang)} ${p.action(premiere ?? "")}`);
344
+ for (const l of suite) lines.push(indent + p.action(l));
345
+ lines.push(...underAction(g.why, indent, width, p));
346
+ }
347
+ return lines;
348
+ }
349
+ /**
350
+ * L'en-tête : QUI est ausculté.
351
+ *
352
+ * Un rapport qui porte sur un autre dossier que celui qu'on croit se lit de
353
+ * travers, dans les deux sens — et c'est le cas normal, puisque la cible est
354
+ * l'APPLICATION et non le dossier où l'on a tapé.
355
+ */
356
+ function enTete(report, opts, p) {
357
+ const lines = ["", ` ${p.strong("nodefony doctor")}`];
358
+ const name = report.appName;
359
+ if (name) lines[1] += p.dim(` · ${name}`);
360
+ lines.push(p.dim(` ${report.root}`));
361
+ if (opts.targetEnv) lines.push(p.warning(` exigences évaluées pour l'environnement ${opts.targetEnv}`));
362
+ if (opts.launchedFrom && path.resolve(report.root) !== path.resolve(opts.launchedFrom)) lines.push(p.dim(` lancé depuis ${opts.launchedFrom}`));
363
+ lines.push("");
364
+ return lines;
365
+ }
366
+ /**
367
+ * Le sommaire : l'état de chaque famille, d'un coup d'œil.
368
+ *
369
+ * C'est ce qui répond à « y a-t-il un problème, et où ? » sans rien lire
370
+ * d'autre. **L'état d'EXÉCUTION prime toujours sur les trouvailles** : un
371
+ * contrôle qui n'a rien regardé n'a rien trouvé, et l'afficher en vert est le
372
+ * seul mensonge que ce sommaire ne doit jamais dire.
373
+ */
374
+ function renderSummary(report, p, width) {
375
+ const { freshness, readiness, wiring, findings, scanned, execution } = report;
376
+ const state = (n) => n > 0 ? "echec" : "ok";
377
+ /**
378
+ * Les familles qui REPORTING_ONLY au lieu d'accuser.
379
+ *
380
+ * 🔴 `gating` relève ce que l'environnement visé retire. Qu'un module
381
+ * `policy: "dev"` disparaisse en production est sa raison d'être : le rendre
382
+ * en `✗` faisait passer le fonctionnement NORMAL du produit pour un défaut,
383
+ * et le geste qui suivait — « retire `policy: "dev"` » — aurait embarqué
384
+ * l'outillage de développement en production.
385
+ */
386
+ const REPORTING_ONLY = /* @__PURE__ */ new Set(["gating"]);
387
+ const line = (family, n, detail) => {
388
+ const exec = execution[family] ?? {
389
+ ran: false,
390
+ short: "état absent"
391
+ };
392
+ return exec.ran ? {
393
+ title: TITLES[family],
394
+ state: n > 0 && REPORTING_ONLY.has(family) ? "avertissement" : state(n),
395
+ detail
396
+ } : {
397
+ title: TITLES[family],
398
+ state: "non-controle",
399
+ detail: exec.short ?? "non contrôlé"
400
+ };
401
+ };
402
+ const detail = {
403
+ freshness: {
404
+ n: freshness.findings.length,
405
+ text: freshness.findings.length > 0 ? pluralize(freshness.findings.length, "écart") : "sources et build alignés"
406
+ },
407
+ readiness: {
408
+ n: readiness.findings.length,
409
+ text: readiness.findings.length > 0 ? pluralize(readiness.findings.length, "manquement") : "environnement, modules, ports"
410
+ },
411
+ envCatalog: {
412
+ n: 0,
413
+ text: ""
414
+ },
415
+ envTracked: {
416
+ n: 0,
417
+ text: ""
418
+ },
419
+ deps: {
420
+ n: findings.length,
421
+ text: findings.length > 0 ? `${pluralize(findings.length, "manquement")} sur ${pluralize(scanned, "paquet")}` : pluralize(scanned, "paquet")
422
+ },
423
+ wiring: {
424
+ n: wiring.findings.length,
425
+ text: wiring.findings.length > 0 ? `${pluralize(wiring.findings.length, "manquement")} sur ${pluralize(wiring.scanned, "classe")}` : `${pluralize(wiring.scanned, "classe")} déclarée${wiring.scanned > 1 ? "s" : ""}`
426
+ },
427
+ surface: {
428
+ n: surfaceFindings(report, "public-area-covers-all").length,
429
+ text: surfaceFindings(report, "public-area-covers-all").length > 0 ? "une zone publique couvre TOUT" : inventaireSurface(report)
430
+ },
431
+ dialect: {
432
+ n: surfaceFindings(report, "entity-other-dialect").length,
433
+ text: surfaceFindings(report, "entity-other-dialect").length > 0 ? `${pluralize(surfaceFindings(report, "entity-other-dialect").length, "entité")} hors dialecte` : `${pluralize(report.surface.entitiesScanned, "entité")} sur ${report.surface.dialect ?? "?"}`
434
+ },
435
+ guards: {
436
+ n: report.guards.findings.length,
437
+ text: report.guards.findings.length > 0 ? `${pluralize(report.guards.findings.length, "garde")} décrochée${report.guards.findings.length > 1 ? "s" : ""}` : armedGuards(report.guards.armed, report.guards.armedNames)
438
+ },
439
+ verify: {
440
+ n: (report.deep?.steps ?? []).filter((s) => s.outcome === "failed").length,
441
+ text: (() => {
442
+ const steps = report.deep?.steps ?? [];
443
+ const failed = steps.filter((s) => s.outcome === "failed");
444
+ const interrupted = steps.filter((s) => s.outcome === "timeout");
445
+ if (failed.length > 0) return failed.map((s) => s.step).join(", ") + " en échec" + (interrupted.length > 0 ? ` (+ ${interrupted.length} interrompu(s) par la borne)` : "");
446
+ if (interrupted.length > 0) return interrupted.map((s) => s.step).join(", ") + " interrompu(s) par la borne — NON CONTRÔLÉ, pas en échec";
447
+ const passes = steps.filter((s) => s.outcome === "passed");
448
+ return passes.length > 0 ? `${passes.map((s) => s.step).join(", ")} au vert` : "aucun script à lancer";
449
+ })()
450
+ },
451
+ outdated: {
452
+ n: report.deep?.outdated?.packages.length ?? 0,
453
+ text: (() => {
454
+ const retard = report.deep?.outdated;
455
+ if (!retard) return "non interrogé";
456
+ const n = retard.packages.length;
457
+ if (n === 0) return "tout est à jour";
458
+ const majeurs = retard.packages.filter((pkg) => pkg.severity === "major").length;
459
+ return majeurs > 0 ? `${pluralize(n, "paquet")} en retard, dont ${majeurs} majeure${majeurs > 1 ? "s" : ""}` : `${pluralize(n, "paquet")} en retard`;
460
+ })()
461
+ },
462
+ migrations: {
463
+ n: manquementsLive(report, "migrations-not-ok").length,
464
+ text: manquementsLive(report, "migrations-not-ok").length > 0 ? pluralize(manquementsLive(report, "migrations-not-ok").length, "écart") : "schéma et historique alignés"
465
+ },
466
+ firewall: {
467
+ n: manquementsLive(report, "firewall-config-invalid").length,
468
+ text: manquementsLive(report, "firewall-config-invalid").length > 0 ? "configuration INVALIDE" : "zones et authentificateurs cohérents"
469
+ },
470
+ gating: {
471
+ n: manquementsLive(report, "service-lost").length,
472
+ text: manquementsLive(report, "service-lost").length > 0 ? pluralize(manquementsLive(report, "service-lost").length, "brique") + " perdue" + (manquementsLive(report, "service-lost").length > 1 ? "s" : "") : modulesEcartes(report).length > 0 ? `${pluralize(modulesEcartes(report).length, "module")} écarté${modulesEcartes(report).length > 1 ? "s" : ""}, rien de perdu` : "rien ne disparaît"
473
+ }
474
+ };
475
+ const lines = FAMILIES.filter((f) => !isSubrule(f) || !execution[f]?.ran && execution.readiness?.ran === true).map((f) => line(f, detail[f].n, detail[f].text));
476
+ const titleWidth = Math.max(...lines.map((l) => l.title.length));
477
+ return lines.map((l) => {
478
+ return (l.state === "echec" ? p.failure : l.state === "ok" ? p.ok : p.warning)(summaryLine(l, titleWidth, width));
479
+ });
480
+ }
481
+ /**
482
+ * Les manquements de l'étage 2 d'une espèce donnée.
483
+ *
484
+ * Le rapport porte UNE liste ; le sommaire et le détail la découpent par
485
+ * famille. Filtrer ici plutôt que tenir deux listes évite qu'un jour l'une
486
+ * contienne ce que l'autre ignore.
487
+ *
488
+ * @param report - le rapport, dont `live` peut être absent (aucun boot)
489
+ * @param kind - l'espèce de manquement cherchée
490
+ * @returns les manquements de cette espèce, vide si l'étage 2 n'a pas eu lieu
491
+ */
492
+ function manquementsLive(report, kind) {
493
+ return (report.live?.findings ?? []).filter((f) => f.kind === kind);
494
+ }
495
+ /** Au-delà, la liste cesse d'informer et devient un mur — le reste se demande. */
496
+ const OPENINGS_SHOWN = 12;
497
+ /** Le libellé de chaque espèce d'ouverture, tel qu'il se lit. */
498
+ const OPENING_LABEL = {
499
+ "bypass-firewall": "@BypassFirewall",
500
+ anonymous: "@Anonymous",
501
+ "bypass-option": "bypassFirewall: true",
502
+ "public-area": "zone publique"
503
+ };
504
+ /**
505
+ * L'inventaire de ce qui est atteignable SANS authentification.
506
+ *
507
+ * Rendu en INFORMATION, jamais en verdict : `@BypassFirewall` sur une sonde de
508
+ * vivacité est exactement ce qu'il faut écrire. Le service rendu est de les
509
+ * voir ENSEMBLE, ce qu'aucun outil ne fait aujourd'hui.
510
+ *
511
+ * La liste est BORNÉE : au-delà d'une douzaine de lignes elle cesse d'informer,
512
+ * et le rapport entier devient illisible. Le compte exact reste dit, et le
513
+ * reste s'obtient par `--json` — un rapport qui tronque doit dire où trouver
514
+ * ce qu'il a coupé.
515
+ */
516
+ function openSurface(report, width, p) {
517
+ const openings = report.surface.openings;
518
+ if (openings.length === 0) return [];
519
+ const lines = [];
520
+ for (const o of openings.slice(0, OPENINGS_SHOWN)) {
521
+ const label = OPENING_LABEL[o.kind] ?? o.kind;
522
+ const quoi = o.what ? `${label} ${o.what}` : label;
523
+ for (const [i, l] of wrap(quoi, width, BODY).entries()) lines.push(i === 0 ? `${ITEM}${p.warning("—")} ${l.trim()}` : l);
524
+ lines.push(p.dim(`${BODY}${o.file}`));
525
+ }
526
+ const remainder = openings.length - OPENINGS_SHOWN;
527
+ if (remainder > 0) {
528
+ lines.push("");
529
+ lines.push(p.dim(`${BODY}… et ${pluralize(remainder, "autre")} — la liste complète : nodefony doctor --json`));
530
+ }
531
+ return lines;
532
+ }
533
+ /**
534
+ * Les manquements de surface d'une espèce donnée.
535
+ *
536
+ * Le contrôle porte UNE liste ; le sommaire et le détail la découpent par
537
+ * famille. Filtrer ici plutôt que tenir deux listes évite qu'un jour l'une
538
+ * contienne ce que l'autre ignore.
539
+ */
540
+ function surfaceFindings(report, kind) {
541
+ return report.surface.findings.filter((f) => f.kind === kind);
542
+ }
543
+ /**
544
+ * L'inventaire de la surface ouverte, en une ligne.
545
+ *
546
+ * Chaque ouverture est LÉGITIME prise isolément — un `@BypassFirewall` sur une
547
+ * sonde de vivacité, une zone publique sur les pages d'accueil. Ce que
548
+ * personne n'a jamais, c'est le COMPTE : c'est ainsi qu'une route de mise au
549
+ * point reste ouverte en production. La ligne le donne sans accuser.
550
+ */
551
+ function inventaireSurface(report) {
552
+ const routes = report.surface.openings.filter((o) => o.kind !== "public-area").length;
553
+ const zones = report.surface.openings.length - routes;
554
+ if (routes === 0 && zones === 0) return "rien d'ouvert sans authentification";
555
+ const parts = [];
556
+ if (routes > 0) parts.push(`${pluralize(routes, "route")} ouverte${routes > 1 ? "s" : ""}`);
557
+ if (zones > 0) parts.push(`${pluralize(zones, "zone")} publique${zones > 1 ? "s" : ""}`);
558
+ return parts.join(", ");
559
+ }
560
+ /**
561
+ * Les modules que l'environnement visé écarte — une INFORMATION.
562
+ *
563
+ * Elle ne devient jamais un manquement : retirer un module `policy: "dev"` en
564
+ * production est le comportement NORMAL, et un contrôle qui crie sur le cas
565
+ * sain apprend à être ignoré. Elle sert à la ligne du sommaire, qui distingue
566
+ * « rien ne disparaît » de « des modules partent, mais rien n'est perdu ».
567
+ */
568
+ function modulesEcartes(report) {
569
+ return report.live?.gatedModules ?? [];
570
+ }
571
+ /**
572
+ * Ce que dit la ligne « Gardes du projet » quand tout est armé — les NOMS.
573
+ *
574
+ * 🔴 « 5 gardes armées » se lit comme un quitus et n'apprend rien : le lecteur
575
+ * ne sait ni ce qui est gardé, ni si la garde qu'il croit posée en fait partie.
576
+ * Le compte agrégeait en plus deux natures sans le dire — des scripts du
577
+ * manifeste (`typecheck`, `verify`) et des règles du linter.
578
+ *
579
+ * La ligne du sommaire est étroite : on nomme donc autant de gardes que la
580
+ * place le permet, et l'on DIT combien restent. Un « +3 » est une information ;
581
+ * une liste tronquée par un `…` muet en serait la caricature.
582
+ *
583
+ * @param armed - le nombre total de gardes constatées.
584
+ * @param names - leurs noms, dans l'ordre où le contrôle les a rencontrées.
585
+ * @returns le texte de la ligne.
586
+ */
587
+ function armedGuards(armed, names) {
588
+ if (armed === 0) return "aucune garde armée";
589
+ if (names.length === 0) return `${pluralize(armed, "garde")} armée${armed > 1 ? "s" : ""}`;
590
+ const shown = names.slice(0, 3);
591
+ const remainder = names.length - shown.length;
592
+ return remainder > 0 ? `${shown.join(", ")} +${remainder}` : shown.join(", ");
593
+ }
594
+ /** Les familles de manquements, dans l'ordre où elles se lisent. */ /** Les familles de manquements, dans l'ordre où elles se lisent. */
595
+ function findingGroups(report) {
596
+ return [
597
+ {
598
+ title: TITLES.freshness,
599
+ items: report.freshness.findings
600
+ },
601
+ {
602
+ title: TITLES.readiness,
603
+ items: report.readiness.findings
604
+ },
605
+ {
606
+ title: TITLES.deps,
607
+ items: report.findings
608
+ },
609
+ {
610
+ title: TITLES.wiring,
611
+ items: report.wiring.findings
612
+ },
613
+ {
614
+ title: TITLES.surface,
615
+ items: surfaceFindings(report, "public-area-covers-all")
616
+ },
617
+ {
618
+ title: TITLES.dialect,
619
+ items: surfaceFindings(report, "entity-other-dialect")
620
+ },
621
+ {
622
+ title: TITLES.guards,
623
+ items: report.guards.findings
624
+ },
625
+ {
626
+ title: TITLES.verify,
627
+ items: (report.deep?.steps ?? []).filter((st) => st.outcome === "failed" || st.outcome === "timeout").map((st) => ({ message: st.outcome === "timeout" ? `\`npm run ${st.step}\` n'a PAS pu être contrôlé — interrompu par la borne après ${Math.round(st.ms / 1e3)} s\n → lance-le seul, sans borne : \`npm run ${st.step}\`` : `\`npm run ${st.step}\` a échoué (${Math.round(st.ms / 1e3)} s)` + (st.detail ? ` :\n ${st.detail}` : "") + `\n → relance-le seul pour voir la sortie entière : \`npm run ${st.step}\`` }))
628
+ },
629
+ {
630
+ title: TITLES.migrations,
631
+ items: manquementsLive(report, "migrations-not-ok").map((f) => ({ message: f.action ? `${f.message}\n → ${f.action}` : f.message }))
632
+ },
633
+ {
634
+ title: TITLES.firewall,
635
+ items: manquementsLive(report, "firewall-config-invalid").map((f) => ({ message: f.message }))
636
+ }
637
+ ];
638
+ }
639
+ /**
640
+ * QUI a démarré, en toutes lettres.
641
+ *
642
+ * « Le dernier démarrage a ÉCHOUÉ » désignait le serveur quel que soit le
643
+ * coupable : un `nodefony inspect` lancé sans son environnement produisait la
644
+ * même phrase, et envoyait chercher là où il n'y a rien. Nommer le profil ET
645
+ * la commande donne les deux choses qui manquaient — qui accuser, et quoi
646
+ * relancer pour reproduire.
647
+ *
648
+ * @param entry - le bilan.
649
+ * @returns « `nodefony inspect` (console) », ou « Le dernier démarrage ».
650
+ */
651
+ function qui(entry) {
652
+ const profile = entry.profile === "console" ? "console" : entry.profile === "cluster" ? "maître de cluster" : entry.profile === "server" ? "serveur" : "";
653
+ if (!entry.command && !profile) return "Le dernier démarrage";
654
+ if (!entry.command) return `Le dernier démarrage (${profile})`;
655
+ return `\`nodefony ${entry.command}\`${profile ? ` (${profile})` : ""}`;
656
+ }
657
+ /**
658
+ * Le bilan du dernier démarrage, quand il a une mauvaise nouvelle à donner.
659
+ *
660
+ * Placé haut, parce que c'est l'information la plus utile de tout le rapport
661
+ * quand elle existe : celui qui lance `doctor` sur une application qui ne
662
+ * démarre plus cherche exactement ça, et la faire suivre une liste de
663
+ * manquements de câblage reviendrait à la cacher.
664
+ *
665
+ * Il n'entre PAS dans le code de sortie : `doctor` contrôle le CODE, l'état
666
+ * d'un démarrage est un fait d'exécution, souvent déjà réparé au moment où on
667
+ * lit.
668
+ */
669
+ function lastStartup(entry, now, p, width) {
670
+ const lines = [];
671
+ const age = formatAge(entry.timestamp, now);
672
+ const state = entry.status === "failed" ? "echec" : "avertissement";
673
+ /**
674
+ * Un couple « libellé — valeur », la valeur repliée SOUS elle-même.
675
+ *
676
+ * Une cause de démarrage échoué fait couramment trois cents caractères
677
+ * (message d'erreur, URL de connecteur, cause native). Laissée sur une seule
678
+ * ligne, elle déborde le terminal et se replie sur la marge : la moitié du
679
+ * message se retrouve alignée avec les libellés, et on ne distingue plus ce
680
+ * qui est un champ de ce qui est du texte.
681
+ */
682
+ const field = (name, value) => {
683
+ const column = 18;
684
+ const indent = BODY + " ".repeat(column);
685
+ const valueLines = wrap(value, width, indent);
686
+ if (valueLines.some((l) => l.length > width)) return [`${BODY}${p.dim(name)}`, ...wrap(value, width, `${BODY} `)];
687
+ const [premiere, ...suite] = valueLines;
688
+ return [`${BODY}${p.dim(name.padEnd(column, " "))}${(premiere ?? "").trimStart()}`, ...suite];
689
+ };
690
+ /** Le titre du bloc, replié comme n'importe quelle autre phrase. */
691
+ const title = (text, teinte) => {
692
+ const [premiere, ...suite] = wrap(text, width, BODY);
693
+ return [teinte(`${ITEM}${stateSymbol(state)} ${(premiere ?? "").trimStart()}`), ...suite.map(teinte)];
694
+ };
695
+ if (entry.status === "failed") {
696
+ lines.push(...title(`${qui(entry)} a ÉCHOUÉ (${age})`, p.failure));
697
+ lines.push(...field("phase atteinte", entry.phase ?? "inconnue"));
698
+ lines.push(...field("environnement", entry.environment));
699
+ if (entry.error) {
700
+ lines.push(...field("cause", `${entry.error.name}: ${entry.error.message}`));
701
+ if (entry.error.exitCode !== void 0) lines.push(...field("code de sortie", String(entry.error.exitCode)));
702
+ }
703
+ } else {
704
+ lines.push(...title(`${qui(entry)} a abouti mais il MANQUE des briques (${age})`, p.warning));
705
+ lines.push(...field("environnement", entry.environment));
706
+ if (entry.healthy === false) lines.push(...field("verdict", p.failure("un profil serveur a fini SANS aucun serveur en écoute")));
707
+ }
708
+ if (entry.bricksSkipped?.length) {
709
+ lines.push(...field("briques ignorées", String(entry.bricksSkipped.length)));
710
+ lines.push(...firstFew(entry.bricksSkipped.map((b) => `${b.module}${b.phase ? p.dim(` (${b.phase})`) : ""} — ${b.reason}`), p));
711
+ }
712
+ if (entry.bricksGated?.length) {
713
+ lines.push(...field("écartées exprès", String(entry.bricksGated.length)));
714
+ lines.push(...firstFew(entry.bricksGated.map((b) => `${b.module} — ${b.reason}`), p));
715
+ }
716
+ if (entry.warnings || entry.errors) lines.push(...field("journal du boot", `${pluralize(entry.warnings ?? 0, "avertissement")}, ${pluralize(entry.errors ?? 0, "erreur")}`));
717
+ if (entry.criticals?.length) {
718
+ const shown = entry.criticals.slice(0, PUCES_MAX);
719
+ for (const message of shown) {
720
+ const [premiere, ...suite] = wrap(message, width, `${BODY} `);
721
+ lines.push(p.failure(`${BODY} · ${(premiere ?? "").trimStart()}`));
722
+ for (const l of suite) lines.push(p.failure(l));
723
+ }
724
+ const remainder = entry.criticals.length - shown.length;
725
+ if (remainder > 0) lines.push(p.dim(`${BODY} · … et ${pluralize(remainder, "autre")}`));
726
+ }
727
+ if (entry.remediation) for (const l of wrap(`→ ${entry.remediation}`, width, BODY)) lines.push(p.action(l));
728
+ lines.push(...field("bilan complet", lastBootFileFor(entry.profile)));
729
+ return lines;
730
+ }
731
+ /**
732
+ * La dernière ligne — celle qu'on retient.
733
+ *
734
+ * Elle doit rester VRAIE dans les trois situations, y compris la plus piégeuse :
735
+ * quand aucun contrôle n'a pu tourner. « Rien à signaler · 0 contrôle passé »
736
+ * s'y lisait comme un succès alors que rien n'avait été regardé.
737
+ */
738
+ function footer(report, skipped, p, width, durationMs) {
739
+ const total = countFindings(report);
740
+ const passes = passedCheckCount(report);
741
+ /**
742
+ * Un segment du bilan : ce qu'il MESURE, et ce qui s'AFFICHE.
743
+ *
744
+ * Les deux diffèrent dès qu'il y a de la couleur — une séquence ANSI compte
745
+ * pour zéro colonne mais pour plusieurs caractères. Mesurer la version peinte
746
+ * ferait passer une ligne courte pour trop longue, et l'inverse.
747
+ */
748
+ const seg = (text, teinte) => ({
749
+ measure: text,
750
+ peint: teinte(text)
751
+ });
752
+ const segments = [];
753
+ if (total > 0) {
754
+ segments.push(seg(pluralize(total, "manquement"), p.failure));
755
+ segments.push(seg(pluralize(passes, "contrôle effectué", "contrôles effectués"), (t) => t));
756
+ } else if (passes === 0) segments.push(seg("Aucun contrôle n'a pu être fait ici", p.warning));
757
+ else {
758
+ const exceptions = report.exceptions > 0 ? ` (${pluralize(report.exceptions, "exception")} déclarée${report.exceptions > 1 ? "s" : ""})` : "";
759
+ const phrase = skipped.length > 0 ? `Rien à signaler parmi les ${pluralize(passes, "contrôle effectué", "contrôles effectués")}` : `Rien à signaler sur ${pluralize(passes, "contrôle", "contrôles")}`;
760
+ segments.push({
761
+ measure: phrase + exceptions,
762
+ peint: p.ok(phrase) + p.dim(exceptions)
763
+ });
764
+ }
765
+ if (skipped.length > 0) segments.push(seg(pluralize(skipped.length, "non contrôlé", "non contrôlés"), p.warning));
766
+ if (durationMs !== void 0) {
767
+ const text = durationMs < 1e3 ? `${Math.round(durationMs)} ms` : `${(durationMs / 1e3).toFixed(1)} s`;
768
+ segments.push(seg(text, p.dim));
769
+ }
770
+ if (` ${segments.map((s) => s.measure).join(" · ")}`.length <= width) return [` ${segments.map((s) => s.peint).join(" · ")}`];
771
+ return segments.map((s) => ` ${s.peint}`);
772
+ }
773
+ /** Combien de familles ont réellement regardé — la moitié utile du bilan. */
774
+ function passedCheckCount(report) {
775
+ let n = 0;
776
+ for (const family of COUNTED_FAMILIES) if (report.execution[family]?.ran) n++;
777
+ return n;
778
+ }
779
+ //#endregion
780
+ export { groupByReason, nextActions, qui, renderReport, worthReporting };