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,95 @@
|
|
|
1
|
+
import "../../cli/sysexits.js";
|
|
2
|
+
import { defaultDevPorts, discoverDevProcesses, findRuntimeConflict, probePorts, splitByProject } from "../../service/dev/devProcess.js";
|
|
3
|
+
import { startClusterMaster } from "../../service/cluster/clusterMaster.js";
|
|
4
|
+
import cluster from "node:cluster";
|
|
5
|
+
//#region src/kernel/commands/runtimeLauncher.ts
|
|
6
|
+
/** Libellé FR d'un mode runtime, pour les messages d'erreur. */
|
|
7
|
+
function modeLabelFr(mode) {
|
|
8
|
+
if (mode === "dev") return "développement";
|
|
9
|
+
if (mode === "cluster") return "cluster";
|
|
10
|
+
return "production";
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Garde anti-collision (symétrique du superviseur dev) : un runtime prod/cluster ne
|
|
14
|
+
* démarre PAS par-dessus un AUTRE runtime **de CE projet** (dev/prod/cluster d'un mode
|
|
15
|
+
* différent). Fail-loud + exit — jamais de kill auto cross-mode (le runtime préexistant
|
|
16
|
+
* est intentionnel). Primaire seulement (les workers forkés héritent d'un primaire déjà
|
|
17
|
+
* validé). `ps` indisponible → liste vide → on retombe sur l'`EADDRINUSE` natif
|
|
18
|
+
* (best-effort, ex. conteneur minimaliste sans `ps`).
|
|
19
|
+
*
|
|
20
|
+
* **Scopé au projet** (`splitByProject`, égalité stricte du cwd — la MÊME règle que
|
|
21
|
+
* `stop`, `status` et le superviseur : une seconde implémentation dériverait). Le motif
|
|
22
|
+
* du garde est la collision de PORTS ; or deux projets Nodefony cohabitent désormais
|
|
23
|
+
* (`servers.portPolicy: "auto"` en dev, ports déclarés en prod). Refuser un `production`
|
|
24
|
+
* parce que le dev d'une AUTRE app tourne, c'était crier au loup sur le cas nominal —
|
|
25
|
+
* et un garde qui se déclenche sur le cas nominal n'est plus lu.
|
|
26
|
+
*
|
|
27
|
+
* **La collision se CONSTATE, elle ne se déduit pas d'une présence de process.** Un
|
|
28
|
+
* process enregistré ne détient pas forcément un port : un superviseur de développement
|
|
29
|
+
* dont l'enfant a été tué (kill -9 d'un banc, OOM, plantage) survit orphelin, n'écoute
|
|
30
|
+
* RIEN, et reste visible de `ps`. Refuser la production sur sa seule existence, c'est
|
|
31
|
+
* l'interdire à cause d'un fantôme — sur un pod, un démarrage qui échoue sans qu'aucun
|
|
32
|
+
* port ne soit pris. Le chemin dev le constatait déjà (`detachedStart` → `probePorts`) ;
|
|
33
|
+
* cette dissymétrie était le défaut. On sonde donc les ports DÉCLARÉS
|
|
34
|
+
* (`defaultDevPorts` — même source que `status` et `stop`) : aucun tenu ⇒ on AVERTIT et
|
|
35
|
+
* on laisse démarrer, l'`EADDRINUSE` natif restant le filet ultime.
|
|
36
|
+
*/
|
|
37
|
+
async function assertNoConflictingRuntime(intended, log, deps = {}) {
|
|
38
|
+
const cwd = deps.cwd ?? process.cwd();
|
|
39
|
+
const { mine } = splitByProject((deps.discover ?? discoverDevProcesses)(), cwd, deps.getCwd);
|
|
40
|
+
const conflict = findRuntimeConflict(mine, intended);
|
|
41
|
+
if (conflict.length === 0) return;
|
|
42
|
+
const pids = conflict.map((p) => p.pid).join(", ");
|
|
43
|
+
const held = (await (deps.probe ?? probePorts)(defaultDevPorts(cwd))).filter((p) => p.listening).map((p) => p.port);
|
|
44
|
+
if (held.length === 0) {
|
|
45
|
+
log(`un runtime Nodefony ${modeLabelFr(conflict[0].mode)} de CE projet est enregistré (pid ${pids}) mais ne détient AUCUN port — résidu probable (son serveur a été tué). Démarrage ${modeLabelFr(intended)} MAINTENU. Pour nettoyer : nodefony stop`, "WARNING");
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
log(`⛔ un runtime Nodefony ${modeLabelFr(conflict[0].mode)} de CE projet tourne déjà (pid ${pids}) et tient le(s) port(s) ${held.join(", ")} — démarrage ${modeLabelFr(intended)} refusé. Arrête-le d'abord : nodefony stop`, "CRITIC");
|
|
49
|
+
(deps.exit ?? ((c) => process.exit(c)))(69);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Applique la topologie résolue — flow **PARTAGÉ** par les commandes de lancement
|
|
53
|
+
* (`cluster`, `production`). Appelé depuis leur `onKernelStart` (phase `onStart`),
|
|
54
|
+
* donc AVANT que l'unique Kernel ne démarre ses serveurs (`onReady → initServers`).
|
|
55
|
+
*
|
|
56
|
+
* **Un seul Kernel par process** (fin du double-boot historique) :
|
|
57
|
+
* - `workers >= 2` && process primaire → **MASTER** : {@link startClusterMaster}
|
|
58
|
+
* (fork N workers + relay IPC + sonde pod). Ne boote AUCUN serveur HTTP ; le Kernel
|
|
59
|
+
* courant reste en `CONSOLE` et on **park** le flow (le master est un superviseur
|
|
60
|
+
* pur, gardé vivant par les listeners cluster + les timers de la sonde).
|
|
61
|
+
* - sinon (mono-process `workers:1` OU process **worker** forké) → on bascule le Kernel
|
|
62
|
+
* courant en `SERVER` et on **rend la main** : son pipeline de boot continue de
|
|
63
|
+
* lui-même (`onReady → initServers → onPostReady`), les serveurs HTTP/WS montent et
|
|
64
|
+
* le process reste vivant via leurs handles. Plus aucun `new Kernel` ici.
|
|
65
|
+
*
|
|
66
|
+
* Vit dans `kernel/commands/` (et non `service/cluster/`) pour garder le service
|
|
67
|
+
* cluster **kernel-free**.
|
|
68
|
+
*/
|
|
69
|
+
async function launchTopology(opts) {
|
|
70
|
+
const { cli, topo, log } = opts;
|
|
71
|
+
if (cluster.isPrimary) await assertNoConflictingRuntime(topo.workers >= 2 ? "cluster" : "prod", log);
|
|
72
|
+
if (cluster.isPrimary && topo.workers >= 2) {
|
|
73
|
+
log(`Cluster topology: ${topo.workers} workers (source: ${topo.source})`, "INFO");
|
|
74
|
+
cli.setRunProfile({
|
|
75
|
+
servers: false,
|
|
76
|
+
lifetime: "longrunning",
|
|
77
|
+
interactive: false
|
|
78
|
+
});
|
|
79
|
+
cli.releaseSignalListeners();
|
|
80
|
+
startClusterMaster({
|
|
81
|
+
workers: topo.workers,
|
|
82
|
+
log
|
|
83
|
+
});
|
|
84
|
+
await cli.kernel.park();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (cluster.isPrimary) log(`Topology: 1 process (source: ${topo.source}) — mono-process, no cluster machinery`, "INFO");
|
|
88
|
+
cli.setRunProfile({
|
|
89
|
+
servers: true,
|
|
90
|
+
lifetime: "longrunning",
|
|
91
|
+
interactive: false
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
export { assertNoConflictingRuntime, launchTopology };
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import Injector from "../injector/injector.js";
|
|
2
|
+
import { orderServicesByDependencies } from "../injector/serviceOrder.js";
|
|
3
|
+
import "reflect-metadata";
|
|
4
|
+
//#region src/kernel/decorators/kernelDecorator.ts
|
|
5
|
+
/**
|
|
6
|
+
* Déclare les services qu'un module enregistre dans son conteneur au démarrage.
|
|
7
|
+
*
|
|
8
|
+
* Décorateur de **classe de module**. Les services sont instanciés au hook
|
|
9
|
+
* `onPreBoot`, et **l'ordre écrit ici n'a aucune importance** : il est recalculé
|
|
10
|
+
* depuis les dépendances déclarées (`@inject`), de sorte qu'un service réclamé
|
|
11
|
+
* soit présent avant son consommateur. Le hook est tagué au nom du module : un
|
|
12
|
+
* service qui échoue suit la politique de criticité de SON module — fatal en
|
|
13
|
+
* production, dégradation annoncée ailleurs — au lieu de faire tomber le boot
|
|
14
|
+
* anonymement.
|
|
15
|
+
*
|
|
16
|
+
* @param nameOrPath - Une classe de service, un chemin de fichier, ou un tableau
|
|
17
|
+
* mêlant les deux.
|
|
18
|
+
* @returns Le décorateur de classe, qui renvoie le module enrichi du hook.
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* @services([Router, Eta, AdminBroker])
|
|
22
|
+
* class FrameworkModule extends Module {}
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
function services(nameOrPath) {
|
|
26
|
+
return function(constructor) {
|
|
27
|
+
class NewConstructorService extends constructor {
|
|
28
|
+
constructor(...args) {
|
|
29
|
+
super(...args);
|
|
30
|
+
this.hookKernel("onPreBoot", async () => {
|
|
31
|
+
return await this.initDecoratorServices();
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async initDecoratorServices() {
|
|
35
|
+
if (Array.isArray(nameOrPath)) {
|
|
36
|
+
const ordered = orderServicesByDependencies(nameOrPath);
|
|
37
|
+
for (const path of ordered) if (typeof path !== "string") await this.addService(path).catch((e) => {
|
|
38
|
+
this.handleServiceBootError(e, path);
|
|
39
|
+
});
|
|
40
|
+
else await this.loadService(path).catch((e) => {
|
|
41
|
+
this.handleServiceBootError(e, path);
|
|
42
|
+
});
|
|
43
|
+
} else {
|
|
44
|
+
if (typeof nameOrPath === "string") return await this.loadService(nameOrPath).catch((e) => {
|
|
45
|
+
this.handleServiceBootError(e, nameOrPath);
|
|
46
|
+
});
|
|
47
|
+
return await this.addService(nameOrPath).catch((e) => {
|
|
48
|
+
this.handleServiceBootError(e, nameOrPath);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return NewConstructorService;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Rend une classe de service résoluble par le conteneur d'injection.
|
|
58
|
+
*
|
|
59
|
+
* Décorateur de **classe**. Il inscrit la classe à l'annuaire d'injection sous
|
|
60
|
+
* un nom — celui de la classe par défaut — et fige sa portée. Sans lui, la
|
|
61
|
+
* classe reste une classe ordinaire : elle ne peut être ni découverte, ni
|
|
62
|
+
* injectée, et un `@inject("…")` qui la réclame échouera à la résolution.
|
|
63
|
+
*
|
|
64
|
+
* @param nameOrOptions - Le nom d'enregistrement, ou `{ name?, scope? }`. La
|
|
65
|
+
* portée vaut `"singleton"` par défaut — une seule instance pour le
|
|
66
|
+
* processus ; `"transient"` en fabrique une par résolution.
|
|
67
|
+
* @returns Le décorateur de classe, qui renvoie la classe inchangée.
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* @injectable()
|
|
71
|
+
* class Router extends Service {}
|
|
72
|
+
*
|
|
73
|
+
* @injectable({ name: "pdfRenderer", scope: "transient" })
|
|
74
|
+
* class PdfRenderer extends Service {}
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
function injectable(nameOrOptions) {
|
|
78
|
+
return function(constructor) {
|
|
79
|
+
let regName;
|
|
80
|
+
let scope = "singleton";
|
|
81
|
+
if (typeof nameOrOptions === "string") regName = nameOrOptions || constructor.name;
|
|
82
|
+
else if (nameOrOptions && typeof nameOrOptions === "object") {
|
|
83
|
+
regName = nameOrOptions.name || constructor.name;
|
|
84
|
+
scope = nameOrOptions.scope ?? "singleton";
|
|
85
|
+
} else regName = constructor.name;
|
|
86
|
+
Injector.register(regName, constructor);
|
|
87
|
+
Reflect.defineMetadata("di:scope", scope, constructor);
|
|
88
|
+
return constructor;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Injecter une Service avec son nom dans le constructeur.
|
|
93
|
+
*
|
|
94
|
+
* @param serviceName - Le nom du service à injecter (doit correspondre à un @injectable)
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* class MyService extends Service {
|
|
98
|
+
* constructor(@inject("Fetch") private fetch: Fetch) { super("my", ...) }
|
|
99
|
+
* }
|
|
100
|
+
*/
|
|
101
|
+
function inject(serviceName) {
|
|
102
|
+
return function(target, _propertyKey, parameterIndex) {
|
|
103
|
+
if (!serviceName) throw new Error(`Inject decorator requires a valid service name`);
|
|
104
|
+
const existing = Reflect.getMetadata("inject:services", target) || [];
|
|
105
|
+
existing[parameterIndex] = serviceName;
|
|
106
|
+
Reflect.defineMetadata("inject:services", existing, target);
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
110
|
+
export { inject, injectable, services };
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Nodefony } from "../../Nodefony.js";
|
|
2
|
+
import Service from "../../Service.js";
|
|
3
|
+
import Fetch from "../../service/fetchService.js";
|
|
4
|
+
import "reflect-metadata";
|
|
5
|
+
//#region src/kernel/injector/injector.ts
|
|
6
|
+
const injectables = Object.create(null);
|
|
7
|
+
const containerKeys = /* @__PURE__ */ new Map();
|
|
8
|
+
var Injector = class Injector extends Service {
|
|
9
|
+
static injectables = injectables;
|
|
10
|
+
constructor(kernel) {
|
|
11
|
+
super("injector", kernel.container, kernel.notificationsCenter);
|
|
12
|
+
Injector.register("Fetch", Fetch);
|
|
13
|
+
kernel.set("Fetch", new Fetch(kernel));
|
|
14
|
+
}
|
|
15
|
+
static register(serviceName, service) {
|
|
16
|
+
if (!serviceName || !service) throw new Error(`Injector register bad argument`);
|
|
17
|
+
return injectables[serviceName] = service;
|
|
18
|
+
}
|
|
19
|
+
static isRegistered(serviceName) {
|
|
20
|
+
return serviceName in injectables;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Mémorise la clé sous laquelle une classe de service vit RÉELLEMENT dans le
|
|
24
|
+
* container — apprise au moment où l'instance y est posée.
|
|
25
|
+
*
|
|
26
|
+
* @remarks Sans elle, `@inject("Router")` interrogeait le container avec
|
|
27
|
+
* `"Router"` alors que l'instance y est rangée sous `"router"` (le nom de son
|
|
28
|
+
* `super()`) : le container répondait `null` et le service était RECONSTRUIT,
|
|
29
|
+
* son cache vide, silencieusement. Un seul des 7 `@injectable` échappait au
|
|
30
|
+
* piège — `HttpKernel`, par coïncidence de casse.
|
|
31
|
+
*
|
|
32
|
+
* @param service - le constructeur, tel qu'enregistré par `@injectable`.
|
|
33
|
+
* @param containerKey - `instance.name`, la clé réelle du container.
|
|
34
|
+
*/
|
|
35
|
+
static rememberContainerKey(service, containerKey) {
|
|
36
|
+
if (!service || !containerKey) return;
|
|
37
|
+
containerKeys.set(service, containerKey);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Clé container connue d'une classe de service, ou `null` si elle n'a jamais
|
|
41
|
+
* été posée au container (rien à apprendre encore).
|
|
42
|
+
*/
|
|
43
|
+
static containerKeyOf(service) {
|
|
44
|
+
return containerKeys.get(service) ?? null;
|
|
45
|
+
}
|
|
46
|
+
static getScope(serviceName) {
|
|
47
|
+
const Ctor = injectables[serviceName];
|
|
48
|
+
if (!Ctor) return "singleton";
|
|
49
|
+
return Reflect.getMetadata("di:scope", Ctor) ?? "singleton";
|
|
50
|
+
}
|
|
51
|
+
static get(serviceName) {
|
|
52
|
+
const service = injectables[serviceName];
|
|
53
|
+
if (!service) throw new Error(`Service ${serviceName} not found or not injectable`);
|
|
54
|
+
return service;
|
|
55
|
+
}
|
|
56
|
+
static inject(service, ...args) {
|
|
57
|
+
return Injector.instantiate(service, ...args);
|
|
58
|
+
}
|
|
59
|
+
instantiate(constructor, ...args) {
|
|
60
|
+
return Injector.instantiate(constructor, ...args);
|
|
61
|
+
}
|
|
62
|
+
static instantiate(constructor, ...argsClass) {
|
|
63
|
+
return Injector._instantiateWithStack(constructor, [], argsClass);
|
|
64
|
+
}
|
|
65
|
+
static _resolveWithStack(serviceName, stack) {
|
|
66
|
+
if (Injector.isRegistered(serviceName)) {
|
|
67
|
+
const Ctor = Injector.get(serviceName);
|
|
68
|
+
if ((Reflect.getMetadata("di:scope", Ctor) ?? "singleton") === "transient") return Injector._instantiateWithStack(Ctor, stack, []);
|
|
69
|
+
const kernel = Nodefony.getKernel();
|
|
70
|
+
const key = Injector.containerKeyOf(Ctor) ?? serviceName;
|
|
71
|
+
if (kernel && kernel.get(key)) return kernel.get(key);
|
|
72
|
+
let instance;
|
|
73
|
+
try {
|
|
74
|
+
instance = Injector._instantiateWithStack(Ctor, stack, []);
|
|
75
|
+
} catch (error) {
|
|
76
|
+
const requester = stack[stack.length - 1];
|
|
77
|
+
throw new Error(`Cannot resolve service "${serviceName}"` + (requester ? ` required by "${requester}"` : "") + `: it is @injectable but absent from the kernel container, so it was constructed without arguments — and its constructor threw (${error instanceof Error ? error.message : String(error)}). If "${serviceName}" is declared in @services([...]), list it BEFORE its consumers: services are instantiated in order, and a service must be in the container before anyone injects it.`, { cause: error });
|
|
78
|
+
}
|
|
79
|
+
const canonicalKey = instance.name || serviceName;
|
|
80
|
+
Injector.rememberContainerKey(Ctor, canonicalKey);
|
|
81
|
+
kernel?.set(canonicalKey, instance);
|
|
82
|
+
return instance;
|
|
83
|
+
}
|
|
84
|
+
const kernel = Nodefony.getKernel();
|
|
85
|
+
if (kernel) {
|
|
86
|
+
const existing = kernel.get(serviceName);
|
|
87
|
+
if (existing) return existing;
|
|
88
|
+
}
|
|
89
|
+
throw new Error(`Service ${serviceName} not found or not injectable`);
|
|
90
|
+
}
|
|
91
|
+
static _applyPropertyInjection(constructor, instance, stack) {
|
|
92
|
+
const propMetas = Reflect.getMetadata("inject:properties", constructor.prototype) || [];
|
|
93
|
+
for (const { key, name } of propMetas) instance[key] = Injector._resolveWithStack(name, stack);
|
|
94
|
+
return instance;
|
|
95
|
+
}
|
|
96
|
+
static _instantiateWithStack(constructor, stack, argsClass) {
|
|
97
|
+
const ctorName = constructor.name;
|
|
98
|
+
if (stack.includes(ctorName)) throw new Error(`Circular dependency detected: ${[...stack, ctorName].join(" → ")}`);
|
|
99
|
+
const nextStack = [...stack, ctorName];
|
|
100
|
+
const injectExplicit = Reflect.getMetadata("inject:services", constructor) || [];
|
|
101
|
+
const paramTypes = Reflect.getMetadata("design:paramtypes", constructor) || [];
|
|
102
|
+
if (!(injectExplicit.some(Boolean) || paramTypes.length > 0)) {
|
|
103
|
+
const instance = Reflect.construct(constructor, argsClass);
|
|
104
|
+
return Injector._applyPropertyInjection(constructor, instance, nextStack);
|
|
105
|
+
}
|
|
106
|
+
const totalParams = Math.max(paramTypes.length, injectExplicit.length);
|
|
107
|
+
const resolvedArgs = [];
|
|
108
|
+
let explicitIdx = 0;
|
|
109
|
+
for (let i = 0; i < totalParams; i++) {
|
|
110
|
+
const explicitName = injectExplicit[i];
|
|
111
|
+
if (explicitName) {
|
|
112
|
+
resolvedArgs.push(Injector._resolveWithStack(explicitName, nextStack));
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const type = paramTypes[i];
|
|
116
|
+
if (type?.name && Injector.isRegistered(type.name)) {
|
|
117
|
+
resolvedArgs.push(Injector._resolveWithStack(type.name, nextStack));
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
resolvedArgs.push(argsClass[explicitIdx++]);
|
|
121
|
+
}
|
|
122
|
+
while (explicitIdx < argsClass.length) resolvedArgs.push(argsClass[explicitIdx++]);
|
|
123
|
+
const instance = Reflect.construct(constructor, resolvedArgs);
|
|
124
|
+
return Injector._applyPropertyInjection(constructor, instance, nextStack);
|
|
125
|
+
}
|
|
126
|
+
reflect(constructor, ...args) {
|
|
127
|
+
try {
|
|
128
|
+
return Reflect.construct(constructor, args);
|
|
129
|
+
} catch (e) {
|
|
130
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
131
|
+
this.log(`ERROR SERVICE CLASS ${this.name} ${message}`, "ERROR");
|
|
132
|
+
throw e;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
//#endregion
|
|
137
|
+
export { Injector as default };
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import Injector from "./injector.js";
|
|
2
|
+
import "reflect-metadata";
|
|
3
|
+
//#region src/kernel/injector/serviceOrder.ts
|
|
4
|
+
/**
|
|
5
|
+
* Nom sous lequel un constructeur est enregistré au registre `@injectable`, ou
|
|
6
|
+
* `null` s'il ne l'est pas.
|
|
7
|
+
*
|
|
8
|
+
* @remarks Recherche inversée (valeur → clé) : `@injectable(nom)` n'écrit sa clé
|
|
9
|
+
* nulle part sur la classe — seul le registre la connaît. C'est une
|
|
10
|
+
* conséquence du divorce registre/container ; le jour où le token sera la
|
|
11
|
+
* classe, cette fonction disparaîtra.
|
|
12
|
+
*/
|
|
13
|
+
const registeredNameOf = (ctor) => {
|
|
14
|
+
const registry = Injector.injectables;
|
|
15
|
+
for (const name of Object.keys(registry)) if (registry[name] === ctor) return name;
|
|
16
|
+
return null;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Noms des services dont un constructeur dépend, tels que le DI les résoudra :
|
|
20
|
+
* `@inject("nom")` (priorité) puis l'auto-injection par type (`design:paramtypes`,
|
|
21
|
+
* résolue sur le nom de classe).
|
|
22
|
+
*/
|
|
23
|
+
const declaredDependencyNames = (ctor) => {
|
|
24
|
+
const explicit = Reflect.getMetadata("inject:services", ctor) || [];
|
|
25
|
+
const paramTypes = Reflect.getMetadata("design:paramtypes", ctor) || [];
|
|
26
|
+
const names = [];
|
|
27
|
+
for (const name of explicit) if (name) names.push(name);
|
|
28
|
+
for (const type of paramTypes) {
|
|
29
|
+
const name = type?.name;
|
|
30
|
+
if (name && Injector.isRegistered(name)) names.push(name);
|
|
31
|
+
}
|
|
32
|
+
return names;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Réordonne les services d'un `@services([...])` selon leurs dépendances
|
|
36
|
+
* **déclarées**, pour que l'ordre d'écriture cesse de compter.
|
|
37
|
+
*
|
|
38
|
+
* `@services` instancie séquentiellement et pose chaque instance au container :
|
|
39
|
+
* un service réclamé par un autre doit donc exister AVANT lui, sinon le DI le
|
|
40
|
+
* reconstruit sans argument et son constructeur casse. Faire reposer ça sur
|
|
41
|
+
* l'ordre d'une liste écrite à la main est un piège : déplacer `HttpKernel` de
|
|
42
|
+
* trois lignes dans `@nodefony/http` suffisait à rendre 499 sur chaque requête.
|
|
43
|
+
* Les dépendances étant déjà déclarées (`@inject` / `design:paramtypes`), l'ordre
|
|
44
|
+
* correct se **calcule** — c'est ce que font Symfony (container compilé) et
|
|
45
|
+
* NestJS (résolution du graphe).
|
|
46
|
+
*
|
|
47
|
+
* Tri topologique **stable** : à contrainte égale, l'ordre d'écriture est
|
|
48
|
+
* conservé — un `@services` déjà correct sort inchangé.
|
|
49
|
+
*
|
|
50
|
+
* Ne touche pas aux entrées dont les dépendances sont inconnaissables sans les
|
|
51
|
+
* charger (chemins `string`) ni aux constructeurs hors registre : elles gardent
|
|
52
|
+
* leur position relative.
|
|
53
|
+
*
|
|
54
|
+
* @param entries - la liste telle qu'écrite dans `@services([...])`.
|
|
55
|
+
* @returns la même liste, réordonnée ; jamais une entrée perdue ou dupliquée.
|
|
56
|
+
* @throws Si les dépendances déclarées forment un cycle (message nommant le cycle).
|
|
57
|
+
*/
|
|
58
|
+
function orderServicesByDependencies(entries) {
|
|
59
|
+
if (entries.length < 2) return [...entries];
|
|
60
|
+
const indexByName = /* @__PURE__ */ new Map();
|
|
61
|
+
entries.forEach((entry, i) => {
|
|
62
|
+
if (typeof entry === "string") return;
|
|
63
|
+
const name = registeredNameOf(entry);
|
|
64
|
+
if (name !== null && !indexByName.has(name)) indexByName.set(name, i);
|
|
65
|
+
});
|
|
66
|
+
const dependsOn = entries.map(() => /* @__PURE__ */ new Set());
|
|
67
|
+
let hasEdge = false;
|
|
68
|
+
entries.forEach((entry, i) => {
|
|
69
|
+
if (typeof entry === "string") return;
|
|
70
|
+
for (const depName of declaredDependencyNames(entry)) {
|
|
71
|
+
const j = indexByName.get(depName);
|
|
72
|
+
if (j === void 0 || j === i) continue;
|
|
73
|
+
dependsOn[i].add(j);
|
|
74
|
+
hasEdge = true;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
if (!hasEdge) return [...entries];
|
|
78
|
+
const remaining = new Set(entries.map((_, i) => i));
|
|
79
|
+
const ordered = [];
|
|
80
|
+
while (remaining.size > 0) {
|
|
81
|
+
let picked = -1;
|
|
82
|
+
for (const i of remaining) {
|
|
83
|
+
let ready = true;
|
|
84
|
+
for (const dep of dependsOn[i]) if (remaining.has(dep)) {
|
|
85
|
+
ready = false;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
if (ready) {
|
|
89
|
+
picked = i;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (picked === -1) {
|
|
94
|
+
const cycle = [...remaining].map((i) => {
|
|
95
|
+
const e = entries[i];
|
|
96
|
+
return typeof e === "string" ? e : e.name;
|
|
97
|
+
}).join(" → ");
|
|
98
|
+
throw new Error(`Circular service dependency in @services([...]): ${cycle}. Services are instantiated in dependency order; a cycle has no valid order.`);
|
|
99
|
+
}
|
|
100
|
+
ordered.push(entries[picked]);
|
|
101
|
+
remaining.delete(picked);
|
|
102
|
+
}
|
|
103
|
+
return ordered;
|
|
104
|
+
}
|
|
105
|
+
//#endregion
|
|
106
|
+
export { orderServicesByDependencies };
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { resolveAdminRole } from "../adminPlane/adminRbac.js";
|
|
2
|
+
import { executeAdminEndpoint, normalizeAdminResult } from "../adminPlane/executeAdmin.js";
|
|
3
|
+
//#region src/kernel/inspect/adminSubjects.ts
|
|
4
|
+
/**
|
|
5
|
+
* Sujets inspectables, et l'endpoint d'administration qui les sert.
|
|
6
|
+
*
|
|
7
|
+
* **Aucune donnée n'est calculée ici.** Chaque sujet pointe le producteur qui
|
|
8
|
+
* répond déjà en HTTP : toutes les portes rendent le même objet, parce que
|
|
9
|
+
* c'est le même code qui le produit. Une table de correspondance peut se
|
|
10
|
+
* périmer ; une réimplémentation, elle, diverge en silence — et c'est la porte
|
|
11
|
+
* secondaire qu'on croirait sur parole.
|
|
12
|
+
*
|
|
13
|
+
* ⚠️ Cette table est la SOURCE UNIQUE des sujets. La commande `inspect`, le
|
|
14
|
+
* serveur MCP et toute porte future la lisent ici — aucune n'en tient une
|
|
15
|
+
* copie.
|
|
16
|
+
*/
|
|
17
|
+
const INSPECT_SUBJECTS = {
|
|
18
|
+
routes: {
|
|
19
|
+
namespace: "framework",
|
|
20
|
+
path: "routes",
|
|
21
|
+
summary: "toutes les routes (chemin, méthodes, controller, action)"
|
|
22
|
+
},
|
|
23
|
+
modules: {
|
|
24
|
+
namespace: "kernel",
|
|
25
|
+
path: "modules",
|
|
26
|
+
summary: "modules chargés, avec leur version"
|
|
27
|
+
},
|
|
28
|
+
services: {
|
|
29
|
+
namespace: "kernel",
|
|
30
|
+
path: "services",
|
|
31
|
+
summary: "services enregistrés, et le module qui les porte"
|
|
32
|
+
},
|
|
33
|
+
config: {
|
|
34
|
+
namespace: "kernel",
|
|
35
|
+
path: "config",
|
|
36
|
+
summary: "config effective de chaque module (+ schéma, + provenance)"
|
|
37
|
+
},
|
|
38
|
+
module: {
|
|
39
|
+
namespace: "kernel",
|
|
40
|
+
path: "module/{name}",
|
|
41
|
+
summary: "un module en détail (config, services, dépendances)",
|
|
42
|
+
param: "name"
|
|
43
|
+
},
|
|
44
|
+
stores: {
|
|
45
|
+
namespace: "kernel",
|
|
46
|
+
path: "stores",
|
|
47
|
+
summary: "où sont réellement écrites les données (sessions, cache…)"
|
|
48
|
+
},
|
|
49
|
+
entities: {
|
|
50
|
+
namespace: "orm",
|
|
51
|
+
path: "entities",
|
|
52
|
+
summary: "entités déclarées à l'ORM"
|
|
53
|
+
},
|
|
54
|
+
graph: {
|
|
55
|
+
namespace: "orm",
|
|
56
|
+
path: "graph",
|
|
57
|
+
summary: "graphe des entités et de leurs relations"
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Extrait la donnée d'une réponse d'administration.
|
|
62
|
+
*
|
|
63
|
+
* Un handler rend soit la donnée, soit une enveloppe `{status, body}` (pour
|
|
64
|
+
* porter un 404). Même discrimination que le pont HTTP : enveloppe **si et
|
|
65
|
+
* seulement si** `body` est présent AVEC `status` ou `headers` — un objet
|
|
66
|
+
* métier qui posséderait un champ `body` n'est pas une enveloppe.
|
|
67
|
+
*/
|
|
68
|
+
function unwrapAdminResult(result) {
|
|
69
|
+
const { status, body } = normalizeAdminResult(result);
|
|
70
|
+
return {
|
|
71
|
+
status,
|
|
72
|
+
data: body
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Appelle un endpoint du plan d'administration, hors HTTP.
|
|
77
|
+
*
|
|
78
|
+
* ⭐ **Une source, plusieurs portes** : cette fonction ne fait que RÉSOUDRE
|
|
79
|
+
* l'endpoint (par producteur et chemin, là où la route HTTP le résout par nom
|
|
80
|
+
* de route), puis délègue à {@link ../adminPlane/executeAdmin.executeAdminEndpoint} —
|
|
81
|
+
* la même exécution que le transport HTTP. Autorisation, normalisation du
|
|
82
|
+
* retour et traduction des erreurs sont donc identiques par CONSTRUCTION, et
|
|
83
|
+
* non par vigilance.
|
|
84
|
+
*
|
|
85
|
+
* Ce que la version précédente perdait : elle appelait le handler directement
|
|
86
|
+
* et ne gardait, d'un statut d'erreur, que le nombre. Le corps préparé par le
|
|
87
|
+
* producteur — le plan d'une page, les valeurs acceptées — disparaissait, et
|
|
88
|
+
* l'appelant concluait l'inverse de la vérité. Il voyage désormais entier
|
|
89
|
+
* ({@link InspectResult}`.body`).
|
|
90
|
+
*
|
|
91
|
+
* Le rôle d'administrateur est **annoncé**, pas contourné : certains
|
|
92
|
+
* producteurs graduent leur réponse selon les rôles, et un appelant qui se
|
|
93
|
+
* présenterait en anonyme obtiendrait une vue amputée — il mentirait par
|
|
94
|
+
* omission face à la même donnée lue en HTTP. Le contrôle d'accès du plan
|
|
95
|
+
* d'administration protège le RÉSEAU ; la redaction des secrets, elle, vit dans
|
|
96
|
+
* les producteurs et s'applique donc à toutes les portes.
|
|
97
|
+
*
|
|
98
|
+
* @param broker - le service `adminBroker` du conteneur
|
|
99
|
+
* @param call - producteur, chemin, et ce qu'on lui passe
|
|
100
|
+
* @returns la donnée du producteur, ou la raison précise de l'échec
|
|
101
|
+
*/
|
|
102
|
+
async function callAdminEndpoint(broker, call, caller) {
|
|
103
|
+
const label = call.label ?? `${call.namespace}/${call.path}`;
|
|
104
|
+
const producer = broker?.list().find((api) => api.adminNamespace === call.namespace);
|
|
105
|
+
if (!producer) return {
|
|
106
|
+
ok: false,
|
|
107
|
+
reason: "producer-missing",
|
|
108
|
+
message: `« ${label} » est servi par le module « ${call.namespace} », qui n'est pas chargé dans cette app`
|
|
109
|
+
};
|
|
110
|
+
const method = call.method ?? "GET";
|
|
111
|
+
const endpoint = producer.adminEndpoints().find((candidate) => candidate.path === call.path && (candidate.method ?? "GET") === method);
|
|
112
|
+
if (!endpoint) return {
|
|
113
|
+
ok: false,
|
|
114
|
+
reason: "endpoint-missing",
|
|
115
|
+
message: `endpoint « ${method} ${call.namespace}/${call.path} » introuvable — version de module incompatible ?`
|
|
116
|
+
};
|
|
117
|
+
const request = {
|
|
118
|
+
params: call.params ?? {},
|
|
119
|
+
query: call.query ?? {},
|
|
120
|
+
body: null,
|
|
121
|
+
user: caller.user,
|
|
122
|
+
roles: caller.roles
|
|
123
|
+
};
|
|
124
|
+
let thrown = null;
|
|
125
|
+
const execution = await executeAdminEndpoint({
|
|
126
|
+
endpoint,
|
|
127
|
+
request,
|
|
128
|
+
requiredRole: resolveAdminRole(endpoint),
|
|
129
|
+
gate: null,
|
|
130
|
+
onServerError: (error) => {
|
|
131
|
+
thrown = error;
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
if (thrown) return {
|
|
135
|
+
ok: false,
|
|
136
|
+
reason: "handler-failed",
|
|
137
|
+
message: `« ${label} » n'a pas pu être lu — le producteur a échoué`,
|
|
138
|
+
cause: thrown.message
|
|
139
|
+
};
|
|
140
|
+
if (execution.status === 403) {
|
|
141
|
+
const required = execution.body?.required;
|
|
142
|
+
return {
|
|
143
|
+
ok: false,
|
|
144
|
+
reason: "forbidden",
|
|
145
|
+
status: 403,
|
|
146
|
+
message: `« ${label} » refusé — ${caller.label}` + (required ? ` ne porte pas le rôle « ${required} »` : " n'a pas le droit de lire ceci"),
|
|
147
|
+
body: execution.body
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
if (execution.status >= 400) return {
|
|
151
|
+
ok: false,
|
|
152
|
+
reason: "not-found",
|
|
153
|
+
status: execution.status,
|
|
154
|
+
message: `« ${label} » introuvable (${execution.status})`,
|
|
155
|
+
body: execution.body
|
|
156
|
+
};
|
|
157
|
+
return {
|
|
158
|
+
ok: true,
|
|
159
|
+
status: execution.status,
|
|
160
|
+
data: execution.body
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Lit un sujet d'inspection dans le plan d'administration.
|
|
165
|
+
*
|
|
166
|
+
* Résout le sujet dans {@link INSPECT_SUBJECTS}, puis délègue à
|
|
167
|
+
* {@link callAdminEndpoint} — ce qui vaut pour l'appel vaut donc ici.
|
|
168
|
+
*
|
|
169
|
+
* @param broker - le service `adminBroker` du conteneur
|
|
170
|
+
* @param subject - clé de {@link INSPECT_SUBJECTS}
|
|
171
|
+
* @param target - valeur du paramètre, pour les sujets qui en portent un
|
|
172
|
+
* @returns la donnée du producteur, ou la raison précise de l'échec
|
|
173
|
+
*/
|
|
174
|
+
async function readAdminSubject(broker, subject, caller, target) {
|
|
175
|
+
const spec = INSPECT_SUBJECTS[subject];
|
|
176
|
+
if (!spec) return {
|
|
177
|
+
ok: false,
|
|
178
|
+
reason: "unknown-subject",
|
|
179
|
+
message: `sujet inconnu « ${subject} » — attendus : ${Object.keys(INSPECT_SUBJECTS).join(", ")}`
|
|
180
|
+
};
|
|
181
|
+
if (spec.param && !target) return {
|
|
182
|
+
ok: false,
|
|
183
|
+
reason: "missing-target",
|
|
184
|
+
message: `« ${subject} » attend un argument : ${spec.param}`
|
|
185
|
+
};
|
|
186
|
+
return callAdminEndpoint(broker, {
|
|
187
|
+
namespace: spec.namespace,
|
|
188
|
+
path: spec.path,
|
|
189
|
+
params: spec.param && target ? { [spec.param]: target } : {},
|
|
190
|
+
label: target ?? subject
|
|
191
|
+
}, caller);
|
|
192
|
+
}
|
|
193
|
+
//#endregion
|
|
194
|
+
export { INSPECT_SUBJECTS, callAdminEndpoint, readAdminSubject, unwrapAdminResult };
|