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,332 @@
|
|
|
1
|
+
import "./sysexits.js";
|
|
2
|
+
import { printUsage, printUsageError } from "./usageReport.js";
|
|
3
|
+
import { findProjectRoot } from "./projectRoot.js";
|
|
4
|
+
import { envFileOrder } from "../runtime/loadEnv.js";
|
|
5
|
+
import { renderEnvExample } from "../config/envExample.js";
|
|
6
|
+
import { getEnvCatalog } from "../config/defineEnv.js";
|
|
7
|
+
import { stripGlobalCliFlags } from "./globalFlags.js";
|
|
8
|
+
import { buildEnvReport } from "./envReport.js";
|
|
9
|
+
import { parseEnv } from "node:util";
|
|
10
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
11
|
+
import path from "node:path";
|
|
12
|
+
import { pathToFileURL } from "node:url";
|
|
13
|
+
//#region src/cli/env.ts
|
|
14
|
+
/** Parse l'argv après le mot `env`. */
|
|
15
|
+
function parseEnvArgv(argv) {
|
|
16
|
+
const at = argv.indexOf("env");
|
|
17
|
+
const rest = stripGlobalCliFlags(at === -1 ? [] : argv.slice(at + 1));
|
|
18
|
+
let json = false;
|
|
19
|
+
let example = false;
|
|
20
|
+
let check = false;
|
|
21
|
+
let cwd = process.cwd();
|
|
22
|
+
let targetEnv = null;
|
|
23
|
+
let help = false;
|
|
24
|
+
for (let i = 0; i < rest.length; i++) {
|
|
25
|
+
const word = rest[i];
|
|
26
|
+
if (word === "--help" || word === "-h") help = true;
|
|
27
|
+
else if (word === "--json" || word === "-j") json = true;
|
|
28
|
+
else if (word === "--example") example = true;
|
|
29
|
+
else if (word === "--check") check = true;
|
|
30
|
+
else if (word === "--cwd") cwd = path.resolve(rest[++i] ?? "");
|
|
31
|
+
else if (word === "--env") {
|
|
32
|
+
const value = rest[++i];
|
|
33
|
+
if (value === void 0 || value.startsWith("-")) return { error: "--env attend un environnement (ex. --env production)" };
|
|
34
|
+
targetEnv = value;
|
|
35
|
+
} else return { error: `option inconnue : ${word}` };
|
|
36
|
+
}
|
|
37
|
+
if (check && !example && !help) return { error: "--check n'a de sens qu'avec --example" };
|
|
38
|
+
return {
|
|
39
|
+
json,
|
|
40
|
+
example,
|
|
41
|
+
check,
|
|
42
|
+
cwd,
|
|
43
|
+
targetEnv,
|
|
44
|
+
help
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** La page d'aide — `nodefony env --help`, et le rappel après un refus. */
|
|
48
|
+
const PAGE = {
|
|
49
|
+
command: "nodefony env",
|
|
50
|
+
tagline: "la cascade des fichiers .env, la valeur effective de chaque variable, et d'où elle vient",
|
|
51
|
+
synopsis: ["nodefony env [--json] [--env <e>] [--cwd <chemin>]", "nodefony env --example [--check] [--cwd <chemin>]"],
|
|
52
|
+
sections: [{
|
|
53
|
+
title: "CE QU'ELLE MONTRE",
|
|
54
|
+
paragraph: "L'ordre dans lequel les fichiers .env sont lus, les variables que l'application DÉCLARE, la valeur retenue pour chacune et SA PROVENANCE — puis ce qui est présent dans l'environnement et que personne ne lit. Elle ne démarre pas l'application : on cherche une variable précisément quand celle-ci ne démarre PAS, et la faire booter la rendrait muette au seul moment où elle sert."
|
|
55
|
+
}],
|
|
56
|
+
options: [
|
|
57
|
+
{
|
|
58
|
+
term: "-j, --json",
|
|
59
|
+
text: "la même réponse, exploitable par un script"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
term: "--env <e>",
|
|
63
|
+
text: "évalue les exigences sous CET environnement (ex. production) depuis ce poste — les valeurs restent celles d'ici"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
term: "--example",
|
|
67
|
+
text: "dérive .env.example du catalogue déclaré dans env.ts"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
term: "--check",
|
|
71
|
+
text: "avec --example : vérifie sans écrire, et sort en erreur si le fichier diverge (pre-commit, intégration continue)"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
term: "--cwd <chemin>",
|
|
75
|
+
text: "point de départ (la racine de l'app est résolue en remontant)"
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
examples: [
|
|
79
|
+
{
|
|
80
|
+
term: "nodefony env",
|
|
81
|
+
text: "l'environnement d'ici, en entier"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
term: "nodefony env --env production",
|
|
85
|
+
text: "ce qui manquera là-bas, sans y aller"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
term: "nodefony env --example --check",
|
|
89
|
+
text: "le .env.example est-il encore à jour ?"
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
exitCodes: [{
|
|
93
|
+
term: "66",
|
|
94
|
+
text: "aucune application ici (EX_NOINPUT)"
|
|
95
|
+
}, {
|
|
96
|
+
term: "78",
|
|
97
|
+
text: "une variable requise manque, ou .env.example diverge sous --check (EX_CONFIG)"
|
|
98
|
+
}]
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Lit les niveaux de fichiers de la cascade — l'ORDRE vient de `envFileOrder`,
|
|
102
|
+
* jamais d'une copie locale : afficher un ordre qui différerait de celui
|
|
103
|
+
* réellement appliqué tromperait sur le seul point qu'on vient vérifier.
|
|
104
|
+
*/
|
|
105
|
+
function readLevels(cwd, runtimeEnv, appEnv) {
|
|
106
|
+
return envFileOrder({
|
|
107
|
+
runtimeEnv,
|
|
108
|
+
...appEnv ? { appEnv } : {}
|
|
109
|
+
}).map((source) => {
|
|
110
|
+
try {
|
|
111
|
+
return {
|
|
112
|
+
source,
|
|
113
|
+
vars: parseEnv(readFileSync(path.join(cwd, source), "utf8"))
|
|
114
|
+
};
|
|
115
|
+
} catch {
|
|
116
|
+
return {
|
|
117
|
+
source,
|
|
118
|
+
vars: null
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Catalogue des variables déclarées par l'application.
|
|
125
|
+
*
|
|
126
|
+
* Il vit dans `env.ts`, réexporté par l'`index.ts` de l'app — donc lisible en
|
|
127
|
+
* important son build. Pas de build, pas d'export `env` : on rend `null` plutôt
|
|
128
|
+
* que d'échouer, et le rapport le DIT. Une commande de diagnostic qui refuse de
|
|
129
|
+
* répondre quand le projet va mal est une commande inutile.
|
|
130
|
+
*/
|
|
131
|
+
async function readCatalog(projectRoot) {
|
|
132
|
+
for (const candidate of [path.join(projectRoot, "env.ts"), path.join(projectRoot, "dist", "index.js")]) try {
|
|
133
|
+
const mod = await import(pathToFileURL(candidate).href);
|
|
134
|
+
if (mod.env === void 0) continue;
|
|
135
|
+
const catalog = getEnvCatalog(mod.env);
|
|
136
|
+
if (catalog.length > 0) return catalog;
|
|
137
|
+
} catch {}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
/** Colonne alignée, sans dépendance de mise en forme. */
|
|
141
|
+
const pad = (s, n) => s.length >= n ? s : s + " ".repeat(n - s.length);
|
|
142
|
+
/** Rend une variable : valeur, provenance, et ce qui la rend suspecte. */
|
|
143
|
+
function renderVar(v) {
|
|
144
|
+
const value = v.value === null ? "(absente)" : v.value;
|
|
145
|
+
const origin = v.origin === null ? "" : `← ${v.origin}`;
|
|
146
|
+
const flags = [];
|
|
147
|
+
if (v.missing) flags.push("REQUISE ET ABSENTE");
|
|
148
|
+
if (v.requiredIn?.length) flags.push(`requise en ${v.requiredIn.join("/")}`);
|
|
149
|
+
if (v.value === null && v.default !== void 0) flags.push(`défaut ${JSON.stringify(v.default)}`);
|
|
150
|
+
if (v.secret) flags.push("secret");
|
|
151
|
+
if (v.values) flags.push(v.values.join("|"));
|
|
152
|
+
for (const s of v.shadowed) flags.push(`ignoré dans ${s.source}`);
|
|
153
|
+
return (` ${pad(v.name, 24)} ${pad(v.kind, 8)} ${pad(value, 24)} ${pad(origin, 22)}` + (flags.length ? ` ${flags.join(" · ")}` : "")).trimEnd();
|
|
154
|
+
}
|
|
155
|
+
/** Rendu humain — l'ordre des sections suit l'ordre des questions qu'on se pose. */
|
|
156
|
+
function render(report, projectRoot) {
|
|
157
|
+
const out = [];
|
|
158
|
+
out.push(`\nEnvironnement — mode ${report.runtimeEnv}` + (report.appEnv ? ` · déploiement ${report.appEnv}` : "") + (report.targetEnv ? ` · exigences évaluées pour ${report.targetEnv}` : "") + (projectRoot ? `\n${projectRoot}` : ""));
|
|
159
|
+
out.push(`\nCascade — du plus FORT au plus faible (le premier posé gagne)`);
|
|
160
|
+
for (const l of report.levels) {
|
|
161
|
+
const state = !l.exists ? "absent" : `${l.count} variable${l.count > 1 ? "s" : ""}`;
|
|
162
|
+
out.push((` ${l.rank}. ${pad(l.source, 28)} ${pad(state, 16)}` + (l.rank === 1 ? " ← shell / orchestrateur : gagne TOUJOURS" : "") + (l.skipped ? ` (${l.skipped})` : "")).trimEnd());
|
|
163
|
+
}
|
|
164
|
+
if (report.vars.length > 0) {
|
|
165
|
+
out.push(`\nVariables déclarées par l'application (env.ts)`);
|
|
166
|
+
for (const v of report.vars) out.push(renderVar(v));
|
|
167
|
+
}
|
|
168
|
+
if (report.overrides.length > 0) {
|
|
169
|
+
out.push("\nSurcharges de configuration (NF__<MODULE>__<CHEMIN>) — visent une clé de module,\nsans passer par env.ts");
|
|
170
|
+
for (const o of report.overrides) out.push(` ${pad(o.envKey, 34)} → ${o.module}.${o.path.join(".")} = ${o.value}` + (o.origin ? ` ← ${o.origin}` : ""));
|
|
171
|
+
}
|
|
172
|
+
if (report.unknown.length > 0) {
|
|
173
|
+
out.push("\nVariables NF_ présentes mais NON déclarées — sans effet (une faute de frappe\nsur une variable ne se voit jamais : le défaut s'applique en silence)");
|
|
174
|
+
for (const u of report.unknown) out.push(` ${pad(u.name, 34)}${u.origin ? `← ${pad(u.origin, 20)}` : ""}` + (u.suggestion ? ` vouliez-vous dire ${u.suggestion} ?` : ""));
|
|
175
|
+
}
|
|
176
|
+
if (report.reserved.length > 0) {
|
|
177
|
+
out.push(`\nVariables posées par le FRAMEWORK — ni à déclarer, ni à écrire soi-même`);
|
|
178
|
+
for (const r of report.reserved) out.push(` ${pad(r.name, 34)}${r.role}`);
|
|
179
|
+
}
|
|
180
|
+
const missing = report.vars.filter((v) => v.missing);
|
|
181
|
+
if (missing.length > 0) out.push(`\n⚠ ${missing.length} variable(s) REQUISE(S) manquante(s) — l'application ne démarrera pas :\n ${missing.map((v) => v.name).join(", ")}`);
|
|
182
|
+
for (const note of report.notes) out.push(`\n⚠ ${note}`);
|
|
183
|
+
out.push("");
|
|
184
|
+
return out.join("\n");
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Commande `nodefony env` — orchestre : résout le projet, lit la cascade et le
|
|
188
|
+
* catalogue, délègue le calcul au module pur, rend.
|
|
189
|
+
*
|
|
190
|
+
* @returns exit code sémantique (`OK`, `USAGE`, `CONFIG` si une requise manque)
|
|
191
|
+
*/
|
|
192
|
+
/**
|
|
193
|
+
* Compose le rapport d'environnement d'un projet — la MÊME donnée pour tous ses
|
|
194
|
+
* lecteurs.
|
|
195
|
+
*
|
|
196
|
+
* Extraite de {@link runEnvCommand} pour que `nodefony doctor` puisse dire « il
|
|
197
|
+
* manque une variable REQUISE » sans réimplémenter la cascade : deux définitions
|
|
198
|
+
* de « quelle valeur est effective » divergeraient, et chacune passerait ses
|
|
199
|
+
* propres tests. Le second lecteur ne rend d'ailleurs pas le rapport, il n'en
|
|
200
|
+
* lit que les manquantes — raison de plus pour qu'il ne le RECALCULE pas.
|
|
201
|
+
*
|
|
202
|
+
* @param projectRoot - racine de l'application, ou `null` hors projet (le
|
|
203
|
+
* catalogue des variables déclarées est alors inconnu : il se lit dans le
|
|
204
|
+
* `dist/` de l'application).
|
|
205
|
+
* @param cwd - dossier de départ, utilisé comme racine hors projet.
|
|
206
|
+
* @returns le rapport complet (fichiers lus, variables, provenance, notes).
|
|
207
|
+
*/
|
|
208
|
+
async function buildProjectEnvReport(projectRoot, cwd, targetEnv = null) {
|
|
209
|
+
const runtimeEnv = process.env.NODE_ENV ?? "development";
|
|
210
|
+
const rawAppEnv = process.env.APP_ENV ?? process.env.NF_ENV ?? null;
|
|
211
|
+
const appEnv = rawAppEnv && rawAppEnv !== runtimeEnv ? rawAppEnv : null;
|
|
212
|
+
const root = projectRoot ?? cwd;
|
|
213
|
+
return buildEnvReport({
|
|
214
|
+
runtimeEnv,
|
|
215
|
+
appEnv,
|
|
216
|
+
targetEnv,
|
|
217
|
+
processEnv: process.env,
|
|
218
|
+
files: readLevels(root, runtimeEnv, appEnv),
|
|
219
|
+
catalog: projectRoot ? await readCatalog(projectRoot) : null
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* En-tête GÉNÉRIQUE du `.env.example` d'une application — la version curée du
|
|
224
|
+
* dépôt self-hosted vit, elle, dans son script (`scripts/gen-env-example.ts`) :
|
|
225
|
+
* même `renderEnvExample` en dessous, seuls le préambule et le chemin diffèrent.
|
|
226
|
+
*/
|
|
227
|
+
const EXAMPLE_HEADER = `# .env.example — MODÈLE d'onboarding (committé, 0 secret réel).
|
|
228
|
+
#
|
|
229
|
+
# ⚙️ GÉNÉRÉ depuis env.ts (catalogue defineEnv) — NE PAS éditer à la main.
|
|
230
|
+
# Régénérer : npx nodefony env --example
|
|
231
|
+
# Vérifier : npx nodefony env --example --check (pre-commit, CI)
|
|
232
|
+
#
|
|
233
|
+
# Toutes les variables sont COMMENTÉES (le framework a des défauts) : décommenter
|
|
234
|
+
# celles que ton déploiement surcharge, dans .env.local (secrets/machine,
|
|
235
|
+
# gitignoré) ou .env / .env.<env> (défauts non-secrets). Précédence, du plus
|
|
236
|
+
# fort au plus faible :
|
|
237
|
+
# process.env > .env.<appEnv>.local > .env.<env>.local > .env.local
|
|
238
|
+
# > .env.<appEnv> > .env.<env> > .env
|
|
239
|
+
#
|
|
240
|
+
# Override GÉNÉRIQUE de config (hors catalogue) : NF__<MODULE|APP>__<CHEMIN>=valeur
|
|
241
|
+
# ex. NF__APP__SERVERS__HTTP__PORT=8080
|
|
242
|
+
# Secret monté en conteneur : toute variable accepte aussi <NOM>_FILE (Docker/K8s).`;
|
|
243
|
+
/**
|
|
244
|
+
* Compose le contenu de `.env.example` d'une application — PUR.
|
|
245
|
+
*
|
|
246
|
+
* @param catalog - catalogue des variables (via `getEnvCatalog`).
|
|
247
|
+
* @returns le texte complet du fichier.
|
|
248
|
+
*/
|
|
249
|
+
function composeEnvExample(catalog, customHeader = null) {
|
|
250
|
+
return renderEnvExample(catalog, { header: customHeader ?? EXAMPLE_HEADER });
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* L'en-tête curé du projet, s'il en a un — convention `.env.example.head` à la
|
|
254
|
+
* racine (versionné). Il PRIME sur l'en-tête générique : un projet qui a écrit
|
|
255
|
+
* son onboarding le garde, le corps reste dérivé du catalogue dans tous les
|
|
256
|
+
* cas. C'est ce qui a permis au dépôt self-hosted de MIGRER de son script
|
|
257
|
+
* `gen-env-example.ts` vers cette commande sans perdre sa prose.
|
|
258
|
+
*
|
|
259
|
+
* @param projectRoot - racine de l'application.
|
|
260
|
+
* @returns le contenu du fichier, ou `null` s'il n'existe pas.
|
|
261
|
+
*/
|
|
262
|
+
function readExampleHeader(projectRoot) {
|
|
263
|
+
try {
|
|
264
|
+
return readFileSync(path.join(projectRoot, ".env.example.head"), "utf8").trimEnd();
|
|
265
|
+
} catch {
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Applique (ou vérifie) le contenu sur le `.env.example` du projet — I/O seul,
|
|
271
|
+
* la composition appartient à {@link composeEnvExample}.
|
|
272
|
+
*
|
|
273
|
+
* Idempotence FORTE : un fichier déjà identique n'est pas réécrit — même
|
|
274
|
+
* doctrine qu'`ai:sync`, un outil qui salit l'horodatage est un outil qu'on
|
|
275
|
+
* hésite à lancer.
|
|
276
|
+
*
|
|
277
|
+
* @param projectRoot - racine de l'application.
|
|
278
|
+
* @param content - contenu attendu, composé en amont.
|
|
279
|
+
* @param check - `true` : ne rien écrire, seulement comparer.
|
|
280
|
+
* @returns `synced` : le fichier correspond (déjà, ou après écriture) ;
|
|
281
|
+
* `wrote` : une écriture a eu lieu.
|
|
282
|
+
*/
|
|
283
|
+
function applyEnvExample(projectRoot, content, check) {
|
|
284
|
+
const target = path.join(projectRoot, ".env.example");
|
|
285
|
+
let current = null;
|
|
286
|
+
try {
|
|
287
|
+
current = readFileSync(target, "utf8");
|
|
288
|
+
} catch {}
|
|
289
|
+
if (current === content) return {
|
|
290
|
+
synced: true,
|
|
291
|
+
wrote: false
|
|
292
|
+
};
|
|
293
|
+
if (check) return {
|
|
294
|
+
synced: false,
|
|
295
|
+
wrote: false
|
|
296
|
+
};
|
|
297
|
+
writeFileSync(target, content, "utf8");
|
|
298
|
+
return {
|
|
299
|
+
synced: true,
|
|
300
|
+
wrote: true
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
async function runEnvCommand(argv) {
|
|
304
|
+
const parsed = parseEnvArgv(argv);
|
|
305
|
+
if ("error" in parsed) return printUsageError(PAGE, parsed.error);
|
|
306
|
+
if (parsed.help) return printUsage(PAGE);
|
|
307
|
+
const projectRoot = findProjectRoot(parsed.cwd);
|
|
308
|
+
if (parsed.example) {
|
|
309
|
+
if (projectRoot === null) {
|
|
310
|
+
process.stderr.write(`env: aucun projet Nodefony ici (nodefony.config.ts introuvable en remontant).\n`);
|
|
311
|
+
return 66;
|
|
312
|
+
}
|
|
313
|
+
const catalog = await readCatalog(projectRoot);
|
|
314
|
+
if (catalog === null) {
|
|
315
|
+
process.stderr.write("env: catalogue introuvable — l'app n'est pas construite, ou son index\nn'exporte pas `env` (env.ts). Lancer d'abord : npm run build\n");
|
|
316
|
+
return 69;
|
|
317
|
+
}
|
|
318
|
+
const { synced, wrote } = applyEnvExample(projectRoot, composeEnvExample(catalog, readExampleHeader(projectRoot)), parsed.check);
|
|
319
|
+
if (!synced) {
|
|
320
|
+
process.stderr.write(`❌ .env.example désynchronisé de env.ts — lancer : npx nodefony env --example\n`);
|
|
321
|
+
return 78;
|
|
322
|
+
}
|
|
323
|
+
process.stdout.write(`✅ .env.example ${wrote ? "régénéré depuis" : "synchronisé avec"} env.ts (${catalog.length} variable(s))\n`);
|
|
324
|
+
return 0;
|
|
325
|
+
}
|
|
326
|
+
const report = await buildProjectEnvReport(projectRoot, parsed.cwd, parsed.targetEnv);
|
|
327
|
+
if (projectRoot === null) report.notes.push("aucun projet Nodefony ici (nodefony.config.ts introuvable en remontant) — seul l'environnement du shell est décrit");
|
|
328
|
+
process.stdout.write(parsed.json ? `${JSON.stringify(report, null, 2)}\n` : render(report, projectRoot));
|
|
329
|
+
return report.vars.some((v) => v.missing) ? 78 : 0;
|
|
330
|
+
}
|
|
331
|
+
//#endregion
|
|
332
|
+
export { applyEnvExample, buildProjectEnvReport, composeEnvExample, parseEnvArgv, readExampleHeader, runEnvCommand };
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { isEnvVarRequired, resolveEnvStages } from "../config/defineEnv.js";
|
|
2
|
+
import { closestMatch, parseNfEnvOverrides, pathLooksSecret } from "../config/envOverride.js";
|
|
3
|
+
import { isReservedEnv, reservedEnvRole } from "../config/reservedEnv.js";
|
|
4
|
+
//#region src/cli/envReport.ts
|
|
5
|
+
/** Masque une valeur sensible sans mentir sur sa présence. */
|
|
6
|
+
function mask(value) {
|
|
7
|
+
return value === "" ? "(vide)" : `${"•".repeat(8)} (${value.length} car.)`;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Variables présentes dans l'env mais qu'aucune déclaration n'explique.
|
|
11
|
+
*
|
|
12
|
+
* Restreint au préfixe `NF_` : le reste de `process.env` appartient au système
|
|
13
|
+
* (PATH, HOME, les mille variables d'un shell) et le lister noierait le signal.
|
|
14
|
+
* Une variable `NF_` inconnue, elle, est presque toujours une faute de frappe —
|
|
15
|
+
* et une faute de frappe sur une variable d'environnement ne se voit JAMAIS :
|
|
16
|
+
* la valeur est simplement ignorée, et le défaut s'applique en silence.
|
|
17
|
+
*/
|
|
18
|
+
function collectUnknown(processEnv, declared, originOf) {
|
|
19
|
+
const known = [...declared];
|
|
20
|
+
const out = [];
|
|
21
|
+
for (const name of Object.keys(processEnv)) {
|
|
22
|
+
if (!name.startsWith("NF_") || name.startsWith("NF__")) continue;
|
|
23
|
+
if (declared.has(name)) continue;
|
|
24
|
+
if (isReservedEnv(name)) continue;
|
|
25
|
+
if (name.endsWith("_FILE") && declared.has(name.slice(0, -5))) continue;
|
|
26
|
+
const suggestion = closestMatch(name, known);
|
|
27
|
+
out.push({
|
|
28
|
+
name,
|
|
29
|
+
origin: originOf(name),
|
|
30
|
+
...suggestion ? { suggestion } : {}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return out.sort((a, b) => a.name.localeCompare(b.name));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Les variables que le FRAMEWORK a posées lui-même dans l'environnement.
|
|
37
|
+
*
|
|
38
|
+
* Elles sont RENDUES, pas tues : une variable présente que le rapport passe
|
|
39
|
+
* sous silence est le même défaut vu de l'autre côté — l'utilisateur cherche
|
|
40
|
+
* alors pourquoi son environnement ne ressemble pas à ce qu'on lui montre.
|
|
41
|
+
*/
|
|
42
|
+
function collectReserved(processEnv, originOf) {
|
|
43
|
+
const out = [];
|
|
44
|
+
for (const name of Object.keys(processEnv)) {
|
|
45
|
+
const role = reservedEnvRole(name);
|
|
46
|
+
if (role === null) continue;
|
|
47
|
+
out.push({
|
|
48
|
+
name,
|
|
49
|
+
origin: originOf(name),
|
|
50
|
+
role
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return out.sort((a, b) => a.name.localeCompare(b.name));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Construit le rapport d'environnement.
|
|
57
|
+
*
|
|
58
|
+
* @param input.runtimeEnv - mode runtime (`NODE_ENV`).
|
|
59
|
+
* @param input.appEnv - environnement de déploiement, s'il diffère du mode.
|
|
60
|
+
* @param input.processEnv - l'environnement effectif, cascade déjà appliquée.
|
|
61
|
+
* @param input.files - les niveaux de fichiers, du PLUS fort au PLUS faible.
|
|
62
|
+
* @param input.catalog - les variables déclarées par l'app, ou `null` si illisible.
|
|
63
|
+
* @returns le rapport, sérialisable tel quel.
|
|
64
|
+
*/
|
|
65
|
+
function buildEnvReport(input) {
|
|
66
|
+
const { runtimeEnv, processEnv, files, catalog } = input;
|
|
67
|
+
const appEnv = input.appEnv ?? null;
|
|
68
|
+
const targetEnv = input.targetEnv ?? null;
|
|
69
|
+
const stages = targetEnv ? [targetEnv] : resolveEnvStages({
|
|
70
|
+
NODE_ENV: runtimeEnv,
|
|
71
|
+
...appEnv ? { NF_ENV: appEnv } : {}
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* Origine d'une clé : le premier fichier de la cascade qui la définit AVEC la
|
|
75
|
+
* valeur effective. Aucun ne correspond → le shell l'a posée (ou l'a écrasée,
|
|
76
|
+
* puisqu'il gagne toujours).
|
|
77
|
+
*/
|
|
78
|
+
const originOf = (name) => {
|
|
79
|
+
const effective = processEnv[name];
|
|
80
|
+
if (effective === void 0) return null;
|
|
81
|
+
for (const level of files) if (level.vars && level.vars[name] === effective) return level.source;
|
|
82
|
+
return "process.env";
|
|
83
|
+
};
|
|
84
|
+
/** Niveaux qui définissent la clé sans être son origine — donc ignorés. */
|
|
85
|
+
const shadowsOf = (name, winner) => {
|
|
86
|
+
const out = [];
|
|
87
|
+
let passedWinner = winner === "process.env";
|
|
88
|
+
for (const level of files) {
|
|
89
|
+
if (!level.vars || level.vars[name] === void 0) continue;
|
|
90
|
+
if (!passedWinner && level.source === winner) {
|
|
91
|
+
passedWinner = true;
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (passedWinner) out.push({
|
|
95
|
+
source: level.source,
|
|
96
|
+
value: level.vars[name]
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
};
|
|
101
|
+
const levels = [{
|
|
102
|
+
rank: 1,
|
|
103
|
+
source: "process.env",
|
|
104
|
+
exists: true,
|
|
105
|
+
count: Object.keys(processEnv).length
|
|
106
|
+
}, ...files.map((f, i) => ({
|
|
107
|
+
rank: i + 2,
|
|
108
|
+
source: f.source,
|
|
109
|
+
exists: f.vars !== null,
|
|
110
|
+
count: f.vars ? Object.keys(f.vars).length : 0,
|
|
111
|
+
...f.skipped ? { skipped: f.skipped } : {}
|
|
112
|
+
}))];
|
|
113
|
+
const declared = new Set((catalog ?? []).map((v) => v.name));
|
|
114
|
+
const vars = (catalog ?? []).map((meta) => {
|
|
115
|
+
const raw = processEnv[meta.name];
|
|
116
|
+
const secret = pathLooksSecret([meta.name]);
|
|
117
|
+
const origin = originOf(meta.name);
|
|
118
|
+
const required = isEnvVarRequired(meta, stages);
|
|
119
|
+
return {
|
|
120
|
+
name: meta.name,
|
|
121
|
+
kind: meta.kind,
|
|
122
|
+
declared: true,
|
|
123
|
+
required,
|
|
124
|
+
...meta.requiredIn ? { requiredIn: meta.requiredIn } : {},
|
|
125
|
+
secret,
|
|
126
|
+
...meta.description ? { description: meta.description } : {},
|
|
127
|
+
value: raw === void 0 ? null : secret ? mask(raw) : raw,
|
|
128
|
+
origin,
|
|
129
|
+
...meta.default !== void 0 ? { default: meta.default } : {},
|
|
130
|
+
...meta.values ? { values: meta.values } : {},
|
|
131
|
+
missing: required && (raw === void 0 || raw === ""),
|
|
132
|
+
shadowed: shadowsOf(meta.name, origin)
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
const overrides = parseNfEnvOverrides(processEnv).map((o) => ({
|
|
136
|
+
envKey: o.envKey,
|
|
137
|
+
module: o.moduleSeg,
|
|
138
|
+
path: o.path,
|
|
139
|
+
value: pathLooksSecret(o.path) ? mask(String(processEnv[o.envKey] ?? "")) : String(processEnv[o.envKey] ?? ""),
|
|
140
|
+
origin: originOf(o.envKey)
|
|
141
|
+
}));
|
|
142
|
+
const notes = [];
|
|
143
|
+
if (catalog === null) notes.push("catalogue des variables illisible — l'application n'est pas construite (`npm run build`) ou n'exporte pas `env` : la cascade ci-dessus reste exacte, la liste des variables déclarées manque");
|
|
144
|
+
return {
|
|
145
|
+
runtimeEnv,
|
|
146
|
+
appEnv,
|
|
147
|
+
targetEnv,
|
|
148
|
+
stages,
|
|
149
|
+
levels,
|
|
150
|
+
vars,
|
|
151
|
+
overrides,
|
|
152
|
+
unknown: collectUnknown(processEnv, declared, originOf),
|
|
153
|
+
reserved: collectReserved(processEnv, originOf),
|
|
154
|
+
catalogAvailable: catalog !== null,
|
|
155
|
+
notes
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
//#endregion
|
|
159
|
+
export { buildEnvReport };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
//#region src/cli/execPortable.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lancer un exécutable de l'écosystème npm, sur les trois systèmes.
|
|
5
|
+
*
|
|
6
|
+
* ## Le défaut, et pourquoi il ne se voit jamais sur un poste de développement
|
|
7
|
+
*
|
|
8
|
+
* Sous Windows, `npm`, `npx`, `prettier` et compagnie ne sont pas des exécutables :
|
|
9
|
+
* ce sont des scripts `.cmd`. Depuis le correctif de CVE-2024-27980, Node REFUSE
|
|
10
|
+
* d'exécuter un `.cmd` sans `shell: true` — et il ne le dit pas en ces termes : il
|
|
11
|
+
* rend `spawnSync npm ENOENT`, qui se lit « npm n'est pas installé ». Sur une
|
|
12
|
+
* machine où npm vient de tourner, c'est un message qui envoie chercher très loin
|
|
13
|
+
* de la cause.
|
|
14
|
+
*
|
|
15
|
+
* Ce que cela coûtait EN PRODUIT, et pas seulement en outillage : `nodefony create
|
|
16
|
+
* module` installe le workspace npm qu'il vient d'écrire — c'est ce `npm install`
|
|
17
|
+
* qui crée le lien sans lequel le Kernel ne peut pas importer le module par son
|
|
18
|
+
* nom. Sous Windows il ne s'exécutait pas ; le module était écrit, construit,
|
|
19
|
+
* déclaré au manifeste — et introuvable au boot. L'application démarrait sans lui
|
|
20
|
+
* (fail-soft) et TOUTES ses routes rendaient 404.
|
|
21
|
+
*
|
|
22
|
+
* ## Une seule implémentation, dans le FRAMEWORK
|
|
23
|
+
*
|
|
24
|
+
* La règle a d'abord été écrite dans le banc qui mesure le framework, jamais dans
|
|
25
|
+
* le framework lui-même — si bien que l'outil de mesure était portable et que le
|
|
26
|
+
* produit ne l'était pas. C'est l'utilisateur qui subit la règle : c'est donc ici
|
|
27
|
+
* qu'elle vit, et le banc l'importe.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Faut-il passer par le shell pour lancer cette commande ?
|
|
31
|
+
*
|
|
32
|
+
* Vrai sous Windows dans DEUX cas, et une première version n'en voyait qu'un :
|
|
33
|
+
*
|
|
34
|
+
* 1. la commande est cherchée dans le `PATH` (`npm`, `npx`) — elle s'y résout en
|
|
35
|
+
* `.cmd` ;
|
|
36
|
+
* 2. la commande est un chemin ABSOLU qui désigne un script batch
|
|
37
|
+
* (`…\node_modules\.bin\oxlint.cmd`).
|
|
38
|
+
*
|
|
39
|
+
* « Absolu donc exécutable réel » est une inférence, pas un constat : ce qui empêche
|
|
40
|
+
* Node de lancer la chose n'est pas l'endroit où elle est, c'est ce qu'elle EST.
|
|
41
|
+
*
|
|
42
|
+
* Ailleurs que sous Windows, `shell: true` est à éviter : il rouvre l'interprétation
|
|
43
|
+
* des métacaractères sur des arguments qui viennent parfois d'un décor.
|
|
44
|
+
*
|
|
45
|
+
* La plateforme et la grammaire de chemins sont INJECTÉES, et ce n'est pas de la
|
|
46
|
+
* coquetterie : une fonction qui lit `process.platform` ne peut être éprouvée que
|
|
47
|
+
* sur la plateforme qu'elle décrit — c'est-à-dire jamais, sur les postes de ce
|
|
48
|
+
* projet. Injectées, les deux branches se vérifient partout.
|
|
49
|
+
*
|
|
50
|
+
* @param command - ce qu'on s'apprête à lancer.
|
|
51
|
+
* @param plateforme - le système, injectable pour l'épreuve.
|
|
52
|
+
* @param grammar - `path.win32` ou `path.posix`, idem.
|
|
53
|
+
* @returns la valeur à donner à l'option `shell` de `spawn`/`spawnSync`.
|
|
54
|
+
*/
|
|
55
|
+
function needsShell(command, plateforme = process.platform, grammar = path) {
|
|
56
|
+
if (plateforme !== "win32") return false;
|
|
57
|
+
return !grammar.isAbsolute(command) || /\.(cmd|bat)$/iu.test(command);
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { needsShell };
|