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,731 @@
|
|
|
1
|
+
import { FAMILIES, TITLES, countFindings, createPalette, isSubrule, preventedChecks, sectionTitle, shouldColorize, skippedChecks, usableWidth, wrap, wrapList } from "./report.js";
|
|
2
|
+
import { defaultDevPorts, probePorts, readRuntimeState } from "../../service/dev/devProcess.js";
|
|
3
|
+
import { Spinner } from "../../cli/progress.js";
|
|
4
|
+
import { checkPackageDeps } from "./packageDeps.js";
|
|
5
|
+
import { checkWiring } from "./wiring.js";
|
|
6
|
+
import { readLastBoots } from "./lastBoot.js";
|
|
7
|
+
import { findProjectRoot } from "../../cli/projectRoot.js";
|
|
8
|
+
import { resolveEnvCascade } from "../../runtime/loadEnv.js";
|
|
9
|
+
import { stripGlobalCliFlags } from "../../cli/globalFlags.js";
|
|
10
|
+
import { checkReadiness } from "./readiness.js";
|
|
11
|
+
import { checkFreshness } from "./freshness.js";
|
|
12
|
+
import { checkSurface } from "./surface.js";
|
|
13
|
+
import { VERIFY_STEPS, checkGuards } from "./guards.js";
|
|
14
|
+
import { readOutdated, runVerifySteps } from "./deep.js";
|
|
15
|
+
import { LIVE_FAMILIES, liveNotRun } from "./live.js";
|
|
16
|
+
import { renderReport } from "./renderReport.js";
|
|
17
|
+
import { readFileSync, readdirSync, statSync } from "node:fs";
|
|
18
|
+
import path from "node:path";
|
|
19
|
+
import { execFileSync } from "node:child_process";
|
|
20
|
+
//#region src/kernel/checks/runDoctor.ts
|
|
21
|
+
/**
|
|
22
|
+
* Exécution STANDALONE de `nodefony doctor` — zéro boot, zéro Kernel.
|
|
23
|
+
*
|
|
24
|
+
* Ce contrôle ne lit que des fichiers : des `package.json` et des sources. Le
|
|
25
|
+
* faire passer par un boot d'application coûtait un démarrage complet (modules
|
|
26
|
+
* instanciés, environnement résolu, journal du Kernel par-dessus le rapport)
|
|
27
|
+
* pour une réponse qui n'en dépend pas — et rendait la commande inutilisable là
|
|
28
|
+
* où elle sert le plus : hors d'une application, ou sur une application qui ne
|
|
29
|
+
* démarre justement plus.
|
|
30
|
+
*
|
|
31
|
+
* Même famille que `status`, `stop`, `create` et `--version`.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* L'environnement que l'APPLICATION verrait, depuis ce poste.
|
|
35
|
+
*
|
|
36
|
+
* `process.env` ne porte que ce que le terminal a posé ; l'application, elle,
|
|
37
|
+
* lit d'abord sa cascade `.env*`. Un diagnostic qui l'ignore accuse ce qu'il
|
|
38
|
+
* n'a pas regardé. La cascade est celle d'ICI (mode runtime et environnement de
|
|
39
|
+
* déploiement du poste) — viser un autre environnement ne fait pas apparaître
|
|
40
|
+
* des fichiers qui ne sont pas sur cette machine.
|
|
41
|
+
*
|
|
42
|
+
* @param root - racine du projet (ou dossier de départ, hors projet).
|
|
43
|
+
* @returns l'environnement effectif ; `process.env` n'est jamais modifié.
|
|
44
|
+
*/
|
|
45
|
+
function appEnvironment(root) {
|
|
46
|
+
const runtimeEnv = process.env.NODE_ENV ?? "development";
|
|
47
|
+
const rawAppEnv = process.env.APP_ENV ?? process.env.NF_ENV ?? "";
|
|
48
|
+
return resolveEnvCascade(process.env, {
|
|
49
|
+
cwd: root,
|
|
50
|
+
runtimeEnv,
|
|
51
|
+
...rawAppEnv && rawAppEnv !== runtimeEnv ? { appEnv: rawAppEnv } : {}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/** Dispositions explorées : une application (`modules/`) et ce dépôt. */
|
|
55
|
+
const CANDIDATE_ROOTS = [
|
|
56
|
+
".",
|
|
57
|
+
"modules",
|
|
58
|
+
"src/modules",
|
|
59
|
+
"src/packages/@nodefony",
|
|
60
|
+
"src/nodefony"
|
|
61
|
+
];
|
|
62
|
+
/** Dossiers qui CONTIENNENT des cibles, par opposition à en être une. */
|
|
63
|
+
const TARGET_CONTAINERS = [
|
|
64
|
+
"modules",
|
|
65
|
+
"src/modules",
|
|
66
|
+
"src/packages/@nodefony"
|
|
67
|
+
];
|
|
68
|
+
/**
|
|
69
|
+
* Cibles du contrôle de câblage : l'application elle-même, et chaque module.
|
|
70
|
+
*
|
|
71
|
+
* Ce n'est pas la même liste que celle des paquets : un contrôle de dépendances
|
|
72
|
+
* s'intéresse à ce qui porte un `package.json`, un contrôle de câblage à ce qui
|
|
73
|
+
* porte un `nodefony/`. Les confondre ferait chercher des entités à la racine
|
|
74
|
+
* d'un dossier qui n'en contient que des modules.
|
|
75
|
+
*/
|
|
76
|
+
function wiringTargets(cwd) {
|
|
77
|
+
const targets = [cwd];
|
|
78
|
+
for (const container of TARGET_CONTAINERS) {
|
|
79
|
+
const dir = path.join(cwd, container);
|
|
80
|
+
if (!statSync(dir, { throwIfNoEntry: false })) continue;
|
|
81
|
+
try {
|
|
82
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) if (entry.isDirectory()) targets.push(path.join(dir, entry.name));
|
|
83
|
+
} catch {}
|
|
84
|
+
}
|
|
85
|
+
return targets;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Exceptions déclarées par le projet dans son `package.json` :
|
|
89
|
+
*
|
|
90
|
+
* ```json
|
|
91
|
+
* "nodefony": { "doctor": { "typeCycles": {…}, "typesUnreachable": [...] } }
|
|
92
|
+
* ```
|
|
93
|
+
*
|
|
94
|
+
* Sans cette porte, un projet portant un cycle de types légitime ne peut jamais
|
|
95
|
+
* être vert — et un contrôle qu'on ne peut pas satisfaire est un contrôle qu'on
|
|
96
|
+
* apprend à ignorer.
|
|
97
|
+
*/
|
|
98
|
+
function readExceptions(cwd) {
|
|
99
|
+
try {
|
|
100
|
+
const raw = readFileSync(path.join(cwd, "package.json"), "utf8");
|
|
101
|
+
return JSON.parse(raw).nodefony?.doctor ?? {};
|
|
102
|
+
} catch {
|
|
103
|
+
return {};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Sonde les ports de développement et CONSTATE qui les tient.
|
|
108
|
+
*
|
|
109
|
+
* Le verdict `ownedByUs` vient de `readRuntimeState`, qui invalide de lui-même
|
|
110
|
+
* un état dont le processus est mort : un serveur Nodefony en marche est l'état
|
|
111
|
+
* sain le plus courant, et l'accuser d'occuper « son » port ferait de `check` un
|
|
112
|
+
* outil qu'on apprend à ignorer.
|
|
113
|
+
*
|
|
114
|
+
* @param projectRoot - racine de l'application.
|
|
115
|
+
* @returns le verdict à injecter dans la règle, jamais la mesure elle-même.
|
|
116
|
+
*/
|
|
117
|
+
async function probeLocalPorts(projectRoot) {
|
|
118
|
+
const ports = defaultDevPorts(projectRoot);
|
|
119
|
+
return {
|
|
120
|
+
probed: ports,
|
|
121
|
+
busy: (await probePorts(ports)).filter((s) => s.listening).map((s) => s.port),
|
|
122
|
+
ownedByUs: readRuntimeState(projectRoot) !== null
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Les fichiers d'environnement LOCAUX que git suit — CONSTATÉ, jamais déduit.
|
|
127
|
+
*
|
|
128
|
+
* Trois choses peuvent manquer et ne se déduisent d'aucune autre : le binaire
|
|
129
|
+
* `git`, un dépôt, et le droit de lire son index. Le verdict porte donc
|
|
130
|
+
* `supported`, et la règle SAUTE au lieu d'afficher vert — un contrôle de
|
|
131
|
+
* secrets qui se tait sur un dossier non versionné est le pire des deux mondes.
|
|
132
|
+
*
|
|
133
|
+
* `git ls-files` reçoit ses motifs en ARGUMENTS, jamais par un shell : c'est
|
|
134
|
+
* git qui les développe, à l'identique sur les trois plateformes.
|
|
135
|
+
*
|
|
136
|
+
* @param projectRoot - racine de l'application.
|
|
137
|
+
* @returns le verdict à injecter dans la règle.
|
|
138
|
+
*/
|
|
139
|
+
function probeTrackedEnvFiles(projectRoot) {
|
|
140
|
+
try {
|
|
141
|
+
return {
|
|
142
|
+
supported: true,
|
|
143
|
+
tracked: execFileSync("git", [
|
|
144
|
+
"ls-files",
|
|
145
|
+
"-z",
|
|
146
|
+
"--",
|
|
147
|
+
".env.local",
|
|
148
|
+
".env.*.local"
|
|
149
|
+
], {
|
|
150
|
+
cwd: projectRoot,
|
|
151
|
+
encoding: "utf8",
|
|
152
|
+
stdio: [
|
|
153
|
+
"ignore",
|
|
154
|
+
"pipe",
|
|
155
|
+
"pipe"
|
|
156
|
+
]
|
|
157
|
+
}).split("\0").filter(Boolean)
|
|
158
|
+
};
|
|
159
|
+
} catch (e) {
|
|
160
|
+
return {
|
|
161
|
+
supported: false,
|
|
162
|
+
tracked: [],
|
|
163
|
+
reason: `git n'a pas pu dire ce qu'il suit ici — ${e.message.split("\n")[0]} (dossier non versionné, ou binaire git absent)`
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* L'usage, rendu avec le même soin que le rapport.
|
|
169
|
+
*
|
|
170
|
+
* Il se lit dans deux situations opposées : on découvre la commande, ou on
|
|
171
|
+
* vient de se tromper de drapeau. Il porte donc les deux réponses — ce que la
|
|
172
|
+
* commande FAIT, et ce que chaque option change — plus les codes de sortie,
|
|
173
|
+
* qu'aucune autre page ne donne et qu'un script doit connaître.
|
|
174
|
+
*
|
|
175
|
+
* @param p - la peinture en vigueur.
|
|
176
|
+
* @returns le texte complet, retour chariot final compris.
|
|
177
|
+
*/
|
|
178
|
+
function usage(p, width = usableWidth(80)) {
|
|
179
|
+
const column = 20;
|
|
180
|
+
const indent = " ".repeat(23);
|
|
181
|
+
const opt = (flag, quoi) => {
|
|
182
|
+
const [premiere, ...suite] = wrap(quoi, width - indent.length, "");
|
|
183
|
+
return ` ${p.action(flag.padEnd(column, " "))} ${premiere ?? ""}\n` + suite.map((l) => `${indent}${l}\n`).join("");
|
|
184
|
+
};
|
|
185
|
+
/** Un titre de section, prolongé par son filet — la forme du rapport. */
|
|
186
|
+
const section = (name) => {
|
|
187
|
+
const { title, divider } = sectionTitle(name, width);
|
|
188
|
+
return `\n${p.strong(title)}${p.dim(divider)}\n\n`;
|
|
189
|
+
};
|
|
190
|
+
/**
|
|
191
|
+
* Les exemples : la commande, puis ce qu'elle répond.
|
|
192
|
+
*
|
|
193
|
+
* La colonne se DÉRIVE du plus long : figée, elle saute dès qu'un exemple
|
|
194
|
+
* la dépasse, et l'aide se met à ressembler à une sortie cassée.
|
|
195
|
+
*/
|
|
196
|
+
const examples = [
|
|
197
|
+
["nodefony doctor", "l'état d'ici : build, installation, dépendances, câblage"],
|
|
198
|
+
["nodefony doctor --live", "et en plus ce que seule l'application démarrée sait : migrations, zones"],
|
|
199
|
+
["nodefony doctor --env production", "ce qui manquera dans cet environnement — variables requises en production, secrets versionnés"],
|
|
200
|
+
["nodefony doctor --json | jq .", "le même document, pour un script ou un agent"],
|
|
201
|
+
["nodefony doctor --cwd modules/blog", "depuis un sous-dossier : la racine de l'application est retrouvée seule"]
|
|
202
|
+
];
|
|
203
|
+
const exampleWidth = Math.max(...examples.map(([c]) => c.length));
|
|
204
|
+
const renderExamples = () => {
|
|
205
|
+
const inColumns = width - exampleWidth - 4 >= 24;
|
|
206
|
+
return examples.map(([command, quoi]) => {
|
|
207
|
+
if (!inColumns) return ` ${p.action(command)}\n` + wrap(quoi, width - 6, " ").map((l) => p.dim(l) + "\n").join("");
|
|
208
|
+
const padding = " ".repeat(exampleWidth + 4);
|
|
209
|
+
const suite = wrap(quoi, width - padding.length, "");
|
|
210
|
+
return ` ${p.action(command.padEnd(exampleWidth, " "))} ${p.dim(suite[0] ?? "")}\n` + suite.slice(1).map((l) => `${padding}${p.dim(l)}\n`).join("");
|
|
211
|
+
}).join("");
|
|
212
|
+
};
|
|
213
|
+
const families = wrapList(FAMILIES.filter((f) => !isSubrule(f)).map((f) => TITLES[f]), width - 4);
|
|
214
|
+
return `\n ${p.strong("nodefony doctor")}\n` + wrap("ce qui ne va pas dans cette application, et quoi taper", width - 4, " ").map((l) => p.dim(l) + "\n").join("") + `\n usage : nodefony doctor [options]\n` + section("CE QU'IL REGARDE") + families.map((l) => ` ${l}\n`).join("") + "\n" + wrap(`Il ne DÉMARRE pas l'application : il lit des fichiers, interroge git sur ce qu'il suit, et sonde les ports du poste. Il répond donc même sur une application qui ne démarre plus — c'est le moment où l'on en a le plus besoin. Les ${LIVE_FAMILIES.length} derniers contrôles font exception : ils exigent un démarrage, et ne jouent qu'avec \`--live\`.`, width - 4, " ").map((l) => `${l}\n`).join("") + section("OPTIONS") + opt("--json", "le même rapport, exploitable par un script — et AUCUNE progression, sur aucun canal : un harnais qui capture les deux flux (`2>&1`) recevrait sinon du décor au milieu de ses données") + opt("--strict", "un contrôle SAUTÉ fait échouer — armé tout seul quand la variable d'environnement `CI` est posée, ce que fait toute forge") + opt("--no-strict", "tolère un contrôle sauté, y compris sur une forge : une absence VOULUE s'énonce, elle ne se contourne pas en désarmant la commande") + opt("--live", "DEMANDE à l'application : migrations, cohérence des zones (boot console, aucun port ouvert)") + opt("--no-live", "s'en tient aux fichiers, quoi qu'un script demande") + opt("--deep", "tout : LANCE ce que le projet déclare (`typecheck`, `lint`, `test`), interroge npm sur les paquets en retard, et DEMANDE à l'application (implique `--live` ; `--no-live` le refuse). Des dizaines de secondes. N'annonce sa progression que hors `--json`") + opt("--env <e>", "dit ce qui manquera dans CET environnement (`production`, `staging`…) sans y aller") + opt("--cwd <chemin>", "point de départ (la racine de l'app est résolue en remontant)") + section("EXEMPLES") + renderExamples() + section("CODES DE SORTIE") + opt("0", "rien à signaler") + opt("1", "au moins un manquement — ou, en mode strict, un contrôle EMPÊCHÉ") + opt("64", "option inconnue (EX_USAGE)") + "\n" + wrap("Un contrôle qui n'a PAS pu regarder est toujours annoncé : son silence ne vaut jamais quitus. Un contrôle non DEMANDÉ (`--live`) est affiché de même, mais ne pèse pas sur le code de sortie.", width - 4, " ").map((l) => p.dim(l) + "\n").join("") + "\n";
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* La sévérité d'un contrôle sauté, décidée hors de la ligne de commande.
|
|
218
|
+
*
|
|
219
|
+
* Un drapeau explicite gagne toujours — dans les deux sens : `--no-strict`
|
|
220
|
+
* existe pour qu'une absence VOULUE puisse s'énoncer en intégration continue,
|
|
221
|
+
* plutôt que de se contourner en désarmant la commande entière.
|
|
222
|
+
*
|
|
223
|
+
* @param mot - `--strict`, `--no-strict`, ou rien.
|
|
224
|
+
* @param env - l'environnement, injecté (une fonction qui lit `process.env` ne
|
|
225
|
+
* s'éprouve que dans l'environnement où elle tourne).
|
|
226
|
+
* @returns `true` si un contrôle sauté doit peser sur le code de sortie.
|
|
227
|
+
*/
|
|
228
|
+
/**
|
|
229
|
+
* Les MODES d'exécution connus — ceux que le moteur distingue vraiment.
|
|
230
|
+
*
|
|
231
|
+
* La liste des environnements de DÉPLOIEMENT, elle, est ouverte (`staging`,
|
|
232
|
+
* `preprod`, `qa`… sont des chaînes libres, cf `NF_ENV`) : la fermer refuserait
|
|
233
|
+
* des environnements parfaitement légitimes. C'est pourquoi la garde
|
|
234
|
+
* ci-dessous ne refuse PAS l'inconnu — elle refuse ce qui RESSEMBLE à une
|
|
235
|
+
* faute de frappe sur l'un de ces mots.
|
|
236
|
+
*/
|
|
237
|
+
const KNOWN_MODES = [
|
|
238
|
+
"production",
|
|
239
|
+
"development",
|
|
240
|
+
"dev",
|
|
241
|
+
"prod",
|
|
242
|
+
"test"
|
|
243
|
+
];
|
|
244
|
+
/**
|
|
245
|
+
* La distance d'édition entre deux mots, bornée.
|
|
246
|
+
*
|
|
247
|
+
* Bornée parce qu'on ne cherche pas à mesurer : on cherche à savoir si deux
|
|
248
|
+
* mots sont à une ou deux frappes l'un de l'autre. Au-delà, la réponse est
|
|
249
|
+
* « non » et le calcul ne sert plus à rien.
|
|
250
|
+
*/
|
|
251
|
+
function editDistance(a, b, max = 3) {
|
|
252
|
+
if (Math.abs(a.length - b.length) > max) return max + 1;
|
|
253
|
+
let previous = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
254
|
+
for (let i = 1; i <= a.length; i++) {
|
|
255
|
+
const current = [i];
|
|
256
|
+
for (let j = 1; j <= b.length; j++) current[j] = Math.min((current[j - 1] ?? 0) + 1, (previous[j] ?? 0) + 1, (previous[j - 1] ?? 0) + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
257
|
+
previous = current;
|
|
258
|
+
}
|
|
259
|
+
return previous[b.length] ?? max + 1;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Le mode connu dont cet environnement est visiblement une faute de frappe.
|
|
263
|
+
*
|
|
264
|
+
* 🔴 Vécu, et c'est le pire mode de défaillance d'un diagnostic : `doctor --env
|
|
265
|
+
* produntion` rendait un rapport COMPLET et plausible, verdict compris, sur un
|
|
266
|
+
* environnement qui n'existe nulle part — le mot inventé s'affichait tel quel
|
|
267
|
+
* dans chaque phrase. Un outil dont le rôle est de dire la vérité ne doit pas
|
|
268
|
+
* être le seul à ne pas la vérifier sur sa propre entrée.
|
|
269
|
+
*
|
|
270
|
+
* On ne refuse PAS tout inconnu : un environnement de déploiement est une
|
|
271
|
+
* chaîne libre, et refuser `preprod` rendrait l'option inutilisable là où elle
|
|
272
|
+
* sert. On refuse ce qui est à une ou deux frappes d'un mode connu, sans en
|
|
273
|
+
* être un — c'est la signature d'une faute, pas d'un choix.
|
|
274
|
+
*
|
|
275
|
+
* @param env - l'environnement demandé.
|
|
276
|
+
* @returns le mode dont il est probablement une coquille, sinon `null`.
|
|
277
|
+
*/
|
|
278
|
+
function likelyTypo(env) {
|
|
279
|
+
const lower = env.toLowerCase();
|
|
280
|
+
if (KNOWN_MODES.includes(lower)) return null;
|
|
281
|
+
for (const mode of KNOWN_MODES) {
|
|
282
|
+
const threshold = mode.length <= 5 ? 1 : 2;
|
|
283
|
+
if (editDistance(lower, mode) <= threshold) return mode;
|
|
284
|
+
}
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
function resolveStrict(word, env) {
|
|
288
|
+
if (word !== void 0) return word;
|
|
289
|
+
return Boolean(env.CI);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Parse l'argv après le mot `check` (ou son alias `doctor`).
|
|
293
|
+
*
|
|
294
|
+
* La borne est le mot de commande, pas la position : le fast-path passe
|
|
295
|
+
* `process.argv` entier (`node`, chemin du binaire, `check`, …) tandis que le
|
|
296
|
+
* filet de {@link Check.generate} ne passe que les options. Sans mot de
|
|
297
|
+
* commande, tout l'argv reçu est donc considéré comme des options.
|
|
298
|
+
*/
|
|
299
|
+
function parseDoctorArgv(argv) {
|
|
300
|
+
const at = argv.findIndex((w) => w === "doctor");
|
|
301
|
+
const rest = stripGlobalCliFlags(at === -1 ? argv : argv.slice(at + 1));
|
|
302
|
+
let json = false;
|
|
303
|
+
let cwd = process.cwd();
|
|
304
|
+
let strict;
|
|
305
|
+
let live = false;
|
|
306
|
+
let deep = false;
|
|
307
|
+
let liveRefuse = false;
|
|
308
|
+
let help = false;
|
|
309
|
+
let targetEnv = null;
|
|
310
|
+
for (let i = 0; i < rest.length; i++) {
|
|
311
|
+
const word = rest[i];
|
|
312
|
+
if (word === "--help" || word === "-h") help = true;
|
|
313
|
+
else if (word === "--json" || word === "-j") json = true;
|
|
314
|
+
else if (word === "--strict") strict = true;
|
|
315
|
+
else if (word === "--no-strict") strict = false;
|
|
316
|
+
else if (word === "--deep") deep = true;
|
|
317
|
+
else if (word === "--live") live = true;
|
|
318
|
+
else if (word === "--no-live") {
|
|
319
|
+
live = false;
|
|
320
|
+
liveRefuse = true;
|
|
321
|
+
} else if (word === "--cwd") cwd = path.resolve(rest[++i] ?? "");
|
|
322
|
+
else if (word === "--env") {
|
|
323
|
+
const value = rest[++i];
|
|
324
|
+
if (value === void 0 || value.startsWith("-")) return { error: "--env attend un environnement (ex. --env production)" };
|
|
325
|
+
const typo = likelyTypo(value);
|
|
326
|
+
if (typo) return { error: `environnement inconnu : ${value} — voulais-tu dire ${typo} ? (un environnement de déploiement libre, comme preprod ou qa, est accepté tel quel)` };
|
|
327
|
+
targetEnv = value;
|
|
328
|
+
} else return { error: `option inconnue : ${word}` };
|
|
329
|
+
}
|
|
330
|
+
return {
|
|
331
|
+
json,
|
|
332
|
+
cwd,
|
|
333
|
+
help,
|
|
334
|
+
live: live || deep && !liveRefuse,
|
|
335
|
+
deep,
|
|
336
|
+
targetEnv,
|
|
337
|
+
strict: resolveStrict(strict, process.env)
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Collecte le diagnostic — sans rien imprimer.
|
|
342
|
+
*
|
|
343
|
+
* Séparé du rendu pour la même raison que la table des sujets d'`inspect` :
|
|
344
|
+
* dès qu'une deuxième porte existe, une collecte enfouie dans une fonction qui
|
|
345
|
+
* écrit sur la sortie standard oblige à la réécrire, et les deux divergent.
|
|
346
|
+
*
|
|
347
|
+
* ⚠️ **La cible est l'APPLICATION, pas le dossier où l'on a tapé** : on remonte
|
|
348
|
+
* au premier dossier portant `nodefony.config.ts`. Hors projet, le dossier de
|
|
349
|
+
* départ reste la cible, et l'état d'installation n'est pas contrôlé (sans
|
|
350
|
+
* manifeste ni environnement, une sonde accuserait le premier serveur venu).
|
|
351
|
+
*
|
|
352
|
+
* @param start - dossier de départ de la remontée
|
|
353
|
+
* @returns le rapport complet, sans verdict ni code de sortie
|
|
354
|
+
*/
|
|
355
|
+
async function collectDoctorReport(start, targetEnv = null, deepRequested = false, report) {
|
|
356
|
+
const projectRoot = findProjectRoot(start);
|
|
357
|
+
const cwd = projectRoot ?? start;
|
|
358
|
+
const deep = deepRequested && projectRoot ? await (async () => {
|
|
359
|
+
const steps = await runVerifySteps(projectRoot, VERIFY_STEPS, void 0, report);
|
|
360
|
+
const { summary, reason } = await readOutdated(projectRoot, void 0, report);
|
|
361
|
+
return {
|
|
362
|
+
steps,
|
|
363
|
+
outdated: summary,
|
|
364
|
+
outdatedReason: reason
|
|
365
|
+
};
|
|
366
|
+
})() : null;
|
|
367
|
+
const lastBoots = readLastBoots(cwd);
|
|
368
|
+
const roots = CANDIDATE_ROOTS.map((r) => path.join(cwd, r)).filter((r) => statSync(r, { throwIfNoEntry: false }));
|
|
369
|
+
const { typeCycles, typesUnreachable, entityDialect } = readExceptions(cwd);
|
|
370
|
+
const { findings, scanned } = checkPackageDeps({
|
|
371
|
+
roots,
|
|
372
|
+
cwd,
|
|
373
|
+
typeCycles,
|
|
374
|
+
typesUnreachable
|
|
375
|
+
});
|
|
376
|
+
const wiring = checkWiring({
|
|
377
|
+
roots: wiringTargets(cwd),
|
|
378
|
+
cwd,
|
|
379
|
+
projectRoot: cwd
|
|
380
|
+
});
|
|
381
|
+
const readiness = projectRoot ? await checkReadiness({
|
|
382
|
+
projectRoot,
|
|
383
|
+
probe: await probeLocalPorts(projectRoot),
|
|
384
|
+
targetEnv,
|
|
385
|
+
tracked: probeTrackedEnvFiles(projectRoot)
|
|
386
|
+
}) : {
|
|
387
|
+
findings: [],
|
|
388
|
+
catalogUnreadable: false,
|
|
389
|
+
portsProbed: [],
|
|
390
|
+
trackedUnknown: null
|
|
391
|
+
};
|
|
392
|
+
const surface = checkSurface({
|
|
393
|
+
roots: wiringTargets(cwd),
|
|
394
|
+
cwd,
|
|
395
|
+
...projectRoot ? { projectRoot } : {},
|
|
396
|
+
env: appEnvironment(cwd),
|
|
397
|
+
...entityDialect ? { dialectExceptions: entityDialect } : {}
|
|
398
|
+
});
|
|
399
|
+
const guards = projectRoot ? checkGuards({ projectRoot }) : {
|
|
400
|
+
findings: [],
|
|
401
|
+
armed: 0,
|
|
402
|
+
armedNames: [],
|
|
403
|
+
linterUnreadable: true,
|
|
404
|
+
manifestUnreadable: true
|
|
405
|
+
};
|
|
406
|
+
const freshness = projectRoot ? checkFreshness(projectRoot) : {
|
|
407
|
+
findings: [],
|
|
408
|
+
notComparable: true
|
|
409
|
+
};
|
|
410
|
+
const outsideProject = {
|
|
411
|
+
ran: false,
|
|
412
|
+
reason: "aucune application ici (pas de `nodefony.config.ts` en remontant)",
|
|
413
|
+
short: "hors application",
|
|
414
|
+
unlock: "lance `nodefony doctor` depuis une application"
|
|
415
|
+
};
|
|
416
|
+
return {
|
|
417
|
+
root: cwd,
|
|
418
|
+
appName: appName(cwd),
|
|
419
|
+
scanned,
|
|
420
|
+
findings,
|
|
421
|
+
freshness,
|
|
422
|
+
surface,
|
|
423
|
+
guards,
|
|
424
|
+
wiring: {
|
|
425
|
+
scanned: wiring.scanned,
|
|
426
|
+
findings: wiring.findings
|
|
427
|
+
},
|
|
428
|
+
readiness,
|
|
429
|
+
deep,
|
|
430
|
+
lastBoots,
|
|
431
|
+
exceptions: Object.values(typeCycles ?? {}).flat().length + (typesUnreachable?.length ?? 0),
|
|
432
|
+
execution: {
|
|
433
|
+
freshness: !projectRoot ? outsideProject : freshness.notComparable ? {
|
|
434
|
+
ran: false,
|
|
435
|
+
reason: "ni sources ni `dist/` à comparer sous cette racine — il n'y a rien à confronter",
|
|
436
|
+
short: "rien à comparer",
|
|
437
|
+
unlock: "construis l'application (`npm run build`)"
|
|
438
|
+
} : { ran: true },
|
|
439
|
+
readiness: projectRoot ? { ran: true } : outsideProject,
|
|
440
|
+
envCatalog: !projectRoot ? outsideProject : readiness.catalogUnreadable ? {
|
|
441
|
+
ran: false,
|
|
442
|
+
reason: "le catalogue des variables déclarées se lit dans le `dist/` de l'application, qui n'est pas construite : le silence de la règle « variable requise » ne vaut pas quitus",
|
|
443
|
+
short: "catalogue illisible",
|
|
444
|
+
unlock: "`npm run build`"
|
|
445
|
+
} : { ran: true },
|
|
446
|
+
envTracked: !projectRoot ? outsideProject : readiness.trackedUnknown ? {
|
|
447
|
+
ran: false,
|
|
448
|
+
reason: `${readiness.trackedUnknown} : impossible de dire si un fichier .env*.local est versionné`,
|
|
449
|
+
short: "git muet",
|
|
450
|
+
unlock: "lance depuis un dépôt git (`git init`)"
|
|
451
|
+
} : { ran: true },
|
|
452
|
+
guards: !projectRoot ? outsideProject : guards.manifestUnreadable || guards.linterUnreadable ? {
|
|
453
|
+
ran: false,
|
|
454
|
+
reason: "le manifeste ou la configuration du linter n'a pas pu être lu : impossible de dire si les gardes du projet sont armées",
|
|
455
|
+
short: "config illisible",
|
|
456
|
+
unlock: "vérifie `package.json` et `.oxlintrc.json`"
|
|
457
|
+
} : { ran: true },
|
|
458
|
+
verify: !projectRoot ? outsideProject : deep === null ? {
|
|
459
|
+
ran: false,
|
|
460
|
+
reason: "les gardes du projet n'ont pas été LANCÉES — seule leur présence a été constatée",
|
|
461
|
+
short: "non demandé",
|
|
462
|
+
onDemand: true,
|
|
463
|
+
unlock: "nodefony doctor --deep"
|
|
464
|
+
} : { ran: true },
|
|
465
|
+
outdated: !projectRoot ? outsideProject : deep === null ? {
|
|
466
|
+
ran: false,
|
|
467
|
+
reason: "le registre npm n'a pas été interrogé — c'est du réseau, et il ne se paie que sur demande",
|
|
468
|
+
short: "non demandé",
|
|
469
|
+
onDemand: true,
|
|
470
|
+
unlock: "nodefony doctor --deep"
|
|
471
|
+
} : deep.outdated === null ? {
|
|
472
|
+
ran: false,
|
|
473
|
+
reason: deep.outdatedReason,
|
|
474
|
+
short: "registre muet",
|
|
475
|
+
unlock: "réessaie quand le réseau répond"
|
|
476
|
+
} : { ran: true },
|
|
477
|
+
surface: surface.scanned > 0 ? { ran: true } : {
|
|
478
|
+
ran: false,
|
|
479
|
+
reason: "aucune source TypeScript sous les racines explorées : il n'y a rien où chercher une route ouverte",
|
|
480
|
+
short: "aucune source",
|
|
481
|
+
notApplicable: true,
|
|
482
|
+
unlock: "vérifie la racine visée (`--cwd`)"
|
|
483
|
+
},
|
|
484
|
+
dialect: surface.entitiesScanned > 0 ? { ran: true } : {
|
|
485
|
+
ran: false,
|
|
486
|
+
reason: "aucune entité Drizzle dans cette application — il n'y a pas de dialecte à confronter",
|
|
487
|
+
short: "aucune entité",
|
|
488
|
+
notApplicable: true,
|
|
489
|
+
unlock: "`nodefony create entity <Nom>`"
|
|
490
|
+
},
|
|
491
|
+
deps: !projectRoot ? outsideProject : scanned > 0 ? { ran: true } : {
|
|
492
|
+
ran: false,
|
|
493
|
+
reason: "aucun `package.json` sous les racines explorées",
|
|
494
|
+
short: "aucun paquet",
|
|
495
|
+
unlock: "vérifie la racine visée (`--cwd`)"
|
|
496
|
+
},
|
|
497
|
+
...liveNotRun("l'état de la base, la cohérence des zones et ce qu'un autre environnement retirerait ne se lisent dans aucun fichier : il faut démarrer l'application pour les constater", targetEnv ? `\`nodefony doctor --live --env ${targetEnv}\`` : "`nodefony doctor --live`", true).execution,
|
|
498
|
+
wiring: !projectRoot ? outsideProject : wiring.scanned > 0 ? { ran: true } : {
|
|
499
|
+
ran: false,
|
|
500
|
+
reason: "aucune classe déclarée (`@controller`, `@entity`, `@injectable`) n'a été trouvée : il n'y a rien à confronter au manifeste",
|
|
501
|
+
short: "aucune classe",
|
|
502
|
+
notApplicable: true,
|
|
503
|
+
unlock: "`nodefony create controller <Nom>`"
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Nombre total de manquements d'un rapport — le verdict, en un endroit.
|
|
510
|
+
*
|
|
511
|
+
* Délègue à {@link countFindings} : le rendu compte par la même fonction, et
|
|
512
|
+
* le bilan chiffré ne peut donc plus contredire le sommaire qui le surmonte.
|
|
513
|
+
* Ce nom reste parce qu'il a voyagé (le serveur MCP le lit).
|
|
514
|
+
*/
|
|
515
|
+
function countCheckFindings(report) {
|
|
516
|
+
return countFindings(report);
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* La ligne d'annonce d'un évènement de l'étage profond, ou `null` s'il n'y a
|
|
520
|
+
* rien à dire.
|
|
521
|
+
*
|
|
522
|
+
* Fonction PURE, pour que ce qui s'affiche pendant une attente de plusieurs
|
|
523
|
+
* minutes s'éprouve sans attendre quoi que ce soit.
|
|
524
|
+
*
|
|
525
|
+
* @param e - l'évènement annoncé par l'étage profond.
|
|
526
|
+
* @param p - la palette (couleur ou non, selon le terminal).
|
|
527
|
+
* @returns la ligne à écrire, sans retour chariot, ou `null`.
|
|
528
|
+
*/
|
|
529
|
+
function progressLine(e, p) {
|
|
530
|
+
const quoi = e.step === "outdated" ? "npm outdated" : `npm run ${e.step}`;
|
|
531
|
+
if (e.phase === "start") return p.dim(` … ${quoi}`);
|
|
532
|
+
const seconds = e.ms === void 0 ? "" : ` (${(e.ms / 1e3).toFixed(1)} s)`;
|
|
533
|
+
switch (e.outcome) {
|
|
534
|
+
case "passed":
|
|
535
|
+
case "ok": return ` ${p.ok("✓")} ${quoi}${p.dim(seconds)}`;
|
|
536
|
+
case "failed": return ` ${p.failure("✗")} ${quoi}${p.dim(seconds)}`;
|
|
537
|
+
case "timeout": return ` ${p.failure("⏱")} ${quoi}${p.dim(`${seconds} — interrompu`)}`;
|
|
538
|
+
case "unavailable": return ` ${p.warning("—")} ${quoi}${p.dim(`${seconds} — sans réponse`)}`;
|
|
539
|
+
default: return null;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Le reporter à donner à l'étage profond — ou `undefined` quand personne ne lit.
|
|
544
|
+
*
|
|
545
|
+
* 🔴 **Deux décisions, et elles ne sont pas cosmétiques.**
|
|
546
|
+
*
|
|
547
|
+
* *Le canal* : la progression part sur la sortie d'ERREUR, jamais sur la sortie
|
|
548
|
+
* standard. Celle-ci porte le RAPPORT, que l'on redirige couramment vers un
|
|
549
|
+
* fichier (`nodefony doctor > diagnostic.txt`) ; une progression éphémère qui
|
|
550
|
+
* s'y glisserait salirait un document qu'on relit plus tard, et rendrait le
|
|
551
|
+
* `--json` inexploitable. C'est aussi la convention des outils qui annoncent
|
|
552
|
+
* leur travail — npm, cargo, docker écrivent tous leur progression sur stderr.
|
|
553
|
+
*
|
|
554
|
+
* *Le silence en `--json`* : rien n'est émis du tout, sur aucun canal. Un agent
|
|
555
|
+
* qui capture les deux flux (`2>&1`, ce que font la plupart des harnais) verrait
|
|
556
|
+
* sinon des lignes de décor tomber au milieu de son JSON. La règle est donc
|
|
557
|
+
* simple à documenter et sans exception : **`--json` n'émet aucune
|
|
558
|
+
* progression**.
|
|
559
|
+
*
|
|
560
|
+
* @param json - `true` si le rapport est demandé en JSON.
|
|
561
|
+
* @param write - où écrire (injecté : une fonction qui touche `process.stderr`
|
|
562
|
+
* en dur ne s'éprouve que par capture globale, donc mal).
|
|
563
|
+
* @returns le reporter, ou `undefined` s'il ne faut rien annoncer.
|
|
564
|
+
*/
|
|
565
|
+
function reporterProgression(json, write = (l) => process.stderr.write(`${l}\n`), stream = process.stderr) {
|
|
566
|
+
if (json) return void 0;
|
|
567
|
+
const p = createPalette(shouldColorize(process.env, Boolean(process.stderr.isTTY)));
|
|
568
|
+
const spinner = Boolean(stream.isTTY) ? new Spinner({
|
|
569
|
+
stream,
|
|
570
|
+
render: (frame, label) => ` ${p.ok(frame)} ${p.dim(label)}`
|
|
571
|
+
}) : null;
|
|
572
|
+
return (e) => {
|
|
573
|
+
const label = e.step === "outdated" ? "npm outdated" : `npm run ${e.step}`;
|
|
574
|
+
if (spinner !== null) {
|
|
575
|
+
if (e.phase === "start") spinner.start(label);
|
|
576
|
+
else spinner.stop(progressLine(e, p) ?? void 0);
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
const line = progressLine(e, p);
|
|
580
|
+
if (line !== null) write(line);
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
async function runDoctorCommand(argv) {
|
|
584
|
+
const parsed = parseDoctorArgv(argv);
|
|
585
|
+
if ("error" in parsed) {
|
|
586
|
+
const p = createPalette(shouldColorize(process.env, Boolean(process.stderr.isTTY)));
|
|
587
|
+
const width = usableWidth(process.stderr.columns);
|
|
588
|
+
for (const l of wrap(`doctor : ${parsed.error}`, width, " ")) process.stderr.write(`${p.failure(l)}\n`);
|
|
589
|
+
process.stderr.write(usage(p, usableWidth(process.stderr.columns)));
|
|
590
|
+
return 64;
|
|
591
|
+
}
|
|
592
|
+
if (parsed.help) {
|
|
593
|
+
process.stdout.write(usage(createPalette(shouldColorize(process.env, Boolean(process.stdout.isTTY))), usableWidth(process.stdout.columns)));
|
|
594
|
+
return 0;
|
|
595
|
+
}
|
|
596
|
+
const debut = Date.now();
|
|
597
|
+
return renderDoctorReport(await collectDoctorReport(parsed.cwd, parsed.targetEnv, parsed.deep, reporterProgression(parsed.json)), parsed, Date.now() - debut);
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Greffe l'étage 2 sur un rapport statique.
|
|
601
|
+
*
|
|
602
|
+
* En UN endroit, parce que la fusion porte une règle : les deux familles de
|
|
603
|
+
* l'étage 2 sont REMPLACÉES, jamais complétées. `collectDoctorReport` les a
|
|
604
|
+
* posées à « non demandé » — les laisser à côté du vrai résultat afficherait
|
|
605
|
+
* deux états pour un seul contrôle, et le sommaire cesserait de dire la vérité.
|
|
606
|
+
*
|
|
607
|
+
* @param report - le rapport statique, tel que la lecture pure l'a produit
|
|
608
|
+
* @param live - ce que l'application démarrée a dit d'elle-même
|
|
609
|
+
* @returns un rapport neuf ; l'entrée n'est pas modifiée
|
|
610
|
+
*/
|
|
611
|
+
function attachLive(report, live) {
|
|
612
|
+
return {
|
|
613
|
+
...report,
|
|
614
|
+
live,
|
|
615
|
+
execution: {
|
|
616
|
+
...report.execution,
|
|
617
|
+
...live.execution
|
|
618
|
+
}
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* Rend le rapport et décide du code de sortie.
|
|
623
|
+
*
|
|
624
|
+
* Séparé de la collecte pour une raison précise : `doctor --live` boote, donc
|
|
625
|
+
* il compose son rapport en DEUX temps (les fichiers, puis l'application) et
|
|
626
|
+
* doit rendre le tout par le même chemin. Deux rendus pour un même document
|
|
627
|
+
* finiraient par diverger — et c'est le rendu qui porte la doctrine du verdict.
|
|
628
|
+
*
|
|
629
|
+
* @param report - le rapport complet, étage 2 greffé ou non
|
|
630
|
+
* @param parsed - la demande, telle que la ligne de commande l'a exprimée
|
|
631
|
+
* @returns le code de sortie : 0 si rien à signaler, 1 sinon
|
|
632
|
+
*/
|
|
633
|
+
function renderDoctorReport(report, parsed, durationMs) {
|
|
634
|
+
const { json, strict } = parsed;
|
|
635
|
+
const start = parsed.cwd;
|
|
636
|
+
const skipped = skippedChecks(report.execution);
|
|
637
|
+
const empeches = preventedChecks(skipped);
|
|
638
|
+
const code = () => {
|
|
639
|
+
if (countCheckFindings(report) > 0) return 1;
|
|
640
|
+
return strict && empeches.length > 0 ? 1 : 0;
|
|
641
|
+
};
|
|
642
|
+
if (json) {
|
|
643
|
+
process.stdout.write(`${JSON.stringify({
|
|
644
|
+
...report,
|
|
645
|
+
skipped,
|
|
646
|
+
strict
|
|
647
|
+
}, null, 2)}\n`);
|
|
648
|
+
return code();
|
|
649
|
+
}
|
|
650
|
+
const out = process.stdout;
|
|
651
|
+
const lines = renderReport(report, {
|
|
652
|
+
width: usableWidth(out.columns),
|
|
653
|
+
color: shouldColorize(process.env, Boolean(out.isTTY)),
|
|
654
|
+
now: Date.now(),
|
|
655
|
+
launchedFrom: start,
|
|
656
|
+
strict,
|
|
657
|
+
targetEnv: parsed.targetEnv,
|
|
658
|
+
...durationMs === void 0 ? {} : { durationMs }
|
|
659
|
+
});
|
|
660
|
+
out.write(`${lines.join("\n")}\n`);
|
|
661
|
+
return code();
|
|
662
|
+
}
|
|
663
|
+
/**
|
|
664
|
+
* Le nom de l'application, tel que son manifeste le déclare.
|
|
665
|
+
*
|
|
666
|
+
* @param root - racine du projet.
|
|
667
|
+
* @returns `nom@version`, ou une chaîne vide si le manifeste ne dit rien.
|
|
668
|
+
*/
|
|
669
|
+
function appName(root) {
|
|
670
|
+
try {
|
|
671
|
+
const pkg = JSON.parse(readFileSync(path.join(root, "package.json"), "utf8"));
|
|
672
|
+
if (!pkg.name) return "";
|
|
673
|
+
return pkg.version ? `${pkg.name} ${pkg.version}` : pkg.name;
|
|
674
|
+
} catch {
|
|
675
|
+
return "";
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
/**
|
|
679
|
+
* La commande demandée est-elle `doctor` ?
|
|
680
|
+
*
|
|
681
|
+
* L'alias historique `check` a été RETIRÉ : il ne disait pas ce qu'il vérifie,
|
|
682
|
+
* et il entrait en collision de sens avec les scripts `typecheck` et
|
|
683
|
+
* `format:check` d'une application. Aucun paquet `@nodefony/*` n'étant publié
|
|
684
|
+
* (#175), ce nom n'a jamais atteint une application installée.
|
|
685
|
+
*
|
|
686
|
+
* @param requested - le nom de commande lu sur la ligne de commande.
|
|
687
|
+
* @returns `true` pour `doctor`.
|
|
688
|
+
*/
|
|
689
|
+
function isDoctorCommand(requested) {
|
|
690
|
+
return requested === "doctor";
|
|
691
|
+
}
|
|
692
|
+
/**
|
|
693
|
+
* L'invocation demande-t-elle l'étage 2 — celui qui exige un boot ?
|
|
694
|
+
*
|
|
695
|
+
* Une SEULE implémentation de la règle, parce qu'elle sert à deux endroits qui
|
|
696
|
+
* doivent s'accorder : le fast-path standalone (qui ne se prend PAS quand
|
|
697
|
+
* l'étage 2 est demandé) et le rattrapage d'un boot mort. Écrite deux fois,
|
|
698
|
+
* elle divergerait au premier drapeau ajouté — `--no-live` en est déjà un, que
|
|
699
|
+
* la lecture naïve de `argv` ignorait.
|
|
700
|
+
*
|
|
701
|
+
* @param requested - le nom de commande lu sur la ligne de commande.
|
|
702
|
+
* @param argv - la ligne de commande complète.
|
|
703
|
+
* @returns `true` si l'application doit être démarrée puis interrogée.
|
|
704
|
+
*/
|
|
705
|
+
function wantsLiveDoctor(requested, argv) {
|
|
706
|
+
if (!isDoctorCommand(requested)) return false;
|
|
707
|
+
const parsed = parseDoctorArgv([...argv]);
|
|
708
|
+
return "error" in parsed ? false : parsed.live && !parsed.help;
|
|
709
|
+
}
|
|
710
|
+
/**
|
|
711
|
+
* Rend le rapport de `doctor` alors que l'application vient d'échouer à démarrer.
|
|
712
|
+
*
|
|
713
|
+
* 🔴 C'est le cas POUR lequel la commande existe. `--live` sort du fast-path et
|
|
714
|
+
* demande un boot : sans ce chemin, une application qui ne démarre plus rendait
|
|
715
|
+
* une pile brute et RIEN d'autre — moins que `doctor` nu. L'étage 2 devient
|
|
716
|
+
* alors un état d'exécution lisible (ce qui a manqué, et le geste), et l'étage
|
|
717
|
+
* 1 est rendu comme d'habitude, code de sortie compris.
|
|
718
|
+
*
|
|
719
|
+
* @param argv - la ligne de commande telle qu'elle a été tapée.
|
|
720
|
+
* @param reason - pourquoi l'application n'a pas pu répondre.
|
|
721
|
+
* @param unlock - le geste qui la rendrait interrogeable.
|
|
722
|
+
* @returns le code de sortie du rapport.
|
|
723
|
+
*/
|
|
724
|
+
async function runDoctorWithoutLive(argv, reason, unlock) {
|
|
725
|
+
const parsed = parseDoctorArgv(argv);
|
|
726
|
+
if ("error" in parsed || parsed.help) return runDoctorCommand(argv);
|
|
727
|
+
const start = Date.now();
|
|
728
|
+
return renderDoctorReport(attachLive(await collectDoctorReport(parsed.cwd, parsed.targetEnv, parsed.deep, reporterProgression(parsed.json)), liveNotRun(reason, unlock)), parsed, Date.now() - start);
|
|
729
|
+
}
|
|
730
|
+
//#endregion
|
|
731
|
+
export { attachLive, collectDoctorReport, countCheckFindings, editDistance, isDoctorCommand, likelyTypo, parseDoctorArgv, progressLine, renderDoctorReport, reporterProgression, resolveStrict, runDoctorCommand, runDoctorWithoutLive, usage, wantsLiveDoctor };
|