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,590 @@
1
+ ---
2
+ title: "Service — la brique de base de tout composant"
3
+ navTitle: Service
4
+ lang: fr
5
+ module: "@nodefony/core"
6
+ topic: service
7
+ coverageModule: nodefony-core
8
+ coveragePackage: "nodefony (cœur)"
9
+ coverageFiles: "Service.ts,Event.ts,Container.ts"
10
+ section: "Cœur runtime"
11
+ audience: [developer]
12
+ tags:
13
+ [service, event, di, container, cycle-de-vie, notifications, injectable, boot]
14
+ version: "doc"
15
+ status: stable
16
+ updated: 2026-07-19
17
+ source: "src/nodefony/docs/service.md"
18
+ ---
19
+
20
+ # Service — la brique de base de tout composant
21
+
22
+ > `Service` est la classe dont **presque tout** hérite dans Nodefony : le `Kernel`, chaque `Module`,
23
+ > chaque controller, chaque adapter ORM. Elle branche trois câbles d'un coup — les **dépendances**
24
+ > (container DI), le **journal** (`log`) et le **bus d'événements** (`notificationsCenter`) — puis
25
+ > garantit qu'ils se débranchent proprement (`clean()`). Ancré sur `src/nodefony/src/Service.ts`,
26
+ > `Event.ts` et `Container.ts`.
27
+
28
+ 📍 [Documentation](../../../docs/index.md) › [Cœur — @nodefony/core](index.md) › **Service**
29
+
30
+ ## 🧠 Le modèle mental — une prise à trois broches
31
+
32
+ Un composant serveur a toujours besoin des trois mêmes choses : trouver ses voisins, dire ce qu'il
33
+ fait, réagir à ce qui arrive. `Service` est la **prise murale** qui apporte les trois d'un seul
34
+ geste — au lieu que chaque brique se recâble à la main.
35
+
36
+ ```mermaid
37
+ flowchart LR
38
+ subgraph S["Service (name)"]
39
+ direction TB
40
+ C["container<br/>DI — get / set / has"]
41
+ L["syslog<br/>log / logger"]
42
+ N["notificationsCenter<br/>on / fire / fireAsync"]
43
+ end
44
+ K["Kernel"] -->|"fournit container + bus"| S
45
+ M["Module"] -->|"fournit container + bus"| S
46
+ S -->|"clean()"| X["débranché<br/>listeners retirés · refs nulles"]
47
+ N -->|"emitAsyncGuarded"| B["cycle de boot<br/>isolé par listener"]
48
+ ```
49
+
50
+ Trois idées portent toute la page :
51
+
52
+ 1. **On hérite, on ne recâble pas.** `class MonService extends Service` et les trois broches sont là.
53
+ 2. **Le bus peut être partagé.** Deux services du même module parlent sur le **même** `Event` — c'est
54
+ ce qui les découple sans les faire se connaître.
55
+ 3. **Ce qui se branche doit se débrancher.** `Service` **trace** les écouteurs qu'il pose pour que
56
+ `clean()` les retire du bus partagé : sans ça, chaque instance fuirait.
57
+
58
+ ## 📖 Lexique
59
+
60
+ <!-- prettier-ignore -->
61
+ | Terme | Sens |
62
+ | --- | --- |
63
+ | Service | La classe de base : identité (`name`) + DI + journal + événements. |
64
+ | Container | Annuaire d'injection de dépendances (DI) : un nom → une instance. Voir [injection-portees](../../../docs/architecture/injection-portees.md). |
65
+ | DI | _Dependency Injection_ — on **reçoit** ses dépendances au lieu de les construire soi-même. |
66
+ | `notificationsCenter` | Le bus d'événements d'un service (une instance d'`Event`). |
67
+ | Event | Bus maison qui étend l'`EventEmitter` de Node avec `emitAsync` et `emitAsyncGuarded`. |
68
+ | Bus partagé | Un même `Event` passé à plusieurs services (typiquement celui du module ou du kernel). |
69
+ | Bus dédié | Un `Event` créé pour un seul service — personne d'autre ne l'écoute. |
70
+ | Écouteur tracké | Écouteur posé via l'API du service, donc retiré automatiquement par `clean()`. |
71
+ | PDU | _Process Data Unit_ — une entrée de journal structurée (RFC 5424). Voir [syslog](syslog.md). |
72
+ | Hot path | Le chemin parcouru à **chaque** requête HTTP/WS — la moindre allocation y coûte cher. |
73
+ | Microtask | Unité d'ordonnancement d'une `Promise` : un `await` inutile en alloue une pour rien. |
74
+ | Émission gardée | `emitAsyncGuarded` — chaque écouteur est isolé (try/catch + délai maximal), les échecs sont collectés. |
75
+ | Scope DI | `singleton` (une instance mémoïsée) ou `transient` (une neuve à chaque résolution). |
76
+ | Tri topologique | Calcul de l'ordre d'instanciation depuis les dépendances déclarées, au lieu de le lire dans une liste. |
77
+ | BootReport | Bilan de démarrage : ce qui a été chargé, ce qui a été ignoré, pourquoi. Fait dire « boot DÉGRADÉ ». |
78
+ | Fail-soft / fail-loud | Continuer malgré la panne / refuser de continuer en silence. Nodefony fait les deux, jamais en cachette. |
79
+
80
+ ## Qu'est-ce qu'un Service — et pourquoi un bus d'événements
81
+
82
+ Un serveur est un assemblage de composants qui doivent **se parler sans se connaître**. Le kernel
83
+ signale « je démarre », un module réagit. Une requête signale « terminée », le profileur collecte.
84
+ Un service métier signale « catalogue modifié », un cache s'invalide.
85
+
86
+ Câbler ces composants en dur (A appelle B qui appelle C) donne une pelote : ajouter un consommateur
87
+ oblige à modifier le producteur. Le **bus d'événements** inverse la charge — on émet un signal, et
88
+ **qui veut réagir s'abonne**. Le producteur ne connaît plus ses consommateurs.
89
+
90
+ Nodefony ne se contente pas de fournir un bus quelque part : il le met **dans la classe de base**,
91
+ avec l'accès aux dépendances et le journal. Résultat : n'importe quelle brique du framework part avec
92
+ le même socle, et tout le monde parle la même langue.
93
+
94
+ > [!TIP]
95
+ > Si tu viens de Symfony : `Service` n'est **pas** l'équivalent d'un service `services.yaml`. C'est
96
+ > plutôt « la classe de base que Symfony n'a pas » — un composant y est un POPO, ici il hérite d'un
97
+ > socle qui lui donne DI + log + events. Le rapprochement s'arrête là.
98
+
99
+ ## La vision Nodefony
100
+
101
+ `Service` (`Service.ts:43`) porte cinq membres publics — `name`, `container`, `kernel`, `syslog`,
102
+ `options` — et un bus **privé** `#nc` exposé en lecture seule par le getter
103
+ `Service.notificationsCenter` (`Service.ts:57`). Toutes les méthodes d'événements passent par un
104
+ getter privé gardé `Service.nc` (`Service.ts:62`) : c'est lui, et lui seul, qui lève
105
+ `notificationsCenter not initialized` — le test est écrit **une fois** au lieu d'être dupliqué sur
106
+ les 18 méthodes déléguées.
107
+
108
+ Le constructeur (`Service.ts:79`) est volontairement **opportuniste** : il réutilise ce que le
109
+ container lui offre (`kernel`, `syslog`) et ne fabrique que ce qui manque. Le bus suit la même
110
+ logique — partagé si on lui en passe un, dédié sinon, absent si on passe `false`.
111
+
112
+ Le bus lui-même, `Event` (`Event.ts:117`), étend l'`EventEmitter` de Node avec exactement deux idées
113
+ maison :
114
+
115
+ - `Event.emitAsync()` (`Event.ts:200`) attend les écouteurs **en séquence**, jamais en `Promise.all` —
116
+ l'ordre des effets de bord est prévisible par construction ;
117
+ - `Event.emitAsyncGuarded()` (`Event.ts:257`) isole **chaque** écouteur (try/catch + délai maximal)
118
+ et renvoie `{ results, errors, stopped }` au lieu de laisser le premier rejet faire sauter la suite.
119
+
120
+ Ce dernier porte tout le cycle de vie du kernel via `Kernel.fireLifecycle()` (`Kernel.ts:3254`) : un
121
+ hook de module qui pend ou qui jette ne gèle plus le démarrage du serveur.
122
+
123
+ Le compromis assumé : `Service` **délègue** massivement (18 méthodes d'événements + 6 méthodes de
124
+ container) plutôt que d'exposer ses collaborateurs bruts. C'est un peu de code répétitif dans la
125
+ classe de base, contre deux garanties — le suivi des écouteurs pour `clean()`, et une façade DI
126
+ tolérante qui rend `null` au lieu d'exploser après destruction.
127
+
128
+ ## 🚀 Démarrage rapide
129
+
130
+ ### Un service d'application, de bout en bout
131
+
132
+ Dans une app générée par `nodefony create app`, un service se déclare sur le **module** qui le
133
+ porte. Voici l'ensemble minimal qui tourne — décoration, construction, journal, événement, wiring :
134
+
135
+ ```typescript
136
+ // index.ts — point d'entrée de l'app (`nodefony create app` génère le squelette).
137
+ // En vrai, `CatalogService` vivrait dans `nodefony/services/CatalogService.ts` et
138
+ // serait importé ici ; les deux sont réunis pour que le bloc soit copiable tel quel.
139
+ import { Module, Service, injectable, services } from "nodefony";
140
+ import type { Container, Event, Kernel } from "nodefony";
141
+
142
+ // `@injectable("catalog")` inscrit la CLASSE au registre DI sous le nom "catalog".
143
+ @injectable("catalog")
144
+ class CatalogService extends Service {
145
+ private items = new Map<string, number>();
146
+
147
+ // Le module porteur transmet SES ressources : même container, MÊME bus.
148
+ // C'est ce partage qui permet aux services du module de se parler.
149
+ constructor(module: Module) {
150
+ super(
151
+ "catalog", // clé dans le container — c'est elle qu'on interroge
152
+ module.container as Container,
153
+ module.notificationsCenter as Event,
154
+ module.options.catalog, // sous-section de config du module
155
+ );
156
+ }
157
+
158
+ add(ref: string, qty: number): void {
159
+ this.items.set(ref, qty);
160
+ this.log(`ajout ${ref} ×${qty}`, "INFO"); // msgid = "catalog" par défaut
161
+ this.fire("onCatalogChanged", ref, qty); // synchrone, 0 microtask
162
+ }
163
+ }
164
+
165
+ // `@services([...])` déclare les services du module : ils sont instanciés à
166
+ // `onPreBoot`, dans l'ordre CALCULÉ depuis leurs dépendances.
167
+ @services([CatalogService])
168
+ class App extends Module {
169
+ constructor(kernel: Kernel) {
170
+ super("app", kernel, import.meta.url, {});
171
+ }
172
+
173
+ override async onKernelReady(): Promise<this> {
174
+ // `this.on(...)` est TRACKÉ → retiré du bus partagé par `clean()`.
175
+ this.on("onCatalogChanged", (ref: string, qty: number) => {
176
+ this.log(`catalogue modifié : ${ref} ×${qty}`, "NOTICE");
177
+ });
178
+ // Le service est au container sous sa clé — jamais un `new` à la main.
179
+ this.get<CatalogService>("catalog")?.add("NF-001", 3);
180
+ return this;
181
+ }
182
+ }
183
+
184
+ export default App;
185
+ ```
186
+
187
+ ### Ce qu'on observe
188
+
189
+ ```bash
190
+ npx nodefony development
191
+ ```
192
+
193
+ ```text
194
+ DEBUG app SERVICE ADD : catalog # Module.addService a posé l'instance
195
+ INFO catalog ajout NF-001 ×3 # msgid = le nom du service
196
+ NOTICE app catalogue modifié : NF-001 ×3 # l'écouteur du module a reçu l'événement
197
+ ```
198
+
199
+ Le `msgid` de la deuxième ligne est `catalog` sans qu'on l'ait écrit : `Service.log()`
200
+ (`Service.ts:209`) prend `this.name` par défaut. La trace `SERVICE ADD` vient de
201
+ `Module.addService()` (`Module.ts:313`), qui instancie via l'injecteur puis range l'instance au
202
+ container sous `instance.name`.
203
+
204
+ ### Sans kernel ni module — un Service tout seul
205
+
206
+ Un `Service` n'exige **aucune** infrastructure : il se construit dans un test ou un script. C'est ce
207
+ qui rend la classe testable en isolation.
208
+
209
+ ```typescript
210
+ import { Service, Container, Event } from "nodefony";
211
+
212
+ const bus = new Event(); // bus PARTAGÉ, fourni par l'appelant
213
+ const container = new Container(); // annuaire DI racine
214
+
215
+ const producer = new Service("worker-a", container, bus);
216
+ const consumer = new Service("worker-b", container, bus);
217
+
218
+ // Tracké : `clean()` saura le retirer du bus partagé.
219
+ consumer.on("onTick", (n: number) => {
220
+ consumer.log(`tick ${n}`, "DEBUG");
221
+ });
222
+
223
+ producer.fire("onTick", 1); // worker-b reçoit — même bus
224
+
225
+ consumer.clean(); // retire SES écouteurs, détache container/syslog/nc
226
+ producer.fire("onTick", 2); // plus personne n'écoute : aucune fuite
227
+ ```
228
+
229
+ > [!IMPORTANT]
230
+ > Après `clean()`, toute méthode d'événement du service **lève** (`notificationsCenter not
231
+ initialized`) et `set()` lève aussi (`container not initialized`) — mais `get()` rend `null` en
232
+ > silence. Cette asymétrie est délibérée : lire après destruction est un cas de sortie de route
233
+ > tolérable, **écrire** ne l'est pas.
234
+
235
+ ## 🏗️ Architecture interne
236
+
237
+ ### Ce que fait le constructeur, dans l'ordre
238
+
239
+ `Service.ts:79` exécute cinq étapes, toutes lisibles en 50 lignes :
240
+
241
+ 1. **Identité** — `name` est posé tel quel ; il servira de clé container et de `msgid` syslog.
242
+ 2. **Container** — celui qu'on fournit, sinon un `new Container()` frais (`Service.ts:86`).
243
+ 3. **Kernel + syslog** — récupérés depuis le container ; si le syslog manque, un `Syslog` est créé
244
+ avec `moduleName = this.name` puis **posé au container** pour les suivants (`Service.ts:95`).
245
+ 4. **Bus** — les trois formes ci-dessous (`Service.ts:106`).
246
+ 5. **Nettoyage des options** — la clé `events` est **supprimée** de `options` après usage
247
+ (`Service.ts:131`).
248
+
249
+ > [!WARNING]
250
+ > L'étape 5 utilise `delete` et **pas** `= undefined`, volontairement : des consommateurs parcourent
251
+ > `for (… in this.options)` et appellent `.path` sur chaque valeur — ils supposent la clé **absente**.
252
+ > Le gain de _hidden class_ V8 d'un `= undefined` serait annulé par les gardes `if (!v) continue` à
253
+ > ajouter partout.
254
+
255
+ ### Les trois formes de bus — trois situations réelles
256
+
257
+ Le troisième argument du constructeur décide de tout. Choisis-le en fonction de **qui doit entendre**.
258
+
259
+ | Tu passes… | Le service obtient… | Quand c'est le bon choix |
260
+ | --------------------- | ------------------------------------------------ | -------------------------------------------------------------- |
261
+ | un `Event` existant | ce **bus partagé** (`#sharedNc = true`) | service d'un module / du kernel : il doit parler aux voisins |
262
+ | `undefined` ou `null` | un **bus dédié**, créé pour lui | brique autonome, aucun voisin à prévenir |
263
+ | `false` | **aucun bus** — les méthodes d'événements lèvent | pur utilitaire, sans signal à émettre : 0 allocation d'`Event` |
264
+
265
+ **Situation 1 — un service de module.** Le module te tend son bus, tu le transmets : ton service et
266
+ tous ceux du module s'entendent, sans se connaître.
267
+
268
+ ```typescript ignore
269
+ super(
270
+ "catalog",
271
+ module.container as Container,
272
+ module.notificationsCenter as Event,
273
+ );
274
+ ```
275
+
276
+ **Situation 2 — une brique isolée.** Rien à prévenir, personne à écouter : laisse le troisième
277
+ argument vide. Le bus est créé (`Service.ts:117`) et, s'il n'y a pas de kernel partageant le même
278
+ container, il est publié sous la clé `notificationsCenter` pour que d'autres puissent le retrouver
279
+ (`Service.ts:121`).
280
+
281
+ **Situation 3 — un pur utilitaire.** Un helper qui ne signale rien : `false`. Aucun `Event` n'est
282
+ alloué, et `options` n'est **pas** fusionné avec les défauts (`Service.ts:88`) — ce que le contre-cas
283
+ suivant illustre :
284
+
285
+ ```typescript ignore
286
+ new Service("calc", container, false, { foo: "bar" }); // ✅ options.foo conservé, 0 bus
287
+ new Service("calc", container, false).fire("x"); // ❌ lève : notificationsCenter not initialized
288
+ ```
289
+
290
+ ### Écouteurs trackés — la mécanique anti-fuite
291
+
292
+ C'est **la** raison d'être de la délégation. Chaque écouteur posé par l'API du service
293
+ (`Service.on()` (`Service.ts:373`), `once`, `addListener`, `prependListener`…) est enregistré dans la
294
+ carte privée `#trackedListeners` (`Service.ts:74`) via `Service.trackListener()` (`Service.ts:282`).
295
+
296
+ ```mermaid
297
+ sequenceDiagram
298
+ participant S as Service
299
+ participant T as "carte des écouteurs trackés"
300
+ participant B as Event (bus partagé)
301
+ S->>B: on("onTick", fn)
302
+ S->>T: trackListener("onTick", fn)
303
+ Note over S,B: le service vit, émet, écoute
304
+ S->>T: clean() lit la carte
305
+ S->>B: removeListener("onTick", fn)
306
+ S->>T: clear()
307
+ Note over S: syslog / nc / container / kernel = null
308
+ ```
309
+
310
+ `Service.clean()` (`Service.ts:179`) ne retire les écouteurs que si le bus est **partagé** : sur un
311
+ bus dédié, l'objet entier part au ramasse-miettes avec le service, il n'y a rien à décrocher.
312
+
313
+ ### Cycle de vie
314
+
315
+ <!-- prettier-ignore -->
316
+ | Étape | Appel | Ce qui se passe |
317
+ | --- | --- | --- |
318
+ | Naissance | `new Service(name, container, nc, options)` | câblage des trois broches, écouteurs de config attachés |
319
+ | Démarrage | `init(owner)` — **optionnel, à toi de l'écrire** | appelé UNE fois au boot par le module qui porte le service (`Module.ts:377`), sous garde (délai maximal + criticité du module). Reçoit son propriétaire, donc sa configuration résolue. C'est ici que se fait tout ce qui demande un `await` : connexion, chargement, préchauffage. ⚠️ `init`, pas `initialize` — `initialize()` est le hook du **Controller**, appelé à chaque requête |
320
+ | Journal | `Service.initSyslog()` (`Service.ts:199`) | démarre la sortie console (environnement + verbosité + filtres) |
321
+ | Vie | `log` / `fire` / `on` / `get` | délégation vers syslog, bus et container |
322
+ | Destruction | `Service.clean()` (`Service.ts:179`) | retire les écouteurs trackés, remet syslog/nc/container/kernel à vide |
323
+ | Destruction+ | `clean(true)` | appelle en plus `Syslog.reset()` — les transports sont fermés |
324
+
325
+ `clean()` est **idempotent** : le rappeler ne lève pas.
326
+
327
+ ## 🧰 API publique
328
+
329
+ Les signatures exactes vivent dans le graphe TSDoc (`.ai/symbols.json`) ; ce qui suit est l'usage.
330
+
331
+ ### Dépendances — la façade container
332
+
333
+ | Appel | Ancre | Comportement |
334
+ | ------------------------ | ---------------- | --------------------------------------------------------------- |
335
+ | `get<T>(name)` | `Service.ts:427` | l'instance typée, ou **`null`** si absente ou après `clean()` |
336
+ | `set(name, obj)` | `Service.ts:435` | enregistre — **lève** si le container est détaché |
337
+ | `remove(name)` | `Service.ts:447` | si la cible est un `Service`, appelle son `clean()` **d'abord** |
338
+ | `has(name)` | `Service.ts:477` | `false` plutôt qu'une erreur quand le container est détaché |
339
+ | `getParameters(path)` | `Service.ts:506` | lecture par chemin pointé (`"kernel.environment"`) |
340
+ | `setParameters(path, v)` | `Service.ts:514` | écriture par chemin pointé — **lève** si détaché |
341
+
342
+ Cette façade est **tolérante en lecture, stricte en écriture**. Le détail du container lui-même
343
+ (scopes par requête, arbre de paramètres, héritage prototypal) est traité dans
344
+ [injection-portees](../../../docs/architecture/injection-portees.md) — `Container.enterScope()` (`Container.ts:293`),
345
+ `Container.leaveScope()` (`Container.ts:312`) et `Container.scopeCount()` (`Container.ts:330`) pour
346
+ les sondes de fuite.
347
+
348
+ ### Journal
349
+
350
+ | Appel | Ancre | Usage |
351
+ | ----------------------------------- | ---------------- | ------------------------------------------- |
352
+ | `log(pci, severity?, msgid?, msg?)` | `Service.ts:209` | le point d'entrée de **tout** log Nodefony |
353
+ | `logger(pci, …)` | `Service.ts:266` | raccourci `DEBUG` + `console.debug` formaté |
354
+ | `trace(pci, …)` | `Service.ts:231` | idem avec `console.trace` (pile d'appels) |
355
+
356
+ `log()` est **increvable** : sans syslog il fabrique un `Pdu` directement, et toute exception y est
357
+ attrapée pour retomber sur `console` (`Service.ts:218`). Un service qui journalise ne peut pas faire
358
+ tomber le process à cause du journal. Sévérités et transports : [syslog](syslog.md).
359
+
360
+ ### Événements
361
+
362
+ | Appel | Ancre | Note |
363
+ | ------------------------------------- | ---------------- | --------------------------------------------------------------- |
364
+ | `fire(name, …)` / `emit(name, …)` | `Service.ts:272` | synchrone, **0 microtask** — le défaut sur le hot path |
365
+ | `fireAsync(name, …)` / `emitAsync(…)` | `Service.ts:277` | attend les écouteurs asynchrones, **en séquence** |
366
+ | `emitAsyncGuarded(name, options?, …)` | `Service.ts:296` | isole chaque écouteur — **boot / jobs uniquement** |
367
+ | `on` / `once` / `addListener` | `Service.ts:350` | **trackés** → retirés par `clean()` |
368
+ | `off` / `removeListener` | `Service.ts:412` | retirent aussi l'entrée de suivi |
369
+ | `listen(name, listener)` | `Service.ts:317` | bind sur `this`, **non tracké** — renvoie un déclencheur |
370
+ | `settingsToListen(settings, ctx)` | `Service.ts:398` | câble les clés `onXxx` d'un objet de config |
371
+ | `removeAllListeners(name?)` | `Service.ts:374` | ⚠️ sur un bus partagé, vide **aussi** les écouteurs des voisins |
372
+
373
+ Le contrat `EventEmitter` complet (`listenerCount`, `eventNames`, `rawListeners`, `prependListener`,
374
+ `setMaxListeners`…) est délégué à l'identique.
375
+
376
+ ### `emitAsyncGuarded` — la garde du cycle de vie
377
+
378
+ Options purement **mécaniques** (`IGuardedEmitOptions`, `Event.ts:66`) : la **politique** reste à
379
+ l'appelant.
380
+
381
+ | Option | Effet |
382
+ | ----------------- | ------------------------------------------------------------------------------------------- |
383
+ | `timeoutMs` | délai maximal par écouteur. `0`/absent = **aucun timer alloué** |
384
+ | `warnMs` | seuil de lenteur. `0`/absent = **aucune mesure** (pas un seul `Date.now`) |
385
+ | `onListenerError` | appelé sur rejet **ou** dépassement ; renvoyer `true` **arrête** la chaîne (`Event.ts:320`) |
386
+ | `onListenerSlow` | appelé quand un écouteur réussit mais dépasse `warnMs` (`Event.ts:305`) |
387
+
388
+ Le résultat (`IGuardedEmitResult`, `Event.ts:86`) porte `results`, `errors` et `stopped`. En cas de
389
+ dépassement, l'erreur remontée est une `Error` explicite (`Event.ts:317`) — jamais la sentinelle
390
+ interne `timeoutSentinel` (`Event.ts:33`).
391
+
392
+ Côté kernel, `Kernel.fireLifecycle()` (`Kernel.ts:3254`) branche la politique : délai issu de
393
+ `Kernel.bootTimeoutMs()` (`Kernel.ts:2625`) — 20 s en développement, 60 s en production, surchargeable
394
+ par `NF_BOOT_TIMEOUT_MS` — et seuil de lenteur `Kernel.bootWarnMs()` (`Kernel.ts:2637`), 5 s par
395
+ défaut. Un hook lent est **signalé** (NOTICE), un hook qui pend est **coupé**.
396
+
397
+ ## ⚙️ Options du service
398
+
399
+ Le quatrième argument du constructeur. Toutes les clés non listées sont conservées telles quelles et
400
+ restent lisibles via `this.options` — c'est le canal de configuration d'un service.
401
+
402
+ | Option | Type | Défaut effectif | Effet |
403
+ | -------------------- | ----------------------- | ------------------ | ----------------------------------------------------------------------- |
404
+ | `events.nbListeners` | `number` | **10** (Node) | limite d'écouteurs avant l'avertissement `MaxListeners` |
405
+ | `syslog` | `SyslogDefaultSettings` | `moduleName: name` | réglages du `Syslog` **créé** par ce service (ignoré s'il en hérite un) |
406
+ | `onXxx` | `function` | — | écouteur auto-attaché à l'événement `Xxx` (convention `/^on(.+)$/`) |
407
+ | _(toute autre clé)_ | libre | — | config propre au service, lisible dans `this.options` |
408
+
409
+ > [!WARNING]
410
+ > **`events.nbListeners` n'a pas de défaut effectif à 20.** La constante `defaultOptions`
411
+ > (`Service.ts:17`) annonce `20`, mais elle n'est jamais appliquée : la propagation lit le paramètre
412
+ > **brut** du constructeur (`Service.ts:114` et `Service.ts:119`), pas `this.options` fusionné. Sans
413
+ > valeur explicite, la limite reste celle de Node — **10**. Passe-la si un bus partagé dépasse la
414
+ > dizaine d'abonnés.
415
+
416
+ ### La convention `onXxx` — et son piège
417
+
418
+ Une clé d'options qui commence par `on` suivi d'au moins un caractère est câblée comme écouteur. Mais
419
+ **pas par le même chemin** selon la forme du bus :
420
+
421
+ - **bus partagé** → `Service.attachConfiguredListeners()` (`Service.ts:140`) passe par `this.on`,
422
+ donc l'écouteur est **tracké** et `clean()` le retirera ;
423
+ - **bus dédié** → c'est le constructeur d'`Event` qui appelle `Event.settingsToListen()`
424
+ (`Event.ts:147`), lequel utilise `Event.listen()` (`Event.ts:171`) : l'écouteur est **bindé, non
425
+ tracké**. Sans conséquence, puisque le bus meurt avec le service.
426
+
427
+ C'est exactement le correctif qui empêche une fuite d'écouteurs par instance sur un bus partagé.
428
+
429
+ ## 🧩 Extension — déclarer ses services
430
+
431
+ ### Les trois décorateurs
432
+
433
+ | Décorateur | Ancre | Rôle |
434
+ | ------------------- | ------------------------ | ------------------------------------------------------------------ |
435
+ | `@injectable(nom?)` | `kernelDecorator.ts:82` | inscrit la **classe** au registre DI (défaut : `constructor.name`) |
436
+ | `@inject("nom")` | `kernelDecorator.ts:114` | injecte un service par nom sur un **paramètre** de constructeur |
437
+ | `@services([…])` | `kernelDecorator.ts:24` | déclare les services d'un module — instanciés à `onPreBoot` |
438
+
439
+ `@injectable` accepte aussi un objet `{ name?, scope? }` où `scope` vaut `singleton` (défaut) ou
440
+ `transient` — une instance neuve à chaque résolution (`injector.ts:160`). Il n'existe **ni**
441
+ `singleton: true`, **ni** `factory`, **ni** scope `request` : le scope par requête est une notion du
442
+ container hiérarchique, pas du DI (voir [injection-portees](../../../docs/architecture/injection-portees.md)).
443
+
444
+ > [!CAUTION]
445
+ > Le décorateur de **propriété** `@Inject` existe dans le code (`kernelDecorator.ts:143`) mais n'est
446
+ > **pas ré-exporté** par le paquet `nodefony` : une app ne peut pas l'importer. Injecte par
447
+ > **constructeur** (`@inject`), qui est le chemin supporté.
448
+
449
+ ### L'ordre d'écriture ne décide plus du boot
450
+
451
+ Historiquement, un service devait être listé **avant** ses consommateurs dans `@services([…])` :
452
+ déplacer une classe de trois lignes suffisait à casser le serveur au runtime. Aujourd'hui, l'ordre se
453
+ **calcule** — `orderServicesByDependencies()` (`serviceOrder.ts:71`), appelé par le décorateur
454
+ (`kernelDecorator.ts:80`), fait un tri topologique **stable** depuis les dépendances déclarées
455
+ (`@inject` puis `design:paramtypes`). Une liste déjà correcte ressort inchangée.
456
+
457
+ ```typescript ignore
458
+ @services([Consumer, Dependency]) // ✅ l'ordre écrit n'a plus d'importance
459
+ class MyModule extends Module {}
460
+ ```
461
+
462
+ ### Deux annuaires, et le pont entre eux
463
+
464
+ C'est le point qui surprend le plus. `@injectable("Router")` indexe une **classe** ; `super("router", …)`
465
+ indexe une **instance** au container. Les deux chaînes n'ont aucune raison d'être égales, et le
466
+ décorateur ne peut pas connaître la seconde : il s'exécute au **chargement** de la classe, `super()`
467
+ seulement à la **construction**.
468
+
469
+ Le pont est appris au seul instant où le couple est connu — quand l'instance est posée au container :
470
+ `Injector.rememberContainerKey()` (`injector.ts:88`), appelé depuis `Module.addService()`
471
+ (`Module.ts:365`). Toute résolution ultérieure passe alors par la classe et retrouve **cette**
472
+ instance, au lieu d'en fabriquer une seconde au cache vide.
473
+
474
+ Les cycles sont détectés à l'instanciation, avec le chemin complet dans le message
475
+ (`injector.ts:262`).
476
+
477
+ ### Charger un service depuis un chemin
478
+
479
+ `Module.loadService()` (`Module.ts:405`) accepte un spécificateur de module (`import()` dynamique) et
480
+ délègue à `addService`. Utile pour un service optionnel dont la présence dépend de la configuration.
481
+
482
+ ## 🔐 Intégrité du boot — jamais de dégradation silencieuse
483
+
484
+ Un service qu'on ne peut pas **construire** suit exactement la même politique qu'un service qu'on ne
485
+ peut pas **initialiser** : `Module.handleServiceBootError()` (`Module.ts:417`) délègue au verdict du
486
+ kernel, qui tranche selon deux axes.
487
+
488
+ | Contexte | Verdict |
489
+ | --------------------------------------------------- | --------------------------------------------------------------- |
490
+ | Production **+** module critique | **fatal** — l'erreur remonte, le boot s'interrompt |
491
+ | Développement **+** module critique | fail-soft **ANNONCÉ** : agrégé au BootReport → « boot DÉGRADÉ » |
492
+ | `static override critical = false` (`Module.ts:79`) | fail-soft annoncé **même en production** |
493
+ | Erreur de configuration | fatal quel que soit l'environnement |
494
+
495
+ Deux garanties complémentaires, vérifiées par les tests d'attaque : un service dont la construction
496
+ échoue **n'est pas** au container (pas de demi-instance), et le message d'erreur est **actionnable** —
497
+ il nomme le service manquant, celui qui le réclame, et ce qu'il faut faire (`injector.ts:188`).
498
+
499
+ > [!IMPORTANT]
500
+ > Le scénario que cette politique interdit est vécu : un serveur démarrant « UP », ports à l'écoute,
501
+ > et répondant en erreur sur **chaque** requête parce qu'un service manquait. Un boot amputé doit se
502
+ > **déclarer** amputé.
503
+
504
+ ## ⚡ Performance & mémoire
505
+
506
+ `Service` est dans le chemin de **chaque** requête (le contexte HTTP/WS en hérite). Les choix
507
+ mesurables :
508
+
509
+ - **Court-circuit sans abonné** — `emitAsync` (`Event.ts:208`) et `emitAsyncGuarded` (`Event.ts:264`)
510
+ sortent sur `listenerCount() === 0` : **0 allocation, 0 microtask**. Un hook optionnel que personne
511
+ n'écoute ne coûte rien. Le test compte les allocations, pas les intentions : `listenerCount` n'alloue
512
+ pas, là où `rawListeners` **copie** le tableau interne à chaque appel.
513
+ - **Pas d'`await` gratuit** — `emitAsync` n'attend que si l'écouteur renvoie réellement un thenable
514
+ (`Event.ts:209`) : un hook synchrone ne paie aucune microtask, et l'ordre séquentiel reste garanti.
515
+ - **Timers seulement si demandés** — `emitAsyncGuarded` n'alloue 1 timer + 1 promesse de course par
516
+ écouteur que si `timeoutMs > 0` ; le timer est `unref()` (`Event.ts:291`) et un rejet arrivant après
517
+ la course perdue est neutralisé (`Event.ts:280`) pour ne pas devenir un rejet non géré.
518
+ - **Aucune fuite d'écouteurs** — le suivi `#trackedListeners` (`Service.ts:53`) rend `clean()` exact
519
+ sur un bus partagé.
520
+ - **Bus optionnel** — `notificationsCenter: false` n'alloue **aucun** `Event`.
521
+
522
+ > [!WARNING]
523
+ > `emitAsyncGuarded` n'a **rien à faire dans le hot path**. Il est dimensionné pour le boot, le cycle
524
+ > de vie et les jobs — appelés une poignée de fois par process. Le pipeline HTTP/WS garde `emitAsync`
525
+ > nu. Toute modification de `Service.ts` / `Event.ts` passe par le gate mémoire
526
+ > (skill `nodefony-check-memory-health`) avant commit.
527
+
528
+ ## 📡 Observabilité — Studio
529
+
530
+ Les services d'un module sont introspectables sans lire le code :
531
+
532
+ - **API** — `GET /nodefony/kernel/api/module/{name}` (`KernelAdminApi.ts:1109`) renvoie un tableau
533
+ `services: [{ name, class }]`, construit depuis `Module.getServiceNames()` (`Module.ts:393`) croisé
534
+ avec le container (`KernelAdminApi.ts:1139`).
535
+ - **Écran** — la page de détail d'un module (`studio/frontend/src/routes/ModuleDetail.tsx`) affiche
536
+ cette liste à côté de la config, des docs et des symboles du module.
537
+ - **Sonde de fuite** — `Container.scopeCount(name)` (`Container.ts:330`) donne le nombre de scopes
538
+ **vivants** : un compteur qui monte sans jamais redescendre signale un `leaveScope` manquant.
539
+
540
+ ## ⚠️ Pièges (symptôme → cause → correction)
541
+
542
+ | Symptôme | Cause (dans le code) | Correction |
543
+ | ------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
544
+ | Fuite d'écouteurs, une de plus par instance | écouteur posé **directement** sur le bus partagé, hors de l'API du service | passer par `Service.on()`, qui appelle `trackListener` (`Service.ts:282`) |
545
+ | `off()` ne retire rien | `Service.listen()` (`Service.ts:317`) **bind** — la référence posée diffère | retirer via le déclencheur renvoyé, jamais l'original |
546
+ | Les écouteurs des voisins disparaissent | `removeAllListeners()` (`Service.ts:419`) agit sur le bus **partagé** en entier | cibler l'événement, ou retirer écouteur par écouteur |
547
+ | `notificationsCenter not initialized` | bus à `false`, ou appel après `clean()` (`Service.ts:62`) | ne pas émettre après destruction ; vérifier le 3ᵉ argument du constructeur |
548
+ | `container not initialized` sur un `set()` | écriture après `clean()` (`Service.ts:435`) | revoir l'ordre du cycle de vie ; `get()`, lui, rend `null` |
549
+ | Avertissement `MaxListeners` à 11 abonnés | le défaut annoncé (20) n'est pas appliqué (`Service.ts:17`) | passer `{ events: { nbListeners: N } }` explicitement |
550
+ | Le déclencheur de `listen()` passe un argument en trop | `Event.listen()` (`Event.ts:171`) préfixe les arguments par le nom de l'événement | lire le 1ᵉʳ argument comme le nom, ou émettre via `fire()` |
551
+ | Écouteurs asynchrones exécutés l'un après l'autre | `emitAsync` est **séquentiel par design** (`Event.ts:200`) | comportement attendu ; paralléliser **dans** l'écouteur si besoin |
552
+ | Le service est reconstruit, son cache vide | clé container ≠ nom `@injectable`, pont non appris (`injector.ts:88`) | passer par `Module.addService()` — jamais un `new` manuel |
553
+ | Un service déclaré n'est pas au container après le boot | sa construction a échoué, fail-soft **annoncé** (`Module.ts:365`) | lire le BootReport / les ERROR de démarrage ; en prod le boot aurait échoué |
554
+ | `options.events` introuvable après construction | la clé est **supprimée** volontairement (`Service.ts:131`) | lire la valeur avant, ou la conserver sous une autre clé |
555
+
556
+ ## 🧪 Tests & couverture
557
+
558
+ Quatre angles couvrent la brique — les chiffres exacts vivent dans la carte de l'aperçu, régénérée
559
+ depuis vitest, jamais figés ici :
560
+
561
+ - **Unitaires — le socle** : `Service.test.ts` couvre construction (les trois formes de bus,
562
+ réutilisation du syslog, suppression de `options.events`), délégation container, les 18 méthodes
563
+ d'événements, le journal sévérité par sévérité, `initSyslog`, l'héritage et le partage de container
564
+ entre deux services.
565
+ - **Unitaires — l'anti-fuite** : le cœur de `clean()` est prouvé point par point — retrait sur bus
566
+ partagé, **non**-retrait des écouteurs des autres services, retrait des écouteurs injectés par
567
+ config (`Service.test.ts:731`).
568
+ - **Unitaires — le bus** : `Event.test.ts` (construction par settings, `listen`, `fire`, `emitAsync`,
569
+ cas limites, charge) et `EventGuarded.test.ts` (isolation, délai maximal, `stopped`, et la
570
+ non-régression du court-circuit `emitAsync`).
571
+ - **Unitaires — l'ordre** : `serviceOrder.test.ts` verrouille le tri topologique stable.
572
+ - **Tests d'attaque** : `services.attack.test.ts` attaque l'**intégrité du boot** — construction qui
573
+ échoue en production sur module critique (fatal attendu), fail-soft **annoncé** au BootReport,
574
+ absence du service au container, message d'erreur actionnable, ordre d'écriture inversé, et
575
+ divergence entre nom de classe et clé container.
576
+
577
+ Ce qui **manque** : aucun banc de charge dédié à `Service`/`Event`. La pression réelle est mesurée en
578
+ bout de chaîne, par le gate mémoire du pipeline HTTP/WS (`memory.test.ts`, skill
579
+ `nodefony-check-memory-health`) — c'est là qu'une fuite d'écouteurs se voit.
580
+
581
+ Couverture : `npm run coverage` dans `src/nodefony`.
582
+
583
+ ## 🔗 Pour aller plus loin
584
+
585
+ - ⬆️ **Retour au hub** : [@nodefony/core — vue d'ensemble](index.md) · [Toute la documentation](../../../docs/index.md)
586
+ - 🧭 **Pages sœurs** : [Syslog (PDU, sévérités, transports)](syslog.md) · [Kernel & modules](kernel.md) · [RequestContext (ALS)](request-context.md) · [Client isomorphe](client.md)
587
+
588
+ - Portées d'injection et cycle des scopes → [injection-portees](../../../docs/architecture/injection-portees.md)
589
+ - Qui émet quelle phase, et dans quel ordre → [cycle-boot-kernel](../../../docs/architecture/cycle-boot-kernel.md)
590
+ - Où le `Service` se retrouve sur une requête → [pipeline-requete](../../../docs/architecture/pipeline-requete.md)