@zintrust/core 0.1.42 → 0.1.44
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/README.md +1 -0
- package/app/Controllers/AuthController.d.ts +10 -0
- package/app/Controllers/AuthController.d.ts.map +1 -0
- package/app/Controllers/AuthController.js +201 -0
- package/app/Controllers/UserController.d.ts +9 -0
- package/app/Controllers/UserController.d.ts.map +1 -0
- package/app/Controllers/UserController.js +8 -0
- package/app/Controllers/UserQueryBuilderController.d.ts +16 -0
- package/app/Controllers/UserQueryBuilderController.d.ts.map +1 -0
- package/app/Controllers/UserQueryBuilderController.js +404 -0
- package/app/Middleware/ProfilerMiddleware.d.ts +12 -0
- package/app/Middleware/ProfilerMiddleware.d.ts.map +1 -0
- package/app/Middleware/ProfilerMiddleware.js +47 -0
- package/app/Middleware/index.d.ts +59 -0
- package/app/Middleware/index.d.ts.map +1 -0
- package/app/Middleware/index.js +215 -0
- package/app/Models/Post.d.ts +14 -0
- package/app/Models/Post.d.ts.map +1 -0
- package/app/Models/Post.js +27 -0
- package/app/Models/User.d.ts +14 -0
- package/app/Models/User.d.ts.map +1 -0
- package/app/Models/User.js +44 -0
- package/app/Schedules/JobTracking.d.ts +3 -0
- package/app/Schedules/JobTracking.d.ts.map +1 -0
- package/app/Schedules/JobTracking.js +13 -0
- package/app/Schedules/index.d.ts +2 -0
- package/app/Schedules/index.d.ts.map +1 -0
- package/app/Schedules/index.js +1 -0
- package/app/Toolkit/Broadcast/sendBroadcast.d.ts +6 -0
- package/app/Toolkit/Broadcast/sendBroadcast.d.ts.map +1 -0
- package/app/Toolkit/Broadcast/sendBroadcast.js +5 -0
- package/app/Toolkit/Mail/sendWelcomeEmail.d.ts +6 -0
- package/app/Toolkit/Mail/sendWelcomeEmail.d.ts.map +1 -0
- package/app/Toolkit/Mail/sendWelcomeEmail.js +20 -0
- package/app/Toolkit/Notification/sendSlackNotification.d.ts +8 -0
- package/app/Toolkit/Notification/sendSlackNotification.d.ts.map +1 -0
- package/app/Toolkit/Notification/sendSlackNotification.js +5 -0
- package/app/Toolkit/Notification/sendSms.d.ts +6 -0
- package/app/Toolkit/Notification/sendSms.d.ts.map +1 -0
- package/app/Toolkit/Notification/sendSms.js +5 -0
- package/app/Types/controller.d.ts +42 -0
- package/app/Types/controller.d.ts.map +1 -0
- package/app/Types/controller.js +1 -0
- package/config/broadcast.d.ts +38 -0
- package/config/broadcast.d.ts.map +1 -0
- package/config/broadcast.js +37 -0
- package/config/cache.d.ts +40 -0
- package/config/cache.d.ts.map +1 -0
- package/config/cache.js +39 -0
- package/config/database.d.ts +58 -0
- package/config/database.d.ts.map +1 -0
- package/config/database.js +65 -0
- package/config/mail.d.ts +51 -0
- package/config/mail.d.ts.map +1 -0
- package/config/mail.js +69 -0
- package/config/middleware.d.ts +11 -0
- package/config/middleware.d.ts.map +1 -0
- package/config/middleware.js +30 -0
- package/config/notification.d.ts +33 -0
- package/config/notification.d.ts.map +1 -0
- package/config/notification.js +33 -0
- package/config/queue.d.ts +55 -0
- package/config/queue.d.ts.map +1 -0
- package/config/queue.js +87 -0
- package/config/storage.d.ts +59 -0
- package/config/storage.d.ts.map +1 -0
- package/config/storage.js +59 -0
- package/config/workers.d.ts +54 -0
- package/config/workers.d.ts.map +1 -0
- package/config/workers.js +83 -0
- package/package.json +12 -5
- package/packages/cloudflare-d1-proxy/src/index.d.ts +48 -0
- package/packages/cloudflare-d1-proxy/src/index.d.ts.map +1 -0
- package/packages/cloudflare-d1-proxy/src/index.js +387 -0
- package/packages/cloudflare-kv-proxy/src/index.d.ts +44 -0
- package/packages/cloudflare-kv-proxy/src/index.d.ts.map +1 -0
- package/packages/cloudflare-kv-proxy/src/index.js +325 -0
- package/packages/queue-monitor/src/QueueMonitoringService.d.ts +35 -0
- package/packages/queue-monitor/src/QueueMonitoringService.d.ts.map +1 -0
- package/packages/queue-monitor/src/QueueMonitoringService.js +194 -0
- package/packages/queue-monitor/src/connection.d.ts +3 -0
- package/packages/queue-monitor/src/connection.d.ts.map +1 -0
- package/packages/queue-monitor/src/connection.js +1 -0
- package/packages/queue-monitor/src/dashboard-ui.d.ts +7 -0
- package/packages/queue-monitor/src/dashboard-ui.d.ts.map +1 -0
- package/packages/queue-monitor/src/dashboard-ui.js +997 -0
- package/packages/queue-monitor/src/driver.d.ts +15 -0
- package/packages/queue-monitor/src/driver.d.ts.map +1 -0
- package/packages/queue-monitor/src/driver.js +115 -0
- package/packages/queue-monitor/src/index.d.ts +71 -0
- package/packages/queue-monitor/src/index.d.ts.map +1 -0
- package/packages/queue-monitor/src/index.js +296 -0
- package/packages/queue-monitor/src/metrics.d.ts +27 -0
- package/packages/queue-monitor/src/metrics.d.ts.map +1 -0
- package/packages/queue-monitor/src/metrics.js +92 -0
- package/packages/queue-monitor/src/worker.d.ts +8 -0
- package/packages/queue-monitor/src/worker.d.ts.map +1 -0
- package/packages/queue-monitor/src/worker.js +35 -0
- package/packages/queue-redis/src/BullMQRedisQueue.d.ts +26 -0
- package/packages/queue-redis/src/BullMQRedisQueue.d.ts.map +1 -0
- package/packages/queue-redis/src/BullMQRedisQueue.js +463 -0
- package/packages/queue-redis/src/HttpQueueDriver.d.ts +18 -0
- package/packages/queue-redis/src/HttpQueueDriver.d.ts.map +1 -0
- package/packages/queue-redis/src/HttpQueueDriver.js +249 -0
- package/packages/queue-redis/src/QueueHttpGateway.d.ts +16 -0
- package/packages/queue-redis/src/QueueHttpGateway.d.ts.map +1 -0
- package/packages/queue-redis/src/QueueHttpGateway.js +217 -0
- package/packages/queue-redis/src/RedisPublishClient.d.ts +14 -0
- package/packages/queue-redis/src/RedisPublishClient.d.ts.map +1 -0
- package/packages/queue-redis/src/RedisPublishClient.js +251 -0
- package/packages/queue-redis/src/index.d.ts +12 -0
- package/packages/queue-redis/src/index.d.ts.map +1 -0
- package/packages/queue-redis/src/index.js +10 -0
- package/packages/queue-redis/src/register.d.ts +6 -0
- package/packages/queue-redis/src/register.d.ts.map +1 -0
- package/packages/queue-redis/src/register.js +21 -0
- package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts +11 -0
- package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.d.ts.map +1 -0
- package/packages/workers/migrations/20260119100000_create_zintrust_workers_table.js +32 -0
- package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts +11 -0
- package/packages/workers/migrations/20260123180000_create_queue_jobs_table.d.ts.map +1 -0
- package/packages/workers/migrations/20260123180000_create_queue_jobs_table.js +46 -0
- package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts +7 -0
- package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.d.ts.map +1 -0
- package/packages/workers/migrations/20260213142000_create_zintrust_job_tracking_tables.js +44 -0
- package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts +7 -0
- package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.d.ts.map +1 -0
- package/packages/workers/migrations/20260213183000_expand_zintrust_job_tracking_reliability_tables.js +104 -0
- package/packages/workers/src/AnomalyDetection.d.ts +107 -0
- package/packages/workers/src/AnomalyDetection.d.ts.map +1 -0
- package/packages/workers/src/AnomalyDetection.js +329 -0
- package/packages/workers/src/AutoScaler.d.ts +128 -0
- package/packages/workers/src/AutoScaler.d.ts.map +1 -0
- package/packages/workers/src/AutoScaler.js +425 -0
- package/packages/workers/src/BroadcastWorker.d.ts +24 -0
- package/packages/workers/src/BroadcastWorker.d.ts.map +1 -0
- package/packages/workers/src/BroadcastWorker.js +24 -0
- package/packages/workers/src/CanaryController.d.ts +104 -0
- package/packages/workers/src/CanaryController.d.ts.map +1 -0
- package/packages/workers/src/CanaryController.js +424 -0
- package/packages/workers/src/ChaosEngineering.d.ts +80 -0
- package/packages/workers/src/ChaosEngineering.d.ts.map +1 -0
- package/packages/workers/src/ChaosEngineering.js +229 -0
- package/packages/workers/src/CircuitBreaker.d.ts +107 -0
- package/packages/workers/src/CircuitBreaker.d.ts.map +1 -0
- package/packages/workers/src/CircuitBreaker.js +374 -0
- package/packages/workers/src/ClusterLock.d.ts +91 -0
- package/packages/workers/src/ClusterLock.d.ts.map +1 -0
- package/packages/workers/src/ClusterLock.js +397 -0
- package/packages/workers/src/ComplianceManager.d.ts +178 -0
- package/packages/workers/src/ComplianceManager.d.ts.map +1 -0
- package/packages/workers/src/ComplianceManager.js +556 -0
- package/packages/workers/src/DatacenterOrchestrator.d.ts +134 -0
- package/packages/workers/src/DatacenterOrchestrator.d.ts.map +1 -0
- package/packages/workers/src/DatacenterOrchestrator.js +404 -0
- package/packages/workers/src/DeadLetterQueue.d.ts +123 -0
- package/packages/workers/src/DeadLetterQueue.d.ts.map +1 -0
- package/packages/workers/src/DeadLetterQueue.js +544 -0
- package/packages/workers/src/HealthMonitor.d.ts +43 -0
- package/packages/workers/src/HealthMonitor.d.ts.map +1 -0
- package/packages/workers/src/HealthMonitor.js +312 -0
- package/packages/workers/src/MultiQueueWorker.d.ts +90 -0
- package/packages/workers/src/MultiQueueWorker.d.ts.map +1 -0
- package/packages/workers/src/MultiQueueWorker.js +282 -0
- package/packages/workers/src/NotificationWorker.d.ts +24 -0
- package/packages/workers/src/NotificationWorker.d.ts.map +1 -0
- package/packages/workers/src/NotificationWorker.js +23 -0
- package/packages/workers/src/Observability.d.ts +154 -0
- package/packages/workers/src/Observability.d.ts.map +1 -0
- package/packages/workers/src/Observability.js +538 -0
- package/packages/workers/src/PluginManager.d.ts +124 -0
- package/packages/workers/src/PluginManager.d.ts.map +1 -0
- package/packages/workers/src/PluginManager.js +392 -0
- package/packages/workers/src/PriorityQueue.d.ts +118 -0
- package/packages/workers/src/PriorityQueue.d.ts.map +1 -0
- package/packages/workers/src/PriorityQueue.js +276 -0
- package/packages/workers/src/ResourceMonitor.d.ts +165 -0
- package/packages/workers/src/ResourceMonitor.d.ts.map +1 -0
- package/packages/workers/src/ResourceMonitor.js +632 -0
- package/packages/workers/src/SLAMonitor.d.ts +111 -0
- package/packages/workers/src/SLAMonitor.d.ts.map +1 -0
- package/packages/workers/src/SLAMonitor.js +274 -0
- package/packages/workers/src/WorkerFactory.d.ts +218 -0
- package/packages/workers/src/WorkerFactory.d.ts.map +1 -0
- package/packages/workers/src/WorkerFactory.js +2253 -0
- package/packages/workers/src/WorkerInit.d.ts +86 -0
- package/packages/workers/src/WorkerInit.d.ts.map +1 -0
- package/packages/workers/src/WorkerInit.js +307 -0
- package/packages/workers/src/WorkerMetrics.d.ts +116 -0
- package/packages/workers/src/WorkerMetrics.d.ts.map +1 -0
- package/packages/workers/src/WorkerMetrics.js +570 -0
- package/packages/workers/src/WorkerRegistry.d.ts +152 -0
- package/packages/workers/src/WorkerRegistry.d.ts.map +1 -0
- package/packages/workers/src/WorkerRegistry.js +396 -0
- package/packages/workers/src/WorkerShutdown.d.ts +70 -0
- package/packages/workers/src/WorkerShutdown.d.ts.map +1 -0
- package/packages/workers/src/WorkerShutdown.js +185 -0
- package/packages/workers/src/WorkerVersioning.d.ts +108 -0
- package/packages/workers/src/WorkerVersioning.d.ts.map +1 -0
- package/packages/workers/src/WorkerVersioning.js +300 -0
- package/packages/workers/src/config/workerConfig.d.ts +5 -0
- package/packages/workers/src/config/workerConfig.d.ts.map +1 -0
- package/packages/workers/src/config/workerConfig.js +25 -0
- package/packages/workers/src/createQueueWorker.d.ts +26 -0
- package/packages/workers/src/createQueueWorker.d.ts.map +1 -0
- package/packages/workers/src/createQueueWorker.js +367 -0
- package/packages/workers/src/dashboard/index.d.ts +2 -0
- package/packages/workers/src/dashboard/index.d.ts.map +1 -0
- package/packages/workers/src/dashboard/index.js +1 -0
- package/packages/workers/src/dashboard/types.d.ts +123 -0
- package/packages/workers/src/dashboard/types.d.ts.map +1 -0
- package/packages/workers/src/dashboard/types.js +1 -0
- package/packages/workers/src/dashboard/workers-api.d.ts +5 -0
- package/packages/workers/src/dashboard/workers-api.d.ts.map +1 -0
- package/packages/workers/src/dashboard/workers-api.js +738 -0
- package/packages/workers/src/helper/index.d.ts +6 -0
- package/packages/workers/src/helper/index.d.ts.map +1 -0
- package/packages/workers/src/helper/index.js +10 -0
- package/packages/workers/src/http/WorkerApiController.d.ts +39 -0
- package/packages/workers/src/http/WorkerApiController.d.ts.map +1 -0
- package/packages/workers/src/http/WorkerApiController.js +313 -0
- package/packages/workers/src/http/WorkerController.d.ts +375 -0
- package/packages/workers/src/http/WorkerController.d.ts.map +1 -0
- package/packages/workers/src/http/WorkerController.js +1454 -0
- package/packages/workers/src/http/WorkerMonitoringService.d.ts +12 -0
- package/packages/workers/src/http/WorkerMonitoringService.d.ts.map +1 -0
- package/packages/workers/src/http/WorkerMonitoringService.js +89 -0
- package/packages/workers/src/http/middleware/CustomValidation.d.ts +93 -0
- package/packages/workers/src/http/middleware/CustomValidation.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/CustomValidation.js +270 -0
- package/packages/workers/src/http/middleware/DatacenterValidator.d.ts +4 -0
- package/packages/workers/src/http/middleware/DatacenterValidator.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/DatacenterValidator.js +94 -0
- package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts +8 -0
- package/packages/workers/src/http/middleware/EditWorkerValidation.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/EditWorkerValidation.js +56 -0
- package/packages/workers/src/http/middleware/FeaturesValidator.d.ts +4 -0
- package/packages/workers/src/http/middleware/FeaturesValidator.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/FeaturesValidator.js +60 -0
- package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts +32 -0
- package/packages/workers/src/http/middleware/InfrastructureValidator.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/InfrastructureValidator.js +226 -0
- package/packages/workers/src/http/middleware/OptionsValidator.d.ts +4 -0
- package/packages/workers/src/http/middleware/OptionsValidator.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/OptionsValidator.js +112 -0
- package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts +8 -0
- package/packages/workers/src/http/middleware/PayloadSanitizer.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/PayloadSanitizer.js +42 -0
- package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts +4 -0
- package/packages/workers/src/http/middleware/ProcessorPathSanitizer.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/ProcessorPathSanitizer.js +140 -0
- package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts +4 -0
- package/packages/workers/src/http/middleware/QueueNameSanitizer.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/QueueNameSanitizer.js +45 -0
- package/packages/workers/src/http/middleware/ValidateDriver.d.ts +8 -0
- package/packages/workers/src/http/middleware/ValidateDriver.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/ValidateDriver.js +20 -0
- package/packages/workers/src/http/middleware/VersionSanitizer.d.ts +4 -0
- package/packages/workers/src/http/middleware/VersionSanitizer.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/VersionSanitizer.js +25 -0
- package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts +4 -0
- package/packages/workers/src/http/middleware/WorkerNameSanitizer.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/WorkerNameSanitizer.js +46 -0
- package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts +28 -0
- package/packages/workers/src/http/middleware/WorkerValidationChain.d.ts.map +1 -0
- package/packages/workers/src/http/middleware/WorkerValidationChain.js +186 -0
- package/packages/workers/src/index.d.ts +47 -0
- package/packages/workers/src/index.d.ts.map +1 -0
- package/packages/workers/src/index.js +48 -0
- package/packages/workers/src/routes/workers.d.ts +13 -0
- package/packages/workers/src/routes/workers.d.ts.map +1 -0
- package/packages/workers/src/routes/workers.js +126 -0
- package/packages/workers/src/storage/WorkerStore.d.ts +52 -0
- package/packages/workers/src/storage/WorkerStore.d.ts.map +1 -0
- package/packages/workers/src/storage/WorkerStore.js +259 -0
- package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts +47 -0
- package/packages/workers/src/telemetry/api/TelemetryAPI.d.ts.map +1 -0
- package/packages/workers/src/telemetry/api/TelemetryAPI.js +219 -0
- package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts +18 -0
- package/packages/workers/src/telemetry/api/TelemetryMonitoringService.d.ts.map +1 -0
- package/packages/workers/src/telemetry/api/TelemetryMonitoringService.js +140 -0
- package/packages/workers/src/telemetry/components/AlertPanel.d.ts +2 -0
- package/packages/workers/src/telemetry/components/AlertPanel.d.ts.map +1 -0
- package/packages/workers/src/telemetry/components/AlertPanel.js +13 -0
- package/packages/workers/src/telemetry/components/CostTracking.d.ts +2 -0
- package/packages/workers/src/telemetry/components/CostTracking.d.ts.map +1 -0
- package/packages/workers/src/telemetry/components/CostTracking.js +14 -0
- package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts +2 -0
- package/packages/workers/src/telemetry/components/ResourceUsageChart.d.ts.map +1 -0
- package/packages/workers/src/telemetry/components/ResourceUsageChart.js +11 -0
- package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts +2 -0
- package/packages/workers/src/telemetry/components/WorkerHealthChart.d.ts.map +1 -0
- package/packages/workers/src/telemetry/components/WorkerHealthChart.js +11 -0
- package/packages/workers/src/telemetry/index.d.ts +16 -0
- package/packages/workers/src/telemetry/index.d.ts.map +1 -0
- package/packages/workers/src/telemetry/index.js +60 -0
- package/packages/workers/src/telemetry/routes/dashboard.d.ts +7 -0
- package/packages/workers/src/telemetry/routes/dashboard.d.ts.map +1 -0
- package/packages/workers/src/telemetry/routes/dashboard.js +608 -0
- package/packages/workers/src/type.d.ts +77 -0
- package/packages/workers/src/type.d.ts.map +1 -0
- package/packages/workers/src/type.js +1 -0
- package/packages/workers/src/ui/router/EmbeddedAssets.d.ts +5 -0
- package/packages/workers/src/ui/router/EmbeddedAssets.d.ts.map +1 -0
- package/packages/workers/src/ui/router/EmbeddedAssets.js +13 -0
- package/packages/workers/src/ui/router/ui.d.ts +4 -0
- package/packages/workers/src/ui/router/ui.d.ts.map +1 -0
- package/packages/workers/src/ui/router/ui.js +208 -0
- package/packages/workers/src/ui/types/worker-ui.d.ts +230 -0
- package/packages/workers/src/ui/types/worker-ui.d.ts.map +1 -0
- package/packages/workers/src/ui/types/worker-ui.js +5 -0
- package/routes/api.d.ts +7 -0
- package/routes/api.d.ts.map +1 -0
- package/routes/api.js +129 -0
- package/routes/broadcast.d.ts +9 -0
- package/routes/broadcast.d.ts.map +1 -0
- package/routes/broadcast.js +27 -0
- package/routes/storage.d.ts +4 -0
- package/routes/storage.d.ts.map +1 -0
- package/routes/storage.js +35 -0
- package/src/cache/Cache.d.ts.map +1 -1
- package/src/cache/Cache.js +40 -8
- package/src/cache/drivers/KVRemoteDriver.d.ts +1 -1
- package/src/cache/drivers/KVRemoteDriver.d.ts.map +1 -1
- package/src/cache/drivers/KVRemoteDriver.js +259 -44
- package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
- package/src/cache/drivers/MemoryDriver.js +10 -2
- package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
- package/src/cache/drivers/RedisDriver.js +256 -33
- package/src/cli/CLI.d.ts.map +1 -1
- package/src/cli/CLI.js +6 -0
- package/src/cli/commands/DeployCommand.d.ts.map +1 -1
- package/src/cli/commands/DeployCommand.js +12 -1
- package/src/cli/commands/DeployContainersProxyCommand.d.ts +5 -0
- package/src/cli/commands/DeployContainersProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/DeployContainersProxyCommand.js +45 -0
- package/src/cli/commands/DockerCommand.d.ts +5 -0
- package/src/cli/commands/DockerCommand.d.ts.map +1 -0
- package/src/cli/commands/DockerCommand.js +74 -0
- package/src/cli/commands/InitContainerCommand.js +10 -10
- package/src/cli/commands/InitContainersProxyCommand.d.ts +5 -0
- package/src/cli/commands/InitContainersProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/InitContainersProxyCommand.js +159 -0
- package/src/cli/commands/NewCommand.d.ts.map +1 -1
- package/src/cli/commands/NewCommand.js +33 -0
- package/src/cli/commands/PutCommand.d.ts.map +1 -1
- package/src/cli/commands/PutCommand.js +15 -5
- package/src/cli/commands/StartCommand.d.ts.map +1 -1
- package/src/cli/commands/StartCommand.js +43 -4
- package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ProjectScaffolder.js +65 -73
- package/src/cli/utils/DistPackager.d.ts.map +1 -1
- package/src/cli/utils/DistPackager.js +25 -0
- package/src/cli/utils/EnvFileLoader.d.ts +1 -0
- package/src/cli/utils/EnvFileLoader.d.ts.map +1 -1
- package/src/cli/utils/EnvFileLoader.js +14 -0
- package/src/common/RemoteSignedJson.d.ts.map +1 -1
- package/src/common/RemoteSignedJson.js +9 -2
- package/src/config/cache.js +1 -1
- package/src/config/env.d.ts +7 -0
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +8 -0
- package/src/config/queue.js +1 -1
- package/src/functions/cloudflare.d.ts.map +1 -1
- package/src/functions/cloudflare.js +4 -2
- package/src/index.js +3 -3
- package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -1
- package/src/middleware/JwtAuthMiddleware.js +11 -5
- package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
- package/src/runtime/RuntimeAdapter.js +30 -12
- package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/CloudflareAdapter.js +15 -4
- package/src/scheduler/Schedule.js +1 -1
- package/src/scheduler/leader/SchedulerLeader.js +1 -1
- package/src/schedules/job-tracking-cleanup.js +1 -1
- package/src/security/TokenRevocation.d.ts +19 -2
- package/src/security/TokenRevocation.d.ts.map +1 -1
- package/src/security/TokenRevocation.js +558 -30
- package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +11 -3
- package/src/templates/project/basic/config/middleware.ts.tpl +23 -22
- package/src/templates/project/basic/wrangler.jsonc.tpl +28 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { BaseCommand } from '../BaseCommand.js';
|
|
2
|
+
import { PromptHelper } from '../PromptHelper.js';
|
|
3
|
+
import { Logger } from '../../config/logger.js';
|
|
4
|
+
import { copyFileSync, existsSync, mkdirSync, writeFileSync } from '../../node-singletons/fs.js';
|
|
5
|
+
import { join } from '../../node-singletons/path.js';
|
|
6
|
+
const WRANGLER_CONTAINERS_PROXY_TEMPLATE = `/**
|
|
7
|
+
* ============================================================================
|
|
8
|
+
* ZinTrust Cloudflare Containers Proxy
|
|
9
|
+
* ============================================================================
|
|
10
|
+
* This Worker acts as the "gateway" for the DB/KV/SMTP proxy stack.
|
|
11
|
+
*
|
|
12
|
+
* Requests are routed by path prefix:
|
|
13
|
+
* /mysql/* -> ZintrustMySqlProxyContainer (port 8789)
|
|
14
|
+
* /postgres/* -> ZintrustPostgresProxyContainer (port 8790)
|
|
15
|
+
* /redis/* -> ZintrustRedisProxyContainer (port 8791)
|
|
16
|
+
* /mongodb/* -> ZintrustMongoDbProxyContainer (port 8792)
|
|
17
|
+
* /sqlserver/* -> ZintrustSqlServerProxyContainer (port 8793)
|
|
18
|
+
* /smtp/* -> ZintrustSmtpProxyContainer (port 8794)
|
|
19
|
+
*
|
|
20
|
+
* Notes:
|
|
21
|
+
* - You must install the runtime package: "@zintrust/cloudflare-containers-proxy".
|
|
22
|
+
* - Secrets should be uploaded with the same config file.
|
|
23
|
+
* ============================================================================
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
{
|
|
27
|
+
"name": "zintrust-containers-proxy",
|
|
28
|
+
"main": "./src/containers-proxy.ts",
|
|
29
|
+
|
|
30
|
+
"compatibility_date": "2025-04-21",
|
|
31
|
+
"compatibility_flags": ["nodejs_compat"],
|
|
32
|
+
|
|
33
|
+
"workers_dev": true,
|
|
34
|
+
"minify": false,
|
|
35
|
+
|
|
36
|
+
"containers": [
|
|
37
|
+
{ "class_name": "ZintrustMySqlProxyContainer", "image": "./Dockerfile", "max_instances": 10 },
|
|
38
|
+
{ "class_name": "ZintrustPostgresProxyContainer", "image": "./Dockerfile", "max_instances": 10 },
|
|
39
|
+
{ "class_name": "ZintrustRedisProxyContainer", "image": "./Dockerfile", "max_instances": 10 },
|
|
40
|
+
{ "class_name": "ZintrustMongoDbProxyContainer", "image": "./Dockerfile", "max_instances": 10 },
|
|
41
|
+
{ "class_name": "ZintrustSqlServerProxyContainer", "image": "./Dockerfile", "max_instances": 10 },
|
|
42
|
+
{ "class_name": "ZintrustSmtpProxyContainer", "image": "./Dockerfile", "max_instances": 10 }
|
|
43
|
+
],
|
|
44
|
+
|
|
45
|
+
"durable_objects": {
|
|
46
|
+
"bindings": [
|
|
47
|
+
{ "name": "ZT_PROXY_MYSQL", "class_name": "ZintrustMySqlProxyContainer" },
|
|
48
|
+
{ "name": "ZT_PROXY_POSTGRES", "class_name": "ZintrustPostgresProxyContainer" },
|
|
49
|
+
{ "name": "ZT_PROXY_REDIS", "class_name": "ZintrustRedisProxyContainer" },
|
|
50
|
+
{ "name": "ZT_PROXY_MONGODB", "class_name": "ZintrustMongoDbProxyContainer" },
|
|
51
|
+
{ "name": "ZT_PROXY_SQLSERVER", "class_name": "ZintrustSqlServerProxyContainer" },
|
|
52
|
+
{ "name": "ZT_PROXY_SMTP", "class_name": "ZintrustSmtpProxyContainer" }
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
"migrations": [
|
|
57
|
+
{
|
|
58
|
+
"tag": "containers-proxy-v1",
|
|
59
|
+
"new_sqlite_classes": [
|
|
60
|
+
"ZintrustMySqlProxyContainer",
|
|
61
|
+
"ZintrustPostgresProxyContainer",
|
|
62
|
+
"ZintrustRedisProxyContainer",
|
|
63
|
+
"ZintrustMongoDbProxyContainer",
|
|
64
|
+
"ZintrustSqlServerProxyContainer",
|
|
65
|
+
"ZintrustSmtpProxyContainer"
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
|
|
70
|
+
"env": {
|
|
71
|
+
"staging": {
|
|
72
|
+
"name": "zintrust-containers-proxy-staging",
|
|
73
|
+
"minify": false,
|
|
74
|
+
"vars": {
|
|
75
|
+
"ENVIRONMENT": "staging",
|
|
76
|
+
"APP_NAME": "ZinTrust",
|
|
77
|
+
"CSRF_SKIP_PATHS": "/api/*,/queue-monitor/*"
|
|
78
|
+
},
|
|
79
|
+
// Add routes here when ready:
|
|
80
|
+
// "routes": [{ "pattern": "proxy-staging.example.com", "custom_domain": true }]
|
|
81
|
+
},
|
|
82
|
+
"production": {
|
|
83
|
+
"name": "zintrust-containers-proxy-production",
|
|
84
|
+
"minify": true,
|
|
85
|
+
"vars": {
|
|
86
|
+
"ENVIRONMENT": "production",
|
|
87
|
+
"APP_NAME": "ZinTrust",
|
|
88
|
+
"CSRF_SKIP_PATHS": "/api/*,/queue-monitor/*"
|
|
89
|
+
},
|
|
90
|
+
// Add routes here when ready:
|
|
91
|
+
// "routes": [{ "pattern": "proxy.example.com", "custom_domain": true }]
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
`;
|
|
96
|
+
const WORKER_ENTRY_TEMPLATE = `export { default } from '@zintrust/cloudflare-containers-proxy';
|
|
97
|
+
export * from '@zintrust/cloudflare-containers-proxy';
|
|
98
|
+
`;
|
|
99
|
+
const backupSuffix = () => new Date().toISOString().replaceAll(/[:.]/g, '-');
|
|
100
|
+
const backupFileIfExists = (filePath) => {
|
|
101
|
+
if (!existsSync(filePath))
|
|
102
|
+
return;
|
|
103
|
+
const backupPath = `${filePath}.bak.${backupSuffix()}`;
|
|
104
|
+
copyFileSync(filePath, backupPath);
|
|
105
|
+
Logger.info(`🗂️ Backup created: ${backupPath}`);
|
|
106
|
+
};
|
|
107
|
+
async function writeWranglerConfig(cwd) {
|
|
108
|
+
const configPath = join(cwd, 'wrangler.containers-proxy.jsonc');
|
|
109
|
+
let shouldWrite = true;
|
|
110
|
+
if (existsSync(configPath)) {
|
|
111
|
+
shouldWrite = await PromptHelper.confirm('wrangler.containers-proxy.jsonc already exists. Overwrite?', false);
|
|
112
|
+
}
|
|
113
|
+
if (!shouldWrite) {
|
|
114
|
+
Logger.info('Skipped wrangler.containers-proxy.jsonc');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
backupFileIfExists(configPath);
|
|
118
|
+
writeFileSync(configPath, WRANGLER_CONTAINERS_PROXY_TEMPLATE);
|
|
119
|
+
Logger.info('✅ Created wrangler.containers-proxy.jsonc');
|
|
120
|
+
}
|
|
121
|
+
async function writeWorkerEntry(cwd) {
|
|
122
|
+
const srcDir = join(cwd, 'src');
|
|
123
|
+
const entryPath = join(srcDir, 'containers-proxy.ts');
|
|
124
|
+
if (!existsSync(srcDir)) {
|
|
125
|
+
mkdirSync(srcDir, { recursive: true });
|
|
126
|
+
}
|
|
127
|
+
let shouldWrite = true;
|
|
128
|
+
if (existsSync(entryPath)) {
|
|
129
|
+
shouldWrite = await PromptHelper.confirm('src/containers-proxy.ts already exists. Overwrite?', false);
|
|
130
|
+
}
|
|
131
|
+
if (!shouldWrite) {
|
|
132
|
+
Logger.info('Skipped src/containers-proxy.ts');
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
backupFileIfExists(entryPath);
|
|
136
|
+
writeFileSync(entryPath, WORKER_ENTRY_TEMPLATE);
|
|
137
|
+
Logger.info('✅ Created src/containers-proxy.ts');
|
|
138
|
+
}
|
|
139
|
+
export const InitContainersProxyCommand = Object.freeze({
|
|
140
|
+
create() {
|
|
141
|
+
return BaseCommand.create({
|
|
142
|
+
name: 'init:containers-proxy',
|
|
143
|
+
aliases: ['init:ccp', 'init:cf-containers-proxy'],
|
|
144
|
+
description: 'Scaffold Cloudflare Containers proxy Worker (wrangler.containers-proxy.jsonc)',
|
|
145
|
+
async execute() {
|
|
146
|
+
Logger.info('Initializing Cloudflare Containers proxy scaffolding...');
|
|
147
|
+
const cwd = process.cwd();
|
|
148
|
+
await writeWranglerConfig(cwd);
|
|
149
|
+
await writeWorkerEntry(cwd);
|
|
150
|
+
Logger.info('✅ Containers proxy scaffolding complete.');
|
|
151
|
+
Logger.info('Install runtime: npm i @zintrust/cloudflare-containers-proxy');
|
|
152
|
+
Logger.info('Dev (Wrangler + Docker): zin docker --wrangler-config wrangler.containers-proxy.jsonc --env staging');
|
|
153
|
+
Logger.info('Dev (short): zin dk -e staging');
|
|
154
|
+
Logger.info('Deploy (short): zin d:ccp');
|
|
155
|
+
await Promise.resolve();
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
},
|
|
159
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NewCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/NewCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"NewCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/NewCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAgBrE,KAAK,YAAY,GAAG,OAAO,GAAG,KAAK,GAAG,cAAc,GAAG,WAAW,CAAC;AACnE,KAAK,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,CAAC;AAYhF,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAwPhD,UAAU,WAAY,SAAQ,YAAY;IACxC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACxF,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACzF,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,GAAG,gBAAgB,EAAE,CAAC;IACjF,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;IAChC,YAAY,IAAI,MAAM,CAAC;IACvB,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,sBAAsB,EAC9B,SAAS,CAAC,EAAE,OAAO,GAClB,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACpE;AA0RD;;;GAGG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;cACO,WAAW;EAGrB,CAAC"}
|
|
@@ -8,6 +8,7 @@ import { extractErrorMessage, resolvePackageManager } from '../../common/index.j
|
|
|
8
8
|
import { appConfig } from '../../config/app.js';
|
|
9
9
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
10
10
|
import { execFileSync } from '../../node-singletons/child-process.js';
|
|
11
|
+
import fs from '../../node-singletons/fs.js';
|
|
11
12
|
import * as path from '../../node-singletons/path.js';
|
|
12
13
|
import chalk from 'chalk';
|
|
13
14
|
const getGitBinary = () => 'git';
|
|
@@ -233,9 +234,39 @@ const addOptions = (command) => {
|
|
|
233
234
|
command.option('--install', 'Force dependency installation (useful to override CI defaults)');
|
|
234
235
|
command.option('--package-manager <manager>', 'Package manager to use (npm, yarn, pnpm)');
|
|
235
236
|
command.option('--governance', 'Install governance tooling (ESLint + architecture tests)', false);
|
|
237
|
+
command.option('--with-d1-proxy', 'Add @zintrust/cloudflare-d1-proxy to package.json (for deploying the D1 proxy worker)', false);
|
|
236
238
|
command.option('--force', 'Overwrite existing directory');
|
|
237
239
|
command.option('--overwrite', 'Overwrite existing directory');
|
|
238
240
|
};
|
|
241
|
+
const maybeAddD1ProxyDependency = (projectPath, options, log) => {
|
|
242
|
+
const enabled = options['withD1Proxy'] === true || options['with-d1-proxy'] === true;
|
|
243
|
+
if (!enabled)
|
|
244
|
+
return;
|
|
245
|
+
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
246
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
247
|
+
log.warn(`Could not add @zintrust/cloudflare-d1-proxy (missing package.json at ${packageJsonPath})`);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
const raw = fs.readFileSync(packageJsonPath, 'utf8');
|
|
252
|
+
const pkg = JSON.parse(raw);
|
|
253
|
+
const dependencies = { ...pkg.dependencies };
|
|
254
|
+
if (typeof dependencies['@zintrust/cloudflare-d1-proxy'] !== 'string') {
|
|
255
|
+
// Avoid pinning to core version (they can differ). Use a safe caret range.
|
|
256
|
+
dependencies['@zintrust/cloudflare-d1-proxy'] = '^0.1.42';
|
|
257
|
+
}
|
|
258
|
+
const next = {
|
|
259
|
+
...pkg,
|
|
260
|
+
dependencies,
|
|
261
|
+
};
|
|
262
|
+
fs.writeFileSync(packageJsonPath, JSON.stringify(next, null, 2) + '\n');
|
|
263
|
+
log.info('✅ Added @zintrust/cloudflare-d1-proxy to dependencies');
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
ErrorFactory.createCliError('Failed to update package.json with D1 proxy dependency', error);
|
|
267
|
+
log.warn('Please add @zintrust/cloudflare-d1-proxy manually if you need the proxy worker.');
|
|
268
|
+
}
|
|
269
|
+
};
|
|
239
270
|
const resolveProjectName = async (options) => {
|
|
240
271
|
const argName = options.args?.[0];
|
|
241
272
|
const projectName = argName ?? (await PromptHelper.projectName('my-zintrust-app', true));
|
|
@@ -285,6 +316,8 @@ const createProject = async (target, options, command) => {
|
|
|
285
316
|
throw ErrorFactory.createCliError(gov.message ?? 'Governance scaffolding failed', gov);
|
|
286
317
|
}
|
|
287
318
|
}
|
|
319
|
+
// Optional dependency injection must happen before `npm/yarn/pnpm install`.
|
|
320
|
+
maybeAddD1ProxyDependency(target.projectPath, options, command);
|
|
288
321
|
};
|
|
289
322
|
const maybeInitializeGit = (options, command, target) => {
|
|
290
323
|
if (options['git'] !== false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PutCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/PutCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"PutCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/PutCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0OvF,eAAO,MAAM,UAAU;cACX,YAAY;EAWtB,CAAC;AAEH,eAAe,UAAU,CAAC"}
|
|
@@ -74,9 +74,14 @@ const getPutTimeoutMs = () => {
|
|
|
74
74
|
return 120000;
|
|
75
75
|
return parsed;
|
|
76
76
|
};
|
|
77
|
-
const putSecret = (wranglerEnv, key, value) => {
|
|
77
|
+
const putSecret = (wranglerEnv, key, value, configPath) => {
|
|
78
78
|
const npmPath = resolveNpmPath();
|
|
79
|
-
|
|
79
|
+
const args = ['exec', '--yes', '--', 'wrangler'];
|
|
80
|
+
if (typeof configPath === 'string' && configPath.trim().length > 0) {
|
|
81
|
+
args.push('--config', configPath.trim());
|
|
82
|
+
}
|
|
83
|
+
args.push('secret', 'put', key, '--env', wranglerEnv);
|
|
84
|
+
execFileSync(npmPath, args, {
|
|
80
85
|
stdio: ['pipe', 'inherit', 'inherit'],
|
|
81
86
|
input: value,
|
|
82
87
|
encoding: 'utf8',
|
|
@@ -91,6 +96,7 @@ const addOptions = (command) => {
|
|
|
91
96
|
.option('--wg <env...>', 'Wrangler environment target(s), e.g. d1-proxy kv-proxy')
|
|
92
97
|
.option('--var <configKey...>', 'Config array key(s) from .zintrust.json (e.g. d1_env kv_env)')
|
|
93
98
|
.option('--env_path <path>', 'Path to env file used as source values', '.env')
|
|
99
|
+
.option('-c, --config <path>', 'Wrangler config file to target (optional)')
|
|
94
100
|
.option('--dry-run', 'Show what would be uploaded without calling wrangler');
|
|
95
101
|
};
|
|
96
102
|
const ensureCloudflareProvider = (providerRaw) => {
|
|
@@ -122,7 +128,7 @@ const reportResult = (cmd, pushed, failures) => {
|
|
|
122
128
|
cmd.warn(`${item.key} -> ${item.wranglerEnv}: ${item.reason}`);
|
|
123
129
|
}
|
|
124
130
|
};
|
|
125
|
-
const processPut = (cmd, wranglerEnvs, selectedKeys, envMap, dryRun) => {
|
|
131
|
+
const processPut = (cmd, wranglerEnvs, selectedKeys, envMap, dryRun, configPath) => {
|
|
126
132
|
let pushed = 0;
|
|
127
133
|
const failures = [];
|
|
128
134
|
for (const wranglerEnv of wranglerEnvs) {
|
|
@@ -135,7 +141,7 @@ const processPut = (cmd, wranglerEnvs, selectedKeys, envMap, dryRun) => {
|
|
|
135
141
|
try {
|
|
136
142
|
if (!dryRun) {
|
|
137
143
|
cmd.info(`putting ${key} -> ${wranglerEnv}...`);
|
|
138
|
-
putSecret(wranglerEnv, key, value);
|
|
144
|
+
putSecret(wranglerEnv, key, value, configPath);
|
|
139
145
|
}
|
|
140
146
|
pushed += 1;
|
|
141
147
|
cmd.info(`${dryRun ? '[dry-run] ' : ''}put ${key} -> ${wranglerEnv}`);
|
|
@@ -156,7 +162,11 @@ const execute = async (cmd, options) => {
|
|
|
156
162
|
const envMap = await EnvFile.read({ cwd, path: envFilePath });
|
|
157
163
|
const wranglerEnvs = resolveWranglerEnvs(options);
|
|
158
164
|
const dryRun = options.dryRun === true;
|
|
159
|
-
const
|
|
165
|
+
const configPath = typeof options.config === 'string' ? options.config.trim() : '';
|
|
166
|
+
if (configPath !== '' && !existsSync(path.join(cwd, configPath))) {
|
|
167
|
+
throw ErrorFactory.createCliError(`Wrangler config not found: ${configPath}`);
|
|
168
|
+
}
|
|
169
|
+
const result = processPut(cmd, wranglerEnvs, selectedKeys, envMap, dryRun, configPath === '' ? undefined : configPath);
|
|
160
170
|
reportResult(cmd, result.pushed, result.failures);
|
|
161
171
|
};
|
|
162
172
|
export const PutCommand = Object.freeze({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/StartCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"StartCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/StartCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAwnBvF,eAAO,MAAM,YAAY;cACb,YAAY;EA6BtB,CAAC"}
|
|
@@ -132,6 +132,20 @@ const resolveWatchPreference = (options, mode) => {
|
|
|
132
132
|
return options.watch;
|
|
133
133
|
return mode === 'development';
|
|
134
134
|
};
|
|
135
|
+
const resolveCacheEnabledPreference = (options) => {
|
|
136
|
+
const hasCache = hasFlag('--cache');
|
|
137
|
+
const hasNoCache = hasFlag('--no-cache');
|
|
138
|
+
if (hasCache && hasNoCache) {
|
|
139
|
+
throw ErrorFactory.createCliError('Error: Cannot use both --cache and --no-cache.');
|
|
140
|
+
}
|
|
141
|
+
if (hasCache)
|
|
142
|
+
return true;
|
|
143
|
+
if (hasNoCache)
|
|
144
|
+
return false;
|
|
145
|
+
if (typeof options.cache === 'boolean')
|
|
146
|
+
return options.cache;
|
|
147
|
+
return undefined;
|
|
148
|
+
};
|
|
135
149
|
const readPackageJson = (cwd) => {
|
|
136
150
|
const packagePath = path.join(cwd, 'package.json');
|
|
137
151
|
if (!existsSync(packagePath)) {
|
|
@@ -227,16 +241,29 @@ const resolveNodeProdCommand = (cwd) => {
|
|
|
227
241
|
}
|
|
228
242
|
return { command: 'node', args: [compiled] };
|
|
229
243
|
};
|
|
230
|
-
const executeWranglerStart = async (cmd, cwd, port, runtime, envName) => {
|
|
244
|
+
const executeWranglerStart = async (cmd, cwd, port, runtime, envName, wranglerConfig) => {
|
|
231
245
|
if (runtime !== undefined) {
|
|
232
246
|
throw ErrorFactory.createCliError('Error: --runtime is not supported with --wrangler (Wrangler controls Workers runtime).');
|
|
233
247
|
}
|
|
234
|
-
const
|
|
248
|
+
const normalizedConfig = typeof wranglerConfig === 'string' ? wranglerConfig.trim() : '';
|
|
249
|
+
const explicitConfigFullPath = normalizedConfig.length > 0 ? path.join(cwd, normalizedConfig) : undefined;
|
|
250
|
+
const configPath = explicitConfigFullPath ?? findWranglerConfig(cwd);
|
|
235
251
|
const entry = resolveWranglerEntry(cwd);
|
|
252
|
+
if (explicitConfigFullPath !== undefined) {
|
|
253
|
+
if (existsSync(explicitConfigFullPath)) {
|
|
254
|
+
// ok
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
throw ErrorFactory.createCliError(`Error: Wrangler config not found: ${normalizedConfig}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
236
260
|
if (configPath === undefined && entry === undefined) {
|
|
237
261
|
throw ErrorFactory.createCliError("Error: wrangler config not found (wrangler.toml/json). Run 'wrangler init' first.");
|
|
238
262
|
}
|
|
239
263
|
const wranglerArgs = ['dev'];
|
|
264
|
+
if (normalizedConfig !== '') {
|
|
265
|
+
wranglerArgs.push('--config', normalizedConfig);
|
|
266
|
+
}
|
|
240
267
|
if (configPath === undefined && entry !== undefined) {
|
|
241
268
|
wranglerArgs.push(entry);
|
|
242
269
|
}
|
|
@@ -407,9 +434,18 @@ const executeStart = async (options, cmd) => {
|
|
|
407
434
|
await executeSplitStart(cmd, cwd, options);
|
|
408
435
|
return;
|
|
409
436
|
}
|
|
410
|
-
|
|
437
|
+
const cacheEnabled = resolveCacheEnabledPreference(options);
|
|
438
|
+
EnvFileLoader.applyCliOverrides({
|
|
439
|
+
nodeEnv: mode,
|
|
440
|
+
port,
|
|
441
|
+
runtime: effectiveRuntime,
|
|
442
|
+
...(typeof cacheEnabled === 'boolean' ? { cacheEnabled } : {}),
|
|
443
|
+
});
|
|
411
444
|
if (variant === 'wrangler') {
|
|
412
|
-
|
|
445
|
+
const wranglerConfig = typeof options.wranglerConfig === 'string' && options.wranglerConfig.trim() !== ''
|
|
446
|
+
? options.wranglerConfig.trim()
|
|
447
|
+
: undefined;
|
|
448
|
+
await executeWranglerStart(cmd, cwd, port, runtime, envName === '' ? undefined : envName, wranglerConfig);
|
|
413
449
|
return;
|
|
414
450
|
}
|
|
415
451
|
if (envName !== '') {
|
|
@@ -435,10 +471,13 @@ export const StartCommand = Object.freeze({
|
|
|
435
471
|
.option('--wg', 'Alias for --wrangler')
|
|
436
472
|
.option('--deno', 'Start a local server using the Deno runtime adapter')
|
|
437
473
|
.option('--lambda', 'Start a local server using the AWS Lambda runtime adapter')
|
|
474
|
+
.option('--cache', 'Enable cache functionality')
|
|
475
|
+
.option('--no-cache', 'Disable cache functionality')
|
|
438
476
|
.option('--watch', 'Force watch mode (Node only)')
|
|
439
477
|
.option('--no-watch', 'Disable watch mode (Node only)')
|
|
440
478
|
.option('--mode <development|production|testing>', 'Override app mode')
|
|
441
479
|
.option('--env <name>', 'Wrangler environment name (Wrangler mode only)')
|
|
480
|
+
.option('--wrangler-config <path>', 'Wrangler config path (Wrangler mode only)')
|
|
442
481
|
.option('--runtime <nodejs|cloudflare|lambda|deno|auto>', 'Set RUNTIME for spawned Node')
|
|
443
482
|
.option('-p, --port <number>', 'Override server port');
|
|
444
483
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ProjectScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtD,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IACpE,cAAc,IAAI,MAAM,CAAC;IACzB,sBAAsB,IAAI,OAAO,CAAC;IAClC,iBAAiB,IAAI,MAAM,CAAC;IAC5B,WAAW,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC;IACtD,gBAAgB,IAAI,OAAO,CAAC;IAC5B,aAAa,IAAI,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC3E;
|
|
1
|
+
{"version":3,"file":"ProjectScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ProjectScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtD,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IACpE,cAAc,IAAI,MAAM,CAAC;IACzB,sBAAsB,IAAI,OAAO,CAAC;IAClC,iBAAiB,IAAI,MAAM,CAAC;IAC5B,WAAW,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC;IACtD,gBAAgB,IAAI,OAAO,CAAC;IAC5B,aAAa,IAAI,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC3E;AA8eD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAsBrE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAsBA;AA4ID;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,GAAE,MAAsB,GAAG,kBAAkB,CAsB/F;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;EAM5B,CAAC"}
|
|
@@ -125,41 +125,56 @@ const toSafeDbBasename = (raw) => {
|
|
|
125
125
|
}
|
|
126
126
|
return out === '' ? 'zintrust' : out;
|
|
127
127
|
};
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
];
|
|
128
|
+
const readEnvScaffoldTemplate = () => {
|
|
129
|
+
const templateUrl = new URL('./templates/env.scaffold.dotenv.tpl', import.meta.url);
|
|
130
|
+
return fs.readFileSync(templateUrl, 'utf8');
|
|
131
|
+
};
|
|
132
|
+
const renderEnvScaffold = (template, vars) => {
|
|
133
|
+
let out = template;
|
|
134
|
+
for (const [key, value] of Object.entries(vars)) {
|
|
135
|
+
out = out.replaceAll(`{{${key}}}`, value);
|
|
137
136
|
}
|
|
138
|
-
if
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
137
|
+
// Normalize: if a placeholder resolves to empty, prevent excessive blank blocks.
|
|
138
|
+
out = out.replaceAll('\n\n\n', '\n\n');
|
|
139
|
+
return out;
|
|
140
|
+
};
|
|
141
|
+
const buildDbOverrides = (dbConnection) => {
|
|
142
|
+
const normalized = dbConnection.trim().toLowerCase();
|
|
143
|
+
if (normalized === 'mysql') {
|
|
144
|
+
return {
|
|
145
|
+
dbLines: [
|
|
146
|
+
'DB_HOST=localhost',
|
|
147
|
+
'DB_PORT=3306',
|
|
148
|
+
'DB_DATABASE=zintrust',
|
|
149
|
+
'DB_USERNAME=root',
|
|
150
|
+
'DB_PASSWORD=',
|
|
151
|
+
],
|
|
152
|
+
};
|
|
146
153
|
}
|
|
147
|
-
if (
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
154
|
+
if (normalized === 'postgres' || normalized === 'postgresql') {
|
|
155
|
+
return {
|
|
156
|
+
dbLines: [
|
|
157
|
+
'DB_HOST=localhost',
|
|
158
|
+
'DB_PORT=5432',
|
|
159
|
+
'DB_DATABASE=zintrust',
|
|
160
|
+
'DB_USERNAME=postgres',
|
|
161
|
+
'DB_PASSWORD=',
|
|
162
|
+
],
|
|
163
|
+
};
|
|
151
164
|
}
|
|
152
|
-
if (
|
|
153
|
-
return
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
165
|
+
if (normalized === 'sqlserver' || normalized === 'mssql') {
|
|
166
|
+
return {
|
|
167
|
+
dbLines: [
|
|
168
|
+
'DB_HOST_MSSQL=localhost',
|
|
169
|
+
'DB_PORT_MSSQL=1433',
|
|
170
|
+
'DB_DATABASE_MSSQL=zintrust',
|
|
171
|
+
'DB_USERNAME_MSSQL=sa',
|
|
172
|
+
'DB_PASSWORD_MSSQL=',
|
|
173
|
+
],
|
|
174
|
+
};
|
|
161
175
|
}
|
|
162
|
-
|
|
176
|
+
// sqlite/d1/d1-remote/etc: no overrides here (DB_PATH is handled via SQLITE_DB_PATH placeholder)
|
|
177
|
+
return { dbLines: [] };
|
|
163
178
|
};
|
|
164
179
|
const createEnvFile = (projectPath, variables) => {
|
|
165
180
|
try {
|
|
@@ -174,56 +189,33 @@ const createEnvFile = (projectPath, variables) => {
|
|
|
174
189
|
HOST: 'localhost',
|
|
175
190
|
PORT: String(Number(variables['port'] ?? 7777)),
|
|
176
191
|
LOG_LEVEL: 'debug',
|
|
177
|
-
CSRF_SKIP_PATHS: '/api/*,/queue-monitor/*',
|
|
192
|
+
CSRF_SKIP_PATHS: '/api/*,/queue-monitor/*,/api/_sys/queue/*,/api/_sys/schedule/*',
|
|
178
193
|
});
|
|
179
194
|
return true;
|
|
180
195
|
}
|
|
181
196
|
const name = typeof variables['projectName'] === 'string' ? variables['projectName'] : 'zintrust-app';
|
|
182
197
|
const port = Number(variables['port'] ?? 7777);
|
|
183
198
|
const database = typeof variables['database'] === 'string' ? variables['database'] : 'sqlite';
|
|
199
|
+
const baseUrl = `http://localhost:${port}`;
|
|
200
|
+
const dbConnection = database.trim().toLowerCase();
|
|
201
|
+
const sqliteDbPath = `.zintrust/dbs/${toSafeDbBasename(name)}.sqlite`;
|
|
184
202
|
// Generate a secure APP_KEY (32 bytes = 256-bit, base64 encoded)
|
|
185
203
|
const appKeyBytes = randomBytes(32);
|
|
186
|
-
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
'# Logging',
|
|
202
|
-
'LOG_LEVEL=debug',
|
|
203
|
-
'LOG_CHANNEL=file',
|
|
204
|
-
'LOG_FORMAT=text',
|
|
205
|
-
'',
|
|
206
|
-
'# Auth / Security',
|
|
207
|
-
'JWT_SECRET=',
|
|
208
|
-
'JWT_EXPIRES_IN=1h',
|
|
209
|
-
'CSRF_SECRET=',
|
|
210
|
-
'CSRF_SKIP_PATHS=/api/*,/queue-monitor/*',
|
|
211
|
-
'ENCRYPTION_CIPHER=aes-256-cbc',
|
|
212
|
-
'APP_PREVIOUS_KEYS=',
|
|
213
|
-
'',
|
|
214
|
-
'# Cache / Queue',
|
|
215
|
-
'CACHE_DRIVER=memory',
|
|
216
|
-
'CACHE_TTL=300',
|
|
217
|
-
'QUEUE_DRIVER=sync',
|
|
218
|
-
'',
|
|
219
|
-
'# Microservices',
|
|
220
|
-
'SERVICE_DISCOVERY_ENABLED=false',
|
|
221
|
-
'SERVICE_DISCOVERY_TYPE=filesystem',
|
|
222
|
-
'SERVICE_NAME=',
|
|
223
|
-
'SERVICE_VERSION=1.0.0',
|
|
224
|
-
];
|
|
225
|
-
const lines = [...baseLines, ...dbLines, ...placeholderLines];
|
|
226
|
-
fs.writeFileSync(fullPath, lines.join('\n') + '\n');
|
|
204
|
+
// Keep consistent with `zin key:generate` output.
|
|
205
|
+
const appKey = `base64:${appKeyBytes.toString('base64')}`;
|
|
206
|
+
const { dbLines } = buildDbOverrides(dbConnection);
|
|
207
|
+
const dbLinesBlock = dbLines.join('\n');
|
|
208
|
+
const template = readEnvScaffoldTemplate();
|
|
209
|
+
const content = renderEnvScaffold(template, {
|
|
210
|
+
APP_NAME: name,
|
|
211
|
+
PORT: String(port),
|
|
212
|
+
BASE_URL: baseUrl,
|
|
213
|
+
APP_KEY: appKey,
|
|
214
|
+
DB_CONNECTION: dbConnection,
|
|
215
|
+
SQLITE_DB_PATH: sqliteDbPath,
|
|
216
|
+
DB_LINES: dbLinesBlock,
|
|
217
|
+
});
|
|
218
|
+
fs.writeFileSync(fullPath, content.endsWith('\n') ? content : content + '\n');
|
|
227
219
|
return true;
|
|
228
220
|
}
|
|
229
221
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DistPackager.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/DistPackager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DistPackager.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/DistPackager.ts"],"names":[],"mappings":"AAsLA,eAAO,MAAM,YAAY;IACvB;;;OAGG;sBACe,MAAM,aAAY,MAAM,GAAmB,IAAI;EAgBjE,CAAC"}
|
|
@@ -49,6 +49,31 @@ const buildDistPackageJson = (rootPkg) => {
|
|
|
49
49
|
types: './start.d.ts',
|
|
50
50
|
default: './start.js',
|
|
51
51
|
},
|
|
52
|
+
'./cli': {
|
|
53
|
+
types: './src/cli.d.ts',
|
|
54
|
+
default: './src/cli.js',
|
|
55
|
+
},
|
|
56
|
+
'./proxy': {
|
|
57
|
+
types: './src/proxy.d.ts',
|
|
58
|
+
default: './src/proxy.js',
|
|
59
|
+
},
|
|
60
|
+
'./collections': {
|
|
61
|
+
types: './src/collections/index.d.ts',
|
|
62
|
+
default: './src/collections/index.js',
|
|
63
|
+
},
|
|
64
|
+
'./helper': {
|
|
65
|
+
types: './src/helper/index.d.ts',
|
|
66
|
+
default: './src/helper/index.js',
|
|
67
|
+
},
|
|
68
|
+
'./node': {
|
|
69
|
+
types: './src/node.d.ts',
|
|
70
|
+
default: './src/node.js',
|
|
71
|
+
},
|
|
72
|
+
'./routes/*': {
|
|
73
|
+
types: './routes/*.d.ts',
|
|
74
|
+
default: './routes/*.js',
|
|
75
|
+
},
|
|
76
|
+
'./package.json': './package.json',
|
|
52
77
|
},
|
|
53
78
|
dependencies: coerceDependencies(rootPkg.dependencies),
|
|
54
79
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnvFileLoader.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/EnvFileLoader.ts"],"names":[],"mappings":"AAQA,KAAK,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"EnvFileLoader.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/EnvFileLoader.ts"],"names":[],"mappings":"AAQA,KAAK,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAmIzD,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AA+FF,eAAO,MAAM,aAAa;qBAtEH,WAAW,KAAQ,SAAS;wBAmC1B,SAAS;mCAEI,YAAY,KAAG,IAAI;oBA+BpC,SAAS;EAO5B,CAAC"}
|
|
@@ -75,6 +75,13 @@ const parseEnvFile = (raw) => {
|
|
|
75
75
|
const rhs = withoutExport.slice(eq + 1);
|
|
76
76
|
const withoutComment = stripInlineComment(rhs);
|
|
77
77
|
const value = unquote(withoutComment);
|
|
78
|
+
// DX: treat empty assignments as "no-op" if the key already had a non-empty value earlier
|
|
79
|
+
// in the same file. This prevents accidental overrides like:
|
|
80
|
+
// KV_NAMESPACE_ID=abc
|
|
81
|
+
// ...
|
|
82
|
+
// KV_NAMESPACE_ID=
|
|
83
|
+
if (value.trim() === '' && (result[key]?.trim() ?? '') !== '')
|
|
84
|
+
continue;
|
|
78
85
|
result[key] = value;
|
|
79
86
|
}
|
|
80
87
|
return result;
|
|
@@ -83,6 +90,10 @@ const applyToProcessEnv = (values, overrideExisting) => {
|
|
|
83
90
|
for (const [key, value] of Object.entries(values)) {
|
|
84
91
|
if (!overrideExisting && safeEnvGet(key, '') !== '')
|
|
85
92
|
continue;
|
|
93
|
+
// DX: don't wipe an already-populated env var with an empty value from an env file.
|
|
94
|
+
// This avoids surprising behavior when env templates include duplicate keys with blanks.
|
|
95
|
+
if (value.trim() === '' && safeEnvGet(key, '').trim() !== '')
|
|
96
|
+
continue;
|
|
86
97
|
safeEnvSet(key, value);
|
|
87
98
|
}
|
|
88
99
|
// Compatibility helpers
|
|
@@ -169,6 +180,9 @@ const applyCliOverrides = (overrides) => {
|
|
|
169
180
|
safeEnvSet('PORT', String(overrides.port));
|
|
170
181
|
safeEnvSet('APP_PORT', String(overrides.port));
|
|
171
182
|
}
|
|
183
|
+
if (typeof overrides.cacheEnabled === 'boolean') {
|
|
184
|
+
safeEnvSet('CACHE_ENABLED', String(overrides.cacheEnabled));
|
|
185
|
+
}
|
|
172
186
|
// Keep PORT/APP_PORT in sync if only one exists.
|
|
173
187
|
if (safeEnvGet('PORT', '') === '' && safeEnvGet('APP_PORT', '') !== '') {
|
|
174
188
|
safeEnvSet('PORT', safeEnvGet('APP_PORT', ''));
|