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,358 @@
1
+ import { runningAppPort } from "nodefony/testing";
2
+ import { readRuntimeState } from "nodefony";
3
+ import { describe, it, expect, beforeAll } from "vitest";
4
+ <% if (it.hasSecurity) { %>import { connexionAdmin } from "./e2e.setup";
5
+ <% } %>
6
+
7
+ /**
8
+ * Test E2E de la ressource `<%= it.pascal %>` — le cycle CRUD complet, sur le
9
+ * serveur RÉEL.
10
+ *
11
+ * Il complète `<%= it.kebab %>.test.ts`, qui éprouve la couche DONNÉE (repository et
12
+ * schéma, en base mémoire). Ici, on traverse tout : routage, décorateurs,
13
+ * validation, sérialisation, codes de statut. Les deux sont utiles pour des
14
+ * raisons différentes — le premier est rapide et cerne une régression, celui-ci
15
+ * prouve que la ressource est réellement servie.
16
+ *
17
+ * L'application est démarrée une fois par `tests/e2e.setup.ts` ; ce fichier ne
18
+ * fait que lui parler. Lancement : `npm run test:e2e`.
19
+ */
20
+ const ROUTE = "<%= it.route %>";
21
+ let BASE = "http://127.0.0.1:5151";
22
+
23
+ /**
24
+ * Échantillon paramétré : `n` change les valeurs.
25
+ *
26
+ * Indispensable dès qu'un champ est unique — deux insertions du même échantillon
27
+ * violeraient la contrainte, et le test échouerait sur lui-même.
28
+ */
29
+ const sample = (n: number) => (<%= it.sampleFactory %>);
30
+
31
+ /** Lit le corps JSON en le typant à plat, sans supposer la forme complète. */
32
+ async function json(res: Response): Promise<Record<string, unknown>> {
33
+ return (await res.json()) as Record<string, unknown>;
34
+ }
35
+
36
+ /**
37
+ * L'identité rejouée par TOUTES les requêtes du cycle — sauf celles qui
38
+ * mesurent un refus.
39
+ *
40
+ * Le CRUD généré répond à un anonyme tant que rien ne le protège. Mais dès que
41
+ * l'application pose une zone de firewall sur l'espace où vit la ressource — ce
42
+ * qu'une application réelle finit toujours par faire — un cycle anonyme casse
43
+ * en 401, et le réflexe le moins coûteux devient d'ouvrir une exception pour
44
+ * cette route. **Un test qui pousse à désarmer une garde est pire qu'un test
45
+ * absent** : il transforme la protection en panne à réparer.
46
+ *
47
+ * Le cycle s'authentifie donc par défaut, et reste vert que l'espace soit
48
+ * ouvert ou fermé. La seule requête volontairement anonyme est celle qui PROUVE
49
+ * le refus — elle est commentée comme telle.
50
+ */
51
+ let AUTH: Record<string, string> = {};
52
+
53
+ /** En-têtes d'une requête à corps JSON, identité comprise. */
54
+ const entetes = (): Record<string, string> => ({
55
+ "content-type": "application/json",
56
+ ...AUTH,
57
+ });
58
+
59
+ describe("e2e — <%= it.pascal %> : le cycle CRUD complet", () => {
60
+ beforeAll(async () => {
61
+ const port = runningAppPort();
62
+ BASE = `http://127.0.0.1:${port}`;
63
+ <% if (it.hasSecurity) { %> AUTH = { cookie: await connexionAdmin() };
64
+ <% } %> });
65
+
66
+ it("POST → 201 + Location, puis GET sur cette Location", async () => {
67
+ const payload = sample(1);
68
+ const created = await fetch(`${BASE}${ROUTE}`, {
69
+ method: "POST",
70
+ headers: entetes(),
71
+ body: JSON.stringify(payload),
72
+ });
73
+ expect(created.status).toBe(201);
74
+ // `Location` n'est pas décoratif : c'est ce qui dispense le client de
75
+ // deviner l'URL de ce qu'il vient de créer.
76
+ const location = created.headers.get("location");
77
+ expect(location).toBeTruthy();
78
+
79
+ const reread = await fetch(`${BASE}${location}`, { headers: AUTH });
80
+ expect(reread.status).toBe(200);
81
+ <% if (it.comparableField) { %> const body = await json(reread);
82
+ expect(body["<%= it.comparableField %>"]).toBe(
83
+ (payload as Record<string, unknown>)["<%= it.comparableField %>"],
84
+ );
85
+ <% } %> });
86
+
87
+ it("PATCH retouche sans exiger le document entier", async () => {
88
+ const created = await fetch(`${BASE}${ROUTE}`, {
89
+ method: "POST",
90
+ headers: entetes(),
91
+ body: JSON.stringify(sample(2)),
92
+ });
93
+ const id = (await json(created)).id;
94
+
95
+ const patched = await fetch(`${BASE}${ROUTE}/${String(id)}`, {
96
+ method: "PATCH",
97
+ headers: entetes(),
98
+ body: JSON.stringify(sample(3)),
99
+ });
100
+ expect(patched.status).toBe(200);
101
+ <% if (it.comparableField) { %> const body = await json(patched);
102
+ expect(body["<%= it.comparableField %>"]).toBe(
103
+ (sample(3) as Record<string, unknown>)["<%= it.comparableField %>"],
104
+ );
105
+ <% } %> });
106
+
107
+ it("corps invalide → 422 qui NOMME les champs fautifs", async () => {
108
+ const res = await fetch(`${BASE}${ROUTE}`, {
109
+ method: "POST",
110
+ headers: entetes(),
111
+ body: JSON.stringify({}),
112
+ });
113
+ // 422 et non 400 : le corps a bien été lu, c'est son CONTENU qui viole le
114
+ // contrat (RFC 9110 §15.5.21).
115
+ expect(res.status).toBe(422);
116
+ });
117
+ <% if (it.hasUnique) { %>
118
+ it("doublon sur une valeur unique → 409, pas 500", async () => {
119
+ const payload = sample(42);
120
+ const first = await fetch(`${BASE}${ROUTE}`, {
121
+ method: "POST",
122
+ headers: entetes(),
123
+ body: JSON.stringify(payload),
124
+ });
125
+ expect(first.status).toBe(201);
126
+
127
+ const duplicate = await fetch(`${BASE}${ROUTE}`, {
128
+ method: "POST",
129
+ headers: entetes(),
130
+ body: JSON.stringify(payload),
131
+ });
132
+ // Rejouer la même valeur unique n'est pas une panne : c'est un refus d'état,
133
+ // sur lequel le client peut agir (proposer un autre identifiant). En 500, il
134
+ // n'aurait aucun moyen de le distinguer d'un serveur cassé.
135
+ expect(duplicate.status).toBe(409);
136
+ });
137
+ <% } %>
138
+ it("la liste est une PAGE : items bornés, hasNext, total", async () => {
139
+ for (const n of [101, 102, 103]) {
140
+ await fetch(`${BASE}${ROUTE}`, {
141
+ method: "POST",
142
+ headers: entetes(),
143
+ body: JSON.stringify(sample(n)),
144
+ });
145
+ }
146
+ const res = await fetch(`${BASE}${ROUTE}?limit=2`, { headers: AUTH });
147
+ expect(res.status).toBe(200);
148
+ const page = (await res.json()) as {
149
+ items: unknown[];
150
+ hasNext: boolean;
151
+ total?: number;
152
+ limit: number;
153
+ };
154
+ expect(page.items).toHaveLength(2);
155
+ expect(page.limit).toBe(2);
156
+ // `hasNext` est ce qui distingue « c'est tout » de « demande la suite ». Un
157
+ // tableau nu ne le dit pas, et le client boucle ou s'arrête trop tôt.
158
+ expect(page.hasNext).toBe(true);
159
+ expect(page.total).toBeGreaterThanOrEqual(3);
160
+ });
161
+
162
+ it("le plafond de page tient, même si le client demande tout", async () => {
163
+ const res = await fetch(`${BASE}${ROUTE}?limit=100000`, {
164
+ headers: AUTH,
165
+ });
166
+ const page = (await res.json()) as { limit: number };
167
+ // Plafonné, pas refusé : le client reçoit une réponse utile, et la table
168
+ // entière ne part jamais en mémoire.
169
+ expect(page.limit).toBeLessThanOrEqual(100);
170
+ });
171
+
172
+ it("un tri sur un champ non déclaré est REFUSÉ, pas ignoré", async () => {
173
+ // Le pire n'est pas le refus, c'est son absence : une page rendue dans un
174
+ // ordre qui n'est pas celui demandé, avec un 200, ne se voit nulle part.
175
+ const res = await fetch(`${BASE}${ROUTE}?order=champInexistant:ASC`, {
176
+ headers: AUTH,
177
+ });
178
+ expect(res.status).toBe(400);
179
+ });
180
+
181
+ it("le tri ORDONNE : DESC est l'inverse EXACT d'ASC", async () => {
182
+ // Refuser un champ inconnu ne prouve PAS que le tri trie — un `ORDER BY`
183
+ // mort passe ce refus sans broncher. Ce sont deux tests, pas un.
184
+ //
185
+ // Et un test de tri est complaisant par défaut : lu sur un champ absent de
186
+ // la réponse, il compare des `undefined`, qui forment une suite
187
+ // parfaitement triée dans les deux sens. D'où trois affirmations.
188
+ for (const n of [201, 202, 203]) {
189
+ await fetch(`${BASE}${ROUTE}`, {
190
+ method: "POST",
191
+ headers: entetes(),
192
+ body: JSON.stringify(sample(n)),
193
+ });
194
+ }
195
+ const lire = async (dir: string): Promise<unknown[]> => {
196
+ const res = await fetch(
197
+ `${BASE}${ROUTE}?order=<%= it.sortProbe %>:${dir}&limit=100`,
198
+ { headers: AUTH },
199
+ );
200
+ expect(res.status).toBe(200);
201
+ const page = (await res.json()) as {
202
+ items: Record<string, unknown>[];
203
+ hasNext: boolean;
204
+ };
205
+ // ASC et DESC doivent porter sur le MÊME ensemble : au-delà d'une page,
206
+ // l'un rend les plus petits et l'autre les plus grands, et les comparer
207
+ // ne veut plus rien dire.
208
+ expect(page.hasNext).toBe(false);
209
+ return page.items.map((r) => r["<%= it.sortProbe %>"]);
210
+ };
211
+ const asc = await lire("ASC");
212
+ const desc = await lire("DESC");
213
+ // 1. le champ est PRÉSENT — sans quoi on ordonne des `undefined` ;
214
+ expect(asc.every((v) => v !== undefined)).toBe(true);
215
+ // 2. ses valeurs sont DISTINCTES — une colonne constante rend « trié » tout
216
+ // ordre, y compris celui que la base a choisi toute seule ;
217
+ expect(new Set(asc).size).toBe(asc.length);
218
+ // 3. l'ordre S'INVERSE — le seul point qu'un tri débranché ne simule pas.
219
+ expect(desc).toEqual([...asc].reverse());
220
+ });
221
+
222
+ it("un paramètre que PERSONNE ne reconnaît est REFUSÉ", async () => {
223
+ // La faute de frappe est le cas réel : sans ce refus, `?<%= it.filters.length ? it.filters[0].name.slice(0, -1) : "actf" %>=…` rend la
224
+ // collection ENTIÈRE, et le client la lit comme le résultat de son filtre.
225
+ const res = await fetch(`${BASE}${ROUTE}?<%= it.filters.length ? it.filters[0].name.slice(0, -1) : "actf" %>=x`, {
226
+ headers: AUTH,
227
+ });
228
+ expect(res.status).toBe(400);
229
+ });
230
+ <% if (it.malformedProbe) { %>
231
+ it("une valeur mal formée pour un filtre déclaré est REFUSÉE", async () => {
232
+ // `?<%= it.malformedProbe.name %>=<%= it.malformedProbe.value %>` : le filtre existe, sa valeur ne convient pas.
233
+ // Le poser à « absent » rendrait une page non filtrée sous un 200.
234
+ //
235
+ // Toutes les natures ne peuvent pas refuser : un filtre `"string"` accepte
236
+ // n'importe quelle chaîne. Ce test n'est donc émis que pour un booléen, un
237
+ // entier ou une énumération — sinon il exigerait le refus d'une valeur
238
+ // valide, et c'est le générateur qu'il mettrait en défaut.
239
+ const res = await fetch(`${BASE}${ROUTE}?<%= it.malformedProbe.name %>=<%= it.malformedProbe.value %>`, {
240
+ headers: AUTH,
241
+ });
242
+ expect(res.status).toBe(400);
243
+ });
244
+ <% } %><% if (it.filterProbe) { %>
245
+ it("le filtre FILTRE : la valeur exclue ne remonte pas", async () => {
246
+ // Refuser une valeur mal formée ne prouve PAS qu'une valeur VALIDE réduit
247
+ // l'ensemble — encore deux tests, pas un.
248
+ //
249
+ // Et il faut une ligne TÉMOIN, qui ne matche pas : tous les échantillons
250
+ // portent la même valeur pour ce champ, donc sans elle « toutes les lignes
251
+ // rendues portent la valeur demandée » resterait vrai avec le filtre
252
+ // débranché. C'est le témoin qui fait le test, pas l'assertion.
253
+ for (const [n, valeur] of [
254
+ [401, <%= it.filterProbe.matchJson %>],
255
+ [402, <%= it.filterProbe.otherJson %>],
256
+ ] as const) {
257
+ await fetch(`${BASE}${ROUTE}`, {
258
+ method: "POST",
259
+ headers: entetes(),
260
+ body: JSON.stringify({ ...sample(n), <%= it.filterProbe.name %>: valeur }),
261
+ });
262
+ }
263
+ const lire = async (url: string): Promise<unknown[]> => {
264
+ const res = await fetch(url, { headers: AUTH });
265
+ expect(res.status).toBe(200);
266
+ const page = (await res.json()) as { items: Record<string, unknown>[] };
267
+ return page.items.map((r) => r["<%= it.filterProbe.name %>"]);
268
+ };
269
+ // Le témoin est bien LÀ, et remonte quand on ne filtre pas — sinon
270
+ // l'assertion suivante serait vraie pour une raison sans rapport.
271
+ const tout = await lire(`${BASE}${ROUTE}?limit=100`);
272
+ expect(tout).toContain(<%= it.filterProbe.otherJson %>);
273
+ // Filtré, il disparaît — et il ne reste QUE la valeur demandée.
274
+ const filtre = await lire(
275
+ `${BASE}${ROUTE}?<%= it.filterProbe.name %>=<%= it.filterProbe.match %>&limit=100`,
276
+ );
277
+ expect(filtre.length).toBeGreaterThan(0);
278
+ expect(filtre.every((v) => v === <%= it.filterProbe.matchJson %>)).toBe(true);
279
+ });
280
+ <% } %><% if (it.relations.length) { %>
281
+ it("une relation inconnue dans ?include= est REFUSÉE", async () => {
282
+ // Charger l'enregistrement SANS la relation demandée, sous un 200, laisse
283
+ // croire que la relation est vide alors que le nom était mal écrit.
284
+ // `?include=` se lit sur la fiche, pas sur la liste : la liste, qui ne le
285
+ // lit pas, le refuse comme paramètre inconnu — et c'est cohérent.
286
+ const created = await fetch(`${BASE}${ROUTE}`, {
287
+ method: "POST",
288
+ headers: entetes(),
289
+ body: JSON.stringify(sample(300)),
290
+ });
291
+ const id = String((await json(created)).id);
292
+ const res = await fetch(
293
+ `${BASE}${ROUTE}/${id}?include=relationQuiNexistePas`,
294
+ { headers: AUTH },
295
+ );
296
+ expect(res.status).toBe(400);
297
+ });
298
+ <% } %>
299
+ it("DELETE → 204, et l'enregistrement n'est plus lisible", async () => {
300
+ const created = await fetch(`${BASE}${ROUTE}`, {
301
+ method: "POST",
302
+ headers: entetes(),
303
+ body: JSON.stringify(sample(200)),
304
+ });
305
+ const id = String((await json(created)).id);
306
+ // La suppression est réservée à `ROLE_ADMIN` : sans identité, elle est
307
+ // refusée — c'est le comportement voulu, et le test qui suit le prouve.
308
+ // L'identité est celle du cycle (`AUTH`), pas une session ouverte à part :
309
+ // deux sources d'identité dans un même fichier finissent par diverger.
310
+ const removed = await fetch(`${BASE}${ROUTE}/${id}`, {
311
+ method: "DELETE",
312
+ headers: AUTH,
313
+ });
314
+ // 204 : il n'y a plus rien à décrire, donc pas de corps.
315
+ expect(removed.status).toBe(204);
316
+
317
+ const gone = await fetch(`${BASE}${ROUTE}/${id}`, { headers: AUTH });
318
+ expect(gone.status).toBe(404);
319
+
320
+ // Supprimer deux fois n'est pas la même chose que supprimer une absente :
321
+ // le 404 permet au client de distinguer les deux.
322
+ const again = await fetch(`${BASE}${ROUTE}/${id}`, {
323
+ method: "DELETE",
324
+ headers: AUTH,
325
+ });
326
+ expect(again.status).toBe(404);
327
+ });
328
+ <% if (it.hasSecurity) { %>
329
+ it("DELETE sans identité → refusé, et l'enregistrement survit", async () => {
330
+ // Échantillon PROPRE à ce test : `300` sert déjà au test d'`?include=`.
331
+ // Sur une entité qui porte une relation ET un champ unique, la seconde
332
+ // insertion était refusée comme doublon, `id` valait « undefined », et
333
+ // c'est une absence que ce test lisait — il accusait la garde qu'il mesure
334
+ // au lieu de son décor.
335
+ const created = await fetch(`${BASE}${ROUTE}`, {
336
+ method: "POST",
337
+ headers: entetes(),
338
+ body: JSON.stringify(sample(301)),
339
+ });
340
+ const id = String((await json(created)).id);
341
+
342
+ // Personne n'est authentifié : le framework refuse AVANT d'entrer dans
343
+ // l'action. 401 ou 403 selon la zone qui couvre la route — ce qui compte
344
+ // est le refus, pas son code.
345
+ const refuse = await fetch(`${BASE}${ROUTE}/${id}`, { method: "DELETE" });
346
+ expect([401, 403]).toContain(refuse.status);
347
+
348
+ // Et surtout : la donnée est toujours là. Un refus qui supprime quand même
349
+ // serait pire qu'une absence de garde, parce qu'il rassure.
350
+ const survit = await fetch(`${BASE}${ROUTE}/${id}`, { headers: AUTH });
351
+ expect(survit.status).toBe(200);
352
+
353
+ await fetch(`${BASE}${ROUTE}/${id}`, {
354
+ method: "DELETE",
355
+ headers: AUTH,
356
+ });
357
+ });
358
+ <% } %>});
@@ -0,0 +1,87 @@
1
+ import { describe, it, expect<% if (it.dialect === "sqlite") { %>, beforeAll, afterAll<% } %> } from "vitest";
2
+ <% if (it.dialect === "sqlite") { %>import { DrizzleOrm } from "@nodefony/drizzle";
3
+ import { entityRegistry, ormRegistry } from "@nodefony/orm-core";
4
+ import { <%= it.pascal %>Entity } from "../nodefony/entity/<%= it.pascal %>";
5
+ <% } %>import type { <%= it.pascal %>Row } from "../nodefony/entity/<%= it.pascal %>";
6
+ import { create<%= it.pascal %>Schema } from "../nodefony/entity/<%= it.pascal %>.schema";
7
+ <% if (it.dialect === "sqlite") { it.relationTargets.forEach(function (target) { %>import { <%= target %>Entity } from "../nodefony/entity/<%= target %>";
8
+ <% }) } %>
9
+ <% if (it.dialect === "sqlite") { %>/**
10
+ * L'entité, sur une vraie base — en mémoire, donc sans rien installer.
11
+ *
12
+ * Ce que ces tests protègent : le schéma tient la route (la table se crée, les données
13
+ * font l'aller-retour) et le contrat d'entrée refuse ce qu'il doit refuser. Ils tournent
14
+ * sans serveur : c'est la couche données, seule.
15
+ */
16
+
17
+ const ORM = "test-<%= it.kebab %>";
18
+ <% } else { %>/**
19
+ * L'entité — son CONTRAT d'entrée, sans serveur.
20
+ *
21
+ * Ce que ces tests protègent : le schéma de validation refuse ce qu'il doit refuser.
22
+ * Ils tournent partout, sans rien installer.
23
+ *
24
+ * ⚠️ **La couche DONNÉES n'est pas éprouvée ici, et c'est délibéré.** Cette entité est
25
+ * écrite pour <%= it.dialect %> : son schéma n'existe que dans ce dialecte, et l'ORM
26
+ * refuse de le monter ailleurs — une base en mémoire ne peut donc pas la recevoir.
27
+ * C'est la suite e2e (`npm run test:e2e`) qui l'éprouve, sur VOTRE serveur, avec les
28
+ * types réels : c'est là que se voient un `char(3)` sorti en 255 ou une clé étrangère
29
+ * dont le type ne correspond pas à la clé visée.
30
+ */
31
+ <% } %>
32
+ /**
33
+ * Échantillon **variable** — indispensable dès qu'un champ est unique : deux insertions
34
+ * du même objet violeraient la contrainte, et le test échouerait sur lui-même.
35
+ */
36
+ const sample = (n: number): Partial<<%= it.pascal %>Row> => (<%= it.sampleFactory %>);
37
+
38
+ describe("<%= it.pascal %> — entité", () => {
39
+ <% if (it.dialect === "sqlite") { %> let orm: DrizzleOrm;
40
+
41
+ beforeAll(async () => {
42
+ entityRegistry.register({ ...<%= it.pascal %>Entity, connector: ORM });
43
+ <% if (it.relationTargets.length) { %> // Les cibles des relations sont enregistrées AVEC l'entité : l'ORM résout les
44
+ // relations déclarées au moment de se connecter, et lève si l'une d'elles
45
+ // pointe une entité qu'il ne connaît pas. C'est volontaire — une relation
46
+ // vers une entité absente est une panne au boot, pas un détail de test.
47
+ <% it.relationTargets.forEach(function (target) { %> entityRegistry.register({ ...<%= target %>Entity, connector: ORM });
48
+ <% }) %><% } %> orm = new DrizzleOrm(ORM, { filename: ":memory:" });
49
+ await orm.connect();
50
+ });
51
+
52
+ afterAll(async () => {
53
+ await orm.disconnect();
54
+ entityRegistry.unregister("<%= it.pascal %>", ORM);
55
+ <% it.relationTargets.forEach(function (target) { %> entityRegistry.unregister("<%= target %>", ORM);
56
+ <% }) %> ormRegistry.unregister(ORM);
57
+ });
58
+
59
+ it("crée la table et fait l'aller-retour d'un enregistrement", async () => {
60
+ const repo = orm.getRepository<<%= it.pascal %>Row>("<%= it.pascal %>");
61
+ const created = await repo.create(sample(1));
62
+
63
+ expect(created.id).toBeTruthy();
64
+ const found = await repo.findOne({ id: created.id });
65
+ expect(found).not.toBeNull();
66
+ });
67
+
68
+ it("compte ce qu'on y met", async () => {
69
+ const repo = orm.getRepository<<%= it.pascal %>Row>("<%= it.pascal %>");
70
+ const before = await repo.count();
71
+ await repo.create(sample(2));
72
+ expect(await repo.count()).toBe(before + 1);
73
+ });
74
+
75
+ <% } %> it("le contrat d'entrée refuse un corps vide", () => {
76
+ // Le service appelle ce même schéma : un rejet devient un 422 côté HTTP et WS.
77
+ expect(() => create<%= it.pascal %>Schema.parse({})).toThrow();
78
+ });
79
+
80
+ it("le contrat d'entrée retire les champs inconnus (anti-promotion)", () => {
81
+ const parsed = create<%= it.pascal %>Schema.parse({
82
+ ...sample(3),
83
+ role: "admin",
84
+ });
85
+ expect(parsed).not.toHaveProperty("role");
86
+ });
87
+ });
@@ -0,0 +1,30 @@
1
+ import { Component, VERSION, signal } from "@angular/core";
2
+
3
+ /**
4
+ * Page « <%= it.kebab %> » — squelette VOLONTAIREMENT minimal : c'est TA page,
5
+ * pas une vitrine. Le compteur prouve la recompilation Vite (AnalogJS). Les
6
+ * appels backend passent par `fetch("/api/…")` (proxifiés vers Nodefony en
7
+ * dev, cf `apiProxyPaths` du registerEntry).
8
+ */
9
+ @Component({
10
+ selector: "app-root",
11
+ standalone: true,
12
+ template: `
13
+ <main style="font-family: system-ui, sans-serif; padding: 32px">
14
+ <h1><%= it.kebab %></h1>
15
+ <p>
16
+ Angular v{{ ngVersion }} servi par Nodefony via Vite + AnalogJS —
17
+ entry « <%= it.kebab %> ».
18
+ </p>
19
+ <button (click)="count.set(count() + 1)">count is {{ count() }}</button>
20
+ <p style="color: #666; font-size: 14px">
21
+ Édite <code>frontend/src/app/app.component.ts</code> — Vite recompile
22
+ à la volée.
23
+ </p>
24
+ </main>
25
+ `,
26
+ })
27
+ export class AppComponent {
28
+ readonly ngVersion = VERSION.full;
29
+ count = signal(0);
30
+ }
@@ -0,0 +1,60 @@
1
+ import { Controller, route, controller } from "@nodefony/framework";
2
+ import type { ContextType } from "@nodefony/http";
3
+ import type { FrontendService } from "@nodefony/frontend";
4
+
5
+ /**
6
+ * <%= it.nameClass %> — sert la page <%= it.frontend %> « <%= it.kebab %> ».
7
+ *
8
+ * ── Comment la page arrive au navigateur ──────────────────────────────────
9
+ * 1. Le HTML ne vit PAS ici : c'est la coquille `frontend/index.html`
10
+ * (TA page — meta, polices, favicon, scripts externes). Ce controller la
11
+ * fait rendre par le framework.
12
+ * 2. `renderDocument("<%= it.kebab %>", nonce, hôte)` remplit le marqueur
13
+ * `<!--nodefony:frontend-->` de la coquille avec les balises de l'ENTRY
14
+ * « <%= it.kebab %> » (déclarée dans l'`index.ts` du module, cf
15
+ * `registerEntry`) :
16
+ * - en DÉVELOPPEMENT : les <script> pointent le serveur Vite → HMR,
17
+ * recompilation à la volée, état préservé ;
18
+ * - en PRODUCTION : le bundle pré-compilé fingerprinté (`npm run build`),
19
+ * servi en statique — Vite n'existe plus au runtime.
20
+ * 3. Le NONCE CSP de la requête (émis par le firewall) est propagé aux
21
+ * <script> injectés : la Content-Security-Policy stricte reste intacte —
22
+ * ne JAMAIS recopier des balises <script> à la main dans la coquille.
23
+ *
24
+ * ── Les appels API de la page ─────────────────────────────────────────────
25
+ * En dev, la page est servie par Vite (autre origine) : les chemins déclarés
26
+ * dans `apiProxyPaths` (cf `registerEntry`) sont re-proxifiés vers Nodefony —
27
+ * sans eux, `fetch("/api/...")` recevrait le SPA-fallback HTML de Vite au
28
+ * lieu du JSON. En prod, même origine : le proxy disparaît tout seul.
29
+ */
30
+ @controller("")
31
+ class <%= it.nameClass %> extends Controller {
32
+ constructor(context: ContextType) {
33
+ super("<%= it.kebab %>-front", context);
34
+ }
35
+
36
+ @route("route-<%= it.kebab %>-page", { path: "<%= it.route %>", method: "GET" })
37
+ renderPage(): unknown {
38
+ this.setContextHtml();
39
+ const svc = this.context?.container?.get("frontend") as
40
+ FrontendService | undefined;
41
+ if (!svc) {
42
+ // @nodefony/frontend absent du manifeste (nodefony.config.ts) : la page
43
+ // ne peut pas être construite — on le DIT au lieu d'un écran vide.
44
+ return this.render("<!-- @nodefony/frontend not ready -->");
45
+ }
46
+ return this.render(
47
+ // 3ᵉ argument = l'hôte par lequel le client est arrivé (`Context.domain`) :
48
+ // en développement, l'origine des assets Vite le suit, si bien qu'un poste
49
+ // et un conteneur (ou une machine distante) chargent la MÊME page sans
50
+ // configuration. Sans lui, la page annonce toujours l'hôte du démarrage.
51
+ svc.renderDocument(
52
+ "<%= it.kebab %>",
53
+ this.context?.cspNonce,
54
+ this.context?.domain,
55
+ ),
56
+ );
57
+ }
58
+ }
59
+
60
+ export default <%= it.nameClass %>;
@@ -0,0 +1,26 @@
1
+ import { useState, version as reactVersion } from "react";
2
+
3
+ /**
4
+ * Page « <%= it.kebab %> » — squelette VOLONTAIREMENT minimal : c'est TA page,
5
+ * pas une vitrine. Le compteur prouve le HMR (édite ce fichier : Vite
6
+ * recompile à la volée, la page se met à jour SANS recharger et l'état est
7
+ * conservé). Les appels backend passent par `fetch("/api/…")` (proxifiés vers
8
+ * Nodefony en dev, cf `apiProxyPaths` du registerEntry).
9
+ */
10
+ export function App() {
11
+ const [count, setCount] = useState(0);
12
+ return (
13
+ <main style={{ fontFamily: "system-ui, sans-serif", padding: 32 }}>
14
+ <h1><%= it.kebab %></h1>
15
+ <p>
16
+ React v{reactVersion} servi par Nodefony via Vite — entry «{" "}
17
+ <%= it.kebab %> ».
18
+ </p>
19
+ <button onClick={() => setCount((c) => c + 1)}>count is {count}</button>
20
+ <p style={{ color: "#666", fontSize: 14 }}>
21
+ Édite <code>frontend/src/App.tsx</code> — HMR sans recharger, compteur
22
+ conservé.
23
+ </p>
24
+ </main>
25
+ );
26
+ }
@@ -0,0 +1,19 @@
1
+ <script lang="ts">
2
+ /**
3
+ * Page « <%= it.kebab %> » — squelette VOLONTAIREMENT minimal : c'est TA page,
4
+ * pas une vitrine. Le compteur prouve le HMR (édite le markup : Vite
5
+ * recompile à la volée sans recharger). Les appels backend passent par
6
+ * `fetch("/api/…")` (proxifiés vers Nodefony en dev, cf `apiProxyPaths`).
7
+ */
8
+ let count = $state(0);
9
+ </script>
10
+
11
+ <main style="font-family: system-ui, sans-serif; padding: 32px">
12
+ <h1><%= it.kebab %></h1>
13
+ <p>Svelte 5 servi par Nodefony via Vite — entry « <%= it.kebab %> ».</p>
14
+ <button onclick={() => count++}>count is {count}</button>
15
+ <p style="color: #666; font-size: 14px">
16
+ Édite <code>frontend/src/App.svelte</code> — HMR sans recharger, compteur
17
+ conservé.
18
+ </p>
19
+ </main>
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import { ref, version as vueVersion } from "vue";
3
+
4
+ /**
5
+ * Page « <%= it.kebab %> » — squelette VOLONTAIREMENT minimal : c'est TA page,
6
+ * pas une vitrine. Le compteur prouve le HMR (édite le template : Vite
7
+ * recompile à la volée sans recharger). Les appels backend passent par
8
+ * `fetch("/api/…")` (proxifiés vers Nodefony en dev, cf `apiProxyPaths`).
9
+ */
10
+ const count = ref(0);
11
+ </script>
12
+
13
+ <template>
14
+ <main style="font-family: system-ui, sans-serif; padding: 32px">
15
+ <h1><%= it.kebab %></h1>
16
+ <p>Vue v{{ vueVersion }} servi par Nodefony via Vite — entry « <%= it.kebab %> ».</p>
17
+ <button @click="count++">count is {{ count }}</button>
18
+ <p style="color: #666; font-size: 14px">
19
+ Édite <code>frontend/src/App.vue</code> — HMR sans recharger, compteur
20
+ conservé.
21
+ </p>
22
+ </main>
23
+ </template>