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
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import Service from "../Service.js";
|
|
2
|
+
import { announceKernel, consoleDetails, isVerbose } from "./announce.js";
|
|
3
|
+
import { RealtimeClient } from "./realtime/RealtimeClient.js";
|
|
4
|
+
//#region src/client/ClientKernel.ts
|
|
5
|
+
/**
|
|
6
|
+
* `ClientKernel` — implémentation du kernel client isomorphe (ADR-0007).
|
|
7
|
+
*
|
|
8
|
+
* Le pendant navigateur du `Kernel` serveur : il compose les services techniques
|
|
9
|
+
* d'une application front, porte son cycle de vie, son observabilité et son cycle
|
|
10
|
+
* d'identité. Il ne possède **jamais** le rendu, le routing ni l'état métier
|
|
11
|
+
* (clause anti-dérive D1) — React/Vue/Angular restent maîtres de la vue.
|
|
12
|
+
*
|
|
13
|
+
* Il **compose** un {@link Service} du cœur plutôt que d'en hériter, et ce choix
|
|
14
|
+
* s'est décidé au compilateur : `Service.get`/`set` sont la façade du container
|
|
15
|
+
* d'injection, dont la sémantique est « n'importe quel objet sous n'importe quel
|
|
16
|
+
* nom » (`get<T>(name: string): T | null`), tandis que le registre du kernel est
|
|
17
|
+
* **typé et fermé** par le contrat (`get(name): NodefonyClientServices[K]`).
|
|
18
|
+
* Hériter revenait à resserrer une méthode publique de la classe de base — TS2416,
|
|
19
|
+
* et le refus dit une vérité de conception : deux mécanismes différents portaient
|
|
20
|
+
* le même nom. La composition garde les briques isomorphes du cœur (bus
|
|
21
|
+
* d'événements, `Syslog`) sans exposer une surface qui n'est pas celle du contrat.
|
|
22
|
+
*
|
|
23
|
+
* Le budget bundle n'augmente pas de ce fait : `Service` et `Syslog` sont déjà
|
|
24
|
+
* publiés par `nodefony/client`.
|
|
25
|
+
*
|
|
26
|
+
* @module nodefony/client
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Kernel client — obtenu par {@link createClientKernel}, jamais construit en
|
|
30
|
+
* singleton de module (testabilité, HMR-safe : un module réévalué par Vite
|
|
31
|
+
* dédoublerait un singleton, gotcha vécu sur le contexte React de Studio).
|
|
32
|
+
*/
|
|
33
|
+
var ClientKernel = class {
|
|
34
|
+
/** Journal client de série — `Pdu` isomorphes, corrélables au back. */
|
|
35
|
+
syslog;
|
|
36
|
+
/** Bus d'événements et journal du cœur — la brique isomorphe, pas une copie. */
|
|
37
|
+
#service;
|
|
38
|
+
/** Options de composition, relues au `boot()` — le constructeur ne connecte rien. */
|
|
39
|
+
#options;
|
|
40
|
+
#state = "created";
|
|
41
|
+
#identity = null;
|
|
42
|
+
/**
|
|
43
|
+
* Promesse du `boot()` en cours — c'est ELLE qui rend l'appel idempotent, y
|
|
44
|
+
* compris pour deux appels concurrents : le second attend le premier au lieu
|
|
45
|
+
* de composer une seconde fois.
|
|
46
|
+
*/
|
|
47
|
+
#booting = null;
|
|
48
|
+
/**
|
|
49
|
+
* Registre des services composés. `null` tant que rien n'est enregistré (règle
|
|
50
|
+
* perf : pas de structure allouée « au cas où »). Un objet sans prototype
|
|
51
|
+
* plutôt qu'une `Map` — moins de trois entrées, accès ponctuel.
|
|
52
|
+
*/
|
|
53
|
+
#services = null;
|
|
54
|
+
/**
|
|
55
|
+
* Débranchements des listeners navigateur. `null` tant qu'aucun n'est posé —
|
|
56
|
+
* un kernel monté en test, ou hors document, n'en pose aucun.
|
|
57
|
+
*/
|
|
58
|
+
#unbind = null;
|
|
59
|
+
/** Retire le handle de console — posé par la bannière, libéré à la mort. */
|
|
60
|
+
#disposeHandle = null;
|
|
61
|
+
constructor(options = {}) {
|
|
62
|
+
this.#options = options;
|
|
63
|
+
this.#service = new Service(options.name ?? "CLIENT KERNEL");
|
|
64
|
+
this.syslog = this.#service.syslog;
|
|
65
|
+
this.#disposeHandle = announceKernel(this, this.name, this.#options.banner);
|
|
66
|
+
this.#composeRealtime();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Récupère un service composé, typé par le registre.
|
|
70
|
+
*
|
|
71
|
+
* Rend `undefined` pour un service absent — le registre est décrit par des
|
|
72
|
+
* propriétés optionnelles, si bien que `kernel.get("realtime")` est de type
|
|
73
|
+
* `RealtimeClient | undefined` et nourrit `<NodefonyProvider client={…}>` sans
|
|
74
|
+
* la moindre conversion de type forcée.
|
|
75
|
+
*/
|
|
76
|
+
get(name) {
|
|
77
|
+
if (!this.#services) return void 0;
|
|
78
|
+
return this.#services[name];
|
|
79
|
+
}
|
|
80
|
+
/** Enregistre un service sous son nom contractuel. */
|
|
81
|
+
set(name, svc) {
|
|
82
|
+
(this.#services ??= Object.create(null))[name] = svc;
|
|
83
|
+
}
|
|
84
|
+
/** Teste la présence d'un service — nom libre, y compris hors contrat. */
|
|
85
|
+
has(name) {
|
|
86
|
+
return this.#services !== null && this.#services[name] !== void 0;
|
|
87
|
+
}
|
|
88
|
+
/** État courant — jamais régressif. */
|
|
89
|
+
get state() {
|
|
90
|
+
return this.#state;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Compose et connecte les services. **Idempotent** : rappelé pendant ou après
|
|
94
|
+
* un premier boot, il ne recompose rien et ne réémet aucun événement. Depuis
|
|
95
|
+
* l'état `terminated`, il ne fait rien — l'état ne régresse jamais.
|
|
96
|
+
*/
|
|
97
|
+
boot() {
|
|
98
|
+
if (this.#state === "terminated" || this.#state === "ready") return Promise.resolve();
|
|
99
|
+
if (this.#booting) return this.#booting;
|
|
100
|
+
this.#booting = this.#doBoot();
|
|
101
|
+
return this.#booting;
|
|
102
|
+
}
|
|
103
|
+
async #doBoot() {
|
|
104
|
+
this.#state = "booting";
|
|
105
|
+
this.#service.fire("onBoot", this);
|
|
106
|
+
this.#bindBrowser();
|
|
107
|
+
const socket = this.#options.connectOnBoot === false ? void 0 : this.get("realtime");
|
|
108
|
+
if (socket) try {
|
|
109
|
+
await socket.connect();
|
|
110
|
+
} catch (e) {
|
|
111
|
+
this.syslog.log(e instanceof Error ? e.message : String(e), "WARNING");
|
|
112
|
+
}
|
|
113
|
+
if (this.#state !== "booting") return;
|
|
114
|
+
this.#state = "ready";
|
|
115
|
+
this.#details();
|
|
116
|
+
this.#service.fire("onReady", this);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Détail du noyau, dans un groupe REPLIÉ de la console.
|
|
120
|
+
*
|
|
121
|
+
* Le badge d'une ligne et le handle `nodefony` ne sont plus ici : ils sont
|
|
122
|
+
* posés au constructeur par `announce.ts`, que la socket appelle aussi quand
|
|
123
|
+
* elle vit nue (ADR-0007 D7 révisé). Ce qui reste est ce qu'un noyau seul peut
|
|
124
|
+
* dire — son état, son identité, les services qu'il a composés.
|
|
125
|
+
*
|
|
126
|
+
* Le groupe est replié (`groupCollapsed`) et non ouvert : présent pour qui le
|
|
127
|
+
* cherche, invisible pour qui débogue autre chose.
|
|
128
|
+
*/
|
|
129
|
+
#details() {
|
|
130
|
+
if (this.#options.banner === false) return;
|
|
131
|
+
if (this.#options.banner !== true && !isVerbose()) return;
|
|
132
|
+
const socket = this.get("realtime");
|
|
133
|
+
const rows = {
|
|
134
|
+
état: { valeur: this.state },
|
|
135
|
+
identité: { valeur: this.identity ? this.identity.key : "anonyme" },
|
|
136
|
+
"temps réel": { valeur: socket ? socket.url ?? "socket fournie" : "aucun" },
|
|
137
|
+
socket: { valeur: socket ? socket.state : "—" }
|
|
138
|
+
};
|
|
139
|
+
for (const name of this.#services ? Object.keys(this.#services) : []) rows[`service · ${name}`] = { valeur: "composé" };
|
|
140
|
+
consoleDetails(rows, this, "noyau client — détail et raccourcis");
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Compose la socket depuis les options — instance passée telle quelle, ou
|
|
144
|
+
* socket partagée fabriquée depuis ses options (une seule connexion par URL).
|
|
145
|
+
* Rien n'est fabriqué quand l'application n'en veut pas : l'opt-in est strict
|
|
146
|
+
* (D7), le kernel compose, il n'impose pas.
|
|
147
|
+
*/
|
|
148
|
+
#composeRealtime() {
|
|
149
|
+
if (this.has("realtime")) return;
|
|
150
|
+
const opt = this.#options.realtime;
|
|
151
|
+
if (!opt) return;
|
|
152
|
+
this.set("realtime", opt instanceof RealtimeClient ? opt : RealtimeClient.shared(opt));
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Flush l'observabilité et déconnecte. Idempotent, et **best-effort** : appelé
|
|
156
|
+
* sur `pagehide`, il n'a aucune garantie d'aller au bout — d'où l'ordre choisi,
|
|
157
|
+
* l'événement d'abord, le débranchement ensuite.
|
|
158
|
+
*/
|
|
159
|
+
async terminate() {
|
|
160
|
+
if (this.#state === "terminated") return;
|
|
161
|
+
this.#state = "terminated";
|
|
162
|
+
this.#service.fire("onTerminate", this);
|
|
163
|
+
const socket = this.get("realtime");
|
|
164
|
+
if (socket) socket.disconnect();
|
|
165
|
+
this.#unbindBrowser();
|
|
166
|
+
this.#disposeHandle?.();
|
|
167
|
+
this.#disposeHandle = null;
|
|
168
|
+
this.#booting = null;
|
|
169
|
+
this.#services = null;
|
|
170
|
+
this.#service.clean();
|
|
171
|
+
}
|
|
172
|
+
/** Nom du kernel — celui donné à la fabrique, `CLIENT KERNEL` par défaut. */
|
|
173
|
+
get name() {
|
|
174
|
+
return this.#service.name;
|
|
175
|
+
}
|
|
176
|
+
/** Identité runtime courante, telle que l'application l'a déclarée. */
|
|
177
|
+
get identity() {
|
|
178
|
+
return this.#identity;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Déclare l'identité runtime — et applique la règle de sécurité D9, née d'une
|
|
182
|
+
* fuite vécue en production.
|
|
183
|
+
*
|
|
184
|
+
* Deux gardes, chacune payée par une régression réelle :
|
|
185
|
+
*
|
|
186
|
+
* 1. **`disconnect()` uniquement sur un VRAI changement de compte** (une clé
|
|
187
|
+
* connue remplacée par une autre). La socket grave l'identité au handshake ;
|
|
188
|
+
* le pont « API souveraine » rejouerait sinon des requêtes avec le jeton du
|
|
189
|
+
* compte précédent. Couper impose un nouveau handshake, donc la relecture du
|
|
190
|
+
* cookie courant.
|
|
191
|
+
* 2. **`connect()` HORS de cette garde.** Au tout premier chargement, la clé
|
|
192
|
+
* passe de `null` à une valeur : couper là romprait les requêtes EN VOL qui
|
|
193
|
+
* passent par le pont, et l'écran resterait en attente jusqu'au délai de
|
|
194
|
+
* garde (régression « tourne en boucle »).
|
|
195
|
+
*
|
|
196
|
+
* Une clé inchangée n'est pas un changement de compte : le profil est rafraîchi
|
|
197
|
+
* en silence, sans toucher à la socket ni réveiller l'application.
|
|
198
|
+
*/
|
|
199
|
+
setIdentity(identity) {
|
|
200
|
+
const previous = this.#identity;
|
|
201
|
+
const previousKey = previous ? previous.key : null;
|
|
202
|
+
const key = identity ? identity.key : null;
|
|
203
|
+
this.#identity = identity;
|
|
204
|
+
if (previousKey === key) return;
|
|
205
|
+
const socket = this.get("realtime");
|
|
206
|
+
if (socket) {
|
|
207
|
+
if (previousKey !== null) socket.disconnect();
|
|
208
|
+
if (key !== null) socket.connect();
|
|
209
|
+
}
|
|
210
|
+
this.#service.fire("onIdentityChange", identity, previous);
|
|
211
|
+
}
|
|
212
|
+
/** Abonne un handler à un événement du kernel (bus `Event` du cœur, chaînable). */
|
|
213
|
+
on(event, handler) {
|
|
214
|
+
this.#service.on(event, handler);
|
|
215
|
+
return this;
|
|
216
|
+
}
|
|
217
|
+
/** Retire un handler abonné par {@link on}. */
|
|
218
|
+
off(event, handler) {
|
|
219
|
+
this.#service.removeListener(event, handler);
|
|
220
|
+
return this;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Ponte les événements du navigateur sur ceux du kernel.
|
|
224
|
+
*
|
|
225
|
+
* `pagehide` et non `beforeunload` : ce dernier n'est pas fiable sur mobile
|
|
226
|
+
* (bfcache), et le contrat ne nomme que l'événement kernel — le choix du
|
|
227
|
+
* listener reste une affaire d'implémentation.
|
|
228
|
+
*/
|
|
229
|
+
#bindBrowser() {
|
|
230
|
+
if (this.#options.browserEvents === false) return;
|
|
231
|
+
const doc = globalThis.document;
|
|
232
|
+
const win = globalThis.window;
|
|
233
|
+
if (!doc || !win) return;
|
|
234
|
+
const bind = (target, type, handler) => {
|
|
235
|
+
target.addEventListener(type, handler);
|
|
236
|
+
(this.#unbind ??= []).push(() => target.removeEventListener(type, handler));
|
|
237
|
+
};
|
|
238
|
+
bind(doc, "visibilitychange", () => this.#service.fire("onVisibility", doc.visibilityState !== "hidden"));
|
|
239
|
+
bind(win, "online", () => this.#service.fire("onOnline", true));
|
|
240
|
+
bind(win, "offline", () => this.#service.fire("onOnline", false));
|
|
241
|
+
bind(win, "pagehide", () => void this.terminate());
|
|
242
|
+
}
|
|
243
|
+
/** Défait tous les listeners navigateur — appelé par `terminate()`, une fois. */
|
|
244
|
+
#unbindBrowser() {
|
|
245
|
+
if (!this.#unbind) return;
|
|
246
|
+
for (const off of this.#unbind) off();
|
|
247
|
+
this.#unbind = null;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Nombre de listeners navigateur encore posés.
|
|
251
|
+
*
|
|
252
|
+
* Sonde de fuite à l'usage des tests : un kernel terminé doit en compter zéro,
|
|
253
|
+
* et c'est la seule façon de le CONSTATER plutôt que de le supposer.
|
|
254
|
+
*/
|
|
255
|
+
get browserListenerCount() {
|
|
256
|
+
return this.#unbind ? this.#unbind.length : 0;
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
/**
|
|
260
|
+
* Fabrique un kernel client.
|
|
261
|
+
*
|
|
262
|
+
* Factory et non singleton : plusieurs kernels doivent pouvoir coexister en test,
|
|
263
|
+
* et un état de module global se dédouble sous le rechargement à chaud de Vite.
|
|
264
|
+
*
|
|
265
|
+
* @example
|
|
266
|
+
* ```typescript
|
|
267
|
+
* const kernel = createClientKernel({ realtime: { url: "/nodefony/realtime" } });
|
|
268
|
+
* await kernel.boot();
|
|
269
|
+
* kernel.setIdentity({ key: user.id });
|
|
270
|
+
* ```
|
|
271
|
+
*/
|
|
272
|
+
function createClientKernel(options = {}) {
|
|
273
|
+
return new ClientKernel(options);
|
|
274
|
+
}
|
|
275
|
+
//#endregion
|
|
276
|
+
export { ClientKernel, ClientKernel as default, createClientKernel };
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import { isRateChannel, parseRate, rateChannel } from "../../realtime/channelRate.js";
|
|
2
|
+
import { adaptiveRebindKey, connectShared, observeChannel, observeChannelStats, observeIdentity, observeNoticeLog, observeNotices, observeSnapshot, observeState, observeSyslog } from "../realtime/observe.js";
|
|
3
|
+
import { DestroyRef, InjectionToken, NgZone, assertInInjectionContext, effect, inject, makeEnvironmentProviders, signal, untracked } from "@angular/core";
|
|
4
|
+
//#region src/client/angular/index.ts
|
|
5
|
+
/**
|
|
6
|
+
* `nodefony/angular` — liaisons **Angular** du client temps réel isomorphe.
|
|
7
|
+
*
|
|
8
|
+
* Adapte le {@link RealtimeClient} (agnostique : `on()`/`emit()`/`state`) aux
|
|
9
|
+
* *signals* d'Angular, sans glue à recopier dans chaque application. Le pendant
|
|
10
|
+
* exact de `nodefony/react` et `nodefony/vue` : même surface, mêmes noms, mêmes
|
|
11
|
+
* garanties — seule la traduction vers la réactivité change.
|
|
12
|
+
*
|
|
13
|
+
* **Ce fichier ne contient AUCUNE règle temps réel.** Souscrire, tenir un
|
|
14
|
+
* dernier reçu, borner un anneau, décoder le format coalescé du journal, ne
|
|
15
|
+
* jamais couper une socket partagée : tout cela vit dans le socle agnostique
|
|
16
|
+
* `nodefony/client` (`observe*`, `connectShared`), que les quatre liaisons
|
|
17
|
+
* consomment à l'identique. Ici ne reste que la traduction *rappel + libération
|
|
18
|
+
* → signal* — la seule chose qu'une liaison a le droit de contenir. Une liaison
|
|
19
|
+
* qui réencoderait une règle la ferait diverger des trois autres, en silence.
|
|
20
|
+
*
|
|
21
|
+
* Trois particularités d'Angular que React et Vue ne montrent pas, et qui sont
|
|
22
|
+
* la raison d'être de ce fichier :
|
|
23
|
+
*
|
|
24
|
+
* 1. **AUCUN décorateur Angular n'est publié ici**, et c'est délibéré. Un
|
|
25
|
+
* `@Injectable()` n'est pas du JavaScript : c'est une instruction pour le
|
|
26
|
+
* compilateur d'Angular, qui doit la transformer. Une bibliothèque qui en
|
|
27
|
+
* publie doit donc être bâtie par `ng-packagr` au format de paquet Angular
|
|
28
|
+
* (*partial compilation* + *linker*) — une seconde chaîne de build, et un
|
|
29
|
+
* couplage aux majeures d'Angular, pour UN subpath sur quatre. Non compilé,
|
|
30
|
+
* un décorateur marche parfois en développement (si `@angular/compiler` est
|
|
31
|
+
* chargé) et **casse en production**, où il ne l'est pas. La forme retenue
|
|
32
|
+
* — `InjectionToken` + `makeEnvironmentProviders` + fonctions `inject*()` —
|
|
33
|
+
* est celle qu'Angular emploie pour lui-même (`provideHttpClient`,
|
|
34
|
+
* `provideRouter`, `takeUntilDestroyed`) : du TypeScript ordinaire, que
|
|
35
|
+
* rolldown bâtit comme le reste, et une DI intacte.
|
|
36
|
+
* ⚠️ Cela ne restreint EN RIEN l'application : `@Component`, `@Injectable`,
|
|
37
|
+
* `@Directive` y sont compilés par le plugin Angular du builder Nodefony.
|
|
38
|
+
* Ces fonctions s'appellent depuis un composant ou un service décoré.
|
|
39
|
+
* 2. **Les écouteurs sont posés HORS ZONE.** Dans une application avec
|
|
40
|
+
* `zone.js`, `zone.js` remplace `WebSocket` pour savoir quand relancer la
|
|
41
|
+
* détection de changements : une socket ouverte dans la zone déclenche donc
|
|
42
|
+
* une détection **globale à chaque trame** — un canal à 10 Hz coûterait dix
|
|
43
|
+
* détections par seconde à TOUTE l'application, ce que la règle de
|
|
44
|
+
* performance du projet interdit. {@link provideNodefony} ouvre donc la
|
|
45
|
+
* connexion dans `NgZone.runOutsideAngular`. Les valeurs, elles, arrivent
|
|
46
|
+
* par des *signals*, qui notifient leurs lecteurs sans zone : juste dans les
|
|
47
|
+
* deux mondes, `zone.js` ou `provideZonelessChangeDetection()`.
|
|
48
|
+
* 3. **La libération passe par le contexte d'injection**, jamais par une valeur
|
|
49
|
+
* de retour : `DestroyRef` pour un abonnement fixe, le nettoyage d'`effect`
|
|
50
|
+
* pour un abonnement qui suit un signal. C'est le composant (ou le service)
|
|
51
|
+
* qui possède l'abonnement, et sa destruction le rend.
|
|
52
|
+
*
|
|
53
|
+
* `@angular/core` est une peerDep **optionnelle** : ce module n'est tiré que si
|
|
54
|
+
* on importe `nodefony/angular`.
|
|
55
|
+
*
|
|
56
|
+
* @example La page entière, en deux concepts :
|
|
57
|
+
* ```ts
|
|
58
|
+
* // main.ts
|
|
59
|
+
* bootstrapApplication(AppComponent, {
|
|
60
|
+
* providers: [provideNodefony({ url: "/api/live/realtime" })],
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
* ```ts
|
|
64
|
+
* // app.component.ts
|
|
65
|
+
* @Component({ selector: "app-root", template: `{{ etat() }}` })
|
|
66
|
+
* export class AppComponent {
|
|
67
|
+
* readonly etat = injectNodefonyState();
|
|
68
|
+
* readonly last = injectNodefonyChannelData<LiveEvent>("live:events");
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* @module nodefony/angular
|
|
73
|
+
*/
|
|
74
|
+
/**
|
|
75
|
+
* Le jeton sous lequel {@link provideNodefony} enregistre la socket.
|
|
76
|
+
*
|
|
77
|
+
* Exporté pour le cas légitime où un sous-arbre doit parler à une AUTRE socket
|
|
78
|
+
* que celle de l'application : le fournir à nouveau dans les `providers` d'un
|
|
79
|
+
* composant suffit, et les fonctions du sous-arbre suivent.
|
|
80
|
+
*/
|
|
81
|
+
const NODEFONY_CLIENT = new InjectionToken("nodefony:realtime");
|
|
82
|
+
/**
|
|
83
|
+
* Le fournisseur — à poser une fois, dans les `providers` de l'application.
|
|
84
|
+
*
|
|
85
|
+
* Il fait exactement deux choses : enregistrer la socket, et lancer la
|
|
86
|
+
* connexion **hors zone**. Il n'en coupe aucune : la connexion appartient à la
|
|
87
|
+
* PAGE, pas à un composant, et `disconnect()` tranche les requêtes en vol des
|
|
88
|
+
* autres consommateurs de la même socket partagée.
|
|
89
|
+
*
|
|
90
|
+
* La socket est résolue **immédiatement** (donc une adresse manquante est
|
|
91
|
+
* refusée à la construction des providers, pas à la première injection) ; la
|
|
92
|
+
* connexion, elle, n'est ouverte qu'au premier `inject`, et hors zone.
|
|
93
|
+
*
|
|
94
|
+
* @throws si ni `url` ni `client` n'est fourni — l'adresse dépend de
|
|
95
|
+
* l'application, et le framework n'en devine aucune (règle du socle : une
|
|
96
|
+
* adresse devinée marche en développement et se trompe en production).
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```ts
|
|
100
|
+
* bootstrapApplication(AppComponent, {
|
|
101
|
+
* providers: [
|
|
102
|
+
* provideZonelessChangeDetection(),
|
|
103
|
+
* provideNodefony({ url: "/api/live/realtime" }),
|
|
104
|
+
* ],
|
|
105
|
+
* });
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
function provideNodefony(options) {
|
|
109
|
+
const connection = connectShared(options);
|
|
110
|
+
return makeEnvironmentProviders([{
|
|
111
|
+
provide: NODEFONY_CLIENT,
|
|
112
|
+
useFactory: () => {
|
|
113
|
+
inject(NgZone).runOutsideAngular(() => {
|
|
114
|
+
connection.start();
|
|
115
|
+
});
|
|
116
|
+
return connection.socket;
|
|
117
|
+
}
|
|
118
|
+
}]);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* `injectNodefony()` — la socket brute (canaux, journal, statistiques…). Tête de
|
|
122
|
+
* gondole et échappatoire pour les cas avancés ; pour de l'état réactif, prendre
|
|
123
|
+
* les fonctions dédiées ci-dessous.
|
|
124
|
+
*
|
|
125
|
+
* @throws si {@link provideNodefony} n'est pas dans les `providers`. Le socle
|
|
126
|
+
* REFUSE de deviner une adresse : retomber ici sur une socket partagée
|
|
127
|
+
* fabriquée à la volée donnerait une page qui marche en développement et parle
|
|
128
|
+
* au mauvais hôte en production — mieux vaut une erreur au premier rendu.
|
|
129
|
+
*/
|
|
130
|
+
function injectNodefony() {
|
|
131
|
+
assertInInjectionContext(injectNodefony);
|
|
132
|
+
const client = inject(NODEFONY_CLIENT, { optional: true });
|
|
133
|
+
if (!client) throw new Error("injectNodefony() : provideNodefony() n'est pas dans les providers — bootstrapApplication(App, { providers: [provideNodefony({ url: \"/api/live/realtime\" })] }).");
|
|
134
|
+
return client;
|
|
135
|
+
}
|
|
136
|
+
/** Lit une source, qu'elle soit constante ou fonction. */
|
|
137
|
+
function read(source) {
|
|
138
|
+
return typeof source === "function" ? source() : source;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Le motif commun à toutes les fonctions d'abonnement : brancher, rebrancher
|
|
142
|
+
* quand la source change, libérer à la destruction.
|
|
143
|
+
*
|
|
144
|
+
* Deux chemins, et l'écart entre eux est voulu :
|
|
145
|
+
*
|
|
146
|
+
* - **source constante** → branchement direct + `DestroyRef`. Aucun `effect`
|
|
147
|
+
* n'est alloué pour une valeur qui ne bougera jamais (règle de performance du
|
|
148
|
+
* projet : pas de structure allouée « au cas où »).
|
|
149
|
+
* - **source fonction** → `effect`, dont la lecture TRACKÉE rebranche à chaque
|
|
150
|
+
* changement et dont le nettoyage rend l'abonnement précédent. `untracked`
|
|
151
|
+
* entoure le branchement : ce que le socle lirait par ailleurs ne doit pas
|
|
152
|
+
* devenir une dépendance de l'effet.
|
|
153
|
+
*/
|
|
154
|
+
function observeReactive(source, wire) {
|
|
155
|
+
if (typeof source !== "function") {
|
|
156
|
+
const release = wire(source);
|
|
157
|
+
inject(DestroyRef).onDestroy(release);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
effect((onCleanup) => {
|
|
161
|
+
const value = read(source);
|
|
162
|
+
onCleanup(untracked(() => wire(value)));
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* `injectNodefonyState()` — l'état de la connexion (`"connected"`,
|
|
167
|
+
* `"reconnecting"`, …), tenu à jour. Branché sur la porte publique `onState`,
|
|
168
|
+
* jamais sur le nom de l'événement local, qui n'a pas à sortir du client.
|
|
169
|
+
*/
|
|
170
|
+
function injectNodefonyState() {
|
|
171
|
+
assertInInjectionContext(injectNodefonyState);
|
|
172
|
+
const client = injectNodefony();
|
|
173
|
+
const state = signal(client.state);
|
|
174
|
+
observeReactive(client, (socket) => observeState(socket, (value) => state.set(value)));
|
|
175
|
+
return state.asReadonly();
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* `injectNodefonyIdentity()` — l'**identité résolue** de la connexion, annoncée
|
|
179
|
+
* par le serveur au `realtime:welcome` (`authenticated`, `roles`,
|
|
180
|
+
* `userIdentifier`, `scopes`). `null` tant qu'aucun welcome n'est arrivé ; une
|
|
181
|
+
* fois reçu, un visiteur anonyme a `authenticated: false`. Brique du gating
|
|
182
|
+
* front : `authenticated: false` → écran de connexion, **sans** appeler
|
|
183
|
+
* `/auth/me`.
|
|
184
|
+
*/
|
|
185
|
+
function injectNodefonyIdentity() {
|
|
186
|
+
assertInInjectionContext(injectNodefonyIdentity);
|
|
187
|
+
const client = injectNodefony();
|
|
188
|
+
const identity = signal(client.identity);
|
|
189
|
+
observeReactive(client, (socket) => observeIdentity(socket, (value) => identity.set(value)));
|
|
190
|
+
return identity.asReadonly();
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* `injectNodefonyChannel()` — s'abonne à un canal pub/sub : `onMessage` est
|
|
194
|
+
* appelé à chaque message. Le socle apparie `subscribe`/`unsubscribe` côté
|
|
195
|
+
* serveur (ref-comptés) et rejoue l'abonnement à chaque reconnexion.
|
|
196
|
+
*
|
|
197
|
+
* Le canal accepte un signal (ou toute fonction qui le lit) : l'abonnement suit
|
|
198
|
+
* alors la valeur, en libérant l'ancien avant de prendre le nouveau.
|
|
199
|
+
*/
|
|
200
|
+
function injectNodefonyChannel(channel, onMessage) {
|
|
201
|
+
assertInInjectionContext(injectNodefonyChannel);
|
|
202
|
+
const client = injectNodefony();
|
|
203
|
+
observeReactive(channel, (name) => observeChannel(client, name, onMessage));
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* `injectNodefonyChannelData()` — la **dernière valeur** reçue sur un canal (le
|
|
207
|
+
* cas le plus courant : la dernière mesure d'un flux d'état). `null` tant que
|
|
208
|
+
* rien n'est arrivé.
|
|
209
|
+
*/
|
|
210
|
+
function injectNodefonyChannelData(channel, initial = null) {
|
|
211
|
+
assertInInjectionContext(injectNodefonyChannelData);
|
|
212
|
+
const data = signal(initial);
|
|
213
|
+
injectNodefonyChannel(channel, (payload) => data.set(payload));
|
|
214
|
+
return data.asReadonly();
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* `injectNodefonyAdaptiveChannel()` — comme {@link injectNodefonyChannel}, mais
|
|
218
|
+
* en **cadence adaptative** (AIMD piloté par le client) : la cadence recule sous
|
|
219
|
+
* famine puis remonte quand c'est sain, sans rien changer au serveur. Renvoie la
|
|
220
|
+
* cadence effective, à afficher.
|
|
221
|
+
*
|
|
222
|
+
* Réservé aux canaux d'ÉTAT (latest-wins) : décimer un canal d'événements perd
|
|
223
|
+
* des messages.
|
|
224
|
+
*
|
|
225
|
+
* Le ré-abonnement suit {@link adaptiveRebindKey} — la MÊME clé que les trois
|
|
226
|
+
* autres liaisons, pour que les quatre rebranchent aux mêmes instants.
|
|
227
|
+
*/
|
|
228
|
+
function injectNodefonyAdaptiveChannel(base, onMessage, desiredMs, options = {}) {
|
|
229
|
+
assertInInjectionContext(injectNodefonyAdaptiveChannel);
|
|
230
|
+
const client = injectNodefony();
|
|
231
|
+
const cadence = signal(read(desiredMs));
|
|
232
|
+
const enabled = options.enabled !== false;
|
|
233
|
+
observeReactive(() => adaptiveRebindKey(read(base), read(desiredMs), enabled), () => {
|
|
234
|
+
const binding = client.adaptiveChannel(read(base), (...args) => onMessage(args[0]), {
|
|
235
|
+
...options,
|
|
236
|
+
intervalMs: read(desiredMs),
|
|
237
|
+
enabled,
|
|
238
|
+
onRate: (ms) => cadence.set(ms)
|
|
239
|
+
});
|
|
240
|
+
return () => binding.dispose();
|
|
241
|
+
});
|
|
242
|
+
return cadence.asReadonly();
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* `injectNodefonyAdaptiveChannelData()` — comme
|
|
246
|
+
* {@link injectNodefonyChannelData}, mais en cadence adaptative. Mince surcouche
|
|
247
|
+
* de {@link injectNodefonyAdaptiveChannel} : garde la dernière valeur et rend la
|
|
248
|
+
* cadence effective. Réservé aux canaux d'ÉTAT.
|
|
249
|
+
*/
|
|
250
|
+
function injectNodefonyAdaptiveChannelData(base, desiredMs, options = {}) {
|
|
251
|
+
assertInInjectionContext(injectNodefonyAdaptiveChannelData);
|
|
252
|
+
const data = signal(null);
|
|
253
|
+
const intervalMs = injectNodefonyAdaptiveChannel(base, (payload) => data.set(payload), desiredMs, options);
|
|
254
|
+
return {
|
|
255
|
+
data: data.asReadonly(),
|
|
256
|
+
intervalMs
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* `injectNodefonyChannelStats()` — statistiques vivantes d'un canal (débit,
|
|
261
|
+
* série pour un VU-mètre, total). La source est l'échantillonneur du client
|
|
262
|
+
* (1×/s) : aucune horloge n'est posée ici, et aucune trame n'est émise pour
|
|
263
|
+
* mesurer.
|
|
264
|
+
*/
|
|
265
|
+
function injectNodefonyChannelStats(channel) {
|
|
266
|
+
assertInInjectionContext(injectNodefonyChannelStats);
|
|
267
|
+
const client = injectNodefony();
|
|
268
|
+
const stats = signal(null);
|
|
269
|
+
observeReactive(channel, (name) => observeChannelStats(client, name, (value) => stats.set(value)));
|
|
270
|
+
return stats.asReadonly();
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* `injectNodefonySnapshot()` — ce que la socket sait d'ELLE-MÊME : état, canaux
|
|
274
|
+
* tenus, trames reçues, trames perdues, dernière trame. Rafraîchi par
|
|
275
|
+
* l'échantillonneur déjà en place — aucune horloge de plus.
|
|
276
|
+
*
|
|
277
|
+
* La donnée est au socle, la **boîte qui l'affiche** reste à chaque front :
|
|
278
|
+
* publier un composant obligerait à en écrire un par framework de vue, et ferait
|
|
279
|
+
* entrer du DOM dans un module dont toute la valeur est de n'en avoir aucun.
|
|
280
|
+
*/
|
|
281
|
+
function injectNodefonySnapshot() {
|
|
282
|
+
assertInInjectionContext(injectNodefonySnapshot);
|
|
283
|
+
const client = injectNodefony();
|
|
284
|
+
const snapshot = signal(null);
|
|
285
|
+
observeReactive(client, (socket) => observeSnapshot(socket, (value) => snapshot.set(value)));
|
|
286
|
+
return snapshot.asReadonly();
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* `injectNodefonySyslog()` — le flux du journal, prêt à afficher : anneau borné
|
|
290
|
+
* et filtre de sévérité. Le format **coalescé** du canal (`{ logs, dropped }`),
|
|
291
|
+
* l'entrée unique, la taille de l'anneau et le canal par défaut viennent du
|
|
292
|
+
* socle ({@link observeSyslog}) : cette fonction n'en connaît aucun.
|
|
293
|
+
*/
|
|
294
|
+
function injectNodefonySyslog(options = {}) {
|
|
295
|
+
assertInInjectionContext(injectNodefonySyslog);
|
|
296
|
+
const client = injectNodefony();
|
|
297
|
+
const lines = signal([]);
|
|
298
|
+
const wire = () => {
|
|
299
|
+
const o = read(options);
|
|
300
|
+
const settings = {
|
|
301
|
+
max: o.max,
|
|
302
|
+
severities: o.severities,
|
|
303
|
+
channel: o.channel
|
|
304
|
+
};
|
|
305
|
+
return observeSyslog(client, (entries) => lines.set(entries), settings);
|
|
306
|
+
};
|
|
307
|
+
observeReactive(typeof options === "function" ? () => {
|
|
308
|
+
const o = read(options);
|
|
309
|
+
return `${o.channel ?? ""}|${o.max ?? ""}|${(o.severities ?? []).join(",")}`;
|
|
310
|
+
} : "", wire);
|
|
311
|
+
return lines.asReadonly();
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* `injectNodefonyNotifications()` — le flux des **notices normalisées** du
|
|
315
|
+
* client : criticités qui cassent le temps réel (codes de fermeture RFC 6455
|
|
316
|
+
* interprétés), erreurs poussées par le serveur, rétablissement de connexion.
|
|
317
|
+
* `onNotice` est appelé pour CHAQUE notice → brancher un centre de
|
|
318
|
+
* notifications.
|
|
319
|
+
*
|
|
320
|
+
* À monter **une seule fois** (le shell de l'application), sans quoi la même
|
|
321
|
+
* notice s'affiche autant de fois qu'il y a d'appels.
|
|
322
|
+
*/
|
|
323
|
+
function injectNodefonyNotifications(onNotice) {
|
|
324
|
+
assertInInjectionContext(injectNodefonyNotifications);
|
|
325
|
+
observeReactive(injectNodefony(), (socket) => observeNotices(socket, onNotice));
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* `injectNodefonyNoticeLog()` — l'anneau borné des dernières notices, filtrable
|
|
329
|
+
* par source : un historique léger des criticités, distinct des notifications
|
|
330
|
+
* éphémères. La taille de l'anneau et le filtrage viennent du socle
|
|
331
|
+
* ({@link observeNoticeLog}).
|
|
332
|
+
*/
|
|
333
|
+
function injectNodefonyNoticeLog(options = {}) {
|
|
334
|
+
assertInInjectionContext(injectNodefonyNoticeLog);
|
|
335
|
+
const client = injectNodefony();
|
|
336
|
+
const notices = signal([]);
|
|
337
|
+
const wire = () => {
|
|
338
|
+
const o = read(options);
|
|
339
|
+
const settings = {
|
|
340
|
+
max: o.max,
|
|
341
|
+
sources: o.sources
|
|
342
|
+
};
|
|
343
|
+
return observeNoticeLog(client, (list) => notices.set(list), settings);
|
|
344
|
+
};
|
|
345
|
+
observeReactive(typeof options === "function" ? () => {
|
|
346
|
+
const o = read(options);
|
|
347
|
+
return `${o.max ?? ""}|${(o.sources ?? []).join(",")}`;
|
|
348
|
+
} : "", wire);
|
|
349
|
+
return notices.asReadonly();
|
|
350
|
+
}
|
|
351
|
+
//#endregion
|
|
352
|
+
export { NODEFONY_CLIENT, injectNodefony, injectNodefonyAdaptiveChannel, injectNodefonyAdaptiveChannelData, injectNodefonyChannel, injectNodefonyChannelData, injectNodefonyChannelStats, injectNodefonyIdentity, injectNodefonyNoticeLog, injectNodefonyNotifications, injectNodefonySnapshot, injectNodefonyState, injectNodefonySyslog, isRateChannel, parseRate, provideNodefony, rateChannel };
|