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,358 @@
|
|
|
1
|
+
import { runningAppPort } from "nodefony/testing";
|
|
2
|
+
import { readRuntimeState } from "nodefony";
|
|
3
|
+
import { describe, it, expect, beforeAll } from "vitest";
|
|
4
|
+
<% if (it.hasSecurity) { %>import { connexionAdmin } from "./e2e.setup";
|
|
5
|
+
<% } %>
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Test E2E de la ressource `<%= it.pascal %>` — le cycle CRUD complet, sur le
|
|
9
|
+
* serveur RÉEL.
|
|
10
|
+
*
|
|
11
|
+
* Il complète `<%= it.kebab %>.test.ts`, qui éprouve la couche DONNÉE (repository et
|
|
12
|
+
* schéma, en base mémoire). Ici, on traverse tout : routage, décorateurs,
|
|
13
|
+
* validation, sérialisation, codes de statut. Les deux sont utiles pour des
|
|
14
|
+
* raisons différentes — le premier est rapide et cerne une régression, celui-ci
|
|
15
|
+
* prouve que la ressource est réellement servie.
|
|
16
|
+
*
|
|
17
|
+
* L'application est démarrée une fois par `tests/e2e.setup.ts` ; ce fichier ne
|
|
18
|
+
* fait que lui parler. Lancement : `npm run test:e2e`.
|
|
19
|
+
*/
|
|
20
|
+
const ROUTE = "<%= it.route %>";
|
|
21
|
+
let BASE = "http://127.0.0.1:5151";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Échantillon paramétré : `n` change les valeurs.
|
|
25
|
+
*
|
|
26
|
+
* Indispensable dès qu'un champ est unique — deux insertions du même échantillon
|
|
27
|
+
* violeraient la contrainte, et le test échouerait sur lui-même.
|
|
28
|
+
*/
|
|
29
|
+
const sample = (n: number) => (<%= it.sampleFactory %>);
|
|
30
|
+
|
|
31
|
+
/** Lit le corps JSON en le typant à plat, sans supposer la forme complète. */
|
|
32
|
+
async function json(res: Response): Promise<Record<string, unknown>> {
|
|
33
|
+
return (await res.json()) as Record<string, unknown>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* L'identité rejouée par TOUTES les requêtes du cycle — sauf celles qui
|
|
38
|
+
* mesurent un refus.
|
|
39
|
+
*
|
|
40
|
+
* Le CRUD généré répond à un anonyme tant que rien ne le protège. Mais dès que
|
|
41
|
+
* l'application pose une zone de firewall sur l'espace où vit la ressource — ce
|
|
42
|
+
* qu'une application réelle finit toujours par faire — un cycle anonyme casse
|
|
43
|
+
* en 401, et le réflexe le moins coûteux devient d'ouvrir une exception pour
|
|
44
|
+
* cette route. **Un test qui pousse à désarmer une garde est pire qu'un test
|
|
45
|
+
* absent** : il transforme la protection en panne à réparer.
|
|
46
|
+
*
|
|
47
|
+
* Le cycle s'authentifie donc par défaut, et reste vert que l'espace soit
|
|
48
|
+
* ouvert ou fermé. La seule requête volontairement anonyme est celle qui PROUVE
|
|
49
|
+
* le refus — elle est commentée comme telle.
|
|
50
|
+
*/
|
|
51
|
+
let AUTH: Record<string, string> = {};
|
|
52
|
+
|
|
53
|
+
/** En-têtes d'une requête à corps JSON, identité comprise. */
|
|
54
|
+
const entetes = (): Record<string, string> => ({
|
|
55
|
+
"content-type": "application/json",
|
|
56
|
+
...AUTH,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
describe("e2e — <%= it.pascal %> : le cycle CRUD complet", () => {
|
|
60
|
+
beforeAll(async () => {
|
|
61
|
+
const port = runningAppPort();
|
|
62
|
+
BASE = `http://127.0.0.1:${port}`;
|
|
63
|
+
<% if (it.hasSecurity) { %> AUTH = { cookie: await connexionAdmin() };
|
|
64
|
+
<% } %> });
|
|
65
|
+
|
|
66
|
+
it("POST → 201 + Location, puis GET sur cette Location", async () => {
|
|
67
|
+
const payload = sample(1);
|
|
68
|
+
const created = await fetch(`${BASE}${ROUTE}`, {
|
|
69
|
+
method: "POST",
|
|
70
|
+
headers: entetes(),
|
|
71
|
+
body: JSON.stringify(payload),
|
|
72
|
+
});
|
|
73
|
+
expect(created.status).toBe(201);
|
|
74
|
+
// `Location` n'est pas décoratif : c'est ce qui dispense le client de
|
|
75
|
+
// deviner l'URL de ce qu'il vient de créer.
|
|
76
|
+
const location = created.headers.get("location");
|
|
77
|
+
expect(location).toBeTruthy();
|
|
78
|
+
|
|
79
|
+
const reread = await fetch(`${BASE}${location}`, { headers: AUTH });
|
|
80
|
+
expect(reread.status).toBe(200);
|
|
81
|
+
<% if (it.comparableField) { %> const body = await json(reread);
|
|
82
|
+
expect(body["<%= it.comparableField %>"]).toBe(
|
|
83
|
+
(payload as Record<string, unknown>)["<%= it.comparableField %>"],
|
|
84
|
+
);
|
|
85
|
+
<% } %> });
|
|
86
|
+
|
|
87
|
+
it("PATCH retouche sans exiger le document entier", async () => {
|
|
88
|
+
const created = await fetch(`${BASE}${ROUTE}`, {
|
|
89
|
+
method: "POST",
|
|
90
|
+
headers: entetes(),
|
|
91
|
+
body: JSON.stringify(sample(2)),
|
|
92
|
+
});
|
|
93
|
+
const id = (await json(created)).id;
|
|
94
|
+
|
|
95
|
+
const patched = await fetch(`${BASE}${ROUTE}/${String(id)}`, {
|
|
96
|
+
method: "PATCH",
|
|
97
|
+
headers: entetes(),
|
|
98
|
+
body: JSON.stringify(sample(3)),
|
|
99
|
+
});
|
|
100
|
+
expect(patched.status).toBe(200);
|
|
101
|
+
<% if (it.comparableField) { %> const body = await json(patched);
|
|
102
|
+
expect(body["<%= it.comparableField %>"]).toBe(
|
|
103
|
+
(sample(3) as Record<string, unknown>)["<%= it.comparableField %>"],
|
|
104
|
+
);
|
|
105
|
+
<% } %> });
|
|
106
|
+
|
|
107
|
+
it("corps invalide → 422 qui NOMME les champs fautifs", async () => {
|
|
108
|
+
const res = await fetch(`${BASE}${ROUTE}`, {
|
|
109
|
+
method: "POST",
|
|
110
|
+
headers: entetes(),
|
|
111
|
+
body: JSON.stringify({}),
|
|
112
|
+
});
|
|
113
|
+
// 422 et non 400 : le corps a bien été lu, c'est son CONTENU qui viole le
|
|
114
|
+
// contrat (RFC 9110 §15.5.21).
|
|
115
|
+
expect(res.status).toBe(422);
|
|
116
|
+
});
|
|
117
|
+
<% if (it.hasUnique) { %>
|
|
118
|
+
it("doublon sur une valeur unique → 409, pas 500", async () => {
|
|
119
|
+
const payload = sample(42);
|
|
120
|
+
const first = await fetch(`${BASE}${ROUTE}`, {
|
|
121
|
+
method: "POST",
|
|
122
|
+
headers: entetes(),
|
|
123
|
+
body: JSON.stringify(payload),
|
|
124
|
+
});
|
|
125
|
+
expect(first.status).toBe(201);
|
|
126
|
+
|
|
127
|
+
const duplicate = await fetch(`${BASE}${ROUTE}`, {
|
|
128
|
+
method: "POST",
|
|
129
|
+
headers: entetes(),
|
|
130
|
+
body: JSON.stringify(payload),
|
|
131
|
+
});
|
|
132
|
+
// Rejouer la même valeur unique n'est pas une panne : c'est un refus d'état,
|
|
133
|
+
// sur lequel le client peut agir (proposer un autre identifiant). En 500, il
|
|
134
|
+
// n'aurait aucun moyen de le distinguer d'un serveur cassé.
|
|
135
|
+
expect(duplicate.status).toBe(409);
|
|
136
|
+
});
|
|
137
|
+
<% } %>
|
|
138
|
+
it("la liste est une PAGE : items bornés, hasNext, total", async () => {
|
|
139
|
+
for (const n of [101, 102, 103]) {
|
|
140
|
+
await fetch(`${BASE}${ROUTE}`, {
|
|
141
|
+
method: "POST",
|
|
142
|
+
headers: entetes(),
|
|
143
|
+
body: JSON.stringify(sample(n)),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
const res = await fetch(`${BASE}${ROUTE}?limit=2`, { headers: AUTH });
|
|
147
|
+
expect(res.status).toBe(200);
|
|
148
|
+
const page = (await res.json()) as {
|
|
149
|
+
items: unknown[];
|
|
150
|
+
hasNext: boolean;
|
|
151
|
+
total?: number;
|
|
152
|
+
limit: number;
|
|
153
|
+
};
|
|
154
|
+
expect(page.items).toHaveLength(2);
|
|
155
|
+
expect(page.limit).toBe(2);
|
|
156
|
+
// `hasNext` est ce qui distingue « c'est tout » de « demande la suite ». Un
|
|
157
|
+
// tableau nu ne le dit pas, et le client boucle ou s'arrête trop tôt.
|
|
158
|
+
expect(page.hasNext).toBe(true);
|
|
159
|
+
expect(page.total).toBeGreaterThanOrEqual(3);
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it("le plafond de page tient, même si le client demande tout", async () => {
|
|
163
|
+
const res = await fetch(`${BASE}${ROUTE}?limit=100000`, {
|
|
164
|
+
headers: AUTH,
|
|
165
|
+
});
|
|
166
|
+
const page = (await res.json()) as { limit: number };
|
|
167
|
+
// Plafonné, pas refusé : le client reçoit une réponse utile, et la table
|
|
168
|
+
// entière ne part jamais en mémoire.
|
|
169
|
+
expect(page.limit).toBeLessThanOrEqual(100);
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
it("un tri sur un champ non déclaré est REFUSÉ, pas ignoré", async () => {
|
|
173
|
+
// Le pire n'est pas le refus, c'est son absence : une page rendue dans un
|
|
174
|
+
// ordre qui n'est pas celui demandé, avec un 200, ne se voit nulle part.
|
|
175
|
+
const res = await fetch(`${BASE}${ROUTE}?order=champInexistant:ASC`, {
|
|
176
|
+
headers: AUTH,
|
|
177
|
+
});
|
|
178
|
+
expect(res.status).toBe(400);
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it("le tri ORDONNE : DESC est l'inverse EXACT d'ASC", async () => {
|
|
182
|
+
// Refuser un champ inconnu ne prouve PAS que le tri trie — un `ORDER BY`
|
|
183
|
+
// mort passe ce refus sans broncher. Ce sont deux tests, pas un.
|
|
184
|
+
//
|
|
185
|
+
// Et un test de tri est complaisant par défaut : lu sur un champ absent de
|
|
186
|
+
// la réponse, il compare des `undefined`, qui forment une suite
|
|
187
|
+
// parfaitement triée dans les deux sens. D'où trois affirmations.
|
|
188
|
+
for (const n of [201, 202, 203]) {
|
|
189
|
+
await fetch(`${BASE}${ROUTE}`, {
|
|
190
|
+
method: "POST",
|
|
191
|
+
headers: entetes(),
|
|
192
|
+
body: JSON.stringify(sample(n)),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
const lire = async (dir: string): Promise<unknown[]> => {
|
|
196
|
+
const res = await fetch(
|
|
197
|
+
`${BASE}${ROUTE}?order=<%= it.sortProbe %>:${dir}&limit=100`,
|
|
198
|
+
{ headers: AUTH },
|
|
199
|
+
);
|
|
200
|
+
expect(res.status).toBe(200);
|
|
201
|
+
const page = (await res.json()) as {
|
|
202
|
+
items: Record<string, unknown>[];
|
|
203
|
+
hasNext: boolean;
|
|
204
|
+
};
|
|
205
|
+
// ASC et DESC doivent porter sur le MÊME ensemble : au-delà d'une page,
|
|
206
|
+
// l'un rend les plus petits et l'autre les plus grands, et les comparer
|
|
207
|
+
// ne veut plus rien dire.
|
|
208
|
+
expect(page.hasNext).toBe(false);
|
|
209
|
+
return page.items.map((r) => r["<%= it.sortProbe %>"]);
|
|
210
|
+
};
|
|
211
|
+
const asc = await lire("ASC");
|
|
212
|
+
const desc = await lire("DESC");
|
|
213
|
+
// 1. le champ est PRÉSENT — sans quoi on ordonne des `undefined` ;
|
|
214
|
+
expect(asc.every((v) => v !== undefined)).toBe(true);
|
|
215
|
+
// 2. ses valeurs sont DISTINCTES — une colonne constante rend « trié » tout
|
|
216
|
+
// ordre, y compris celui que la base a choisi toute seule ;
|
|
217
|
+
expect(new Set(asc).size).toBe(asc.length);
|
|
218
|
+
// 3. l'ordre S'INVERSE — le seul point qu'un tri débranché ne simule pas.
|
|
219
|
+
expect(desc).toEqual([...asc].reverse());
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
it("un paramètre que PERSONNE ne reconnaît est REFUSÉ", async () => {
|
|
223
|
+
// La faute de frappe est le cas réel : sans ce refus, `?<%= it.filters.length ? it.filters[0].name.slice(0, -1) : "actf" %>=…` rend la
|
|
224
|
+
// collection ENTIÈRE, et le client la lit comme le résultat de son filtre.
|
|
225
|
+
const res = await fetch(`${BASE}${ROUTE}?<%= it.filters.length ? it.filters[0].name.slice(0, -1) : "actf" %>=x`, {
|
|
226
|
+
headers: AUTH,
|
|
227
|
+
});
|
|
228
|
+
expect(res.status).toBe(400);
|
|
229
|
+
});
|
|
230
|
+
<% if (it.malformedProbe) { %>
|
|
231
|
+
it("une valeur mal formée pour un filtre déclaré est REFUSÉE", async () => {
|
|
232
|
+
// `?<%= it.malformedProbe.name %>=<%= it.malformedProbe.value %>` : le filtre existe, sa valeur ne convient pas.
|
|
233
|
+
// Le poser à « absent » rendrait une page non filtrée sous un 200.
|
|
234
|
+
//
|
|
235
|
+
// Toutes les natures ne peuvent pas refuser : un filtre `"string"` accepte
|
|
236
|
+
// n'importe quelle chaîne. Ce test n'est donc émis que pour un booléen, un
|
|
237
|
+
// entier ou une énumération — sinon il exigerait le refus d'une valeur
|
|
238
|
+
// valide, et c'est le générateur qu'il mettrait en défaut.
|
|
239
|
+
const res = await fetch(`${BASE}${ROUTE}?<%= it.malformedProbe.name %>=<%= it.malformedProbe.value %>`, {
|
|
240
|
+
headers: AUTH,
|
|
241
|
+
});
|
|
242
|
+
expect(res.status).toBe(400);
|
|
243
|
+
});
|
|
244
|
+
<% } %><% if (it.filterProbe) { %>
|
|
245
|
+
it("le filtre FILTRE : la valeur exclue ne remonte pas", async () => {
|
|
246
|
+
// Refuser une valeur mal formée ne prouve PAS qu'une valeur VALIDE réduit
|
|
247
|
+
// l'ensemble — encore deux tests, pas un.
|
|
248
|
+
//
|
|
249
|
+
// Et il faut une ligne TÉMOIN, qui ne matche pas : tous les échantillons
|
|
250
|
+
// portent la même valeur pour ce champ, donc sans elle « toutes les lignes
|
|
251
|
+
// rendues portent la valeur demandée » resterait vrai avec le filtre
|
|
252
|
+
// débranché. C'est le témoin qui fait le test, pas l'assertion.
|
|
253
|
+
for (const [n, valeur] of [
|
|
254
|
+
[401, <%= it.filterProbe.matchJson %>],
|
|
255
|
+
[402, <%= it.filterProbe.otherJson %>],
|
|
256
|
+
] as const) {
|
|
257
|
+
await fetch(`${BASE}${ROUTE}`, {
|
|
258
|
+
method: "POST",
|
|
259
|
+
headers: entetes(),
|
|
260
|
+
body: JSON.stringify({ ...sample(n), <%= it.filterProbe.name %>: valeur }),
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
const lire = async (url: string): Promise<unknown[]> => {
|
|
264
|
+
const res = await fetch(url, { headers: AUTH });
|
|
265
|
+
expect(res.status).toBe(200);
|
|
266
|
+
const page = (await res.json()) as { items: Record<string, unknown>[] };
|
|
267
|
+
return page.items.map((r) => r["<%= it.filterProbe.name %>"]);
|
|
268
|
+
};
|
|
269
|
+
// Le témoin est bien LÀ, et remonte quand on ne filtre pas — sinon
|
|
270
|
+
// l'assertion suivante serait vraie pour une raison sans rapport.
|
|
271
|
+
const tout = await lire(`${BASE}${ROUTE}?limit=100`);
|
|
272
|
+
expect(tout).toContain(<%= it.filterProbe.otherJson %>);
|
|
273
|
+
// Filtré, il disparaît — et il ne reste QUE la valeur demandée.
|
|
274
|
+
const filtre = await lire(
|
|
275
|
+
`${BASE}${ROUTE}?<%= it.filterProbe.name %>=<%= it.filterProbe.match %>&limit=100`,
|
|
276
|
+
);
|
|
277
|
+
expect(filtre.length).toBeGreaterThan(0);
|
|
278
|
+
expect(filtre.every((v) => v === <%= it.filterProbe.matchJson %>)).toBe(true);
|
|
279
|
+
});
|
|
280
|
+
<% } %><% if (it.relations.length) { %>
|
|
281
|
+
it("une relation inconnue dans ?include= est REFUSÉE", async () => {
|
|
282
|
+
// Charger l'enregistrement SANS la relation demandée, sous un 200, laisse
|
|
283
|
+
// croire que la relation est vide alors que le nom était mal écrit.
|
|
284
|
+
// `?include=` se lit sur la fiche, pas sur la liste : la liste, qui ne le
|
|
285
|
+
// lit pas, le refuse comme paramètre inconnu — et c'est cohérent.
|
|
286
|
+
const created = await fetch(`${BASE}${ROUTE}`, {
|
|
287
|
+
method: "POST",
|
|
288
|
+
headers: entetes(),
|
|
289
|
+
body: JSON.stringify(sample(300)),
|
|
290
|
+
});
|
|
291
|
+
const id = String((await json(created)).id);
|
|
292
|
+
const res = await fetch(
|
|
293
|
+
`${BASE}${ROUTE}/${id}?include=relationQuiNexistePas`,
|
|
294
|
+
{ headers: AUTH },
|
|
295
|
+
);
|
|
296
|
+
expect(res.status).toBe(400);
|
|
297
|
+
});
|
|
298
|
+
<% } %>
|
|
299
|
+
it("DELETE → 204, et l'enregistrement n'est plus lisible", async () => {
|
|
300
|
+
const created = await fetch(`${BASE}${ROUTE}`, {
|
|
301
|
+
method: "POST",
|
|
302
|
+
headers: entetes(),
|
|
303
|
+
body: JSON.stringify(sample(200)),
|
|
304
|
+
});
|
|
305
|
+
const id = String((await json(created)).id);
|
|
306
|
+
// La suppression est réservée à `ROLE_ADMIN` : sans identité, elle est
|
|
307
|
+
// refusée — c'est le comportement voulu, et le test qui suit le prouve.
|
|
308
|
+
// L'identité est celle du cycle (`AUTH`), pas une session ouverte à part :
|
|
309
|
+
// deux sources d'identité dans un même fichier finissent par diverger.
|
|
310
|
+
const removed = await fetch(`${BASE}${ROUTE}/${id}`, {
|
|
311
|
+
method: "DELETE",
|
|
312
|
+
headers: AUTH,
|
|
313
|
+
});
|
|
314
|
+
// 204 : il n'y a plus rien à décrire, donc pas de corps.
|
|
315
|
+
expect(removed.status).toBe(204);
|
|
316
|
+
|
|
317
|
+
const gone = await fetch(`${BASE}${ROUTE}/${id}`, { headers: AUTH });
|
|
318
|
+
expect(gone.status).toBe(404);
|
|
319
|
+
|
|
320
|
+
// Supprimer deux fois n'est pas la même chose que supprimer une absente :
|
|
321
|
+
// le 404 permet au client de distinguer les deux.
|
|
322
|
+
const again = await fetch(`${BASE}${ROUTE}/${id}`, {
|
|
323
|
+
method: "DELETE",
|
|
324
|
+
headers: AUTH,
|
|
325
|
+
});
|
|
326
|
+
expect(again.status).toBe(404);
|
|
327
|
+
});
|
|
328
|
+
<% if (it.hasSecurity) { %>
|
|
329
|
+
it("DELETE sans identité → refusé, et l'enregistrement survit", async () => {
|
|
330
|
+
// Échantillon PROPRE à ce test : `300` sert déjà au test d'`?include=`.
|
|
331
|
+
// Sur une entité qui porte une relation ET un champ unique, la seconde
|
|
332
|
+
// insertion était refusée comme doublon, `id` valait « undefined », et
|
|
333
|
+
// c'est une absence que ce test lisait — il accusait la garde qu'il mesure
|
|
334
|
+
// au lieu de son décor.
|
|
335
|
+
const created = await fetch(`${BASE}${ROUTE}`, {
|
|
336
|
+
method: "POST",
|
|
337
|
+
headers: entetes(),
|
|
338
|
+
body: JSON.stringify(sample(301)),
|
|
339
|
+
});
|
|
340
|
+
const id = String((await json(created)).id);
|
|
341
|
+
|
|
342
|
+
// Personne n'est authentifié : le framework refuse AVANT d'entrer dans
|
|
343
|
+
// l'action. 401 ou 403 selon la zone qui couvre la route — ce qui compte
|
|
344
|
+
// est le refus, pas son code.
|
|
345
|
+
const refuse = await fetch(`${BASE}${ROUTE}/${id}`, { method: "DELETE" });
|
|
346
|
+
expect([401, 403]).toContain(refuse.status);
|
|
347
|
+
|
|
348
|
+
// Et surtout : la donnée est toujours là. Un refus qui supprime quand même
|
|
349
|
+
// serait pire qu'une absence de garde, parce qu'il rassure.
|
|
350
|
+
const survit = await fetch(`${BASE}${ROUTE}/${id}`, { headers: AUTH });
|
|
351
|
+
expect(survit.status).toBe(200);
|
|
352
|
+
|
|
353
|
+
await fetch(`${BASE}${ROUTE}/${id}`, {
|
|
354
|
+
method: "DELETE",
|
|
355
|
+
headers: AUTH,
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
<% } %>});
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { describe, it, expect<% if (it.dialect === "sqlite") { %>, beforeAll, afterAll<% } %> } from "vitest";
|
|
2
|
+
<% if (it.dialect === "sqlite") { %>import { DrizzleOrm } from "@nodefony/drizzle";
|
|
3
|
+
import { entityRegistry, ormRegistry } from "@nodefony/orm-core";
|
|
4
|
+
import { <%= it.pascal %>Entity } from "../nodefony/entity/<%= it.pascal %>";
|
|
5
|
+
<% } %>import type { <%= it.pascal %>Row } from "../nodefony/entity/<%= it.pascal %>";
|
|
6
|
+
import { create<%= it.pascal %>Schema } from "../nodefony/entity/<%= it.pascal %>.schema";
|
|
7
|
+
<% if (it.dialect === "sqlite") { it.relationTargets.forEach(function (target) { %>import { <%= target %>Entity } from "../nodefony/entity/<%= target %>";
|
|
8
|
+
<% }) } %>
|
|
9
|
+
<% if (it.dialect === "sqlite") { %>/**
|
|
10
|
+
* L'entité, sur une vraie base — en mémoire, donc sans rien installer.
|
|
11
|
+
*
|
|
12
|
+
* Ce que ces tests protègent : le schéma tient la route (la table se crée, les données
|
|
13
|
+
* font l'aller-retour) et le contrat d'entrée refuse ce qu'il doit refuser. Ils tournent
|
|
14
|
+
* sans serveur : c'est la couche données, seule.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const ORM = "test-<%= it.kebab %>";
|
|
18
|
+
<% } else { %>/**
|
|
19
|
+
* L'entité — son CONTRAT d'entrée, sans serveur.
|
|
20
|
+
*
|
|
21
|
+
* Ce que ces tests protègent : le schéma de validation refuse ce qu'il doit refuser.
|
|
22
|
+
* Ils tournent partout, sans rien installer.
|
|
23
|
+
*
|
|
24
|
+
* ⚠️ **La couche DONNÉES n'est pas éprouvée ici, et c'est délibéré.** Cette entité est
|
|
25
|
+
* écrite pour <%= it.dialect %> : son schéma n'existe que dans ce dialecte, et l'ORM
|
|
26
|
+
* refuse de le monter ailleurs — une base en mémoire ne peut donc pas la recevoir.
|
|
27
|
+
* C'est la suite e2e (`npm run test:e2e`) qui l'éprouve, sur VOTRE serveur, avec les
|
|
28
|
+
* types réels : c'est là que se voient un `char(3)` sorti en 255 ou une clé étrangère
|
|
29
|
+
* dont le type ne correspond pas à la clé visée.
|
|
30
|
+
*/
|
|
31
|
+
<% } %>
|
|
32
|
+
/**
|
|
33
|
+
* Échantillon **variable** — indispensable dès qu'un champ est unique : deux insertions
|
|
34
|
+
* du même objet violeraient la contrainte, et le test échouerait sur lui-même.
|
|
35
|
+
*/
|
|
36
|
+
const sample = (n: number): Partial<<%= it.pascal %>Row> => (<%= it.sampleFactory %>);
|
|
37
|
+
|
|
38
|
+
describe("<%= it.pascal %> — entité", () => {
|
|
39
|
+
<% if (it.dialect === "sqlite") { %> let orm: DrizzleOrm;
|
|
40
|
+
|
|
41
|
+
beforeAll(async () => {
|
|
42
|
+
entityRegistry.register({ ...<%= it.pascal %>Entity, connector: ORM });
|
|
43
|
+
<% if (it.relationTargets.length) { %> // Les cibles des relations sont enregistrées AVEC l'entité : l'ORM résout les
|
|
44
|
+
// relations déclarées au moment de se connecter, et lève si l'une d'elles
|
|
45
|
+
// pointe une entité qu'il ne connaît pas. C'est volontaire — une relation
|
|
46
|
+
// vers une entité absente est une panne au boot, pas un détail de test.
|
|
47
|
+
<% it.relationTargets.forEach(function (target) { %> entityRegistry.register({ ...<%= target %>Entity, connector: ORM });
|
|
48
|
+
<% }) %><% } %> orm = new DrizzleOrm(ORM, { filename: ":memory:" });
|
|
49
|
+
await orm.connect();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
afterAll(async () => {
|
|
53
|
+
await orm.disconnect();
|
|
54
|
+
entityRegistry.unregister("<%= it.pascal %>", ORM);
|
|
55
|
+
<% it.relationTargets.forEach(function (target) { %> entityRegistry.unregister("<%= target %>", ORM);
|
|
56
|
+
<% }) %> ormRegistry.unregister(ORM);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it("crée la table et fait l'aller-retour d'un enregistrement", async () => {
|
|
60
|
+
const repo = orm.getRepository<<%= it.pascal %>Row>("<%= it.pascal %>");
|
|
61
|
+
const created = await repo.create(sample(1));
|
|
62
|
+
|
|
63
|
+
expect(created.id).toBeTruthy();
|
|
64
|
+
const found = await repo.findOne({ id: created.id });
|
|
65
|
+
expect(found).not.toBeNull();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("compte ce qu'on y met", async () => {
|
|
69
|
+
const repo = orm.getRepository<<%= it.pascal %>Row>("<%= it.pascal %>");
|
|
70
|
+
const before = await repo.count();
|
|
71
|
+
await repo.create(sample(2));
|
|
72
|
+
expect(await repo.count()).toBe(before + 1);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
<% } %> it("le contrat d'entrée refuse un corps vide", () => {
|
|
76
|
+
// Le service appelle ce même schéma : un rejet devient un 422 côté HTTP et WS.
|
|
77
|
+
expect(() => create<%= it.pascal %>Schema.parse({})).toThrow();
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it("le contrat d'entrée retire les champs inconnus (anti-promotion)", () => {
|
|
81
|
+
const parsed = create<%= it.pascal %>Schema.parse({
|
|
82
|
+
...sample(3),
|
|
83
|
+
role: "admin",
|
|
84
|
+
});
|
|
85
|
+
expect(parsed).not.toHaveProperty("role");
|
|
86
|
+
});
|
|
87
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Component, VERSION, signal } from "@angular/core";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Page « <%= it.kebab %> » — squelette VOLONTAIREMENT minimal : c'est TA page,
|
|
5
|
+
* pas une vitrine. Le compteur prouve la recompilation Vite (AnalogJS). Les
|
|
6
|
+
* appels backend passent par `fetch("/api/…")` (proxifiés vers Nodefony en
|
|
7
|
+
* dev, cf `apiProxyPaths` du registerEntry).
|
|
8
|
+
*/
|
|
9
|
+
@Component({
|
|
10
|
+
selector: "app-root",
|
|
11
|
+
standalone: true,
|
|
12
|
+
template: `
|
|
13
|
+
<main style="font-family: system-ui, sans-serif; padding: 32px">
|
|
14
|
+
<h1><%= it.kebab %></h1>
|
|
15
|
+
<p>
|
|
16
|
+
Angular v{{ ngVersion }} servi par Nodefony via Vite + AnalogJS —
|
|
17
|
+
entry « <%= it.kebab %> ».
|
|
18
|
+
</p>
|
|
19
|
+
<button (click)="count.set(count() + 1)">count is {{ count() }}</button>
|
|
20
|
+
<p style="color: #666; font-size: 14px">
|
|
21
|
+
Édite <code>frontend/src/app/app.component.ts</code> — Vite recompile
|
|
22
|
+
à la volée.
|
|
23
|
+
</p>
|
|
24
|
+
</main>
|
|
25
|
+
`,
|
|
26
|
+
})
|
|
27
|
+
export class AppComponent {
|
|
28
|
+
readonly ngVersion = VERSION.full;
|
|
29
|
+
count = signal(0);
|
|
30
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Controller, route, controller } from "@nodefony/framework";
|
|
2
|
+
import type { ContextType } from "@nodefony/http";
|
|
3
|
+
import type { FrontendService } from "@nodefony/frontend";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* <%= it.nameClass %> — sert la page <%= it.frontend %> « <%= it.kebab %> ».
|
|
7
|
+
*
|
|
8
|
+
* ── Comment la page arrive au navigateur ──────────────────────────────────
|
|
9
|
+
* 1. Le HTML ne vit PAS ici : c'est la coquille `frontend/index.html`
|
|
10
|
+
* (TA page — meta, polices, favicon, scripts externes). Ce controller la
|
|
11
|
+
* fait rendre par le framework.
|
|
12
|
+
* 2. `renderDocument("<%= it.kebab %>", nonce, hôte)` remplit le marqueur
|
|
13
|
+
* `<!--nodefony:frontend-->` de la coquille avec les balises de l'ENTRY
|
|
14
|
+
* « <%= it.kebab %> » (déclarée dans l'`index.ts` du module, cf
|
|
15
|
+
* `registerEntry`) :
|
|
16
|
+
* - en DÉVELOPPEMENT : les <script> pointent le serveur Vite → HMR,
|
|
17
|
+
* recompilation à la volée, état préservé ;
|
|
18
|
+
* - en PRODUCTION : le bundle pré-compilé fingerprinté (`npm run build`),
|
|
19
|
+
* servi en statique — Vite n'existe plus au runtime.
|
|
20
|
+
* 3. Le NONCE CSP de la requête (émis par le firewall) est propagé aux
|
|
21
|
+
* <script> injectés : la Content-Security-Policy stricte reste intacte —
|
|
22
|
+
* ne JAMAIS recopier des balises <script> à la main dans la coquille.
|
|
23
|
+
*
|
|
24
|
+
* ── Les appels API de la page ─────────────────────────────────────────────
|
|
25
|
+
* En dev, la page est servie par Vite (autre origine) : les chemins déclarés
|
|
26
|
+
* dans `apiProxyPaths` (cf `registerEntry`) sont re-proxifiés vers Nodefony —
|
|
27
|
+
* sans eux, `fetch("/api/...")` recevrait le SPA-fallback HTML de Vite au
|
|
28
|
+
* lieu du JSON. En prod, même origine : le proxy disparaît tout seul.
|
|
29
|
+
*/
|
|
30
|
+
@controller("")
|
|
31
|
+
class <%= it.nameClass %> extends Controller {
|
|
32
|
+
constructor(context: ContextType) {
|
|
33
|
+
super("<%= it.kebab %>-front", context);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@route("route-<%= it.kebab %>-page", { path: "<%= it.route %>", method: "GET" })
|
|
37
|
+
renderPage(): unknown {
|
|
38
|
+
this.setContextHtml();
|
|
39
|
+
const svc = this.context?.container?.get("frontend") as
|
|
40
|
+
FrontendService | undefined;
|
|
41
|
+
if (!svc) {
|
|
42
|
+
// @nodefony/frontend absent du manifeste (nodefony.config.ts) : la page
|
|
43
|
+
// ne peut pas être construite — on le DIT au lieu d'un écran vide.
|
|
44
|
+
return this.render("<!-- @nodefony/frontend not ready -->");
|
|
45
|
+
}
|
|
46
|
+
return this.render(
|
|
47
|
+
// 3ᵉ argument = l'hôte par lequel le client est arrivé (`Context.domain`) :
|
|
48
|
+
// en développement, l'origine des assets Vite le suit, si bien qu'un poste
|
|
49
|
+
// et un conteneur (ou une machine distante) chargent la MÊME page sans
|
|
50
|
+
// configuration. Sans lui, la page annonce toujours l'hôte du démarrage.
|
|
51
|
+
svc.renderDocument(
|
|
52
|
+
"<%= it.kebab %>",
|
|
53
|
+
this.context?.cspNonce,
|
|
54
|
+
this.context?.domain,
|
|
55
|
+
),
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export default <%= it.nameClass %>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { useState, version as reactVersion } from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Page « <%= it.kebab %> » — squelette VOLONTAIREMENT minimal : c'est TA page,
|
|
5
|
+
* pas une vitrine. Le compteur prouve le HMR (édite ce fichier : Vite
|
|
6
|
+
* recompile à la volée, la page se met à jour SANS recharger et l'état est
|
|
7
|
+
* conservé). Les appels backend passent par `fetch("/api/…")` (proxifiés vers
|
|
8
|
+
* Nodefony en dev, cf `apiProxyPaths` du registerEntry).
|
|
9
|
+
*/
|
|
10
|
+
export function App() {
|
|
11
|
+
const [count, setCount] = useState(0);
|
|
12
|
+
return (
|
|
13
|
+
<main style={{ fontFamily: "system-ui, sans-serif", padding: 32 }}>
|
|
14
|
+
<h1><%= it.kebab %></h1>
|
|
15
|
+
<p>
|
|
16
|
+
React v{reactVersion} servi par Nodefony via Vite — entry «{" "}
|
|
17
|
+
<%= it.kebab %> ».
|
|
18
|
+
</p>
|
|
19
|
+
<button onClick={() => setCount((c) => c + 1)}>count is {count}</button>
|
|
20
|
+
<p style={{ color: "#666", fontSize: 14 }}>
|
|
21
|
+
Édite <code>frontend/src/App.tsx</code> — HMR sans recharger, compteur
|
|
22
|
+
conservé.
|
|
23
|
+
</p>
|
|
24
|
+
</main>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Page « <%= it.kebab %> » — squelette VOLONTAIREMENT minimal : c'est TA page,
|
|
4
|
+
* pas une vitrine. Le compteur prouve le HMR (édite le markup : Vite
|
|
5
|
+
* recompile à la volée sans recharger). Les appels backend passent par
|
|
6
|
+
* `fetch("/api/…")` (proxifiés vers Nodefony en dev, cf `apiProxyPaths`).
|
|
7
|
+
*/
|
|
8
|
+
let count = $state(0);
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<main style="font-family: system-ui, sans-serif; padding: 32px">
|
|
12
|
+
<h1><%= it.kebab %></h1>
|
|
13
|
+
<p>Svelte 5 servi par Nodefony via Vite — entry « <%= it.kebab %> ».</p>
|
|
14
|
+
<button onclick={() => count++}>count is {count}</button>
|
|
15
|
+
<p style="color: #666; font-size: 14px">
|
|
16
|
+
Édite <code>frontend/src/App.svelte</code> — HMR sans recharger, compteur
|
|
17
|
+
conservé.
|
|
18
|
+
</p>
|
|
19
|
+
</main>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ref, version as vueVersion } from "vue";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Page « <%= it.kebab %> » — squelette VOLONTAIREMENT minimal : c'est TA page,
|
|
6
|
+
* pas une vitrine. Le compteur prouve le HMR (édite le template : Vite
|
|
7
|
+
* recompile à la volée sans recharger). Les appels backend passent par
|
|
8
|
+
* `fetch("/api/…")` (proxifiés vers Nodefony en dev, cf `apiProxyPaths`).
|
|
9
|
+
*/
|
|
10
|
+
const count = ref(0);
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<main style="font-family: system-ui, sans-serif; padding: 32px">
|
|
15
|
+
<h1><%= it.kebab %></h1>
|
|
16
|
+
<p>Vue v{{ vueVersion }} servi par Nodefony via Vite — entry « <%= it.kebab %> ».</p>
|
|
17
|
+
<button @click="count++">count is {{ count }}</button>
|
|
18
|
+
<p style="color: #666; font-size: 14px">
|
|
19
|
+
Édite <code>frontend/src/App.vue</code> — HMR sans recharger, compteur
|
|
20
|
+
conservé.
|
|
21
|
+
</p>
|
|
22
|
+
</main>
|
|
23
|
+
</template>
|