@zintrust/core 0.1.19 → 0.1.21
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 +10 -10
- package/bin/zintrust-main.d.ts.map +1 -1
- package/bin/zintrust-main.js +9 -0
- package/package.json +3 -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/zintrust.svg +30 -0
- package/routes/api.d.ts.map +1 -1
- package/routes/api.js +41 -17
- 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/src/boot/Application.d.ts +2 -2
- package/src/boot/Application.d.ts.map +1 -1
- package/src/boot/Application.js +66 -13
- 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 +2 -0
- 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 +10 -4
- 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 +324 -35
- package/src/cli/commands/NewCommand.d.ts +1 -1
- package/src/cli/commands/NewCommand.d.ts.map +1 -1
- package/src/cli/commands/NewCommand.js +12 -4
- 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/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/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 +229 -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/scaffolding/ControllerGenerator.d.ts.map +1 -1
- package/src/cli/scaffolding/ControllerGenerator.js +76 -26
- 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/ModelGenerator.js +1 -1
- package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
- package/src/cli/scaffolding/ProjectScaffolder.js +36 -4
- 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 +28 -7
- 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/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 +14 -28
- package/src/config/broadcast.d.ts.map +1 -1
- package/src/config/broadcast.js +69 -35
- package/src/config/cache.d.ts +13 -45
- package/src/config/cache.d.ts.map +1 -1
- package/src/config/cache.js +69 -25
- package/src/config/cloudflare.d.ts +1 -1
- package/src/config/cloudflare.d.ts.map +1 -1
- package/src/config/database.d.ts +22 -64
- package/src/config/database.d.ts.map +1 -1
- package/src/config/database.js +191 -37
- package/src/config/env.d.ts +12 -0
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +14 -0
- package/src/config/index.d.ts +33 -137
- 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/mail.d.ts +19 -55
- package/src/config/mail.d.ts.map +1 -1
- package/src/config/mail.js +63 -21
- package/src/config/middleware.d.ts +44 -1
- package/src/config/middleware.d.ts.map +1 -1
- package/src/config/middleware.js +157 -5
- package/src/config/notification.d.ts +14 -27
- package/src/config/notification.d.ts.map +1 -1
- package/src/config/notification.js +82 -36
- package/src/config/queue.d.ts +21 -51
- package/src/config/queue.d.ts.map +1 -1
- package/src/config/queue.js +72 -27
- package/src/config/security.d.ts +1 -1
- package/src/config/security.js +1 -1
- package/src/config/storage.d.ts +27 -34
- package/src/config/storage.d.ts.map +1 -1
- package/src/config/storage.js +97 -56
- package/src/config/type.d.ts +13 -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 +156 -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 +73 -12
- package/src/index.d.ts.map +1 -1
- package/src/index.js +60 -5
- package/src/microservices/PostgresAdapter.d.ts.map +1 -1
- package/src/microservices/PostgresAdapter.js +0 -1
- 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/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 +339 -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 +3 -1
- package/src/node.d.ts.map +1 -1
- package/src/node.js +6 -2
- 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 +5 -2
- package/src/orm/Database.d.ts.map +1 -1
- package/src/orm/Database.js +219 -63
- package/src/orm/DatabaseAdapter.d.ts +14 -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 +12 -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 +406 -99
- 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 +59 -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 +7 -6
- package/src/performance/Optimizer.d.ts.map +1 -1
- package/src/performance/Optimizer.js +170 -55
- 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/metrics.d.ts +2 -0
- package/src/routes/metrics.d.ts.map +1 -0
- package/src/routes/metrics.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 +27 -0
- package/src/routing/doc.d.ts.map +1 -0
- package/src/routing/doc.js +110 -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 +27 -0
- package/src/routing/publicRoot.d.ts.map +1 -0
- package/src/routing/publicRoot.js +110 -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/RuntimeDetector.d.ts +1 -1
- package/src/runtime/RuntimeDetector.d.ts.map +1 -1
- package/src/runtime/StartupConfigFileRegistry.d.ts +20 -0
- package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -0
- package/src/runtime/StartupConfigFileRegistry.js +44 -0
- 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 +1 -1
- 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/runtime/useFileLoader.d.ts +26 -0
- package/src/runtime/useFileLoader.d.ts.map +1 -0
- package/src/runtime/useFileLoader.js +188 -0
- package/src/scripts/TemplateImportsCheck.js +40 -0
- package/src/scripts/TemplateSync.js +90 -24
- 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/security/XssProtection.d.ts.map +1 -1
- package/src/security/XssProtection.js +62 -14
- 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/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 +3 -2
- package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +217 -0
- package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +1 -12
- 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 +10 -447
- 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 +29 -126
- package/src/templates/project/basic/config/cache.ts.tpl +12 -70
- 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 +66 -123
- 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 +8 -23
- package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +7 -114
- package/src/templates/project/basic/config/mail.ts.tpl +9 -62
- package/src/templates/project/basic/config/microservices.ts.tpl +11 -97
- package/src/templates/project/basic/config/middleware.ts.tpl +25 -43
- package/src/templates/project/basic/config/notification.ts.tpl +13 -114
- package/src/templates/project/basic/config/queue.ts.tpl +9 -40
- 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 +57 -137
- package/src/templates/project/basic/config/type.ts.tpl +32 -451
- 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/routes/api.ts.tpl +71 -33
- package/src/templates/project/basic/routes/metrics.ts.tpl +22 -0
- package/src/templates/project/basic/src/index.ts.tpl +3 -0
- package/src/templates/project/basic/tsconfig.json.tpl +12 -11
- 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/config/logging/KvLogger.ts.tpl +0 -181
- package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +0 -156
- package/src/templates/project/basic/database/migrations/index.ts.tpl +0 -2
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { EnvFileBackfill } from '../env/EnvFileBackfill.js';
|
|
6
6
|
import { Logger } from '../../config/logger.js';
|
|
7
|
+
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
7
8
|
import { randomBytes } from '../../node-singletons/crypto.js';
|
|
8
9
|
import fs from '../../node-singletons/fs.js';
|
|
9
10
|
import * as path from '../../node-singletons/path.js';
|
|
@@ -98,7 +99,33 @@ const createProjectConfigFile = (projectPath, variables) => {
|
|
|
98
99
|
return false;
|
|
99
100
|
}
|
|
100
101
|
};
|
|
101
|
-
const
|
|
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;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (out.endsWith('-')) {
|
|
124
|
+
out = out.slice(0, -1);
|
|
125
|
+
}
|
|
126
|
+
return out === '' ? 'zintrust' : out;
|
|
127
|
+
};
|
|
128
|
+
const buildDatabaseEnvLinesWithName = (database, name) => {
|
|
102
129
|
if (database === 'postgresql' || database === 'postgres') {
|
|
103
130
|
return [
|
|
104
131
|
'DB_HOST=localhost',
|
|
@@ -119,7 +146,8 @@ const buildDatabaseEnvLines = (database) => {
|
|
|
119
146
|
}
|
|
120
147
|
if (database === 'sqlite') {
|
|
121
148
|
// Provide both DB_DATABASE (used by the framework) and DB_PATH (common alias)
|
|
122
|
-
|
|
149
|
+
const base = toSafeDbBasename(name);
|
|
150
|
+
return [`DB_DATABASE=.zintrust/dbs/${base}.sqlite`, `DB_PATH=.zintrust/dbs/${base}.sqlite`];
|
|
123
151
|
}
|
|
124
152
|
if (database === 'd1-remote' || database === 'd1-proxy') {
|
|
125
153
|
return [
|
|
@@ -166,7 +194,7 @@ const createEnvFile = (projectPath, variables) => {
|
|
|
166
194
|
`APP_KEY=${appKey}`,
|
|
167
195
|
`DB_CONNECTION=${database}`,
|
|
168
196
|
];
|
|
169
|
-
const dbLines =
|
|
197
|
+
const dbLines = buildDatabaseEnvLinesWithName(database, name);
|
|
170
198
|
const placeholderLines = [
|
|
171
199
|
'',
|
|
172
200
|
'# Logging',
|
|
@@ -254,6 +282,7 @@ const loadTemplateFiles = (templateDir) => {
|
|
|
254
282
|
'config/broadcast.ts',
|
|
255
283
|
'config/cache.ts',
|
|
256
284
|
'config/database.ts',
|
|
285
|
+
'config/middleware.ts',
|
|
257
286
|
'config/logging/HttpLogger.ts',
|
|
258
287
|
'config/mail.ts',
|
|
259
288
|
'config/notification.ts',
|
|
@@ -352,6 +381,7 @@ const API_TEMPLATE = {
|
|
|
352
381
|
'logs',
|
|
353
382
|
'storage',
|
|
354
383
|
'tmp',
|
|
384
|
+
'src',
|
|
355
385
|
'routes',
|
|
356
386
|
'tests',
|
|
357
387
|
],
|
|
@@ -484,6 +514,7 @@ coverage/
|
|
|
484
514
|
logs/
|
|
485
515
|
storage/
|
|
486
516
|
tmp/
|
|
517
|
+
.zintrust/
|
|
487
518
|
*.log
|
|
488
519
|
`;
|
|
489
520
|
}
|
|
@@ -501,6 +532,7 @@ zin s
|
|
|
501
532
|
|
|
502
533
|
- Health: http://localhost:{{port}}/health
|
|
503
534
|
- Tasks: http://localhost:{{port}}/api/tasks
|
|
535
|
+
- Doc: http://localhost:{{port}}/doc
|
|
504
536
|
`;
|
|
505
537
|
}
|
|
506
538
|
return createFiles(state.projectPath, files, variables);
|
|
@@ -548,7 +580,7 @@ const scaffoldWithState = async (state, options
|
|
|
548
580
|
}
|
|
549
581
|
catch (error) {
|
|
550
582
|
Logger.error('Project scaffolding failed', error);
|
|
551
|
-
const err = error instanceof Error ? error :
|
|
583
|
+
const err = error instanceof Error ? error : ErrorFactory.createGeneralError(String(error));
|
|
552
584
|
return {
|
|
553
585
|
success: false,
|
|
554
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"}
|
|
@@ -63,11 +63,12 @@ export function generateRoutes(options) {
|
|
|
63
63
|
}
|
|
64
64
|
catch (error) {
|
|
65
65
|
Logger.error('Route generation failed', error);
|
|
66
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
66
67
|
return Promise.resolve({
|
|
67
68
|
success: false,
|
|
68
69
|
routeFile: '',
|
|
69
70
|
routeCount: 0,
|
|
70
|
-
message: `Error: ${
|
|
71
|
+
message: `Error: ${message}`,
|
|
71
72
|
});
|
|
72
73
|
}
|
|
73
74
|
}
|
|
@@ -76,6 +77,7 @@ export function generateRoutes(options) {
|
|
|
76
77
|
*/
|
|
77
78
|
function buildRouteWrapper(options) {
|
|
78
79
|
const imports = buildImports(options);
|
|
80
|
+
const controllerInstances = buildControllerInstances(options);
|
|
79
81
|
const routeRegistration = buildRouteRegistration(options);
|
|
80
82
|
return `/**
|
|
81
83
|
* Routes
|
|
@@ -84,7 +86,8 @@ function buildRouteWrapper(options) {
|
|
|
84
86
|
|
|
85
87
|
${imports}
|
|
86
88
|
|
|
87
|
-
export function registerRoutes(router:
|
|
89
|
+
export function registerRoutes(router: IRouter): void {
|
|
90
|
+
${controllerInstances}
|
|
88
91
|
${routeRegistration}
|
|
89
92
|
}
|
|
90
93
|
`;
|
|
@@ -93,7 +96,7 @@ ${routeRegistration}
|
|
|
93
96
|
* Build import statements
|
|
94
97
|
*/
|
|
95
98
|
function buildImports(options) {
|
|
96
|
-
const imports = [
|
|
99
|
+
const imports = ["import { Router, type IRouter } from '../../index.js';"];
|
|
97
100
|
// Collect unique controllers
|
|
98
101
|
const controllers = new Set();
|
|
99
102
|
for (const route of options.routes) {
|
|
@@ -105,78 +108,111 @@ function buildImports(options) {
|
|
|
105
108
|
}
|
|
106
109
|
return imports.join('\n');
|
|
107
110
|
}
|
|
111
|
+
function toControllerVar(controllerName) {
|
|
112
|
+
if (controllerName.length === 0)
|
|
113
|
+
return 'controller';
|
|
114
|
+
return `${controllerName[0].toLowerCase()}${controllerName.slice(1)}`;
|
|
115
|
+
}
|
|
116
|
+
function toTag(controllerName) {
|
|
117
|
+
const trimmed = controllerName.endsWith('Controller')
|
|
118
|
+
? controllerName.slice(0, -'Controller'.length)
|
|
119
|
+
: controllerName;
|
|
120
|
+
return trimmed === '' ? 'General' : trimmed;
|
|
121
|
+
}
|
|
122
|
+
function buildControllerInstances(options) {
|
|
123
|
+
const controllers = new Set();
|
|
124
|
+
for (const route of options.routes) {
|
|
125
|
+
controllers.add(route.controller);
|
|
126
|
+
}
|
|
127
|
+
let code = '';
|
|
128
|
+
for (const controller of controllers) {
|
|
129
|
+
const varName = toControllerVar(controller);
|
|
130
|
+
code += ` const ${varName} = typeof ${controller}.create === 'function' ? ${controller}.create() : ${controller};\n`;
|
|
131
|
+
}
|
|
132
|
+
return code;
|
|
133
|
+
}
|
|
108
134
|
/**
|
|
109
135
|
* Build route registration code
|
|
110
136
|
*/
|
|
111
137
|
function buildRouteRegistration(options) {
|
|
112
138
|
let code = '';
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (options.prefix !== undefined) {
|
|
118
|
-
groupOptions.push(` prefix: '${options.prefix}'`);
|
|
119
|
-
}
|
|
120
|
-
if (options.middleware !== undefined && options.middleware.length > 0) {
|
|
121
|
-
const middleware = options.middleware.map((m) => `'${m}'`).join(', ');
|
|
122
|
-
groupOptions.push(` middleware: [${middleware}]`);
|
|
123
|
-
}
|
|
124
|
-
code += groupOptions.join(',\n') + '\n';
|
|
125
|
-
code += ` }, (r) => {\n`;
|
|
126
|
-
// Add routes inside group
|
|
139
|
+
const groupMiddleware = options.middleware ?? [];
|
|
140
|
+
const groupMiddlewareList = groupMiddleware.map((m) => `'${m}'`).join(', ');
|
|
141
|
+
if (options.prefix !== undefined && options.prefix.trim() !== '') {
|
|
142
|
+
code += ` Router.group(router, '${options.prefix}', (r) => {\n`;
|
|
127
143
|
for (const route of options.routes) {
|
|
128
|
-
code += buildRouteCode(route, 'r');
|
|
144
|
+
code += buildRouteCode(route, 'r', groupMiddlewareList);
|
|
129
145
|
}
|
|
130
146
|
code += ` });\n`;
|
|
147
|
+
return code;
|
|
131
148
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
for (const route of options.routes) {
|
|
135
|
-
code += buildRouteCode(route, 'router');
|
|
136
|
-
}
|
|
149
|
+
for (const route of options.routes) {
|
|
150
|
+
code += buildRouteCode(route, 'router', groupMiddlewareList);
|
|
137
151
|
}
|
|
138
152
|
return code;
|
|
139
153
|
}
|
|
140
154
|
/**
|
|
141
155
|
* Build single route code
|
|
142
156
|
*/
|
|
143
|
-
function buildRouteCode(route, router) {
|
|
157
|
+
function buildRouteCode(route, router, groupMiddlewareList) {
|
|
144
158
|
if (route.method === 'resource') {
|
|
145
|
-
return buildResourceRoute(route, router);
|
|
159
|
+
return buildResourceRoute(route, router, groupMiddlewareList);
|
|
146
160
|
}
|
|
147
161
|
else {
|
|
148
|
-
return buildMethodRoute(route, router);
|
|
162
|
+
return buildMethodRoute(route, router, groupMiddlewareList);
|
|
149
163
|
}
|
|
150
164
|
}
|
|
151
165
|
/**
|
|
152
166
|
* Build standard method route (GET, POST, etc.)
|
|
153
167
|
*/
|
|
154
|
-
function buildMethodRoute(route, router) {
|
|
155
|
-
const method = route.method;
|
|
168
|
+
function buildMethodRoute(route, router, groupMiddlewareList) {
|
|
169
|
+
const method = route.method === 'delete' ? 'del' : route.method;
|
|
156
170
|
const routePath = route.path;
|
|
157
171
|
const controller = route.controller;
|
|
158
172
|
const action = route.action ?? 'handle';
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
173
|
+
const tag = toTag(controller);
|
|
174
|
+
const summary = `${method.toUpperCase()} ${routePath}`;
|
|
175
|
+
const controllerVar = toControllerVar(controller);
|
|
176
|
+
const localMiddlewareList = (route.middleware ?? []).map((m) => `'${m}'`).join(', ');
|
|
177
|
+
const hasGroup = groupMiddlewareList.trim() !== '';
|
|
178
|
+
const hasLocal = localMiddlewareList.trim() !== '';
|
|
179
|
+
const middlewareProp = hasGroup || hasLocal
|
|
180
|
+
? `middleware: [${[hasGroup ? groupMiddlewareList : '', hasLocal ? localMiddlewareList : '']
|
|
181
|
+
.filter((v) => v.trim() !== '')
|
|
182
|
+
.join(', ')}]`
|
|
183
|
+
: '';
|
|
184
|
+
const metaProp = `meta: { summary: ${JSON.stringify(summary)}, tags: [${JSON.stringify(tag)}] }`;
|
|
185
|
+
const options = `{ ${[middlewareProp, metaProp].filter((v) => v !== '').join(', ')} }`;
|
|
186
|
+
return ` Router.${method}(${router}, '${routePath}', (req, res) => ${controllerVar}.${action}(req, res), ${options});\n`;
|
|
166
187
|
}
|
|
167
188
|
/**
|
|
168
189
|
* Build resource route (RESTful CRUD)
|
|
169
190
|
*/
|
|
170
|
-
function buildResourceRoute(route, router) {
|
|
191
|
+
function buildResourceRoute(route, router, groupMiddlewareList) {
|
|
171
192
|
const routePath = route.path;
|
|
172
193
|
const controller = route.controller;
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
194
|
+
const tag = toTag(controller);
|
|
195
|
+
const controllerVar = toControllerVar(controller);
|
|
196
|
+
const localMiddlewareList = (route.middleware ?? []).map((m) => `'${m}'`).join(', ');
|
|
197
|
+
const hasGroup = groupMiddlewareList.trim() !== '';
|
|
198
|
+
const hasLocal = localMiddlewareList.trim() !== '';
|
|
199
|
+
const middlewareProp = hasGroup || hasLocal
|
|
200
|
+
? `middleware: [${[hasGroup ? groupMiddlewareList : '', hasLocal ? localMiddlewareList : '']
|
|
201
|
+
.filter((v) => v.trim() !== '')
|
|
202
|
+
.join(', ')}]`
|
|
203
|
+
: '';
|
|
204
|
+
const resourceMeta = (action, routePattern) => `meta: { summary: ${JSON.stringify(action.toUpperCase() + ' ' + routePattern)}, tags: [${JSON.stringify(tag)}] }`;
|
|
205
|
+
const pathId = routePath + '/:id';
|
|
206
|
+
const optsParts = [
|
|
207
|
+
middlewareProp,
|
|
208
|
+
`index: { ${resourceMeta('GET', routePath)} }`,
|
|
209
|
+
`store: { ${resourceMeta('POST', routePath)} }`,
|
|
210
|
+
`show: { ${resourceMeta('GET', pathId)} }`,
|
|
211
|
+
`update: { ${resourceMeta('PUT', pathId)} }`,
|
|
212
|
+
`destroy: { ${resourceMeta('DELETE', pathId)} }`,
|
|
213
|
+
].filter((v) => v !== '');
|
|
214
|
+
const options = `{ ${optsParts.join(', ')} }`;
|
|
215
|
+
return ` Router.resource(${router}, '${routePath}', ${controllerVar}, ${options});\n`;
|
|
180
216
|
}
|
|
181
217
|
/**
|
|
182
218
|
* Generate common API routes (User CRUD example)
|
|
@@ -17,6 +17,9 @@ export interface SeederOptions {
|
|
|
17
17
|
relationships?: string[];
|
|
18
18
|
truncate?: boolean;
|
|
19
19
|
}
|
|
20
|
+
export interface DatabaseSeederOptions {
|
|
21
|
+
seedersPath: string;
|
|
22
|
+
}
|
|
20
23
|
export interface SeederGeneratorResult {
|
|
21
24
|
success: boolean;
|
|
22
25
|
filePath: string;
|
|
@@ -34,6 +37,7 @@ export declare function validateOptions(options: SeederOptions): Promise<void>;
|
|
|
34
37
|
* Generate a database seeder
|
|
35
38
|
*/
|
|
36
39
|
export declare function generateSeeder(options: SeederOptions): Promise<SeederGeneratorResult>;
|
|
40
|
+
export declare function generateDatabaseSeeder(options: DatabaseSeederOptions): Promise<SeederGeneratorResult>;
|
|
37
41
|
/**
|
|
38
42
|
* Get available seeder options
|
|
39
43
|
*/
|
|
@@ -41,6 +45,7 @@ export declare function getAvailableOptions(): string[];
|
|
|
41
45
|
export declare const SeederGenerator: Readonly<{
|
|
42
46
|
validateOptions: typeof validateOptions;
|
|
43
47
|
generateSeeder: typeof generateSeeder;
|
|
48
|
+
generateDatabaseSeeder: typeof generateDatabaseSeeder;
|
|
44
49
|
getAvailableOptions: typeof getAvailableOptions;
|
|
45
50
|
}>;
|
|
46
51
|
export default SeederGenerator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeederGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/SeederGenerator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AAEH;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"SeederGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/SeederGenerator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AAEH;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B3E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAyB3F;AAkBD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,CAyBhC;AAmQD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAQ9C;AAED,eAAO,MAAM,eAAe;;;;;EAK1B,CAAC;AAEH,eAAe,eAAe,CAAC"}
|
|
@@ -35,14 +35,7 @@ export async function validateOptions(options) {
|
|
|
35
35
|
if (options.count !== undefined && (options.count < 1 || options.count > 100000)) {
|
|
36
36
|
throw ErrorFactory.createCliError('Count must be between 1 and 100000');
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
const pathStat = await fs.stat(options.seedersPath).catch(() => null);
|
|
40
|
-
if (pathStat === null) {
|
|
41
|
-
throw ErrorFactory.createCliError(`Seeders path does not exist: ${options.seedersPath}`);
|
|
42
|
-
}
|
|
43
|
-
if (!pathStat.isDirectory()) {
|
|
44
|
-
throw ErrorFactory.createCliError(`Seeders path is not a directory: ${options.seedersPath}`);
|
|
45
|
-
}
|
|
38
|
+
await assertDirectoryExists(options.seedersPath, 'Seeders path');
|
|
46
39
|
}
|
|
47
40
|
/**
|
|
48
41
|
* Generate a database seeder
|
|
@@ -70,6 +63,64 @@ export async function generateSeeder(options) {
|
|
|
70
63
|
};
|
|
71
64
|
}
|
|
72
65
|
}
|
|
66
|
+
async function validateDatabaseSeederOptions(options) {
|
|
67
|
+
await assertDirectoryExists(options.seedersPath, 'Seeders path');
|
|
68
|
+
}
|
|
69
|
+
async function assertDirectoryExists(dirPath, label) {
|
|
70
|
+
const pathStat = await fs.stat(dirPath).catch(() => null);
|
|
71
|
+
if (pathStat === null) {
|
|
72
|
+
throw ErrorFactory.createCliError(`${label} does not exist: ${dirPath}`);
|
|
73
|
+
}
|
|
74
|
+
if (!pathStat.isDirectory()) {
|
|
75
|
+
throw ErrorFactory.createCliError(`${label} is not a directory: ${dirPath}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export async function generateDatabaseSeeder(options) {
|
|
79
|
+
try {
|
|
80
|
+
await validateDatabaseSeederOptions(options);
|
|
81
|
+
const seederCode = buildDatabaseSeederCode();
|
|
82
|
+
const fileName = 'DatabaseSeeder.ts';
|
|
83
|
+
const filePath = path.join(options.seedersPath, fileName);
|
|
84
|
+
FileGenerator.writeFile(filePath, seederCode, { overwrite: true });
|
|
85
|
+
Logger.info(`✅ Created seeder: ${fileName}`);
|
|
86
|
+
return {
|
|
87
|
+
success: true,
|
|
88
|
+
filePath,
|
|
89
|
+
message: `Seeder '${fileName}' created successfully`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
Logger.error('DatabaseSeeder generation failed', error);
|
|
94
|
+
return {
|
|
95
|
+
success: false,
|
|
96
|
+
filePath: '',
|
|
97
|
+
message: error.message,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function buildDatabaseSeederCode() {
|
|
102
|
+
return `import { SeederDiscovery } from '../../seeders/SeederDiscovery';
|
|
103
|
+
import { SeederLoader } from '../../seeders/SeederLoader';
|
|
104
|
+
import { CommonUtils } from '../../common/index';
|
|
105
|
+
import type { IDatabase } from '../../orm/Database';
|
|
106
|
+
import * as path from '../../node-singletons/path';
|
|
107
|
+
|
|
108
|
+
export const DatabaseSeeder = Object.freeze({
|
|
109
|
+
async run(db: IDatabase): Promise<void> {
|
|
110
|
+
const dir = CommonUtils.esmDirname(import.meta.url);
|
|
111
|
+
const files = SeederDiscovery.listSeederFiles(dir).filter((filePath) => {
|
|
112
|
+
const base = path.basename(filePath, path.extname(filePath));
|
|
113
|
+
return base !== 'DatabaseSeeder';
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
for (const filePath of files) {
|
|
117
|
+
const loaded = await SeederLoader.load(filePath);
|
|
118
|
+
await loaded.run(db);
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
`;
|
|
123
|
+
}
|
|
73
124
|
/**
|
|
74
125
|
* Build complete seeder code
|
|
75
126
|
*/
|
|
@@ -222,8 +273,7 @@ import { ${options.modelName} } from '@app/Models/${options.modelName}';`;
|
|
|
222
273
|
*/
|
|
223
274
|
function buildRelationshipMethods(options) {
|
|
224
275
|
if (options.relationships === undefined || options.relationships.length === 0) {
|
|
225
|
-
return ` const
|
|
226
|
-
const records = factory.count(${options.count ?? 10});
|
|
276
|
+
return ` const records = factory.count(${options.count ?? 10});
|
|
227
277
|
|
|
228
278
|
// Create records with relationships (implement as needed)
|
|
229
279
|
for (const record of records) {
|
|
@@ -236,13 +286,10 @@ function buildRelationshipMethods(options) {
|
|
|
236
286
|
return ` // Seed with ${rel} relationships
|
|
237
287
|
const ${CommonUtils.camelCase(rel)}s = await ${rel}.all();
|
|
238
288
|
if (${CommonUtils.camelCase(rel)}s.length > 0) {
|
|
239
|
-
const
|
|
240
|
-
const records = factory
|
|
241
|
-
.count(Math.min(${options.count ?? 10}, ${CommonUtils.camelCase(rel)}s.length))
|
|
242
|
-
.get();
|
|
289
|
+
const records = factory.count(Math.min(${options.count ?? 10}, ${CommonUtils.camelCase(rel)}s.length));
|
|
243
290
|
|
|
244
291
|
for (let i = 0; i < records.length; i++) {
|
|
245
|
-
records[i].${relId} = ${CommonUtils.camelCase(rel)}s[i].id;
|
|
292
|
+
(records[i] as Record<string, unknown>).${relId} = (${CommonUtils.camelCase(rel)}s[i] as { id?: unknown }).id;
|
|
246
293
|
// await ${options.modelName}.create(records[i]);
|
|
247
294
|
}
|
|
248
295
|
}`;
|
|
@@ -281,6 +328,7 @@ export function getAvailableOptions() {
|
|
|
281
328
|
export const SeederGenerator = Object.freeze({
|
|
282
329
|
validateOptions,
|
|
283
330
|
generateSeeder,
|
|
331
|
+
generateDatabaseSeeder,
|
|
284
332
|
getAvailableOptions,
|
|
285
333
|
});
|
|
286
334
|
export default SeederGenerator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServiceScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ServiceScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAuB7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAGnF;AAED;;GAEG;AAEH,wBAAgB,QAAQ,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,qBAAqB,CAAC,CA+ChC;
|
|
1
|
+
{"version":3,"file":"ServiceScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ServiceScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAuB7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAGnF;AAED;;GAEG;AAEH,wBAAgB,QAAQ,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,qBAAqB,CAAC,CA+ChC;AAkUD,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAC"}
|
|
@@ -162,7 +162,7 @@ function generateServiceIndex(options) {
|
|
|
162
162
|
* Auth: ${options.auth ?? 'api-key'}
|
|
163
163
|
*/
|
|
164
164
|
|
|
165
|
-
import { Application, Server } from '
|
|
165
|
+
import { Application, Server } from '../../index.js';
|
|
166
166
|
import { Logger } from '../../config/logger';
|
|
167
167
|
import { Env } from '../../config/env';
|
|
168
168
|
import { esmDirname } from '../../common/index';
|
|
@@ -192,13 +192,24 @@ function generateServiceRoutes(options) {
|
|
|
192
192
|
* ${options.name} Service Routes
|
|
193
193
|
*/
|
|
194
194
|
|
|
195
|
-
import { Router, type IRouter } from '
|
|
195
|
+
import { Router, type IRouter } from '../../index.js';
|
|
196
196
|
|
|
197
197
|
export function registerRoutes(router: IRouter): void {
|
|
198
198
|
// Example route
|
|
199
|
-
Router.get(
|
|
199
|
+
Router.get(
|
|
200
|
+
router,
|
|
201
|
+
'/',
|
|
202
|
+
(_req, res) => {
|
|
200
203
|
res.json({ message: '${options.name} service' });
|
|
201
|
-
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
meta: {
|
|
207
|
+
summary: 'Service root',
|
|
208
|
+
tags: ['Service'],
|
|
209
|
+
responseStatus: 200,
|
|
210
|
+
},
|
|
211
|
+
}
|
|
212
|
+
);
|
|
202
213
|
}
|
|
203
214
|
`;
|
|
204
215
|
}
|
|
@@ -211,9 +222,9 @@ function generateExampleController(options) {
|
|
|
211
222
|
* Example Controller for ${options.name} Service
|
|
212
223
|
*/
|
|
213
224
|
|
|
214
|
-
import { type IRequest, type IResponse, Controller } from '
|
|
225
|
+
import { type IRequest, type IResponse, Controller } from '../../index.js';
|
|
215
226
|
|
|
216
|
-
|
|
227
|
+
const controller = Object.freeze({
|
|
217
228
|
...Controller,
|
|
218
229
|
|
|
219
230
|
/**
|
|
@@ -254,6 +265,16 @@ export const ${className} = {
|
|
|
254
265
|
res.json({ deleted: true, id });
|
|
255
266
|
},
|
|
256
267
|
};
|
|
268
|
+
|
|
269
|
+
export type ${className}Api = typeof controller;
|
|
270
|
+
|
|
271
|
+
export const ${className} = Object.freeze({
|
|
272
|
+
create(): ${className}Api {
|
|
273
|
+
return controller;
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
export default ${className};
|
|
257
278
|
`;
|
|
258
279
|
}
|
|
259
280
|
/**
|
|
@@ -264,7 +285,7 @@ function generateExampleModel(options) {
|
|
|
264
285
|
* Example Model for ${options.name} Service
|
|
265
286
|
*/
|
|
266
287
|
|
|
267
|
-
import { Model } from '
|
|
288
|
+
import { Model } from '../../index.js';
|
|
268
289
|
|
|
269
290
|
export const Example = Model.define({
|
|
270
291
|
table: '${options.name}',
|
|
@@ -9,6 +9,8 @@ export { FeatureScaffolder } from '../scaffolding/FeatureScaffolder';
|
|
|
9
9
|
export type { FeatureOptions, FeatureScaffoldResult, FeatureType, } from '../scaffolding/FeatureScaffolder';
|
|
10
10
|
export { FileGenerator } from '../scaffolding/FileGenerator';
|
|
11
11
|
export type { FileCreationOptions } from '../scaffolding/FileGenerator';
|
|
12
|
+
export { GovernanceScaffolder } from '../scaffolding/GovernanceScaffolder';
|
|
13
|
+
export type { GovernanceScaffoldOptions, GovernanceScaffoldResult, } from '../scaffolding/GovernanceScaffolder';
|
|
12
14
|
export { MigrationGenerator } from '../scaffolding/MigrationGenerator';
|
|
13
15
|
export type { MigrationOptions, MigrationScaffoldResult, } from '../scaffolding/MigrationGenerator';
|
|
14
16
|
export { ModelGenerator } from '../scaffolding/ModelGenerator';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,YAAY,EACV,yBAAyB,EACzB,iBAAiB,EACjB,cAAc,GACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,cAAc,GACf,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,WAAW,GACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,YAAY,EACV,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EACV,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,YAAY,EACV,6BAA6B,EAC7B,qBAAqB,EACrB,YAAY,GACb,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,YAAY,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,aAAa,GACd,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,YAAY,GACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,aAAa,GACd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,+BAA+B,EAAE,MAAM,kDAAkD,CAAC;AACnG,YAAY,EACV,eAAe,EACf,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AACjG,YAAY,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACrF,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,YAAY,EACV,yBAAyB,EACzB,iBAAiB,EACjB,cAAc,GACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,YAAY,EACV,YAAY,EACZ,sBAAsB,EACtB,cAAc,GACf,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,WAAW,GACZ,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,YAAY,EACV,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,YAAY,EACV,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EACV,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,YAAY,EACV,6BAA6B,EAC7B,qBAAqB,EACrB,YAAY,GACb,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,YAAY,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,aAAa,GACd,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,YAAY,GACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,aAAa,GACd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,+BAA+B,EAAE,MAAM,kDAAkD,CAAC;AACnG,YAAY,EACV,eAAe,EACf,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AACjG,YAAY,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACrF,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC"}
|
|
@@ -5,6 +5,7 @@ export { ControllerGenerator } from '../scaffolding/ControllerGenerator.js';
|
|
|
5
5
|
export { FactoryGenerator } from '../scaffolding/FactoryGenerator.js';
|
|
6
6
|
export { FeatureScaffolder } from '../scaffolding/FeatureScaffolder.js';
|
|
7
7
|
export { FileGenerator } from '../scaffolding/FileGenerator.js';
|
|
8
|
+
export { GovernanceScaffolder } from '../scaffolding/GovernanceScaffolder.js';
|
|
8
9
|
export { MigrationGenerator } from '../scaffolding/MigrationGenerator.js';
|
|
9
10
|
export { ModelGenerator } from '../scaffolding/ModelGenerator.js';
|
|
10
11
|
export { ProjectScaffolder } from '../scaffolding/ProjectScaffolder.js';
|
package/src/common/index.d.ts
CHANGED
|
@@ -59,10 +59,18 @@ export declare const CommonUtils: Readonly<{
|
|
|
59
59
|
* Read file contents as string
|
|
60
60
|
*/
|
|
61
61
|
readFile(filePath: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Read file contents as string (async)
|
|
64
|
+
*/
|
|
65
|
+
readFileAsync(filePath: string): Promise<string>;
|
|
62
66
|
/**
|
|
63
67
|
* Write file with optional directory creation
|
|
64
68
|
*/
|
|
65
69
|
writeFile(filePath: string, content: string, createDir?: boolean): void;
|
|
70
|
+
/**
|
|
71
|
+
* Write file with optional directory creation (async)
|
|
72
|
+
*/
|
|
73
|
+
writeFileAsync(filePath: string, content: string, createDir?: boolean): Promise<void>;
|
|
66
74
|
/**
|
|
67
75
|
* Delete file if it exists
|
|
68
76
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,eAAO,MAAM,WAAW;qBACL,MAAM,GAAG,OAAO;CAOlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;sBACe,MAAM;IAgBxB;;OAEG;IAEH;;OAEG;cACa,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtC;;OAEG;yBACkB,MAAM,GAAG,GAAG,GAAG,MAAM;IAI1C;;OAEG;wBACiB,MAAM,GAAG,GAAG,GAAG,MAAM;IAIzC;;OAEG;IAEH;;OAEG;mBACY,MAAM,GAAG,MAAM;IAgB9B;;OAEG;qBACc,MAAM,GAAG,MAAM;IAUhC;;OAEG;sBACe,MAAM,GAAG,MAAM;IAQjC;;OAEG;IAEH;;OAEG;yBACkB,MAAM,GAAG,OAAO;IAIrC;;OAEG;uBACgB,MAAM,GAAG,IAAI;IAMhC;;OAEG;2BACoB,MAAM,GAAG,IAAI;IAQpC;;OAEG;uBACgB,MAAM,GAAG,MAAM;IAUlC;;OAEG;wBACiB,MAAM,WAAW,MAAM,wBAAqB,IAAI;IAcpE;;OAEG;yBACkB,MAAM,GAAG,IAAI;IAYlC;;OAEG;IAEH;;OAEG;2BACoB,MAAM;IAI7B;;OAEG;2BACmB,IAAI,GAAgB,MAAM;IAIhD;;OAEG;8BACuB,MAAM,GAAG,IAAI;IAYvC;;OAEG;IAEH;;OAEG;+BACwB,OAAO,GAAG,MAAM;IAa3C;;OAEG;6BAEQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kBAChB,MAAM,EAAE,WACf,MAAM,GACd,IAAI;IAWP;;OAEG;mBACY,OAAO,GAAG,OAAO;IAIhC;;OAEG;wBACiB,OAAO,aAAa,MAAM,GAAG,MAAM;IAOvD;;OAEG;wBACiB,OAAO,aAAa,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOxE;;;OAGG;sCAC+B,MAAM,EAAE,GAAG,MAAM;EAgBnD,CAAC;AAGH,eAAO,MAAM,cAAc,QAAO,MAAsC,CAAC;AAEzE,eAAO,MAAM,KAAK,GAAU,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAA0B,CAAC;AAEhF,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,GAAG,GAAG,KAAG,MAA0C,CAAC;AAC/F,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,GAAG,GAAG,KAAG,MAAyC,CAAC;AAE7F,eAAO,MAAM,qBAAqB,GAAI,YAAY,MAAM,EAAE,KAAG,MAE5D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,MACb,CAAC;AAIzC,eAAO,MAAM,yBAAyB,GAAI,OAAO,OAAO,KAAG,MAM1D,CAAC;AAGF,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,KAAG,OAA2C,CAAC;AAC1F,eAAO,MAAM,SAAS,GAAI,SAAS,MAAM,KAAG,IAAsC,CAAC;AACnF,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,IAA0C,CAAC;AAC3F,eAAO,MAAM,QAAQ,GAAI,UAAU,MAAM,KAAG,MAAwC,CAAC;AACrF,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,EAAE,SAAS,MAAM,EAAE,mBAAgB,KAAG,IAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,eAAO,MAAM,WAAW;qBACL,MAAM,GAAG,OAAO;CAOlC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;sBACe,MAAM;IAgBxB;;OAEG;IAEH;;OAEG;cACa,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtC;;OAEG;yBACkB,MAAM,GAAG,GAAG,GAAG,MAAM;IAI1C;;OAEG;wBACiB,MAAM,GAAG,GAAG,GAAG,MAAM;IAIzC;;OAEG;IAEH;;OAEG;mBACY,MAAM,GAAG,MAAM;IAgB9B;;OAEG;qBACc,MAAM,GAAG,MAAM;IAUhC;;OAEG;sBACe,MAAM,GAAG,MAAM;IAQjC;;OAEG;IAEH;;OAEG;yBACkB,MAAM,GAAG,OAAO;IAIrC;;OAEG;uBACgB,MAAM,GAAG,IAAI;IAMhC;;OAEG;2BACoB,MAAM,GAAG,IAAI;IAQpC;;OAEG;uBACgB,MAAM,GAAG,MAAM;IAUlC;;OAEG;4BAC2B,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWtD;;OAEG;wBACiB,MAAM,WAAW,MAAM,wBAAqB,IAAI;IAcpE;;OAEG;6BAC4B,MAAM,WAAW,MAAM,wBAAqB,OAAO,CAAC,IAAI,CAAC;IAexF;;OAEG;yBACkB,MAAM,GAAG,IAAI;IAYlC;;OAEG;IAEH;;OAEG;2BACoB,MAAM;IAI7B;;OAEG;2BACmB,IAAI,GAAgB,MAAM;IAIhD;;OAEG;8BACuB,MAAM,GAAG,IAAI;IAYvC;;OAEG;IAEH;;OAEG;+BACwB,OAAO,GAAG,MAAM;IAa3C;;OAEG;6BAEQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kBAChB,MAAM,EAAE,WACf,MAAM,GACd,IAAI;IAWP;;OAEG;mBACY,OAAO,GAAG,OAAO;IAIhC;;OAEG;wBACiB,OAAO,aAAa,MAAM,GAAG,MAAM;IAOvD;;OAEG;wBACiB,OAAO,aAAa,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOxE;;;OAGG;sCAC+B,MAAM,EAAE,GAAG,MAAM;EAgBnD,CAAC;AAGH,eAAO,MAAM,cAAc,QAAO,MAAsC,CAAC;AAEzE,eAAO,MAAM,KAAK,GAAU,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAA0B,CAAC;AAEhF,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,GAAG,GAAG,KAAG,MAA0C,CAAC;AAC/F,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,GAAG,GAAG,KAAG,MAAyC,CAAC;AAE7F,eAAO,MAAM,qBAAqB,GAAI,YAAY,MAAM,EAAE,KAAG,MAE5D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,MACb,CAAC;AAIzC,eAAO,MAAM,yBAAyB,GAAI,OAAO,OAAO,KAAG,MAM1D,CAAC;AAGF,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,KAAG,OAA2C,CAAC;AAC1F,eAAO,MAAM,SAAS,GAAI,SAAS,MAAM,KAAG,IAAsC,CAAC;AACnF,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,IAA0C,CAAC;AAC3F,eAAO,MAAM,QAAQ,GAAI,UAAU,MAAM,KAAG,MAAwC,CAAC;AACrF,eAAO,MAAM,SAAS,GAAI,UAAU,MAAM,EAAE,SAAS,MAAM,EAAE,mBAAgB,KAAG,IAC3B,CAAC"}
|
package/src/common/index.js
CHANGED
|
@@ -141,6 +141,18 @@ export const CommonUtils = Object.freeze({
|
|
|
141
141
|
throw ErrorFactory.createGeneralError(`Failed to read file: ${filePath}. ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
142
142
|
}
|
|
143
143
|
},
|
|
144
|
+
/**
|
|
145
|
+
* Read file contents as string (async)
|
|
146
|
+
*/
|
|
147
|
+
async readFileAsync(filePath) {
|
|
148
|
+
try {
|
|
149
|
+
const fsPromises = await import('../node-singletons/fs.js').then((m) => m.fsPromises);
|
|
150
|
+
return await fsPromises.readFile(filePath, 'utf-8');
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
throw ErrorFactory.createGeneralError(`Failed to read file: ${filePath}. ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
154
|
+
}
|
|
155
|
+
},
|
|
144
156
|
/**
|
|
145
157
|
* Write file with optional directory creation
|
|
146
158
|
*/
|
|
@@ -156,6 +168,22 @@ export const CommonUtils = Object.freeze({
|
|
|
156
168
|
throw ErrorFactory.createGeneralError(`Failed to write file: ${filePath}. ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
157
169
|
}
|
|
158
170
|
},
|
|
171
|
+
/**
|
|
172
|
+
* Write file with optional directory creation (async)
|
|
173
|
+
*/
|
|
174
|
+
async writeFileAsync(filePath, content, createDir = true) {
|
|
175
|
+
try {
|
|
176
|
+
const fsPromises = await import('../node-singletons/fs.js').then((m) => m.fsPromises);
|
|
177
|
+
if (createDir) {
|
|
178
|
+
const dir = path.dirname(filePath);
|
|
179
|
+
await fsPromises.mkdir(dir, { recursive: true });
|
|
180
|
+
}
|
|
181
|
+
await fsPromises.writeFile(filePath, content, 'utf-8');
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
throw ErrorFactory.createGeneralError(`Failed to write file: ${filePath}. ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
185
|
+
}
|
|
186
|
+
},
|
|
159
187
|
/**
|
|
160
188
|
* Delete file if it exists
|
|
161
189
|
*/
|