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,589 @@
|
|
|
1
|
+
//#region src/cli/scaffold/entityFields.ts
|
|
2
|
+
/**
|
|
3
|
+
* Champs d'entité : de la syntaxe `title:string` au code Drizzle du dialecte visé.
|
|
4
|
+
*
|
|
5
|
+
* Module **pur** (aucune I/O, aucun template) : c'est lui qui porte la traduction
|
|
6
|
+
* « vocabulaire Nodefony → colonne Drizzle native », donc c'est lui qu'on teste.
|
|
7
|
+
*
|
|
8
|
+
* Vocabulaire volontairement restreint — le scaffold doit produire du code qu'un
|
|
9
|
+
* humain relit et étend, pas couvrir toute la surface SQL. Un besoin exotique
|
|
10
|
+
* (`numeric(12,4)`, `citext`, tableau PG…) s'écrit à la main dans la table générée :
|
|
11
|
+
* c'est du Drizzle natif, il n'y a rien à contourner.
|
|
12
|
+
*/
|
|
13
|
+
/** Dialectes SQL supportés par le scaffold (ceux de `@nodefony/drizzle`). */
|
|
14
|
+
const ENTITY_DIALECTS = [
|
|
15
|
+
"sqlite",
|
|
16
|
+
"postgres",
|
|
17
|
+
"mysql"
|
|
18
|
+
];
|
|
19
|
+
/** Stratégies de clé primaire. */
|
|
20
|
+
const ENTITY_ID_KINDS = [
|
|
21
|
+
"uuid7",
|
|
22
|
+
"uuid4",
|
|
23
|
+
"serial"
|
|
24
|
+
];
|
|
25
|
+
/** Types de champ du vocabulaire Nodefony (jamais le vocabulaire Drizzle). */
|
|
26
|
+
const ENTITY_FIELD_TYPES = [
|
|
27
|
+
"string",
|
|
28
|
+
"text",
|
|
29
|
+
"int",
|
|
30
|
+
"float",
|
|
31
|
+
"bool",
|
|
32
|
+
"json",
|
|
33
|
+
"date",
|
|
34
|
+
"uuid",
|
|
35
|
+
"enum",
|
|
36
|
+
"char",
|
|
37
|
+
"decimal"
|
|
38
|
+
];
|
|
39
|
+
/**
|
|
40
|
+
* Casses de nom de colonne SQL proposées — la propriété TypeScript ne bouge jamais.
|
|
41
|
+
*
|
|
42
|
+
* `camel` reproduit la propriété telle quelle (défaut historique) ; `snake` émet
|
|
43
|
+
* `site_id` là où la propriété reste `siteId`. Drizzle porte nativement cette
|
|
44
|
+
* dissociation — le premier argument d'un constructeur de colonne EST le nom SQL.
|
|
45
|
+
*
|
|
46
|
+
* Une seule option couvre l'écrasante majorité des schémas existants : sur les 134
|
|
47
|
+
* renommages qu'exige le schéma d'Umami, **115 sont ce passage mécanique** au
|
|
48
|
+
* `snake_case`. Les nommer un par un aurait demandé un dictionnaire ; ils tiennent
|
|
49
|
+
* dans un choix.
|
|
50
|
+
*/
|
|
51
|
+
const COLUMN_CASES = ["camel", "snake"];
|
|
52
|
+
/** `BlogPost` / `blog-post` / `siteId` → `blog_post` / `site_id`. */
|
|
53
|
+
function toSnakeCase(name) {
|
|
54
|
+
return name.replace(/([a-z0-9])([A-Z])/gu, "$1_$2").replaceAll("-", "_").toLowerCase();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Nom SQL d'une colonne, dérivé de sa propriété TypeScript.
|
|
58
|
+
*
|
|
59
|
+
* @param property - nom de la propriété (`siteId`).
|
|
60
|
+
* @param columnCase - casse demandée ; `camel` rend la propriété inchangée.
|
|
61
|
+
*/
|
|
62
|
+
function sqlColumn(property, columnCase) {
|
|
63
|
+
return columnCase === "snake" ? toSnakeCase(property) : property;
|
|
64
|
+
}
|
|
65
|
+
/** Erreur de syntaxe dans la déclaration d'un champ — message actionnable. */
|
|
66
|
+
var EntityFieldError = class extends Error {};
|
|
67
|
+
const NAME_RE = /^[a-z][a-zA-Z0-9]*$/u;
|
|
68
|
+
const ENTITY_RE = /^[A-Z][A-Za-z0-9]*$/u;
|
|
69
|
+
/** Types qui n'acceptent pas de valeur par défaut littérale. */
|
|
70
|
+
const NO_DEFAULT = /* @__PURE__ */ new Set([
|
|
71
|
+
"json",
|
|
72
|
+
"date",
|
|
73
|
+
"ref"
|
|
74
|
+
]);
|
|
75
|
+
/**
|
|
76
|
+
* Analyse la déclaration textuelle des champs.
|
|
77
|
+
*
|
|
78
|
+
* Grammaire : `nom:type[?][!][=defaut][:index]` · `nom:ref:Entité[?][!][:index]`
|
|
79
|
+
* - `?` → nullable (sinon **NOT NULL** : une colonne nullable est une décision, pas un oubli) ;
|
|
80
|
+
* - `!` → unique ;
|
|
81
|
+
* - `=valeur` → valeur par défaut (`price:float=0`, `status:enum(draft,published)=draft`) ;
|
|
82
|
+
* - `:index` → index simple.
|
|
83
|
+
*
|
|
84
|
+
* Le type `enum` porte ses valeurs entre parenthèses : `status:enum(draft,published)`.
|
|
85
|
+
*
|
|
86
|
+
* @param input - `"title:string! content:text? views:int=0 author:ref:User"`.
|
|
87
|
+
* @returns les champs, dans l'ordre de déclaration.
|
|
88
|
+
* @throws EntityFieldError si un champ est mal formé (le mot « invalide » est attendu
|
|
89
|
+
* par le routeur d'erreurs du CLI pour sortir en `EX_USAGE`).
|
|
90
|
+
*/
|
|
91
|
+
function parseEntityFields(input) {
|
|
92
|
+
const fields = [];
|
|
93
|
+
const seen = /* @__PURE__ */ new Set();
|
|
94
|
+
for (const raw of input.split(/\s+/u).filter(Boolean)) {
|
|
95
|
+
let spec = raw;
|
|
96
|
+
let indexed = false;
|
|
97
|
+
if (spec.endsWith(":index")) {
|
|
98
|
+
indexed = true;
|
|
99
|
+
spec = spec.slice(0, -6);
|
|
100
|
+
}
|
|
101
|
+
let defaultValue;
|
|
102
|
+
const equalsAt = spec.indexOf("=", spec.lastIndexOf(")") + 1);
|
|
103
|
+
if (equalsAt >= 0) {
|
|
104
|
+
defaultValue = spec.slice(equalsAt + 1);
|
|
105
|
+
spec = spec.slice(0, equalsAt);
|
|
106
|
+
if (defaultValue === "") throw new EntityFieldError(`champ invalide « ${raw} » — valeur par défaut vide après « = » (ex : views:int=0)`);
|
|
107
|
+
}
|
|
108
|
+
let nullable = false;
|
|
109
|
+
let unique = false;
|
|
110
|
+
for (;;) {
|
|
111
|
+
if (spec.endsWith("?")) {
|
|
112
|
+
nullable = true;
|
|
113
|
+
spec = spec.slice(0, -1);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (spec.endsWith("!")) {
|
|
117
|
+
unique = true;
|
|
118
|
+
spec = spec.slice(0, -1);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
const parts = spec.split(":");
|
|
124
|
+
const name = parts[0];
|
|
125
|
+
if (!name || !NAME_RE.test(name)) throw new EntityFieldError(`champ invalide « ${raw} » — nom attendu en camelCase (ex : title, publishedAt)`);
|
|
126
|
+
if (seen.has(name)) throw new EntityFieldError(`champ invalide « ${raw} » — « ${name} » déclaré deux fois`);
|
|
127
|
+
if (name === "id") throw new EntityFieldError(`champ invalide « ${raw} » — « id » est la clé primaire, posée par --id (uuid7 | uuid4 | serial)`);
|
|
128
|
+
seen.add(name);
|
|
129
|
+
if (parts[1] === "ref") {
|
|
130
|
+
const target = parts[2];
|
|
131
|
+
if (!target || !ENTITY_RE.test(target)) throw new EntityFieldError(`champ invalide « ${raw} » — cible attendue : nom d'entité en PascalCase (ex : author:ref:User)`);
|
|
132
|
+
if (defaultValue !== void 0) throw new EntityFieldError(`champ invalide « ${raw} » — une relation n'a pas de valeur par défaut`);
|
|
133
|
+
fields.push({
|
|
134
|
+
name,
|
|
135
|
+
type: "ref",
|
|
136
|
+
target,
|
|
137
|
+
nullable,
|
|
138
|
+
unique,
|
|
139
|
+
indexed: indexed || !unique
|
|
140
|
+
});
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const enumMatch = /^enum\((.*)\)$/u.exec(parts[1] ?? "");
|
|
144
|
+
if (enumMatch) {
|
|
145
|
+
const values = (enumMatch[1] ?? "").split(",").map((value) => value.trim()).filter(Boolean);
|
|
146
|
+
if (values.length === 0) throw new EntityFieldError(`champ invalide « ${raw} » — enum sans valeur (ex : status:enum(draft,published))`);
|
|
147
|
+
if (defaultValue !== void 0 && !values.includes(defaultValue)) throw new EntityFieldError(`champ invalide « ${raw} » — défaut « ${defaultValue} » absent des valeurs (${values.join(", ")})`);
|
|
148
|
+
fields.push({
|
|
149
|
+
name,
|
|
150
|
+
type: "enum",
|
|
151
|
+
values,
|
|
152
|
+
nullable,
|
|
153
|
+
unique,
|
|
154
|
+
indexed,
|
|
155
|
+
...defaultValue !== void 0 ? { defaultValue } : {}
|
|
156
|
+
});
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const spec2 = parts[1] ?? "string";
|
|
160
|
+
let length;
|
|
161
|
+
let precision;
|
|
162
|
+
let scale;
|
|
163
|
+
const sized = /^(string|char)\((\d+)\)$/u.exec(spec2);
|
|
164
|
+
const decimalMatch = /^decimal\((\d+),\s*(\d+)\)$/u.exec(spec2);
|
|
165
|
+
if (sized) {
|
|
166
|
+
length = Number(sized[2]);
|
|
167
|
+
if (length < 1) throw new EntityFieldError(`champ invalide « ${raw} » — longueur nulle (ex : title:string(200), country:char(2))`);
|
|
168
|
+
parts[1] = sized[1];
|
|
169
|
+
} else if (decimalMatch) {
|
|
170
|
+
precision = Number(decimalMatch[1]);
|
|
171
|
+
scale = Number(decimalMatch[2]);
|
|
172
|
+
if (precision < 1 || scale > precision) throw new EntityFieldError(`champ invalide « ${raw} » — décimal incohérent : l'échelle (${scale}) ne peut dépasser la précision (${precision}), ex : price:decimal(12,2)`);
|
|
173
|
+
parts[1] = "decimal";
|
|
174
|
+
} else if (spec2 === "char" || spec2 === "decimal") throw new EntityFieldError(spec2 === "char" ? `champ invalide « ${raw} » — char doit déclarer sa longueur (ex : country:char(2))` : `champ invalide « ${raw} » — décimal doit déclarer sa précision et son échelle (ex : price:decimal(12,2))`);
|
|
175
|
+
const type = parts[1] ?? "string";
|
|
176
|
+
if (!ENTITY_FIELD_TYPES.includes(type)) throw new EntityFieldError(`champ invalide « ${raw} » — type « ${type} » inconnu ; attendus : ${ENTITY_FIELD_TYPES.join(" | ")} | ref:<Entité>`);
|
|
177
|
+
if (type === "enum") throw new EntityFieldError(`champ invalide « ${raw} » — enum doit lister ses valeurs (ex : status:enum(draft,published))`);
|
|
178
|
+
if (parts.length > 2) throw new EntityFieldError(`champ invalide « ${raw} » — trop de segments (attendu nom:type[?][!][=defaut][:index])`);
|
|
179
|
+
if (defaultValue !== void 0) {
|
|
180
|
+
if (NO_DEFAULT.has(type)) throw new EntityFieldError(`champ invalide « ${raw} » — le type « ${type} » n'accepte pas de valeur par défaut`);
|
|
181
|
+
if ((type === "int" || type === "float") && !Number.isFinite(Number(defaultValue))) throw new EntityFieldError(`champ invalide « ${raw} » — défaut « ${defaultValue} » n'est pas un nombre`);
|
|
182
|
+
if (type === "bool" && defaultValue !== "true" && defaultValue !== "false") throw new EntityFieldError(`champ invalide « ${raw} » — défaut d'un booléen : true ou false`);
|
|
183
|
+
}
|
|
184
|
+
fields.push({
|
|
185
|
+
name,
|
|
186
|
+
type,
|
|
187
|
+
nullable,
|
|
188
|
+
unique,
|
|
189
|
+
indexed,
|
|
190
|
+
...length !== void 0 ? { length } : {},
|
|
191
|
+
...precision !== void 0 ? {
|
|
192
|
+
precision,
|
|
193
|
+
scale
|
|
194
|
+
} : {},
|
|
195
|
+
...defaultValue !== void 0 ? { defaultValue } : {}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
return fields;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Colonnes qu'une entité possède SANS qu'un champ les déclare.
|
|
202
|
+
*
|
|
203
|
+
* Elles sont indexables comme les autres — un index composite sur la date de
|
|
204
|
+
* création est même le cas le plus courant sur une table d'événements — mais elles
|
|
205
|
+
* n'apparaissent pas dans la liste des champs analysés, d'où cette table.
|
|
206
|
+
*/
|
|
207
|
+
function implicitColumns(options) {
|
|
208
|
+
const names = ["id"];
|
|
209
|
+
if (options.timestamps) names.push("createdAt", "updatedAt");
|
|
210
|
+
if (options.softDelete) names.push("deletedAt");
|
|
211
|
+
return names;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Analyse les index de table déclarés par `--index` / `--unique`.
|
|
215
|
+
*
|
|
216
|
+
* Chaque valeur est une liste de colonnes séparées par des virgules
|
|
217
|
+
* (`"websiteId,createdAt"`). Toute colonne citée doit exister : sans ce contrôle, on
|
|
218
|
+
* écrirait une entité qui ne compile pas, et l'erreur tomberait chez l'utilisateur
|
|
219
|
+
* sous la forme d'une propriété inconnue — loin de la commande qui l'a causée.
|
|
220
|
+
*
|
|
221
|
+
* @param specs - valeurs brutes des options, dans l'ordre de la ligne de commande.
|
|
222
|
+
* @param fields - champs déjà analysés, qui fournissent les noms légitimes.
|
|
223
|
+
* @param options - présence des colonnes implicites (horodatages, suppression douce).
|
|
224
|
+
* @param unique - `true` quand ces valeurs viennent de `--unique`.
|
|
225
|
+
* @returns les index analysés, doublons retirés.
|
|
226
|
+
* @throws {EntityFieldError} colonne inconnue, liste vide, ou colonne répétée.
|
|
227
|
+
*/
|
|
228
|
+
function parseEntityIndexes(specs, fields, options, unique = false) {
|
|
229
|
+
const known = /* @__PURE__ */ new Set([...implicitColumns(options), ...fields.map((f) => f.name)]);
|
|
230
|
+
const out = [];
|
|
231
|
+
const seen = /* @__PURE__ */ new Set();
|
|
232
|
+
for (const raw of specs) {
|
|
233
|
+
const columns = raw.split(",").map((c) => c.trim()).filter((c) => c.length > 0);
|
|
234
|
+
if (columns.length === 0) throw new EntityFieldError(`index « ${raw} » : aucune colonne — attendu une liste séparée par des virgules, ex. --index "websiteId,createdAt"`);
|
|
235
|
+
for (const column of columns) if (!known.has(column)) throw new EntityFieldError(`index « ${raw} » : la colonne « ${column} » n'existe pas sur cette entité — colonnes disponibles : ${[...known].join(", ")}`);
|
|
236
|
+
const duplicate = columns.find((c, i) => columns.indexOf(c) !== i);
|
|
237
|
+
if (duplicate !== void 0) throw new EntityFieldError(`index « ${raw} » : la colonne « ${duplicate} » est citée deux fois`);
|
|
238
|
+
const key = `${unique ? "u" : "i"}:${columns.join(",")}`;
|
|
239
|
+
if (seen.has(key)) continue;
|
|
240
|
+
seen.add(key);
|
|
241
|
+
out.push({
|
|
242
|
+
columns,
|
|
243
|
+
unique
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
return out;
|
|
247
|
+
}
|
|
248
|
+
/** Liste de valeurs d'énumération, écrite comme option Drizzle (`{ enum: [...] }`). */
|
|
249
|
+
const enumOption = (values = []) => `enum: [${values.map((value) => JSON.stringify(value)).join(", ")}] as const`;
|
|
250
|
+
/** Longueur d'une chaîne, avec le repli historique quand rien n'est déclaré. */
|
|
251
|
+
const len = (size) => size?.length ?? 255;
|
|
252
|
+
/**
|
|
253
|
+
* Option de précision d'un décimal, écrite comme Drizzle l'attend.
|
|
254
|
+
*
|
|
255
|
+
* Sans précision déclarée, on n'écrit RIEN plutôt qu'un défaut inventé : les
|
|
256
|
+
* moteurs n'ont pas la même idée d'un `numeric` nu, et choisir à leur place
|
|
257
|
+
* masquerait ce désaccord au lieu de le laisser paraître.
|
|
258
|
+
*/
|
|
259
|
+
const decimalOption = (size) => size?.precision === void 0 ? "" : `, { precision: ${size.precision}, scale: ${size.scale ?? 0} }`;
|
|
260
|
+
/**
|
|
261
|
+
* Constructeur de colonne Drizzle par (dialecte, type) — le cœur de la traduction.
|
|
262
|
+
*
|
|
263
|
+
* Le second argument ne sert qu'aux énumérations, le troisième aux tailles
|
|
264
|
+
* (longueur d'une chaîne, précision d'un décimal).
|
|
265
|
+
*
|
|
266
|
+
* Les trois moteurs n'offrent pas le même vocabulaire, et la table le dit au lieu
|
|
267
|
+
* de le contourner : SQLite ignore `varchar` et `char` — toute chaîne y est un
|
|
268
|
+
* `text`, la longueur n'y est de toute façon pas appliquée —, et MySQL n'expose
|
|
269
|
+
* pas `numeric`, dont `decimal` est l'exact équivalent.
|
|
270
|
+
*/
|
|
271
|
+
const COLUMN = {
|
|
272
|
+
sqlite: {
|
|
273
|
+
string: (c) => `text("${c}")`,
|
|
274
|
+
char: (c) => `text("${c}")`,
|
|
275
|
+
decimal: (c) => `numeric("${c}")`,
|
|
276
|
+
text: (c) => `text("${c}")`,
|
|
277
|
+
int: (c) => `integer("${c}")`,
|
|
278
|
+
float: (c) => `real("${c}")`,
|
|
279
|
+
bool: (c) => `integer("${c}", { mode: "boolean" })`,
|
|
280
|
+
json: (c) => `text("${c}", { mode: "json" })`,
|
|
281
|
+
date: (c) => `integer("${c}", { mode: "timestamp_ms" })`,
|
|
282
|
+
uuid: (c) => `text("${c}")`,
|
|
283
|
+
ref: (c) => `text("${c}")`,
|
|
284
|
+
enum: (c, v) => `text("${c}", { ${enumOption(v)} })`
|
|
285
|
+
},
|
|
286
|
+
postgres: {
|
|
287
|
+
string: (c, _v, s) => `varchar("${c}", { length: ${len(s)} })`,
|
|
288
|
+
char: (c, _v, s) => `char("${c}", { length: ${len(s)} })`,
|
|
289
|
+
decimal: (c, _v, s) => `numeric("${c}"${decimalOption(s)})`,
|
|
290
|
+
text: (c) => `text("${c}")`,
|
|
291
|
+
int: (c) => `integer("${c}")`,
|
|
292
|
+
float: (c) => `doublePrecision("${c}")`,
|
|
293
|
+
bool: (c) => `boolean("${c}")`,
|
|
294
|
+
json: (c) => `jsonb("${c}")`,
|
|
295
|
+
date: (c) => `timestamp("${c}", { withTimezone: true, precision: 3 })`,
|
|
296
|
+
uuid: (c) => `uuid("${c}")`,
|
|
297
|
+
ref: (c) => `text("${c}")`,
|
|
298
|
+
enum: (c, v) => `varchar("${c}", { length: 255, ${enumOption(v)} })`
|
|
299
|
+
},
|
|
300
|
+
mysql: {
|
|
301
|
+
string: (c, _v, s) => `varchar("${c}", { length: ${len(s)} })`,
|
|
302
|
+
char: (c, _v, s) => `char("${c}", { length: ${len(s)} })`,
|
|
303
|
+
decimal: (c, _v, s) => `decimal("${c}"${decimalOption(s)})`,
|
|
304
|
+
text: (c) => `text("${c}")`,
|
|
305
|
+
int: (c) => `int("${c}")`,
|
|
306
|
+
float: (c) => `double("${c}")`,
|
|
307
|
+
bool: (c) => `boolean("${c}")`,
|
|
308
|
+
json: (c) => `json("${c}")`,
|
|
309
|
+
date: (c) => `datetime("${c}", { fsp: 3 })`,
|
|
310
|
+
uuid: (c) => `varchar("${c}", { length: 36 })`,
|
|
311
|
+
ref: (c) => `varchar("${c}", { length: 255 })`,
|
|
312
|
+
enum: (c, v) => `varchar("${c}", { length: 255, ${enumOption(v)} })`
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
/**
|
|
316
|
+
* Ce que chaque type de champ devient, dans chaque moteur.
|
|
317
|
+
*
|
|
318
|
+
* Montrer la traduction plutôt que la promettre : `json` devient `jsonb` en
|
|
319
|
+
* PostgreSQL et une colonne texte en SQLite, `string` un `varchar(255)` ici et un
|
|
320
|
+
* `text` là. C'est une information dont dépend le choix de celui qui modélise, et
|
|
321
|
+
* elle n'est déductible d'aucune documentation générique.
|
|
322
|
+
*
|
|
323
|
+
* Dérivé de la table de traduction elle-même : impossible que ce catalogue
|
|
324
|
+
* dérive de ce que le générateur produit réellement.
|
|
325
|
+
*
|
|
326
|
+
* @returns un descripteur par type, avec sa colonne Drizzle par dialecte.
|
|
327
|
+
*/
|
|
328
|
+
function describeColumnTypes() {
|
|
329
|
+
return [...ENTITY_FIELD_TYPES, "ref"].map((type) => ({
|
|
330
|
+
type,
|
|
331
|
+
byDialect: Object.fromEntries(ENTITY_DIALECTS.map((dialect) => [dialect, COLUMN[dialect][type]("exemple", ["a", "b"], {
|
|
332
|
+
...type === "char" ? { length: 2 } : {},
|
|
333
|
+
...type === "decimal" ? {
|
|
334
|
+
precision: 12,
|
|
335
|
+
scale: 2
|
|
336
|
+
} : {}
|
|
337
|
+
})]))
|
|
338
|
+
}));
|
|
339
|
+
}
|
|
340
|
+
/** Fonction de table Drizzle du dialecte (`sqliteTable`…) et son import. */
|
|
341
|
+
const TABLE_FN = {
|
|
342
|
+
sqlite: {
|
|
343
|
+
fn: "sqliteTable",
|
|
344
|
+
module: "drizzle-orm/sqlite-core"
|
|
345
|
+
},
|
|
346
|
+
postgres: {
|
|
347
|
+
fn: "pgTable",
|
|
348
|
+
module: "drizzle-orm/pg-core"
|
|
349
|
+
},
|
|
350
|
+
mysql: {
|
|
351
|
+
fn: "mysqlTable",
|
|
352
|
+
module: "drizzle-orm/mysql-core"
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
/** Type TypeScript de la propriété correspondante (interface `XRow`). */
|
|
356
|
+
const TS_TYPE = {
|
|
357
|
+
string: "string",
|
|
358
|
+
text: "string",
|
|
359
|
+
int: "number",
|
|
360
|
+
float: "number",
|
|
361
|
+
bool: "boolean",
|
|
362
|
+
json: "unknown",
|
|
363
|
+
date: "Date",
|
|
364
|
+
uuid: "string",
|
|
365
|
+
ref: "string",
|
|
366
|
+
enum: "string",
|
|
367
|
+
char: "string",
|
|
368
|
+
decimal: "string"
|
|
369
|
+
};
|
|
370
|
+
/** Schéma Zod correspondant (validation à la frontière). */
|
|
371
|
+
const ZOD_TYPE = {
|
|
372
|
+
string: "z.string().min(1).max(255)",
|
|
373
|
+
text: "z.string()",
|
|
374
|
+
int: "z.number().int()",
|
|
375
|
+
float: "z.number()",
|
|
376
|
+
bool: "z.boolean()",
|
|
377
|
+
json: "z.unknown()",
|
|
378
|
+
date: "z.coerce.date()",
|
|
379
|
+
uuid: "z.string().uuid()",
|
|
380
|
+
ref: "z.string()",
|
|
381
|
+
enum: "z.string()",
|
|
382
|
+
char: "z.string()",
|
|
383
|
+
decimal: "z.string()"
|
|
384
|
+
};
|
|
385
|
+
/**
|
|
386
|
+
* Littéral TypeScript d'une valeur par défaut, selon le type du champ.
|
|
387
|
+
*
|
|
388
|
+
* Les nombres et booléens sont écrits nus, tout le reste est une chaîne : c'est
|
|
389
|
+
* la seule interprétation possible d'un texte saisi en ligne de commande.
|
|
390
|
+
*/
|
|
391
|
+
function defaultLiteral(field) {
|
|
392
|
+
if (field.type === "int" || field.type === "float") return String(Number(field.defaultValue));
|
|
393
|
+
if (field.type === "bool") return String(field.defaultValue === "true");
|
|
394
|
+
if (field.type === "json") try {
|
|
395
|
+
return JSON.stringify(JSON.parse(String(field.defaultValue)));
|
|
396
|
+
} catch {
|
|
397
|
+
return JSON.stringify(field.defaultValue);
|
|
398
|
+
}
|
|
399
|
+
return JSON.stringify(field.defaultValue);
|
|
400
|
+
}
|
|
401
|
+
/** Type TS d'un champ — union littérale pour une énumération. */
|
|
402
|
+
function tsTypeOf(field) {
|
|
403
|
+
if (field.type === "enum" && field.values) return field.values.map((value) => JSON.stringify(value)).join(" | ");
|
|
404
|
+
return TS_TYPE[field.type];
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Schéma Zod d'un champ — `z.enum` pour une énumération, borné pour une taille.
|
|
408
|
+
*
|
|
409
|
+
* C'est ici que les tailles deviennent une garantie RÉELLE. La colonne, elle, ne
|
|
410
|
+
* protège pas partout : SQLite n'applique aucune longueur, et une valeur trop
|
|
411
|
+
* longue y entrerait sans un mot pour ressortir tronquée le jour d'une migration
|
|
412
|
+
* vers PostgreSQL. Le schéma, lui, s'applique sur tous les transports — REST,
|
|
413
|
+
* socket, ligne de commande — et dans les trois moteurs.
|
|
414
|
+
*/
|
|
415
|
+
function zodTypeOf(field) {
|
|
416
|
+
if (field.type === "enum" && field.values) return `z.enum([${field.values.map((value) => JSON.stringify(value)).join(", ")}])`;
|
|
417
|
+
if (field.type === "string") return `z.string().min(1).max(${field.length ?? 255})`;
|
|
418
|
+
if (field.type === "char") return field.length === void 0 ? "z.string()" : `z.string().length(${field.length})`;
|
|
419
|
+
if (field.type === "decimal") {
|
|
420
|
+
const hint = field.precision === void 0 ? "décimal attendu" : `d\u00e9cimal attendu (${field.precision} chiffres dont ${field.scale ?? 0} apr\u00e8s la virgule)`;
|
|
421
|
+
return `z.string().regex(/^-?\\d+(\\.\\d+)?$/, ${JSON.stringify(hint)})`;
|
|
422
|
+
}
|
|
423
|
+
return ZOD_TYPE[field.type];
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Colonne de clé primaire, selon la stratégie retenue.
|
|
427
|
+
*
|
|
428
|
+
* La PROPRIÉTÉ reste `id` en toutes circonstances : le service CRUD, le controller,
|
|
429
|
+
* le tri par défaut et les tests générés la nomment ainsi, et un schéma existant
|
|
430
|
+
* n'a aucune raison d'imposer sa convention au code TypeScript. Seule la COLONNE
|
|
431
|
+
* SQL suit le nom demandé — c'est elle qui doit épouser la table déjà en place
|
|
432
|
+
* (`website_id` chez Umami, `session_id`, `user_id`… : 18 des 134 renommages).
|
|
433
|
+
*
|
|
434
|
+
* @param column - nom SQL de la colonne (`id` par défaut).
|
|
435
|
+
*/
|
|
436
|
+
function primaryKeyColumn(dialect, id, column) {
|
|
437
|
+
if (id === "serial") return {
|
|
438
|
+
line: dialect === "sqlite" ? `id: integer("${column}").primaryKey({ autoIncrement: true }),` : dialect === "postgres" ? `id: serial("${column}").primaryKey(),` : `id: int("${column}").autoincrement().primaryKey(),`,
|
|
439
|
+
tsType: "number",
|
|
440
|
+
imports: dialect === "sqlite" ? ["integer"] : dialect === "postgres" ? ["serial"] : ["int"]
|
|
441
|
+
};
|
|
442
|
+
const generator = id === "uuid7" ? "Nodefony.generateSortableId()" : "Nodefony.generateId()";
|
|
443
|
+
return {
|
|
444
|
+
line: `id: ${COLUMN[dialect].uuid(column)}.primaryKey().$defaultFn(() => ${generator}),`,
|
|
445
|
+
tsType: "string",
|
|
446
|
+
imports: [dialect === "postgres" ? "uuid" : dialect === "mysql" ? "varchar" : "text"]
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
/**
|
|
450
|
+
* Colonne qui PORTE une référence — le pendant exact de {@link primaryKeyColumn}.
|
|
451
|
+
*
|
|
452
|
+
* Une clé étrangère doit avoir le TYPE de la clé qu'elle désigne, et c'est la
|
|
453
|
+
* raison d'être de cette fonction : la référence était jusqu'ici une colonne
|
|
454
|
+
* texte, quelle que soit la clé visée. En PostgreSQL, comparer un `text` à un
|
|
455
|
+
* `uuid` échoue — « operator does not exist: text = uuid ». La jointure que cette
|
|
456
|
+
* colonne existe précisément pour servir refusait donc de s'exécuter, et le
|
|
457
|
+
* `?include=` avec elle. En SQLite, moteur du développement, la même comparaison
|
|
458
|
+
* passe sans broncher : la panne n'attendait que le premier vrai serveur.
|
|
459
|
+
*
|
|
460
|
+
* La stratégie retenue est celle de l'entité qu'on crée. C'est le seul indice
|
|
461
|
+
* dont dispose le générateur — il ne lit pas l'entité visée —, et il est juste
|
|
462
|
+
* tant qu'une application ne mélange pas ses styles d'identifiant, ce qui est le
|
|
463
|
+
* cas ordinaire. Une cible d'un autre style se corrige dans la table générée :
|
|
464
|
+
* c'est du Drizzle natif.
|
|
465
|
+
*
|
|
466
|
+
* Aucune contrainte `REFERENCES` n'est émise — même raison qu'ailleurs : le DDL
|
|
467
|
+
* dérivé du mode développement ne l'appliquerait pas, et une promesse non tenue
|
|
468
|
+
* coûte plus cher qu'un commentaire honnête.
|
|
469
|
+
*
|
|
470
|
+
* @param dialect - moteur visé.
|
|
471
|
+
* @param id - stratégie de clé primaire de l'entité en cours.
|
|
472
|
+
* @param col - nom de la colonne.
|
|
473
|
+
* @returns l'expression Drizzle, son type TypeScript et l'import nécessaire.
|
|
474
|
+
*/
|
|
475
|
+
function foreignKeyColumn(dialect, id, col) {
|
|
476
|
+
if (id === "serial") return {
|
|
477
|
+
expr: dialect === "mysql" ? `int("${col}")` : `integer("${col}")`,
|
|
478
|
+
tsType: "number",
|
|
479
|
+
imports: [dialect === "mysql" ? "int" : "integer"]
|
|
480
|
+
};
|
|
481
|
+
return {
|
|
482
|
+
expr: COLUMN[dialect].uuid(col),
|
|
483
|
+
tsType: "string",
|
|
484
|
+
imports: [dialect === "postgres" ? "uuid" : dialect === "mysql" ? "varchar" : "text"]
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
/** Nom du constructeur Drizzle utilisé par un champ (pour la liste d'imports). */
|
|
488
|
+
function columnImport(dialect, type) {
|
|
489
|
+
return COLUMN[dialect][type]("x").split("(")[0];
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Produit le code des colonnes, de l'interface de ligne et du schéma Zod.
|
|
493
|
+
*
|
|
494
|
+
* Les horodatages sont posés **côté JS** (`$defaultFn`/`$onUpdateFn`) et non en SQL :
|
|
495
|
+
* le DDL dérivé du mode dev n'émet pas les `DEFAULT` — un défaut SQL serait donc
|
|
496
|
+
* silencieusement absent des tables créées au boot.
|
|
497
|
+
*
|
|
498
|
+
* @param fields - champs analysés par {@link parseEntityFields}.
|
|
499
|
+
* @param options - dialecte, stratégie d'identifiant, horodatages, suppression douce.
|
|
500
|
+
*/
|
|
501
|
+
function buildEntityCodegen(fields, options) {
|
|
502
|
+
const { dialect, id, timestamps, softDelete, table } = options;
|
|
503
|
+
const columnCase = options.columnCase ?? "camel";
|
|
504
|
+
const idName = options.idName ?? "id";
|
|
505
|
+
/** Nom SQL d'une propriété, dans la casse retenue. */
|
|
506
|
+
const sql = (property) => sqlColumn(property, columnCase);
|
|
507
|
+
const imports = /* @__PURE__ */ new Set();
|
|
508
|
+
const columns = [];
|
|
509
|
+
const rowProps = [];
|
|
510
|
+
const zodProps = [];
|
|
511
|
+
const pk = primaryKeyColumn(dialect, id, idName);
|
|
512
|
+
pk.imports.forEach((i) => imports.add(i));
|
|
513
|
+
columns.push(pk.line);
|
|
514
|
+
rowProps.push(`id: ${pk.tsType};`);
|
|
515
|
+
for (const field of fields) {
|
|
516
|
+
const column = sql(field.name);
|
|
517
|
+
const fk = field.type === "ref" ? foreignKeyColumn(dialect, id, column) : void 0;
|
|
518
|
+
if (fk) fk.imports.forEach((i) => imports.add(i));
|
|
519
|
+
else imports.add(columnImport(dialect, field.type));
|
|
520
|
+
let col = fk?.expr ?? COLUMN[dialect][field.type](column, field.values, {
|
|
521
|
+
length: field.length,
|
|
522
|
+
precision: field.precision,
|
|
523
|
+
scale: field.scale
|
|
524
|
+
});
|
|
525
|
+
if (!field.nullable) col += ".notNull()";
|
|
526
|
+
if (field.unique) col += ".unique()";
|
|
527
|
+
if (field.defaultNow) {
|
|
528
|
+
col += ".$defaultFn(() => new Date())";
|
|
529
|
+
if (field.refreshedOnWrite) col += ".$onUpdateFn(() => new Date())";
|
|
530
|
+
}
|
|
531
|
+
if (field.defaultValue !== void 0) col += `.default(${defaultLiteral(field)}).$defaultFn(() => ${defaultLiteral(field)})`;
|
|
532
|
+
columns.push(`${field.name}: ${col},`);
|
|
533
|
+
const optional = field.nullable ? " | null" : "";
|
|
534
|
+
rowProps.push(`${field.name}: ${fk?.tsType ?? tsTypeOf(field)}${optional};`);
|
|
535
|
+
let zod = fk?.tsType === "number" ? "z.number().int()" : zodTypeOf(field);
|
|
536
|
+
if (field.nullable) zod += ".nullable().optional()";
|
|
537
|
+
if (field.defaultValue !== void 0) zod += `.default(${defaultLiteral(field)})`;
|
|
538
|
+
zodProps.push(`${field.name}: ${zod},`);
|
|
539
|
+
if (field.type === "ref") columns[columns.length - 1] += ` // → ${field.target}.id (contrainte FK à ajouter en migration)`;
|
|
540
|
+
}
|
|
541
|
+
if (timestamps) {
|
|
542
|
+
const dateCol = COLUMN[dialect].date;
|
|
543
|
+
imports.add(columnImport(dialect, "date"));
|
|
544
|
+
columns.push(`createdAt: ${dateCol("created_at")}.notNull().$defaultFn(() => new Date()),`, `updatedAt: ${dateCol("updated_at")}.notNull().$defaultFn(() => new Date()).$onUpdateFn(() => new Date()),`);
|
|
545
|
+
rowProps.push("createdAt: Date;", "updatedAt: Date;");
|
|
546
|
+
}
|
|
547
|
+
if (softDelete) {
|
|
548
|
+
const dateCol = COLUMN[dialect].date;
|
|
549
|
+
imports.add(columnImport(dialect, "date"));
|
|
550
|
+
columns.push(`deletedAt: ${dateCol("deleted_at")},`);
|
|
551
|
+
rowProps.push("deletedAt: Date | null;");
|
|
552
|
+
}
|
|
553
|
+
const declared = [...fields.filter((field) => field.indexed).map((field) => ({
|
|
554
|
+
columns: [field.name],
|
|
555
|
+
unique: false
|
|
556
|
+
})), ...options.indexes ?? []];
|
|
557
|
+
let tableExtras = "";
|
|
558
|
+
if (declared.length > 0) {
|
|
559
|
+
const seen = /* @__PURE__ */ new Set();
|
|
560
|
+
const lines = [];
|
|
561
|
+
for (const entry of declared) {
|
|
562
|
+
const suffix = entry.unique ? "key" : "idx";
|
|
563
|
+
const name = `${table}_${entry.columns.map(sql).join("_")}_${suffix}`;
|
|
564
|
+
if (seen.has(name)) continue;
|
|
565
|
+
seen.add(name);
|
|
566
|
+
const fn = entry.unique ? "uniqueIndex" : "index";
|
|
567
|
+
imports.add(fn);
|
|
568
|
+
const cols = entry.columns.map((c) => `t.${c}`).join(", ");
|
|
569
|
+
lines.push(` ${fn}("${name}").on(${cols}),`);
|
|
570
|
+
}
|
|
571
|
+
tableExtras = `, (t) => [\n${lines.join("\n")}\n ]`;
|
|
572
|
+
}
|
|
573
|
+
const { fn, module } = TABLE_FN[dialect];
|
|
574
|
+
imports.add(fn);
|
|
575
|
+
const block = (lines) => lines.join("\n ");
|
|
576
|
+
const blockLn = (lines) => `${block(lines)}\n`;
|
|
577
|
+
return {
|
|
578
|
+
columns: blockLn(columns),
|
|
579
|
+
drizzleImport: `import { ${[...imports].sort().join(", ")} } from "${module}";`,
|
|
580
|
+
tableFn: fn,
|
|
581
|
+
rowProps: block(rowProps),
|
|
582
|
+
zodProps: block(zodProps),
|
|
583
|
+
tableExtras,
|
|
584
|
+
needsNodefony: id !== "serial",
|
|
585
|
+
idType: pk.tsType
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
//#endregion
|
|
589
|
+
export { COLUMN_CASES, ENTITY_DIALECTS, ENTITY_FIELD_TYPES, ENTITY_ID_KINDS, EntityFieldError, TABLE_FN, buildEntityCodegen, describeColumnTypes, parseEntityFields, parseEntityIndexes, sqlColumn, toSnakeCase };
|