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,450 @@
|
|
|
1
|
+
import { collectSources } from "./walk.js";
|
|
2
|
+
import { findReservedEntity } from "../../cli/scaffold/reservedEntities.js";
|
|
3
|
+
import { readFileSync, statSync } from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
//#region src/kernel/checks/wiring.ts
|
|
6
|
+
/**
|
|
7
|
+
* Contrôle de CÂBLAGE — une classe écrite, mais que rien ne déclare.
|
|
8
|
+
*
|
|
9
|
+
* Le générateur (`nodefony create entity|controller`) pose le fichier ET son
|
|
10
|
+
* câblage : l'entité entre dans `@entities([…])`, le controller dans
|
|
11
|
+
* `@controllers([…])`. Écrit à la main, le fichier arrive seul — il compile, les
|
|
12
|
+
* tests qui l'importent directement passent, et la panne n'apparaît qu'au
|
|
13
|
+
* démarrage suivant : une table qui n'est jamais créée, un repository qui lève
|
|
14
|
+
* « entité inconnue », une route qui répond 404 sans que rien ne l'explique.
|
|
15
|
+
*
|
|
16
|
+
* C'est le mode d'échec de la COPIE. Sur une application neuve, le générateur
|
|
17
|
+
* est le chemin le plus court ; dès qu'une entité existe, copier le voisin le
|
|
18
|
+
* devient — et personne ne peut garantir qu'un agent, ou un humain pressé,
|
|
19
|
+
* appellera la commande. On ne fait donc pas appeler le générateur : on fait
|
|
20
|
+
* échouer ce qui ne l'a pas appelé.
|
|
21
|
+
*
|
|
22
|
+
* Lecture PURE, comme le reste de `nodefony doctor` : aucun boot, aucun import du
|
|
23
|
+
* code analysé. Le contrôle doit répondre y compris sur une application qui ne
|
|
24
|
+
* démarre plus — c'est précisément là qu'on le consulte.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Ce qu'un code EXIGE d'avoir été déclaré, et que la compilation ne dit pas.
|
|
28
|
+
*
|
|
29
|
+
* Le générateur refuse d'écrire quand la brique manque — c'est une de ses
|
|
30
|
+
* gardes. Écrit à la main, le même code compile dès que le paquet traîne dans
|
|
31
|
+
* `node_modules` (hissé par une transitive), et la panne attend le démarrage :
|
|
32
|
+
* le module n'étant pas dans le manifeste, il n'est jamais chargé, donc le canal
|
|
33
|
+
* n'existe pas, l'entité n'est enregistrée nulle part, la garde ne garde rien.
|
|
34
|
+
*
|
|
35
|
+
* Le marqueur vise l'USAGE, jamais la définition : `extends RealtimeController`
|
|
36
|
+
* et non `class RealtimeController`, sans quoi le module qui fournit la brique
|
|
37
|
+
* s'accuserait lui-même.
|
|
38
|
+
*/
|
|
39
|
+
const BRICKS = [
|
|
40
|
+
{
|
|
41
|
+
marker: /extends\s+RealtimeController\b|@RealtimeChannel\b/u,
|
|
42
|
+
packages: ["@nodefony/realtime"],
|
|
43
|
+
what: "un canal temps réel"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
marker: /\bdefineEntity\s*\(/u,
|
|
47
|
+
packages: ["@nodefony/drizzle", "@nodefony/mongoose"],
|
|
48
|
+
what: "une entité"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
marker: /@IsGranted\b/u,
|
|
52
|
+
packages: ["@nodefony/security"],
|
|
53
|
+
what: "une garde d'autorisation"
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
/**
|
|
57
|
+
* `export const XEntity = defineEntity({` — le descripteur, pas la table.
|
|
58
|
+
*
|
|
59
|
+
* C'est LUI que `@entities([…])` doit nommer : la table Drizzle seule
|
|
60
|
+
* n'enregistre rien, et une application qui ne déclare que la table démarre
|
|
61
|
+
* sans sa propre entité.
|
|
62
|
+
*/
|
|
63
|
+
const ENTITY_RE = /export\s+const\s+(\w+)\s*=\s*defineEntity\s*\(/gu;
|
|
64
|
+
/** `name: "Post"` du descripteur — ce que voit le registre ORM, qui est PLAT. */
|
|
65
|
+
const ENTITY_NAME_RE = /\bname\s*:\s*["'`](\w+)["'`]/u;
|
|
66
|
+
/** `export class XController` — décoré ou non, la déclaration est la même. */
|
|
67
|
+
const CONTROLLER_RE = /export\s+class\s+(\w*Controller)\b/gu;
|
|
68
|
+
/**
|
|
69
|
+
* `@injectable()` posé sur une classe — le marqueur, pas le dossier.
|
|
70
|
+
*
|
|
71
|
+
* Viser le décorateur plutôt qu'un emplacement (`nodefony/service`) évite
|
|
72
|
+
* d'imposer une convention que le framework n'impose pas : un service se
|
|
73
|
+
* reconnaît à ce qu'il déclare, et l'application le range où elle veut.
|
|
74
|
+
* Une classe `abstract` est exclue à la lecture — c'est une base, pas une
|
|
75
|
+
* instance à enregistrer.
|
|
76
|
+
*/
|
|
77
|
+
const SERVICE_RE = /@injectable\s*\([\s\S]{0,160}?\)\s*(?:export\s+)?(?:default\s+)?(abstract\s+)?class\s+(\w+)/gu;
|
|
78
|
+
/** Contenu de chaque `@services([…])` — la liste, pas l'appel. */
|
|
79
|
+
const SERVICES_LIST_RE = /@services\s*\(\s*\[([\s\S]{0,2000}?)\]/gu;
|
|
80
|
+
/**
|
|
81
|
+
* Enregistrement IMPÉRATIF d'un service, la seconde voie légitime.
|
|
82
|
+
*
|
|
83
|
+
* La règle du contrôle est « quelqu'un te DÉCLARE », pas « tu passes par le
|
|
84
|
+
* décorateur » : les modules du framework posent une partie de leurs services à
|
|
85
|
+
* la main, souvent parce que l'instance dépend d'une valeur résolue au
|
|
86
|
+
* démarrage. Les tenir pour orphelins accuserait le cœur de ne pas suivre une
|
|
87
|
+
* convention dont il est l'auteur.
|
|
88
|
+
*/
|
|
89
|
+
const IMPERATIVE_RE = /(?:addService|container\.set|\.set)\s*\(\s*[^)]{0,120}?\b(\w+)\b/gu;
|
|
90
|
+
/**
|
|
91
|
+
* Un chemin de route Nodefony, tel qu'il est écrit — soit en premier argument
|
|
92
|
+
* d'un décorateur de méthode, soit sous la clé `path` D'UN `@route`.
|
|
93
|
+
*
|
|
94
|
+
* Les deux formes existent et se valent ; n'en lire qu'une rendrait le contrôle
|
|
95
|
+
* aveugle à l'autre, ce qui est pire que pas de contrôle du tout — on croirait
|
|
96
|
+
* la question posée.
|
|
97
|
+
*
|
|
98
|
+
* ⚠️ Le `path:` est borné au voisinage d'un `@route(` et NON lu partout : la
|
|
99
|
+
* clé est celle de react-router, où `:id` est la syntaxe JUSTE. Lu librement,
|
|
100
|
+
* le contrôle accusait les cinq routes du frontend de Studio — un contrôle qui
|
|
101
|
+
* accuse du code correct est un contrôle qu'on désactive, et il aurait fait
|
|
102
|
+
* « corriger » un routage qui marchait.
|
|
103
|
+
*/
|
|
104
|
+
const ROUTE_PATH_RE = /@(?:Get|Post|Put|Patch|Delete|Head|Options|All)\s*\(\s*["'`]([^"'`\n]*)["'`]|@route\s*\([\s\S]{0,300}?\bpath\s*:\s*["'`]([^"'`\n]*)["'`]/gu;
|
|
105
|
+
/**
|
|
106
|
+
* Le segment variable écrit à la mode d'un AUTRE framework : `/:handle`.
|
|
107
|
+
*
|
|
108
|
+
* Nodefony écrit `{handle}` ; Express, Nest et Fastify écrivent `:handle`. La
|
|
109
|
+
* confusion ne produit ni erreur de compilation ni avertissement au démarrage :
|
|
110
|
+
* le chemin est monté comme un LITTÉRAL, la route apparaît dans
|
|
111
|
+
* `inspect routes`, et elle ne correspond à aucune URL réelle. Le symptôme est
|
|
112
|
+
* un 404 sur une route qu'on voit dans le code — le plus coûteux à diagnostiquer
|
|
113
|
+
* de tous, puisque tout a l'air juste.
|
|
114
|
+
*
|
|
115
|
+
* Le `/` exigé devant le `:` écarte ce qui n'est pas un segment : `http://`,
|
|
116
|
+
* `C:/`, une heure. Un deux-points ailleurs dans un chemin ne dit rien.
|
|
117
|
+
*/
|
|
118
|
+
const COLON_SEGMENT_RE = /\/:(\w+)/u;
|
|
119
|
+
/** Une classe de ce fichier étend-elle `Controller` ? Sinon la réponse ne la concerne pas. */
|
|
120
|
+
const EXTENDS_CONTROLLER_RE = /\bclass\s+\w+\s+extends\s+Controller\b/u;
|
|
121
|
+
/**
|
|
122
|
+
* La réponse HTTP écrite À LA MAIN, alors qu'une façade la rend.
|
|
123
|
+
*
|
|
124
|
+
* Mesuré sur le banc de découvrabilité : servir une PAGE est le seul rendu dont
|
|
125
|
+
* aucun gabarit d'application sans frontend ne montre d'exemple, et l'
|
|
126
|
+
* `AGENTS.md` ne nommait aucune façade de réponse ordinaire. Deux agents sur
|
|
127
|
+
* trois ont donc bricolé — l'un en castant (`this.response as any`), l'autre en
|
|
128
|
+
* posant `Content-Type` lui-même. Les deux « marchent » à l'essai : c'est
|
|
129
|
+
* exactement pourquoi rien ne les signale.
|
|
130
|
+
*
|
|
131
|
+
* Ce qui se perd, et qu'aucun test de l'application ne voit : la négociation de
|
|
132
|
+
* contenu, l'encodage, le nonce CSP de la requête, et les hooks de fin de
|
|
133
|
+
* réponse (journal, profileur, métriques) que le pipeline attache autour de
|
|
134
|
+
* `render`. Écrire dans le socle court-circuite la couche qui les porte.
|
|
135
|
+
*
|
|
136
|
+
* Trois motifs, un seul manquement — chacun est une façon distincte de sortir
|
|
137
|
+
* du pipeline, et chacun a sa façade :
|
|
138
|
+
* `this.renderJson(obj)` · `this.setContextHtml()` + `this.render(html)` ·
|
|
139
|
+
* `this.streamFile(f)` / `renderMediaStream(f)` / `renderFileDownload(f)`.
|
|
140
|
+
*
|
|
141
|
+
* Poser un en-tête MÉTIER (`X-Total-Count`, `Cache-Control`) reste légitime et
|
|
142
|
+
* n'est pas visé : seul `Content-Type` l'est, parce que c'est la façade qui le
|
|
143
|
+
* décide, et parce que le poser deux fois produit une réponse que le client lit
|
|
144
|
+
* de travers.
|
|
145
|
+
*/
|
|
146
|
+
const RESPONSE_CAST_RE = /\bthis\.response\s+as\s+(?:any|unknown)\b/u;
|
|
147
|
+
/** `setHeader("Content-Type", …)` ou `setHeaders({ "content-type": … })`, sur quoi que ce soit. */
|
|
148
|
+
const RESPONSE_CONTENT_TYPE_RE = /\.setHeaders?\s*\(\s*(?:\{\s*)?["'`]content-type["'`]/iu;
|
|
149
|
+
/** L'écriture directe dans le socle : `this.response.end(…)`, `writeHead(…)`. */
|
|
150
|
+
const RESPONSE_RAW_WRITE_RE = /\bthis\.response\s*\??\.\s*(?:end|writeHead)\s*\(/u;
|
|
151
|
+
/**
|
|
152
|
+
* Les TROIS hooks de cycle de vie qu'un module peut porter — la liste est
|
|
153
|
+
* fermée par le code, pas par une convention.
|
|
154
|
+
*
|
|
155
|
+
* `Module.setEvents()` (`Module.ts:222`) attache chacun sous un `if
|
|
156
|
+
* (this.onKernelX)`. Un nom voisin — `onKernelBooted`, `onBoot`,
|
|
157
|
+
* `onKernelStart` recopié d'une Command — n'entre dans aucun de ces `if` :
|
|
158
|
+
* la méthode est écrite, elle compile, elle s'affiche dans le fichier, et elle
|
|
159
|
+
* n'est JAMAIS appelée. Aucun test ne le voit non plus, sauf à démarrer le
|
|
160
|
+
* kernel entier ; le symptôme est une initialisation qui n'a pas lieu, très
|
|
161
|
+
* loin de sa cause.
|
|
162
|
+
*/
|
|
163
|
+
const HOOKS_MODULE = /* @__PURE__ */ new Set([
|
|
164
|
+
"onKernelRegister",
|
|
165
|
+
"onKernelBoot",
|
|
166
|
+
"onKernelReady"
|
|
167
|
+
]);
|
|
168
|
+
/**
|
|
169
|
+
* Une DÉCLARATION de méthode `onKernel…`, jamais un appel.
|
|
170
|
+
*
|
|
171
|
+
* L'ancrage en début de ligne (indentation d'un corps de classe) écarte
|
|
172
|
+
* `this.onKernelBoot()` et `module.onKernelReady()` : un appel au bon hook ne
|
|
173
|
+
* doit pas s'accuser lui-même.
|
|
174
|
+
*/
|
|
175
|
+
const HOOK_DECL_RE = /^\s{2,}(?:public\s+|private\s+|protected\s+)?(?:override\s+)?(?:async\s+)?(onKernel\w+)\s*\(/gmu;
|
|
176
|
+
/** Une classe de ce fichier étend-elle `Module` ? Sinon les hooks ne la concernent pas. */
|
|
177
|
+
const EXTENDS_MODULE_RE = /\bclass\s+\w+\s+extends\s+Module\b/u;
|
|
178
|
+
/**
|
|
179
|
+
* Le bloc `areas: { … }` du manifeste, et lui seul.
|
|
180
|
+
*
|
|
181
|
+
* `pattern:` est un mot trop courant pour être lu partout — la clé existe dans
|
|
182
|
+
* une config de bundler, une règle de lint, un routeur front. Le contrôle ne
|
|
183
|
+
* doit accuser que ce qu'il comprend.
|
|
184
|
+
*/
|
|
185
|
+
const AREAS_BLOCK_RE = /\bareas\s*:\s*\{([\s\S]{0,4000}?)\n\s{0,10}\}/u;
|
|
186
|
+
/** `pattern: "^/api/account"` — la valeur écrite, telle quelle. */
|
|
187
|
+
const AREA_PATTERN_RE = /\bpattern\s*:\s*["'`]([^"'`\n]+)["'`]/gu;
|
|
188
|
+
/**
|
|
189
|
+
* Les commentaires, ôtés AVANT toute analyse du manifeste.
|
|
190
|
+
*
|
|
191
|
+
* Sans quoi le contrôle mord sur le gabarit lui-même : le commentaire qui
|
|
192
|
+
* apprend à ne PAS énumérer cite le contre-exemple
|
|
193
|
+
* (`"^/api/account/(profile|invoices)"`), et toute application fraîche
|
|
194
|
+
* commencerait par un avertissement portant sur du texte explicatif. Un
|
|
195
|
+
* contrôle qui accuse sa propre documentation est un contrôle qu'on désactive.
|
|
196
|
+
*/
|
|
197
|
+
function withoutComments(source) {
|
|
198
|
+
return source.replace(/\/\*[\s\S]*?\*\//gu, "").replace(/\/\/[^\n]*/gu, "");
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* La part LITTÉRALE d'un pattern — ce qu'il couvre à coup sûr.
|
|
202
|
+
*
|
|
203
|
+
* `^/api/account/(profile|invoices)` → `/api/account`. On coupe au premier
|
|
204
|
+
* métacaractère, puis au dernier `/` : un segment tronqué (`/api/acc`) ne
|
|
205
|
+
* désigne rien et ferait un conseil faux.
|
|
206
|
+
*/
|
|
207
|
+
function prefixeLitteral(pattern) {
|
|
208
|
+
const withoutAnchor = pattern.replace(/^\^/u, "");
|
|
209
|
+
const coupe = withoutAnchor.search(/[([{|?*+$\\]/u);
|
|
210
|
+
const litteral = coupe === -1 ? withoutAnchor : withoutAnchor.slice(0, coupe);
|
|
211
|
+
const last = litteral.lastIndexOf("/");
|
|
212
|
+
return last > 0 ? litteral.slice(0, last) : litteral;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Une zone qui ÉNUMÈRE des routes au lieu de couvrir un espace.
|
|
216
|
+
*
|
|
217
|
+
* Le mode d'échec est mesuré, pas supposé : sommés de protéger deux routes d'un
|
|
218
|
+
* même espace, 3 agents sur 4 écrivent `^/api/account/(profile|invoices)`. Les
|
|
219
|
+
* deux routes refusent bien l'anonyme, les tests passent, la revue passe — et la
|
|
220
|
+
* TROISIÈME route de l'espace, ajoutée plus tard, est publique. Rien ne le
|
|
221
|
+
* signale : la zone existe et paraît couvrir l'espace.
|
|
222
|
+
*
|
|
223
|
+
* Le contrôle ne peut pas le voir en interrogeant les routes (elles n'existent
|
|
224
|
+
* pas encore — c'est tout le problème), donc il lit la FORME. Deux signaux, et
|
|
225
|
+
* aucun n'est une question de style :
|
|
226
|
+
*
|
|
227
|
+
* - une **ancre de fin** (`$`) — la zone ne couvre qu'un chemin exact, donc
|
|
228
|
+
* aucune route sœur, jamais ;
|
|
229
|
+
* - une **alternance** précédée d'au moins deux segments littéraux
|
|
230
|
+
* (`/api/account/(…|…)`) — l'alternance sert alors à lister des routes. En
|
|
231
|
+
* tête (`^/(api|admin)`) elle désigne au contraire deux espaces : légitime,
|
|
232
|
+
* et épargnée.
|
|
233
|
+
*
|
|
234
|
+
* @param pattern - la valeur écrite dans le manifeste.
|
|
235
|
+
* @returns le préfixe à employer, ou `null` si la zone est saine.
|
|
236
|
+
*/
|
|
237
|
+
function zoneEnumere(pattern) {
|
|
238
|
+
const body = pattern.replace(/^\^/u, "");
|
|
239
|
+
const prefix = prefixeLitteral(pattern);
|
|
240
|
+
const segments = prefix.split("/").filter(Boolean).length;
|
|
241
|
+
if (/\$/u.test(body)) return prefix;
|
|
242
|
+
if (/\([^)]*\|/u.test(body) && segments >= 2) return prefix;
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Où le câblage d'une cible peut vivre — et nulle part ailleurs.
|
|
247
|
+
*
|
|
248
|
+
* Borner n'est pas une optimisation : depuis la racine d'un dépôt, un parcours
|
|
249
|
+
* libre descend dans les décors jetables (`tmp/`), les applications d'exemple et
|
|
250
|
+
* les bases de développement, et rend des manquements qui n'appartiennent à
|
|
251
|
+
* personne. Un contrôle qui accuse le décor est un contrôle qu'on désactive.
|
|
252
|
+
*/
|
|
253
|
+
const WIRING_DIRS = ["nodefony", "src"];
|
|
254
|
+
/**
|
|
255
|
+
* Sources qui CÂBLENT — les tests en sont exclus, et ce n'est pas un détail.
|
|
256
|
+
*
|
|
257
|
+
* Le test généré par `create entity` importe l'entité pour l'enregistrer sur une
|
|
258
|
+
* base en mémoire. Le compter comme une référence rendrait le contrôle aveugle
|
|
259
|
+
* exactement au cas qu'il cherche : un fichier écrit à la main, importé par son
|
|
260
|
+
* seul test, et absent du démarrage réel.
|
|
261
|
+
*
|
|
262
|
+
* Même filtre que les sources embarquées de `checkPackageDeps`, pour une raison
|
|
263
|
+
* différente — là-bas les tests ne partent pas dans le paquet, ici ils ne
|
|
264
|
+
* câblent pas l'application.
|
|
265
|
+
*/
|
|
266
|
+
function wiringSources(dir) {
|
|
267
|
+
const found = [];
|
|
268
|
+
for (const name of ["index.ts", "index.tsx"]) {
|
|
269
|
+
const f = path.join(dir, name);
|
|
270
|
+
if (statSync(f, { throwIfNoEntry: false })) found.push(f);
|
|
271
|
+
}
|
|
272
|
+
found.push(...collectSources(dir, {
|
|
273
|
+
extensions: [".ts", ".tsx"],
|
|
274
|
+
subdirs: WIRING_DIRS
|
|
275
|
+
}));
|
|
276
|
+
return found;
|
|
277
|
+
}
|
|
278
|
+
/** Lit un fichier, ou rend la chaîne vide (un fichier illisible n'accuse personne). */
|
|
279
|
+
function read(file) {
|
|
280
|
+
try {
|
|
281
|
+
return readFileSync(file, "utf8");
|
|
282
|
+
} catch {
|
|
283
|
+
return "";
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/** Le symbole est-il nommé quelque part AILLEURS que dans son propre fichier ? */
|
|
287
|
+
function referencedElsewhere(symbol, ownFile, sources) {
|
|
288
|
+
const re = new RegExp(`\\b${symbol}\\b`, "u");
|
|
289
|
+
for (const [file, content] of sources) {
|
|
290
|
+
if (file === ownFile) continue;
|
|
291
|
+
if (re.test(content)) return true;
|
|
292
|
+
}
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Une cible plausible : un dossier qui porte `nodefony/entity` ou
|
|
297
|
+
* `nodefony/controllers`. Tout le reste n'a rien à câbler.
|
|
298
|
+
*/
|
|
299
|
+
function isTarget(dir) {
|
|
300
|
+
return [
|
|
301
|
+
"entity",
|
|
302
|
+
"controllers",
|
|
303
|
+
"service",
|
|
304
|
+
"services"
|
|
305
|
+
].some((sub) => statSync(path.join(dir, "nodefony", sub), { throwIfNoEntry: false }));
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Contrôle le câblage d'une application et de ses modules locaux.
|
|
309
|
+
*
|
|
310
|
+
* Trois manquements, tous invisibles à la compilation :
|
|
311
|
+
*
|
|
312
|
+
* - **entité orpheline** — le descripteur n'est nommé nulle part, donc aucun
|
|
313
|
+
* `@entities([…])` ne l'enregistre : sa table ne sera pas créée ;
|
|
314
|
+
* - **controller orphelin** — la classe n'est nommée nulle part, donc aucune de
|
|
315
|
+
* ses routes n'est montée ;
|
|
316
|
+
* - **service orphelin** — la classe porte `@injectable` mais n'apparaît dans
|
|
317
|
+
* aucun `@services([…])` ni enregistrement impératif. Seul manquement dont
|
|
318
|
+
* le critère n'est PAS « quelqu'un te nomme » : un service non déclaré est
|
|
319
|
+
* presque toujours nommé — par le controller qui le reçoit en paramètre. Le
|
|
320
|
+
* framework l'auto-résout alors depuis le registre des classes, ce qui donne
|
|
321
|
+
* une application qui fonctionne et un service qui n'existe pour personne
|
|
322
|
+
* d'autre : hors ordre de démarrage, hors rapport de boot, hors politique
|
|
323
|
+
* d'erreur, hors introspection, construit à la première requête ;
|
|
324
|
+
* - **nom réservé** — l'entité porte le nom d'une entité d'un module du
|
|
325
|
+
* framework (`User`, `session`…). Le registre ORM est PLAT : l'homonyme
|
|
326
|
+
* dépossède le module, et l'application s'arrête au démarrage sur un message
|
|
327
|
+
* qui parle d'une colonne inconnue, jamais du doublon. Le registre est celui
|
|
328
|
+
* du scaffold ({@link findReservedEntity}), pas une seconde liste.
|
|
329
|
+
*
|
|
330
|
+
* @param options - cibles à explorer et racine d'affichage.
|
|
331
|
+
* @returns les manquements et le nombre de fichiers analysés.
|
|
332
|
+
*/
|
|
333
|
+
function checkWiring(options) {
|
|
334
|
+
const { roots, cwd = process.cwd(), projectRoot } = options;
|
|
335
|
+
const findings = [];
|
|
336
|
+
let scanned = 0;
|
|
337
|
+
const manifestePath = projectRoot ? path.join(projectRoot, "nodefony.config.ts") : "";
|
|
338
|
+
const manifeste = manifestePath ? read(manifestePath) : "";
|
|
339
|
+
const declared = projectRoot ? [manifeste, read(path.join(projectRoot, "package.json"))].join("\n") : "";
|
|
340
|
+
const areasBlock = AREAS_BLOCK_RE.exec(withoutComments(manifeste))?.[1];
|
|
341
|
+
if (areasBlock) for (const [, pattern] of areasBlock.matchAll(AREA_PATTERN_RE)) {
|
|
342
|
+
const prefix = zoneEnumere(pattern);
|
|
343
|
+
if (!prefix) continue;
|
|
344
|
+
findings.push({
|
|
345
|
+
kind: "firewall-area-enumere",
|
|
346
|
+
file: path.relative(cwd, manifestePath),
|
|
347
|
+
message: `la zone "${pattern}" énumère des routes au lieu de couvrir un espace — écris pattern: "^${prefix}". Tel quel, les routes visées sont bien protégées et TOUTE route ajoutée ensuite sous ${prefix} naîtra publique, sans qu'aucun test ne le voie : la zone existe et paraît couvrir l'espace`
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
for (const root of roots) {
|
|
351
|
+
if (!statSync(root, { throwIfNoEntry: false }) || !isTarget(root)) continue;
|
|
352
|
+
const sources = /* @__PURE__ */ new Map();
|
|
353
|
+
for (const file of wiringSources(root)) sources.set(file, read(file));
|
|
354
|
+
const rel = (f) => path.relative(cwd, f);
|
|
355
|
+
const declaredServices = /* @__PURE__ */ new Set();
|
|
356
|
+
for (const content of sources.values()) {
|
|
357
|
+
for (const [, list] of content.matchAll(SERVICES_LIST_RE)) for (const [, name] of list.matchAll(/\b(\w+)\b/gu)) declaredServices.add(name);
|
|
358
|
+
for (const [, name] of content.matchAll(IMPERATIVE_RE)) declaredServices.add(name);
|
|
359
|
+
}
|
|
360
|
+
for (const [file, content] of sources) {
|
|
361
|
+
for (const [, isAbstract, symbol] of content.matchAll(SERVICE_RE)) {
|
|
362
|
+
if (isAbstract) continue;
|
|
363
|
+
scanned += 1;
|
|
364
|
+
if (declaredServices.has(symbol)) continue;
|
|
365
|
+
findings.push({
|
|
366
|
+
kind: "orphan-service",
|
|
367
|
+
file: rel(file),
|
|
368
|
+
message: `${symbol} porte @injectable mais n'est déclaré nulle part — sans @services([${symbol}]) sur le module, il n'entre pas dans l'ordre de démarrage, échappe au rapport de boot et à l'introspection, et n'est construit qu'à la première requête qui le réclame`
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
for (const m of content.matchAll(ROUTE_PATH_RE)) {
|
|
372
|
+
const routePath = m[1] ?? m[2] ?? "";
|
|
373
|
+
const colon = COLON_SEGMENT_RE.exec(routePath);
|
|
374
|
+
if (!colon) continue;
|
|
375
|
+
const corrected = routePath.replace(/\/:(\w+)/gu, "/{$1}");
|
|
376
|
+
findings.push({
|
|
377
|
+
kind: "route-colon-param",
|
|
378
|
+
file: rel(file),
|
|
379
|
+
message: `le chemin "${routePath}" déclare son segment variable à la mode d'un autre framework — Nodefony écrit "${corrected}". Tel quel, ":${colon[1]}" est monté comme un littéral : la route s'affiche dans inspect routes et répond 404 à toute URL réelle`
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
if (EXTENDS_CONTROLLER_RE.test(content)) {
|
|
383
|
+
const code = withoutComments(content);
|
|
384
|
+
const facades = "les façades : this.renderJson(obj) pour du JSON, this.setContextHtml() puis this.render(html) pour une page, this.streamFile(f) / renderMediaStream(f) / renderFileDownload(f) pour un fichier";
|
|
385
|
+
const manquements = [
|
|
386
|
+
[RESPONSE_CAST_RE, "this.response est casté en any — c'est le signal d'une façade ratée, et le cast fait taire le seul contrôle qui aurait nommé la bonne"],
|
|
387
|
+
[RESPONSE_CONTENT_TYPE_RE, "Content-Type est posé à la main — c'est la façade qui le décide, et le poser deux fois rend une réponse que le client lit de travers"],
|
|
388
|
+
[RESPONSE_RAW_WRITE_RE, "la réponse est écrite directement dans le socle (end/writeHead) — le body part sans passer par le pipeline"]
|
|
389
|
+
];
|
|
390
|
+
for (const [pattern, quoi] of manquements) {
|
|
391
|
+
if (!pattern.test(code)) continue;
|
|
392
|
+
findings.push({
|
|
393
|
+
kind: "reponse-a-la-main",
|
|
394
|
+
file: rel(file),
|
|
395
|
+
message: `${quoi}. Court-circuitée ainsi, la réponse perd la négociation de contenu, l'encodage, le nonce CSP de la requête et les hooks de fin de réponse (journal, profileur) — tout cela sans qu'aucun test ne le voie, puisque le body arrive bien. Emploie ${facades}`
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
if (EXTENDS_MODULE_RE.test(content)) for (const [, hook] of content.matchAll(HOOK_DECL_RE)) {
|
|
400
|
+
if (HOOKS_MODULE.has(hook)) continue;
|
|
401
|
+
findings.push({
|
|
402
|
+
kind: "hook-lifecycle-inconnu",
|
|
403
|
+
file: rel(file),
|
|
404
|
+
message: `${hook}() n'est pas un hook de module — seuls ${[...HOOKS_MODULE].join(", ")} sont attachés au démarrage. Écrite ainsi, la méthode compile et n'est JAMAIS appelée : ce qu'elle initialise ne le sera pas, et rien ne le signalera`
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
const dir = path.dirname(file);
|
|
408
|
+
const inEntities = dir.endsWith(path.join("nodefony", "entity"));
|
|
409
|
+
const inControllers = dir.endsWith(path.join("nodefony", "controllers"));
|
|
410
|
+
if (!inEntities && !inControllers) continue;
|
|
411
|
+
scanned += 1;
|
|
412
|
+
if (declared) for (const brick of BRICKS) {
|
|
413
|
+
if (!brick.marker.test(content)) continue;
|
|
414
|
+
if (brick.packages.some((p) => declared.includes(p))) continue;
|
|
415
|
+
findings.push({
|
|
416
|
+
kind: "missing-brick",
|
|
417
|
+
file: rel(file),
|
|
418
|
+
message: `ce fichier déclare ${brick.what}, mais ${brick.packages.join(" ni ")} n'est déclaré par l'application — le module ne sera pas chargé, et le code compilera sans jamais s'exécuter`
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
if (inEntities) for (const [, symbol] of content.matchAll(ENTITY_RE)) {
|
|
422
|
+
if (!referencedElsewhere(symbol, file, sources)) findings.push({
|
|
423
|
+
kind: "orphan-entity",
|
|
424
|
+
file: rel(file),
|
|
425
|
+
message: `${symbol} n'est déclarée nulle part — sans @entities([${symbol}]) sur le module, sa table n'est pas créée au démarrage et le repository lèvera « entité inconnue »`
|
|
426
|
+
});
|
|
427
|
+
const entityName = ENTITY_NAME_RE.exec(content.slice(content.indexOf(symbol)))?.[1];
|
|
428
|
+
const reserved = entityName ? findReservedEntity(entityName) : void 0;
|
|
429
|
+
if (reserved && !reserved.appOwned) findings.push({
|
|
430
|
+
kind: "reserved-entity",
|
|
431
|
+
file: rel(file),
|
|
432
|
+
message: `${symbol} déclare name: "${entityName}", qui appartient au module « ${reserved.module} » — le registre ORM est plat, l'application ne démarrera plus.\n → ${reserved.advice}`
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
if (inControllers) {
|
|
436
|
+
for (const [, symbol] of content.matchAll(CONTROLLER_RE)) if (!referencedElsewhere(symbol, file, sources)) findings.push({
|
|
437
|
+
kind: "orphan-controller",
|
|
438
|
+
file: rel(file),
|
|
439
|
+
message: `${symbol} n'est déclaré nulle part — sans @controllers([${symbol}]) sur le module, aucune de ses routes n'est montée et elles répondront 404`
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
return {
|
|
445
|
+
findings,
|
|
446
|
+
scanned
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
//#endregion
|
|
450
|
+
export { checkWiring };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import Command from "../../command/Command.js";
|
|
2
|
+
import { runAiMcpCommand } from "../../cli/aiMcp.js";
|
|
3
|
+
//#region src/kernel/commands/AiMcpCommand.ts
|
|
4
|
+
const options = {
|
|
5
|
+
helpGroup: "AGENTS ET OUTILLAGE",
|
|
6
|
+
showBanner: false,
|
|
7
|
+
kernelEvent: "onRegister",
|
|
8
|
+
quietBoot: true
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Commande `nodefony ai:mcp` — déclare le serveur MCP de cette application à
|
|
12
|
+
* l'agent (`.mcp.json`).
|
|
13
|
+
*
|
|
14
|
+
* **Exécutée en « standalone » (zéro boot).** L'enregistrement ici sert au help
|
|
15
|
+
* (`nodefony --help`) et à la complétion ; l'exécution réelle est interceptée
|
|
16
|
+
* par le fast-path de {@link CliKernel.start} — elle n'écrit qu'un fichier de
|
|
17
|
+
* câblage, le serveur MCP étant une ROUTE de l'application. Le `generate()`
|
|
18
|
+
* ci-dessous n'est qu'un FILET.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```bash
|
|
22
|
+
* nodefony ai:mcp # écrit/actualise .mcp.json
|
|
23
|
+
* nodefony ai:mcp --dry-run # le plan, sans rien écrire
|
|
24
|
+
* nodefony ai:mcp --auth # mode authentifié (en-tête ${NF_MCP_TOKEN})
|
|
25
|
+
* nodefony ai:mcp --agent gemini,codex # déclare AUSSI la porte via LEUR CLI
|
|
26
|
+
* nodefony ai:mcp --agent all --remove # la retire partout
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* `--agent` accepte `none` — et en interactif, ne rien cocher revient au même :
|
|
30
|
+
* coder sans agent est un choix, pas un oubli qu'il faudrait rattraper.
|
|
31
|
+
*/
|
|
32
|
+
var AiMcp = class extends Command {
|
|
33
|
+
constructor(cli) {
|
|
34
|
+
super("ai:mcp", "déclare le serveur MCP de l'app à ton agent", cli, options);
|
|
35
|
+
this.addOption("-a, --auth", "Mode authentifié : l'en-tête porte ${NF_MCP_TOKEN}, jamais le jeton");
|
|
36
|
+
this.addOption("--no-auth", "Retire l'en-tête d'autorisation (sans option, le mode en place est CONSERVÉ)");
|
|
37
|
+
this.addOption("--url <origine>", "Origine forcée (ex. https://localhost:5152)");
|
|
38
|
+
this.addOption("--agent <liste>", "Déclare AUSSI la porte chez ces agents via LEUR CLI (claude, gemini, vibe, codex, all, none)");
|
|
39
|
+
this.addOption("--remove", "Avec --agent : retire la déclaration au lieu de la poser");
|
|
40
|
+
this.addOption("--global", "Avec --agent : déclare dans TON foyer au lieu du projet (une seule app servie)");
|
|
41
|
+
this.addOption("--dry-run", "Le plan, sans rien écrire");
|
|
42
|
+
this.addOption("--json", "Sortie exploitable par un script");
|
|
43
|
+
this.addOption("--cwd <path>", "Point de départ (la racine de l'app est résolue en remontant)");
|
|
44
|
+
}
|
|
45
|
+
async generate(opts) {
|
|
46
|
+
const argv = [
|
|
47
|
+
"node",
|
|
48
|
+
"nodefony",
|
|
49
|
+
"ai:mcp"
|
|
50
|
+
];
|
|
51
|
+
if (opts?.auth) argv.push("--auth");
|
|
52
|
+
if (opts?.noAuth) argv.push("--no-auth");
|
|
53
|
+
if (opts?.agent) argv.push("--agent", opts.agent);
|
|
54
|
+
if (opts?.remove) argv.push("--remove");
|
|
55
|
+
if (opts?.global) argv.push("--global");
|
|
56
|
+
if (opts?.url) argv.push("--url", opts.url);
|
|
57
|
+
if (opts?.dryRun) argv.push("--dry-run");
|
|
58
|
+
if (opts?.json) argv.push("--json");
|
|
59
|
+
if (opts?.cwd) argv.push("--cwd", opts.cwd);
|
|
60
|
+
await this.terminate(await runAiMcpCommand(argv));
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
//#endregion
|
|
65
|
+
export { AiMcp as default };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import Command from "../../command/Command.js";
|
|
2
|
+
import { runAiSyncCommand } from "../../cli/aiSync.js";
|
|
3
|
+
//#region src/kernel/commands/AiSyncCommand.ts
|
|
4
|
+
const options = {
|
|
5
|
+
helpGroup: "AGENTS ET OUTILLAGE",
|
|
6
|
+
quietBoot: true,
|
|
7
|
+
showBanner: false,
|
|
8
|
+
kernelEvent: "onRegister"
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Commande `nodefony ai:sync` — pointeurs vers les skills d'agent livrés par
|
|
12
|
+
* les paquets installés.
|
|
13
|
+
*
|
|
14
|
+
* **Exécutée en « standalone » (zéro boot).** L'enregistrement ici sert au help
|
|
15
|
+
* (`nodefony --help`) et à la complétion ; l'exécution réelle est interceptée
|
|
16
|
+
* par le fast-path de {@link CliKernel.start} — portée par un module
|
|
17
|
+
* `policy: "dev"`, elle n'existerait pas dans un terminal sans `NODE_ENV`,
|
|
18
|
+
* et c'est exactement ce que le fast-path évite. Le `generate()` ci-dessous
|
|
19
|
+
* n'est qu'un FILET.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```bash
|
|
23
|
+
* nodefony ai:sync # pose/rafraîchit .agents/skills + miroir .claude/skills
|
|
24
|
+
* nodefony ai:sync --dry-run # le plan, sans rien écrire
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
var AiSync = class extends Command {
|
|
28
|
+
constructor(cli) {
|
|
29
|
+
super("ai:sync", "installe les skills d'agent des paquets présents", cli, options);
|
|
30
|
+
this.addOption("--dry-run", "Le plan, sans rien écrire");
|
|
31
|
+
this.addOption("--json", "Sortie exploitable par un script");
|
|
32
|
+
this.addOption("--cwd <path>", "Point de départ (la racine de l'app est résolue en remontant)");
|
|
33
|
+
}
|
|
34
|
+
async generate(opts) {
|
|
35
|
+
const argv = [
|
|
36
|
+
"node",
|
|
37
|
+
"nodefony",
|
|
38
|
+
"ai:sync"
|
|
39
|
+
];
|
|
40
|
+
if (opts?.dryRun) argv.push("--dry-run");
|
|
41
|
+
if (opts?.json) argv.push("--json");
|
|
42
|
+
if (opts?.cwd) argv.push("--cwd", opts.cwd);
|
|
43
|
+
await this.terminate(runAiSyncCommand(argv));
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
//#endregion
|
|
48
|
+
export { AiSync as default };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import Command from "../../command/Command.js";
|
|
2
|
+
import { needsShell } from "../../cli/execPortable.js";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
//#region src/kernel/commands/BuildCommand.ts
|
|
5
|
+
const options = {
|
|
6
|
+
helpGroup: "GÉNÉRER ET CONSTRUIRE",
|
|
7
|
+
showBanner: false,
|
|
8
|
+
kernelEvent: "onRegister"
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Commande `nodefony build` (alias `compile`) — délègue à la **toolchain CLI**
|
|
12
|
+
* (`turbo run build` → chaque `rollup.config.ts` de workspace), source UNIQUE du
|
|
13
|
+
* build. Ne build PLUS via un service rollup embarqué dans le process (retiré
|
|
14
|
+
* 2026-06-02 : doublon de config + import de la toolchain à chaque boot serveur).
|
|
15
|
+
*/
|
|
16
|
+
var Build = class extends Command {
|
|
17
|
+
constructor(cli) {
|
|
18
|
+
super("build", "compile les modules puis l'application vers dist/", cli, options);
|
|
19
|
+
this.alias("compile");
|
|
20
|
+
this.addOption("-f, --force", "Ignore le cache turbo et reconstruit tout (--force)");
|
|
21
|
+
}
|
|
22
|
+
async generate(...args) {
|
|
23
|
+
const force = Boolean(args[0]?.force);
|
|
24
|
+
const turboArgs = [
|
|
25
|
+
"turbo",
|
|
26
|
+
"run",
|
|
27
|
+
"build"
|
|
28
|
+
];
|
|
29
|
+
if (force) turboArgs.push("--force");
|
|
30
|
+
this.log(`build : npx ${turboArgs.join(" ")}`, "INFO");
|
|
31
|
+
const code = await new Promise((res) => {
|
|
32
|
+
const p = spawn("npx", turboArgs, {
|
|
33
|
+
cwd: process.cwd(),
|
|
34
|
+
stdio: "inherit",
|
|
35
|
+
shell: needsShell("npx")
|
|
36
|
+
});
|
|
37
|
+
p.once("exit", (c) => res(c ?? 1));
|
|
38
|
+
p.once("error", () => res(1));
|
|
39
|
+
});
|
|
40
|
+
if (code !== 0) {
|
|
41
|
+
this.log(`build échoué (turbo exit ${code})`, "ERROR");
|
|
42
|
+
throw new Error(`turbo build failed (${code})`);
|
|
43
|
+
}
|
|
44
|
+
this.log("build ok", "INFO");
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
//#endregion
|
|
49
|
+
export { Build as default };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { version } from "../../package.js";
|
|
2
|
+
import Command from "../../command/Command.js";
|
|
3
|
+
import { runCardCommand } from "../../cli/card.js";
|
|
4
|
+
//#region src/kernel/commands/CardCommand.ts
|
|
5
|
+
const options = {
|
|
6
|
+
helpGroup: "COMPRENDRE",
|
|
7
|
+
quietBoot: true,
|
|
8
|
+
showBanner: false,
|
|
9
|
+
kernelEvent: "onRegister"
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Commande `nodefony card` — la carte de visite de l'application : qui répond,
|
|
13
|
+
* où aller ensuite, quoi lancer.
|
|
14
|
+
*
|
|
15
|
+
* C'est la PREMIÈRE commande d'un agent (ou d'un humain) qui arrive dans une
|
|
16
|
+
* application qu'il ne connaît pas — donc la seule qui ne peut se permettre
|
|
17
|
+
* aucune condition d'accès.
|
|
18
|
+
*
|
|
19
|
+
* **Exécutée en « standalone » (zéro boot).** L'enregistrement ici sert au help
|
|
20
|
+
* (`nodefony --help`) ; l'exécution réelle est interceptée par le fast-path de
|
|
21
|
+
* {@link CliKernel.start}. Délibéré, et pour deux raisons mesurées : une
|
|
22
|
+
* application fraîchement générée n'est pas encore CONSTRUITE (tout ce qui exige
|
|
23
|
+
* un Kernel répond alors « lance npm run build »), et un terminal sans
|
|
24
|
+
* `NODE_ENV` faisait disparaître la carte avec le module `policy: "dev"` qui la
|
|
25
|
+
* portait (`unknown command`, sans piste).
|
|
26
|
+
*
|
|
27
|
+
* L'alias `devkit:card` reste reconnu — c'est le nom sous lequel la carte a
|
|
28
|
+
* d'abord existé, et il est écrit dans les `AGENTS.md` déjà générés.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```bash
|
|
32
|
+
* nodefony card # la carte, pour un humain ou un agent qui lit un terminal
|
|
33
|
+
* nodefony card --json # la même, pour un programme
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
var Card = class extends Command {
|
|
37
|
+
constructor(cli) {
|
|
38
|
+
super("card", "carte de visite : où l'on est, quoi lancer", cli, options);
|
|
39
|
+
this.alias("devkit:card");
|
|
40
|
+
this.addOption("-j, --json", "sortie JSON (scriptable)");
|
|
41
|
+
this.addOption("--cwd <path>", "Point de départ (la racine de l'app est résolue en remontant)");
|
|
42
|
+
}
|
|
43
|
+
async generate(opts) {
|
|
44
|
+
const code = runCardCommand(opts?.json ? ["card", "--json"] : ["card"], version);
|
|
45
|
+
await this.terminate(code);
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
export { Card as default };
|