@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
|
@@ -41,6 +41,15 @@ export function generateMigration(options) {
|
|
|
41
41
|
message: `Validation failed: ${validation.errors.join(', ')}`,
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
|
+
const existing = findExistingMigrationFile(options.migrationsPath, options.name);
|
|
45
|
+
if (existing !== undefined) {
|
|
46
|
+
return Promise.resolve({
|
|
47
|
+
success: false,
|
|
48
|
+
migrationName: options.name,
|
|
49
|
+
filePath: existing,
|
|
50
|
+
message: `Migration '${options.name}' already exists: ${path.basename(existing)}`,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
44
53
|
// Generate migration filename with timestamp
|
|
45
54
|
const timestamp = new Date()
|
|
46
55
|
.toISOString()
|
|
@@ -48,7 +57,7 @@ export function generateMigration(options) {
|
|
|
48
57
|
.slice(0, 14);
|
|
49
58
|
const filename = `${timestamp}_${options.name}.ts`;
|
|
50
59
|
const filePath = path.join(options.migrationsPath, filename);
|
|
51
|
-
//
|
|
60
|
+
// Defensive: exact timestamped file already exists.
|
|
52
61
|
if (FileGenerator.fileExists(filePath)) {
|
|
53
62
|
return Promise.resolve({
|
|
54
63
|
success: false,
|
|
@@ -59,7 +68,13 @@ export function generateMigration(options) {
|
|
|
59
68
|
}
|
|
60
69
|
// Generate migration content based on type
|
|
61
70
|
const type = options.type ?? detectType(options.name);
|
|
62
|
-
const content = generateMigrationContent(
|
|
71
|
+
const content = generateMigrationContent({
|
|
72
|
+
name: options.name,
|
|
73
|
+
type,
|
|
74
|
+
migrationsPath: options.migrationsPath,
|
|
75
|
+
table: options.table,
|
|
76
|
+
column: options.column,
|
|
77
|
+
});
|
|
63
78
|
// Write migration file
|
|
64
79
|
FileGenerator.writeFile(filePath, content);
|
|
65
80
|
Logger.info(`✅ Created migration: ${filename}`);
|
|
@@ -81,6 +96,16 @@ export function generateMigration(options) {
|
|
|
81
96
|
});
|
|
82
97
|
}
|
|
83
98
|
}
|
|
99
|
+
function findExistingMigrationFile(migrationsPath, name) {
|
|
100
|
+
const suffix = `_${name}.ts`;
|
|
101
|
+
const files = FileGenerator.listFiles(migrationsPath, false);
|
|
102
|
+
for (const file of files) {
|
|
103
|
+
const base = path.basename(file);
|
|
104
|
+
if (base.endsWith(suffix))
|
|
105
|
+
return file;
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
84
109
|
/**
|
|
85
110
|
* Detect migration type from name
|
|
86
111
|
*/
|
|
@@ -94,53 +119,85 @@ function detectType(name) {
|
|
|
94
119
|
/**
|
|
95
120
|
* Generate migration file content
|
|
96
121
|
*/
|
|
97
|
-
function generateMigrationContent(
|
|
98
|
-
const className = CommonUtils.toPascalCase(name);
|
|
99
|
-
|
|
100
|
-
|
|
122
|
+
function generateMigrationContent(options) {
|
|
123
|
+
const className = CommonUtils.toPascalCase(options.name);
|
|
124
|
+
const importBlock = resolveMigrationImportBlock(options.migrationsPath);
|
|
125
|
+
if (options.type === 'create') {
|
|
126
|
+
return generateCreateMigration({
|
|
127
|
+
className,
|
|
128
|
+
importBlock,
|
|
129
|
+
tableName: options.table ?? getTableNameFromMigrationName(options.name),
|
|
130
|
+
});
|
|
101
131
|
}
|
|
102
|
-
else if (type === 'drop') {
|
|
103
|
-
return generateDropMigration(
|
|
132
|
+
else if (options.type === 'drop') {
|
|
133
|
+
return generateDropMigration({
|
|
134
|
+
className,
|
|
135
|
+
importBlock,
|
|
136
|
+
tableName: options.table ?? getTableNameFromMigrationName(options.name),
|
|
137
|
+
});
|
|
104
138
|
}
|
|
105
139
|
else {
|
|
106
|
-
return generateAlterMigration(
|
|
140
|
+
return generateAlterMigration({
|
|
141
|
+
className,
|
|
142
|
+
importBlock,
|
|
143
|
+
tableName: options.table ?? getTableNameFromMigrationName(options.name),
|
|
144
|
+
exampleColumn: options.column,
|
|
145
|
+
});
|
|
107
146
|
}
|
|
108
147
|
}
|
|
148
|
+
function resolveMigrationImportBlock(migrationsPath) {
|
|
149
|
+
const projectRoot = path.resolve(migrationsPath, '..', '..');
|
|
150
|
+
const packageJsonPath = path.join(projectRoot, 'package.json');
|
|
151
|
+
if (FileGenerator.fileExists(packageJsonPath)) {
|
|
152
|
+
try {
|
|
153
|
+
const pkgRaw = FileGenerator.readFile(packageJsonPath);
|
|
154
|
+
const pkg = JSON.parse(pkgRaw);
|
|
155
|
+
if (pkg.name === '@zintrust/core') {
|
|
156
|
+
return `import type { IDatabase } from '../../orm/Database';\nimport { Schema as MigrationSchema, type Blueprint } from '../../migrations/schema';`;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// fall through
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return `import { MigrationSchema, type Blueprint, type IDatabase } from '@zintrust/core';`;
|
|
164
|
+
}
|
|
109
165
|
/**
|
|
110
166
|
* Generate CREATE migration
|
|
111
167
|
*/
|
|
112
|
-
function generateCreateMigration(
|
|
113
|
-
const tableName =
|
|
168
|
+
function generateCreateMigration(options) {
|
|
169
|
+
const { className, importBlock, tableName } = options;
|
|
114
170
|
return `/**
|
|
115
171
|
* Migration: ${className}
|
|
116
172
|
* Creates ${tableName} table
|
|
117
173
|
*/
|
|
118
174
|
|
|
175
|
+
${importBlock}
|
|
176
|
+
|
|
119
177
|
export interface Migration {
|
|
120
|
-
up(): Promise<void>;
|
|
121
|
-
down(): Promise<void>;
|
|
178
|
+
up(db: IDatabase): Promise<void>;
|
|
179
|
+
down(db: IDatabase): Promise<void>;
|
|
122
180
|
}
|
|
123
181
|
|
|
124
182
|
export const migration: Migration = {
|
|
125
183
|
/**
|
|
126
184
|
* Run migration
|
|
127
185
|
*/
|
|
128
|
-
async up(): Promise<void> {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
// });
|
|
186
|
+
async up(db: IDatabase): Promise<void> {
|
|
187
|
+
const schema = MigrationSchema.create(db);
|
|
188
|
+
|
|
189
|
+
await schema.create('${tableName}', (table: Blueprint) => {
|
|
190
|
+
table.id();
|
|
191
|
+
table.timestamps();
|
|
192
|
+
});
|
|
136
193
|
},
|
|
137
194
|
|
|
138
195
|
/**
|
|
139
196
|
* Rollback migration
|
|
140
197
|
*/
|
|
141
|
-
async down(): Promise<void> {
|
|
142
|
-
|
|
143
|
-
|
|
198
|
+
async down(db: IDatabase): Promise<void> {
|
|
199
|
+
const schema = MigrationSchema.create(db);
|
|
200
|
+
await schema.dropIfExists('${tableName}');
|
|
144
201
|
},
|
|
145
202
|
};
|
|
146
203
|
`;
|
|
@@ -148,37 +205,48 @@ export const migration: Migration = {
|
|
|
148
205
|
/**
|
|
149
206
|
* Generate ALTER migration
|
|
150
207
|
*/
|
|
151
|
-
function generateAlterMigration(
|
|
152
|
-
const tableName =
|
|
208
|
+
function generateAlterMigration(options) {
|
|
209
|
+
const { className, importBlock, tableName, exampleColumn } = options;
|
|
210
|
+
const hasConcreteColumn = typeof exampleColumn === 'string' && exampleColumn.trim().length > 0;
|
|
211
|
+
const example = hasConcreteColumn ? exampleColumn : 'new_column';
|
|
212
|
+
const tableBody = hasConcreteColumn
|
|
213
|
+
? ` table.string('${example}');
|
|
214
|
+
// Example:
|
|
215
|
+
// table.dropColumn('old_column');
|
|
216
|
+
// table.index('new_column');`
|
|
217
|
+
: ` // Example:
|
|
218
|
+
// table.string('${example}');
|
|
219
|
+
// table.dropColumn('old_column');
|
|
220
|
+
// table.index('new_column');`;
|
|
153
221
|
return `/**
|
|
154
222
|
* Migration: ${className}
|
|
155
223
|
* Modifies ${tableName} table
|
|
156
224
|
*/
|
|
157
225
|
|
|
226
|
+
${importBlock}
|
|
227
|
+
|
|
158
228
|
export interface Migration {
|
|
159
|
-
up(): Promise<void>;
|
|
160
|
-
down(): Promise<void>;
|
|
229
|
+
up(db: IDatabase): Promise<void>;
|
|
230
|
+
down(db: IDatabase): Promise<void>;
|
|
161
231
|
}
|
|
162
232
|
|
|
163
233
|
export const migration: Migration = {
|
|
164
234
|
/**
|
|
165
235
|
* Run migration
|
|
166
236
|
*/
|
|
167
|
-
async up(): Promise<void> {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
237
|
+
async up(db: IDatabase): Promise<void> {
|
|
238
|
+
const schema = MigrationSchema.create(db);
|
|
239
|
+
|
|
240
|
+
await schema.table('${tableName}', (table: Blueprint) => {
|
|
241
|
+
${tableBody}
|
|
242
|
+
});
|
|
172
243
|
},
|
|
173
244
|
|
|
174
245
|
/**
|
|
175
246
|
* Rollback migration
|
|
176
247
|
*/
|
|
177
|
-
async down(): Promise<void> {
|
|
178
|
-
//
|
|
179
|
-
// await db.schema.alterTable('${tableName}', (table) => {
|
|
180
|
-
// table.dropColumn('new_column');
|
|
181
|
-
// });
|
|
248
|
+
async down(_db: IDatabase): Promise<void> {
|
|
249
|
+
// Note: dropping columns/FKs varies by driver; SQLite/D1 requires a table rebuild.
|
|
182
250
|
},
|
|
183
251
|
};
|
|
184
252
|
`;
|
|
@@ -186,36 +254,34 @@ export const migration: Migration = {
|
|
|
186
254
|
/**
|
|
187
255
|
* Generate DROP migration
|
|
188
256
|
*/
|
|
189
|
-
function generateDropMigration(
|
|
190
|
-
const tableName =
|
|
257
|
+
function generateDropMigration(options) {
|
|
258
|
+
const { className, importBlock, tableName } = options;
|
|
191
259
|
return `/**
|
|
192
260
|
* Migration: ${className}
|
|
193
261
|
* Drops ${tableName} table
|
|
194
262
|
*/
|
|
195
263
|
|
|
264
|
+
${importBlock}
|
|
265
|
+
|
|
196
266
|
export interface Migration {
|
|
197
|
-
up(): Promise<void>;
|
|
198
|
-
down(): Promise<void>;
|
|
267
|
+
up(db: IDatabase): Promise<void>;
|
|
268
|
+
down(db: IDatabase): Promise<void>;
|
|
199
269
|
}
|
|
200
270
|
|
|
201
271
|
export const migration: Migration = {
|
|
202
272
|
/**
|
|
203
273
|
* Run migration
|
|
204
274
|
*/
|
|
205
|
-
async up(): Promise<void> {
|
|
206
|
-
|
|
207
|
-
|
|
275
|
+
async up(db: IDatabase): Promise<void> {
|
|
276
|
+
const schema = MigrationSchema.create(db);
|
|
277
|
+
await schema.dropIfExists('${tableName}');
|
|
208
278
|
},
|
|
209
279
|
|
|
210
280
|
/**
|
|
211
281
|
* Rollback migration
|
|
212
282
|
*/
|
|
213
|
-
async down(): Promise<void> {
|
|
214
|
-
// Recreate table
|
|
215
|
-
// await db.schema.createTable('${tableName}', (table) => {
|
|
216
|
-
// table.increments('id').primary();
|
|
217
|
-
// table.timestamps();
|
|
218
|
-
// });
|
|
283
|
+
async down(_db: IDatabase): Promise<void> {
|
|
284
|
+
// Recreate table (DB-specific). Consider adding back columns explicitly.
|
|
219
285
|
},
|
|
220
286
|
};
|
|
221
287
|
`;
|
|
@@ -249,6 +315,26 @@ function getTableNameFromClass(className) {
|
|
|
249
315
|
}
|
|
250
316
|
return tableName;
|
|
251
317
|
}
|
|
318
|
+
function getTableNameFromMigrationName(name) {
|
|
319
|
+
if (name.endsWith('_table')) {
|
|
320
|
+
const ensurePlural = (t) => (t.endsWith('s') ? t : `${t}s`);
|
|
321
|
+
const withoutSuffix = name.slice(0, -'_table'.length);
|
|
322
|
+
if (withoutSuffix.startsWith('create_'))
|
|
323
|
+
return ensurePlural(withoutSuffix.slice('create_'.length));
|
|
324
|
+
if (withoutSuffix.startsWith('drop_'))
|
|
325
|
+
return ensurePlural(withoutSuffix.slice('drop_'.length));
|
|
326
|
+
if (withoutSuffix.includes('_to_'))
|
|
327
|
+
return ensurePlural(withoutSuffix.split('_to_').at(-1) ?? withoutSuffix);
|
|
328
|
+
if (withoutSuffix.startsWith('add_')) {
|
|
329
|
+
// Convention: add_<column>_<table>_table (table is the last segment)
|
|
330
|
+
const parts = withoutSuffix.split('_');
|
|
331
|
+
const last = parts.at(-1);
|
|
332
|
+
if (typeof last === 'string' && last.length > 0)
|
|
333
|
+
return ensurePlural(last);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return getTableNameFromClass(CommonUtils.toPascalCase(name));
|
|
337
|
+
}
|
|
252
338
|
/**
|
|
253
339
|
* MigrationGenerator creates database migration files
|
|
254
340
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ProjectScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
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;AA6eD,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"}
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
* Project Scaffolder - New project generation
|
|
3
3
|
* Handles directory structure and boilerplate file creation
|
|
4
4
|
*/
|
|
5
|
+
import { EnvFileBackfill } from '../env/EnvFileBackfill.js';
|
|
5
6
|
import { Logger } from '../../config/logger.js';
|
|
7
|
+
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
6
8
|
import { randomBytes } from '../../node-singletons/crypto.js';
|
|
7
9
|
import fs from '../../node-singletons/fs.js';
|
|
8
10
|
import * as path from '../../node-singletons/path.js';
|
|
@@ -97,63 +99,33 @@ const createProjectConfigFile = (projectPath, variables) => {
|
|
|
97
99
|
return false;
|
|
98
100
|
}
|
|
99
101
|
};
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
102
|
+
const toSafeDbBasename = (raw) => {
|
|
103
|
+
const trimmed = raw.trim();
|
|
104
|
+
if (trimmed === '')
|
|
105
|
+
return 'zintrust';
|
|
106
|
+
const lower = trimmed.toLowerCase();
|
|
107
|
+
let out = '';
|
|
108
|
+
let prevWasDash = false;
|
|
109
|
+
for (const char of lower) {
|
|
110
|
+
const isAlphaNum = (char >= 'a' && char <= 'z') || (char >= '0' && char <= '9');
|
|
111
|
+
const isContent = isAlphaNum || char === '_';
|
|
112
|
+
if (isContent) {
|
|
113
|
+
out += char;
|
|
114
|
+
prevWasDash = false;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
// Treat as separator: collapse dashes and avoid leading dash
|
|
118
|
+
if (out.length > 0 && !prevWasDash) {
|
|
119
|
+
out += '-';
|
|
120
|
+
prevWasDash = true;
|
|
114
121
|
}
|
|
115
122
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const backfillEnvDefaults = (envPath, defaults) => {
|
|
119
|
-
const raw = fs.readFileSync(envPath, 'utf8');
|
|
120
|
-
const lines = raw.split(/\r?\n/);
|
|
121
|
-
const seen = new Set();
|
|
122
|
-
const filled = new Set();
|
|
123
|
-
const out = lines.map((line) => {
|
|
124
|
-
const trimmed = line.trim();
|
|
125
|
-
if (trimmed === '' || trimmed.startsWith('#'))
|
|
126
|
-
return line;
|
|
127
|
-
const withoutExport = trimmed.startsWith('export ') ? trimmed.slice('export '.length) : trimmed;
|
|
128
|
-
const eq = withoutExport.indexOf('=');
|
|
129
|
-
if (eq <= 0)
|
|
130
|
-
return line;
|
|
131
|
-
const key = withoutExport.slice(0, eq).trim();
|
|
132
|
-
if (key === '')
|
|
133
|
-
return line;
|
|
134
|
-
if (!Object.hasOwn(defaults, key))
|
|
135
|
-
return line;
|
|
136
|
-
if (seen.has(key))
|
|
137
|
-
return line;
|
|
138
|
-
seen.add(key);
|
|
139
|
-
const rhs = withoutExport.slice(eq + 1);
|
|
140
|
-
const withoutComment = stripEnvInlineComment(rhs);
|
|
141
|
-
const value = withoutComment.trim();
|
|
142
|
-
if (value !== '')
|
|
143
|
-
return line;
|
|
144
|
-
filled.add(key);
|
|
145
|
-
return `${key}=${defaults[key]}`;
|
|
146
|
-
});
|
|
147
|
-
const missingKeys = Object.keys(defaults).filter((k) => !seen.has(k));
|
|
148
|
-
if (missingKeys.length > 0) {
|
|
149
|
-
out.push(...missingKeys.map((k) => `${k}=${defaults[k]}`));
|
|
123
|
+
if (out.endsWith('-')) {
|
|
124
|
+
out = out.slice(0, -1);
|
|
150
125
|
}
|
|
151
|
-
|
|
152
|
-
if (filled.size === 0 && missingKeys.length === 0)
|
|
153
|
-
return;
|
|
154
|
-
fs.writeFileSync(envPath, out.join('\n') + (out.at(-1) === '' ? '' : '\n'));
|
|
126
|
+
return out === '' ? 'zintrust' : out;
|
|
155
127
|
};
|
|
156
|
-
const
|
|
128
|
+
const buildDatabaseEnvLinesWithName = (database, name) => {
|
|
157
129
|
if (database === 'postgresql' || database === 'postgres') {
|
|
158
130
|
return [
|
|
159
131
|
'DB_HOST=localhost',
|
|
@@ -163,9 +135,29 @@ const buildDatabaseEnvLines = (database) => {
|
|
|
163
135
|
'DB_PASSWORD=',
|
|
164
136
|
];
|
|
165
137
|
}
|
|
138
|
+
if (database === 'mysql') {
|
|
139
|
+
return [
|
|
140
|
+
'DB_HOST=localhost',
|
|
141
|
+
'DB_PORT=3306',
|
|
142
|
+
'DB_DATABASE=zintrust',
|
|
143
|
+
'DB_USERNAME=root',
|
|
144
|
+
'DB_PASSWORD=',
|
|
145
|
+
];
|
|
146
|
+
}
|
|
166
147
|
if (database === 'sqlite') {
|
|
167
148
|
// Provide both DB_DATABASE (used by the framework) and DB_PATH (common alias)
|
|
168
|
-
|
|
149
|
+
const base = toSafeDbBasename(name);
|
|
150
|
+
return [`DB_DATABASE=.zintrust/dbs/${base}.sqlite`, `DB_PATH=.zintrust/dbs/${base}.sqlite`];
|
|
151
|
+
}
|
|
152
|
+
if (database === 'd1-remote' || database === 'd1-proxy') {
|
|
153
|
+
return [
|
|
154
|
+
'# Cloudflare D1 Remote Proxy (HTTPS)',
|
|
155
|
+
'D1_REMOTE_URL=',
|
|
156
|
+
'D1_REMOTE_KEY_ID=',
|
|
157
|
+
'D1_REMOTE_SECRET=',
|
|
158
|
+
'D1_REMOTE_MODE=registry',
|
|
159
|
+
'ZT_PROXY_TIMEOUT_MS=15000',
|
|
160
|
+
];
|
|
169
161
|
}
|
|
170
162
|
return [];
|
|
171
163
|
};
|
|
@@ -178,7 +170,7 @@ const createEnvFile = (projectPath, variables) => {
|
|
|
178
170
|
// If an .env already exists (e.g., from a template), do not overwrite user values.
|
|
179
171
|
// But we *do* backfill safe defaults for common bootstrap keys when missing/blank.
|
|
180
172
|
if (fs.existsSync(fullPath)) {
|
|
181
|
-
backfillEnvDefaults(fullPath, {
|
|
173
|
+
EnvFileBackfill.backfillEnvDefaults(fullPath, {
|
|
182
174
|
HOST: 'localhost',
|
|
183
175
|
PORT: String(Number(variables['port'] ?? 7777)),
|
|
184
176
|
LOG_LEVEL: 'debug',
|
|
@@ -197,13 +189,12 @@ const createEnvFile = (projectPath, variables) => {
|
|
|
197
189
|
`APP_NAME=${name}`,
|
|
198
190
|
'HOST=localhost',
|
|
199
191
|
`PORT=${port}`,
|
|
200
|
-
`APP_PORT=${port}`,
|
|
201
192
|
'APP_DEBUG=true',
|
|
202
193
|
// Auto-generated secure key for storage signing and encryption
|
|
203
194
|
`APP_KEY=${appKey}`,
|
|
204
195
|
`DB_CONNECTION=${database}`,
|
|
205
196
|
];
|
|
206
|
-
const dbLines =
|
|
197
|
+
const dbLines = buildDatabaseEnvLinesWithName(database, name);
|
|
207
198
|
const placeholderLines = [
|
|
208
199
|
'',
|
|
209
200
|
'# Logging',
|
|
@@ -225,7 +216,7 @@ const createEnvFile = (projectPath, variables) => {
|
|
|
225
216
|
'',
|
|
226
217
|
'# Microservices',
|
|
227
218
|
'SERVICE_DISCOVERY_ENABLED=false',
|
|
228
|
-
'
|
|
219
|
+
'SERVICE_DISCOVERY_TYPE=filesystem',
|
|
229
220
|
'SERVICE_NAME=',
|
|
230
221
|
'SERVICE_VERSION=1.0.0',
|
|
231
222
|
];
|
|
@@ -291,6 +282,7 @@ const loadTemplateFiles = (templateDir) => {
|
|
|
291
282
|
'config/broadcast.ts',
|
|
292
283
|
'config/cache.ts',
|
|
293
284
|
'config/database.ts',
|
|
285
|
+
'config/middleware.ts',
|
|
294
286
|
'config/logging/HttpLogger.ts',
|
|
295
287
|
'config/mail.ts',
|
|
296
288
|
'config/notification.ts',
|
|
@@ -389,6 +381,7 @@ const API_TEMPLATE = {
|
|
|
389
381
|
'logs',
|
|
390
382
|
'storage',
|
|
391
383
|
'tmp',
|
|
384
|
+
'src',
|
|
392
385
|
'routes',
|
|
393
386
|
'tests',
|
|
394
387
|
],
|
|
@@ -521,6 +514,7 @@ coverage/
|
|
|
521
514
|
logs/
|
|
522
515
|
storage/
|
|
523
516
|
tmp/
|
|
517
|
+
.zintrust/
|
|
524
518
|
*.log
|
|
525
519
|
`;
|
|
526
520
|
}
|
|
@@ -538,6 +532,7 @@ zin s
|
|
|
538
532
|
|
|
539
533
|
- Health: http://localhost:{{port}}/health
|
|
540
534
|
- Tasks: http://localhost:{{port}}/api/tasks
|
|
535
|
+
- Doc: http://localhost:{{port}}/doc
|
|
541
536
|
`;
|
|
542
537
|
}
|
|
543
538
|
return createFiles(state.projectPath, files, variables);
|
|
@@ -585,7 +580,7 @@ const scaffoldWithState = async (state, options
|
|
|
585
580
|
}
|
|
586
581
|
catch (error) {
|
|
587
582
|
Logger.error('Project scaffolding failed', error);
|
|
588
|
-
const err = error instanceof Error ? error :
|
|
583
|
+
const err = error instanceof Error ? error : ErrorFactory.createGeneralError(String(error));
|
|
589
584
|
return {
|
|
590
585
|
success: false,
|
|
591
586
|
projectPath: state.projectPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/RouteGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAqB3F;AAED;;GAEG;AAEH,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"RouteGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/RouteGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAqB3F;AAED;;GAEG;AAEH,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA4CnF;AA2LD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,EAAE,CAsCpD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,eAAe,EAAE,CA6BjD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,eAAe,EAAE,CA+BlD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAEhD;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;EAOzB,CAAC"}
|