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,423 @@
|
|
|
1
|
+
//#region src/config/envOverride.ts
|
|
2
|
+
/**
|
|
3
|
+
* Override générique de configuration par variable d'environnement (ADR-0006 D3).
|
|
4
|
+
*
|
|
5
|
+
* Forme : `NF__<MODULE>__<CHEMIN…>=valeur`. Le **double underscore `__`** sépare
|
|
6
|
+
* les niveaux (choix .NET Core / Docker — explicite, sans ambiguïté avec le
|
|
7
|
+
* camelCase). Le 1ᵉʳ segment = le module (`SECURITY` → `@nodefony/security`), les
|
|
8
|
+
* suivants = le chemin dans sa config. Les segments sont **insensibles à la casse**
|
|
9
|
+
* et résolus contre les clés RÉELLES de la config (`ACCESSTTLS` → `accessTtlS`).
|
|
10
|
+
*
|
|
11
|
+
* Précédence (cf ADR-0006 D5) : appliqué APRÈS le merge de l'app (`use()` /
|
|
12
|
+
* `module-<name>`) et AVANT la validation Zod du module → le schéma valide/rejette
|
|
13
|
+
* la valeur surchargée (fail-closed). Résolu **1× au boot** (hors hot path).
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```bash
|
|
17
|
+
* NF__SECURITY__JWT__ACCESSTTLS=300
|
|
18
|
+
* NF__HTTP__SERVERS__HTTPS__PORT=8443
|
|
19
|
+
* NF__SECURITY__CORS__ORIGINS=https://a.com,https://b.com # CSV → array
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
/** Préfixe d'un override générique (double underscore). */
|
|
23
|
+
const NF_PREFIX = "NF__";
|
|
24
|
+
/**
|
|
25
|
+
* Coerce une valeur d'environnement (toujours une chaîne) vers son type probable.
|
|
26
|
+
*
|
|
27
|
+
* Coercion **explicite** (le piège `z.coerce.boolean("false") === true` est évité) :
|
|
28
|
+
* `"true"/"false"` → booléen ; entier/décimal → nombre ; `[…]`/`{…}` → JSON ;
|
|
29
|
+
* une chaîne contenant `,` → tableau de chaînes (CSV) ; sinon la chaîne brute.
|
|
30
|
+
*
|
|
31
|
+
* @param raw - valeur brute de la variable d'environnement.
|
|
32
|
+
* @returns la valeur typée.
|
|
33
|
+
*/
|
|
34
|
+
function coerceEnvValue(raw) {
|
|
35
|
+
const v = raw.trim();
|
|
36
|
+
if (v === "true") return true;
|
|
37
|
+
if (v === "false") return false;
|
|
38
|
+
if (/^-?\d+(\.\d+)?$/.test(v)) return Number(v);
|
|
39
|
+
if (v.startsWith("[") && v.endsWith("]") || v.startsWith("{") && v.endsWith("}")) try {
|
|
40
|
+
return JSON.parse(v);
|
|
41
|
+
} catch {}
|
|
42
|
+
if (v.includes(",")) return v.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
|
|
43
|
+
return v;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Scanne `env` et extrait tous les overrides `NF__<MODULE>__<CHEMIN…>`.
|
|
47
|
+
*
|
|
48
|
+
* Ignore les clés sans au moins un module + un champ (`NF__X` seul), et les
|
|
49
|
+
* valeurs `undefined`. Ne touche PAS `env` (lecture seule).
|
|
50
|
+
*
|
|
51
|
+
* @param env - source d'environnement (typiquement `process.env`).
|
|
52
|
+
* @returns la liste des overrides résolus (vide si aucun).
|
|
53
|
+
*/
|
|
54
|
+
function parseNfEnvOverrides(env) {
|
|
55
|
+
const out = [];
|
|
56
|
+
for (const envKey in env) {
|
|
57
|
+
if (!envKey.startsWith(NF_PREFIX)) continue;
|
|
58
|
+
const segs = envKey.slice(4).split("__").filter((s) => s.length > 0);
|
|
59
|
+
if (segs.length < 2) continue;
|
|
60
|
+
const raw = env[envKey];
|
|
61
|
+
if (raw === void 0) continue;
|
|
62
|
+
const [moduleSeg, ...path] = segs;
|
|
63
|
+
out.push({
|
|
64
|
+
envKey,
|
|
65
|
+
moduleSeg: moduleSeg.toLowerCase(),
|
|
66
|
+
path: path.map((s) => s.toLowerCase()),
|
|
67
|
+
value: coerceEnvValue(raw),
|
|
68
|
+
raw
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Les écritures d'un booléen qu'un environnement produit réellement.
|
|
75
|
+
*
|
|
76
|
+
* `1`/`0` d'abord, parce que c'est la forme naturelle en shell, en Docker et en
|
|
77
|
+
* manifeste k8s — et celle qui cassait le boot. `on`/`off` et `yes`/`no` sont la
|
|
78
|
+
* même intention écrite autrement ; les refuser obligerait l'utilisateur à
|
|
79
|
+
* deviner laquelle des trois formes son framework accepte.
|
|
80
|
+
*/
|
|
81
|
+
const BOOLEANS_TRUE = /* @__PURE__ */ new Set([
|
|
82
|
+
"true",
|
|
83
|
+
"1",
|
|
84
|
+
"yes",
|
|
85
|
+
"on"
|
|
86
|
+
]);
|
|
87
|
+
const BOOLEANS_FALSE = /* @__PURE__ */ new Set([
|
|
88
|
+
"false",
|
|
89
|
+
"0",
|
|
90
|
+
"no",
|
|
91
|
+
"off"
|
|
92
|
+
]);
|
|
93
|
+
/**
|
|
94
|
+
* La valeur d'environnement convertie vers le type de ce qu'elle REMPLACE.
|
|
95
|
+
*
|
|
96
|
+
* Une variable d'environnement est toujours une chaîne ; seul le schéma sait ce
|
|
97
|
+
* qu'il attend. {@link coerceEnvValue} devine sans lui, et sa devinette rendait
|
|
98
|
+
* un type FAUX que la validation Zod refusait ensuite : `NF__HTTP__TRUSTPROXY=1`
|
|
99
|
+
* donnait `Number(1)`, qu'aucun membre de `z.union([boolean, string, array])`
|
|
100
|
+
* n'accepte — une variable DOCUMENTÉE faisait échouer le boot, à rebours du
|
|
101
|
+
* 12-factor que l'ADR-0006 revendique.
|
|
102
|
+
*
|
|
103
|
+
* L'information manquante est pourtant à portée : la config porte déjà le
|
|
104
|
+
* DÉFAUT du schéma à cet endroit, et son type dit ce qui est attendu.
|
|
105
|
+
*
|
|
106
|
+
* ⚠️ **Le type existant ORIENTE, il ne décide pas.** Convertir aveuglément vers
|
|
107
|
+
* le type de la valeur remplacée serait une faille : `trustProxy` a pour défaut
|
|
108
|
+
* `false` mais accepte aussi une CIDR, et `10.0.0.0/8` deviendrait `true`,
|
|
109
|
+
* c'est-à-dire une confiance TOTALE envers les `X-Forwarded-*`. Seuls des
|
|
110
|
+
* littéraux booléens reconnus sont convertis ; tout le reste retombe sur la
|
|
111
|
+
* devinette, qui garde la chaîne.
|
|
112
|
+
*
|
|
113
|
+
* Les cibles NON ambiguës (nombre, tableau, objet, valeur absente) gardent la
|
|
114
|
+
* devinette : elle y est juste, et le CSV → tableau documenté en dépend.
|
|
115
|
+
*
|
|
116
|
+
* @param raw - la chaîne brute de la variable d'environnement.
|
|
117
|
+
* @param existing - la valeur actuellement en place (le défaut du schéma).
|
|
118
|
+
* @returns la valeur à poser.
|
|
119
|
+
*/
|
|
120
|
+
function coerceEnvValueLike(raw, existing) {
|
|
121
|
+
const v = raw.trim().toLowerCase();
|
|
122
|
+
if (typeof existing === "boolean") {
|
|
123
|
+
if (BOOLEANS_TRUE.has(v)) return true;
|
|
124
|
+
if (BOOLEANS_FALSE.has(v)) return false;
|
|
125
|
+
return coerceEnvValue(raw);
|
|
126
|
+
}
|
|
127
|
+
if (typeof existing === "string") return raw.trim();
|
|
128
|
+
return coerceEnvValue(raw);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Résout un segment (minuscule) vers la clé réelle d'un objet : match exact
|
|
132
|
+
* d'abord, sinon match insensible à la casse. `null` si aucune clé ne correspond.
|
|
133
|
+
*/
|
|
134
|
+
function resolveKey(node, seg) {
|
|
135
|
+
if (seg === "__proto__" || seg === "constructor" || seg === "prototype") return null;
|
|
136
|
+
if (Object.prototype.hasOwnProperty.call(node, seg)) return seg;
|
|
137
|
+
for (const k of Object.keys(node)) if (k.toLowerCase() === seg) return k;
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Type déclaré par un JSON Schema pour un chemin — `null` si le chemin n'y est
|
|
142
|
+
* pas déclaré, ou si le schéma prend une forme que cette lecture ne comprend pas.
|
|
143
|
+
*
|
|
144
|
+
* **Le schéma dit ce que la VALEUR ignore.** Une clé optionnelle sans défaut
|
|
145
|
+
* n'existe pas dans l'objet de configuration : la résolution par les clés
|
|
146
|
+
* présentes la déclare donc « inconnue » et refuse la surcharge, pour une clé
|
|
147
|
+
* pourtant déclarée, documentée et lue par le code. Ce sont précisément les
|
|
148
|
+
* réglages dont l'ABSENCE est signifiante — ceux que le framework résout par
|
|
149
|
+
* environnement quand on ne les écrit pas — et donc ceux qu'un exploitant a le
|
|
150
|
+
* plus besoin de poser sur une image déjà construite.
|
|
151
|
+
*
|
|
152
|
+
* Le core n'importe PAS zod : chaque module publie son schéma en JSON pur
|
|
153
|
+
* (`Module.configSchema()`), et cette fonction n'y navigue que par `properties`.
|
|
154
|
+
* Toute autre forme — `anyOf`, `$ref`, union — rend `null` : on n'assouplit que
|
|
155
|
+
* ce qu'on COMPREND, et le refus d'aujourd'hui reste le comportement par défaut.
|
|
156
|
+
*
|
|
157
|
+
* @param schema - JSON Schema du module, tel que `Module.configSchema()` le rend.
|
|
158
|
+
* @param path - segments du chemin (minuscules).
|
|
159
|
+
* @returns le `type` JSON Schema de la feuille, `"unknown"` si déclarée sans type, ou `null`.
|
|
160
|
+
*/
|
|
161
|
+
function declaredTypeAtPath(schema, path) {
|
|
162
|
+
if (path.length === 0 || schema === null || typeof schema !== "object") return null;
|
|
163
|
+
let node = schema;
|
|
164
|
+
for (let i = 0; i < path.length; i++) {
|
|
165
|
+
const props = node.properties;
|
|
166
|
+
if (props === null || typeof props !== "object") return null;
|
|
167
|
+
const bag = props;
|
|
168
|
+
const key = resolveKey(bag, path[i]);
|
|
169
|
+
if (key === null) return null;
|
|
170
|
+
const next = bag[key];
|
|
171
|
+
if (next === null || typeof next !== "object") return null;
|
|
172
|
+
node = next;
|
|
173
|
+
}
|
|
174
|
+
const t = node.type;
|
|
175
|
+
return typeof t === "string" ? t : "unknown";
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Convertit une chaîne d'environnement vers le type que le SCHÉMA déclare.
|
|
179
|
+
*
|
|
180
|
+
* Sert quand la clé est absente de la valeur : il n'y a alors rien à imiter, et
|
|
181
|
+
* {@link coerceEnvValueLike} devinerait — `"1"` deviendrait le nombre `1` là où
|
|
182
|
+
* un booléen est attendu, et le parse du module refuserait une surcharge
|
|
183
|
+
* pourtant correcte.
|
|
184
|
+
*
|
|
185
|
+
* @param raw - la chaîne d'environnement.
|
|
186
|
+
* @param type - le `type` JSON Schema de la feuille.
|
|
187
|
+
* @returns la valeur convertie ; la devinette générique si le type est inconnu.
|
|
188
|
+
*/
|
|
189
|
+
function coerceEnvValueForType(raw, type) {
|
|
190
|
+
const t = raw.trim();
|
|
191
|
+
if (type === "string") return t;
|
|
192
|
+
if (type === "boolean") {
|
|
193
|
+
const lowered = t.toLowerCase();
|
|
194
|
+
if (BOOLEANS_TRUE.has(lowered)) return true;
|
|
195
|
+
if (BOOLEANS_FALSE.has(lowered)) return false;
|
|
196
|
+
return t;
|
|
197
|
+
}
|
|
198
|
+
if (type === "number" || type === "integer") {
|
|
199
|
+
const n = Number(t);
|
|
200
|
+
return Number.isNaN(n) ? t : n;
|
|
201
|
+
}
|
|
202
|
+
return coerceEnvValue(t);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Pose `value` dans `target` au `path` donné, en résolvant chaque segment contre
|
|
206
|
+
* les clés EXISTANTES (insensible à la casse). N'altère QUE des chemins déjà
|
|
207
|
+
* présents dans la config (= champs ayant un défaut) — un chemin inconnu n'est pas
|
|
208
|
+
* créé (évite une clé fantôme à la mauvaise casse que le Zod ignorerait
|
|
209
|
+
* silencieusement) : la fonction renvoie alors `false` pour signalement.
|
|
210
|
+
*
|
|
211
|
+
* Quand `raw` est fourni, la valeur posée est RECALCULÉE contre celle qu'elle
|
|
212
|
+
* remplace ({@link coerceEnvValueLike}) : c'est ici, et nulle part ailleurs,
|
|
213
|
+
* qu'on connaît à la fois la chaîne d'origine et le type attendu. Sans `raw`, le
|
|
214
|
+
* comportement est inchangé — aucun appelant existant ne bouge.
|
|
215
|
+
*
|
|
216
|
+
* Quand `schema` est fourni, un chemin ABSENT de la valeur mais DÉCLARÉ par le
|
|
217
|
+
* schéma est créé — c'est le cas d'une clé optionnelle sans défaut, dont
|
|
218
|
+
* l'absence est signifiante et que rien ne permettait de poser jusqu'ici. La
|
|
219
|
+
* garde reste entière pour ce qui n'est ni présent ni déclaré : c'est elle qui
|
|
220
|
+
* empêche une clé fantôme à la mauvaise casse, que le parse du module
|
|
221
|
+
* strippe ensuite SANS un mot.
|
|
222
|
+
*
|
|
223
|
+
* @param target - objet de config du module (muté en place).
|
|
224
|
+
* @param path - segments du chemin (minuscules).
|
|
225
|
+
* @param value - valeur à poser (devinée par {@link coerceEnvValue}).
|
|
226
|
+
* @param raw - la chaîne d'environnement d'origine, quand elle est connue.
|
|
227
|
+
* @param schema - JSON Schema du module ({@link declaredTypeAtPath}), s'il en publie un.
|
|
228
|
+
* @returns `true` si appliqué, `false` si le chemin n'est ni présent ni déclaré.
|
|
229
|
+
*/
|
|
230
|
+
function applyResolvedPath(target, path, value, raw, schema) {
|
|
231
|
+
if (path.length === 0) return false;
|
|
232
|
+
const declaredType = schema === void 0 ? null : declaredTypeAtPath(schema, path);
|
|
233
|
+
let node = target;
|
|
234
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
235
|
+
const key = resolveKey(node, path[i]);
|
|
236
|
+
if (key === null) {
|
|
237
|
+
if (declaredType === null) return false;
|
|
238
|
+
const neuf = {};
|
|
239
|
+
node[path[i]] = neuf;
|
|
240
|
+
node = neuf;
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
const next = node[key];
|
|
244
|
+
if (typeof next !== "object" || next === null || Array.isArray(next)) return false;
|
|
245
|
+
node = next;
|
|
246
|
+
}
|
|
247
|
+
const leafKey = path[path.length - 1];
|
|
248
|
+
const leaf = resolveKey(node, leafKey);
|
|
249
|
+
if (leaf === null) {
|
|
250
|
+
if (declaredType === null) return false;
|
|
251
|
+
node[leafKey] = raw === void 0 ? value : coerceEnvValueForType(raw, declaredType);
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
node[leaf] = raw === void 0 ? value : coerceEnvValueLike(raw, node[leaf]);
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Relit la valeur posée à `path` — la SYMÉTRIQUE de {@link applyResolvedPath}.
|
|
259
|
+
*
|
|
260
|
+
* Sert au journal du boot : depuis que la valeur est convertie contre le type
|
|
261
|
+
* attendu, ce qui est écrit dans la config n'est plus forcément ce que
|
|
262
|
+
* `coerceEnvValue` avait deviné. Journaliser la devinette afficherait
|
|
263
|
+
* `TRUSTPROXY = 1` sur une config qui porte `true` — le genre d'écart qu'on
|
|
264
|
+
* poursuit une heure avant de comprendre qu'il vient du journal.
|
|
265
|
+
*
|
|
266
|
+
* @param target - objet de config du module.
|
|
267
|
+
* @param path - segments du chemin (minuscules).
|
|
268
|
+
* @returns la valeur en place, ou `undefined` si le chemin ne résout pas.
|
|
269
|
+
*/
|
|
270
|
+
function readResolvedPath(target, path) {
|
|
271
|
+
if (path.length === 0) return void 0;
|
|
272
|
+
let node = target;
|
|
273
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
274
|
+
const key = resolveKey(node, path[i]);
|
|
275
|
+
if (key === null) return void 0;
|
|
276
|
+
const next = node[key];
|
|
277
|
+
if (typeof next !== "object" || next === null || Array.isArray(next)) return;
|
|
278
|
+
node = next;
|
|
279
|
+
}
|
|
280
|
+
const leaf = resolveKey(node, path[path.length - 1]);
|
|
281
|
+
return leaf === null ? void 0 : node[leaf];
|
|
282
|
+
}
|
|
283
|
+
/** Heuristique : ce chemin porte-t-il un secret (à rédiger dans les logs) ? */
|
|
284
|
+
function pathLooksSecret(path) {
|
|
285
|
+
return path.some((s) => /secret|password|key|token|credential/i.test(s));
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Distance d'édition de Levenshtein entre deux chaînes (2 lignes glissantes, pas
|
|
289
|
+
* de matrice complète). Sert au « did you mean » : proposer la clé la plus proche
|
|
290
|
+
* quand un segment d'override `NF__*` est mal orthographié.
|
|
291
|
+
*
|
|
292
|
+
* @param a - première chaîne.
|
|
293
|
+
* @param b - seconde chaîne.
|
|
294
|
+
* @returns le nombre minimal d'insertions/suppressions/substitutions.
|
|
295
|
+
*/
|
|
296
|
+
function editDistance(a, b) {
|
|
297
|
+
const m = a.length;
|
|
298
|
+
const n = b.length;
|
|
299
|
+
if (m === 0) return n;
|
|
300
|
+
if (n === 0) return m;
|
|
301
|
+
let prev = new Array(n + 1);
|
|
302
|
+
let curr = new Array(n + 1);
|
|
303
|
+
for (let j = 0; j <= n; j++) prev[j] = j;
|
|
304
|
+
for (let i = 1; i <= m; i++) {
|
|
305
|
+
curr[0] = i;
|
|
306
|
+
for (let j = 1; j <= n; j++) {
|
|
307
|
+
const cost = a.charCodeAt(i - 1) === b.charCodeAt(j - 1) ? 0 : 1;
|
|
308
|
+
curr[j] = Math.min(prev[j] + 1, curr[j - 1] + 1, prev[j - 1] + cost);
|
|
309
|
+
}
|
|
310
|
+
[prev, curr] = [curr, prev];
|
|
311
|
+
}
|
|
312
|
+
return prev[n];
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Parmi `candidates`, renvoie le plus proche de `target` (insensible à la casse)
|
|
316
|
+
* SI la distance d'édition reste plausible (≤ 40 % de la plus longue, plancher 2)
|
|
317
|
+
* — sinon `null` (ne jamais suggérer une correspondance absurde). Calque le « the
|
|
318
|
+
* most similar command is » de git : aide au debug d'un nom de variable d'env mal tapé.
|
|
319
|
+
*
|
|
320
|
+
* @param target - segment fourni par l'utilisateur (issu d'un `NF__…`).
|
|
321
|
+
* @param candidates - clés réelles existantes à comparer.
|
|
322
|
+
* @returns la meilleure suggestion, ou `null` si trop éloignée.
|
|
323
|
+
*/
|
|
324
|
+
function closestMatch(target, candidates) {
|
|
325
|
+
const t = target.toLowerCase();
|
|
326
|
+
let best = null;
|
|
327
|
+
let bestD = Infinity;
|
|
328
|
+
for (const c of candidates) {
|
|
329
|
+
const d = editDistance(t, c.toLowerCase());
|
|
330
|
+
if (d < bestD) {
|
|
331
|
+
bestD = d;
|
|
332
|
+
best = c;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (best === null) return null;
|
|
336
|
+
const threshold = Math.max(2, Math.floor(Math.max(t.length, best.length) * .4));
|
|
337
|
+
return bestD <= threshold ? best : null;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Rejoue la résolution de `path` contre `target` pour DIAGNOSTIQUER un échec :
|
|
341
|
+
* renvoie le 1ᵉʳ segment qui ne correspond à aucune clé (ou qui traverse un
|
|
342
|
+
* non-objet) + les clés disponibles à ce niveau. `null` si tout résout (pas un
|
|
343
|
+
* échec). Miroir de lecture seule de {@link applyResolvedPath} — ne mute rien.
|
|
344
|
+
*
|
|
345
|
+
* @param target - objet de config du module (non muté).
|
|
346
|
+
* @param path - segments du chemin (minuscules).
|
|
347
|
+
* @returns le détail de l'échec, ou `null` si le chemin résout entièrement.
|
|
348
|
+
*/
|
|
349
|
+
function diagnoseResolveFailure(target, path) {
|
|
350
|
+
if (path.length === 0) return null;
|
|
351
|
+
let node = target;
|
|
352
|
+
for (let i = 0; i < path.length; i++) {
|
|
353
|
+
const key = resolveKey(node, path[i]);
|
|
354
|
+
if (key === null) return {
|
|
355
|
+
index: i,
|
|
356
|
+
segment: path[i],
|
|
357
|
+
available: Object.keys(node)
|
|
358
|
+
};
|
|
359
|
+
if (i < path.length - 1) {
|
|
360
|
+
const next = node[key];
|
|
361
|
+
if (typeof next !== "object" || next === null || Array.isArray(next)) return {
|
|
362
|
+
index: i,
|
|
363
|
+
segment: path[i],
|
|
364
|
+
available: Object.keys(node)
|
|
365
|
+
};
|
|
366
|
+
node = next;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return null;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Clés déclarées par le schéma au niveau `prefix` — vide si le schéma ne dit
|
|
373
|
+
* rien de ce niveau, ou s'il prend une forme que cette lecture ne comprend pas.
|
|
374
|
+
*
|
|
375
|
+
* @param schema - JSON Schema du module, ou `undefined`.
|
|
376
|
+
* @param prefix - segments déjà traversés (minuscules).
|
|
377
|
+
* @returns les noms de propriétés déclarés à ce niveau.
|
|
378
|
+
*/
|
|
379
|
+
function declaredKeysAtPath(schema, prefix) {
|
|
380
|
+
if (schema === null || typeof schema !== "object") return [];
|
|
381
|
+
let node = schema;
|
|
382
|
+
for (const seg of prefix) {
|
|
383
|
+
const props = node.properties;
|
|
384
|
+
if (props === null || typeof props !== "object") return [];
|
|
385
|
+
const bag = props;
|
|
386
|
+
const key = resolveKey(bag, seg);
|
|
387
|
+
if (key === null) return [];
|
|
388
|
+
const next = bag[key];
|
|
389
|
+
if (next === null || typeof next !== "object") return [];
|
|
390
|
+
node = next;
|
|
391
|
+
}
|
|
392
|
+
const props = node.properties;
|
|
393
|
+
return props !== null && typeof props === "object" ? Object.keys(props) : [];
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Construit le suffixe de message « did you mean » d'un chemin d'override qui n'a
|
|
397
|
+
* pas résolu contre `target` : nomme le segment fautif, propose la clé la plus
|
|
398
|
+
* proche et liste les clés disponibles. Chaîne vide si rien d'exploitable.
|
|
399
|
+
* Partagé par les overrides de MODULE (Kernel) et d'APP (defineConfig).
|
|
400
|
+
*
|
|
401
|
+
* **Les clés DÉCLARÉES comptent autant que les présentes.** Une clé optionnelle
|
|
402
|
+
* sans défaut n'existe pas dans la valeur : ne lister que celle-ci proposerait à
|
|
403
|
+
* l'utilisateur une liste amputée, et lui ferait chercher une faute de frappe
|
|
404
|
+
* dans un nom parfaitement écrit — l'inverse du service qu'un « did you mean »
|
|
405
|
+
* doit rendre.
|
|
406
|
+
*
|
|
407
|
+
* @param target - objet de config cible (lu seul, non muté).
|
|
408
|
+
* @param path - segments du chemin de l'override (minuscules).
|
|
409
|
+
* @param schema - JSON Schema du module, quand il en publie un.
|
|
410
|
+
* @returns un suffixe commençant par ` — …`, ou `""`.
|
|
411
|
+
*/
|
|
412
|
+
function resolveFailureHint(target, path, schema) {
|
|
413
|
+
const diag = diagnoseResolveFailure(target, path);
|
|
414
|
+
if (!diag) return "";
|
|
415
|
+
const declaredKeys = declaredKeysAtPath(schema, path.slice(0, diag.index));
|
|
416
|
+
const available = [.../* @__PURE__ */ new Set([...diag.available, ...declaredKeys])].sort();
|
|
417
|
+
if (available.length === 0) return "";
|
|
418
|
+
const suggestion = closestMatch(diag.segment, available);
|
|
419
|
+
const keys = available.join(", ");
|
|
420
|
+
return suggestion ? ` — segment "${diag.segment}" inconnu, vouliez-vous dire « ${suggestion} » ? (clés: ${keys})` : ` — segment "${diag.segment}" inconnu (clés disponibles: ${keys})`;
|
|
421
|
+
}
|
|
422
|
+
//#endregion
|
|
423
|
+
export { applyResolvedPath, closestMatch, coerceEnvValue, coerceEnvValueForType, coerceEnvValueLike, declaredKeysAtPath, declaredTypeAtPath, diagnoseResolveFailure, editDistance, parseNfEnvOverrides, pathLooksSecret, readResolvedPath, resolveFailureHint };
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
//#region src/config/infra.ts
|
|
2
|
+
const SQL_SCHEMES = Object.assign(Object.create(null), {
|
|
3
|
+
sqlite: "sqlite",
|
|
4
|
+
postgres: "postgres",
|
|
5
|
+
postgresql: "postgres",
|
|
6
|
+
mysql: "mysql",
|
|
7
|
+
mariadb: "mysql"
|
|
8
|
+
});
|
|
9
|
+
const MONGO_SCHEMES = /* @__PURE__ */ new Set(["mongodb", "mongodb+srv"]);
|
|
10
|
+
/** Première valeur non vide parmi les clés candidates (préfixe `NF_` prioritaire). */
|
|
11
|
+
function pick(env, keys) {
|
|
12
|
+
for (const key of keys) {
|
|
13
|
+
const value = env[key];
|
|
14
|
+
if (typeof value === "string" && value.length > 0) return value;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Parse l'URL du infra `database` : scheme → famille + dialecte.
|
|
19
|
+
*
|
|
20
|
+
* @throws Error si le scheme n'est pas supporté — fail-loud au boot : une URL
|
|
21
|
+
* de base inconnue ne doit JAMAIS retomber silencieusement sur sqlite.
|
|
22
|
+
*/
|
|
23
|
+
function parseDatabaseUrl(url) {
|
|
24
|
+
const sep = url.indexOf(":");
|
|
25
|
+
const scheme = sep > 0 ? url.slice(0, sep).toLowerCase() : "";
|
|
26
|
+
const dialect = scheme ? SQL_SCHEMES[scheme] : void 0;
|
|
27
|
+
if (dialect) return {
|
|
28
|
+
url,
|
|
29
|
+
scheme,
|
|
30
|
+
family: "sql",
|
|
31
|
+
dialect
|
|
32
|
+
};
|
|
33
|
+
if (MONGO_SCHEMES.has(scheme)) return {
|
|
34
|
+
url,
|
|
35
|
+
scheme,
|
|
36
|
+
family: "mongo",
|
|
37
|
+
dialect: null
|
|
38
|
+
};
|
|
39
|
+
throw new Error(`NF_DATABASE_URL : scheme "${scheme || url}" non supporté — attendu sqlite:, postgres://, postgresql://, mysql://, mariadb://, mongodb:// ou mongodb+srv://`);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Fichier SQLite d'une URL `sqlite:` du infra `database`.
|
|
43
|
+
* Formes acceptées : `sqlite::memory:`, `sqlite:./relatif.db`, `sqlite:/abs.db`,
|
|
44
|
+
* `sqlite:///abs.db`. URL vide après le scheme → `:memory:`.
|
|
45
|
+
*/
|
|
46
|
+
function sqliteFilenameFromUrl(url) {
|
|
47
|
+
let rest = url.slice(url.indexOf(":") + 1);
|
|
48
|
+
if (rest.startsWith("//")) rest = rest.slice(2);
|
|
49
|
+
return rest.length === 0 ? ":memory:" : rest;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Résout les 3 infra déclarée depuis l'environnement. Fonction PURE
|
|
53
|
+
* (aucun kernel) : consommée par le Kernel (1 fois, mémoïsé), par le contexte
|
|
54
|
+
* `defineConfig` (`ctx.infra`) et par les builders de config des modules
|
|
55
|
+
* adapters (drizzle/mongoose/redis) dans leur couche env.
|
|
56
|
+
*
|
|
57
|
+
* @param env - source d'environnement (défaut `process.env`).
|
|
58
|
+
* @throws Error si l'URL du infra `database` a un scheme non supporté.
|
|
59
|
+
*/
|
|
60
|
+
function resolveInfra(env = process.env) {
|
|
61
|
+
const databaseUrl = pick(env, ["NF_DATABASE_URL", "DATABASE_URL"]);
|
|
62
|
+
const cacheUrl = pick(env, ["NF_REDIS_URL", "REDIS_URL"]);
|
|
63
|
+
const lokiUrl = pick(env, ["NF_LOKI_URL"]);
|
|
64
|
+
const opensearchUrl = pick(env, ["NF_OPENSEARCH_URL"]);
|
|
65
|
+
let logs = null;
|
|
66
|
+
if (lokiUrl || opensearchUrl) {
|
|
67
|
+
logs = {};
|
|
68
|
+
if (lokiUrl) logs.lokiUrl = lokiUrl;
|
|
69
|
+
if (opensearchUrl) logs.opensearchUrl = opensearchUrl;
|
|
70
|
+
}
|
|
71
|
+
const forceStore = pick(env, ["NF_STORE"]);
|
|
72
|
+
return {
|
|
73
|
+
database: databaseUrl ? parseDatabaseUrl(databaseUrl) : null,
|
|
74
|
+
cache: cacheUrl ? { url: cacheUrl } : null,
|
|
75
|
+
logs,
|
|
76
|
+
forceStore: forceStore ?? null
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** Sentinelle des champs `store` : « laisser le framework choisir selon l'infra déclarée ». */
|
|
80
|
+
const AUTO_STORE = "auto";
|
|
81
|
+
/** Infra vide (rien de déclaré) — fallback sûr quand le kernel est absent (tests). */
|
|
82
|
+
const EMPTY_INFRA = Object.freeze({
|
|
83
|
+
database: null,
|
|
84
|
+
cache: null,
|
|
85
|
+
logs: null
|
|
86
|
+
});
|
|
87
|
+
/**
|
|
88
|
+
* Résout la sentinelle `"auto"` d'une brique en nom de backend, borné aux
|
|
89
|
+
* backends RÉELLEMENT enregistrés (`available` = `listXStores()` du registre —
|
|
90
|
+
* reflète l'auto-register des adapters chargés). Couverture partielle d'une infra
|
|
91
|
+
* (ex. audit sans impl mongoose) → repli `fallback` avec raison ANNONCÉE,
|
|
92
|
+
* jamais d'échec : le principe « fallback annoncé, pas de dégradation
|
|
93
|
+
* silencieuse » vit dans la raison retournée, que l'appelant DOIT logger.
|
|
94
|
+
*
|
|
95
|
+
* @param kind - nature de la donnée ({@link StoreKind}).
|
|
96
|
+
* @param infra - infra résolue ({@link resolveInfra}).
|
|
97
|
+
* @param available - backends enregistrés dans le registre de la brique.
|
|
98
|
+
* @param fallback - backend de repli (défaut `"memory"` — c'est aussi ce que passe
|
|
99
|
+
* le service de session : aucun appelant ne demande un autre repli).
|
|
100
|
+
*/
|
|
101
|
+
function resolveAutoStore(kind, infra, available, fallback = "memory") {
|
|
102
|
+
if (infra.forceStore && available.includes(infra.forceStore)) return {
|
|
103
|
+
store: infra.forceStore,
|
|
104
|
+
reason: `NF_STORE=${infra.forceStore} (override global — banc de charge)`
|
|
105
|
+
};
|
|
106
|
+
const preferences = [];
|
|
107
|
+
if (kind !== "durable" && infra.cache) preferences.push({
|
|
108
|
+
store: "redis",
|
|
109
|
+
reason: "infra cache (NF_REDIS_URL)"
|
|
110
|
+
});
|
|
111
|
+
if (infra.database) {
|
|
112
|
+
const store = infra.database.family === "mongo" ? "mongoose" : "drizzle";
|
|
113
|
+
preferences.push({
|
|
114
|
+
store,
|
|
115
|
+
reason: `infra database (${infra.database.scheme})`
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
for (const preference of preferences) if (available.includes(preference.store)) return preference;
|
|
119
|
+
if (preferences.length > 0) return {
|
|
120
|
+
store: fallback,
|
|
121
|
+
reason: `backend d'infra ${preferences.map((p) => p.store).join("/")} indisponible sur cette brique (enregistrés : ${available.join(", ") || "aucun"}) — repli "${fallback}"`
|
|
122
|
+
};
|
|
123
|
+
for (const local of ["drizzle", "mongoose"]) if (available.includes(local)) return {
|
|
124
|
+
store: local,
|
|
125
|
+
reason: `aucune infra déclarée — backend local persistant "${local}" (mono-nœud)`
|
|
126
|
+
};
|
|
127
|
+
return {
|
|
128
|
+
store: fallback,
|
|
129
|
+
reason: `aucune infra déclarée, aucun backend persistant chargé — repli "${fallback}"` + (fallback === "memory" ? " (volatil)" : "")
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Déduit le nom court du backend d'un store à partir de la classe concrète de
|
|
134
|
+
* son instance (convention de nommage `<Backend>XxxStore` → `drizzle`, `mongoose`,
|
|
135
|
+
* `redis`, `memory`, `file`). Sert à retrouver le backend RÉEL d'un adapter posé
|
|
136
|
+
* au container quand la brique a été résolue en `"auto"` (l'adapter court-circuite
|
|
137
|
+
* la fabrique nommée). Classe non reconnue → nom de classe brut (honnête).
|
|
138
|
+
*
|
|
139
|
+
* @param store - instance de store (lue défensivement — seul `constructor.name`).
|
|
140
|
+
* @returns nom court du backend, ou `"inconnu"` si l'instance n'expose pas de classe.
|
|
141
|
+
*/
|
|
142
|
+
function deriveStoreBackend(store) {
|
|
143
|
+
const name = store?.constructor?.name;
|
|
144
|
+
if (!name) return "inconnu";
|
|
145
|
+
const match = /^(Drizzle|Mongoose|Redis|Memory|File)/.exec(name);
|
|
146
|
+
return match ? match[1].toLowerCase() : name;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Lit l'emplacement PHYSIQUE d'un store depuis son instance (getter public
|
|
150
|
+
* `location`), pour l'écran Studio « Stores » — répond à « où mes données sont-elles
|
|
151
|
+
* écrites ? ». Un store fichier (passkeys, TOTP, sessions) expose le chemin de son
|
|
152
|
+
* fichier/dossier ; un store `memory` ou un backend réseau (drizzle/redis/mongoose)
|
|
153
|
+
* n'expose rien → `undefined` (l'UI dérive « en mémoire » ou renvoie à l'infra).
|
|
154
|
+
*
|
|
155
|
+
* @param store - instance de store (lue défensivement — seul un getter `location` string).
|
|
156
|
+
* @returns chemin lisible, ou `undefined` si le store n'expose pas d'emplacement.
|
|
157
|
+
*/
|
|
158
|
+
function readStoreLocation(store) {
|
|
159
|
+
const location = store?.location;
|
|
160
|
+
return typeof location === "string" && location.length > 0 ? location : void 0;
|
|
161
|
+
}
|
|
162
|
+
//#endregion
|
|
163
|
+
export { AUTO_STORE, EMPTY_INFRA, deriveStoreBackend, parseDatabaseUrl, readStoreLocation, resolveAutoStore, resolveInfra, sqliteFilenameFromUrl };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/config/reactivity.ts
|
|
2
|
+
/**
|
|
3
|
+
* Champs applicables À CHAUD (chemin en dot-notation). Tout champ absent est `boot`.
|
|
4
|
+
*
|
|
5
|
+
* `log.active` / `log.debug` / `log.requestFormat` = exactement le cadre de la
|
|
6
|
+
* « fenêtre d'audit » (élever la verbosité prod temporairement sans reboot).
|
|
7
|
+
*/
|
|
8
|
+
const configReactivity = {
|
|
9
|
+
"log.active": "hot",
|
|
10
|
+
"log.debug": "hot",
|
|
11
|
+
"log.requestFormat": "hot"
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Réactivité d'un champ par son chemin dot-notation ; `boot` par défaut (sûr).
|
|
15
|
+
*
|
|
16
|
+
* @param path - chemin du champ, ex. `"log.debug"` ou `"servers.http.port"`.
|
|
17
|
+
* @returns `"hot"` si le champ peut s'appliquer à chaud, sinon `"boot"`.
|
|
18
|
+
*/
|
|
19
|
+
function getConfigReactivity(path) {
|
|
20
|
+
return configReactivity[path] ?? "boot";
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { configReactivity, getConfigReactivity };
|