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,335 @@
|
|
|
1
|
+
import {
|
|
2
|
+
controller,
|
|
3
|
+
route,
|
|
4
|
+
ResourceController,
|
|
5
|
+
Post,
|
|
6
|
+
Put,
|
|
7
|
+
Patch,
|
|
8
|
+
Delete,
|
|
9
|
+
HttpCode,
|
|
10
|
+
Param,
|
|
11
|
+
Body,
|
|
12
|
+
Query,
|
|
13
|
+
Idempotent,
|
|
14
|
+
<% if (it.hasSecurity) { %> IsGranted,
|
|
15
|
+
<% } %>} from "@nodefony/framework";
|
|
16
|
+
import { HttpError } from "@nodefony/http";
|
|
17
|
+
import type { ContextType } from "@nodefony/http";
|
|
18
|
+
// LES deux lecteurs de requête du framework — jamais un parseur maison : deux
|
|
19
|
+
// dialectes de pagination dans une même application finissent par diverger, et
|
|
20
|
+
// c'est le client qui l'apprend.
|
|
21
|
+
import { parsePageQuery, parseFilters } from "nodefony";
|
|
22
|
+
import type { IFilterSpec } from "nodefony";
|
|
23
|
+
import type { <%= it.pascal %>Row } from "../entity/<%= it.pascal %>";
|
|
24
|
+
// Le CONTRAT D'ENTRÉE, pas la ligne de table : `<%= it.pascal %>Row` porte `id` et
|
|
25
|
+
// les horodatages, que le client n'a pas le droit d'envoyer et que le schéma
|
|
26
|
+
// retire. Typer le corps avec ces types-là, c'est promettre exactement ce qui
|
|
27
|
+
// est validé — les deux dérivent du même schéma, ils ne peuvent pas diverger.
|
|
28
|
+
import type {
|
|
29
|
+
Create<%= it.pascal %>,
|
|
30
|
+
Update<%= it.pascal %>,
|
|
31
|
+
} from "../entity/<%= it.pascal %>.schema";
|
|
32
|
+
import { get<%= it.pascal %>Service } from "../service/<%= it.pascal %>Service";
|
|
33
|
+
|
|
34
|
+
/** Taille de page par défaut, et plafond au-delà duquel on refuse d'aller. */
|
|
35
|
+
const PAGE_SIZE = 25;
|
|
36
|
+
const PAGE_MAX = 100;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Colonnes qu'un client a le droit de trier — **la capacité de cette route**.
|
|
40
|
+
*
|
|
41
|
+
* Une allowlist, pas la liste des colonnes : sans elle, le client nomme
|
|
42
|
+
* n'importe quoi et l'ORM lève sur un nom inconnu — un 500 offert à qui tape au
|
|
43
|
+
* hasard. Elle est passée à `parsePageQuery`, qui refuse un champ hors liste par
|
|
44
|
+
* un **400** explicite. Refuser plutôt qu'ignorer : une page rendue dans un
|
|
45
|
+
* ordre qui n'est pas celui demandé, sans un mot, est un mensonge que personne
|
|
46
|
+
* ne voit — ni le client, ni les journaux.
|
|
47
|
+
*/
|
|
48
|
+
const SORTABLE = <%= JSON.stringify(it.sortable) %> as const;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Ce que cette route sait FILTRER — nom public → nature, et rien d'autre.
|
|
52
|
+
*
|
|
53
|
+
* C'est le frère de `SORTABLE`, avec une règle inverse : un tri est une capacité
|
|
54
|
+
* (le backend sait-il ordonner ?), un filtre déclaré ici est une **obligation** —
|
|
55
|
+
* la route promet de l'honorer, et `parseFilters` la tient.
|
|
56
|
+
*
|
|
57
|
+
* Trois refus, tous en **400** : une valeur mal formée (`?<%= it.filters.length ? it.filters[0].name : "actif" %>=oui`),
|
|
58
|
+
* une valeur hors énumération, et — le plus important — un paramètre que
|
|
59
|
+
* **personne** ne reconnaît (`?titre=x` au lieu de `?title=x`). Sans ce dernier,
|
|
60
|
+
* une faute de frappe dans une URL rend la collection ENTIÈRE, que le client lit
|
|
61
|
+
* comme le résultat de son filtre : c'est la façon la plus discrète de mentir.
|
|
62
|
+
*
|
|
63
|
+
* Une valeur est une liste ⇒ elle vaut allowlist. Ajouter un filtre ici, c'est
|
|
64
|
+
* ajouter une ligne — et le TYPE des filtres lus suit tout seul.
|
|
65
|
+
<% if (!it.filters.length) { %> *
|
|
66
|
+
* Aucun champ de cette entité ne se prête à l'égalité (ni booléen, ni
|
|
67
|
+
* énumération, ni référence) : la spec est vide, et elle sert quand même — elle
|
|
68
|
+
* refuse tout paramètre inventé. Déclare ici ce que tu veux filtrer.
|
|
69
|
+
<% } %> */
|
|
70
|
+
const FILTERS = {
|
|
71
|
+
<% for (const f of it.filters) { %> <%= f.name %>: <%= f.def %>,
|
|
72
|
+
<% } %>} as const satisfies IFilterSpec;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Ordre par défaut — **il n'est pas décoratif**.
|
|
76
|
+
*
|
|
77
|
+
* Sans ordre déterministe, la base rend les lignes dans l'ordre qui l'arrange, et
|
|
78
|
+
* il peut changer entre deux requêtes : la page 2 remontre alors une ligne déjà
|
|
79
|
+
* vue, ou en saute une, sans que rien ne le signale. L'`id` départage les ex æquo.
|
|
80
|
+
*/
|
|
81
|
+
const DEFAULT_ORDER: Array<[string, "ASC" | "DESC"]> = <%= it.defaultOrder %>;
|
|
82
|
+
<% if (it.relations.length) { %>
|
|
83
|
+
/**
|
|
84
|
+
* Relations chargeables par `?include=` — **allowlist**, comme le tri.
|
|
85
|
+
*
|
|
86
|
+
* Un `include` libre laisserait le client nommer n'importe quelle association et
|
|
87
|
+
* lire, par ricochet, des données qu'aucune route ne lui ouvre. Ici, seules les
|
|
88
|
+
* relations déclarées sur l'entité sont chargeables.
|
|
89
|
+
*/
|
|
90
|
+
const INCLUDABLE = new Set<string>(<%= JSON.stringify(it.relations.map((r) => r.field)) %>);
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Traduit `?include=<%= it.relations[0].field %>` en liste de relations à charger.
|
|
94
|
+
*
|
|
95
|
+
* Une relation inconnue est **refusée**, jamais ignorée : rendre l'enregistrement
|
|
96
|
+
* sans la relation demandée, avec un `200`, laisse le client croire que la
|
|
97
|
+
* relation est vide alors qu'il a simplement mal écrit son nom. Le tri et les
|
|
98
|
+
* filtres refusent pour la même raison — une seule doctrine dans cette route.
|
|
99
|
+
*/
|
|
100
|
+
function parseInclude(include?: string): string[] {
|
|
101
|
+
if (!include) return [];
|
|
102
|
+
const names = include
|
|
103
|
+
.split(",")
|
|
104
|
+
.map((raw) => raw.trim())
|
|
105
|
+
.filter((name) => name !== "");
|
|
106
|
+
for (const name of names) {
|
|
107
|
+
if (!INCLUDABLE.has(name)) {
|
|
108
|
+
throw new HttpError(
|
|
109
|
+
`Relation « ${name} » inconnue. Relations chargeables : ${[...INCLUDABLE].join(", ")}.`,
|
|
110
|
+
400,
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return names;
|
|
115
|
+
}
|
|
116
|
+
<% } %>
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* `<%= it.pascal %>` exposée en HTTP **et** par la socket Nodefony — une seule classe.
|
|
120
|
+
*
|
|
121
|
+
* Les deux actions de lecture déclarent `methods: ["GET", "WEBSOCKET"]` : la même
|
|
122
|
+
* méthode répond à `GET <%= it.route %>` et à un appel de la socket. Il n'y a rien à
|
|
123
|
+
* réécrire pour le temps réel, et les deux chemins ne peuvent pas diverger.
|
|
124
|
+
*
|
|
125
|
+
* Le controller ne contient **aucune logique** : il traduit une requête en appel de
|
|
126
|
+
* service, et une erreur en statut. Tout le métier (validation comprise) vit dans
|
|
127
|
+
* `<%= it.pascal %>Service`.
|
|
128
|
+
*
|
|
129
|
+
* ```bash
|
|
130
|
+
* curl -k "https://127.0.0.1:5152<%= it.route %>?limit=10"
|
|
131
|
+
* curl -k -X POST -H "content-type: application/json" \
|
|
132
|
+
* -H "idempotency-key: essai-1" -d '<%= it.curlBody %>' https://127.0.0.1:5152<%= it.route %>
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
@controller("<%= it.route %>")
|
|
136
|
+
class <%= it.pascal %>Controller extends ResourceController<<%= it.pascal %>Row> {
|
|
137
|
+
constructor(context: ContextType) {
|
|
138
|
+
super("<%= it.pascal %>Controller", context, get<%= it.pascal %>Service());
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* `GET <%= it.route %>` — liste paginée (et le même appel par la socket).
|
|
143
|
+
*
|
|
144
|
+
* Rend une **page**, pas un tableau nu : `{ items, limit, offset, hasNext, total }`.
|
|
145
|
+
* Un tableau ne dit pas s'il en reste — le client qui reçoit 25 lignes ne peut pas
|
|
146
|
+
* distinguer « c'est tout » de « demande la suite ».
|
|
147
|
+
*
|
|
148
|
+
* La pagination est **plafonnée** plutôt que refusée : un `limit=10000` rend 100
|
|
149
|
+
* lignes, il ne rend pas une erreur. Ce plafond est ce qui empêche un client d'user
|
|
150
|
+
* de charger la table entière en mémoire.
|
|
151
|
+
*
|
|
152
|
+
* `?order=<%= it.timestamps ? "createdAt" : "id" %>:DESC` trie — c'est **le** dialecte
|
|
153
|
+
* de pagination de Nodefony, le même pour toutes les routes du framework et de ta
|
|
154
|
+
* propre application. Un champ absent de `SORTABLE` est refusé par un **400**, jamais
|
|
155
|
+
* accepté puis ignoré. `?withTotal=false` économise le `COUNT(*)` quand le client
|
|
156
|
+
* n'affiche pas de numéros de page.
|
|
157
|
+
*
|
|
158
|
+
* Deux lecteurs, deux domaines qui ne se recouvrent pas : `parsePageQuery` lit le
|
|
159
|
+
* contrat de page (`limit`, `offset`, `order`, `withTotal`, `q`), `parseFilters` lit
|
|
160
|
+
* ce que `FILTERS` déclare — et refuse tout le reste. N'écris jamais un troisième
|
|
161
|
+
* parseur dans cette méthode : deux traducteurs du MÊME paramètre, dont un seul
|
|
162
|
+
* connaît l'allowlist, font refuser en 400 ce que l'autre vient d'accepter, et aucun
|
|
163
|
+
* test unitaire ne le voit.
|
|
164
|
+
*
|
|
165
|
+
<% if (it.filters.length) { %> * Les filtres traversent jusqu'à la base (`criteria` → `WHERE`), ils ne sont pas
|
|
166
|
+
* appliqués après découpage : filtrer une page déjà tranchée rendrait des pages
|
|
167
|
+
* incomplètes, et un `total` qui ne correspond à rien.
|
|
168
|
+
*
|
|
169
|
+
<% } %>
|
|
170
|
+
* ⚠️ `offset` se dégrade sur les grandes tables (la base doit compter les lignes
|
|
171
|
+
* sautées) et peut sauter des enregistrements si des insertions ont lieu pendant la
|
|
172
|
+
* pagination. Un curseur opaque viendra le remplacer.
|
|
173
|
+
*
|
|
174
|
+
* ```bash
|
|
175
|
+
* curl -k "https://127.0.0.1:5152<%= it.route %>?limit=10&order=<%= it.timestamps ? "createdAt" : "id" %>:DESC"
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
@route("<%= it.kebab %>-list", {
|
|
179
|
+
path: "",
|
|
180
|
+
requirements: { methods: ["GET", "WEBSOCKET"] },
|
|
181
|
+
})
|
|
182
|
+
list(@Query() query: Record<string, string | string[] | undefined> = {}) {
|
|
183
|
+
const page = parsePageQuery(query, {
|
|
184
|
+
defaultLimit: PAGE_SIZE,
|
|
185
|
+
maxLimit: PAGE_MAX,
|
|
186
|
+
sortable: SORTABLE,
|
|
187
|
+
});
|
|
188
|
+
// Les filtres DÉCLARÉS, et eux seuls. Ce que `FILTERS` ne nomme pas est refusé
|
|
189
|
+
// en 400 plutôt que rendu non filtré : un critère accepté puis jeté produit une
|
|
190
|
+
// réponse que le client prend pour le résultat de sa demande.
|
|
191
|
+
const filters = parseFilters(query, FILTERS);
|
|
192
|
+
return this.listPageResource({
|
|
193
|
+
limit: page.limit,
|
|
194
|
+
offset: page.offset ?? 0,
|
|
195
|
+
order: page.order?.length ? page.order : DEFAULT_ORDER,
|
|
196
|
+
withTotal: page.withTotal !== false,
|
|
197
|
+
// Les filtres deviennent les critères du store : `?<%= it.filters.length ? it.filters[0].name + "=" : "" %>…` se
|
|
198
|
+
// traduit en `WHERE`, il n'est pas appliqué après coup sur une page déjà
|
|
199
|
+
// découpée — filtrer APRÈS avoir paginé rend des pages incomplètes.
|
|
200
|
+
criteria: filters,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* `GET <%= it.route %>/{id}` — 404 si l'enregistrement n'existe pas.
|
|
206
|
+
<% if (it.relations.length) { %> *
|
|
207
|
+
* `?include=<%= it.relations[0].field %>` charge la relation dans la même requête,
|
|
208
|
+
* au lieu de laisser le client enchaîner un second appel par ligne. Seules les
|
|
209
|
+
* relations déclarées sur l'entité sont acceptées.
|
|
210
|
+
*
|
|
211
|
+
* ```bash
|
|
212
|
+
* curl -k "https://127.0.0.1:5152<%= it.route %>/<id>?include=<%= it.relations[0].field %>"
|
|
213
|
+
* ```
|
|
214
|
+
<% } %> */
|
|
215
|
+
@route("<%= it.kebab %>-get", {
|
|
216
|
+
path: "/{id}",
|
|
217
|
+
requirements: { methods: ["GET", "WEBSOCKET"] },
|
|
218
|
+
})
|
|
219
|
+
<% if (it.relations.length) { %> async detail(
|
|
220
|
+
@Param("id") id: string,
|
|
221
|
+
@Query("include") include?: string,
|
|
222
|
+
) {
|
|
223
|
+
const relations = parseInclude(include);
|
|
224
|
+
const found = await this.getResource(
|
|
225
|
+
id,
|
|
226
|
+
relations.length > 0 ? { relations } : undefined,
|
|
227
|
+
);
|
|
228
|
+
<% } else { %> async detail(@Param("id") id: string) {
|
|
229
|
+
const found = await this.getResource(id);
|
|
230
|
+
<% } %> if (!found) {
|
|
231
|
+
throw new HttpError(`<%= it.pascal %> ${id} introuvable`, 404);
|
|
232
|
+
}
|
|
233
|
+
return found;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* `POST <%= it.route %>` — création. Rend **201** et l'en-tête `Location` de la
|
|
238
|
+
* ressource créée (le client sait où la relire sans deviner l'URL).
|
|
239
|
+
*
|
|
240
|
+
* `@Idempotent({ required: false })` — mode **souple** : un client qui envoie un
|
|
241
|
+
* en-tête `Idempotency-Key` et rejoue sa requête (coupure réseau, bouton pressé deux
|
|
242
|
+
* fois) reçoit la réponse mémorisée, sans créer de doublon ; un client qui n'en
|
|
243
|
+
* envoie pas est servi normalement. Passe à `@Idempotent()` pour **exiger** la clé —
|
|
244
|
+
* une API de paiement le doit, un blog n'en a pas besoin.
|
|
245
|
+
*
|
|
246
|
+
* Un corps invalide devient un **422** qui nomme les champs fautifs.
|
|
247
|
+
*/
|
|
248
|
+
@Post("")
|
|
249
|
+
@HttpCode(201)
|
|
250
|
+
@Idempotent({ required: false })
|
|
251
|
+
async create(@Body() payload: Create<%= it.pascal %>) {
|
|
252
|
+
const created = await this.createResource(payload);
|
|
253
|
+
this.context?.response?.setHeader(
|
|
254
|
+
"Location",
|
|
255
|
+
`<%= it.route %>/${(created as { id: unknown }).id}`,
|
|
256
|
+
);
|
|
257
|
+
return created;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* `PUT <%= it.route %>/{id}` — **remplacement**. 404 si la ressource n'existe pas.
|
|
262
|
+
*
|
|
263
|
+
* Le corps doit être COMPLET : un champ requis manquant est un `422`. C'est la
|
|
264
|
+
* sémantique de `PUT` (RFC 9110 §9.3.4) — pour ne changer qu'un champ, voir
|
|
265
|
+
* `PATCH` juste en dessous.
|
|
266
|
+
*
|
|
267
|
+
* Le service est demandé ici plutôt qu'appelé par `this.updateResource` parce
|
|
268
|
+
* que la distinction remplacer/retoucher est une règle MÉTIER : elle vit dans
|
|
269
|
+
* le service (qui choisit le schéma de validation), pas dans la porte.
|
|
270
|
+
*/
|
|
271
|
+
@Put("/{id}")
|
|
272
|
+
async replace(
|
|
273
|
+
@Param("id") id: string,
|
|
274
|
+
@Body() payload: Create<%= it.pascal %>,
|
|
275
|
+
) {
|
|
276
|
+
const updated = await get<%= it.pascal %>Service().replace(id, payload);
|
|
277
|
+
if (!updated) {
|
|
278
|
+
throw new HttpError(`<%= it.pascal %> ${id} introuvable`, 404);
|
|
279
|
+
}
|
|
280
|
+
return updated;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* `PATCH <%= it.route %>/{id}` — **retouche partielle**. 404 si absente.
|
|
285
|
+
*
|
|
286
|
+
* N'envoie que les champs à changer : ils sont validés contre
|
|
287
|
+
* `update<%= it.pascal %>Schema` (le schéma de création rendu facultatif), donc
|
|
288
|
+
* un corps `{ "<%= it.sortable[1] ?? "champ" %>": … }` suffit. Les champs absents
|
|
289
|
+
* ne sont pas touchés.
|
|
290
|
+
*/
|
|
291
|
+
@Patch("/{id}")
|
|
292
|
+
async patch(
|
|
293
|
+
@Param("id") id: string,
|
|
294
|
+
@Body() payload: Update<%= it.pascal %>,
|
|
295
|
+
) {
|
|
296
|
+
const updated = await this.updateResource({ id }, payload);
|
|
297
|
+
if (!updated) {
|
|
298
|
+
throw new HttpError(`<%= it.pascal %> ${id} introuvable`, 404);
|
|
299
|
+
}
|
|
300
|
+
return updated;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* `DELETE <%= it.route %>/{id}` — rend **204** (pas de corps : il n'y a plus rien à
|
|
305
|
+
* décrire). 404 si la ressource n'existait pas, pour que le client distingue
|
|
306
|
+
* « supprimée » de « jamais vue ».
|
|
307
|
+
*
|
|
308
|
+
<% if (it.hasSecurity) { %> * **Réservée à `ROLE_ADMIN`** : `@IsGranted` refuse AVANT même d'entrer dans
|
|
309
|
+
* l'action. C'est la seule route de ce contrôleur qui DÉTRUISE — la laisser
|
|
310
|
+
* ouverte reviendrait à livrer une application où n'importe qui efface les
|
|
311
|
+
* données d'autrui. En développement, `admin/admin` porte ce rôle.
|
|
312
|
+
*
|
|
313
|
+
* Pour ouvrir davantage (une équipe, un rôle métier), change le rôle ici, ou
|
|
314
|
+
* déclare une zone dans `security.areas` qui couvre `<%= it.route %>` — les
|
|
315
|
+
* deux voies sont du framework. Ce qu'il ne faut PAS faire, c'est lire
|
|
316
|
+
* `user.roles` à la main dans l'action : la garde s'exécute avant elle, et un
|
|
317
|
+
* contrôle écrit à la main est celui qu'on oublie de reporter ailleurs.
|
|
318
|
+
<% } else { %> * ⚠️ **Cette route n'est protégée par RIEN.** Aucun module de sécurité n'est
|
|
319
|
+
* installé, donc n'importe qui peut supprimer. Ajoute `@nodefony/security`,
|
|
320
|
+
* puis un `@IsGranted("ROLE_ADMIN")` juste au-dessus de `@Delete` — ou une
|
|
321
|
+
* zone dans `security.areas` qui couvre `<%= it.route %>`.
|
|
322
|
+
<% } %> */
|
|
323
|
+
@Delete("/{id}")
|
|
324
|
+
<% if (it.hasSecurity) { %> @IsGranted("ROLE_ADMIN")
|
|
325
|
+
<% } %> @HttpCode(204)
|
|
326
|
+
async destroy(@Param("id") id: string) {
|
|
327
|
+
const removed = await this.removeResource({ id });
|
|
328
|
+
if (removed === 0) {
|
|
329
|
+
throw new HttpError(`<%= it.pascal %> ${id} introuvable`, 404);
|
|
330
|
+
}
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
export default <%= it.pascal %>Controller;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { AbstractCrudService, ormRegistry } from "@nodefony/orm-core";
|
|
2
|
+
import type { IRepository } from "@nodefony/orm-core";
|
|
3
|
+
import type { <%= it.pascal %>Row } from "../entity/<%= it.pascal %>";
|
|
4
|
+
import {
|
|
5
|
+
create<%= it.pascal %>Schema,
|
|
6
|
+
update<%= it.pascal %>Schema,
|
|
7
|
+
} from "../entity/<%= it.pascal %>.schema";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* ⚡ **Tu veux un service ? Ne recopie pas ce fichier — génère-le :**
|
|
11
|
+
*
|
|
12
|
+
* ```bash
|
|
13
|
+
* npx nodefony create service <Nom> # la classe + sa déclaration
|
|
14
|
+
* npx nodefony create service <Nom> --inject <Autre> # + la dépendance écrite
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Le générateur écrit la version COURANTE du framework et déclare le service sur
|
|
18
|
+
* le module ; recopié à la main, il naît déjà décalé et personne ne le signale.
|
|
19
|
+
* Ce fichier reste là pour se LIRE — comprendre ce qu'est un service — pas pour
|
|
20
|
+
* se dupliquer.
|
|
21
|
+
*
|
|
22
|
+
*
|
|
23
|
+
* Logique métier de `<%= it.pascal %>` — **la** source de vérité.
|
|
24
|
+
*
|
|
25
|
+
* Elle vit ici, et pas dans le controller, parce qu'elle doit servir tous les
|
|
26
|
+
* transports : la même méthode alimente la route REST, l'appel WebSocket, un futur
|
|
27
|
+
* résolveur GraphQL et une commande CLI. Écrire le CRUD dans un controller
|
|
28
|
+
* obligerait à le réécrire pour chacun d'eux.
|
|
29
|
+
*
|
|
30
|
+
* `AbstractCrudService` fournit `find` / `findOne` / `findById` / `count` (délégation
|
|
31
|
+
* directe, sans surcoût), `findPage` (une page — `limit` obligatoire) et `create` /
|
|
32
|
+
* `updateOne` / `delete` (encadrés par des points d'extension et suivis d'événements
|
|
33
|
+
* `onCreated` / `onUpdated` / `onDeleted`).
|
|
34
|
+
*
|
|
35
|
+
* **Toute méthode qui rend une liste se borne** — `findPage`, ou `find` avec un `limit`.
|
|
36
|
+
* Un `find` sans borne matérialise la table entière en mémoire : indolore sur les
|
|
37
|
+
* quelques lignes du poste de développement, fatal sur celles de production.
|
|
38
|
+
*
|
|
39
|
+
* **Sans état par requête** : ce service est un singleton partagé. Ne jamais écrire
|
|
40
|
+
* `this.quelqueChose = …` pendant le traitement d'une requête — l'utilisateur courant
|
|
41
|
+
* ou la transaction voyagent dans le contexte, jamais sur l'instance.
|
|
42
|
+
*/
|
|
43
|
+
export class <%= it.pascal %>Service extends AbstractCrudService<<%= it.pascal %>Row> {
|
|
44
|
+
constructor(repository: IRepository<<%= it.pascal %>Row>) {
|
|
45
|
+
super("<%= it.camel %>Service", repository);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Valide les données **avant** l'insertion. Un rejet devient un `422` accompagné de
|
|
50
|
+
* la liste des champs fautifs, quel que soit le transport d'origine.
|
|
51
|
+
*
|
|
52
|
+
* `parse` retire au passage tout champ inconnu : un client ne peut pas écrire une
|
|
53
|
+
* colonne qu'on ne lui a pas ouverte.
|
|
54
|
+
*/
|
|
55
|
+
protected override beforeCreate(
|
|
56
|
+
data: Partial<<%= it.pascal %>Row>,
|
|
57
|
+
): Partial<<%= it.pascal %>Row> {
|
|
58
|
+
return create<%= it.pascal %>Schema.parse(data) as Partial<<%= it.pascal %>Row>;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Même contrat qu'à la création, mais tous les champs sont facultatifs.
|
|
63
|
+
*
|
|
64
|
+
* C'est la validation de la **retouche** (`PATCH`) : on ne peut pas exiger un
|
|
65
|
+
* champ que le client n'a pas voulu changer.
|
|
66
|
+
*/
|
|
67
|
+
protected override beforeUpdate(
|
|
68
|
+
_criteria: Record<string, unknown>,
|
|
69
|
+
data: Partial<<%= it.pascal %>Row>,
|
|
70
|
+
): Partial<<%= it.pascal %>Row> {
|
|
71
|
+
return update<%= it.pascal %>Schema.parse(data) as Partial<<%= it.pascal %>Row>;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Remplace un enregistrement — le corps doit être **complet** (`PUT`).
|
|
76
|
+
*
|
|
77
|
+
* C'est ce qui distingue `PUT` de `PATCH`, et la distinction est réelle : ici
|
|
78
|
+
* le corps est validé contre le schéma de CRÉATION, donc un champ requis
|
|
79
|
+
* manquant est un `422`. En `PATCH`, le même corps passerait. Sans cette
|
|
80
|
+
* méthode, les deux verbes feraient exactement la même chose et le `PUT`
|
|
81
|
+
* mentirait sur son contrat (RFC 9110 §9.3.4).
|
|
82
|
+
*
|
|
83
|
+
* @param id - identifiant de l'enregistrement à remplacer.
|
|
84
|
+
* @param data - représentation COMPLÈTE de la ressource.
|
|
85
|
+
* @returns l'enregistrement remplacé, ou `null` s'il n'existe pas.
|
|
86
|
+
*/
|
|
87
|
+
async replace(
|
|
88
|
+
id: string,
|
|
89
|
+
data: Partial<<%= it.pascal %>Row>,
|
|
90
|
+
): Promise<<%= it.pascal %>Row | null> {
|
|
91
|
+
const complete = create<%= it.pascal %>Schema.parse(
|
|
92
|
+
data,
|
|
93
|
+
) as Partial<<%= it.pascal %>Row>;
|
|
94
|
+
return this.updateOne({ id }, complete);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Instance partagée, construite au **premier usage**.
|
|
100
|
+
*
|
|
101
|
+
* Pourquoi paresseusement : le connecteur ne s'ouvre qu'à la phase `onBoot`, et son
|
|
102
|
+
* repository n'existe pas avant. Construire le service au démarrage du module le
|
|
103
|
+
* ferait dépendre de l'ordre des écouteurs — une panne intermittente, de celles qui ne
|
|
104
|
+
* se reproduisent pas en test. Au premier appel entrant, tout est démarré : plus
|
|
105
|
+
* aucune question d'ordre.
|
|
106
|
+
*/
|
|
107
|
+
let instance: <%= it.pascal %>Service | null = null;
|
|
108
|
+
|
|
109
|
+
/** Récupère le service (le construit au premier appel). */
|
|
110
|
+
export function get<%= it.pascal %>Service(): <%= it.pascal %>Service {
|
|
111
|
+
if (instance === null) {
|
|
112
|
+
// `ormRegistry.get()` LÈVE quand le nom est inconnu — un `if (!orm)` posé
|
|
113
|
+
// après lui ne s'exécute jamais. On demande donc d'abord, pour que le
|
|
114
|
+
// message qui suit (celui qui dit QUOI FAIRE) soit bien celui qu'on lit.
|
|
115
|
+
if (!ormRegistry.has("<%= it.connector %>")) {
|
|
116
|
+
throw new Error(
|
|
117
|
+
`<%= it.pascal %>Service : aucun connecteur « <%= it.connector %> » — vérifie que @nodefony/drizzle est dans le manifeste modules de nodefony.config.ts`,
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
const orm = ormRegistry.get("<%= it.connector %>");
|
|
121
|
+
instance = new <%= it.pascal %>Service(
|
|
122
|
+
orm.getRepository<<%= it.pascal %>Row>("<%= it.pascal %>"),
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
return instance;
|
|
126
|
+
}
|