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.
- package/.ai/symbols.json +36135 -0
- package/LICENSE +544 -0
- package/README.md +316 -694
- package/bin/nodefony +2183 -85
- package/dist/client/Container.js +367 -0
- package/dist/client/Event.js +198 -0
- package/dist/client/Service.js +344 -0
- package/dist/client/Tools.js +162 -0
- package/dist/client/client/ClientKernel.js +276 -0
- package/dist/client/client/angular/index.js +352 -0
- package/dist/client/client/announce.js +212 -0
- package/dist/client/client/debugbar/DebugBar.js +1624 -0
- package/dist/client/client/debugbar/format.js +103 -0
- package/dist/client/client/debugbar/hmr.js +37 -0
- package/dist/client/client/debugbar/index.js +29 -0
- package/dist/client/client/debugbar/model.js +133 -0
- package/dist/client/client/debugbar/network.js +173 -0
- package/dist/client/client/debugbar/profile.js +114 -0
- package/dist/client/client/index.js +34 -0
- package/dist/client/client/react/index.js +268 -0
- package/dist/client/client/realtime/AdaptiveRate.js +240 -0
- package/dist/client/client/realtime/BrowserWsTransport.js +57 -0
- package/dist/client/client/realtime/RealtimeClient.js +898 -0
- package/dist/client/client/realtime/localEvents.js +56 -0
- package/dist/client/client/realtime/notice.js +125 -0
- package/dist/client/client/realtime/observe.js +280 -0
- package/dist/client/client/roles/index.js +3 -0
- package/dist/client/client/roles/registry.js +97 -0
- package/dist/client/client/roles/roles.js +91 -0
- package/dist/client/client/shim/events.js +88 -0
- package/dist/client/client/shim/util.js +20 -0
- package/dist/client/client/svelte/index.js +319 -0
- package/dist/client/client/syslog/context.js +122 -0
- package/dist/client/client/syslog/errors.js +49 -0
- package/dist/client/client/syslog/uplink.js +106 -0
- package/dist/client/client/vue/index.js +321 -0
- package/dist/client/colors.js +63 -0
- package/dist/client/debugbar.standalone.js +4274 -0
- package/dist/client/realtime/IRealtimeTransport.js +32 -0
- package/dist/client/realtime/JsonRpcPeer.js +251 -0
- package/dist/client/realtime/channelRate.js +39 -0
- package/dist/client/realtime/platformChannels.js +155 -0
- package/dist/client/syslog/Pdu.js +224 -0
- package/dist/client/syslog/Syslog.js +1159 -0
- package/dist/client/syslog/drivers/pduFlow.js +106 -0
- package/dist/client/syslog/drivers/pduProtocol.js +28 -0
- package/dist/client/syslog/logColor.js +80 -0
- package/dist/client/types/src/Container.d.ts +221 -0
- package/dist/client/types/src/Event.d.ts +171 -0
- package/dist/client/types/src/FileClass.d.ts +184 -0
- package/dist/client/types/src/Service.d.ts +165 -0
- package/dist/client/types/src/Tools.d.ts +116 -0
- package/dist/client/types/src/client/ClientKernel.d.ts +90 -0
- package/dist/client/types/src/client/IClientKernel.d.ts +195 -0
- package/dist/client/types/src/client/angular/index.d.ts +273 -0
- package/dist/client/types/src/client/announce.d.ts +74 -0
- package/dist/client/types/src/client/debugbar/DebugBar.d.ts +279 -0
- package/dist/client/types/src/client/debugbar/format.d.ts +48 -0
- package/dist/client/types/src/client/debugbar/hmr.d.ts +16 -0
- package/dist/client/types/src/client/debugbar/index.d.ts +30 -0
- package/dist/client/types/src/client/debugbar/model.d.ts +158 -0
- package/dist/client/types/src/client/debugbar/network.d.ts +55 -0
- package/dist/client/types/src/client/debugbar/profile.d.ts +99 -0
- package/dist/client/types/src/client/index.d.ts +47 -0
- package/dist/client/types/src/client/react/index.d.ts +207 -0
- package/dist/client/types/src/client/realtime/AdaptiveRate.d.ts +138 -0
- package/dist/client/types/src/client/realtime/BrowserWsTransport.d.ts +27 -0
- package/dist/client/types/src/client/realtime/RealtimeClient.d.ts +573 -0
- package/dist/client/types/src/client/realtime/localEvents.d.ts +53 -0
- package/dist/client/types/src/client/realtime/notice.d.ts +70 -0
- package/dist/client/types/src/client/realtime/observe.d.ts +284 -0
- package/dist/client/types/src/client/roles/index.d.ts +15 -0
- package/dist/client/types/src/client/roles/registry.d.ts +72 -0
- package/dist/client/types/src/client/roles/roles.d.ts +68 -0
- package/dist/client/types/src/client/shim/cli-color.d.ts +2 -0
- package/dist/client/types/src/client/shim/events.d.ts +39 -0
- package/dist/client/types/src/client/shim/util.d.ts +14 -0
- package/dist/client/types/src/client/svelte/index.d.ts +216 -0
- package/dist/client/types/src/client/syslog/context.d.ts +76 -0
- package/dist/client/types/src/client/syslog/errors.d.ts +46 -0
- package/dist/client/types/src/client/syslog/uplink.d.ts +89 -0
- package/dist/client/types/src/client/transport/websocket.d.ts +5 -0
- package/dist/client/types/src/client/vue/index.d.ts +234 -0
- package/dist/client/types/src/colors.d.ts +32 -0
- package/dist/client/types/src/config/infra.d.ts +171 -0
- package/dist/client/types/src/kernel/bootReport.d.ts +112 -0
- package/dist/client/types/src/kernel/readinessRegistry.d.ts +104 -0
- package/dist/client/types/src/realtime/IRealtimeSocket.d.ts +142 -0
- package/dist/client/types/src/realtime/IRealtimeTransport.d.ts +50 -0
- package/dist/client/types/src/realtime/JsonRpcPeer.d.ts +251 -0
- package/dist/client/types/src/realtime/RealtimeEventMap.d.ts +269 -0
- package/dist/client/types/src/realtime/channelRate.d.ts +55 -0
- package/dist/client/types/src/realtime/platformChannels.d.ts +147 -0
- package/dist/client/types/src/syslog/Pdu.d.ts +134 -0
- package/dist/client/types/src/syslog/Syslog.d.ts +482 -0
- package/dist/client/types/src/syslog/drivers/ILogDriver.d.ts +177 -0
- package/dist/client/types/src/syslog/drivers/pduFlow.d.ts +53 -0
- package/dist/client/types/src/syslog/drivers/pduProtocol.d.ts +20 -0
- package/dist/client/types/src/syslog/logColor.d.ts +59 -0
- package/dist/client/types/src/types/ICliKernel.d.ts +28 -0
- package/dist/client/types/src/types/ICommand.d.ts +14 -0
- package/dist/client/types/src/types/IContainer.d.ts +35 -0
- package/dist/client/types/src/types/IKernel.d.ts +138 -0
- package/dist/client/types/src/types/IMcpTool.d.ts +157 -0
- package/dist/client/types/src/types/IModule.d.ts +73 -0
- package/dist/client/types/src/types/IPage.d.ts +119 -0
- package/dist/client/types/src/types/IService.d.ts +62 -0
- package/dist/client/types/src/types/ISyslog.d.ts +58 -0
- package/dist/client/types/src/types/ITransport.d.ts +5 -0
- package/dist/client/types/src/types/globals.d.ts +47 -0
- package/dist/node/Cli.js +750 -0
- package/dist/node/Container.js +367 -0
- package/dist/node/Error.js +309 -0
- package/dist/node/Event.js +198 -0
- package/dist/node/FileClass.js +308 -0
- package/dist/node/Nodefony.js +78 -0
- package/dist/node/Service.js +344 -0
- package/dist/node/Tools.js +205 -0
- package/dist/node/bin/resolveLocalCli.js +10 -0
- package/dist/node/bundler/index.js +103 -0
- package/dist/node/cli/agentTargets.js +461 -0
- package/dist/node/cli/aiMcp.js +553 -0
- package/dist/node/cli/aiMcpReport.js +129 -0
- package/dist/node/cli/aiSync.js +323 -0
- package/dist/node/cli/aiSyncReport.js +142 -0
- package/dist/node/cli/card.js +186 -0
- package/dist/node/cli/cardReport.js +110 -0
- package/dist/node/cli/completion.js +415 -0
- package/dist/node/cli/create.js +805 -0
- package/dist/node/cli/env.js +332 -0
- package/dist/node/cli/envReport.js +159 -0
- package/dist/node/cli/execPortable.js +60 -0
- package/dist/node/cli/gitHooks.js +191 -0
- package/dist/node/cli/gitHooksReport.js +119 -0
- package/dist/node/cli/globalFlags.js +67 -0
- package/dist/node/cli/helpReport.js +288 -0
- package/dist/node/cli/manPage.js +165 -0
- package/dist/node/cli/nodefonyBin.js +61 -0
- package/dist/node/cli/outdated.js +144 -0
- package/dist/node/cli/progress.js +555 -0
- package/dist/node/cli/projectRoot.js +32 -0
- package/dist/node/cli/promptPassword.js +44 -0
- package/dist/node/cli/prompts.js +86 -0
- package/dist/node/cli/scaffold/destination.js +92 -0
- package/dist/node/cli/scaffold/engine.js +2156 -0
- package/dist/node/cli/scaffold/entityFields.js +589 -0
- package/dist/node/cli/scaffold/format.js +243 -0
- package/dist/node/cli/scaffold/interactive.js +124 -0
- package/dist/node/cli/scaffold/moduleLayout.js +38 -0
- package/dist/node/cli/scaffold/reservedEntities.js +74 -0
- package/dist/node/cli/scaffold/spec.js +704 -0
- package/dist/node/cli/scaffold/steps.js +40 -0
- package/dist/node/cli/scaffold/userContractSource.js +133 -0
- package/dist/node/cli/scaffold/versions.js +57 -0
- package/dist/node/cli/scaffold/writer.js +172 -0
- package/dist/node/cli/startMenu.js +496 -0
- package/dist/node/cli/symbols.js +205 -0
- package/dist/node/cli/sysexits.js +34 -0
- package/dist/node/cli/tableReport.js +184 -0
- package/dist/node/cli/usageReport.js +144 -0
- package/dist/node/colors.js +63 -0
- package/dist/node/command/Builder.js +153 -0
- package/dist/node/command/Command.js +348 -0
- package/dist/node/config/configProvenance.js +101 -0
- package/dist/node/config/defaults.js +39 -0
- package/dist/node/config/defineConfig.js +129 -0
- package/dist/node/config/defineEnv.js +264 -0
- package/dist/node/config/envExample.js +41 -0
- package/dist/node/config/envOverride.js +423 -0
- package/dist/node/config/infra.js +163 -0
- package/dist/node/config/reactivity.js +23 -0
- package/dist/node/config/reservedEnv.js +118 -0
- package/dist/node/config/schema.js +134 -0
- package/dist/node/config/use.js +24 -0
- package/dist/node/finder/File.js +49 -0
- package/dist/node/finder/FileResult.js +86 -0
- package/dist/node/finder/Finder.js +201 -0
- package/dist/node/finder/Result.js +45 -0
- package/dist/node/index.js +121 -0
- package/dist/node/kernel/BootConfigurationError.js +54 -0
- package/dist/node/kernel/CliKernel.js +630 -0
- package/dist/node/kernel/Kernel.js +2198 -0
- package/dist/node/kernel/Module.js +453 -0
- package/dist/node/kernel/adminPlane/adminCaller.js +98 -0
- package/dist/node/kernel/adminPlane/adminRbac.js +51 -0
- package/dist/node/kernel/adminPlane/catalog.js +158 -0
- package/dist/node/kernel/adminPlane/executeAdmin.js +78 -0
- package/dist/node/kernel/checks/deep.js +335 -0
- package/dist/node/kernel/checks/freshness.js +139 -0
- package/dist/node/kernel/checks/gating.js +231 -0
- package/dist/node/kernel/checks/guards.js +232 -0
- package/dist/node/kernel/checks/lastBoot.js +136 -0
- package/dist/node/kernel/checks/live.js +330 -0
- package/dist/node/kernel/checks/packageDeps.js +292 -0
- package/dist/node/kernel/checks/readiness.js +153 -0
- package/dist/node/kernel/checks/renderReport.js +780 -0
- package/dist/node/kernel/checks/report.js +421 -0
- package/dist/node/kernel/checks/runDoctor.js +731 -0
- package/dist/node/kernel/checks/surface.js +364 -0
- package/dist/node/kernel/checks/walk.js +100 -0
- package/dist/node/kernel/checks/wiring.js +450 -0
- package/dist/node/kernel/commands/AiMcpCommand.js +65 -0
- package/dist/node/kernel/commands/AiSyncCommand.js +48 -0
- package/dist/node/kernel/commands/BuildCommand.js +49 -0
- package/dist/node/kernel/commands/CardCommand.js +50 -0
- package/dist/node/kernel/commands/ClusterCommand.js +58 -0
- package/dist/node/kernel/commands/CompletionCommand.js +31 -0
- package/dist/node/kernel/commands/CreateCommand.js +45 -0
- package/dist/node/kernel/commands/DevCommand.js +99 -0
- package/dist/node/kernel/commands/DoctorCommand.js +115 -0
- package/dist/node/kernel/commands/EnvCommand.js +52 -0
- package/dist/node/kernel/commands/GitHooksCommand.js +47 -0
- package/dist/node/kernel/commands/InspectCommand.js +153 -0
- package/dist/node/kernel/commands/InstallCommand.js +20 -0
- package/dist/node/kernel/commands/MenuCommand.js +261 -0
- package/dist/node/kernel/commands/OutdatedCommand.js +164 -0
- package/dist/node/kernel/commands/ProdCommand.js +60 -0
- package/dist/node/kernel/commands/StatusCommand.js +30 -0
- package/dist/node/kernel/commands/StopCommand.js +35 -0
- package/dist/node/kernel/commands/SymbolsCommand.js +45 -0
- package/dist/node/kernel/commands/runtimeLauncher.js +95 -0
- package/dist/node/kernel/decorators/kernelDecorator.js +110 -0
- package/dist/node/kernel/injector/injector.js +137 -0
- package/dist/node/kernel/injector/serviceOrder.js +106 -0
- package/dist/node/kernel/inspect/adminSubjects.js +194 -0
- package/dist/node/kernel/inspect/docOutline.js +86 -0
- package/dist/node/kernel/lifecycleTags.js +76 -0
- package/dist/node/kernel/moduleConfig.js +75 -0
- package/dist/node/kernel/moduleGating.js +68 -0
- package/dist/node/kernel/readinessRegistry.js +98 -0
- package/dist/node/kernel/resolveModuleEntry.js +61 -0
- package/dist/node/mcp/caller.js +40 -0
- package/dist/node/mcp/guard.js +51 -0
- package/dist/node/mcp/protocol.js +157 -0
- package/dist/node/mcp/server.js +216 -0
- package/dist/node/mcp/tools.js +861 -0
- package/dist/node/oauth/authorizationServer.js +221 -0
- package/dist/node/oauth/protectedResource.js +293 -0
- package/dist/node/package.js +4 -0
- package/dist/node/realtime/IRealtimeTransport.js +32 -0
- package/dist/node/realtime/JsonRpcPeer.js +251 -0
- package/dist/node/realtime/RealtimeEventMap.js +15 -0
- package/dist/node/realtime/channelRate.js +39 -0
- package/dist/node/realtime/platformChannels.js +155 -0
- package/dist/node/runtime/GcScheduler.js +92 -0
- package/dist/node/runtime/RequestContext.js +76 -0
- package/dist/node/runtime/bearer.js +84 -0
- package/dist/node/runtime/engineEnvironment.js +79 -0
- package/dist/node/runtime/loadEnv.js +105 -0
- package/dist/node/runtime/pageFacets.js +85 -0
- package/dist/node/runtime/pageFilters.js +103 -0
- package/dist/node/runtime/pageGuard.js +84 -0
- package/dist/node/runtime/pageQuery.js +160 -0
- package/dist/node/runtime/pageSort.js +114 -0
- package/dist/node/runtime/redact.js +43 -0
- package/dist/node/runtime/withTimeout.js +71 -0
- package/dist/node/service/cluster/ClusterManager.js +202 -0
- package/dist/node/service/cluster/ClusterProbeAggregator.js +120 -0
- package/dist/node/service/cluster/ClusterRelay.js +74 -0
- package/dist/node/service/cluster/clusterMaster.js +65 -0
- package/dist/node/service/cluster/clusterMessage.js +70 -0
- package/dist/node/service/cluster/cpuQuota.js +59 -0
- package/dist/node/service/cluster/instanceProbe.js +52 -0
- package/dist/node/service/cluster/podEnvironment.js +48 -0
- package/dist/node/service/cluster/processProbe.js +70 -0
- package/dist/node/service/cluster/richProcessProbe.js +115 -0
- package/dist/node/service/cluster/topology.js +71 -0
- package/dist/node/service/dev/BootReporter.js +490 -0
- package/dist/node/service/dev/DevSupervisor.js +1004 -0
- package/dist/node/service/dev/bootVerdict.js +158 -0
- package/dist/node/service/dev/detachedStart.js +372 -0
- package/dist/node/service/dev/devProcess.js +1137 -0
- package/dist/node/service/dev/devProjects.js +138 -0
- package/dist/node/service/dev/devStatusReport.js +395 -0
- package/dist/node/service/dev/devStop.js +263 -0
- package/dist/node/service/fetchService.js +35 -0
- package/dist/node/service/gitService.js +62 -0
- package/dist/node/syslog/Pdu.js +224 -0
- package/dist/node/syslog/Syslog.js +1159 -0
- package/dist/node/syslog/drivers/ClusterFileLogDriver.js +114 -0
- package/dist/node/syslog/drivers/FileLogDriver.js +127 -0
- package/dist/node/syslog/drivers/ILogDriver.js +26 -0
- package/dist/node/syslog/drivers/LokiLogDriver.js +144 -0
- package/dist/node/syslog/drivers/MemoryLogDriver.js +33 -0
- package/dist/node/syslog/drivers/OpenSearchLogDriver.js +159 -0
- package/dist/node/syslog/drivers/builtinLogDrivers.js +114 -0
- package/dist/node/syslog/drivers/filterPdus.js +71 -0
- package/dist/node/syslog/drivers/logDriverRegistry.js +83 -0
- package/dist/node/syslog/drivers/opensearchShared.js +17 -0
- package/dist/node/syslog/drivers/pduFlow.js +106 -0
- package/dist/node/syslog/drivers/pduProtocol.js +28 -0
- package/dist/node/syslog/httpFetch.js +43 -0
- package/dist/node/syslog/logColor.js +80 -0
- package/dist/node/syslog/sinks/FileSink.js +142 -0
- package/dist/node/syslog/transports/BatchingHttpTransport.js +98 -0
- package/dist/node/syslog/transports/ConsoleTransport.js +14 -0
- package/dist/node/syslog/transports/FileTransport.js +17 -0
- package/dist/node/syslog/transports/HttpTransport.js +44 -0
- package/dist/node/syslog/transports/LokiTransport.js +80 -0
- package/dist/node/syslog/transports/OpenSearchTransport.js +53 -0
- package/dist/node/syslog/transports/SyslogTransport.js +13 -0
- package/dist/node/syslog/transports/index.js +8 -0
- package/dist/node/testing/index.js +190 -0
- package/dist/types/Cli.d.ts +177 -0
- package/dist/types/Container.d.ts +221 -0
- package/dist/types/Error.d.ts +162 -0
- package/dist/types/Event.d.ts +171 -0
- package/dist/types/FileClass.d.ts +184 -0
- package/dist/types/Nodefony.d.ts +66 -0
- package/dist/types/Service.d.ts +165 -0
- package/dist/types/Tools.d.ts +116 -0
- package/dist/types/bin/resolveLocalCli.d.ts +49 -0
- package/dist/types/bundler/index.d.ts +66 -0
- package/dist/types/cli/agentTargets.d.ts +378 -0
- package/dist/types/cli/aiMcp.d.ts +239 -0
- package/dist/types/cli/aiMcpReport.d.ts +113 -0
- package/dist/types/cli/aiSync.d.ts +68 -0
- package/dist/types/cli/aiSyncReport.d.ts +149 -0
- package/dist/types/cli/card.d.ts +49 -0
- package/dist/types/cli/cardReport.d.ts +127 -0
- package/dist/types/cli/completion.d.ts +154 -0
- package/dist/types/cli/create.d.ts +177 -0
- package/dist/types/cli/env.d.ts +103 -0
- package/dist/types/cli/envReport.d.ts +153 -0
- package/dist/types/cli/execPortable.d.ts +54 -0
- package/dist/types/cli/gitHooks.d.ts +48 -0
- package/dist/types/cli/gitHooksReport.d.ts +101 -0
- package/dist/types/cli/globalFlags.d.ts +48 -0
- package/dist/types/cli/helpReport.d.ts +110 -0
- package/dist/types/cli/manPage.d.ts +21 -0
- package/dist/types/cli/nodefonyBin.d.ts +45 -0
- package/dist/types/cli/outdated.d.ts +119 -0
- package/dist/types/cli/progress.d.ts +349 -0
- package/dist/types/cli/projectRoot.d.ts +19 -0
- package/dist/types/cli/promptPassword.d.ts +22 -0
- package/dist/types/cli/prompts.d.ts +102 -0
- package/dist/types/cli/scaffold/destination.d.ts +70 -0
- package/dist/types/cli/scaffold/engine.d.ts +545 -0
- package/dist/types/cli/scaffold/entityFields.d.ts +238 -0
- package/dist/types/cli/scaffold/format.d.ts +78 -0
- package/dist/types/cli/scaffold/interactive.d.ts +11 -0
- package/dist/types/cli/scaffold/moduleLayout.d.ts +69 -0
- package/dist/types/cli/scaffold/reservedEntities.d.ts +49 -0
- package/dist/types/cli/scaffold/spec.d.ts +159 -0
- package/dist/types/cli/scaffold/steps.d.ts +24 -0
- package/dist/types/cli/scaffold/userContractSource.d.ts +86 -0
- package/dist/types/cli/scaffold/versions.d.ts +14 -0
- package/dist/types/cli/scaffold/writer.d.ts +100 -0
- package/dist/types/cli/startMenu.d.ts +195 -0
- package/dist/types/cli/symbols.d.ts +84 -0
- package/dist/types/cli/sysexits.d.ts +31 -0
- package/dist/types/cli/tableReport.d.ts +44 -0
- package/dist/types/cli/usageReport.d.ts +108 -0
- package/dist/types/client/ClientKernel.d.ts +90 -0
- package/dist/types/client/IClientKernel.d.ts +195 -0
- package/dist/types/client/angular/index.d.ts +273 -0
- package/dist/types/client/announce.d.ts +74 -0
- package/dist/types/client/debugbar/DebugBar.d.ts +279 -0
- package/dist/types/client/debugbar/format.d.ts +48 -0
- package/dist/types/client/debugbar/hmr.d.ts +16 -0
- package/dist/types/client/debugbar/index.d.ts +30 -0
- package/dist/types/client/debugbar/model.d.ts +158 -0
- package/dist/types/client/debugbar/network.d.ts +55 -0
- package/dist/types/client/debugbar/profile.d.ts +99 -0
- package/dist/types/client/index.d.ts +47 -0
- package/dist/types/client/react/index.d.ts +207 -0
- package/dist/types/client/realtime/AdaptiveRate.d.ts +138 -0
- package/dist/types/client/realtime/BrowserWsTransport.d.ts +27 -0
- package/dist/types/client/realtime/RealtimeClient.d.ts +573 -0
- package/dist/types/client/realtime/localEvents.d.ts +53 -0
- package/dist/types/client/realtime/notice.d.ts +70 -0
- package/dist/types/client/realtime/observe.d.ts +284 -0
- package/dist/types/client/roles/index.d.ts +15 -0
- package/dist/types/client/roles/registry.d.ts +72 -0
- package/dist/types/client/roles/roles.d.ts +68 -0
- package/dist/types/client/shim/cli-color.d.ts +2 -0
- package/dist/types/client/shim/events.d.ts +39 -0
- package/dist/types/client/shim/util.d.ts +14 -0
- package/dist/types/client/svelte/index.d.ts +216 -0
- package/dist/types/client/syslog/context.d.ts +76 -0
- package/dist/types/client/syslog/errors.d.ts +46 -0
- package/dist/types/client/syslog/uplink.d.ts +89 -0
- package/dist/types/client/transport/websocket.d.ts +5 -0
- package/dist/types/client/vue/index.d.ts +234 -0
- package/dist/types/colors.d.ts +32 -0
- package/dist/types/command/Builder.d.ts +47 -0
- package/dist/types/command/Command.d.ts +268 -0
- package/dist/types/config/configMeta.d.ts +53 -0
- package/dist/types/config/configProvenance.d.ts +58 -0
- package/dist/types/config/defaults.d.ts +33 -0
- package/dist/types/config/defineConfig.d.ts +70 -0
- package/dist/types/config/defineEnv.d.ts +170 -0
- package/dist/types/config/envExample.d.ts +23 -0
- package/dist/types/config/envOverride.d.ts +236 -0
- package/dist/types/config/index.d.ts +23 -0
- package/dist/types/config/infra.d.ts +171 -0
- package/dist/types/config/reactivity.d.ts +36 -0
- package/dist/types/config/reservedEnv.d.ts +145 -0
- package/dist/types/config/schema.d.ts +113 -0
- package/dist/types/config/types.d.ts +374 -0
- package/dist/types/config/use.d.ts +80 -0
- package/dist/types/finder/File.d.ts +26 -0
- package/dist/types/finder/FileResult.d.ts +14 -0
- package/dist/types/finder/Finder.d.ts +51 -0
- package/dist/types/finder/Result.d.ts +10 -0
- package/dist/types/index.d.ts +205 -0
- package/dist/types/kernel/BootConfigurationError.d.ts +50 -0
- package/dist/types/kernel/CliKernel.d.ts +289 -0
- package/dist/types/kernel/Kernel.d.ts +1255 -0
- package/dist/types/kernel/Module.d.ts +326 -0
- package/dist/types/kernel/adminPlane/adminCaller.d.ts +105 -0
- package/dist/types/kernel/adminPlane/adminRbac.d.ts +44 -0
- package/dist/types/kernel/adminPlane/catalog.d.ts +122 -0
- package/dist/types/kernel/adminPlane/executeAdmin.d.ts +99 -0
- package/dist/types/kernel/bootReport.d.ts +112 -0
- package/dist/types/kernel/checks/deep.d.ts +122 -0
- package/dist/types/kernel/checks/freshness.d.ts +49 -0
- package/dist/types/kernel/checks/gating.d.ts +134 -0
- package/dist/types/kernel/checks/guards.d.ts +57 -0
- package/dist/types/kernel/checks/lastBoot.d.ts +189 -0
- package/dist/types/kernel/checks/live.d.ts +110 -0
- package/dist/types/kernel/checks/packageDeps.d.ts +44 -0
- package/dist/types/kernel/checks/readiness.d.ts +97 -0
- package/dist/types/kernel/checks/renderReport.d.ts +107 -0
- package/dist/types/kernel/checks/report.d.ts +414 -0
- package/dist/types/kernel/checks/runDoctor.d.ts +361 -0
- package/dist/types/kernel/checks/surface.d.ts +148 -0
- package/dist/types/kernel/checks/walk.d.ts +45 -0
- package/dist/types/kernel/checks/wiring.d.ts +54 -0
- package/dist/types/kernel/commands/AiMcpCommand.d.ts +39 -0
- package/dist/types/kernel/commands/AiSyncCommand.d.ts +28 -0
- package/dist/types/kernel/commands/BuildCommand.d.ts +13 -0
- package/dist/types/kernel/commands/CardCommand.d.ts +34 -0
- package/dist/types/kernel/commands/ClusterCommand.d.ts +29 -0
- package/dist/types/kernel/commands/CompletionCommand.d.ts +17 -0
- package/dist/types/kernel/commands/CreateCommand.d.ts +16 -0
- package/dist/types/kernel/commands/DevCommand.d.ts +40 -0
- package/dist/types/kernel/commands/DoctorCommand.d.ts +55 -0
- package/dist/types/kernel/commands/EnvCommand.d.ts +35 -0
- package/dist/types/kernel/commands/GitHooksCommand.d.ts +27 -0
- package/dist/types/kernel/commands/InspectCommand.d.ts +59 -0
- package/dist/types/kernel/commands/InstallCommand.d.ts +7 -0
- package/dist/types/kernel/commands/MenuCommand.d.ts +58 -0
- package/dist/types/kernel/commands/OutdatedCommand.d.ts +47 -0
- package/dist/types/kernel/commands/ProdCommand.d.ts +29 -0
- package/dist/types/kernel/commands/StatusCommand.d.ts +17 -0
- package/dist/types/kernel/commands/StopCommand.d.ts +17 -0
- package/dist/types/kernel/commands/SymbolsCommand.d.ts +29 -0
- package/dist/types/kernel/commands/runtimeLauncher.d.ts +76 -0
- package/dist/types/kernel/decorators/kernelDecorator.d.ts +76 -0
- package/dist/types/kernel/injector/injector.d.ts +47 -0
- package/dist/types/kernel/injector/serviceOrder.d.ts +29 -0
- package/dist/types/kernel/inspect/adminSubjects.d.ts +169 -0
- package/dist/types/kernel/inspect/docOutline.d.ts +53 -0
- package/dist/types/kernel/lifecycleTags.d.ts +79 -0
- package/dist/types/kernel/moduleConfig.d.ts +35 -0
- package/dist/types/kernel/moduleGating.d.ts +78 -0
- package/dist/types/kernel/readinessRegistry.d.ts +104 -0
- package/dist/types/kernel/resolveModuleEntry.d.ts +46 -0
- package/dist/types/mcp/caller.d.ts +55 -0
- package/dist/types/mcp/guard.d.ts +66 -0
- package/dist/types/mcp/protocol.d.ts +163 -0
- package/dist/types/mcp/server.d.ts +70 -0
- package/dist/types/mcp/tools.d.ts +209 -0
- package/dist/types/oauth/authorizationServer.d.ts +204 -0
- package/dist/types/oauth/protectedResource.d.ts +339 -0
- package/dist/types/realtime/IRealtimeSocket.d.ts +142 -0
- package/dist/types/realtime/IRealtimeTransport.d.ts +50 -0
- package/dist/types/realtime/JsonRpcPeer.d.ts +251 -0
- package/dist/types/realtime/RealtimeEventMap.d.ts +269 -0
- package/dist/types/realtime/channelRate.d.ts +55 -0
- package/dist/types/realtime/platformChannels.d.ts +147 -0
- package/dist/types/runtime/GcScheduler.d.ts +96 -0
- package/dist/types/runtime/RequestContext.d.ts +152 -0
- package/dist/types/runtime/bearer.d.ts +88 -0
- package/dist/types/runtime/engineEnvironment.d.ts +115 -0
- package/dist/types/runtime/loadEnv.d.ts +86 -0
- package/dist/types/runtime/pageFacets.d.ts +104 -0
- package/dist/types/runtime/pageFilters.d.ts +139 -0
- package/dist/types/runtime/pageGuard.d.ts +78 -0
- package/dist/types/runtime/pageQuery.d.ts +138 -0
- package/dist/types/runtime/pageSort.d.ts +86 -0
- package/dist/types/runtime/redact.d.ts +27 -0
- package/dist/types/runtime/withTimeout.d.ts +51 -0
- package/dist/types/service/cluster/ClusterManager.d.ts +112 -0
- package/dist/types/service/cluster/ClusterProbeAggregator.d.ts +68 -0
- package/dist/types/service/cluster/ClusterRelay.d.ts +57 -0
- package/dist/types/service/cluster/clusterMaster.d.ts +40 -0
- package/dist/types/service/cluster/clusterMessage.d.ts +94 -0
- package/dist/types/service/cluster/cpuQuota.d.ts +37 -0
- package/dist/types/service/cluster/instanceProbe.d.ts +82 -0
- package/dist/types/service/cluster/podEnvironment.d.ts +35 -0
- package/dist/types/service/cluster/processProbe.d.ts +53 -0
- package/dist/types/service/cluster/richProcessProbe.d.ts +77 -0
- package/dist/types/service/cluster/topology.d.ts +64 -0
- package/dist/types/service/dev/BootReporter.d.ts +67 -0
- package/dist/types/service/dev/DevSupervisor.d.ts +117 -0
- package/dist/types/service/dev/bootVerdict.d.ts +99 -0
- package/dist/types/service/dev/detachedStart.d.ts +164 -0
- package/dist/types/service/dev/devProcess.d.ts +638 -0
- package/dist/types/service/dev/devProjects.d.ts +121 -0
- package/dist/types/service/dev/devStatusReport.d.ts +141 -0
- package/dist/types/service/dev/devStop.d.ts +57 -0
- package/dist/types/service/fetchService.d.ts +29 -0
- package/dist/types/service/gitService.d.ts +24 -0
- package/dist/types/syslog/Pdu.d.ts +134 -0
- package/dist/types/syslog/Syslog.d.ts +482 -0
- package/dist/types/syslog/drivers/ClusterFileLogDriver.d.ts +40 -0
- package/dist/types/syslog/drivers/FileLogDriver.d.ts +55 -0
- package/dist/types/syslog/drivers/ILogDriver.d.ts +177 -0
- package/dist/types/syslog/drivers/LokiLogDriver.d.ts +44 -0
- package/dist/types/syslog/drivers/MemoryLogDriver.d.ts +20 -0
- package/dist/types/syslog/drivers/OpenSearchLogDriver.d.ts +40 -0
- package/dist/types/syslog/drivers/builtinLogDrivers.d.ts +43 -0
- package/dist/types/syslog/drivers/filterPdus.d.ts +21 -0
- package/dist/types/syslog/drivers/logDriverRegistry.d.ts +100 -0
- package/dist/types/syslog/drivers/opensearchShared.d.ts +11 -0
- package/dist/types/syslog/drivers/pduFlow.d.ts +53 -0
- package/dist/types/syslog/drivers/pduProtocol.d.ts +20 -0
- package/dist/types/syslog/httpFetch.d.ts +48 -0
- package/dist/types/syslog/logColor.d.ts +59 -0
- package/dist/types/syslog/sinks/FileSink.d.ts +78 -0
- package/dist/types/syslog/transports/BatchingHttpTransport.d.ts +59 -0
- package/dist/types/syslog/transports/ConsoleTransport.d.ts +8 -0
- package/dist/types/syslog/transports/FileTransport.d.ts +13 -0
- package/dist/types/syslog/transports/HttpTransport.d.ts +15 -0
- package/dist/types/syslog/transports/LokiTransport.d.ts +45 -0
- package/dist/types/syslog/transports/OpenSearchTransport.d.ts +40 -0
- package/dist/types/syslog/transports/SyslogTransport.d.ts +9 -0
- package/dist/types/syslog/transports/index.d.ts +12 -0
- package/dist/types/testing/index.d.ts +197 -0
- package/dist/types/types/IAdminApi.d.ts +246 -0
- package/dist/types/types/ICliKernel.d.ts +28 -0
- package/dist/types/types/ICommand.d.ts +14 -0
- package/dist/types/types/IContainer.d.ts +35 -0
- package/dist/types/types/IIdempotencyStore.d.ts +159 -0
- package/dist/types/types/IKernel.d.ts +138 -0
- package/dist/types/types/IMcpTool.d.ts +157 -0
- package/dist/types/types/IModule.d.ts +73 -0
- package/dist/types/types/IModuleManifest.d.ts +49 -0
- package/dist/types/types/IPage.d.ts +119 -0
- package/dist/types/types/IService.d.ts +62 -0
- package/dist/types/types/ISyslog.d.ts +58 -0
- package/dist/types/types/ITransport.d.ts +5 -0
- package/dist/types/types/globals.d.ts +47 -0
- package/docs/angular-services.md +318 -0
- package/docs/catalogue.md +184 -0
- package/docs/cli.md +369 -0
- package/docs/client.md +616 -0
- package/docs/debugbar.md +218 -0
- package/docs/environnement.md +308 -0
- package/docs/index.md +388 -0
- package/docs/kernel.md +670 -0
- package/docs/progression.md +228 -0
- package/docs/react-hooks.md +686 -0
- package/docs/request-context.md +507 -0
- package/docs/service.md +590 -0
- package/docs/svelte-reactivite.md +293 -0
- package/docs/syslog.md +848 -0
- package/docs/testing.md +203 -0
- package/docs/vue-composables.md +255 -0
- package/man/nodefony.1 +152 -0
- package/package.json +163 -83
- package/templates/app/agents/AGENTS.md.tpl +967 -0
- package/templates/app/agents/POINTEUR.md.tpl +12 -0
- package/templates/app/base/Dockerfile.tpl +104 -0
- package/templates/app/base/README.md.tpl +314 -0
- package/templates/app/base/dockerignore.tpl +28 -0
- package/templates/app/base/env.ts.tpl +130 -0
- package/templates/app/base/gitattributes.tpl +28 -0
- package/templates/app/base/github/workflows/ci.yml.tpl +91 -0
- package/templates/app/base/gitignore.tpl +46 -0
- package/templates/app/base/gitlab-ci.yml.tpl +42 -0
- package/templates/app/base/index.ts.tpl +69 -0
- package/templates/app/base/nodefony.config.ts.tpl +342 -0
- package/templates/app/base/oxlintrc.json.tpl +127 -0
- package/templates/app/base/package.json.tpl +75 -0
- package/templates/app/base/prettierignore.tpl +24 -0
- package/templates/app/base/prettierrc.json.tpl +12 -0
- package/templates/app/base/rolldown.config.ts.tpl +8 -0
- package/templates/app/base/tests/config.test.ts.tpl +29 -0
- package/templates/app/base/tests/e2e.setup.ts.tpl +181 -0
- package/templates/app/base/tests/e2e.test.ts.tpl +105 -0
- package/templates/app/base/tests/migrations.e2e.test.ts.tpl +579 -0
- package/templates/app/base/tsconfig.json.tpl +47 -0
- package/templates/app/base/vitest.config.ts.tpl +88 -0
- package/templates/app/base/vitest.e2e.config.ts.tpl +39 -0
- package/templates/app/complete/compose.yaml.tpl +328 -0
- package/templates/app/complete/deploy/migrate-job.yaml.tpl +100 -0
- package/templates/app/complete/docker/db/init-nodefony-e2e.sql.tpl +30 -0
- package/templates/app/complete/docker/grafana/provisioning/datasources/loki.yaml.tpl +15 -0
- package/templates/app/complete/env.local.tpl +11 -0
- package/templates/app/complete/env.tpl +53 -0
- package/templates/app/complete/nodefony/entity/User.ts.tpl +69 -0
- package/templates/app/complete/nodefony/security/provisionUsers.ts.tpl +124 -0
- package/templates/app/complete/nodefony/service/AppBannerService.ts.tpl +98 -0
- package/templates/app/complete/nodefony/service/AppInfoService.ts.tpl +85 -0
- package/templates/app/frontend/angular/frontend/src/accent.css.tpl +34 -0
- package/templates/app/frontend/angular/frontend/src/app/app.component.ts.tpl +400 -0
- package/templates/app/frontend/react/frontend/src/App.tsx.tpl +421 -0
- package/templates/app/frontend/react/frontend/src/accent.css.tpl +30 -0
- package/templates/app/frontend/shared/frontend/src/brand.ts.tpl +3 -0
- package/templates/app/frontend/shared/frontend/src/showcase.css.tpl +224 -0
- package/templates/app/frontend/shared/nodefony/controllers/AppController.ts.tpl +45 -0
- package/templates/app/frontend/svelte/frontend/src/App.svelte.tpl +371 -0
- package/templates/app/frontend/svelte/frontend/src/accent.css.tpl +34 -0
- package/templates/app/frontend/vue/frontend/src/App.vue.tpl +367 -0
- package/templates/app/frontend/vue/frontend/src/accent.css.tpl +34 -0
- package/templates/app/home/nodefony/controllers/HomeController.ts.tpl +38 -0
- package/templates/command/nodefony/command/__NAME__.ts.tpl +132 -0
- package/templates/controller/duplex/nodefony/controllers/__NAME__.ts.tpl +188 -0
- package/templates/controller/example/nodefony/controllers/__NAME__.ts.tpl +348 -0
- package/templates/controller/hello/nodefony/controllers/__NAME__.ts.tpl +143 -0
- package/templates/controller/realtime/nodefony/controllers/__NAME__.ts.tpl +153 -0
- package/templates/controller/realtime/tests/__KEBAB__-realtime.test.ts.tpl +79 -0
- package/templates/controller/rest/nodefony/controllers/__NAME__.ts.tpl +159 -0
- package/templates/entity/base/nodefony/entity/__PASCAL__.schema.ts.tpl +31 -0
- package/templates/entity/base/nodefony/entity/__PASCAL__.ts.tpl +68 -0
- package/templates/entity/controller/nodefony/controllers/__PASCAL__Controller.ts.tpl +335 -0
- package/templates/entity/service/nodefony/service/__PASCAL__Service.ts.tpl +126 -0
- package/templates/entity/tests/tests/__KEBAB__.e2e.test.ts.tpl +358 -0
- package/templates/entity/tests/tests/__KEBAB__.test.ts.tpl +87 -0
- package/templates/front/angular/frontend/src/app/app.component.ts.tpl +30 -0
- package/templates/front/base/nodefony/controllers/__NAME__.ts.tpl +60 -0
- package/templates/front/react/frontend/src/App.tsx.tpl +26 -0
- package/templates/front/svelte/frontend/src/App.svelte.tpl +19 -0
- package/templates/front/vue/frontend/src/App.vue.tpl +23 -0
- package/templates/module/ai/AGENTS.md.tpl +71 -0
- package/templates/module/base/README.md.tpl +62 -0
- package/templates/module/base/docs/index.md.tpl +55 -0
- package/templates/module/base/index.ts.tpl +50 -0
- package/templates/module/base/nodefony/config/config.ts.tpl +60 -0
- package/templates/module/base/nodefony/config/defineModuleConfig.ts.tpl +55 -0
- package/templates/module/base/nodefony/src/errors/__PASCAL__Error.ts.tpl +20 -0
- package/templates/module/base/package.json.tpl +53 -0
- package/templates/module/base/rolldown.config.ts.tpl +14 -0
- package/templates/module/base/tests/__KEBAB__.test.ts.tpl +39 -0
- package/templates/module/base/tsconfig.json.tpl +42 -0
- package/templates/module/base/vitest.config.ts.tpl +27 -0
- package/templates/module/packages/CLAUDE.md.tpl +51 -0
- package/templates/module/packages/MEMORY.md.tpl +39 -0
- package/templates/module/packages/tsconfig.declarations.json.tpl +19 -0
- package/templates/module/packages/tsconfig.tests.json.tpl +11 -0
- package/templates/module/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +14 -0
- package/templates/module/service/nodefony/interfaces/index.ts.tpl +1 -0
- package/templates/module/service/nodefony/service/__PASCAL__Service.ts.tpl +116 -0
- package/templates/service/nodefony/interfaces/I__PASCAL__Service.ts.tpl +19 -0
- package/templates/service/nodefony/service/__PASCAL__Service.ts.tpl +136 -0
- package/templates/service/tests/__PASCAL__Service.test.ts.tpl +53 -0
- package/templates/shared/front-entry/angular/frontend/src/main.ts.tpl +17 -0
- package/templates/shared/front-entry/react/frontend/src/main.tsx.tpl +11 -0
- package/templates/shared/front-entry/svelte/frontend/src/main.ts.tpl +13 -0
- package/templates/shared/front-entry/vue/frontend/src/main.ts.tpl +12 -0
- package/templates/shared/front-registrar/nodefony/frontend/register__PASCAL__Entry.ts.tpl +40 -0
- package/templates/shared/front-shell/frontend/index.html.tpl +39 -0
- package/templates/shared/ng-app-tsconfig/frontend/tsconfig.app.json.tpl +18 -0
- package/templates/shared/svelte-shim/frontend/src/env.d.ts.tpl +12 -0
- package/templates/shared/vue-shim/frontend/src/env.d.ts.tpl +15 -0
- package/.yarnclean +0 -45
- package/CHANGELOG.md +0 -406
- package/autoloader.es6 +0 -253
- package/builder.es6 +0 -366
- package/cli/builder/bundles/bundle.js +0 -328
- package/cli/builder/bundles/controller.js +0 -73
- package/cli/builder/bundles/users-bundle/.yarnclean +0 -45
- package/cli/builder/bundles/users-bundle/Command/fixtureTask.js +0 -47
- package/cli/builder/bundles/users-bundle/Command/usersCommand.js +0 -105
- package/cli/builder/bundles/users-bundle/Entity/mongoose/userEntity.js +0 -168
- package/cli/builder/bundles/users-bundle/Entity/sequelize/userEntity.js +0 -231
- package/cli/builder/bundles/users-bundle/Fixtures/users.js +0 -117
- package/cli/builder/bundles/users-bundle/Fixtures/usersFixtures.js +0 -114
- package/cli/builder/bundles/users-bundle/Resources/config/config.js +0 -90
- package/cli/builder/bundles/users-bundle/Resources/config/routing.js +0 -17
- package/cli/builder/bundles/users-bundle/Resources/config/security.js +0 -96
- package/cli/builder/bundles/users-bundle/Resources/config/services.js +0 -7
- package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.dev.config.js +0 -13
- package/cli/builder/bundles/users-bundle/Resources/config/webpack/webpack.prod.config.js +0 -31
- package/cli/builder/bundles/users-bundle/Resources/config/webpack.config.js +0 -146
- package/cli/builder/bundles/users-bundle/Resources/js/users.js +0 -153
- package/cli/builder/bundles/users-bundle/Resources/public/favicon.ico +0 -0
- package/cli/builder/bundles/users-bundle/Resources/public/images/users-logo.png +0 -0
- package/cli/builder/bundles/users-bundle/Resources/scss/awesome/font-awesome.config.js +0 -11
- package/cli/builder/bundles/users-bundle/Resources/scss/custom.scss +0 -23
- package/cli/builder/bundles/users-bundle/Resources/scss/users.scss +0 -59
- package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/login.js +0 -235
- package/cli/builder/bundles/users-bundle/Resources/swagger/openapi/users.js +0 -232
- package/cli/builder/bundles/users-bundle/Resources/translations/login.en_en.yml +0 -14
- package/cli/builder/bundles/users-bundle/Resources/translations/login.fr_fr.yml +0 -14
- package/cli/builder/bundles/users-bundle/Resources/translations/users.en_en.yml +0 -35
- package/cli/builder/bundles/users-bundle/Resources/translations/users.fr_fr.yml +0 -36
- package/cli/builder/bundles/users-bundle/Resources/views/base.html.twig +0 -32
- package/cli/builder/bundles/users-bundle/Resources/views/footer.html.twig +0 -7
- package/cli/builder/bundles/users-bundle/Resources/views/header.html.twig +0 -90
- package/cli/builder/bundles/users-bundle/Resources/views/login/login.html.twig +0 -43
- package/cli/builder/bundles/users-bundle/Resources/views/users/createUser.html.twig +0 -296
- package/cli/builder/bundles/users-bundle/Resources/views/users/readUsers.html.twig +0 -94
- package/cli/builder/bundles/users-bundle/controller/api/graphql/graphqlController.js +0 -56
- package/cli/builder/bundles/users-bundle/controller/api/graphql/userResolver.js +0 -121
- package/cli/builder/bundles/users-bundle/controller/api/graphql/usertype.js +0 -58
- package/cli/builder/bundles/users-bundle/controller/api/openapi/loginApiController.js +0 -210
- package/cli/builder/bundles/users-bundle/controller/api/openapi/restUserController.js +0 -244
- package/cli/builder/bundles/users-bundle/controller/loginController.js +0 -91
- package/cli/builder/bundles/users-bundle/controller/usersController.js +0 -332
- package/cli/builder/bundles/users-bundle/package.json +0 -58
- package/cli/builder/bundles/users-bundle/readme.md +0 -360
- package/cli/builder/bundles/users-bundle/services/usersService.js +0 -411
- package/cli/builder/bundles/users-bundle/src/providers/mongoose/userProvider.js +0 -47
- package/cli/builder/bundles/users-bundle/src/providers/sequelize/userProvider.js +0 -48
- package/cli/builder/bundles/users-bundle/tests/loginTest.js +0 -182
- package/cli/builder/bundles/users-bundle/usersBundle.js +0 -26
- package/cli/builder/microService/microService.js +0 -261
- package/cli/builder/microService/skeletons/.editorconfig +0 -18
- package/cli/builder/microService/skeletons/.env-cmdrc.js +0 -32
- package/cli/builder/microService/skeletons/.jshintrc +0 -37
- package/cli/builder/microService/skeletons/README.md +0 -117
- package/cli/builder/microService/skeletons/bin/bash/hello.sh +0 -5
- package/cli/builder/microService/skeletons/bin/cli +0 -13
- package/cli/builder/microService/skeletons/bin/python/hello.py +0 -20
- package/cli/builder/microService/skeletons/config/config.js +0 -29
- package/cli/builder/microService/skeletons/config/pm2.config.js +0 -72
- package/cli/builder/microService/skeletons/config/webpack/webpack.config.dev.js +0 -8
- package/cli/builder/microService/skeletons/config/webpack/webpack.config.prod.js +0 -25
- package/cli/builder/microService/skeletons/config/webpack.config.js +0 -114
- package/cli/builder/microService/skeletons/package.json +0 -76
- package/cli/builder/microService/skeletons/src/browser/index.css +0 -3
- package/cli/builder/microService/skeletons/src/browser/index.js +0 -16
- package/cli/builder/microService/skeletons/src/browser/socketio.js +0 -46
- package/cli/builder/microService/skeletons/src/cli/cli.js +0 -224
- package/cli/builder/microService/skeletons/src/cli/menu.js +0 -28
- package/cli/builder/microService/skeletons/src/n-api/README.md +0 -1
- package/cli/builder/microService/skeletons/src/n-api/binding.gyp +0 -14
- package/cli/builder/microService/skeletons/src/n-api/hello.cc +0 -14
- package/cli/builder/microService/skeletons/src/n-api/hello.js +0 -23
- package/cli/builder/microService/skeletons/src/n-api/package.json +0 -15
- package/cli/builder/microService/skeletons/src/node/examples/index.js +0 -120
- package/cli/builder/microService/skeletons/src/node/index.js +0 -102
- package/cli/builder/microService/skeletons/src/node/services/markdown/markdown.js +0 -27
- package/cli/builder/microService/skeletons/src/node/services/servers/http.js +0 -45
- package/cli/builder/microService/skeletons/src/node/services/servers/https.js +0 -44
- package/cli/builder/microService/skeletons/src/node/services/socketio/socketio.js +0 -46
- package/cli/builder/microService/skeletons/src/node/services/syscall/syscall.js +0 -111
- package/cli/builder/microService/skeletons/src/node/services/worker/thread.js +0 -59
- package/cli/builder/microService/skeletons/src/node/services/worker/worker.js +0 -60
- package/cli/builder/microService/skeletons/src/templates/base.html +0 -12
- package/cli/builder/microService/skeletons/src/templates/socket.html +0 -23
- package/cli/builder/microService/skeletons/tests/unit/serviceTest.js +0 -30
- package/cli/builder/project/project.js +0 -474
- package/cli/builder/project/skeletons/README.md +0 -778
- package/cli/builder/project/skeletons/bin/dev-deploy.sh +0 -5
- package/cli/builder/project/skeletons/bin/generateCertificates.sh.skeleton +0 -180
- package/cli/builder/project/skeletons/bin/prod-deploy.sh +0 -3
- package/cli/builder/project/skeletons/config/config.js.skeleton +0 -178
- package/cli/builder/project/skeletons/config/openssl/ca/openssl.cnf.skeleton +0 -150
- package/cli/builder/project/skeletons/config/openssl/ca_intermediate/openssl.cnf.skeleton +0 -152
- package/cli/builder/project/skeletons/config/pm2.config.js.skeleton +0 -62
- package/cli/builder/project/skeletons/documentation.html.twig +0 -24
- package/cli/builder/project/skeletons/editorconfig.skeleton +0 -18
- package/cli/builder/project/skeletons/eslintignore.skeleton +0 -15
- package/cli/builder/project/skeletons/eslintrc.js.skeleton +0 -97
- package/cli/builder/project/skeletons/gitignore.skeleton +0 -32
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.37.entity-user.js +0 -137
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.38.entity-session.js +0 -97
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.39.entity-requests.js +0 -115
- package/cli/builder/project/skeletons/migrations/2022.12.25T17.37.40.entity-jwts.js +0 -97
- package/cli/builder/project/skeletons/migrations/migrations.skeleton.js +0 -101
- package/cli/builder/project/skeletons/package.json.twig +0 -71
- package/cli/builder/react/reactBuilder.js +0 -224
- package/cli/builder/react/skeletons/app/Resources/databases/nodefony.db +0 -0
- package/cli/builder/react/skeletons/app/Resources/translations/messages.en_en.yml +0 -5
- package/cli/builder/react/skeletons/app/Resources/translations/messages.fr_fr.yml +0 -5
- package/cli/builder/react/skeletons/app/Resources/views/base.html.twig +0 -33
- package/cli/builder/react/skeletons/app/config/config.js +0 -392
- package/cli/builder/react/skeletons/app/config/routing.js +0 -10
- package/cli/builder/react/skeletons/app/config/security.js +0 -74
- package/cli/builder/react/skeletons/app/controller/appController.js +0 -22
- package/cli/builder/sandbox/sandBoxBuilder.js +0 -610
- package/cli/builder/sandbox/skeletons/Resources/css/entry.css +0 -48
- package/cli/builder/sandbox/skeletons/Resources/js/entry.js +0 -60
- package/cli/builder/sandbox/skeletons/Resources/public/manifest.json +0 -32
- package/cli/builder/sandbox/skeletons/Resources/translations/messages.en_en.yml +0 -5
- package/cli/builder/sandbox/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
- package/cli/builder/sandbox/skeletons/Resources/views/base.html.twig +0 -46
- package/cli/builder/sandbox/skeletons/Resources/views/index.html.twig +0 -34
- package/cli/builder/sandbox/skeletons/bootstrap/custom.scss +0 -27
- package/cli/builder/sandbox/skeletons/bootstrap/entry.scss +0 -60
- package/cli/builder/sandbox/skeletons/workbox/templates/index.html.twig +0 -32
- package/cli/builder/sandbox/skeletons/workbox/workers/service-worker.js +0 -196
- package/cli/builder/skeletons/Resources/public/favicon.ico +0 -0
- package/cli/builder/skeletons/Resources/public/images/app-logo.png +0 -0
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/401.json.twig +0 -24
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/403.json.twig +0 -20
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/404.json.twig +0 -20
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/500.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/base.html.twig +0 -30
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/exception.json.twig +0 -24
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/footer.html.twig +0 -33
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/header.html.twig +0 -6
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.html.twig +0 -6
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/index.json.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.html.twig +0 -125
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/layout.json.twig +0 -5
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.html.twig +0 -1
- package/cli/builder/skeletons/Resources/views/framework-bundle/views/timeout.json.twig +0 -24
- package/cli/builder/skeletons/app/appKernel.js +0 -133
- package/cli/builder/skeletons/binding/binding.cc +0 -26
- package/cli/builder/skeletons/binding/binding.skeleton +0 -8
- package/cli/builder/skeletons/bundle/bundleClass.js +0 -37
- package/cli/builder/skeletons/command/commandClass.js +0 -11
- package/cli/builder/skeletons/command/taskClass.js +0 -20
- package/cli/builder/skeletons/config/config.js +0 -138
- package/cli/builder/skeletons/config/nodefony/elastic-bundle.js +0 -37
- package/cli/builder/skeletons/config/nodefony/framework-bundle.js +0 -22
- package/cli/builder/skeletons/config/nodefony/http-bundle.js +0 -104
- package/cli/builder/skeletons/config/nodefony/mail-bundle.js +0 -44
- package/cli/builder/skeletons/config/nodefony/mongoose-bundle.js +0 -51
- package/cli/builder/skeletons/config/nodefony/monitoring-bundle.js +0 -34
- package/cli/builder/skeletons/config/nodefony/realtime-bundle.js +0 -15
- package/cli/builder/skeletons/config/nodefony/redis-bundle.js +0 -44
- package/cli/builder/skeletons/config/nodefony/security-bundle.js +0 -25
- package/cli/builder/skeletons/config/nodefony/sequelize-bundle.js +0 -156
- package/cli/builder/skeletons/config/routing.js +0 -55
- package/cli/builder/skeletons/config/security.js +0 -102
- package/cli/builder/skeletons/config/services.js +0 -1
- package/cli/builder/skeletons/config/webpack/webpack.dev.config.js +0 -13
- package/cli/builder/skeletons/config/webpack/webpack.prod.config.js +0 -20
- package/cli/builder/skeletons/config/webpack.config.js +0 -148
- package/cli/builder/skeletons/controller/controllerClass.js +0 -75
- package/cli/builder/skeletons/package.json.twig +0 -57
- package/cli/builder/skeletons/unittest/testFile.js +0 -46
- package/cli/builder/vue/skeletons/Resources/public/images/app-logo.png +0 -0
- package/cli/builder/vue/skeletons/Resources/translations/messages.en_en.yml +0 -5
- package/cli/builder/vue/skeletons/Resources/translations/messages.fr_fr.yml +0 -5
- package/cli/builder/vue/skeletons/vue.config.js +0 -129
- package/cli/builder/vue/vueBuilder.js +0 -410
- package/cli/generate/generate.es6 +0 -103
- package/cli/install/install.js +0 -190
- package/cli/sequelize/sequelize.js +0 -94
- package/cli/start.js +0 -702
- package/cli/tools/pm2.es6 +0 -112
- package/cli/tools/tools.es6 +0 -97
- package/cli.es6 +0 -925
- package/container.es6 +0 -272
- package/error.es6 +0 -293
- package/fileClass.es6 +0 -242
- package/finder/file.es6 +0 -33
- package/finder/fileResult.es6 +0 -138
- package/finder/finder2.es6 +0 -275
- package/finder.es6 +0 -427
- package/kernel/annotations/annotations.es6 +0 -286
- package/kernel/api/api.es6 +0 -61
- package/kernel/api/graphqlApi.es6 +0 -107
- package/kernel/api/jsonApi.es6 +0 -177
- package/kernel/api/openApi.es6 +0 -139
- package/kernel/api/schemas/openApiSchema.js +0 -394
- package/kernel/babylon.es6 +0 -162
- package/kernel/bundle.es6 +0 -1200
- package/kernel/cliKernel.es6 +0 -869
- package/kernel/command.es6 +0 -78
- package/kernel/commands/nodefonyCommand.es6 +0 -247
- package/kernel/commands/tasks/bundlesTask.es6 +0 -59
- package/kernel/controllers/controller.es6 +0 -791
- package/kernel/fixture.es6 +0 -19
- package/kernel/injections/injections.es6 +0 -424
- package/kernel/kernel.es6 +0 -1960
- package/kernel/kernelWatcher.es6 +0 -387
- package/kernel/orm/entity.es6 +0 -59
- package/kernel/orm/orm.es6 +0 -139
- package/kernel/reader.es6 +0 -290
- package/kernel/security/encoder.es6 +0 -17
- package/kernel/security/factories/factory.es6 +0 -111
- package/kernel/security/factories/passeportFactory.es6 +0 -61
- package/kernel/security/provider.es6 +0 -58
- package/kernel/security/providers/chainProvider.es6 +0 -99
- package/kernel/security/providers/memoryProvider.es6 +0 -55
- package/kernel/security/providers/providerManager.es6 +0 -67
- package/kernel/security/providers/userEntityProvider.es6 +0 -50
- package/kernel/security/role.es6 +0 -12
- package/kernel/security/secureArea.es6 +0 -431
- package/kernel/security/tokens/token.es6 +0 -171
- package/kernel/security/user.es6 +0 -106
- package/kernel/serviceRealTime.es6 +0 -21
- package/kernel/services/connectionsService.es6 +0 -93
- package/kernel/services/cron/cronService.es6 +0 -123
- package/kernel/task.es6 +0 -80
- package/kernel/templates.es6 +0 -22
- package/kernel/templating/twig.es6 +0 -218
- package/kernel/tests/cliTest.js +0 -59
- package/kernel/tests/containerTest.js +0 -232
- package/kernel/tests/kernelTest.js +0 -39
- package/nodefony.es6 +0 -1084
- package/notificationsCenter.es6 +0 -118
- package/protocol.es6 +0 -86
- package/protocols/bayeux.es6 +0 -174
- package/protocols/jsonRpc/jsonrpc.es6 +0 -56
- package/result.es6 +0 -99
- package/service.es6 +0 -288
- package/syslog/pdu.es6 +0 -141
- package/syslog/syslog.es6 +0 -754
- package/watcher.es6 +0 -113
package/docs/kernel.md
ADDED
|
@@ -0,0 +1,670 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Kernel, Module et CliKernel — l'API du cœur"
|
|
3
|
+
navTitle: Kernel, Module et CliKernel
|
|
4
|
+
lang: fr
|
|
5
|
+
module: "@nodefony/core"
|
|
6
|
+
topic: kernel
|
|
7
|
+
coverageModule: nodefony-core
|
|
8
|
+
coveragePackage: "nodefony (cœur)"
|
|
9
|
+
coverageFiles: "kernel/Kernel.ts,kernel/Module.ts,kernel/CliKernel.ts,Nodefony.ts"
|
|
10
|
+
section: "Cœur runtime"
|
|
11
|
+
audience: [developer]
|
|
12
|
+
tags:
|
|
13
|
+
[kernel, module, clikernel, nodefony, evenements, commandes, di, application]
|
|
14
|
+
version: "doc"
|
|
15
|
+
status: stable
|
|
16
|
+
updated: 2026-07-19
|
|
17
|
+
source: "src/nodefony/docs/kernel.md"
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Kernel, Module et CliKernel — l'API du cœur
|
|
21
|
+
|
|
22
|
+
> Trois classes suffisent à écrire une application Nodefony : `Module` (ce que **tu** écris),
|
|
23
|
+
> `Kernel` (ce qui te **porte**), `Nodefony` (la façade qui te rend le kernel depuis n'importe où).
|
|
24
|
+
> Cette page est leur **surface d'API** — les objets, leurs membres, comment on s'en sert. Le
|
|
25
|
+
> **récit du boot** (phases, ordre, résilience, arrêt) vit dans une page dédiée, liée plus bas.
|
|
26
|
+
> Ancré sur `src/nodefony/src/kernel/` et `src/nodefony/src/Nodefony.ts`.
|
|
27
|
+
|
|
28
|
+
📍 [Documentation](../../../docs/index.md) › [Cœur — @nodefony/core](index.md) › **Kernel, Module et CliKernel**
|
|
29
|
+
|
|
30
|
+
## 🧠 Le modèle mental — qui possède quoi
|
|
31
|
+
|
|
32
|
+
Le cœur tient en une phrase : **le `CliKernel` fabrique un `Kernel`, le `Kernel` possède des
|
|
33
|
+
`Module`, et la façade `Nodefony` sert de raccourci vers le kernel courant.**
|
|
34
|
+
|
|
35
|
+
```mermaid
|
|
36
|
+
flowchart TB
|
|
37
|
+
CLI["CliKernel<br/>extends Cli — PAS Kernel"]
|
|
38
|
+
N["Nodefony<br/>façade statique"]
|
|
39
|
+
K["Kernel<br/>extends Service"]
|
|
40
|
+
APP["Module de l'app<br/>extends Service"]
|
|
41
|
+
MODS["Modules du manifeste<br/>http · framework · security…"]
|
|
42
|
+
S["Services · Controllers · Commandes CLI"]
|
|
43
|
+
CLI -->|"start() → new Kernel(env, this)"| K
|
|
44
|
+
K -->|"setKernel(this) au constructeur"| N
|
|
45
|
+
N -.->|"getKernel() — depuis n'importe où"| K
|
|
46
|
+
K -->|"charge et possède"| APP
|
|
47
|
+
K --> MODS
|
|
48
|
+
APP -->|"@services · addCommand · controllers"| S
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Trois idées portent toute la page :
|
|
52
|
+
|
|
53
|
+
1. **Un module est un `Service`.** Il hérite du container, du journal et du bus d'événements — il
|
|
54
|
+
n'a rien à recâbler, seulement à déclarer ce qu'il apporte.
|
|
55
|
+
2. **Le kernel n'est jamais importé, il est demandé.** Aucun `import { kernel }` : on passe par
|
|
56
|
+
l'injection quand elle est disponible, par `Nodefony.getKernel()` quand elle ne l'est pas.
|
|
57
|
+
3. **Écrire un module, c'est remplir des seams.** Un constructeur à quatre arguments, des hooks
|
|
58
|
+
nommés, un décorateur pour les services. Rien à découvrir, rien à deviner.
|
|
59
|
+
|
|
60
|
+
## 📖 Lexique
|
|
61
|
+
|
|
62
|
+
| Terme | Sens |
|
|
63
|
+
| --------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
64
|
+
| Façade statique | Une classe sans instance dont on n'appelle que les membres `static` (`Nodefony.getKernel()`). |
|
|
65
|
+
| Kernel | Le noyau : container racine, registre des modules, émetteur des phases, chemins de travail. |
|
|
66
|
+
| Module | Unité chargeable qui apporte services, controllers, routes, entités, commandes. **L'app en est un.** |
|
|
67
|
+
| CliKernel | Le point d'entrée en ligne de commande. Il **fabrique** le kernel, il n'en est pas un. |
|
|
68
|
+
| Manifeste | La liste `modules` de `nodefony.config.ts` — ordonnée, c'est elle qui décide ce qui est chargé. |
|
|
69
|
+
| Hook | Une méthode de ton module appelée à une phase précise (`onKernelRegister`, `onKernelBoot`, …). |
|
|
70
|
+
| Seam | Un point d'extension prévu par le framework : on le remplit, on ne le contourne pas. |
|
|
71
|
+
| DI / Container | Injection de dépendances : l'annuaire nom → instance, hérité de `Service`. |
|
|
72
|
+
| Bus d'événements | L'`EventEmitter` étendu du cœur. Le kernel s'en sert pour annoncer ses phases. |
|
|
73
|
+
| Émission synchrone | `fire()` : les écouteurs tournent immédiatement, aucun `await`, **0 microtask**. |
|
|
74
|
+
| Émission séquentielle | `fireAsync()` : les écouteurs asynchrones sont attendus **l'un après l'autre**. |
|
|
75
|
+
| Émission gardée | `fireLifecycle()` : chaque écouteur est isolé (try/catch + délai maximal). Réservée au boot. |
|
|
76
|
+
| Listener tagué | Un écouteur portant son propriétaire et sa criticité — posé par le câblage des hooks de module. |
|
|
77
|
+
| Criticité | `Module.critical` : un module critique qui échoue **arrête** le boot en production. |
|
|
78
|
+
| Fail-soft | Un échec non fatal : consigné, annoncé au verdict de boot, mais le boot continue. |
|
|
79
|
+
| `runProfile` | Ce dont un run a besoin : `{ servers, lifetime, interactive }`. Un `build` n'ouvre aucun port. |
|
|
80
|
+
| Commande de module | Une commande CLI apportée par un module (`frontend:build`), par opposition aux commandes intégrées. |
|
|
81
|
+
| `msgid` | La catégorie d'une ligne de journal. Un module la remplit avec `MODULE <son nom>`. |
|
|
82
|
+
|
|
83
|
+
## Qu'est-ce que le cœur — et pourquoi une façade plutôt qu'un singleton
|
|
84
|
+
|
|
85
|
+
Un framework doit répondre à une question banale : **« comment mon code atteint-il le
|
|
86
|
+
framework ? »** La réponse historique de Nodefony, héritée de sa version JavaScript, était un objet
|
|
87
|
+
exporté : `import { kernel } from "nodefony"`.
|
|
88
|
+
|
|
89
|
+
Cette réponse ne tient pas en ESM. Un `import` est résolu au **chargement** du fichier, alors que le
|
|
90
|
+
kernel n'existe qu'après avoir été **construit**. Les fichiers importés tôt recevaient donc un
|
|
91
|
+
kernel non initialisé, et l'erreur ne se voyait qu'au runtime, loin de sa cause.
|
|
92
|
+
|
|
93
|
+
D'où la bascule vers une **façade statique**. `Nodefony` n'est jamais instanciée — constructeur
|
|
94
|
+
privé (`Nodefony.ts:27`) — et n'expose que des membres `static`. On ne demande plus le kernel au
|
|
95
|
+
chargement : on le demande **au moment de s'en servir**, quand il existe.
|
|
96
|
+
|
|
97
|
+
> [!IMPORTANT]
|
|
98
|
+
> `Nodefony.getKernel()` (`Nodefony.ts:34`) rend `Kernel | **null**`. Le `null` n'est pas
|
|
99
|
+
> théorique : hors serveur — dans un test unitaire, un script, un fichier importé avant le boot —
|
|
100
|
+
> il n'y a pas de kernel. Toujours `?.`, jamais un `!`.
|
|
101
|
+
|
|
102
|
+
## La vision Nodefony
|
|
103
|
+
|
|
104
|
+
Trois décisions expliquent la forme de l'API.
|
|
105
|
+
|
|
106
|
+
**1. Tout hérite de `Service`.** `Kernel` et `Module` en descendent tous les deux. Un module reçoit
|
|
107
|
+
donc gratuitement `this.log()`, `this.get()`, `this.on()`, `this.fire()` — le socle est décrit dans
|
|
108
|
+
[Service](service.md), et cette page ne le répète pas. Écrire un module, c'est écrire un service qui
|
|
109
|
+
sait en plus se charger et s'accrocher au cycle de vie.
|
|
110
|
+
|
|
111
|
+
**2. Le kernel s'enregistre lui-même, une fois.** Son constructeur (`Kernel.ts:489`) appelle
|
|
112
|
+
`Nodefony.setKernel(this)` (`Kernel.ts:629`) et se pose au container sous la clé `kernel`
|
|
113
|
+
(`Kernel.ts:629`). Deux chemins d'accès, une seule instance — l'injection pour le code câblé, la
|
|
114
|
+
façade pour le reste.
|
|
115
|
+
|
|
116
|
+
**3. Le CLI n'est pas le noyau.** `CliKernel` (`CliKernel.ts:84`) étend `Cli`, **pas** `Kernel` : il
|
|
117
|
+
analyse `argv`, choisit une commande, puis **construit** le kernel (`CliKernel.ts:238`). Séparation
|
|
118
|
+
utile — beaucoup d'invocations (`--version`, la complétion, `nodefony create`) n'ont aucun kernel à
|
|
119
|
+
démarrer, et n'en démarrent effectivement aucun.
|
|
120
|
+
|
|
121
|
+
Le compromis assumé : la surface publique du `Kernel` est **large** (registre de modules, chemins,
|
|
122
|
+
config, réseau, cluster, verdict de boot). C'est le prix d'un noyau qui centralise ; en contrepartie,
|
|
123
|
+
une application n'en touche qu'une petite partie — celle décrite plus bas.
|
|
124
|
+
|
|
125
|
+
## 🚀 Démarrage rapide
|
|
126
|
+
|
|
127
|
+
Vue depuis une application générée par `nodefony create app`. Objectif : **un module complet**, avec
|
|
128
|
+
sa configuration typée, un service et une commande CLI.
|
|
129
|
+
|
|
130
|
+
### Le module, de bout en bout
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
// nodefony/modules/billing/index.ts — un module d'app, complet.
|
|
134
|
+
import { Module, Service, Command, injectable, services } from "nodefony";
|
|
135
|
+
import type { CliKernel, Container, Event, Kernel } from "nodefony";
|
|
136
|
+
|
|
137
|
+
// Ce que MON module accepte comme configuration.
|
|
138
|
+
// ⚠️ Un `type`, PAS une `interface` — voir la section Pièges : `@services()`
|
|
139
|
+
// exige une forme assignable à `Record<string, unknown>`.
|
|
140
|
+
type IBillingConfig = {
|
|
141
|
+
currency: string;
|
|
142
|
+
vatRate: number;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
// `@injectable("invoices")` inscrit la CLASSE au registre DI sous ce nom.
|
|
146
|
+
@injectable("invoices")
|
|
147
|
+
class InvoiceService extends Service {
|
|
148
|
+
// Le module porteur transmet SES ressources : même container, MÊME bus.
|
|
149
|
+
constructor(module: Module) {
|
|
150
|
+
super(
|
|
151
|
+
"invoices",
|
|
152
|
+
module.container as Container,
|
|
153
|
+
module.notificationsCenter as Event,
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
totalTTC(amountHT: number, cfg: IBillingConfig): number {
|
|
158
|
+
return Math.round(amountHT * (1 + cfg.vatRate) * 100) / 100;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Une commande CLI apportée par le module : `npx nodefony billing:report`.
|
|
163
|
+
class BillingReportCommand extends Command {
|
|
164
|
+
constructor(cli: CliKernel) {
|
|
165
|
+
// `kernelEvent` = la phase APRÈS laquelle `generate()` est appelé.
|
|
166
|
+
super("billing:report", "Édite le rapport de facturation", cli, {
|
|
167
|
+
kernelEvent: "onPostReady",
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
override async generate(): Promise<void> {
|
|
172
|
+
this.log("rapport édité", "INFO");
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// `Module<IBillingConfig>` type `this.config` — plus aucun cast au point d'usage.
|
|
177
|
+
@services([InvoiceService])
|
|
178
|
+
class Billing extends Module<IBillingConfig> {
|
|
179
|
+
// Module optionnel : son échec n'abat pas le pod en production.
|
|
180
|
+
static override critical = false;
|
|
181
|
+
|
|
182
|
+
constructor(kernel: Kernel) {
|
|
183
|
+
// 4 arguments, toujours les mêmes : nom · kernel · emplacement · config.
|
|
184
|
+
super("billing", kernel, import.meta.url, {
|
|
185
|
+
currency: "EUR",
|
|
186
|
+
vatRate: 0.2,
|
|
187
|
+
});
|
|
188
|
+
// Les commandes se posent DANS le constructeur : le CLI doit les connaître
|
|
189
|
+
// avant même que les phases ne commencent.
|
|
190
|
+
this.addCommand(BillingReportCommand);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
override async onKernelBoot(): Promise<this> {
|
|
194
|
+
// `this.config` est typé IBillingConfig ; `this.get` interroge le container.
|
|
195
|
+
const invoices = this.get<InvoiceService>("invoices");
|
|
196
|
+
const ttc = invoices?.totalTTC(100, this.config);
|
|
197
|
+
this.log(`100 HT → ${ttc} ${this.config.currency}`, "INFO");
|
|
198
|
+
return this;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
export default Billing;
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Le déclarer — un module non déclaré n'existe pas
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
// nodefony.config.ts — le manifeste est ORDONNÉ : c'est la priorité de chargement.
|
|
209
|
+
export default defineConfig(() => ({
|
|
210
|
+
modules: [
|
|
211
|
+
"@nodefony/http",
|
|
212
|
+
"@nodefony/framework",
|
|
213
|
+
// `use()` colocalise la config du module avec son chargement : elle écrase
|
|
214
|
+
// les défauts posés dans le constructeur ci-dessus.
|
|
215
|
+
use("@app/billing", { currency: "EUR", vatRate: 0.055 }),
|
|
216
|
+
],
|
|
217
|
+
}));
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Atteindre le kernel là où l'injection ne va pas
|
|
221
|
+
|
|
222
|
+
```typescript
|
|
223
|
+
// nodefony/services/DiagnosticService.ts — la façade, en dernier recours.
|
|
224
|
+
import { Nodefony, Service } from "nodefony";
|
|
225
|
+
|
|
226
|
+
export class DiagnosticService extends Service {
|
|
227
|
+
snapshot(): { version: string; env: string; modules: string[] } {
|
|
228
|
+
// `getKernel()` rend `Kernel | null` : le `?.` n'est pas décoratif —
|
|
229
|
+
// hors serveur (test, script, import précoce) il n'y a pas de kernel.
|
|
230
|
+
const kernel = Nodefony.getKernel();
|
|
231
|
+
return {
|
|
232
|
+
version: Nodefony.version,
|
|
233
|
+
env: kernel?.environment ?? "(hors kernel)",
|
|
234
|
+
modules: Object.keys(kernel?.getModules() ?? {}),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Ce qu'on observe
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
npx nodefony development
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
```text
|
|
247
|
+
MODULE ADD : billing
|
|
248
|
+
SERVICE ADD : invoices # Module.addService a posé l'instance
|
|
249
|
+
MODULE billing 100 HT → 105.5 EUR # msgid = « MODULE <nom> », automatique
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Le `msgid` de la dernière ligne est `MODULE billing` sans qu'on l'ait écrit : `Module.log()`
|
|
253
|
+
(`Module.ts:651`) le remplit par défaut, là où un `Service` nu emploie son seul nom. Le taux appliqué
|
|
254
|
+
est **0.055** et non 0.2 — la config du manifeste a écrasé le défaut du constructeur.
|
|
255
|
+
|
|
256
|
+
Et la commande est là :
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
npx nodefony billing:report # elle n'existe QUE parce que le module l'a posée
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## 🧩 Écrire un module — le geste central
|
|
263
|
+
|
|
264
|
+
### Le constructeur — quatre arguments, aucun mystère
|
|
265
|
+
|
|
266
|
+
`Module` (`Module.ts:60`) impose la même signature à tout le monde (`Module.ts:102`) :
|
|
267
|
+
|
|
268
|
+
| Argument | Rôle |
|
|
269
|
+
| --------- | ------------------------------------------------------------------------------------------ |
|
|
270
|
+
| `name` | Clé du module dans `kernel.modules`, et préfixe de ses logs. Court, sans espace. |
|
|
271
|
+
| `kernel` | Le kernel porteur — il fournit container, journal et bus. Reçu, jamais cherché. |
|
|
272
|
+
| `path` | **Toujours `import.meta.url`.** Normalisé par `Module.setPath()` (`Module.ts:163`). |
|
|
273
|
+
| `options` | Les **défauts** de ta configuration. Le manifeste et l'environnement les écrasent ensuite. |
|
|
274
|
+
|
|
275
|
+
Le constructeur fait trois choses et rien d'autre : il range les options dans l'arbre de paramètres
|
|
276
|
+
sous `modules.<nom>`, il résout le chemin, puis il câble les hooks via `Module.setEvents()`
|
|
277
|
+
(`Module.ts:227`).
|
|
278
|
+
|
|
279
|
+
> [!TIP]
|
|
280
|
+
> `path` mérite son `import.meta.url` littéral. `setPath()` remonte au-dessus d'un dossier `dist/`
|
|
281
|
+
> quand il en détecte un (`Module.ts:169`) — c'est ce qui fait qu'un module trouve ses fichiers
|
|
282
|
+
> aussi bien depuis les sources que depuis son paquet publié.
|
|
283
|
+
|
|
284
|
+
### Les hooks — trois noms, exactement
|
|
285
|
+
|
|
286
|
+
`setEvents()` n'attache un écouteur que si la méthode **existe** sur ton prototype : aucun listener
|
|
287
|
+
orphelin pour un hook que tu n'écris pas.
|
|
288
|
+
|
|
289
|
+
| Hook | Ce qui est garanti à ce moment | On y met… |
|
|
290
|
+
| -------------------- | ---------------------------------------------------------- | --------------------------------------------- |
|
|
291
|
+
| `onKernelRegister()` | tous les modules sont instanciés, surcharges appliquées | valider sa config, déclarer entités et routes |
|
|
292
|
+
| `onKernelBoot()` | les services de `@services([…])` sont construits | ouvrir ses connexions, armer ses timers |
|
|
293
|
+
| `onKernelReady()` | **tous** les modules sont bootés, ports pas encore ouverts | se câbler aux autres modules |
|
|
294
|
+
| `init(kernel?)` | le module vient d'être ajouté au kernel | l'équivalent d'un constructeur asynchrone |
|
|
295
|
+
|
|
296
|
+
Le moment exact de chaque phase, ce qui devient vrai entre deux, et la politique appliquée quand un
|
|
297
|
+
hook échoue : [Cycle de boot](../../../docs/architecture/cycle-boot-kernel.md).
|
|
298
|
+
|
|
299
|
+
> [!WARNING]
|
|
300
|
+
> Un hook **doit être une méthode de prototype**. Écrit en propriété fléchée
|
|
301
|
+
> (`onKernelBoot = async () => {}`), il n'existe pas encore quand `setEvents()` s'exécute depuis le
|
|
302
|
+
> constructeur de `Module` — l'écouteur n'est jamais attaché, et **rien ne le signale**. Même
|
|
303
|
+
> conséquence pour un nom approximatif (`onBoot`, `onKernelBooted`) : `setEvents()` teste ces trois
|
|
304
|
+
> noms-là et pas d'autres.
|
|
305
|
+
|
|
306
|
+
### Sa configuration — `this.config`, typée
|
|
307
|
+
|
|
308
|
+
Déclare le type en paramètre de la classe et l'accès devient typé partout :
|
|
309
|
+
|
|
310
|
+
```typescript ignore
|
|
311
|
+
class Billing extends Module<IBillingConfig> {}
|
|
312
|
+
// puis, n'importe où dans le module :
|
|
313
|
+
this.config.currency; // string — 0 cast, 0 `as`
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
`Module.config` (`Module.ts:152`) est un getter qui renvoie `this.options` : la config **validée et
|
|
317
|
+
gelée** par le module à sa phase `onKernelRegister`. Coût nul — une référence, aucune allocation.
|
|
318
|
+
|
|
319
|
+
> [!CAUTION]
|
|
320
|
+
> Déclare ce type avec `type`, **jamais** avec `interface`. Le décorateur `@services()` contraint son
|
|
321
|
+
> argument à `new (…) => Module` (`kernelDecorator.ts:21`), soit `Module<Record<string, unknown>>` :
|
|
322
|
+
> or TypeScript n'accorde d'index signature implicite qu'aux **alias de type**, pas aux interfaces.
|
|
323
|
+
> Une `interface IBillingConfig` fait donc échouer la compilation du décorateur, avec un message qui
|
|
324
|
+
> ne pointe pas la vraie cause. C'est la forme employée par les modules du framework, dont les types
|
|
325
|
+
> de config sont des alias dérivés de leur schéma Zod.
|
|
326
|
+
|
|
327
|
+
Un module qui valide sa config par un schéma Zod peut en publier la forme via `Module.configSchema()`
|
|
328
|
+
(`Module.ts:153`). Studio affiche alors des réglages documentés (type, défaut, valeur effective) au
|
|
329
|
+
lieu d'un dépotoir clé/valeur. Le défaut est `null` : rien n'est obligatoire.
|
|
330
|
+
|
|
331
|
+
### Déclarer ses services
|
|
332
|
+
|
|
333
|
+
Deux chemins, un seul recommandé.
|
|
334
|
+
|
|
335
|
+
| Geste | Ancre | Quand |
|
|
336
|
+
| ---------------------------- | --------------- | ----------------------------------------------------------- |
|
|
337
|
+
| `@services([A, B])` | — | **Le cas normal.** Construits à `onPreBoot`, ordre calculé. |
|
|
338
|
+
| `Module.addService(Ctor, …)` | `Module.ts:365` | Ajout conditionnel, décidé à l'exécution. |
|
|
339
|
+
| `Module.loadService(chemin)` | `Module.ts:405` | Service optionnel chargé par `import()` dynamique. |
|
|
340
|
+
| `Module.getServiceNames()` | `Module.ts:445` | Introspection — ce que **ce** module a posé au container. |
|
|
341
|
+
|
|
342
|
+
L'ordre écrit dans `@services([…])` n'a **pas** d'importance : il est recalculé depuis les
|
|
343
|
+
dépendances déclarées. Détail du tri et des portées :
|
|
344
|
+
[Injection & portées](../../../docs/architecture/injection-portees.md).
|
|
345
|
+
|
|
346
|
+
`addService()` fait plus que construire : il initialise le service **sous garde** —
|
|
347
|
+
`Kernel.guardServiceInitialize()` (`Module.ts:350`) —, apprend au registre DI le lien entre la classe
|
|
348
|
+
et sa clé de container, puis range l'instance. C'est
|
|
349
|
+
la raison pour laquelle on ne fait jamais un `new` manuel — un service construit à la main n'est
|
|
350
|
+
connu de personne.
|
|
351
|
+
|
|
352
|
+
> [!CAUTION]
|
|
353
|
+
> `@injectable({ singleton: true })` **n'existe pas**. Les options acceptées sont `{ name?, scope? }`
|
|
354
|
+
> où `scope` vaut `singleton` (défaut) ou `transient` ; une clé `singleton` est **acceptée et
|
|
355
|
+
> ignorée en silence**. De même, `@Inject` (injection de propriété) existe dans le moteur mais
|
|
356
|
+
> **n'est pas ré-exporté** par le paquet `nodefony` : `import { Inject } from "nodefony"` échoue.
|
|
357
|
+
> Injecte par **constructeur**, avec `@inject("nom")`.
|
|
358
|
+
|
|
359
|
+
### Ajouter une commande CLI
|
|
360
|
+
|
|
361
|
+
`Module.addCommand()` (`Module.ts:560`) enregistre une commande rattachée au module — c'est ainsi
|
|
362
|
+
que `frontend:build`, `security:user:add` ou `network` existent. Convention de nom :
|
|
363
|
+
`<module>:<action>`.
|
|
364
|
+
|
|
365
|
+
Elle se pose **dans le constructeur**, comme le font les modules du framework : le CLI doit connaître
|
|
366
|
+
la commande avant que les phases ne commencent.
|
|
367
|
+
|
|
368
|
+
```typescript ignore
|
|
369
|
+
constructor(kernel: Kernel) {
|
|
370
|
+
super("billing", kernel, import.meta.url, defaults);
|
|
371
|
+
this.addCommand(BillingReportCommand); // ← ici, pas dans un hook
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
Deux comportements à connaître :
|
|
376
|
+
|
|
377
|
+
- **Sans CLI, elle lève.** `addCommand` exige `kernel.cli` ; un module instancié hors invocation en
|
|
378
|
+
ligne de commande (test unitaire, kernel embarqué) reçoit `Error("Kernel not ready")`.
|
|
379
|
+
- **En cluster, le worker se tait.** Une exception d'enregistrement est propagée sur le process
|
|
380
|
+
primaire et **avalée** sur un travailleur (`Module.ts:517`) — seul le primaire tient le terminal.
|
|
381
|
+
|
|
382
|
+
### Les controllers du module
|
|
383
|
+
|
|
384
|
+
Le registre des controllers est global au process mais **indexé par module** — clé
|
|
385
|
+
`<module>:<Classe>` — de sorte que deux modules peuvent porter un `DefaultController` sans collision.
|
|
386
|
+
|
|
387
|
+
| Appel | Ancre | Rend |
|
|
388
|
+
| -------------------- | --------------- | ---------------------------------------------------------- |
|
|
389
|
+
| `getController("X")` | `Module.ts:473` | le constructeur, ou **lève** si absent de **ce** module |
|
|
390
|
+
| `getControllers()` | `Module.ts:488` | vue filtrée `{ NomDeClasse: Ctor }`, préfixe module retiré |
|
|
391
|
+
|
|
392
|
+
### Surcharger la config d'un autre module
|
|
393
|
+
|
|
394
|
+
Une clé `Module-<nom>` dans la config d'un module reconfigure **un autre** module, sans toucher à son
|
|
395
|
+
code — `Module.readOverrideModuleConfig()` (`Module.ts:310`), appliqué par le kernel entre le
|
|
396
|
+
chargement et la validation.
|
|
397
|
+
|
|
398
|
+
```typescript ignore
|
|
399
|
+
// Dans la config de MON module : je reconfigure http sans le modifier.
|
|
400
|
+
{ "Module-http": { port: 8080 } }
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
Le niveau du journal dépend de qui parle : une **application** qui vise un module absent obtient un
|
|
404
|
+
`WARNING` (config morte, comptée au verdict de boot) ; un **module** obtient un `INFO`, parce qu'il
|
|
405
|
+
peut légitimement embarquer un réglage pour une cible optionnelle (`Module.ts:329`).
|
|
406
|
+
|
|
407
|
+
### Rendre son module optionnel
|
|
408
|
+
|
|
409
|
+
```typescript ignore
|
|
410
|
+
static override critical = false; // statique, jamais une propriété d'instance
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
Un module non critique n'abat jamais le boot : son échec est consigné, annoncé au verdict, et le
|
|
414
|
+
serveur démarre dégradé plutôt que mort. La lecture se fait dans le constructeur de `Module`
|
|
415
|
+
(`Module.ts:227`) — **avant** que les initialiseurs de champ de ta sous-classe ne tournent, d'où le
|
|
416
|
+
`static`. Arbitrage complet : [Cycle de boot](../../../docs/architecture/cycle-boot-kernel.md).
|
|
417
|
+
|
|
418
|
+
## 🧰 La surface du Kernel utile à une application
|
|
419
|
+
|
|
420
|
+
Le `Kernel` expose beaucoup. Voici ce qu'une application touche réellement.
|
|
421
|
+
|
|
422
|
+
### Trouver un module
|
|
423
|
+
|
|
424
|
+
| Appel | Ancre | Rend |
|
|
425
|
+
| ---------------- | ---------------- | ------------------------------------------------------ |
|
|
426
|
+
| `getModule(nom)` | `Kernel.ts:1502` | le module, ou `undefined` s'il n'est pas chargé |
|
|
427
|
+
| `getModules()` | `Kernel.ts:1578` | la table complète, **par référence** (ne pas la muter) |
|
|
428
|
+
| `modules` | `Kernel.ts:494` | le même objet, en accès direct |
|
|
429
|
+
|
|
430
|
+
`getModule()` est une lecture de table, sans garde : un module gaté par le manifeste rend
|
|
431
|
+
`undefined`, pas une erreur. Le tester est donc à ta charge — c'est aussi le bon moyen de rendre une
|
|
432
|
+
intégration facultative.
|
|
433
|
+
|
|
434
|
+
### Les chemins de travail
|
|
435
|
+
|
|
436
|
+
Trois dossiers, trois durées de vie. Tous sont garantis **créés** au démarrage — un checkout frais,
|
|
437
|
+
un conteneur neuf ou un premier boot ne les ont pas.
|
|
438
|
+
|
|
439
|
+
| Membre | Ancre | Ce qu'on y met |
|
|
440
|
+
| -------- | --------------- | -------------------------------------------------------------------------------- |
|
|
441
|
+
| `path` | `Kernel.ts:461` | La racine du projet (le répertoire de travail). Base de tout le reste. |
|
|
442
|
+
| `varDir` | `Kernel.ts:518` | Données runtime **persistées** : stores fichier, bases SQLite. Survit au reboot. |
|
|
443
|
+
| `tmpDir` | `Kernel.ts:512` | Éphémère. Tout ce qui peut disparaître sans conséquence. |
|
|
444
|
+
|
|
445
|
+
`varDir` et `tmpDir` sont des `FileClass`, pas des chaînes : leur chemin est sous `.path`.
|
|
446
|
+
|
|
447
|
+
```typescript ignore
|
|
448
|
+
const dbFile = path.resolve(kernel.varDir!.path, "app.db"); // persiste
|
|
449
|
+
const scratch = path.resolve(kernel.tmpDir!.path, "build"); // jetable
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### Configuration, environnement, container
|
|
453
|
+
|
|
454
|
+
| Membre | Ancre | Note |
|
|
455
|
+
| --------------------------- | ---------------- | ---------------------------------------------------------------------- |
|
|
456
|
+
| `options` | — | La config de l'app, résolue et validée au chargement de celle-ci. |
|
|
457
|
+
| `environment` | `Kernel.ts:325` | Le mode **moteur** : `"development"` ou `"production"`. |
|
|
458
|
+
| `domain` | `Kernel.ts:520` | Le nom d'hôte retenu, résolu au boot. |
|
|
459
|
+
| `get()` / `set()` / `has()` | — | La façade container héritée de `Service` — voir [Service](service.md). |
|
|
460
|
+
| `getBootReport()` | `Kernel.ts:2817` | Le verdict du dernier boot : modules, serveurs, santé. |
|
|
461
|
+
|
|
462
|
+
> [!WARNING]
|
|
463
|
+
> Ne **jamais** déréférencer le kernel au premier niveau d'un fichier de configuration : il est
|
|
464
|
+
> importé **avant** que le kernel n'existe, et le fichier plante à l'import — donc devient
|
|
465
|
+
> intestable. Emploie le `ctx` de `defineConfig((ctx) => …)`, ou un getter paresseux. Le cas est
|
|
466
|
+
> détaillé dans [Configuration](../../../docs/architecture/configuration.md).
|
|
467
|
+
|
|
468
|
+
### La façade `Nodefony`
|
|
469
|
+
|
|
470
|
+
Quatre membres, tous statiques (`Nodefony.ts:22`).
|
|
471
|
+
|
|
472
|
+
| Membre | Ancre | Usage |
|
|
473
|
+
| ---------------------- | ---------------- | ------------------------------------------------------------------------ |
|
|
474
|
+
| `getKernel()` | `Nodefony.ts:34` | Le kernel courant, ou `null`. **Toujours** tester. |
|
|
475
|
+
| `version` | `Nodefony.ts:24` | La version du paquet `nodefony`, lue au build. |
|
|
476
|
+
| `generateId()` | `Nodefony.ts:54` | UUID **v4** — aléatoire. Pour un identifiant qui doit être imprévisible. |
|
|
477
|
+
| `generateSortableId()` | `Nodefony.ts:79` | UUID **v7** — horodaté, donc **ordonné**. Pour une clé primaire. |
|
|
478
|
+
|
|
479
|
+
`setKernel()` (`Nodefony.ts:44`) existe mais appartient au boot : l'appeler soi-même écrase la
|
|
480
|
+
référence globale sans avertissement.
|
|
481
|
+
|
|
482
|
+
> [!CAUTION]
|
|
483
|
+
> Ces deux générateurs ne sont pas interchangeables. Un **v7** groupe les insertions côte à côte dans
|
|
484
|
+
> l'index (là où un v4 fragmente l'arbre), mais il **fuit l'instant de création** et la RFC 9562
|
|
485
|
+
> interdit explicitement de s'en servir comme secret. Clé primaire → v7. Jeton, identifiant deviné →
|
|
486
|
+
> **v4**. Et l'ordre n'est **pas** garanti à l'intérieur d'une même milliseconde : trier des
|
|
487
|
+
> créations se fait sur `createdAt`, jamais sur l'identifiant.
|
|
488
|
+
|
|
489
|
+
## Les événements — `fire()` vs `fireAsync()`
|
|
490
|
+
|
|
491
|
+
Le kernel annonce chaque phase sur son bus. Trois émetteurs cohabitent, et ils ne servent **pas** la
|
|
492
|
+
même chose.
|
|
493
|
+
|
|
494
|
+
| Émetteur | Ancre | Comportement | Employé pour |
|
|
495
|
+
| ----------------------- | ---------------- | ---------------------------------------------------------------- | ---------------------- |
|
|
496
|
+
| `fire(nom, …)` | `Kernel.ts:2596` | Synchrone. Les écouteurs tournent tout de suite, **0 microtask** | le chemin chaud |
|
|
497
|
+
| `fireAsync(nom, …)` | `Kernel.ts:2614` | Attend les écouteurs asynchrones, **en séquence** | pipeline HTTP/WS, boot |
|
|
498
|
+
| `fireLifecycle(nom, …)` | `Kernel.ts:2980` | Isole chaque écouteur : délai maximal + politique de criticité | **le boot seulement** |
|
|
499
|
+
|
|
500
|
+
La règle de choix tient en une ligne : **si le résultat de l'écouteur t'importe, `fireAsync` ; sinon
|
|
501
|
+
`fire`.** `fire()` ne t'apprend rien de ce qui s'est passé — il rend un booléen « quelqu'un
|
|
502
|
+
écoutait ». Une promesse rejetée dans un écouteur appelé par `fire()` devient un rejet non géré.
|
|
503
|
+
|
|
504
|
+
`fireLifecycle()` n'est pas un troisième choix à ta disposition : le kernel l'emploie sur la chaîne
|
|
505
|
+
`onPreRegister` → `onPostReady`, et **uniquement** là. Le chemin chaud garde l'émission nue — aucun
|
|
506
|
+
timer, aucune allocation par requête. La résilience du boot ne se paie pas au prix de la requête.
|
|
507
|
+
|
|
508
|
+
> [!NOTE]
|
|
509
|
+
> Les trois émetteurs journalisent une ligne `DEBUG` par événement émis (`Kernel.ts:2597`). Utile
|
|
510
|
+
> pour suivre un boot ; c'est aussi pourquoi un `NF__DEBUG` large rend le démarrage très bavard.
|
|
511
|
+
|
|
512
|
+
### Le piège du listener non tagué
|
|
513
|
+
|
|
514
|
+
C'est **le** piège de la page, et il ne se voit qu'en production.
|
|
515
|
+
|
|
516
|
+
Quand tu déclares un hook (`onKernelBoot`), `setEvents()` l'attache **tagué** : l'écouteur porte le
|
|
517
|
+
nom de son module et sa criticité (`Module.ts:236`). En cas d'échec, le kernel relit ces étiquettes
|
|
518
|
+
et applique **ta** politique — un module `critical = false` échoue en fail-soft.
|
|
519
|
+
|
|
520
|
+
Quand tu attaches le même code à la main, il n'y a **aucune** étiquette :
|
|
521
|
+
|
|
522
|
+
```typescript ignore
|
|
523
|
+
// ❌ Non tagué : propriétaire inconnu, criticité inconnue.
|
|
524
|
+
kernel.on("onBoot", async () => {
|
|
525
|
+
await this.connect();
|
|
526
|
+
});
|
|
527
|
+
|
|
528
|
+
// ✅ Tagué par le framework, avec ta criticité.
|
|
529
|
+
override async onKernelBoot(): Promise<this> {
|
|
530
|
+
await this.connect();
|
|
531
|
+
return this;
|
|
532
|
+
}
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
La conséquence est asymétrique, et c'est ce qui la rend traître. La criticité manquante est traitée
|
|
536
|
+
comme **critique par défaut** (`Kernel.ts:2668` : l'échec est fatal dès lors que `critical !== false`
|
|
537
|
+
et qu'on est en production). Donc :
|
|
538
|
+
|
|
539
|
+
| Environnement | Hook déclaré, `critical = false` | Écouteur posé à la main |
|
|
540
|
+
| -------------- | -------------------------------- | ------------------------- |
|
|
541
|
+
| Développement | fail-soft, boot dégradé | fail-soft — **identique** |
|
|
542
|
+
| **Production** | fail-soft, boot dégradé | **boot interrompu** |
|
|
543
|
+
|
|
544
|
+
En développement les deux formes se comportent pareil : le piège est invisible pendant tout le
|
|
545
|
+
développement, et se déclenche au premier déploiement. Le journal, lui, ne peut nommer personne — il
|
|
546
|
+
écrit `"(anonyme)"` (`Kernel.ts:2672`), ce qui rend le diagnostic difficile au pire moment.
|
|
547
|
+
|
|
548
|
+
**La règle** : sur les phases de boot, on déclare un hook. `kernel.on(...)` est réservé aux
|
|
549
|
+
événements hors cycle de vie.
|
|
550
|
+
|
|
551
|
+
## ⚙️ CliKernel — le noyau des commandes
|
|
552
|
+
|
|
553
|
+
`CliKernel` (`CliKernel.ts:84`) est ce que `npx nodefony <commande>` instancie. Il n'étend **pas**
|
|
554
|
+
`Kernel` : il étend `Cli`, analyse `argv` via Commander, et fabrique le kernel dans `start()`
|
|
555
|
+
(`CliKernel.ts:172`).
|
|
556
|
+
|
|
557
|
+
### Ce qu'il apporte
|
|
558
|
+
|
|
559
|
+
| Membre | Ancre | Rôle |
|
|
560
|
+
| ----------------------- | ------------------ | --------------------------------------------------------------------- |
|
|
561
|
+
| `runProfile` | `CliKernel.ts:101` | `{ servers, lifetime, interactive }` — ce dont le run a besoin. |
|
|
562
|
+
| `setRunProfile(profil)` | `CliKernel.ts:784` | Déclaré par une commande ; recopié dans le kernel à `onStart`. |
|
|
563
|
+
| `packageManager` | `CliKernel.ts:103` | `pnpm` par défaut ; commutable en `npm` / `yarn`. |
|
|
564
|
+
| `addCommand(Ctor)` | `CliKernel.ts:670` | Enregistre une commande intégrée (les modules passent par `Module`). |
|
|
565
|
+
| `quietBoot` | `CliKernel.ts:111` | Boot silencieux : seules les erreurs sortent. Pour une sortie propre. |
|
|
566
|
+
| `parseCommand(argv?)` | `CliKernel.ts:143` | Analyse Commander synchrone. |
|
|
567
|
+
|
|
568
|
+
Le défaut de `runProfile` est **console pur** : `{ servers: false, lifetime: "oneshot" }`. Une
|
|
569
|
+
commande n'ouvre donc aucun port tant qu'elle ne le demande pas — un `nodefony build` ne démarre
|
|
570
|
+
jamais un serveur par accident, et une commande inconnue termine en erreur au lieu de retomber sur un
|
|
571
|
+
runtime.
|
|
572
|
+
|
|
573
|
+
### Le piège du constructeur
|
|
574
|
+
|
|
575
|
+
> [!WARNING]
|
|
576
|
+
> `environment` peut être **`undefined`** dans le constructeur de `CliKernel` (`CliKernel.ts:100`) :
|
|
577
|
+
> ce sont les sous-commandes qui le posent, plus tard. Ne conditionne jamais du code sur
|
|
578
|
+
> `this.environment` dans un constructeur — le réglage va dans le hook `onKernelStart()` de la
|
|
579
|
+
> commande, qui tourne avant le boot.
|
|
580
|
+
|
|
581
|
+
```typescript ignore
|
|
582
|
+
class DevCommand extends Command {
|
|
583
|
+
override async onKernelStart(): Promise<void> {
|
|
584
|
+
(this.cli as CliKernel).setRunProfile({
|
|
585
|
+
servers: true,
|
|
586
|
+
lifetime: "longrunning",
|
|
587
|
+
interactive: false,
|
|
588
|
+
});
|
|
589
|
+
this.cli.environment = "development"; // ← ici, jamais au constructeur
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
### Les invocations qui ne bootent rien
|
|
595
|
+
|
|
596
|
+
Certaines commandes sont traitées **avant** toute construction de kernel (`CliKernel.ts:172`) :
|
|
597
|
+
`--version`, la complétion shell, `nodefony create`, `nodefony status` et `nodefony stop`. Elles
|
|
598
|
+
tournent hors de tout projet et en quelques millisecondes — une tabulation de complétion ne démarre
|
|
599
|
+
pas un noyau.
|
|
600
|
+
|
|
601
|
+
Le cycle écourté d'une commande (phase cible, `park`, arrêt) appartient au récit du boot :
|
|
602
|
+
[Cycle de boot](../../../docs/architecture/cycle-boot-kernel.md).
|
|
603
|
+
|
|
604
|
+
## ⚠️ Pièges (symptôme → cause → correction)
|
|
605
|
+
|
|
606
|
+
| Symptôme | Cause (dans le code) | Correction |
|
|
607
|
+
| --------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
|
|
608
|
+
| `does not provide an export named 'kernel'` | L'ancien singleton exporté n'existe plus | `Nodefony.getKernel()` (`Nodefony.ts:34`), avec un `?.` |
|
|
609
|
+
| `Cannot read properties of null` sur le kernel | `getKernel()` rend `null` hors serveur | Tester le retour ; en service, préférer l'injection |
|
|
610
|
+
| Mon hook n'est jamais appelé | Propriété fléchée, ou nom approximatif | Méthode de prototype nommée exactement (`Module.ts:235`) |
|
|
611
|
+
| Le boot casse **en production seulement** | Écouteur de phase posé à la main → non tagué → critique par défaut | Déclarer un hook de module (`Module.ts:236`) |
|
|
612
|
+
| Journal de boot : échec de `"(anonyme)"` | Même cause : aucun propriétaire à nommer (`Kernel.ts:2672`) | Idem — le hook porte l'identité |
|
|
613
|
+
| `Error("Kernel not ready")` sur `addCommand` | `kernel.cli` absent — module hors invocation CLI (`Module.ts:576`) | N'appeler `addCommand` que dans un module chargé par le CLI |
|
|
614
|
+
| Ma commande de module n'apparaît pas | `addCommand` appelé dans un hook, trop tard | La poser dans le **constructeur**, comme les modules du framework |
|
|
615
|
+
| `import { Inject } from "nodefony"` échoue | Le décorateur de propriété n'est pas ré-exporté par le paquet | Injection par constructeur : `@inject("nom")` |
|
|
616
|
+
| `@injectable({ singleton: true })` sans effet | La clé n'existe pas — elle est acceptée puis **ignorée** | `{ scope: "singleton" }` (défaut) ou `{ scope: "transient" }` |
|
|
617
|
+
| `@services()` refuse ma classe : « not assignable » | Config déclarée en `interface` — pas d'index signature (`kernelDecorator.ts:21`) | Déclarer le type de config avec `type`, pas `interface` |
|
|
618
|
+
| `getModule("x")` rend `undefined` | Lecture de table sans garde (`Kernel.ts:1575`) | Tester ; un module gaté par le manifeste est légitimement absent |
|
|
619
|
+
| Config du module ignorée | Défauts du constructeur écrasés par `use()` puis par l'environnement | Comportement voulu — lire `this.config`, pas les défauts écrits |
|
|
620
|
+
| Override `Module-x` ignoré, `WARNING` au boot | Le module cible n'est pas au manifeste (`Module.ts:329`) | Charger le module, ou retirer la clé |
|
|
621
|
+
| `Cannot read 'environment' of undefined` au démarrage CLI | `environment` non résolu au constructeur (`CliKernel.ts:100`) | Déplacer le réglage dans `onKernelStart()` |
|
|
622
|
+
| Un `await` dans un écouteur de `fire()` n'est pas attendu | `fire()` est synchrone par conception (`Kernel.ts:2596`) | `fireAsync()` si le résultat compte |
|
|
623
|
+
| Boot très bavard en `DEBUG` | Une ligne par événement émis (`Kernel.ts:2597`) | Cibler le debug par module plutôt que `*` — voir [syslog](syslog.md) |
|
|
624
|
+
| Fichier de config qui plante à l'import | Kernel déréférencé au premier niveau | `defineConfig((ctx) => …)` ou getter paresseux |
|
|
625
|
+
|
|
626
|
+
## 🧪 Tests & couverture
|
|
627
|
+
|
|
628
|
+
Sept fichiers couvrent le cœur — les **chiffres exacts vivent dans la carte de l'aperçu**, régénérée
|
|
629
|
+
depuis vitest, jamais figés ici :
|
|
630
|
+
|
|
631
|
+
- **Le kernel lui-même** — `Kernel.test.ts` (le bitmask des phases, les drapeaux, les chemins, le
|
|
632
|
+
registre de modules, le rapport de boot) et `KernelLifecycle.test.ts` (l'ordre des phases, les
|
|
633
|
+
délais maximaux, la criticité, l'échéance d'arrêt).
|
|
634
|
+
- **Les modules** — `Module.test.ts` : chargement, câblage des hooks, ajout et initialisation des
|
|
635
|
+
services, surcharges de configuration inter-modules, registre des controllers.
|
|
636
|
+
- **Le CLI** — `KernelCommands.test.ts` (les commandes intégrées), `CliKernel.test.ts` (profil
|
|
637
|
+
d'exécution, analyse d'`argv`, cycle écourté) et `CliKernelDispatch.test.ts` (le dispatch différé
|
|
638
|
+
des commandes de module, qui n'existent qu'après le chargement des modules).
|
|
639
|
+
- **La résolution** — `resolveModuleEntry.test.ts` : un module est résolu **depuis l'application**,
|
|
640
|
+
jamais depuis le paquet `nodefony` — sans quoi un module local devient introuvable en monorepo.
|
|
641
|
+
|
|
642
|
+
Ce qui **manque** aujourd'hui, et qu'il faut savoir :
|
|
643
|
+
|
|
644
|
+
- **Aucun test d'attaque** propre au kernel. La construction des services est couverte par
|
|
645
|
+
`services.attack` et `injector.attack` ; la surface d'administration relève du skill
|
|
646
|
+
`nodefony-security-review`.
|
|
647
|
+
- **Aucun banc de charge dédié au boot** (temps de démarrage sous contrainte). La pression réelle se
|
|
648
|
+
mesure en bout de chaîne, par le gate mémoire du pipeline (skill `nodefony-check-memory-health`).
|
|
649
|
+
- **Le chemin cluster** n'est couvert qu'indirectement.
|
|
650
|
+
|
|
651
|
+
Couverture : `npm run coverage` dans `src/nodefony`.
|
|
652
|
+
|
|
653
|
+
## 🔗 Pour aller plus loin
|
|
654
|
+
|
|
655
|
+
- ⬆️ **Retour au hub** : [@nodefony/core — vue d'ensemble](index.md) · [Toute la documentation](../../../docs/index.md)
|
|
656
|
+
- 🧭 **Pages sœurs** : [Service et événements](service.md) — le socle dont `Kernel` et `Module`
|
|
657
|
+
héritent · [Journalisation](syslog.md) — d'où vient `this.log()` ·
|
|
658
|
+
[Contexte de requête](request-context.md) — l'ALS qui traverse le pipeline ·
|
|
659
|
+
[Client isomorphe](client.md) — ce que le cœur expose côté navigateur
|
|
660
|
+
|
|
661
|
+
- **Quand** chaque phase se déclenche, la résilience, l'arrêt propre, le mode commande →
|
|
662
|
+
[Cycle de boot du Kernel](../../../docs/architecture/cycle-boot-kernel.md)
|
|
663
|
+
- Écrire `nodefony.config.ts` et `env.ts`, les surcharges, `use()` →
|
|
664
|
+
[Configuration](../../../docs/architecture/configuration.md)
|
|
665
|
+
- Portées, tri des dépendances, cycle des scopes →
|
|
666
|
+
[Injection & portées](../../../docs/architecture/injection-portees.md)
|
|
667
|
+
- Ce qui se passe **après** le boot, requête par requête →
|
|
668
|
+
[Pipeline d'une requête](../../../docs/architecture/pipeline-requete.md)
|
|
669
|
+
- Comment le `dist/` d'un module est produit (et pourquoi il périme) →
|
|
670
|
+
[Build & bundling](../../../docs/architecture/build-bundling.md)
|