@zintrust/core 0.1.19 → 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 +10 -10
- package/bin/zintrust-main.d.ts.map +1 -1
- package/bin/zintrust-main.js +9 -0
- package/package.json +2 -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 +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/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 +291 -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 +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/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 +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 +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/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/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 +1 -1
- package/src/config/database.d.ts.map +1 -1
- package/src/config/database.js +92 -6
- 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 +1 -1
- package/src/config/logging/KvLogger.js +1 -1
- package/src/config/logging/SlackLogger.js +2 -2
- package/src/config/middleware.d.ts +20 -1
- package/src/config/middleware.d.ts.map +1 -1
- package/src/config/middleware.js +135 -3
- package/src/config/security.d.ts +1 -1
- package/src/config/security.js +1 -1
- package/src/config/type.d.ts +1 -1
- 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 +64 -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/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 +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 +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/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 -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 +58 -2
- 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/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 +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/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 +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/scripts/TemplateImportsCheck.js +40 -0
- package/src/scripts/TemplateSync.js +86 -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/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 +15 -128
- package/src/templates/project/basic/config/cache.ts.tpl +15 -91
- 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 -122
- 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/mail.ts.tpl +15 -114
- 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 +14 -126
- 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 -132
- package/src/templates/project/basic/config/type.ts.tpl +33 -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/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/database/migrations/index.ts.tpl +0 -2
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Pages Static Assets
|
|
3
|
+
* Serves /error-pages/* assets (CSS/JS/SVG/etc) used by HTML error templates.
|
|
4
|
+
*/
|
|
5
|
+
import { HTTP_HEADERS, MIME_TYPES } from '../config/constants.js';
|
|
6
|
+
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
7
|
+
import * as fs from '../node-singletons/fs.js';
|
|
8
|
+
import * as path from '../node-singletons/path.js';
|
|
9
|
+
import { MIME_TYPES_MAP, resolveSafePath, tryDecodeURIComponent } from './common.js';
|
|
10
|
+
import { getPublicRoot } from './publicRoot.js';
|
|
11
|
+
import { Router } from './Router.js';
|
|
12
|
+
const servePublicRootFile = (relativePath, response, contentType) => {
|
|
13
|
+
const publicRoot = getPublicRoot();
|
|
14
|
+
const filePath = path.join(publicRoot, relativePath);
|
|
15
|
+
try {
|
|
16
|
+
if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {
|
|
17
|
+
response.setStatus(404);
|
|
18
|
+
response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
|
|
19
|
+
response.send('Not Found');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const content = fs.readFileSync(filePath);
|
|
23
|
+
response.setStatus(200);
|
|
24
|
+
response.setHeader(HTTP_HEADERS.CONTENT_TYPE, contentType);
|
|
25
|
+
response.send(content);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
ErrorFactory.createTryCatchError(`Error serving public file ${filePath}`, error);
|
|
30
|
+
response.setStatus(500);
|
|
31
|
+
response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
|
|
32
|
+
response.send('Internal Server Error');
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
export const serveErrorPagesFile = (urlPath, response) => {
|
|
37
|
+
if (urlPath === '/error-pages' || urlPath === '/error-pages/') {
|
|
38
|
+
response.setStatus(404);
|
|
39
|
+
response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
|
|
40
|
+
response.send('Not Found');
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
if (!urlPath.startsWith('/error-pages/'))
|
|
44
|
+
return false;
|
|
45
|
+
const publicRoot = getPublicRoot();
|
|
46
|
+
const baseDir = path.join(publicRoot, 'error-pages');
|
|
47
|
+
const rawRelative = urlPath.slice('/error-pages/'.length);
|
|
48
|
+
const normalizedRelative = tryDecodeURIComponent(rawRelative).replaceAll('\\', '/');
|
|
49
|
+
const filePath = resolveSafePath(baseDir, normalizedRelative);
|
|
50
|
+
if (filePath === undefined) {
|
|
51
|
+
response.setStatus(404);
|
|
52
|
+
response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
|
|
53
|
+
response.send('Not Found');
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
if (fs.existsSync(filePath) && fs.statSync(filePath).isDirectory()) {
|
|
58
|
+
response.setStatus(404);
|
|
59
|
+
response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
|
|
60
|
+
response.send('Not Found');
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
if (!fs.existsSync(filePath)) {
|
|
64
|
+
response.setStatus(404);
|
|
65
|
+
response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
|
|
66
|
+
response.send('Not Found');
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
70
|
+
const contentType = MIME_TYPES_MAP[ext] || 'application/octet-stream';
|
|
71
|
+
const content = fs.readFileSync(filePath);
|
|
72
|
+
response.setStatus(200);
|
|
73
|
+
response.setHeader(HTTP_HEADERS.CONTENT_TYPE, contentType);
|
|
74
|
+
response.send(content);
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
ErrorFactory.createTryCatchError(`Error serving error-pages file ${filePath}`, error);
|
|
79
|
+
response.setStatus(500);
|
|
80
|
+
response.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
|
|
81
|
+
response.send('Internal Server Error');
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const handleErrorPagesRequest = (req, res) => {
|
|
86
|
+
const urlPath = req.getPath();
|
|
87
|
+
if (serveErrorPagesFile(urlPath, res))
|
|
88
|
+
return;
|
|
89
|
+
res.setStatus(404);
|
|
90
|
+
res.setHeader(HTTP_HEADERS.CONTENT_TYPE, MIME_TYPES.TEXT);
|
|
91
|
+
res.send('Not Found');
|
|
92
|
+
};
|
|
93
|
+
const handleZintrustSvgRequest = (_req, res) => {
|
|
94
|
+
servePublicRootFile('zintrust.svg', res, MIME_TYPES.SVG);
|
|
95
|
+
};
|
|
96
|
+
export const registerErrorPagesRoutes = (router) => {
|
|
97
|
+
Router.get(router, '/error-pages', handleErrorPagesRequest);
|
|
98
|
+
Router.get(router, '/error-pages/', handleErrorPagesRequest);
|
|
99
|
+
Router.get(router, '/error-pages/:path*', handleErrorPagesRequest);
|
|
100
|
+
// Used by the HTML error templates (logo in footer).
|
|
101
|
+
Router.get(router, '/zintrust.svg', handleZintrustSvgRequest);
|
|
102
|
+
};
|
|
103
|
+
export default { registerErrorPagesRoutes, serveErrorPagesFile };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public Root Resolution
|
|
3
|
+
* Determines where framework/app static assets live (public/ or dist/public).
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Find the package root directory.
|
|
7
|
+
*/
|
|
8
|
+
export declare const findPackageRoot: (startDir: string) => string;
|
|
9
|
+
/**
|
|
10
|
+
* Framework public roots (dist/public preferred).
|
|
11
|
+
*/
|
|
12
|
+
export declare const getFrameworkPublicRoots: () => string[];
|
|
13
|
+
/**
|
|
14
|
+
* Resolve the effective public root.
|
|
15
|
+
* Prefers app-local `public/` when present; otherwise falls back to framework public roots.
|
|
16
|
+
*/
|
|
17
|
+
export declare const getPublicRoot: () => string;
|
|
18
|
+
//# sourceMappingURL=publicRoot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publicRoot.d.ts","sourceRoot":"","sources":["../../../src/routing/publicRoot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,UAAU,MAAM,KAAG,MASlD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,QAAO,MAAM,EAIhD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAO,MAgBhC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public Root Resolution
|
|
3
|
+
* Determines where framework/app static assets live (public/ or dist/public).
|
|
4
|
+
*/
|
|
5
|
+
import { esmDirname } from '../common/index.js';
|
|
6
|
+
import * as fs from '../node-singletons/fs.js';
|
|
7
|
+
import * as path from '../node-singletons/path.js';
|
|
8
|
+
/**
|
|
9
|
+
* Find the package root directory.
|
|
10
|
+
*/
|
|
11
|
+
export const findPackageRoot = (startDir) => {
|
|
12
|
+
let current = startDir;
|
|
13
|
+
for (let i = 0; i < 10; i++) {
|
|
14
|
+
if (fs.existsSync(path.join(current, 'package.json')))
|
|
15
|
+
return current;
|
|
16
|
+
const parent = path.dirname(current);
|
|
17
|
+
if (parent === current)
|
|
18
|
+
break;
|
|
19
|
+
current = parent;
|
|
20
|
+
}
|
|
21
|
+
return startDir;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Framework public roots (dist/public preferred).
|
|
25
|
+
*/
|
|
26
|
+
export const getFrameworkPublicRoots = () => {
|
|
27
|
+
const thisDir = esmDirname(import.meta.url);
|
|
28
|
+
const packageRoot = findPackageRoot(thisDir);
|
|
29
|
+
return [path.join(packageRoot, 'dist/public'), path.join(packageRoot, 'public')];
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Resolve the effective public root.
|
|
33
|
+
* Prefers app-local `public/` when present; otherwise falls back to framework public roots.
|
|
34
|
+
*/
|
|
35
|
+
export const getPublicRoot = () => {
|
|
36
|
+
const appRoots = [path.join(process.cwd(), 'public')];
|
|
37
|
+
const candidates = [...appRoots, ...getFrameworkPublicRoots()];
|
|
38
|
+
// Prefer a root that contains an index.html (common for docs + dev portal).
|
|
39
|
+
const hasIndex = (root) => fs.existsSync(path.join(root, 'index.html'));
|
|
40
|
+
for (const candidate of candidates) {
|
|
41
|
+
if (fs.existsSync(candidate) && hasIndex(candidate))
|
|
42
|
+
return candidate;
|
|
43
|
+
}
|
|
44
|
+
for (const candidate of candidates) {
|
|
45
|
+
if (fs.existsSync(candidate))
|
|
46
|
+
return candidate;
|
|
47
|
+
}
|
|
48
|
+
return candidates[0];
|
|
49
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type ImportResult = {
|
|
2
|
+
ok: true;
|
|
3
|
+
loadedPath: string;
|
|
4
|
+
} | {
|
|
5
|
+
ok: false;
|
|
6
|
+
loadedPath?: string;
|
|
7
|
+
reason: 'not-found' | 'import-failed';
|
|
8
|
+
errorMessage?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const PluginAutoImports: Readonly<{
|
|
11
|
+
/**
|
|
12
|
+
* Best-effort import of a project's `src/zintrust.plugins.ts` file.
|
|
13
|
+
*
|
|
14
|
+
* This file is generated/maintained by `zin plugin install` and contains
|
|
15
|
+
* side-effect imports (e.g. `@zintrust/db-mysql/register`) which register
|
|
16
|
+
* adapters/drivers into core registries.
|
|
17
|
+
*/
|
|
18
|
+
tryImportProjectAutoImports(): Promise<ImportResult>;
|
|
19
|
+
}>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=PluginAutoImports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginAutoImports.d.ts","sourceRoot":"","sources":["../../../src/runtime/PluginAutoImports.ts"],"names":[],"mappings":"AAMA,KAAK,YAAY,GACb;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChC;IACE,EAAE,EAAE,KAAK,CAAC;IACV,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,GAAG,eAAe,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAmBN,eAAO,MAAM,iBAAiB;IAC5B;;;;;;OAMG;mCACkC,OAAO,CAAC,YAAY,CAAC;EAgC1D,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { pathToFileURL } from '../node-singletons/url.js';
|
|
2
|
+
import { Logger } from '../config/logger.js';
|
|
3
|
+
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
4
|
+
import { existsSync } from '../node-singletons/fs.js';
|
|
5
|
+
import * as path from '../node-singletons/path.js';
|
|
6
|
+
const resolveProjectRoot = () => {
|
|
7
|
+
const fromEnv = process.env['ZINTRUST_PROJECT_ROOT'];
|
|
8
|
+
if (typeof fromEnv === 'string' && fromEnv.trim().length > 0)
|
|
9
|
+
return fromEnv.trim();
|
|
10
|
+
return process.cwd();
|
|
11
|
+
};
|
|
12
|
+
const getCandidates = (projectRoot) => {
|
|
13
|
+
return [
|
|
14
|
+
// Dev (tsx)
|
|
15
|
+
path.join(projectRoot, 'src', 'zintrust.plugins.ts'),
|
|
16
|
+
// Production build output (most common)
|
|
17
|
+
path.join(projectRoot, 'dist', 'src', 'zintrust.plugins.js'),
|
|
18
|
+
// Fallback (in case someone transpiles without /dist)
|
|
19
|
+
path.join(projectRoot, 'src', 'zintrust.plugins.js'),
|
|
20
|
+
];
|
|
21
|
+
};
|
|
22
|
+
export const PluginAutoImports = Object.freeze({
|
|
23
|
+
/**
|
|
24
|
+
* Best-effort import of a project's `src/zintrust.plugins.ts` file.
|
|
25
|
+
*
|
|
26
|
+
* This file is generated/maintained by `zin plugin install` and contains
|
|
27
|
+
* side-effect imports (e.g. `@zintrust/db-mysql/register`) which register
|
|
28
|
+
* adapters/drivers into core registries.
|
|
29
|
+
*/
|
|
30
|
+
async tryImportProjectAutoImports() {
|
|
31
|
+
const projectRoot = resolveProjectRoot();
|
|
32
|
+
const candidates = getCandidates(projectRoot);
|
|
33
|
+
for (const candidate of candidates) {
|
|
34
|
+
if (!existsSync(candidate))
|
|
35
|
+
continue;
|
|
36
|
+
try {
|
|
37
|
+
const url = pathToFileURL(candidate).href;
|
|
38
|
+
// eslint-disable-next-line no-await-in-loop
|
|
39
|
+
await import(url);
|
|
40
|
+
return { ok: true, loadedPath: candidate };
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
44
|
+
Logger.warn('[plugins] Failed to import plugin auto-imports', {
|
|
45
|
+
candidate,
|
|
46
|
+
errorMessage,
|
|
47
|
+
});
|
|
48
|
+
// Keep error creation for consistent structure (but do not throw).
|
|
49
|
+
ErrorFactory.createTryCatchError('Failed to import project plugin auto-imports', {
|
|
50
|
+
candidate,
|
|
51
|
+
error,
|
|
52
|
+
});
|
|
53
|
+
return { ok: false, loadedPath: candidate, reason: 'import-failed', errorMessage };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
Logger.debug('[plugins] No plugin auto-imports file found', { projectRoot, candidates });
|
|
57
|
+
return { ok: false, reason: 'not-found' };
|
|
58
|
+
},
|
|
59
|
+
});
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Plugin Manager
|
|
3
|
-
* Handles installation and removal of framework plugins.
|
|
4
|
-
*/
|
|
5
|
-
import { PluginDefinition } from './PluginRegistry';
|
|
1
|
+
import type { PluginDefinition } from './PluginRegistry';
|
|
6
2
|
export declare const PluginManager: Readonly<{
|
|
7
3
|
/**
|
|
8
4
|
* List all available plugins
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../../src/runtime/PluginManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PluginManager.d.ts","sourceRoot":"","sources":["../../../src/runtime/PluginManager.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AA0R/D,eAAO,MAAM,aAAa;IACxB;;OAEG;YACK,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAIxC;;OAEG;yBACkB,MAAM,GAAG,MAAM,GAAG,IAAI;IAW3C;;OAEG;0BACyB,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0DrD;;OAEG;sBACqB,MAAM,YAAY;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BrF;;;;OAIG;wBACuB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EA2ChD,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/require-await */
|
|
2
|
-
/* eslint-disable no-await-in-loop */
|
|
3
2
|
/**
|
|
4
3
|
* Plugin Manager
|
|
5
4
|
* Handles installation and removal of framework plugins.
|
|
6
5
|
*/
|
|
6
|
+
import { execSync } from '../node-singletons/child-process.js';
|
|
7
7
|
import { SpawnUtil } from '../cli/utils/spawn.js';
|
|
8
8
|
import { esmDirname, resolvePackageManager } from '../common/index.js';
|
|
9
9
|
import { Logger } from '../config/logger.js';
|
|
10
10
|
import { ErrorFactory } from '../exceptions/ZintrustError.js';
|
|
11
|
-
import { execSync } from '../node-singletons/child-process.js';
|
|
12
11
|
import { existsSync, fsPromises as fs } from '../node-singletons/fs.js';
|
|
13
12
|
import * as path from '../node-singletons/path.js';
|
|
14
13
|
import { PluginRegistry } from './PluginRegistry.js';
|
|
@@ -88,6 +87,21 @@ async function npmInstall(packages, options) {
|
|
|
88
87
|
Logger.info(`Installing ${options.label}: ${packages.join(', ')}...`);
|
|
89
88
|
const projectRoot = options.projectRoot ?? resolveProjectRoot();
|
|
90
89
|
const pm = options.packageManager ?? resolvePackageManager();
|
|
90
|
+
// Legacy behavior: npm uses execSync in this framework.
|
|
91
|
+
// This keeps behavior predictable for CI/test environments and matches existing unit tests.
|
|
92
|
+
if (pm === 'npm') {
|
|
93
|
+
const cmd = options.dev
|
|
94
|
+
? `npm install -D ${packages.join(' ')}`
|
|
95
|
+
: `npm install ${packages.join(' ')}`;
|
|
96
|
+
try {
|
|
97
|
+
execSync(cmd, { cwd: projectRoot, stdio: 'inherit' });
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
ErrorFactory.createCliError(`Failed to install ${options.label}`, { error });
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
91
105
|
let cmd;
|
|
92
106
|
let args = [];
|
|
93
107
|
switch (pm) {
|
|
@@ -106,20 +120,12 @@ async function npmInstall(packages, options) {
|
|
|
106
120
|
break;
|
|
107
121
|
}
|
|
108
122
|
try {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
const exit = await SpawnUtil.spawnAndWait({ command: cmd, args, cwd: projectRoot });
|
|
118
|
-
if (exit !== 0) {
|
|
119
|
-
throw ErrorFactory.createCliError(`Package manager ${pm} failed to install ${options.label}`, {
|
|
120
|
-
exit,
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
+
// Use async spawn for all package managers to avoid blocking event loop
|
|
124
|
+
const exit = await SpawnUtil.spawnAndWait({ command: cmd, args, cwd: projectRoot });
|
|
125
|
+
if (exit !== 0) {
|
|
126
|
+
throw ErrorFactory.createCliError(`Package manager ${pm} failed to install ${options.label}`, {
|
|
127
|
+
exit,
|
|
128
|
+
});
|
|
123
129
|
}
|
|
124
130
|
}
|
|
125
131
|
catch (error) {
|
|
@@ -130,7 +136,8 @@ async function npmInstall(packages, options) {
|
|
|
130
136
|
async function copyPluginTemplates(plugin) {
|
|
131
137
|
const templateRoot = resolveTemplateRootOrThrow();
|
|
132
138
|
const projectRoot = resolveProjectRoot();
|
|
133
|
-
|
|
139
|
+
// Parallelize file operations using Promise.all
|
|
140
|
+
await Promise.all(plugin.templates.map(async (template) => {
|
|
134
141
|
const sourcePath = path.join(templateRoot, template.source);
|
|
135
142
|
const destPath = path.join(projectRoot, template.destination);
|
|
136
143
|
// Prevent path traversal: resolved destination must be within project root
|
|
@@ -154,7 +161,7 @@ async function copyPluginTemplates(plugin) {
|
|
|
154
161
|
ErrorFactory.createCliError(`Failed to copy template ${template.source}`, { error });
|
|
155
162
|
throw error;
|
|
156
163
|
}
|
|
157
|
-
}
|
|
164
|
+
}));
|
|
158
165
|
}
|
|
159
166
|
async function ensurePluginAutoImports(plugin) {
|
|
160
167
|
const rawImports = plugin.autoImports;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeDetector.d.ts","sourceRoot":"","sources":["../../../src/runtime/RuntimeDetector.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"RuntimeDetector.d.ts","sourceRoot":"","sources":["../../../src/runtime/RuntimeDetector.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAkK9F,eAAO,MAAM,eAAe;;;yBA9GF,MAAM;4BAyBD,aAAa,KAAG,cAAc;uCAQnB,MAAM,UAAU,aAAa,KAAG,cAAc;0BAuD7D,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;EA6BhD,CAAC;AA8IH,eAAO,MAAM,oBAAoB;0BAtGE,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC;wBA0DlC,MAAM,KAAe,OAAO,CAAC,IAAI,CAAC;iCAmChC,IAAI;EAapC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AdapterConfig, RuntimeAdapter } from '../RuntimeAdapter';
|
|
1
|
+
import type { AdapterConfig, RuntimeAdapter } from '../RuntimeAdapter';
|
|
2
2
|
/**
|
|
3
3
|
* Cloudflare Workers adapter for Cloudflare's edge compute platform
|
|
4
4
|
* Uses fetch API and handles D1 database, KV storage bindings
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CloudflareAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/CloudflareAdapter.ts"],"names":[],"mappings":"AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"CloudflareAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/CloudflareAdapter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAOjD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;mBACY,aAAa,GAAG,cAAc;IAoD7C;;;OAGG;qBACc,OAAO;IAKxB;;;OAGG;qBACc,MAAM,GAAG,OAAO;EAIjC,CAAC;AA4IH;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,OAAO;IAChD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACjC,EAAE,CAAC,EAAE;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { appConfig } from '../../config/index.js';
|
|
5
5
|
import { Logger } from '../../config/logger.js';
|
|
6
|
-
import { createMockHttpObjects, ErrorResponse, HttpResponse
|
|
6
|
+
import { createMockHttpObjects, ErrorResponse, HttpResponse } from '../RuntimeAdapter.js';
|
|
7
7
|
/**
|
|
8
8
|
* Cloudflare Workers adapter for Cloudflare's edge compute platform
|
|
9
9
|
* Uses fetch API and handles D1 database, KV storage bindings
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DenoAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/DenoAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"DenoAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/DenoAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAMjD;;;GAGG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;mBACY,aAAa,GAAG,cAAc,GAAG;QAC9C,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1D;IAwDD;;OAEG;yBAEQ,cAAc,SACjB,MAAM,SACN,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IAQhB;;OAEG;aACY,OAAO,CAAC,OAAO,CAAC;IAK/B;;OAEG;mBACY,MAAM,iBAAiB,MAAM,GAAG,MAAM;IAKrD;;OAEG;2BACoB,OAAO;EAI9B,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Runtime adapter for Deno
|
|
3
3
|
*/
|
|
4
4
|
import Logger from '../../config/logger.js';
|
|
5
|
-
import { createMockHttpObjects, ErrorResponse
|
|
5
|
+
import { createMockHttpObjects, ErrorResponse } from '../RuntimeAdapter.js';
|
|
6
6
|
/**
|
|
7
7
|
* Deno runtime adapter for Deno Deploy and edge compute environments
|
|
8
8
|
* Sealed namespace for immutability
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AdapterConfig, RuntimeAdapter } from '../RuntimeAdapter';
|
|
1
|
+
import type { AdapterConfig, RuntimeAdapter } from '../RuntimeAdapter';
|
|
2
2
|
/**
|
|
3
3
|
* AWS Lambda adapter for API Gateway and ALB events
|
|
4
4
|
* Converts Lambda events to standard HTTP format for Zintrust framework
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LambdaAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/LambdaAdapter.ts"],"names":[],"mappings":"AAYA,OAAO,
|
|
1
|
+
{"version":3,"file":"LambdaAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/LambdaAdapter.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAMjD;;;;GAIG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;mBACY,aAAa,GAAG,cAAc;EA8D7C,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { Env } from '../../config/env.js';
|
|
5
5
|
import { Logger } from '../../config/logger.js';
|
|
6
6
|
import { IncomingMessage, ServerResponse, } from '../../node-singletons/http.js';
|
|
7
|
-
import { ErrorResponse, HttpResponse
|
|
7
|
+
import { ErrorResponse, HttpResponse } from '../RuntimeAdapter.js';
|
|
8
8
|
/**
|
|
9
9
|
* AWS Lambda adapter for API Gateway and ALB events
|
|
10
10
|
* Converts Lambda events to standard HTTP format for Zintrust framework
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AdapterConfig, RuntimeAdapter } from '../RuntimeAdapter';
|
|
1
|
+
import type { AdapterConfig, RuntimeAdapter } from '../RuntimeAdapter';
|
|
2
2
|
/**
|
|
3
3
|
* Node.js HTTP Server adapter for standard containers and traditional servers
|
|
4
4
|
* Uses Node.js built-in HTTP server for maximum compatibility
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeServerAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/NodeServerAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NodeServerAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/NodeServerAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,aAAa,EAGb,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;mBACY,aAAa,GAAG,cAAc,GAAG;QAC9C,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;KACvB;EAoED,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IKernel } from '../http/Kernel';
|
|
2
|
+
export declare function getKernel(): Promise<IKernel>;
|
|
3
|
+
/**
|
|
4
|
+
* Test-only helper.
|
|
5
|
+
*
|
|
6
|
+
* Allows unit tests to reset the singleton between cases without leaking state.
|
|
7
|
+
*/
|
|
8
|
+
export declare function __resetKernelForTests(): void;
|
|
9
|
+
//# sourceMappingURL=getKernel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getKernel.d.ts","sourceRoot":"","sources":["../../../src/runtime/getKernel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,wBAAsB,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAkBlD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Application } from '../boot/Application.js';
|
|
2
|
+
import { Kernel } from '../http/Kernel.js';
|
|
3
|
+
let kernelPromise = null;
|
|
4
|
+
export async function getKernel() {
|
|
5
|
+
if (kernelPromise !== null) {
|
|
6
|
+
return kernelPromise;
|
|
7
|
+
}
|
|
8
|
+
const initialize = async () => {
|
|
9
|
+
const app = Application.create();
|
|
10
|
+
await app.boot();
|
|
11
|
+
return Kernel.create(app.getRouter(), app.getContainer());
|
|
12
|
+
};
|
|
13
|
+
kernelPromise = initialize().catch((error) => {
|
|
14
|
+
// Allow retry on subsequent calls if initialization fails.
|
|
15
|
+
kernelPromise = null;
|
|
16
|
+
throw error;
|
|
17
|
+
});
|
|
18
|
+
return kernelPromise;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Test-only helper.
|
|
22
|
+
*
|
|
23
|
+
* Allows unit tests to reset the singleton between cases without leaking state.
|
|
24
|
+
*/
|
|
25
|
+
export function __resetKernelForTests() {
|
|
26
|
+
kernelPromise = null;
|
|
27
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
|
+
import ts from 'typescript';
|
|
3
4
|
const TEMPLATES_ROOT = path.resolve(process.cwd(), 'src/templates');
|
|
4
5
|
const bannedPrefixes = [
|
|
5
6
|
'@exceptions/',
|
|
@@ -79,6 +80,29 @@ function checkFile(filePath) {
|
|
|
79
80
|
}
|
|
80
81
|
return offenses;
|
|
81
82
|
}
|
|
83
|
+
function looksLikeTypeScriptTemplate(text) {
|
|
84
|
+
// Only attempt TS parsing when the template appears to contain TS module syntax.
|
|
85
|
+
// Many templates are not TS (markdown/env/etc.) and should not be validated this way.
|
|
86
|
+
return /\b(import|export)\b/.test(text);
|
|
87
|
+
}
|
|
88
|
+
function getTypeScriptSyntaxErrors(filePath) {
|
|
89
|
+
const text = fs.readFileSync(filePath, 'utf8');
|
|
90
|
+
if (!looksLikeTypeScriptTemplate(text))
|
|
91
|
+
return [];
|
|
92
|
+
const sourceFile = ts.createSourceFile(filePath, text, ts.ScriptTarget.ESNext, true, ts.ScriptKind.TS);
|
|
93
|
+
const diagnostics = sourceFile
|
|
94
|
+
.parseDiagnostics;
|
|
95
|
+
if (!diagnostics || diagnostics.length === 0)
|
|
96
|
+
return [];
|
|
97
|
+
const out = [];
|
|
98
|
+
for (const d of diagnostics) {
|
|
99
|
+
const message = ts.flattenDiagnosticMessageText(d.messageText, '\n');
|
|
100
|
+
const pos = typeof d.start === 'number' ? d.start : 0;
|
|
101
|
+
const { line } = sourceFile.getLineAndCharacterOfPosition(pos);
|
|
102
|
+
out.push({ line: line + 1, message });
|
|
103
|
+
}
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
82
106
|
function main() {
|
|
83
107
|
if (!fs.existsSync(TEMPLATES_ROOT)) {
|
|
84
108
|
process.stderr.write(`Templates root not found: ${TEMPLATES_ROOT}\n`);
|
|
@@ -86,6 +110,7 @@ function main() {
|
|
|
86
110
|
}
|
|
87
111
|
const files = listFilesRecursive(TEMPLATES_ROOT).filter(isTemplateFile);
|
|
88
112
|
const allOffenses = [];
|
|
113
|
+
const allSyntaxErrors = [];
|
|
89
114
|
for (const file of files) {
|
|
90
115
|
const offenses = checkFile(file);
|
|
91
116
|
for (const o of offenses) {
|
|
@@ -96,6 +121,21 @@ function main() {
|
|
|
96
121
|
text: o.text,
|
|
97
122
|
});
|
|
98
123
|
}
|
|
124
|
+
const syntaxErrors = getTypeScriptSyntaxErrors(file);
|
|
125
|
+
for (const e of syntaxErrors) {
|
|
126
|
+
allSyntaxErrors.push({
|
|
127
|
+
file: path.relative(process.cwd(), file),
|
|
128
|
+
line: e.line,
|
|
129
|
+
message: e.message,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
if (allSyntaxErrors.length > 0) {
|
|
134
|
+
process.stderr.write('Template syntax check failed. TypeScript parse errors found:\n');
|
|
135
|
+
for (const e of allSyntaxErrors) {
|
|
136
|
+
process.stderr.write(`- ${e.file}:${e.line} -> ${e.message}\n`);
|
|
137
|
+
}
|
|
138
|
+
process.exit(1);
|
|
99
139
|
}
|
|
100
140
|
if (allOffenses.length > 0) {
|
|
101
141
|
process.stderr.write('Template import check failed. Disallowed import specifiers found:\n');
|