@zintrust/core 0.1.18 → 0.1.20
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 +16 -10
- package/bin/zintrust-main.d.ts.map +1 -1
- package/bin/zintrust-main.js +9 -0
- package/package.json +11 -2
- package/public/error-pages/404.html +145 -0
- package/public/error-pages/500.html +266 -0
- package/public/error-pages/error.css +628 -0
- package/public/error-pages/error.js +428 -0
- package/public/index.html +1 -1
- package/public/zintrust.svg +30 -0
- package/routes/api.d.ts +7 -0
- package/routes/api.d.ts.map +1 -0
- package/routes/api.js +115 -0
- package/routes/broadcast.d.ts +9 -0
- package/routes/broadcast.d.ts.map +1 -0
- package/routes/broadcast.js +27 -0
- package/routes/health.d.ts +7 -0
- package/routes/health.d.ts.map +1 -0
- package/routes/health.js +127 -0
- package/routes/metrics.d.ts +9 -0
- package/routes/metrics.d.ts.map +1 -0
- package/routes/metrics.js +20 -0
- package/routes/openapi.d.ts +9 -0
- package/routes/openapi.d.ts.map +1 -0
- package/routes/openapi.js +76 -0
- package/routes/storage.d.ts +4 -0
- package/routes/storage.d.ts.map +1 -0
- package/routes/storage.js +35 -0
- package/src/boot/Application.d.ts +2 -2
- package/src/boot/Application.d.ts.map +1 -1
- package/src/boot/Application.js +18 -3
- package/src/boot/Server.d.ts +3 -2
- package/src/boot/Server.d.ts.map +1 -1
- package/src/boot/Server.js +39 -165
- package/src/boot/bootstrap.js +1 -1
- package/src/cache/Cache.d.ts +1 -1
- package/src/cache/Cache.d.ts.map +1 -1
- package/src/cache/CacheDriver.d.ts +4 -0
- package/src/cache/CacheDriver.d.ts.map +1 -1
- package/src/cache/drivers/KVDriver.d.ts +1 -1
- package/src/cache/drivers/KVDriver.d.ts.map +1 -1
- package/src/cache/drivers/MemoryDriver.d.ts +1 -1
- package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
- package/src/cache/drivers/MemoryDriver.js +16 -0
- package/src/cache/drivers/MongoDriver.d.ts +1 -1
- package/src/cache/drivers/MongoDriver.d.ts.map +1 -1
- package/src/cache/drivers/RedisDriver.d.ts +1 -1
- package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
- package/src/cli/CLI.d.ts.map +1 -1
- package/src/cli/CLI.js +12 -4
- package/src/cli/PromptHelper.d.ts.map +1 -1
- package/src/cli/PromptHelper.js +4 -3
- package/src/cli/commands/AddCommand.d.ts +2 -2
- package/src/cli/commands/AddCommand.d.ts.map +1 -1
- package/src/cli/commands/AddCommand.js +135 -58
- package/src/cli/commands/ConfigCommand.d.ts +1 -1
- package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
- package/src/cli/commands/CreateCommand.d.ts +15 -0
- package/src/cli/commands/CreateCommand.d.ts.map +1 -0
- package/src/cli/commands/CreateCommand.js +143 -0
- package/src/cli/commands/D1MigrateCommand.d.ts +1 -1
- package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/D1MigrateCommand.js +16 -20
- package/src/cli/commands/DbSeedCommand.d.ts +9 -0
- package/src/cli/commands/DbSeedCommand.d.ts.map +1 -0
- package/src/cli/commands/DbSeedCommand.js +171 -0
- package/src/cli/commands/DebugCommand.d.ts +1 -1
- package/src/cli/commands/DebugCommand.d.ts.map +1 -1
- package/src/cli/commands/FixCommand.d.ts +1 -1
- package/src/cli/commands/FixCommand.d.ts.map +1 -1
- package/src/cli/commands/JwtDevCommand.d.ts +8 -0
- package/src/cli/commands/JwtDevCommand.d.ts.map +1 -0
- package/src/cli/commands/JwtDevCommand.js +114 -0
- package/src/cli/commands/KeyGenerateCommand.d.ts +1 -1
- package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -1
- package/src/cli/commands/LogsCommand.d.ts +2 -2
- package/src/cli/commands/LogsCommand.d.ts.map +1 -1
- package/src/cli/commands/LogsCommand.js +36 -2
- package/src/cli/commands/MakeMailTemplateCommand.d.ts +1 -1
- package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -1
- package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +1 -1
- package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateCommand.d.ts +1 -1
- package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/MigrateCommand.js +291 -35
- package/src/cli/commands/NewCommand.d.ts +2 -2
- package/src/cli/commands/NewCommand.d.ts.map +1 -1
- package/src/cli/commands/NewCommand.js +38 -13
- package/src/cli/commands/PluginCommand.d.ts +1 -1
- package/src/cli/commands/PluginCommand.d.ts.map +1 -1
- package/src/cli/commands/PrepareCommand.d.ts +1 -1
- package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
- package/src/cli/commands/QACommand.d.ts +2 -2
- package/src/cli/commands/QACommand.d.ts.map +1 -1
- package/src/cli/commands/RoutesCommand.d.ts +10 -0
- package/src/cli/commands/RoutesCommand.d.ts.map +1 -0
- package/src/cli/commands/RoutesCommand.js +242 -0
- package/src/cli/commands/SimulateCommand.d.ts +1 -1
- package/src/cli/commands/SimulateCommand.d.ts.map +1 -1
- package/src/cli/commands/SimulateCommand.js +1 -1
- package/src/cli/commands/StartCommand.d.ts.map +1 -1
- package/src/cli/commands/StartCommand.js +90 -3
- package/src/cli/commands/UpgradeCommand.d.ts +16 -0
- package/src/cli/commands/UpgradeCommand.d.ts.map +1 -0
- package/src/cli/commands/UpgradeCommand.js +107 -0
- package/src/cli/commands/index.d.ts +3 -0
- package/src/cli/commands/index.d.ts.map +1 -1
- package/src/cli/commands/index.js +3 -0
- package/src/cli/commands/runner/index.d.ts +3 -0
- package/src/cli/commands/runner/index.d.ts.map +1 -0
- package/src/cli/commands/runner/index.js +139 -0
- package/src/cli/config/ConfigManager.d.ts +1 -1
- package/src/cli/config/ConfigManager.d.ts.map +1 -1
- package/src/cli/config/ConfigValidator.d.ts +1 -1
- package/src/cli/config/ConfigValidator.d.ts.map +1 -1
- package/src/cli/config/ConfigValidator.js +1 -1
- package/src/cli/d1/D1SqlMigrations.d.ts +20 -0
- package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -0
- package/src/cli/d1/D1SqlMigrations.js +224 -0
- package/src/cli/d1/WranglerConfig.d.ts +4 -0
- package/src/cli/d1/WranglerConfig.d.ts.map +1 -0
- package/src/cli/d1/WranglerConfig.js +122 -0
- package/src/cli/d1/WranglerD1.d.ts +11 -0
- package/src/cli/d1/WranglerD1.d.ts.map +1 -0
- package/src/cli/d1/WranglerD1.js +16 -0
- package/src/cli/env/EnvFileBackfill.d.ts +10 -0
- package/src/cli/env/EnvFileBackfill.d.ts.map +1 -0
- package/src/cli/env/EnvFileBackfill.js +64 -0
- package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ControllerGenerator.js +72 -22
- package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/FactoryGenerator.js +3 -1
- package/src/cli/scaffolding/GovernanceScaffolder.d.ts +23 -0
- package/src/cli/scaffolding/GovernanceScaffolder.d.ts.map +1 -0
- package/src/cli/scaffolding/GovernanceScaffolder.js +327 -0
- package/src/cli/scaffolding/MigrationGenerator.d.ts +10 -0
- package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/MigrationGenerator.js +137 -51
- package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ProjectScaffolder.js +54 -59
- package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/RouteGenerator.js +79 -43
- package/src/cli/scaffolding/SeederGenerator.d.ts +5 -0
- package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/SeederGenerator.js +63 -15
- package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ServiceScaffolder.js +24 -3
- package/src/cli/scaffolding/index.d.ts +2 -0
- package/src/cli/scaffolding/index.d.ts.map +1 -1
- package/src/cli/scaffolding/index.js +1 -0
- package/src/cli/utils/DistPackager.d.ts.map +1 -1
- package/src/cli/utils/DistPackager.js +8 -0
- package/src/common/index.d.ts +8 -0
- package/src/common/index.d.ts.map +1 -1
- package/src/common/index.js +28 -0
- package/src/common/utility.d.ts +38 -0
- package/src/common/utility.d.ts.map +1 -0
- package/src/common/utility.js +101 -0
- package/src/config/FileLogWriter.d.ts +2 -1
- package/src/config/FileLogWriter.d.ts.map +1 -1
- package/src/config/FileLogWriter.js +83 -2
- package/src/config/app.d.ts.map +1 -1
- package/src/config/app.js +3 -1
- package/src/config/broadcast.d.ts +1 -1
- package/src/config/broadcast.d.ts.map +1 -1
- package/src/config/broadcast.js +1 -1
- package/src/config/cache.d.ts +1 -1
- package/src/config/cache.d.ts.map +1 -1
- package/src/config/cloudflare.d.ts +1 -1
- package/src/config/cloudflare.d.ts.map +1 -1
- package/src/config/database.d.ts +7 -1
- package/src/config/database.d.ts.map +1 -1
- package/src/config/database.js +99 -7
- package/src/config/env.d.ts +6 -0
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +7 -0
- package/src/config/index.d.ts +8 -2
- package/src/config/index.d.ts.map +1 -1
- package/src/config/logging/KvLogger.js +1 -1
- package/src/config/logging/SlackLogger.js +2 -2
- package/src/config/middleware.d.ts +22 -2
- package/src/config/middleware.d.ts.map +1 -1
- package/src/config/middleware.js +179 -11
- package/src/config/notification.js +1 -1
- package/src/config/security.d.ts +1 -1
- package/src/config/security.js +1 -1
- package/src/config/storage.js +1 -1
- package/src/config/type.d.ts +8 -2
- package/src/config/type.d.ts.map +1 -1
- package/src/events/EventDispatcher.d.ts.map +1 -1
- package/src/events/EventDispatcher.js +6 -4
- package/src/exceptions/ZintrustError.d.ts +7 -0
- package/src/exceptions/ZintrustError.d.ts.map +1 -1
- package/src/exceptions/ZintrustError.js +56 -0
- package/src/features/Auth.d.ts +1 -1
- package/src/features/Auth.d.ts.map +1 -1
- package/src/features/Auth.js +3 -3
- package/src/features/Queue.js +1 -1
- package/src/functions/cloudflare.d.ts.map +1 -1
- package/src/functions/cloudflare.js +3 -14
- package/src/functions/deno.d.ts.map +1 -1
- package/src/functions/deno.js +3 -14
- package/src/functions/lambda.d.ts.map +1 -1
- package/src/functions/lambda.js +3 -14
- package/src/health/StartupHealthChecks.js +1 -1
- package/src/http/Controller.d.ts +2 -2
- package/src/http/Controller.d.ts.map +1 -1
- package/src/http/FileUpload.d.ts +68 -0
- package/src/http/FileUpload.d.ts.map +1 -0
- package/src/http/FileUpload.js +120 -0
- package/src/http/Kernel.d.ts +5 -5
- package/src/http/Kernel.d.ts.map +1 -1
- package/src/http/Kernel.js +139 -23
- package/src/http/Request.d.ts +20 -1
- package/src/http/Request.d.ts.map +1 -1
- package/src/http/Request.js +23 -0
- package/src/http/RequestContext.d.ts +6 -0
- package/src/http/RequestContext.d.ts.map +1 -1
- package/src/http/RequestContext.js +77 -1
- package/src/http/Response.d.ts +1 -1
- package/src/http/Response.d.ts.map +1 -1
- package/src/http/ValidationHelper.d.ts +78 -0
- package/src/http/ValidationHelper.d.ts.map +1 -0
- package/src/http/ValidationHelper.js +121 -0
- package/src/http/error-pages/ErrorPageRenderer.d.ts +17 -0
- package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -0
- package/src/http/error-pages/ErrorPageRenderer.js +88 -0
- package/src/http/middleware/BodyParsingMiddleware.d.ts +12 -0
- package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -0
- package/src/http/middleware/BodyParsingMiddleware.js +251 -0
- package/src/http/middleware/FileUploadMiddleware.d.ts +12 -0
- package/src/http/middleware/FileUploadMiddleware.d.ts.map +1 -0
- package/src/http/middleware/FileUploadMiddleware.js +74 -0
- package/src/http/parsers/BodyParsers.d.ts +32 -0
- package/src/http/parsers/BodyParsers.d.ts.map +1 -0
- package/src/http/parsers/BodyParsers.js +159 -0
- package/src/http/parsers/MultipartParser.d.ts +33 -0
- package/src/http/parsers/MultipartParser.d.ts.map +1 -0
- package/src/http/parsers/MultipartParser.js +129 -0
- package/src/http/parsers/MultipartParserRegistry.d.ts +34 -0
- package/src/http/parsers/MultipartParserRegistry.d.ts.map +1 -0
- package/src/http/parsers/MultipartParserRegistry.js +20 -0
- package/src/http/validated.d.ts +12 -0
- package/src/http/validated.d.ts.map +1 -0
- package/src/http/validated.js +41 -0
- package/src/index.d.ts +65 -7
- package/src/index.d.ts.map +1 -1
- package/src/index.js +59 -5
- package/src/microservices/RequestTracingMiddleware.d.ts +2 -2
- package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -1
- package/src/microservices/RequestTracingMiddleware.js +3 -0
- package/src/microservices/ServiceAuthMiddleware.d.ts +2 -2
- package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
- package/src/middleware/AuthMiddleware.d.ts +10 -0
- package/src/middleware/AuthMiddleware.d.ts.map +1 -0
- package/src/middleware/AuthMiddleware.js +16 -0
- package/src/middleware/CsrfMiddleware.d.ts +11 -1
- package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
- package/src/middleware/CsrfMiddleware.js +33 -0
- package/src/middleware/JwtAuthMiddleware.d.ts +11 -0
- package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -0
- package/src/middleware/JwtAuthMiddleware.js +73 -0
- package/src/middleware/LoggingMiddleware.d.ts.map +1 -1
- package/src/middleware/LoggingMiddleware.js +8 -3
- package/src/middleware/MiddlewareStack.d.ts +2 -2
- package/src/middleware/MiddlewareStack.d.ts.map +1 -1
- package/src/middleware/RateLimiter.d.ts +2 -2
- package/src/middleware/RateLimiter.d.ts.map +1 -1
- package/src/middleware/RateLimiter.js +26 -1
- package/src/middleware/SanitizeBodyMiddleware.d.ts +12 -0
- package/src/middleware/SanitizeBodyMiddleware.d.ts.map +1 -0
- package/src/middleware/SanitizeBodyMiddleware.js +31 -0
- package/src/middleware/SecurityMiddleware.d.ts +1 -1
- package/src/middleware/SecurityMiddleware.d.ts.map +1 -1
- package/src/middleware/SessionMiddleware.d.ts +1 -1
- package/src/middleware/SessionMiddleware.d.ts.map +1 -1
- package/src/middleware/ValidationMiddleware.d.ts +25 -0
- package/src/middleware/ValidationMiddleware.d.ts.map +1 -0
- package/src/middleware/ValidationMiddleware.js +251 -0
- package/src/migrations/MigrationDiscovery.d.ts +5 -0
- package/src/migrations/MigrationDiscovery.d.ts.map +1 -0
- package/src/migrations/MigrationDiscovery.js +16 -0
- package/src/migrations/MigrationLoader.d.ts +5 -0
- package/src/migrations/MigrationLoader.d.ts.map +1 -0
- package/src/migrations/MigrationLoader.js +43 -0
- package/src/migrations/MigrationLock.d.ts +4 -0
- package/src/migrations/MigrationLock.d.ts.map +1 -0
- package/src/migrations/MigrationLock.js +33 -0
- package/src/migrations/Migrator.d.ts +23 -0
- package/src/migrations/Migrator.d.ts.map +1 -0
- package/src/migrations/Migrator.js +4 -0
- package/src/migrations/MigratorFactory.d.ts +25 -0
- package/src/migrations/MigratorFactory.d.ts.map +1 -0
- package/src/migrations/MigratorFactory.js +323 -0
- package/src/migrations/schema/Blueprint.d.ts +5 -0
- package/src/migrations/schema/Blueprint.d.ts.map +1 -0
- package/src/migrations/schema/Blueprint.js +189 -0
- package/src/migrations/schema/Schema.d.ts +8 -0
- package/src/migrations/schema/Schema.d.ts.map +1 -0
- package/src/migrations/schema/Schema.js +141 -0
- package/src/migrations/schema/SchemaCompiler.d.ts +20 -0
- package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -0
- package/src/migrations/schema/SchemaCompiler.js +262 -0
- package/src/migrations/schema/index.d.ts +5 -0
- package/src/migrations/schema/index.d.ts.map +1 -0
- package/src/migrations/schema/index.js +3 -0
- package/src/migrations/schema/types.d.ts +86 -0
- package/src/migrations/schema/types.d.ts.map +1 -0
- package/src/migrations/schema/types.js +1 -0
- package/src/migrations/types.d.ts +45 -0
- package/src/migrations/types.d.ts.map +1 -0
- package/src/migrations/types.js +1 -0
- package/src/node-singletons/crypto.d.ts +1 -1
- package/src/node-singletons/crypto.d.ts.map +1 -1
- package/src/node-singletons/crypto.js +1 -1
- package/src/node-singletons/fs.d.ts +2 -2
- package/src/node-singletons/fs.d.ts.map +1 -1
- package/src/node-singletons/fs.js +1 -1
- package/src/node-singletons/util.d.ts +6 -0
- package/src/node-singletons/util.d.ts.map +1 -0
- package/src/node-singletons/util.js +5 -0
- package/src/node.d.ts +2 -0
- package/src/node.d.ts.map +1 -1
- package/src/node.js +7 -0
- package/src/observability/OpenTelemetry.d.ts +62 -0
- package/src/observability/OpenTelemetry.d.ts.map +1 -0
- package/src/observability/OpenTelemetry.js +167 -0
- package/src/observability/PrometheusMetrics.d.ts +25 -0
- package/src/observability/PrometheusMetrics.d.ts.map +1 -0
- package/src/observability/PrometheusMetrics.js +114 -0
- package/src/openapi/OpenApiGenerator.d.ts +68 -0
- package/src/openapi/OpenApiGenerator.d.ts.map +1 -0
- package/src/openapi/OpenApiGenerator.js +287 -0
- package/src/orm/Database.d.ts +4 -2
- package/src/orm/Database.d.ts.map +1 -1
- package/src/orm/Database.js +142 -29
- package/src/orm/DatabaseAdapter.d.ts +13 -0
- package/src/orm/DatabaseAdapter.d.ts.map +1 -1
- package/src/orm/DatabaseAdapterRegistry.d.ts.map +1 -1
- package/src/orm/DatabaseAdapterRegistry.js +3 -1
- package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
- package/src/orm/DatabaseRuntimeRegistration.js +4 -0
- package/src/orm/Model.d.ts +30 -2
- package/src/orm/Model.d.ts.map +1 -1
- package/src/orm/Model.js +255 -62
- package/src/orm/QueryBuilder.d.ts +22 -1
- package/src/orm/QueryBuilder.d.ts.map +1 -1
- package/src/orm/QueryBuilder.js +405 -95
- package/src/orm/Relationships.d.ts +7 -1
- package/src/orm/Relationships.d.ts.map +1 -1
- package/src/orm/Relationships.js +18 -0
- package/src/orm/SchemaCompiler.d.ts +9 -0
- package/src/orm/SchemaCompiler.d.ts.map +1 -0
- package/src/orm/SchemaCompiler.js +145 -0
- package/src/orm/adapters/D1Adapter.d.ts +1 -1
- package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
- package/src/orm/adapters/MySQLAdapter.d.ts +1 -1
- package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
- package/src/orm/adapters/MySQLAdapter.js +88 -69
- package/src/orm/adapters/PostgreSQLAdapter.d.ts +1 -1
- package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
- package/src/orm/adapters/PostgreSQLAdapter.js +88 -69
- package/src/orm/adapters/SQLServerAdapter.d.ts +1 -1
- package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
- package/src/orm/adapters/SQLiteAdapter.d.ts +1 -1
- package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
- package/src/orm/adapters/SQLiteAdapter.js +63 -3
- package/src/orm/maintenance/SqliteMaintenance.d.ts +5 -0
- package/src/orm/maintenance/SqliteMaintenance.d.ts.map +1 -0
- package/src/orm/maintenance/SqliteMaintenance.js +14 -0
- package/src/orm/migrations/MigrationStore.d.ts +38 -0
- package/src/orm/migrations/MigrationStore.d.ts.map +1 -0
- package/src/orm/migrations/MigrationStore.js +157 -0
- package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -1
- package/src/performance/Optimizer.d.ts +1 -0
- package/src/performance/Optimizer.d.ts.map +1 -1
- package/src/performance/Optimizer.js +37 -3
- package/src/profiling/MemoryProfiler.d.ts +1 -1
- package/src/profiling/MemoryProfiler.d.ts.map +1 -1
- package/src/profiling/N1Detector.d.ts +1 -1
- package/src/profiling/N1Detector.d.ts.map +1 -1
- package/src/profiling/QueryLogger.d.ts +1 -1
- package/src/profiling/QueryLogger.d.ts.map +1 -1
- package/src/profiling/RequestProfiler.d.ts +3 -3
- package/src/profiling/RequestProfiler.d.ts.map +1 -1
- package/src/routes/api.d.ts +2 -0
- package/src/routes/api.d.ts.map +1 -0
- package/src/routes/api.js +1 -0
- package/src/routes/broadcast.d.ts +2 -0
- package/src/routes/broadcast.d.ts.map +1 -0
- package/src/routes/broadcast.js +1 -0
- package/src/routes/health.d.ts +2 -0
- package/src/routes/health.d.ts.map +1 -0
- package/src/routes/health.js +1 -0
- package/src/routes/metrics.d.ts +2 -0
- package/src/routes/metrics.d.ts.map +1 -0
- package/src/routes/metrics.js +1 -0
- package/src/routes/storage.d.ts +2 -0
- package/src/routes/storage.d.ts.map +1 -0
- package/src/routes/storage.js +1 -0
- package/src/routing/CoreRoutes.d.ts +12 -0
- package/src/routing/CoreRoutes.d.ts.map +1 -0
- package/src/routing/CoreRoutes.js +151 -0
- package/src/routing/RouteRegistry.d.ts +39 -0
- package/src/routing/RouteRegistry.d.ts.map +1 -0
- package/src/routing/RouteRegistry.js +44 -0
- package/src/routing/Router.d.ts +26 -9
- package/src/routing/Router.d.ts.map +1 -1
- package/src/routing/Router.js +79 -35
- package/src/routing/common.d.ts +15 -0
- package/src/routing/common.d.ts.map +1 -0
- package/src/routing/common.js +47 -0
- package/src/routing/doc.d.ts +28 -0
- package/src/routing/doc.d.ts.map +1 -0
- package/src/routing/doc.js +95 -0
- package/src/routing/error.d.ts +21 -0
- package/src/routing/error.d.ts.map +1 -0
- package/src/routing/error.js +126 -0
- package/src/routing/errorPages.d.ts +14 -0
- package/src/routing/errorPages.d.ts.map +1 -0
- package/src/routing/errorPages.js +103 -0
- package/src/routing/publicRoot.d.ts +18 -0
- package/src/routing/publicRoot.d.ts.map +1 -0
- package/src/routing/publicRoot.js +49 -0
- package/src/runtime/PluginAutoImports.d.ts +21 -0
- package/src/runtime/PluginAutoImports.d.ts.map +1 -0
- package/src/runtime/PluginAutoImports.js +59 -0
- package/src/runtime/PluginManager.d.ts +1 -5
- package/src/runtime/PluginManager.d.ts.map +1 -1
- package/src/runtime/PluginManager.js +25 -18
- package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
- package/src/runtime/RuntimeAdapter.js +20 -1
- package/src/runtime/RuntimeDetector.d.ts +1 -1
- package/src/runtime/RuntimeDetector.d.ts.map +1 -1
- package/src/runtime/adapters/CloudflareAdapter.d.ts +1 -1
- package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/CloudflareAdapter.js +1 -1
- package/src/runtime/adapters/DenoAdapter.d.ts +1 -1
- package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/DenoAdapter.js +3 -3
- package/src/runtime/adapters/LambdaAdapter.d.ts +1 -1
- package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
- package/src/runtime/adapters/LambdaAdapter.js +1 -1
- package/src/runtime/adapters/NodeServerAdapter.d.ts +1 -1
- package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
- package/src/runtime/getKernel.d.ts +9 -0
- package/src/runtime/getKernel.d.ts.map +1 -0
- package/src/runtime/getKernel.js +27 -0
- package/src/scripts/TemplateImportsCheck.js +47 -7
- package/src/scripts/TemplateSync.js +92 -20
- package/src/security/Encryptor.d.ts.map +1 -1
- package/src/security/Encryptor.js +64 -7
- package/src/security/JwtManager.d.ts +1 -0
- package/src/security/JwtManager.d.ts.map +1 -1
- package/src/security/JwtManager.js +33 -0
- package/src/security/Sanitizer.d.ts +76 -0
- package/src/security/Sanitizer.d.ts.map +1 -0
- package/src/security/Sanitizer.js +412 -0
- package/src/security/TokenRevocation.d.ts +7 -0
- package/src/security/TokenRevocation.d.ts.map +1 -0
- package/src/security/TokenRevocation.js +57 -0
- package/src/seeders/SeederDiscovery.d.ts +5 -0
- package/src/seeders/SeederDiscovery.d.ts.map +1 -0
- package/src/seeders/SeederDiscovery.js +21 -0
- package/src/seeders/SeederLoader.d.ts +5 -0
- package/src/seeders/SeederLoader.d.ts.map +1 -0
- package/src/seeders/SeederLoader.js +60 -0
- package/src/seeders/types.d.ts +18 -0
- package/src/seeders/types.d.ts.map +1 -0
- package/src/seeders/types.js +1 -0
- package/src/session/SessionManager.js +1 -1
- package/src/start.d.ts +21 -0
- package/src/start.d.ts.map +1 -0
- package/src/start.js +60 -0
- package/src/templates/adapters/MySQLAdapter.ts.tpl +109 -85
- package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +129 -88
- package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -9
- package/src/templates/adapters/SQLiteAdapter.ts.tpl +78 -11
- package/src/templates/features/Queue.ts.tpl +2 -2
- package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +217 -0
- package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +3 -16
- package/src/templates/project/basic/app/Middleware/ProfilerMiddleware.ts.tpl +1 -3
- package/src/templates/project/basic/app/Middleware/index.ts.tpl +3 -8
- package/src/templates/project/basic/app/Models/Post.ts.tpl +2 -3
- package/src/templates/project/basic/app/Models/User.ts.tpl +1 -1
- package/src/templates/project/basic/app/Types/controller.ts.tpl +46 -0
- package/src/templates/project/basic/config/FileLogWriter.ts.tpl +5 -236
- package/src/templates/project/basic/config/SecretsManager.ts.tpl +13 -450
- package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +9 -268
- package/src/templates/project/basic/config/app.ts.tpl +13 -153
- package/src/templates/project/basic/config/broadcast.ts.tpl +15 -129
- package/src/templates/project/basic/config/cache.ts.tpl +15 -92
- package/src/templates/project/basic/config/cloudflare.ts.tpl +4 -39
- package/src/templates/project/basic/config/constants.ts.tpl +9 -65
- package/src/templates/project/basic/config/database.ts.tpl +29 -116
- package/src/templates/project/basic/config/env.ts.tpl +5 -169
- package/src/templates/project/basic/config/features.ts.tpl +6 -54
- package/src/templates/project/basic/config/index.ts.tpl +27 -24
- package/src/templates/project/basic/config/logger.ts.tpl +5 -381
- package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +1 -1
- package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +2 -2
- package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +1 -1
- package/src/templates/project/basic/config/mail.ts.tpl +15 -115
- package/src/templates/project/basic/config/microservices.ts.tpl +11 -97
- package/src/templates/project/basic/config/middleware.ts.tpl +27 -18
- package/src/templates/project/basic/config/notification.ts.tpl +14 -127
- package/src/templates/project/basic/config/queue.ts.tpl +16 -79
- package/src/templates/project/basic/config/security.ts.tpl +11 -163
- package/src/templates/project/basic/config/startup.ts.tpl +10 -21
- package/src/templates/project/basic/config/storage.ts.tpl +15 -133
- package/src/templates/project/basic/config/type.ts.tpl +33 -441
- package/src/templates/project/basic/database/factories/UserFactory.ts.tpl +80 -0
- package/src/templates/project/basic/database/migrations/create_tasks_table.ts.tpl +28 -0
- package/src/templates/project/basic/database/migrations/create_users_table.ts.tpl +29 -0
- package/src/templates/project/basic/database/seeders/DatabaseSeeder.ts.tpl +19 -0
- package/src/templates/project/basic/database/seeders/UserSeeder.ts.tpl +18 -0
- package/src/templates/project/basic/database/seeders/index.ts.tpl +2 -0
- package/src/templates/project/basic/package.json.tpl +1 -1
- package/src/templates/project/basic/routes/api.ts.tpl +74 -36
- package/src/templates/project/basic/routes/health.ts.tpl +1 -6
- package/src/templates/project/basic/routes/metrics.ts.tpl +22 -0
- package/src/templates/project/basic/src/index.ts.tpl +7 -80
- package/src/templates/project/basic/tsconfig.json.tpl +12 -13
- package/src/testing/TestEnvironment.d.ts +40 -0
- package/src/testing/TestEnvironment.d.ts.map +1 -0
- package/src/testing/TestEnvironment.js +141 -0
- package/src/testing/TestHttp.d.ts +29 -0
- package/src/testing/TestHttp.d.ts.map +1 -0
- package/src/testing/TestHttp.js +96 -0
- package/src/testing/index.d.ts +5 -0
- package/src/testing/index.d.ts.map +1 -0
- package/src/testing/index.js +2 -0
- package/src/time/DateTime.d.ts +181 -0
- package/src/time/DateTime.d.ts.map +1 -0
- package/src/time/DateTime.js +300 -0
- package/src/time/index.d.ts +7 -0
- package/src/time/index.d.ts.map +1 -0
- package/src/time/index.js +5 -0
- package/src/tools/http/Http.d.ts.map +1 -1
- package/src/tools/http/Http.js +4 -0
- package/src/tools/mail/drivers/Smtp.js +1 -1
- package/src/tools/queue/drivers/InMemory.d.ts +1 -1
- package/src/tools/queue/drivers/InMemory.d.ts.map +1 -1
- package/src/tools/queue/drivers/InMemory.js +1 -1
- package/src/tools/queue/drivers/Redis.d.ts +1 -1
- package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
- package/src/tools/queue/drivers/Redis.js +1 -1
- package/src/validation/ValidationError.d.ts.map +1 -1
- package/src/validation/ValidationError.js +4 -2
- package/src/validation/Validator.d.ts +49 -16
- package/src/validation/Validator.d.ts.map +1 -1
- package/src/validation/Validator.js +307 -5
- package/src/common/uuid.d.ts +0 -3
- package/src/common/uuid.d.ts.map +0 -1
- package/src/common/uuid.js +0 -30
- package/src/templates/project/basic/.env.example.tpl +0 -74
- package/src/templates/project/basic/.env.tpl +0 -166
- package/src/templates/project/basic/database/migrations/index.ts.tpl +0 -2
package/src/cache/Cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAmHtD,KAAK,UAAU,GAAG,QAAQ,CAAC;IACzB,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,WAAW,CAAC;CAC9B,CAAC,CAAC;AA0CH,eAAO,MAAM,KAAK;UA1FC,CAAC,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;UAQlC,CAAC,OAAO,MAAM,SAAS,CAAC,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kBAOjD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;iBAOtB,OAAO,CAAC,IAAI,CAAC;eAOb,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;qBAQ3B,WAAW;mBAaX,MAAM,KAAG,UAAU;iBAmCvB,IAAI;EAcpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,KAAK;UAxGC,CAAC,OAAO,MAAM,KAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;UAQlC,CAAC,OAAO,MAAM,SAAS,CAAC,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;kBAOjD,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;iBAOtB,OAAO,CAAC,IAAI,CAAC;eAOb,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;qBAQ3B,WAAW;mBAaX,MAAM,KAAG,UAAU;iBAmCvB,IAAI;EAmBI,CAAC"}
|
|
@@ -23,6 +23,10 @@ export interface CacheDriver {
|
|
|
23
23
|
* Check if an item exists in the cache
|
|
24
24
|
*/
|
|
25
25
|
has(key: string): Promise<boolean>;
|
|
26
|
+
/**
|
|
27
|
+
* Dispose of resources (optional cleanup method)
|
|
28
|
+
*/
|
|
29
|
+
dispose?(): Promise<void>;
|
|
26
30
|
}
|
|
27
31
|
export declare const CACHE_DRIVER_INTERFACE = "CacheDriver";
|
|
28
32
|
//# sourceMappingURL=CacheDriver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheDriver.d.ts","sourceRoot":"","sources":["../../../src/cache/CacheDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEvC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"CacheDriver.d.ts","sourceRoot":"","sources":["../../../src/cache/CacheDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEvC;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC;;OAEG;IACH,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAGD,eAAO,MAAM,sBAAsB,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KVDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/KVDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"KVDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/KVDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAoDtD;;GAEG;AACH,eAAO,MAAM,QAAQ;kBAhDF,WAAW;EAkD5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/MemoryDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/MemoryDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA0EtD;;GAEG;AACH,eAAO,MAAM,YAAY;kBAtEN,WAAW;EAwE5B,CAAC"}
|
|
@@ -9,6 +9,17 @@
|
|
|
9
9
|
*/
|
|
10
10
|
const create = () => {
|
|
11
11
|
const storage = new Map();
|
|
12
|
+
// Background cleanup interval (runs every 60 seconds)
|
|
13
|
+
const cleanupInterval = setInterval(() => {
|
|
14
|
+
const now = Date.now();
|
|
15
|
+
for (const [key, item] of storage.entries()) {
|
|
16
|
+
if (item.expires !== null && item.expires < now) {
|
|
17
|
+
storage.delete(key);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}, 60_000); // 60 seconds
|
|
21
|
+
// Unref so it doesn't keep process alive
|
|
22
|
+
cleanupInterval.unref();
|
|
12
23
|
return {
|
|
13
24
|
async get(key) {
|
|
14
25
|
await Promise.resolve();
|
|
@@ -45,6 +56,11 @@ const create = () => {
|
|
|
45
56
|
}
|
|
46
57
|
return true;
|
|
47
58
|
},
|
|
59
|
+
async dispose() {
|
|
60
|
+
clearInterval(cleanupInterval);
|
|
61
|
+
storage.clear();
|
|
62
|
+
await Promise.resolve();
|
|
63
|
+
},
|
|
48
64
|
};
|
|
49
65
|
};
|
|
50
66
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* MongoDB Cache Driver
|
|
3
3
|
* Uses MongoDB Atlas Data API (HTTPS) for zero-dependency integration
|
|
4
4
|
*/
|
|
5
|
-
import { CacheDriver } from '../CacheDriver';
|
|
5
|
+
import type { CacheDriver } from '../CacheDriver';
|
|
6
6
|
/**
|
|
7
7
|
* MongoDB Cache Driver
|
|
8
8
|
* Uses MongoDB Atlas Data API (HTTPS) for zero-dependency integration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/MongoDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"MongoDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/MongoDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD;;;;GAIG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;cACO,WAAW;EA4ErB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/RedisDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"RedisDriver.d.ts","sourceRoot":"","sources":["../../../../src/cache/drivers/RedisDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA+EtD;;GAEG;AACH,eAAO,MAAM,WAAW;kBA1EL,WAAW;EA4E5B,CAAC"}
|
package/src/cli/CLI.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../../src/cli/CLI.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../../src/cli/CLI.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqCH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,IAAI;IACnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,IAAI,OAAO,CAAC;CACvB;AA2LD;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG;cACJ,IAAI;EAed,CAAC"}
|
package/src/cli/CLI.js
CHANGED
|
@@ -5,9 +5,12 @@
|
|
|
5
5
|
import { AddCommand } from './commands/AddCommand.js';
|
|
6
6
|
import { BroadcastWorkCommand } from './commands/BroadcastWorkCommand.js';
|
|
7
7
|
import { ConfigCommand } from './commands/ConfigCommand.js';
|
|
8
|
+
import { AddMigrationCommand, CreateCommand, CreateMigrationCommand, } from './commands/CreateCommand.js';
|
|
8
9
|
import { D1MigrateCommand } from './commands/D1MigrateCommand.js';
|
|
10
|
+
import { DbSeedCommand } from './commands/DbSeedCommand.js';
|
|
9
11
|
import { DebugCommand } from './commands/DebugCommand.js';
|
|
10
12
|
import { FixCommand } from './commands/FixCommand.js';
|
|
13
|
+
import { JwtDevCommand } from './commands/JwtDevCommand.js';
|
|
11
14
|
import { KeyGenerateCommand } from './commands/KeyGenerateCommand.js';
|
|
12
15
|
import { MakeMailTemplateCommand } from './commands/MakeMailTemplateCommand.js';
|
|
13
16
|
import { MakeNotificationTemplateCommand } from './commands/MakeNotificationTemplateCommand.js';
|
|
@@ -18,10 +21,12 @@ import { PluginCommand } from './commands/PluginCommand.js';
|
|
|
18
21
|
import { PrepareCommand } from './commands/PrepareCommand.js';
|
|
19
22
|
import { QACommand } from './commands/QACommand.js';
|
|
20
23
|
import { QueueCommand } from './commands/QueueCommand.js';
|
|
24
|
+
import { RoutesCommand } from './commands/RoutesCommand.js';
|
|
21
25
|
import { SecretsCommand } from './commands/SecretsCommand.js';
|
|
22
26
|
import { SimulateCommand } from './commands/SimulateCommand.js';
|
|
23
27
|
import { StartCommand } from './commands/StartCommand.js';
|
|
24
28
|
import { TemplatesCommand } from './commands/TemplatesCommand.js';
|
|
29
|
+
import { UpgradeCommand } from './commands/UpgradeCommand.js';
|
|
25
30
|
import { ErrorHandler } from './ErrorHandler.js';
|
|
26
31
|
import { esmDirname } from '../common/index.js';
|
|
27
32
|
import { Logger } from '../config/logger.js';
|
|
@@ -30,10 +35,6 @@ import { readFileSync } from '../node-singletons/fs.js';
|
|
|
30
35
|
import { join } from '../node-singletons/path.js';
|
|
31
36
|
import { Command } from 'commander';
|
|
32
37
|
const __dirname = esmDirname(import.meta.url);
|
|
33
|
-
/**
|
|
34
|
-
* CLI - Main CLI Class
|
|
35
|
-
* Orchestrates all CLI commands using Commander
|
|
36
|
-
*/
|
|
37
38
|
/**
|
|
38
39
|
* Load version from package.json
|
|
39
40
|
*/
|
|
@@ -68,13 +69,18 @@ const setupProgram = (program, version) => {
|
|
|
68
69
|
const registerCommands = (program) => {
|
|
69
70
|
const commands = [
|
|
70
71
|
NewCommand.create(),
|
|
72
|
+
UpgradeCommand.create(),
|
|
71
73
|
PrepareCommand,
|
|
72
74
|
AddCommand.create(),
|
|
75
|
+
CreateCommand.create(),
|
|
76
|
+
CreateMigrationCommand.create(),
|
|
77
|
+
AddMigrationCommand.create(),
|
|
73
78
|
StartCommand.create(),
|
|
74
79
|
QueueCommand.create(),
|
|
75
80
|
BroadcastWorkCommand.create(),
|
|
76
81
|
NotificationWorkCommand.create(),
|
|
77
82
|
MigrateCommand.create(),
|
|
83
|
+
DbSeedCommand.create(),
|
|
78
84
|
D1MigrateCommand.create(),
|
|
79
85
|
DebugCommand.create(),
|
|
80
86
|
SecretsCommand.create(),
|
|
@@ -87,6 +93,8 @@ const registerCommands = (program) => {
|
|
|
87
93
|
TemplatesCommand,
|
|
88
94
|
MakeMailTemplateCommand.create(),
|
|
89
95
|
MakeNotificationTemplateCommand.create(),
|
|
96
|
+
RoutesCommand.create(),
|
|
97
|
+
JwtDevCommand,
|
|
90
98
|
];
|
|
91
99
|
for (const command of commands) {
|
|
92
100
|
program.addCommand(command.getCommand());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptHelper.d.ts","sourceRoot":"","sources":["../../../src/cli/PromptHelper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;IACvB;;OAEG;sBACqB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMlE;;OAEG;8BAC6B,MAAM,gBAAe,OAAO,GAAU,OAAO,CAAC,MAAM,CAAC;IAuBrF;;OAEG;6BAEU,MAAM,gBACJ,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"PromptHelper.d.ts","sourceRoot":"","sources":["../../../src/cli/PromptHelper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;IACvB;;OAEG;sBACqB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAMlE;;OAEG;8BAC6B,MAAM,gBAAe,OAAO,GAAU,OAAO,CAAC,MAAM,CAAC;IAuBrF;;OAEG;6BAEU,MAAM,gBACJ,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC;IAuBlB;;OAEG;uBACqB,MAAM,gBAAsB,OAAO,GAAU,OAAO,CAAC,MAAM,CAAC;IAqBpF;;OAEG;uCAEkB,MAAM,EAAE,gBACd,OAAO,GACnB,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBpB;;OAEG;qBAEQ,MAAM,mBACC,OAAO,gBACV,OAAO,GACnB,OAAO,CAAC,OAAO,CAAC;IAiBnB;;OAEG;wBAEQ,MAAM,WACN,MAAM,EAAE,kBACF,MAAM,gBACR,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC;IAkBlB;;OAEG;uBAEQ,MAAM,iBACD,MAAM,gBACP,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC;EAgBlB,CAAC"}
|
package/src/cli/PromptHelper.js
CHANGED
|
@@ -51,9 +51,10 @@ export const PromptHelper = Object.freeze({
|
|
|
51
51
|
name: 'database',
|
|
52
52
|
message: 'Select database:',
|
|
53
53
|
choices: [
|
|
54
|
-
{ name: 'PostgreSQL
|
|
55
|
-
{ name: 'MySQL', value: 'mysql' },
|
|
56
|
-
{ name: 'SQLite', value: 'sqlite' },
|
|
54
|
+
{ name: 'PostgreSQL — Production-ready relational DB', value: 'postgresql' },
|
|
55
|
+
{ name: 'MySQL — Production-ready relational DB', value: 'mysql' },
|
|
56
|
+
{ name: 'SQLite — Local dev (file-based)', value: 'sqlite' },
|
|
57
|
+
{ name: 'd1-proxy — Cloudflare D1 via HTTPS proxy', value: 'd1-remote' },
|
|
57
58
|
],
|
|
58
59
|
default: defaultDb,
|
|
59
60
|
},
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Add Command - Phase 4 Integration
|
|
3
3
|
* Add services and features to existing Zintrust project
|
|
4
4
|
*/
|
|
5
|
-
import { IBaseCommand } from '../BaseCommand';
|
|
6
|
-
import { ResponseField } from '../scaffolding/ResponseFactoryGenerator';
|
|
5
|
+
import type { IBaseCommand } from '../BaseCommand';
|
|
6
|
+
import type { ResponseField } from '../scaffolding/ResponseFactoryGenerator';
|
|
7
7
|
interface ServicePromptAnswers {
|
|
8
8
|
name: string;
|
|
9
9
|
domain: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/AddCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"AddCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/AddCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAarE,OAAO,KAAK,EAEV,aAAa,EAAC,MAAM,2CAA2C,CAAC;AA0ClE,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAAC;IAChC,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;CAC7C;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,4BAA4B;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAsmCD;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;cACO,YAAY;IAWtB;;;OAGG;;2CAnlC2C,MAAM,KAAG,OAAO,CAAC,oBAAoB,CAAC;mCA2EhD,OAAO,CAAC,oBAAoB,CAAC;qCA8D3B,OAAO,CAAC,sBAAsB,CAAC;iCAwGnC,OAAO,CAAC,kBAAkB,CAAC;sCA4DtB,OAAO,CAAC,uBAAuB,CAAC;kCAwDpC,OAAO,CAAC,mBAAmB,CAAC;mCAkE3B,OAAO,CAAC,oBAAoB,CAAC;kCA8I9B,OAAO,CAAC,mBAAmB,CAAC;0CAiHpB,OAAO,CAAC,2BAA2B,CAAC;yCAwFrC,OAAO,CAAC,MAAM,CAAC;2DAkBpC,MAAM,KAC1B,OAAO,CAAC,4BAA4B,CAAC;4CAoHzB,MAAM,KAClB,OAAO,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,KAAK,CAAA;SAAE,CAAC;iDAlE5C,MAAM,KAAG,aAAa,EAAE;;EA+RtE,CAAC"}
|
|
@@ -6,14 +6,17 @@ import { BaseCommand } from '../BaseCommand.js';
|
|
|
6
6
|
import { ControllerGenerator } from '../scaffolding/ControllerGenerator.js';
|
|
7
7
|
import { FactoryGenerator } from '../scaffolding/FactoryGenerator.js';
|
|
8
8
|
import { FeatureScaffolder } from '../scaffolding/FeatureScaffolder.js';
|
|
9
|
+
import { FileGenerator } from '../scaffolding/FileGenerator.js';
|
|
10
|
+
import { GovernanceScaffolder } from '../scaffolding/GovernanceScaffolder.js';
|
|
9
11
|
import { MigrationGenerator } from '../scaffolding/MigrationGenerator.js';
|
|
10
12
|
import { ModelGenerator } from '../scaffolding/ModelGenerator.js';
|
|
11
13
|
import { RequestFactoryGenerator } from '../scaffolding/RequestFactoryGenerator.js';
|
|
12
|
-
import { ResponseFactoryGenerator
|
|
14
|
+
import { ResponseFactoryGenerator } from '../scaffolding/ResponseFactoryGenerator.js';
|
|
13
15
|
import { RouteGenerator } from '../scaffolding/RouteGenerator.js';
|
|
14
16
|
import { SeederGenerator } from '../scaffolding/SeederGenerator.js';
|
|
15
17
|
import { ServiceScaffolder } from '../scaffolding/ServiceScaffolder.js';
|
|
16
18
|
import { WorkflowGenerator } from '../scaffolding/WorkflowGenerator.js';
|
|
19
|
+
import { CommonUtils } from '../../common/index.js';
|
|
17
20
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
18
21
|
import fs from '../../node-singletons/fs.js';
|
|
19
22
|
import * as path from '../../node-singletons/path.js';
|
|
@@ -21,12 +24,14 @@ import { PluginManager } from '../../runtime/PluginManager.js';
|
|
|
21
24
|
import inquirer from 'inquirer';
|
|
22
25
|
const addOptions = (command) => {
|
|
23
26
|
command
|
|
24
|
-
.argument('<type>', 'What to add: service, feature, migration, model, controller, routes, factory, seeder, requestfactory, responsefactory, or
|
|
25
|
-
.argument('[name]', 'Name of service/feature/migration/model/controller/factory/seeder/requestfactory/responsefactory/workflow')
|
|
27
|
+
.argument('<type>', 'What to add: service, feature, migration, model, controller, routes, factory, seeder, requestfactory, responsefactory, workflow, or governance')
|
|
28
|
+
.argument('[name]', 'Name of service/feature/migration/model/controller/factory/seeder/requestfactory/responsefactory/workflow (governance takes no name)')
|
|
26
29
|
.option('--package-manager <pm>', 'Specify package manager to use when installing plugins (npm|yarn|pnpm)')
|
|
30
|
+
.option('--domain <name>', 'Service domain (e.g., ecommerce, payments) - for services')
|
|
27
31
|
.option('--database <type>', 'Database (shared|isolated) - for services')
|
|
28
32
|
.option('--auth <strategy>', 'Auth strategy (api-key|jwt|none|custom) - for services')
|
|
29
33
|
.option('--port <number>', 'Service port - for services')
|
|
34
|
+
.option('--service <path>', 'Service path (relative to project root) - for features')
|
|
30
35
|
.option('--with-test', 'Generate test files - for features')
|
|
31
36
|
.option('--controller-type <type>', 'Controller type: crud, resource, api, graphql, websocket, webhook - for controllers')
|
|
32
37
|
.option('--soft-delete', 'Add soft delete to model')
|
|
@@ -172,9 +177,31 @@ const promptMigrationConfig = async () => {
|
|
|
172
177
|
},
|
|
173
178
|
]);
|
|
174
179
|
};
|
|
175
|
-
const
|
|
180
|
+
const pluralize = (snake) => (snake.endsWith('s') ? snake : `${snake}s`);
|
|
181
|
+
const findMigrationBySuffix = (migrationsPath, suffix) => {
|
|
182
|
+
const files = FileGenerator.listFiles(migrationsPath, false);
|
|
183
|
+
for (const file of files) {
|
|
184
|
+
if (path.basename(file).endsWith(suffix))
|
|
185
|
+
return file;
|
|
186
|
+
}
|
|
187
|
+
return undefined;
|
|
188
|
+
};
|
|
189
|
+
const buildCreateTableMigrationName = (model) => {
|
|
190
|
+
const modelSnake = CommonUtils.toSnakeCase(model).replaceAll(/[^a-z0-9_]+/g, '_');
|
|
191
|
+
const tablePlural = pluralize(modelSnake);
|
|
192
|
+
return `create_${tablePlural}_table`;
|
|
193
|
+
};
|
|
194
|
+
const buildAddColumnMigrationName = (column, model) => {
|
|
195
|
+
const colSnake = CommonUtils.toSnakeCase(column).replaceAll(/[^a-z0-9_]+/g, '_');
|
|
196
|
+
const modelSnake = CommonUtils.toSnakeCase(model).replaceAll(/[^a-z0-9_]+/g, '_');
|
|
197
|
+
const tablePlural = pluralize(modelSnake);
|
|
198
|
+
return `add_${colSnake}_${tablePlural}_table`;
|
|
199
|
+
};
|
|
200
|
+
const addMigration = async (cmd, migrationArgs, opts) => {
|
|
176
201
|
const projectRoot = process.cwd();
|
|
177
|
-
let name =
|
|
202
|
+
let name = migrationArgs[0] ?? '';
|
|
203
|
+
let table;
|
|
204
|
+
let column;
|
|
178
205
|
if (name === '' && opts.noInteractive !== true) {
|
|
179
206
|
const answers = await promptMigrationConfig();
|
|
180
207
|
name = answers.name;
|
|
@@ -184,11 +211,32 @@ const addMigration = async (cmd, migrationName, opts) => {
|
|
|
184
211
|
throw ErrorFactory.createValidationError('Migration name is required');
|
|
185
212
|
}
|
|
186
213
|
const migrationsPath = path.join(projectRoot, 'database', 'migrations');
|
|
214
|
+
// New shorthand semantics:
|
|
215
|
+
// `zin add migration <column> <model>` => add_<column>_<models>_table
|
|
216
|
+
if (migrationArgs.length >= 2) {
|
|
217
|
+
const columnArg = migrationArgs[0] ?? '';
|
|
218
|
+
const modelArg = migrationArgs[1] ?? '';
|
|
219
|
+
if (columnArg === '' || modelArg === '') {
|
|
220
|
+
throw ErrorFactory.createValidationError('Usage: zin add migration <column> <model>');
|
|
221
|
+
}
|
|
222
|
+
const createName = buildCreateTableMigrationName(modelArg);
|
|
223
|
+
const createSuffix = `_${createName}.ts`;
|
|
224
|
+
const existingCreate = findMigrationBySuffix(migrationsPath, createSuffix);
|
|
225
|
+
if (existingCreate === undefined) {
|
|
226
|
+
throw ErrorFactory.createCliError(`Missing required create migration for model '${modelArg}'. Create it first: zin create migration ${modelArg}`);
|
|
227
|
+
}
|
|
228
|
+
name = buildAddColumnMigrationName(columnArg, modelArg);
|
|
229
|
+
table = pluralize(CommonUtils.toSnakeCase(modelArg).replaceAll(/[^a-z0-9_]+/g, '_'));
|
|
230
|
+
// Store the normalized column name for generator placeholder.
|
|
231
|
+
column = CommonUtils.toSnakeCase(columnArg).replaceAll(/[^a-z0-9_]+/g, '_');
|
|
232
|
+
}
|
|
187
233
|
cmd.info(`Creating migration: ${name}...`);
|
|
188
234
|
const result = await MigrationGenerator.generateMigration({
|
|
189
235
|
name,
|
|
190
236
|
migrationsPath,
|
|
191
|
-
type:
|
|
237
|
+
type: opts.type ?? undefined,
|
|
238
|
+
table,
|
|
239
|
+
column,
|
|
192
240
|
});
|
|
193
241
|
if (result.success === false)
|
|
194
242
|
throw ErrorFactory.createCliError(result.message);
|
|
@@ -386,6 +434,7 @@ const addFactory = async (cmd, factoryName, opts) => {
|
|
|
386
434
|
throw ErrorFactory.createValidationError('Model name is required for factory generation');
|
|
387
435
|
}
|
|
388
436
|
const factoriesPath = path.join(projectRoot, 'database', 'factories');
|
|
437
|
+
ensureDirectoryExists(factoriesPath);
|
|
389
438
|
cmd.info(`Creating factory: ${config.name} for model ${config.modelName}...`);
|
|
390
439
|
const result = await FactoryGenerator.generateFactory({
|
|
391
440
|
factoryName: config.name,
|
|
@@ -426,6 +475,11 @@ const displaySeederSuccess = (cmd, name, count, filePath, states, relationships)
|
|
|
426
475
|
}
|
|
427
476
|
cmd.info(`\nOther methods:\n await ${name}.reset() // Truncate table\n await ${name}.runWithTruncate() // Reset and seed`);
|
|
428
477
|
};
|
|
478
|
+
const displayDatabaseSeederSuccess = (cmd, filePath) => {
|
|
479
|
+
cmd.success(`Seeder 'DatabaseSeeder' created successfully!`);
|
|
480
|
+
cmd.info(`File: ${path.basename(filePath)}`);
|
|
481
|
+
cmd.info(`\nNext steps:\n • Add additional seeders into this directory\n • Run: zin db:seed`);
|
|
482
|
+
};
|
|
429
483
|
const promptSeederConfig = async () => {
|
|
430
484
|
return inquirer.prompt([
|
|
431
485
|
{
|
|
@@ -438,6 +492,7 @@ const promptSeederConfig = async () => {
|
|
|
438
492
|
type: 'input',
|
|
439
493
|
name: 'model',
|
|
440
494
|
message: 'Model name (e.g., User, Post):',
|
|
495
|
+
when: (ans) => ans.name !== 'DatabaseSeeder',
|
|
441
496
|
validate: (v) => /^[A-Z][a-zA-Z\d]*$/.test(v) || 'Must be PascalCase',
|
|
442
497
|
},
|
|
443
498
|
{
|
|
@@ -445,6 +500,7 @@ const promptSeederConfig = async () => {
|
|
|
445
500
|
name: 'count',
|
|
446
501
|
message: 'Number of records to seed (1-100,000):',
|
|
447
502
|
default: '100',
|
|
503
|
+
when: (ans) => ans.name !== 'DatabaseSeeder',
|
|
448
504
|
validate: (v) => {
|
|
449
505
|
const num = Number.parseInt(v, 10);
|
|
450
506
|
return (num >= 1 && num <= 100000) || 'Must be between 1 and 100,000';
|
|
@@ -455,18 +511,21 @@ const promptSeederConfig = async () => {
|
|
|
455
511
|
name: 'states',
|
|
456
512
|
message: 'Use state distribution (50% active, 30% inactive, 20% deleted)?',
|
|
457
513
|
default: false,
|
|
514
|
+
when: (ans) => ans.name !== 'DatabaseSeeder',
|
|
458
515
|
},
|
|
459
516
|
{
|
|
460
517
|
type: 'confirm',
|
|
461
518
|
name: 'relationships',
|
|
462
519
|
message: 'Seed with relationships?',
|
|
463
520
|
default: false,
|
|
521
|
+
when: (ans) => ans.name !== 'DatabaseSeeder',
|
|
464
522
|
},
|
|
465
523
|
{
|
|
466
524
|
type: 'confirm',
|
|
467
525
|
name: 'truncate',
|
|
468
526
|
message: 'Truncate table before seeding?',
|
|
469
527
|
default: true,
|
|
528
|
+
when: (ans) => ans.name !== 'DatabaseSeeder',
|
|
470
529
|
},
|
|
471
530
|
]);
|
|
472
531
|
};
|
|
@@ -487,11 +546,19 @@ const addSeeder = async (cmd, seederName, opts) => {
|
|
|
487
546
|
else if (config.name === '') {
|
|
488
547
|
throw ErrorFactory.createValidationError('Seeder name is required');
|
|
489
548
|
}
|
|
549
|
+
const seedersPath = path.join(projectRoot, 'database', 'seeders');
|
|
550
|
+
ensureDirectoryExists(seedersPath);
|
|
551
|
+
if (config.name === 'DatabaseSeeder') {
|
|
552
|
+
cmd.info('Creating seeder: DatabaseSeeder...');
|
|
553
|
+
const result = await SeederGenerator.generateDatabaseSeeder({ seedersPath });
|
|
554
|
+
if (result.success === false)
|
|
555
|
+
throw ErrorFactory.createCliError(result.message);
|
|
556
|
+
displayDatabaseSeederSuccess(cmd, result.filePath);
|
|
557
|
+
return;
|
|
558
|
+
}
|
|
490
559
|
if (config.modelName === '') {
|
|
491
560
|
throw ErrorFactory.createValidationError('Model name is required for seeder generation');
|
|
492
561
|
}
|
|
493
|
-
const seedersPath = path.join(projectRoot, 'database', 'seeders');
|
|
494
|
-
ensureDirectoryExists(seedersPath);
|
|
495
562
|
cmd.info(`Creating seeder: ${config.name} for model ${config.modelName}...`);
|
|
496
563
|
const result = await SeederGenerator.generateSeeder({
|
|
497
564
|
seederName: config.name,
|
|
@@ -739,48 +806,65 @@ const addWorkflow = async (cmd, workflowName, opts) => {
|
|
|
739
806
|
throw ErrorFactory.createCliError(result.message);
|
|
740
807
|
cmd.success(result.message);
|
|
741
808
|
};
|
|
809
|
+
const addGovernance = async (cmd, name, opts) => {
|
|
810
|
+
if (typeof name === 'string' && name.trim() !== '') {
|
|
811
|
+
throw ErrorFactory.createValidationError('governance does not take a name argument. Usage: zin add governance');
|
|
812
|
+
}
|
|
813
|
+
const projectRoot = process.cwd();
|
|
814
|
+
cmd.info('Installing governance tooling (ESLint + architecture tests)...');
|
|
815
|
+
const result = await GovernanceScaffolder.scaffold(projectRoot, {
|
|
816
|
+
writeEslintConfig: true,
|
|
817
|
+
writeArchTests: true,
|
|
818
|
+
install: true,
|
|
819
|
+
packageManager: opts.packageManager,
|
|
820
|
+
});
|
|
821
|
+
if (result.success === false) {
|
|
822
|
+
throw ErrorFactory.createCliError(result.message ?? 'Governance installation failed', result);
|
|
823
|
+
}
|
|
824
|
+
cmd.success('Governance installed successfully!');
|
|
825
|
+
if (result.filesCreated.length > 0) {
|
|
826
|
+
cmd.info(`Files created: ${result.filesCreated.length}`);
|
|
827
|
+
}
|
|
828
|
+
};
|
|
829
|
+
const TYPE_HANDLERS = {
|
|
830
|
+
service: addService,
|
|
831
|
+
feature: addFeature,
|
|
832
|
+
migration: async (cmd, name, opts) => addMigration(cmd, typeof name === 'string' && name.length > 0 ? [name] : [], opts),
|
|
833
|
+
model: addModel,
|
|
834
|
+
controller: addController,
|
|
835
|
+
routes: addRoutes,
|
|
836
|
+
factory: addFactory,
|
|
837
|
+
seeder: addSeeder,
|
|
838
|
+
requestfactory: addRequestFactory,
|
|
839
|
+
'request-factory': addRequestFactory,
|
|
840
|
+
responsefactory: addResponseFactory,
|
|
841
|
+
'response-factory': addResponseFactory,
|
|
842
|
+
workflow: addWorkflow,
|
|
843
|
+
governance: addGovernance,
|
|
844
|
+
};
|
|
742
845
|
const handleType = async (cmd, type, name, opts) => {
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
break;
|
|
747
|
-
case 'feature':
|
|
748
|
-
await addFeature(cmd, name, opts);
|
|
749
|
-
break;
|
|
750
|
-
case 'migration':
|
|
751
|
-
await addMigration(cmd, name, opts);
|
|
752
|
-
break;
|
|
753
|
-
case 'model':
|
|
754
|
-
await addModel(cmd, name, opts);
|
|
755
|
-
break;
|
|
756
|
-
case 'controller':
|
|
757
|
-
await addController(cmd, name, opts);
|
|
758
|
-
break;
|
|
759
|
-
case 'routes':
|
|
760
|
-
await addRoutes(cmd, name, opts);
|
|
761
|
-
break;
|
|
762
|
-
case 'factory':
|
|
763
|
-
await addFactory(cmd, name, opts);
|
|
764
|
-
break;
|
|
765
|
-
case 'seeder':
|
|
766
|
-
await addSeeder(cmd, name, opts);
|
|
767
|
-
break;
|
|
768
|
-
case 'requestfactory':
|
|
769
|
-
case 'request-factory':
|
|
770
|
-
await addRequestFactory(cmd, name, opts);
|
|
771
|
-
break;
|
|
772
|
-
case 'responsefactory':
|
|
773
|
-
case 'response-factory':
|
|
774
|
-
await addResponseFactory(cmd, name, opts);
|
|
775
|
-
break;
|
|
776
|
-
case 'workflow':
|
|
777
|
-
await addWorkflow(cmd, name, opts);
|
|
778
|
-
break;
|
|
779
|
-
default:
|
|
780
|
-
throw ErrorFactory.createCliError(`Unknown type "${type}". Use: service, feature, migration, model, controller, routes, factory, seeder, requestfactory, responsefactory, or workflow`);
|
|
846
|
+
const handler = TYPE_HANDLERS[type];
|
|
847
|
+
if (handler === undefined) {
|
|
848
|
+
throw ErrorFactory.createCliError(`Unknown type "${type}". Use: service, feature, migration, model, controller, routes, factory, seeder, requestfactory, responsefactory, workflow, or governance`);
|
|
781
849
|
}
|
|
850
|
+
await handler(cmd, name, opts);
|
|
782
851
|
};
|
|
783
852
|
const getArgs = (args) => Array.isArray(args) ? args : undefined;
|
|
853
|
+
const installPlugin = async (cmd, type, name, addOpts) => {
|
|
854
|
+
const normalizedType = type.toLowerCase();
|
|
855
|
+
if (name !== undefined && name.length > 0) {
|
|
856
|
+
throw ErrorFactory.createCliError(`"${type}" looks like a plugin id. Run: zin add ${type} (without a name argument).`);
|
|
857
|
+
}
|
|
858
|
+
cmd.info(`Installing plugin: ${normalizedType}...`);
|
|
859
|
+
const pm = typeof addOpts.packageManager === 'string' ? addOpts.packageManager : undefined;
|
|
860
|
+
if (pm === undefined) {
|
|
861
|
+
await PluginManager.install(normalizedType);
|
|
862
|
+
}
|
|
863
|
+
else {
|
|
864
|
+
await PluginManager.install(normalizedType, { packageManager: pm });
|
|
865
|
+
}
|
|
866
|
+
cmd.success(`Plugin '${normalizedType}' installed successfully!`);
|
|
867
|
+
};
|
|
784
868
|
const executeAdd = async (cmd, options) => {
|
|
785
869
|
const command = cmd.getCommand();
|
|
786
870
|
const args = getArgs(options.args) ?? getArgs(command.args) ?? [];
|
|
@@ -795,18 +879,11 @@ const executeAdd = async (cmd, options) => {
|
|
|
795
879
|
// Planned modular adapter syntax: `zin add db:sqlite` (delegate to plugin installer)
|
|
796
880
|
const normalizedType = type.toLowerCase();
|
|
797
881
|
if (normalizedType.includes(':')) {
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
if (pm === undefined) {
|
|
804
|
-
await PluginManager.install(normalizedType);
|
|
805
|
-
}
|
|
806
|
-
else {
|
|
807
|
-
await PluginManager.install(normalizedType, { packageManager: pm });
|
|
808
|
-
}
|
|
809
|
-
cmd.success(`Plugin '${normalizedType}' installed successfully!`);
|
|
882
|
+
await installPlugin(cmd, type, name, addOpts);
|
|
883
|
+
return;
|
|
884
|
+
}
|
|
885
|
+
if (normalizedType === 'migration') {
|
|
886
|
+
await addMigration(cmd, args.slice(1), addOpts);
|
|
810
887
|
return;
|
|
811
888
|
}
|
|
812
889
|
await handleType(cmd, normalizedType, name, addOpts);
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Config Command - Configuration management CLI command
|
|
3
3
|
* Handles configuration operations: get, set, list, reset, edit, export
|
|
4
4
|
*/
|
|
5
|
-
import { IBaseCommand } from '../BaseCommand';
|
|
5
|
+
import type { IBaseCommand } from '../BaseCommand';
|
|
6
6
|
/**
|
|
7
7
|
* Config Command Factory
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ConfigCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"ConfigCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ConfigCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAmVrE;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;cACO,YAAY;EAsEtB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create Command
|
|
3
|
+
* Shortcuts for common scaffolding tasks.
|
|
4
|
+
*/
|
|
5
|
+
import { type IBaseCommand } from '../BaseCommand';
|
|
6
|
+
export declare const CreateCommand: Readonly<{
|
|
7
|
+
create(): IBaseCommand;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const CreateMigrationCommand: Readonly<{
|
|
10
|
+
create(): IBaseCommand;
|
|
11
|
+
}>;
|
|
12
|
+
export declare const AddMigrationCommand: Readonly<{
|
|
13
|
+
create(): IBaseCommand;
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=CreateCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/CreateCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAoC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA+HvF,eAAO,MAAM,aAAa;cACd,YAAY;EAUtB,CAAC;AAEH,eAAO,MAAM,sBAAsB;cACvB,YAAY;EAatB,CAAC;AAEH,eAAO,MAAM,mBAAmB;cACpB,YAAY;EActB,CAAC"}
|