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,88 @@
|
|
|
1
|
+
//#region src/client/shim/events.ts
|
|
2
|
+
var EventEmitter = class {
|
|
3
|
+
_listeners = /* @__PURE__ */ new Map();
|
|
4
|
+
_maxListeners = 10;
|
|
5
|
+
on(event, fn) {
|
|
6
|
+
const arr = this._listeners.get(event) ?? [];
|
|
7
|
+
arr.push(fn);
|
|
8
|
+
this._listeners.set(event, arr);
|
|
9
|
+
return this;
|
|
10
|
+
}
|
|
11
|
+
addListener(event, fn) {
|
|
12
|
+
return this.on(event, fn);
|
|
13
|
+
}
|
|
14
|
+
once(event, fn) {
|
|
15
|
+
const wrapper = (...args) => {
|
|
16
|
+
this.off(event, wrapper);
|
|
17
|
+
fn(...args);
|
|
18
|
+
};
|
|
19
|
+
return this.on(event, wrapper);
|
|
20
|
+
}
|
|
21
|
+
off(event, fn) {
|
|
22
|
+
const arr = this._listeners.get(event);
|
|
23
|
+
if (!arr) return this;
|
|
24
|
+
const idx = arr.indexOf(fn);
|
|
25
|
+
if (idx !== -1) arr.splice(idx, 1);
|
|
26
|
+
if (arr.length === 0) this._listeners.delete(event);
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
removeListener(event, fn) {
|
|
30
|
+
return this.off(event, fn);
|
|
31
|
+
}
|
|
32
|
+
removeAllListeners(event) {
|
|
33
|
+
if (event === void 0) this._listeners.clear();
|
|
34
|
+
else this._listeners.delete(event);
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
emit(event, ...args) {
|
|
38
|
+
const arr = this._listeners.get(event);
|
|
39
|
+
if (!arr || arr.length === 0) return false;
|
|
40
|
+
for (const fn of arr.slice()) try {
|
|
41
|
+
fn(...args);
|
|
42
|
+
} catch (e) {
|
|
43
|
+
console.error("[EventEmitter] listener threw:", e);
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
listenerCount(event) {
|
|
48
|
+
return this._listeners.get(event)?.length ?? 0;
|
|
49
|
+
}
|
|
50
|
+
listeners(event) {
|
|
51
|
+
return (this._listeners.get(event) ?? []).slice();
|
|
52
|
+
}
|
|
53
|
+
eventNames() {
|
|
54
|
+
return Array.from(this._listeners.keys());
|
|
55
|
+
}
|
|
56
|
+
setMaxListeners(n) {
|
|
57
|
+
this._maxListeners = n;
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
getMaxListeners() {
|
|
61
|
+
return this._maxListeners;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Copie des listeners — ce shim ne wrappe pas distinctement les `once`, donc
|
|
65
|
+
* `rawListeners` ≡ {@link listeners}. Appelé par `Event.emitAsync` (hot path
|
|
66
|
+
* du bus async `fireAsync`) pour itérer les handlers sans muter la liste.
|
|
67
|
+
*/
|
|
68
|
+
rawListeners(event) {
|
|
69
|
+
return (this._listeners.get(event) ?? []).slice();
|
|
70
|
+
}
|
|
71
|
+
/** Comme {@link on} mais inséré en TÊTE de la liste des listeners. */
|
|
72
|
+
prependListener(event, fn) {
|
|
73
|
+
const arr = this._listeners.get(event) ?? [];
|
|
74
|
+
arr.unshift(fn);
|
|
75
|
+
this._listeners.set(event, arr);
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
/** Comme {@link once} mais inséré en TÊTE de la liste des listeners. */
|
|
79
|
+
prependOnceListener(event, fn) {
|
|
80
|
+
const wrapper = (...args) => {
|
|
81
|
+
this.off(event, wrapper);
|
|
82
|
+
fn(...args);
|
|
83
|
+
};
|
|
84
|
+
return this.prependListener(event, wrapper);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
//#endregion
|
|
88
|
+
export { EventEmitter, EventEmitter as default };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/client/shim/util.ts
|
|
2
|
+
/**
|
|
3
|
+
* Shim browser de `node:util` — fournit `inspect` via JSON.stringify.
|
|
4
|
+
* Suffisant pour la sortie Syslog côté browser (debug/log uniquement).
|
|
5
|
+
*/
|
|
6
|
+
const inspect = (obj, _opts) => {
|
|
7
|
+
try {
|
|
8
|
+
return JSON.stringify(obj, null, 2);
|
|
9
|
+
} catch {
|
|
10
|
+
return String(obj);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Shim browser de `util.styleText` — identité (le navigateur n'a pas de TTY
|
|
15
|
+
* ANSI). Consommé par la façade couleur `src/colors.ts` → jamais d'ANSI côté
|
|
16
|
+
* client (parité ancien shim `cli-color` identity Proxy).
|
|
17
|
+
*/
|
|
18
|
+
const styleText = (_format, text, _opts) => String(text);
|
|
19
|
+
//#endregion
|
|
20
|
+
export { inspect, styleText };
|
|
@@ -0,0 +1,319 @@
|
|
|
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 { createSubscriber } from "svelte/reactivity";
|
|
4
|
+
//#region src/client/svelte/index.ts
|
|
5
|
+
/**
|
|
6
|
+
* `nodefony/svelte` — liaisons **Svelte 5** du client temps réel isomorphe.
|
|
7
|
+
*
|
|
8
|
+
* Adapte le {@link RealtimeClient} (agnostique : `on()`/`emit()`/`state`) au
|
|
9
|
+
* système d'effets de Svelte, sans glue à recopier dans chaque application. Le
|
|
10
|
+
* pendant exact de `nodefony/react`, `nodefony/vue` et `nodefony/angular` :
|
|
11
|
+
* même surface, mêmes noms, mêmes garanties — seule la traduction 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
|
+
* → réactivité Svelte* — la seule chose qu'une liaison a le droit de contenir.
|
|
19
|
+
*
|
|
20
|
+
* Quatre particularités de Svelte que les trois autres fronts ne montrent pas :
|
|
21
|
+
*
|
|
22
|
+
* 1. **AUCUNE rune n'est publiée ici, et c'est délibéré.** `$state` et
|
|
23
|
+
* `$effect` sont des constructions du COMPILATEUR : elles n'existent que
|
|
24
|
+
* dans un fichier `.svelte` ou `.svelte.ts`. Les publier imposerait au
|
|
25
|
+
* consommateur de compiler notre code — or le plugin Svelte ne compile pas
|
|
26
|
+
* `node_modules` par défaut : il faudrait une condition d'export `svelte`,
|
|
27
|
+
* une chaîne `svelte-package`, et le paquet deviendrait sensible aux
|
|
28
|
+
* versions du compilateur. Pour un front sur quatre. La liaison passe donc
|
|
29
|
+
* par {@link createSubscriber} (`svelte/reactivity`), l'API publique faite
|
|
30
|
+
* exactement pour ça : elle intègre un objet ORDINAIRE — écrit en
|
|
31
|
+
* TypeScript, bâti par le même bundler que les trois autres subpaths — au
|
|
32
|
+
* système d'effets, sans qu'aucune rune ne vive dans la bibliothèque.
|
|
33
|
+
* 2. **Une valeur se lit `.current`**, jamais par appel : c'est le vocabulaire
|
|
34
|
+
* de Svelte 5 pour une source réactive externe (`MediaQuery.current`,
|
|
35
|
+
* `SvelteDate`…). Lu dans un template ou un `$effect`, il suit ; lu ailleurs,
|
|
36
|
+
* il rend l'instantané courant.
|
|
37
|
+
* 3. **🔴 L'abonnement est PARESSEUX, et c'est le seul écart de comportement
|
|
38
|
+
* entre les quatre fronts.** React, Vue et Angular s'abonnent au montage ;
|
|
39
|
+
* ici, l'abonnement n'est pris **qu'au premier `.current` lu dans un effet**,
|
|
40
|
+
* et il est rendu **quand tous les effets qui le lisaient sont détruits**.
|
|
41
|
+
* Une valeur créée mais jamais affichée ne s'abonne donc jamais. C'est le
|
|
42
|
+
* comportement des primitives réactives de Svelte lui-même, et il est
|
|
43
|
+
* mesuré : un composant qui ne lit rien ne produit aucune trame
|
|
44
|
+
* `subscribe`. Quand un abonnement doit être pris QUOI QU'IL ARRIVE — une
|
|
45
|
+
* présence, un effet de bord serveur —, prendre {@link nodefonyChannel}
|
|
46
|
+
* dans un `$effect` : cette forme-là n'est pas paresseuse.
|
|
47
|
+
* 4. **Un canal qui change ne laisse aucun trou** : le nouvel abonnement est
|
|
48
|
+
* pris AVANT que l'ancien soit rendu (`+b` puis `-a`), là où les liaisons à
|
|
49
|
+
* `watch`/`effect` des autres fronts libèrent d'abord. Rien à faire pour
|
|
50
|
+
* l'obtenir : c'est l'ordre du système d'effets de Svelte.
|
|
51
|
+
*
|
|
52
|
+
* `svelte` est une peerDep **optionnelle** : ce module n'est tiré que si on
|
|
53
|
+
* importe `nodefony/svelte`.
|
|
54
|
+
*
|
|
55
|
+
* @example La page entière, en deux concepts :
|
|
56
|
+
* ```ts
|
|
57
|
+
* // main.ts
|
|
58
|
+
* configureNodefony({ url: "/api/live/realtime" });
|
|
59
|
+
* mount(App, { target: el });
|
|
60
|
+
* ```
|
|
61
|
+
* ```svelte
|
|
62
|
+
* <script lang="ts">
|
|
63
|
+
* import { nodefonyState, nodefonyChannelData } from "nodefony/svelte";
|
|
64
|
+
* const etat = nodefonyState();
|
|
65
|
+
* const last = nodefonyChannelData<LiveEvent>("live:events");
|
|
66
|
+
* <\/script>
|
|
67
|
+
* <p>connexion : {etat.current}</p>
|
|
68
|
+
* {#if last.current}<p>{last.current.text}</p>{/if}
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* @module nodefony/svelte
|
|
72
|
+
*/
|
|
73
|
+
/** La socket de la page, posée par {@link configureNodefony}. */
|
|
74
|
+
let pageSocket = null;
|
|
75
|
+
/**
|
|
76
|
+
* Installe la politique temps réel de l'application — à appeler UNE fois, dans
|
|
77
|
+
* le point d'entrée, avant `mount()`.
|
|
78
|
+
*
|
|
79
|
+
* Svelte n'a pas de contexte applicatif comparable à React : `setContext` ne se
|
|
80
|
+
* pose qu'à l'initialisation d'un composant, et ne couvrirait donc pas les
|
|
81
|
+
* liaisons appelées ailleurs. La politique s'écrit ici comme ce qu'elle est en
|
|
82
|
+
* Svelte : une configuration de module.
|
|
83
|
+
*
|
|
84
|
+
* Elle ne coupe aucune connexion : la connexion appartient à la PAGE, pas à un
|
|
85
|
+
* composant, et `disconnect()` tranche les requêtes en vol des autres
|
|
86
|
+
* consommateurs de la même socket partagée.
|
|
87
|
+
*
|
|
88
|
+
* @throws si ni `url` ni `client` n'est fourni — l'adresse dépend de
|
|
89
|
+
* l'application, et le framework n'en devine aucune (règle du socle : une
|
|
90
|
+
* adresse devinée marche en développement et se trompe en production).
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* configureNodefony({ url: "/api/live/realtime" });
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
function configureNodefony(options) {
|
|
98
|
+
const connection = connectShared(options);
|
|
99
|
+
pageSocket = connection.socket;
|
|
100
|
+
connection.start();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* `nodefony()` — la socket brute (canaux, journal, statistiques…). Tête de
|
|
104
|
+
* gondole et échappatoire pour les cas avancés ; pour de l'état réactif, prendre
|
|
105
|
+
* les liaisons dédiées ci-dessous.
|
|
106
|
+
*
|
|
107
|
+
* @throws si {@link configureNodefony} n'a pas été appelé. Le socle REFUSE de
|
|
108
|
+
* deviner une adresse : retomber ici sur une socket partagée fabriquée à la
|
|
109
|
+
* volée donnerait une page qui marche en développement et parle au mauvais
|
|
110
|
+
* hôte en production — mieux vaut une erreur au premier rendu.
|
|
111
|
+
*/
|
|
112
|
+
function nodefony() {
|
|
113
|
+
if (!pageSocket) throw new Error("nodefony() : configureNodefony() n'a pas été appelé — configureNodefony({ url: \"/api/live/realtime\" }) dans main.ts, avant mount().");
|
|
114
|
+
return pageSocket;
|
|
115
|
+
}
|
|
116
|
+
/** Lit une source, qu'elle soit constante ou fonction. */
|
|
117
|
+
function read(source) {
|
|
118
|
+
return typeof source === "function" ? source() : source;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Le motif commun à toutes les valeurs : brancher au premier lecteur, tenir la
|
|
122
|
+
* dernière valeur reçue, libérer quand plus personne ne lit.
|
|
123
|
+
*
|
|
124
|
+
* `createSubscriber` porte tout le cycle : son `start` n'est appelé qu'au
|
|
125
|
+
* premier `.current` lu dans un effet, une seule fois quels que soient le
|
|
126
|
+
* nombre d'effets lecteurs, et la fonction qu'il rend est appelée quand le
|
|
127
|
+
* dernier d'entre eux est détruit. C'est ce qui donne la libération sans une
|
|
128
|
+
* ligne de `onDestroy` — et c'est aussi ce qui rend l'abonnement paresseux.
|
|
129
|
+
*/
|
|
130
|
+
function observedValue(initial, wire) {
|
|
131
|
+
let value = initial;
|
|
132
|
+
const subscribe = createSubscriber((update) => wire((v) => {
|
|
133
|
+
value = v;
|
|
134
|
+
update();
|
|
135
|
+
}));
|
|
136
|
+
return { get current() {
|
|
137
|
+
subscribe();
|
|
138
|
+
return value;
|
|
139
|
+
} };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* `nodefonyState()` — l'état de la connexion (`"connected"`, `"reconnecting"`,
|
|
143
|
+
* …), tenu à jour. Branché sur la porte publique `onState`, jamais sur le nom
|
|
144
|
+
* de l'événement local, qui n'a pas à sortir du client.
|
|
145
|
+
*/
|
|
146
|
+
function nodefonyState() {
|
|
147
|
+
const client = nodefony();
|
|
148
|
+
return observedValue(client.state, (emit) => observeState(client, emit));
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* `nodefonyIdentity()` — l'**identité résolue** de la connexion, annoncée par le
|
|
152
|
+
* serveur au `realtime:welcome` (`authenticated`, `roles`, `userIdentifier`,
|
|
153
|
+
* `scopes`). `null` tant qu'aucun welcome n'est arrivé ; une fois reçu, un
|
|
154
|
+
* visiteur anonyme a `authenticated: false`. Brique du gating front :
|
|
155
|
+
* `authenticated: false` → écran de connexion, **sans** appeler `/auth/me`.
|
|
156
|
+
*/
|
|
157
|
+
function nodefonyIdentity() {
|
|
158
|
+
const client = nodefony();
|
|
159
|
+
return observedValue(client.identity, (emit) => observeIdentity(client, emit));
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* `nodefonyChannel()` — s'abonne à un canal pub/sub : `onMessage` est appelé à
|
|
163
|
+
* chaque message. Le socle apparie `subscribe`/`unsubscribe` côté serveur
|
|
164
|
+
* (ref-comptés) et rejoue l'abonnement à chaque reconnexion.
|
|
165
|
+
*
|
|
166
|
+
* **C'est la forme NON paresseuse** : elle rend son propre teardown, ce que
|
|
167
|
+
* `$effect` attend, et l'abonnement est donc pris que la valeur soit affichée
|
|
168
|
+
* ou non.
|
|
169
|
+
*
|
|
170
|
+
* @example
|
|
171
|
+
* ```svelte
|
|
172
|
+
* $effect(() => nodefonyChannel("live:salon", (m) => messages.push(m)));
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
function nodefonyChannel(channel, onMessage) {
|
|
176
|
+
return observeChannel(nodefony(), read(channel), onMessage);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* `nodefonyChannelData()` — la **dernière valeur** reçue sur un canal (le cas le
|
|
180
|
+
* plus courant : la dernière mesure d'un flux d'état). `null` tant que rien
|
|
181
|
+
* n'est arrivé.
|
|
182
|
+
*
|
|
183
|
+
* Le canal accepte une fonction : donnée dans un `$derived`, elle fait suivre
|
|
184
|
+
* l'abonnement — et le nouveau canal est pris AVANT que l'ancien soit rendu.
|
|
185
|
+
*/
|
|
186
|
+
function nodefonyChannelData(channel, initial = null) {
|
|
187
|
+
const client = nodefony();
|
|
188
|
+
return observedValue(initial, (emit) => observeChannel(client, read(channel), (payload) => emit(payload)));
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* `nodefonyAdaptiveChannel()` — comme {@link nodefonyChannel}, mais en **cadence
|
|
192
|
+
* adaptative** (AIMD piloté par le client) : la cadence recule sous famine puis
|
|
193
|
+
* remonte quand c'est sain, sans rien changer au serveur.
|
|
194
|
+
*
|
|
195
|
+
* Réservé aux canaux d'ÉTAT (latest-wins) : décimer un canal d'événements perd
|
|
196
|
+
* des messages.
|
|
197
|
+
*
|
|
198
|
+
* Comme {@link nodefonyChannel}, rend son teardown — forme non paresseuse, à
|
|
199
|
+
* donner à `$effect`. La cadence effective est poussée par `onRate` ; pour
|
|
200
|
+
* l'AFFICHER, prendre {@link nodefonyAdaptiveChannelData}, qui la rend réactive.
|
|
201
|
+
*
|
|
202
|
+
* Le ré-abonnement suit {@link adaptiveRebindKey} — la MÊME clé que les trois
|
|
203
|
+
* autres liaisons, pour que les quatre rebranchent aux mêmes instants.
|
|
204
|
+
*/
|
|
205
|
+
function nodefonyAdaptiveChannel(base, onMessage, desiredMs, options = {}) {
|
|
206
|
+
const { onRate, ...rest } = options;
|
|
207
|
+
const binding = nodefony().adaptiveChannel(read(base), (...args) => onMessage(args[0]), {
|
|
208
|
+
...rest,
|
|
209
|
+
intervalMs: read(desiredMs),
|
|
210
|
+
enabled: rest.enabled !== false,
|
|
211
|
+
onRate
|
|
212
|
+
});
|
|
213
|
+
return () => binding.dispose();
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* `nodefonyAdaptiveChannelData()` — comme {@link nodefonyChannelData}, mais en
|
|
217
|
+
* cadence adaptative. Rend la dernière valeur **et** la cadence effective, les
|
|
218
|
+
* deux réactives. Réservé aux canaux d'ÉTAT.
|
|
219
|
+
*
|
|
220
|
+
* La clé de ré-abonnement est {@link adaptiveRebindKey} : lue à chaque
|
|
221
|
+
* branchement, elle fait suivre l'abonnement quand la base, la cadence désirée
|
|
222
|
+
* ou l'activation changent — et pas quand autre chose bouge.
|
|
223
|
+
*/
|
|
224
|
+
function nodefonyAdaptiveChannelData(base, desiredMs, options = {}) {
|
|
225
|
+
const client = nodefony();
|
|
226
|
+
const enabled = options.enabled !== false;
|
|
227
|
+
let setCadence = null;
|
|
228
|
+
return {
|
|
229
|
+
data: observedValue(null, (emit) => {
|
|
230
|
+
adaptiveRebindKey(read(base), read(desiredMs), enabled);
|
|
231
|
+
const binding = client.adaptiveChannel(read(base), (...args) => emit(args[0]), {
|
|
232
|
+
...options,
|
|
233
|
+
intervalMs: read(desiredMs),
|
|
234
|
+
enabled,
|
|
235
|
+
onRate: (ms) => setCadence?.(ms)
|
|
236
|
+
});
|
|
237
|
+
return () => binding.dispose();
|
|
238
|
+
}),
|
|
239
|
+
intervalMs: observedValue(read(desiredMs), (emit) => {
|
|
240
|
+
setCadence = emit;
|
|
241
|
+
return () => {
|
|
242
|
+
setCadence = null;
|
|
243
|
+
};
|
|
244
|
+
})
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* `nodefonyChannelStats()` — statistiques vivantes d'un canal (débit, série pour
|
|
249
|
+
* un VU-mètre, total). La source est l'échantillonneur du client (1×/s) : aucune
|
|
250
|
+
* horloge n'est posée ici, et aucune trame n'est émise pour mesurer.
|
|
251
|
+
*/
|
|
252
|
+
function nodefonyChannelStats(channel) {
|
|
253
|
+
const client = nodefony();
|
|
254
|
+
return observedValue(null, (emit) => observeChannelStats(client, read(channel), emit));
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* `nodefonySnapshot()` — ce que la socket sait d'ELLE-MÊME : état, canaux tenus,
|
|
258
|
+
* trames reçues, trames perdues, dernière trame. Rafraîchi par
|
|
259
|
+
* l'échantillonneur déjà en place — aucune horloge de plus.
|
|
260
|
+
*
|
|
261
|
+
* La donnée est au socle, la **boîte qui l'affiche** reste à chaque front :
|
|
262
|
+
* publier un composant obligerait à en écrire un par framework de vue, et ferait
|
|
263
|
+
* entrer du DOM dans un module dont toute la valeur est de n'en avoir aucun.
|
|
264
|
+
*/
|
|
265
|
+
function nodefonySnapshot() {
|
|
266
|
+
const client = nodefony();
|
|
267
|
+
return observedValue(null, (emit) => observeSnapshot(client, emit));
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* `nodefonySyslog()` — le flux du journal, prêt à afficher : anneau borné et
|
|
271
|
+
* filtre de sévérité. Le format **coalescé** du canal (`{ logs, dropped }`),
|
|
272
|
+
* l'entrée unique, la taille de l'anneau et le canal par défaut viennent du
|
|
273
|
+
* socle ({@link observeSyslog}) : cette liaison n'en connaît aucun.
|
|
274
|
+
*/
|
|
275
|
+
function nodefonySyslog(options = {}) {
|
|
276
|
+
const client = nodefony();
|
|
277
|
+
return observedValue([], (emit) => {
|
|
278
|
+
const o = read(options);
|
|
279
|
+
const settings = {
|
|
280
|
+
max: o.max,
|
|
281
|
+
severities: o.severities,
|
|
282
|
+
channel: o.channel
|
|
283
|
+
};
|
|
284
|
+
return observeSyslog(client, emit, settings);
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* `nodefonyNotifications()` — le flux des **notices normalisées** du client :
|
|
289
|
+
* criticités qui cassent le temps réel (codes de fermeture RFC 6455
|
|
290
|
+
* interprétés), erreurs poussées par le serveur, rétablissement de connexion.
|
|
291
|
+
* `onNotice` est appelé pour CHAQUE notice → brancher un centre de
|
|
292
|
+
* notifications.
|
|
293
|
+
*
|
|
294
|
+
* Forme non paresseuse (elle rend son teardown), à monter **une seule fois**
|
|
295
|
+
* dans le shell de l'application : sans quoi la même notice s'affiche autant de
|
|
296
|
+
* fois qu'il y a d'appels.
|
|
297
|
+
*/
|
|
298
|
+
function nodefonyNotifications(onNotice) {
|
|
299
|
+
return observeNotices(nodefony(), onNotice);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* `nodefonyNoticeLog()` — l'anneau borné des dernières notices, filtrable par
|
|
303
|
+
* source : un historique léger des criticités, distinct des notifications
|
|
304
|
+
* éphémères. La taille de l'anneau et le filtrage viennent du socle
|
|
305
|
+
* ({@link observeNoticeLog}).
|
|
306
|
+
*/
|
|
307
|
+
function nodefonyNoticeLog(options = {}) {
|
|
308
|
+
const client = nodefony();
|
|
309
|
+
return observedValue([], (emit) => {
|
|
310
|
+
const o = read(options);
|
|
311
|
+
const settings = {
|
|
312
|
+
max: o.max,
|
|
313
|
+
sources: o.sources
|
|
314
|
+
};
|
|
315
|
+
return observeNoticeLog(client, emit, settings);
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
//#endregion
|
|
319
|
+
export { configureNodefony, isRateChannel, nodefony, nodefonyAdaptiveChannel, nodefonyAdaptiveChannelData, nodefonyChannel, nodefonyChannelData, nodefonyChannelStats, nodefonyIdentity, nodefonyNoticeLog, nodefonyNotifications, nodefonySnapshot, nodefonyState, nodefonySyslog, parseRate, rateChannel };
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import Pdu from "../../syslog/Pdu.js";
|
|
2
|
+
//#region src/client/syslog/context.ts
|
|
3
|
+
/**
|
|
4
|
+
* Identités de corrélation **côté navigateur** — ce que le pod pourra recouper quand
|
|
5
|
+
* il recevra un journal venu d'un onglet.
|
|
6
|
+
*
|
|
7
|
+
* Le navigateur n'a pas d'`AsyncLocalStorage` : une erreur JavaScript ne survient dans
|
|
8
|
+
* aucune bulle de requête. « Le `requestId` de la requête qui l'a précédée » n'existe
|
|
9
|
+
* donc pas — deux `fetch` concurrents suffisent à attribuer l'erreur à la mauvaise, et
|
|
10
|
+
* un journal qui ment sur la corrélation coûte plus cher qu'un journal sans corrélation.
|
|
11
|
+
*
|
|
12
|
+
* D'où deux identités séparées, chacune honnête sur ce qu'elle sait :
|
|
13
|
+
*
|
|
14
|
+
* - {@link getPageId} — **toujours** disponible, généré une fois par chargement de page.
|
|
15
|
+
* C'est lui qui relie entre elles toutes les lignes d'un même onglet. Sans lui, le pod
|
|
16
|
+
* reçoit des lignes orphelines qu'aucun écran ne peut regrouper.
|
|
17
|
+
* - {@link withRequestId} — pose un `requestId` **seulement là où il est SU** : dans le
|
|
18
|
+
* code qui traite une réponse dont on a lu l'en-tête `x-request-id`. Hors de cette
|
|
19
|
+
* portée, aucun `requestId` n'est attaché. Rien n'est deviné.
|
|
20
|
+
*
|
|
21
|
+
* Coût quand personne ne s'en sert : une variable à `undefined` et un test de référence
|
|
22
|
+
* par `Pdu` (le provider n'est même pas branché tant que {@link installRequestIdProvider}
|
|
23
|
+
* n'a pas été appelé).
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Identifiant de CE chargement de page. Alloué au premier appel seulement — une page
|
|
27
|
+
* qui ne journalise jamais rien ne paie pas l'UUID.
|
|
28
|
+
*/
|
|
29
|
+
let _pageId = null;
|
|
30
|
+
/** Requête dont on traite la réponse, `undefined` hors de {@link withRequestId}. */
|
|
31
|
+
let _currentRequestId;
|
|
32
|
+
/** Restaure le provider d'origine au retrait, ou `null` s'il n'y en avait pas. */
|
|
33
|
+
let _previousProvider = null;
|
|
34
|
+
let _installed = false;
|
|
35
|
+
/**
|
|
36
|
+
* Identifiant stable de ce chargement de page (UUID v4), généré à la demande.
|
|
37
|
+
*
|
|
38
|
+
* Il change à chaque rechargement — c'est voulu : il désigne une **session d'onglet**,
|
|
39
|
+
* pas un utilisateur. Rien d'identifiant personnel ne doit y être mêlé.
|
|
40
|
+
*
|
|
41
|
+
* @returns l'identifiant de page, constant pour la durée du document.
|
|
42
|
+
*/
|
|
43
|
+
function getPageId() {
|
|
44
|
+
if (_pageId === null) _pageId = globalThis.crypto.randomUUID();
|
|
45
|
+
return _pageId;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Exécute `fn` en déclarant que ce qu'elle journalise appartient à la requête `requestId`.
|
|
49
|
+
*
|
|
50
|
+
* La portée est le **tick synchrone** de `fn`, et rien de plus : après un `await`, la
|
|
51
|
+
* bulle est refermée. C'est une limite assumée, pas un défaut — le navigateur n'offre
|
|
52
|
+
* aucun moyen de propager un contexte à travers l'asynchrone, et l'alternative (« le
|
|
53
|
+
* dernier `requestId` vu ») fabriquerait de fausses corrélations.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* const res = await fetch("/api/orders");
|
|
58
|
+
* const rid = res.headers.get("x-request-id") ?? undefined;
|
|
59
|
+
* withRequestId(rid, () => {
|
|
60
|
+
* syslog.log("commande refusée", "ERROR", "checkout");
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @param requestId - la requête connue, ou `undefined` pour n'en attacher aucune.
|
|
65
|
+
* @param fn - le travail à exécuter dans cette portée.
|
|
66
|
+
* @returns ce que `fn` renvoie.
|
|
67
|
+
*/
|
|
68
|
+
function withRequestId(requestId, fn) {
|
|
69
|
+
const previous = _currentRequestId;
|
|
70
|
+
_currentRequestId = requestId;
|
|
71
|
+
try {
|
|
72
|
+
return fn();
|
|
73
|
+
} finally {
|
|
74
|
+
_currentRequestId = previous;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* `requestId` de la portée courante, `undefined` en dehors de {@link withRequestId}.
|
|
79
|
+
*
|
|
80
|
+
* @returns l'identifiant de requête su à cet instant, jamais deviné.
|
|
81
|
+
*/
|
|
82
|
+
function getCurrentRequestId() {
|
|
83
|
+
return _currentRequestId;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Branche {@link getCurrentRequestId} sur `Pdu.requestIdProvider`, de sorte que tout
|
|
87
|
+
* `Pdu` créé dans une portée {@link withRequestId} porte son `requestId` — le même champ
|
|
88
|
+
* que côté serveur, donc la même clé de recoupement, sans qu'aucun appelant ait à le
|
|
89
|
+
* répéter.
|
|
90
|
+
*
|
|
91
|
+
* Idempotent. Le provider d'origine (il n'y en a pas côté navigateur, mais un test peut
|
|
92
|
+
* en poser un) est restauré au retrait.
|
|
93
|
+
*
|
|
94
|
+
* @returns la fonction de retrait — à appeler au démontage.
|
|
95
|
+
*/
|
|
96
|
+
function installRequestIdProvider() {
|
|
97
|
+
if (_installed) return () => {};
|
|
98
|
+
_installed = true;
|
|
99
|
+
_previousProvider = Pdu.requestIdProvider;
|
|
100
|
+
Pdu.requestIdProvider = getCurrentRequestId;
|
|
101
|
+
return () => {
|
|
102
|
+
if (!_installed) return;
|
|
103
|
+
_installed = false;
|
|
104
|
+
Pdu.requestIdProvider = _previousProvider;
|
|
105
|
+
_previousProvider = null;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Remet le module à son état initial — réservé aux tests, qui doivent pouvoir repartir
|
|
110
|
+
* d'une page « neuve » sans recharger un document.
|
|
111
|
+
*/
|
|
112
|
+
function resetClientLogContext() {
|
|
113
|
+
_pageId = null;
|
|
114
|
+
_currentRequestId = void 0;
|
|
115
|
+
if (_installed) {
|
|
116
|
+
Pdu.requestIdProvider = _previousProvider;
|
|
117
|
+
_previousProvider = null;
|
|
118
|
+
_installed = false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//#endregion
|
|
122
|
+
export { getCurrentRequestId, getPageId, installRequestIdProvider, resetClientLogContext, withRequestId };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
//#region src/client/syslog/errors.ts
|
|
2
|
+
/** Catégorie par défaut d'une exception non rattrapée. */
|
|
3
|
+
const BROWSER_ERROR_MSGID = "BROWSER_ERROR";
|
|
4
|
+
/** Catégorie d'une promesse rejetée sans `catch`. */
|
|
5
|
+
const BROWSER_REJECTION_MSGID = "BROWSER_REJECTION";
|
|
6
|
+
/**
|
|
7
|
+
* Installe la capture des erreurs globales du navigateur.
|
|
8
|
+
*
|
|
9
|
+
* No-op hors navigateur (rendu serveur, test Node sans DOM) : le contrat isomorphe veut
|
|
10
|
+
* qu'un code client puisse être chargé des deux côtés sans garde chez l'appelant.
|
|
11
|
+
*
|
|
12
|
+
* @param opts - journal cible et bornes.
|
|
13
|
+
* @returns la fonction de retrait — retire les deux écouteurs.
|
|
14
|
+
*/
|
|
15
|
+
function installErrorCapture(opts) {
|
|
16
|
+
if (typeof window === "undefined") return () => {};
|
|
17
|
+
const { syslog, msgid = BROWSER_ERROR_MSGID, dedupeMs = 1e3 } = opts;
|
|
18
|
+
let lastKey = null;
|
|
19
|
+
let lastAt = 0;
|
|
20
|
+
/** Vrai si cette erreur répète la précédente dans la fenêtre — donc à taire. */
|
|
21
|
+
const isRepeat = (key) => {
|
|
22
|
+
if (dedupeMs <= 0) return false;
|
|
23
|
+
const now = Date.now();
|
|
24
|
+
if (key === lastKey && now - lastAt < dedupeMs) return true;
|
|
25
|
+
lastKey = key;
|
|
26
|
+
lastAt = now;
|
|
27
|
+
return false;
|
|
28
|
+
};
|
|
29
|
+
const onError = (event) => {
|
|
30
|
+
const source = event.filename !== void 0 && event.filename !== "" ? `${event.filename}:${event.lineno}:${event.colno}` : void 0;
|
|
31
|
+
const key = `error|${event.message}|${source ?? ""}`;
|
|
32
|
+
if (isRepeat(key)) return;
|
|
33
|
+
syslog.log(event.error ?? event.message, "ERROR", msgid, source ?? "");
|
|
34
|
+
};
|
|
35
|
+
const onRejection = (event) => {
|
|
36
|
+
const reason = event.reason;
|
|
37
|
+
const key = `rejection|${reason instanceof Error ? reason.message : String(reason)}`;
|
|
38
|
+
if (isRepeat(key)) return;
|
|
39
|
+
syslog.log(reason, "ERROR", BROWSER_REJECTION_MSGID, "");
|
|
40
|
+
};
|
|
41
|
+
window.addEventListener("error", onError);
|
|
42
|
+
window.addEventListener("unhandledrejection", onRejection);
|
|
43
|
+
return () => {
|
|
44
|
+
window.removeEventListener("error", onError);
|
|
45
|
+
window.removeEventListener("unhandledrejection", onRejection);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { BROWSER_ERROR_MSGID, BROWSER_REJECTION_MSGID, installErrorCapture };
|