@zintrust/core 0.1.0
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/bin/z.d.ts +7 -0
- package/bin/z.d.ts.map +1 -0
- package/bin/z.js +6 -0
- package/bin/zin.d.ts +7 -0
- package/bin/zin.d.ts.map +1 -0
- package/bin/zin.js +6 -0
- package/bin/zintrust-microservices.d.ts +7 -0
- package/bin/zintrust-microservices.d.ts.map +1 -0
- package/bin/zintrust-microservices.js +165 -0
- package/bin/zintrust.d.ts +9 -0
- package/bin/zintrust.d.ts.map +1 -0
- package/bin/zintrust.js +51 -0
- package/bin/zt.d.ts +7 -0
- package/bin/zt.d.ts.map +1 -0
- package/bin/zt.js +6 -0
- package/package.json +80 -0
- package/src/boot/Application.d.ts +31 -0
- package/src/boot/Application.d.ts.map +1 -0
- package/src/boot/Application.js +159 -0
- package/src/boot/Server.d.ts +23 -0
- package/src/boot/Server.d.ts.map +1 -0
- package/src/boot/Server.js +236 -0
- package/src/boot/bootstrap.d.ts +7 -0
- package/src/boot/bootstrap.d.ts.map +1 -0
- package/src/boot/bootstrap.js +64 -0
- package/src/builder/BundleOptimizer.d.ts +42 -0
- package/src/builder/BundleOptimizer.d.ts.map +1 -0
- package/src/builder/BundleOptimizer.js +356 -0
- package/src/cache/Cache.d.ts +26 -0
- package/src/cache/Cache.d.ts.map +1 -0
- package/src/cache/Cache.js +89 -0
- package/src/cache/CacheDriver.d.ts +28 -0
- package/src/cache/CacheDriver.d.ts.map +1 -0
- package/src/cache/CacheDriver.js +6 -0
- package/src/cache/drivers/KVDriver.d.ts +12 -0
- package/src/cache/drivers/KVDriver.d.ts.map +1 -0
- package/src/cache/drivers/KVDriver.js +54 -0
- package/src/cache/drivers/MemoryDriver.d.ts +12 -0
- package/src/cache/drivers/MemoryDriver.d.ts.map +1 -0
- package/src/cache/drivers/MemoryDriver.js +50 -0
- package/src/cache/drivers/MongoDriver.d.ts +17 -0
- package/src/cache/drivers/MongoDriver.d.ts.map +1 -0
- package/src/cache/drivers/MongoDriver.js +80 -0
- package/src/cache/drivers/RedisDriver.d.ts +12 -0
- package/src/cache/drivers/RedisDriver.d.ts.map +1 -0
- package/src/cache/drivers/RedisDriver.js +79 -0
- package/src/cli/BaseCommand.d.ts +39 -0
- package/src/cli/BaseCommand.d.ts.map +1 -0
- package/src/cli/BaseCommand.js +58 -0
- package/src/cli/CLI.d.ts +21 -0
- package/src/cli/CLI.d.ts.map +1 -0
- package/src/cli/CLI.js +203 -0
- package/src/cli/ErrorHandler.d.ts +23 -0
- package/src/cli/ErrorHandler.d.ts.map +1 -0
- package/src/cli/ErrorHandler.js +95 -0
- package/src/cli/PromptHelper.d.ts +47 -0
- package/src/cli/PromptHelper.d.ts.map +1 -0
- package/src/cli/PromptHelper.js +155 -0
- package/src/cli/commands/AddCommand.d.ts +15 -0
- package/src/cli/commands/AddCommand.d.ts.map +1 -0
- package/src/cli/commands/AddCommand.js +817 -0
- package/src/cli/commands/ConfigCommand.d.ts +15 -0
- package/src/cli/commands/ConfigCommand.d.ts.map +1 -0
- package/src/cli/commands/ConfigCommand.js +273 -0
- package/src/cli/commands/D1MigrateCommand.d.ts +15 -0
- package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -0
- package/src/cli/commands/D1MigrateCommand.js +73 -0
- package/src/cli/commands/DebugCommand.d.ts +15 -0
- package/src/cli/commands/DebugCommand.d.ts.map +1 -0
- package/src/cli/commands/DebugCommand.js +52 -0
- package/src/cli/commands/FixCommand.d.ts +15 -0
- package/src/cli/commands/FixCommand.d.ts.map +1 -0
- package/src/cli/commands/FixCommand.js +80 -0
- package/src/cli/commands/KeyGenerateCommand.d.ts +9 -0
- package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -0
- package/src/cli/commands/KeyGenerateCommand.js +76 -0
- package/src/cli/commands/LogsCommand.d.ts +19 -0
- package/src/cli/commands/LogsCommand.d.ts.map +1 -0
- package/src/cli/commands/LogsCommand.js +185 -0
- package/src/cli/commands/MigrateCommand.d.ts +15 -0
- package/src/cli/commands/MigrateCommand.d.ts.map +1 -0
- package/src/cli/commands/MigrateCommand.js +56 -0
- package/src/cli/commands/NewCommand.d.ts +32 -0
- package/src/cli/commands/NewCommand.d.ts.map +1 -0
- package/src/cli/commands/NewCommand.js +280 -0
- package/src/cli/commands/PluginCommand.d.ts +9 -0
- package/src/cli/commands/PluginCommand.d.ts.map +1 -0
- package/src/cli/commands/PluginCommand.js +94 -0
- package/src/cli/commands/PrepareCommand.d.ts +8 -0
- package/src/cli/commands/PrepareCommand.d.ts.map +1 -0
- package/src/cli/commands/PrepareCommand.js +51 -0
- package/src/cli/commands/QACommand.d.ts +33 -0
- package/src/cli/commands/QACommand.d.ts.map +1 -0
- package/src/cli/commands/QACommand.js +490 -0
- package/src/cli/commands/SimulateCommand.d.ts +12 -0
- package/src/cli/commands/SimulateCommand.d.ts.map +1 -0
- package/src/cli/commands/SimulateCommand.js +79 -0
- package/src/cli/commands/StartCommand.d.ts +5 -0
- package/src/cli/commands/StartCommand.d.ts.map +1 -0
- package/src/cli/commands/StartCommand.js +227 -0
- package/src/cli/commands/index.d.ts +11 -0
- package/src/cli/commands/index.d.ts.map +1 -0
- package/src/cli/commands/index.js +10 -0
- package/src/cli/config/ConfigManager.d.ts +42 -0
- package/src/cli/config/ConfigManager.d.ts.map +1 -0
- package/src/cli/config/ConfigManager.js +175 -0
- package/src/cli/config/ConfigSchema.d.ts +195 -0
- package/src/cli/config/ConfigSchema.d.ts.map +1 -0
- package/src/cli/config/ConfigSchema.js +171 -0
- package/src/cli/config/ConfigValidator.d.ts +41 -0
- package/src/cli/config/ConfigValidator.d.ts.map +1 -0
- package/src/cli/config/ConfigValidator.js +200 -0
- package/src/cli/config/index.d.ts +8 -0
- package/src/cli/config/index.d.ts.map +1 -0
- package/src/cli/config/index.js +7 -0
- package/src/cli/debug/Dashboard.d.ts +34 -0
- package/src/cli/debug/Dashboard.d.ts.map +1 -0
- package/src/cli/debug/Dashboard.js +152 -0
- package/src/cli/index.d.ts +14 -0
- package/src/cli/index.d.ts.map +1 -0
- package/src/cli/index.js +14 -0
- package/src/cli/logger/Logger.d.ts +43 -0
- package/src/cli/logger/Logger.d.ts.map +1 -0
- package/src/cli/logger/Logger.js +137 -0
- package/src/cli/scaffolding/ControllerGenerator.d.ts +44 -0
- package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/ControllerGenerator.js +540 -0
- package/src/cli/scaffolding/FactoryGenerator.d.ts +47 -0
- package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/FactoryGenerator.js +356 -0
- package/src/cli/scaffolding/FeatureScaffolder.d.ts +40 -0
- package/src/cli/scaffolding/FeatureScaffolder.d.ts.map +1 -0
- package/src/cli/scaffolding/FeatureScaffolder.js +747 -0
- package/src/cli/scaffolding/FileGenerator.d.ts +31 -0
- package/src/cli/scaffolding/FileGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/FileGenerator.js +222 -0
- package/src/cli/scaffolding/MigrationGenerator.d.ts +35 -0
- package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/MigrationGenerator.js +257 -0
- package/src/cli/scaffolding/ModelGenerator.d.ts +81 -0
- package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/ModelGenerator.js +249 -0
- package/src/cli/scaffolding/ProjectScaffolder.d.ts +66 -0
- package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -0
- package/src/cli/scaffolding/ProjectScaffolder.js +439 -0
- package/src/cli/scaffolding/RequestFactoryGenerator.d.ts +50 -0
- package/src/cli/scaffolding/RequestFactoryGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/RequestFactoryGenerator.js +465 -0
- package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts +43 -0
- package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/ResponseFactoryGenerator.js +321 -0
- package/src/cli/scaffolding/RouteGenerator.d.ts +66 -0
- package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/RouteGenerator.js +306 -0
- package/src/cli/scaffolding/SeederGenerator.d.ts +47 -0
- package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/SeederGenerator.js +286 -0
- package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts +40 -0
- package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +267 -0
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts +45 -0
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +397 -0
- package/src/cli/scaffolding/ServiceScaffolder.d.ts +45 -0
- package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -0
- package/src/cli/scaffolding/ServiceScaffolder.js +367 -0
- package/src/cli/scaffolding/TemplateEngine.d.ts +35 -0
- package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -0
- package/src/cli/scaffolding/TemplateEngine.js +379 -0
- package/src/cli/scaffolding/WorkflowGenerator.d.ts +31 -0
- package/src/cli/scaffolding/WorkflowGenerator.d.ts.map +1 -0
- package/src/cli/scaffolding/WorkflowGenerator.js +193 -0
- package/src/cli/scaffolding/index.d.ts +34 -0
- package/src/cli/scaffolding/index.d.ts.map +1 -0
- package/src/cli/scaffolding/index.js +18 -0
- package/src/cli/utils/DistPackager.d.ts +8 -0
- package/src/cli/utils/DistPackager.d.ts.map +1 -0
- package/src/cli/utils/DistPackager.js +94 -0
- package/src/cli/utils/EnvFileLoader.d.ts +21 -0
- package/src/cli/utils/EnvFileLoader.d.ts.map +1 -0
- package/src/cli/utils/EnvFileLoader.js +166 -0
- package/src/cli/utils/spawn.d.ts +11 -0
- package/src/cli/utils/spawn.d.ts.map +1 -0
- package/src/cli/utils/spawn.js +81 -0
- package/src/common/index.d.ts +87 -0
- package/src/common/index.d.ts.map +1 -0
- package/src/common/index.js +207 -0
- package/src/config/SecretsManager.d.ts +122 -0
- package/src/config/SecretsManager.d.ts.map +1 -0
- package/src/config/SecretsManager.js +328 -0
- package/src/config/app.d.ts +56 -0
- package/src/config/app.d.ts.map +1 -0
- package/src/config/app.js +77 -0
- package/src/config/cache.d.ts +76 -0
- package/src/config/cache.d.ts.map +1 -0
- package/src/config/cache.js +62 -0
- package/src/config/constants.d.ts +108 -0
- package/src/config/constants.d.ts.map +1 -0
- package/src/config/constants.js +64 -0
- package/src/config/database.d.ts +122 -0
- package/src/config/database.d.ts.map +1 -0
- package/src/config/database.js +89 -0
- package/src/config/env.d.ts +56 -0
- package/src/config/env.d.ts.map +1 -0
- package/src/config/env.js +133 -0
- package/src/config/features.d.ts +27 -0
- package/src/config/features.d.ts.map +1 -0
- package/src/config/features.js +49 -0
- package/src/config/index.d.ts +554 -0
- package/src/config/index.d.ts.map +1 -0
- package/src/config/index.js +31 -0
- package/src/config/logger.d.ts +17 -0
- package/src/config/logger.d.ts.map +1 -0
- package/src/config/logger.js +77 -0
- package/src/config/microservices.d.ts +88 -0
- package/src/config/microservices.d.ts.map +1 -0
- package/src/config/microservices.js +90 -0
- package/src/config/queue.d.ts +107 -0
- package/src/config/queue.d.ts.map +1 -0
- package/src/config/queue.js +74 -0
- package/src/config/security.d.ts +108 -0
- package/src/config/security.d.ts.map +1 -0
- package/src/config/security.js +134 -0
- package/src/config/storage.d.ts +105 -0
- package/src/config/storage.d.ts.map +1 -0
- package/src/config/storage.js +79 -0
- package/src/container/ServiceContainer.d.ts +25 -0
- package/src/container/ServiceContainer.d.ts.map +1 -0
- package/src/container/ServiceContainer.js +75 -0
- package/src/database/migrations/index.d.ts +2 -0
- package/src/database/migrations/index.d.ts.map +1 -0
- package/src/database/migrations/index.js +1 -0
- package/src/exceptions/ZintrustError.d.ts +88 -0
- package/src/exceptions/ZintrustError.d.ts.map +1 -0
- package/src/exceptions/ZintrustError.js +110 -0
- package/src/features/Auth.d.ts +20 -0
- package/src/features/Auth.d.ts.map +1 -0
- package/src/features/Auth.js +32 -0
- package/src/features/Queue.d.ts +21 -0
- package/src/features/Queue.d.ts.map +1 -0
- package/src/features/Queue.js +59 -0
- package/src/functions/cloudflare.d.ts +5 -0
- package/src/functions/cloudflare.d.ts.map +1 -0
- package/src/functions/cloudflare.js +34 -0
- package/src/functions/deno.d.ts +3 -0
- package/src/functions/deno.d.ts.map +1 -0
- package/src/functions/deno.js +31 -0
- package/src/functions/lambda.d.ts +2 -0
- package/src/functions/lambda.d.ts.map +1 -0
- package/src/functions/lambda.js +32 -0
- package/src/http/Controller.d.ts +20 -0
- package/src/http/Controller.d.ts.map +1 -0
- package/src/http/Controller.js +46 -0
- package/src/http/Kernel.d.ts +24 -0
- package/src/http/Kernel.d.ts.map +1 -0
- package/src/http/Kernel.js +72 -0
- package/src/http/Request.d.ts +36 -0
- package/src/http/Request.d.ts.map +1 -0
- package/src/http/Request.js +142 -0
- package/src/http/Response.d.ts +32 -0
- package/src/http/Response.d.ts.map +1 -0
- package/src/http/Response.js +70 -0
- package/src/index.d.ts +43 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +37 -0
- package/src/microservices/MicroserviceBootstrap.d.ts +75 -0
- package/src/microservices/MicroserviceBootstrap.d.ts.map +1 -0
- package/src/microservices/MicroserviceBootstrap.js +285 -0
- package/src/microservices/MicroserviceGenerator.d.ts +27 -0
- package/src/microservices/MicroserviceGenerator.d.ts.map +1 -0
- package/src/microservices/MicroserviceGenerator.js +436 -0
- package/src/microservices/MicroserviceManager.d.ts +68 -0
- package/src/microservices/MicroserviceManager.d.ts.map +1 -0
- package/src/microservices/MicroserviceManager.js +266 -0
- package/src/microservices/PostgresAdapter.d.ts +90 -0
- package/src/microservices/PostgresAdapter.d.ts.map +1 -0
- package/src/microservices/PostgresAdapter.js +286 -0
- package/src/microservices/RequestTracingMiddleware.d.ts +41 -0
- package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -0
- package/src/microservices/RequestTracingMiddleware.js +122 -0
- package/src/microservices/ServiceAuthMiddleware.d.ts +58 -0
- package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -0
- package/src/microservices/ServiceAuthMiddleware.js +240 -0
- package/src/microservices/ServiceBundler.d.ts +45 -0
- package/src/microservices/ServiceBundler.d.ts.map +1 -0
- package/src/microservices/ServiceBundler.js +297 -0
- package/src/microservices/ServiceHealthMonitor.d.ts +96 -0
- package/src/microservices/ServiceHealthMonitor.d.ts.map +1 -0
- package/src/microservices/ServiceHealthMonitor.js +379 -0
- package/src/middleware/CsrfMiddleware.d.ts +19 -0
- package/src/middleware/CsrfMiddleware.d.ts.map +1 -0
- package/src/middleware/CsrfMiddleware.js +121 -0
- package/src/middleware/MiddlewareStack.d.ts +27 -0
- package/src/middleware/MiddlewareStack.d.ts.map +1 -0
- package/src/middleware/MiddlewareStack.js +43 -0
- package/src/middleware/RateLimiter.d.ts +22 -0
- package/src/middleware/RateLimiter.d.ts.map +1 -0
- package/src/middleware/RateLimiter.js +72 -0
- package/src/middleware/SecurityMiddleware.d.ts +33 -0
- package/src/middleware/SecurityMiddleware.d.ts.map +1 -0
- package/src/middleware/SecurityMiddleware.js +106 -0
- package/src/middleware/index.d.ts +9 -0
- package/src/middleware/index.d.ts.map +1 -0
- package/src/middleware/index.js +8 -0
- package/src/node-singletons/child-process.d.ts +7 -0
- package/src/node-singletons/child-process.d.ts.map +1 -0
- package/src/node-singletons/child-process.js +6 -0
- package/src/node-singletons/crypto.d.ts +7 -0
- package/src/node-singletons/crypto.d.ts.map +1 -0
- package/src/node-singletons/crypto.js +6 -0
- package/src/node-singletons/events.d.ts +7 -0
- package/src/node-singletons/events.d.ts.map +1 -0
- package/src/node-singletons/events.js +6 -0
- package/src/node-singletons/fs.d.ts +12 -0
- package/src/node-singletons/fs.d.ts.map +1 -0
- package/src/node-singletons/fs.js +14 -0
- package/src/node-singletons/http.d.ts +8 -0
- package/src/node-singletons/http.d.ts.map +1 -0
- package/src/node-singletons/http.js +6 -0
- package/src/node-singletons/index.d.ts +30 -0
- package/src/node-singletons/index.d.ts.map +1 -0
- package/src/node-singletons/index.js +31 -0
- package/src/node-singletons/os.d.ts +9 -0
- package/src/node-singletons/os.d.ts.map +1 -0
- package/src/node-singletons/os.js +9 -0
- package/src/node-singletons/path.d.ts +7 -0
- package/src/node-singletons/path.d.ts.map +1 -0
- package/src/node-singletons/path.js +6 -0
- package/src/node-singletons/perf-hooks.d.ts +7 -0
- package/src/node-singletons/perf-hooks.d.ts.map +1 -0
- package/src/node-singletons/perf-hooks.js +6 -0
- package/src/node-singletons/readline.d.ts +10 -0
- package/src/node-singletons/readline.d.ts.map +1 -0
- package/src/node-singletons/readline.js +9 -0
- package/src/node-singletons/url.d.ts +7 -0
- package/src/node-singletons/url.d.ts.map +1 -0
- package/src/node-singletons/url.js +6 -0
- package/src/orm/ConnectionManager.d.ts +118 -0
- package/src/orm/ConnectionManager.d.ts.map +1 -0
- package/src/orm/ConnectionManager.js +401 -0
- package/src/orm/Database.d.ts +31 -0
- package/src/orm/Database.d.ts.map +1 -0
- package/src/orm/Database.js +163 -0
- package/src/orm/DatabaseAdapter.d.ts +96 -0
- package/src/orm/DatabaseAdapter.d.ts.map +1 -0
- package/src/orm/DatabaseAdapter.js +40 -0
- package/src/orm/Model.d.ts +91 -0
- package/src/orm/Model.d.ts.map +1 -0
- package/src/orm/Model.js +206 -0
- package/src/orm/QueryBuilder.d.ts +52 -0
- package/src/orm/QueryBuilder.d.ts.map +1 -0
- package/src/orm/QueryBuilder.js +134 -0
- package/src/orm/Relationships.d.ts +53 -0
- package/src/orm/Relationships.d.ts.map +1 -0
- package/src/orm/Relationships.js +98 -0
- package/src/orm/Schema.d.ts +123 -0
- package/src/orm/Schema.d.ts.map +1 -0
- package/src/orm/Schema.js +169 -0
- package/src/orm/adapters/D1Adapter.d.ts +15 -0
- package/src/orm/adapters/D1Adapter.d.ts.map +1 -0
- package/src/orm/adapters/D1Adapter.js +125 -0
- package/src/orm/adapters/MySQLAdapter.d.ts +16 -0
- package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -0
- package/src/orm/adapters/MySQLAdapter.js +87 -0
- package/src/orm/adapters/PostgreSQLAdapter.d.ts +16 -0
- package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -0
- package/src/orm/adapters/PostgreSQLAdapter.js +87 -0
- package/src/orm/adapters/SQLServerAdapter.d.ts +16 -0
- package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -0
- package/src/orm/adapters/SQLServerAdapter.js +81 -0
- package/src/orm/adapters/SQLiteAdapter.d.ts +11 -0
- package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -0
- package/src/orm/adapters/SQLiteAdapter.js +131 -0
- package/src/performance/Benchmark.d.ts +87 -0
- package/src/performance/Benchmark.d.ts.map +1 -0
- package/src/performance/Benchmark.js +304 -0
- package/src/performance/CodeGenerationBenchmark.d.ts +23 -0
- package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -0
- package/src/performance/CodeGenerationBenchmark.js +249 -0
- package/src/performance/Optimizer.d.ts +99 -0
- package/src/performance/Optimizer.d.ts.map +1 -0
- package/src/performance/Optimizer.js +396 -0
- package/src/performance/establish-baseline.d.ts +9 -0
- package/src/performance/establish-baseline.d.ts.map +1 -0
- package/src/performance/establish-baseline.js +55 -0
- package/src/profiling/MemoryProfiler.d.ts +32 -0
- package/src/profiling/MemoryProfiler.d.ts.map +1 -0
- package/src/profiling/MemoryProfiler.js +84 -0
- package/src/profiling/N1Detector.d.ts +16 -0
- package/src/profiling/N1Detector.d.ts.map +1 -0
- package/src/profiling/N1Detector.js +120 -0
- package/src/profiling/QueryLogger.d.ts +107 -0
- package/src/profiling/QueryLogger.d.ts.map +1 -0
- package/src/profiling/QueryLogger.js +148 -0
- package/src/profiling/RequestProfiler.d.ts +30 -0
- package/src/profiling/RequestProfiler.d.ts.map +1 -0
- package/src/profiling/RequestProfiler.js +94 -0
- package/src/profiling/types.d.ts +77 -0
- package/src/profiling/types.d.ts.map +1 -0
- package/src/profiling/types.js +5 -0
- package/src/routing/Router.d.ts +52 -0
- package/src/routing/Router.d.ts.map +1 -0
- package/src/routing/Router.js +191 -0
- package/src/runtime/PluginManager.d.ts +30 -0
- package/src/runtime/PluginManager.d.ts.map +1 -0
- package/src/runtime/PluginManager.js +197 -0
- package/src/runtime/PluginRegistry.d.ts +22 -0
- package/src/runtime/PluginRegistry.d.ts.map +1 -0
- package/src/runtime/PluginRegistry.js +93 -0
- package/src/runtime/RuntimeAdapter.d.ts +126 -0
- package/src/runtime/RuntimeAdapter.d.ts.map +1 -0
- package/src/runtime/RuntimeAdapter.js +127 -0
- package/src/runtime/RuntimeDetector.d.ts +15 -0
- package/src/runtime/RuntimeDetector.d.ts.map +1 -0
- package/src/runtime/RuntimeDetector.js +219 -0
- package/src/runtime/adapters/CloudflareAdapter.d.ts +43 -0
- package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -0
- package/src/runtime/adapters/CloudflareAdapter.js +175 -0
- package/src/runtime/adapters/DenoAdapter.d.ts +30 -0
- package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -0
- package/src/runtime/adapters/DenoAdapter.js +191 -0
- package/src/runtime/adapters/FargateAdapter.d.ts +40 -0
- package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -0
- package/src/runtime/adapters/FargateAdapter.js +156 -0
- package/src/runtime/adapters/LambdaAdapter.d.ts +13 -0
- package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -0
- package/src/runtime/adapters/LambdaAdapter.js +302 -0
- package/src/runtime/adapters/NodeServerAdapter.d.ts +16 -0
- package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -0
- package/src/runtime/adapters/NodeServerAdapter.js +199 -0
- package/src/scripts/TemplateSync.d.ts +7 -0
- package/src/scripts/TemplateSync.d.ts.map +1 -0
- package/src/scripts/TemplateSync.js +234 -0
- package/src/security/CsrfTokenManager.d.ts +28 -0
- package/src/security/CsrfTokenManager.d.ts.map +1 -0
- package/src/security/CsrfTokenManager.js +78 -0
- package/src/security/Encryptor.d.ts +15 -0
- package/src/security/Encryptor.d.ts.map +1 -0
- package/src/security/Encryptor.js +142 -0
- package/src/security/JwtManager.d.ts +41 -0
- package/src/security/JwtManager.d.ts.map +1 -0
- package/src/security/JwtManager.js +229 -0
- package/src/security/UrlValidator.d.ts +21 -0
- package/src/security/UrlValidator.d.ts.map +1 -0
- package/src/security/UrlValidator.js +42 -0
- package/src/security/XssProtection.d.ts +24 -0
- package/src/security/XssProtection.d.ts.map +1 -0
- package/src/security/XssProtection.js +133 -0
- package/src/templates/TemplateRegistry.d.ts +40 -0
- package/src/templates/TemplateRegistry.d.ts.map +1 -0
- package/src/templates/TemplateRegistry.js +78 -0
- package/src/templates/TemplateRegistry.ts +91 -0
- package/src/templates/adapters/MySQLAdapter.ts.tpl +97 -0
- package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +101 -0
- package/src/templates/adapters/SQLServerAdapter.ts.tpl +95 -0
- package/src/templates/adapters/SQLiteAdapter.ts.tpl +189 -0
- package/src/templates/features/Auth.ts.tpl +40 -0
- package/src/templates/features/Queue.ts.tpl +75 -0
- package/src/templates/project/basic/.env.example.tpl +26 -0
- package/src/templates/project/basic/.env.tpl +164 -0
- package/src/templates/project/basic/README.md.tpl +13 -0
- package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +155 -0
- package/src/templates/project/basic/app/Middleware/ProfilerMiddleware.ts.tpl +55 -0
- package/src/templates/project/basic/app/Middleware/index.ts.tpl +304 -0
- package/src/templates/project/basic/app/Models/Post.ts.tpl +30 -0
- package/src/templates/project/basic/app/Models/User.ts.tpl +53 -0
- package/src/templates/project/basic/config/SecretsManager.ts.tpl +453 -0
- package/src/templates/project/basic/config/app.ts.tpl +97 -0
- package/src/templates/project/basic/config/cache.ts.tpl +117 -0
- package/src/templates/project/basic/config/constants.ts.tpl +70 -0
- package/src/templates/project/basic/config/database.ts.tpl +152 -0
- package/src/templates/project/basic/config/env.ts.tpl +148 -0
- package/src/templates/project/basic/config/features.ts.tpl +57 -0
- package/src/templates/project/basic/config/index.ts.tpl +36 -0
- package/src/templates/project/basic/config/logger.ts.tpl +95 -0
- package/src/templates/project/basic/config/microservices.ts.tpl +104 -0
- package/src/templates/project/basic/config/queue.ts.tpl +134 -0
- package/src/templates/project/basic/config/security.ts.tpl +149 -0
- package/src/templates/project/basic/config/storage.ts.tpl +136 -0
- package/src/templates/project/basic/database/factories/.gitkeep.tpl +0 -0
- package/src/templates/project/basic/database/migrations/.gitkeep.tpl +0 -0
- package/src/templates/project/basic/database/migrations/index.ts.tpl +2 -0
- package/src/templates/project/basic/database/seeders/.gitkeep.tpl +0 -0
- package/src/templates/project/basic/package.json.tpl +22 -0
- package/src/templates/project/basic/routes/api.ts.tpl +135 -0
- package/src/templates/project/basic/src/index.ts.tpl +49 -0
- package/src/templates/project/basic/template.json +17 -0
- package/src/templates/project/basic/tsconfig.json.tpl +20 -0
- package/src/validation/ValidationError.d.ts +42 -0
- package/src/validation/ValidationError.d.ts.map +1 -0
- package/src/validation/ValidationError.js +53 -0
- package/src/validation/Validator.d.ts +60 -0
- package/src/validation/Validator.d.ts.map +1 -0
- package/src/validation/Validator.js +190 -0
|
@@ -0,0 +1,747 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FeatureScaffolder - Generate features within a service
|
|
3
|
+
* Features like authentication, payments, logging, API docs, etc.
|
|
4
|
+
*/
|
|
5
|
+
import { FileGenerator } from '../scaffolding/FileGenerator';
|
|
6
|
+
import { Logger } from '../../config/logger';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
/**
|
|
9
|
+
* FeatureScaffolder adds features to services
|
|
10
|
+
*/
|
|
11
|
+
const FEATURE_TEMPLATES = {
|
|
12
|
+
auth: () => generateAuthFeature(),
|
|
13
|
+
logging: () => generateLoggingFeature(),
|
|
14
|
+
payments: () => generatePaymentsFeature(),
|
|
15
|
+
'api-docs': () => generateApiDocsFeature(),
|
|
16
|
+
email: () => generateEmailFeature(),
|
|
17
|
+
cache: () => generateCacheFeature(),
|
|
18
|
+
queue: () => generateQueueFeature(),
|
|
19
|
+
websocket: () => generateWebSocketFeature(),
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Validate feature options
|
|
23
|
+
*/
|
|
24
|
+
export function validateOptions(options) {
|
|
25
|
+
const errors = [];
|
|
26
|
+
if (!Object.keys(FEATURE_TEMPLATES).includes(options.name)) {
|
|
27
|
+
errors.push(`Unknown feature '${options.name}'. Supported: ${Object.keys(FEATURE_TEMPLATES).join(', ')}`);
|
|
28
|
+
}
|
|
29
|
+
if (options.servicePath === '' || !FileGenerator.directoryExists(options.servicePath)) {
|
|
30
|
+
errors.push(`Service path does not exist: ${options.servicePath}`);
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
valid: errors.length === 0,
|
|
34
|
+
errors,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get available features
|
|
39
|
+
*/
|
|
40
|
+
export function getAvailableFeatures() {
|
|
41
|
+
return Object.keys(FEATURE_TEMPLATES);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Add feature to service
|
|
45
|
+
*/
|
|
46
|
+
export function addFeature(options) {
|
|
47
|
+
try {
|
|
48
|
+
const validation = validateOptions(options);
|
|
49
|
+
if (validation.valid === false) {
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
featureName: options.name,
|
|
53
|
+
filesCreated: [],
|
|
54
|
+
message: `Validation failed: ${validation.errors.join(', ')}`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const featureDir = prepareFeatureDirectory(options);
|
|
58
|
+
if (typeof featureDir === 'string' && featureDir.startsWith('Error:')) {
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
featureName: options.name,
|
|
62
|
+
filesCreated: [],
|
|
63
|
+
message: featureDir.replace('Error: ', ''),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const filesCreated = generateFeatureFiles(options, featureDir);
|
|
67
|
+
Logger.info(`✅ Added feature '${options.name}' with ${filesCreated.length} files`);
|
|
68
|
+
return {
|
|
69
|
+
success: true,
|
|
70
|
+
featureName: options.name,
|
|
71
|
+
filesCreated,
|
|
72
|
+
message: `Feature '${options.name}' added successfully`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
Logger.error('Feature scaffolding error', error);
|
|
77
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
78
|
+
return {
|
|
79
|
+
success: false,
|
|
80
|
+
featureName: options.name,
|
|
81
|
+
filesCreated: [],
|
|
82
|
+
message: `Failed to add feature: ${errorMsg}`,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Prepare feature directory
|
|
88
|
+
*/
|
|
89
|
+
function prepareFeatureDirectory(options) {
|
|
90
|
+
const featuresDir = path.join(options.servicePath, 'src', 'features');
|
|
91
|
+
FileGenerator.createDirectory(featuresDir);
|
|
92
|
+
const featureDir = path.join(featuresDir, options.name);
|
|
93
|
+
if (FileGenerator.directoryExists(featureDir)) {
|
|
94
|
+
return `Error: Feature '${options.name}' already exists at ${featureDir}`;
|
|
95
|
+
}
|
|
96
|
+
FileGenerator.createDirectory(featureDir);
|
|
97
|
+
return featureDir;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Generate feature files
|
|
101
|
+
*/
|
|
102
|
+
function generateFeatureFiles(options, featureDir) {
|
|
103
|
+
const filesCreated = [];
|
|
104
|
+
const generator = FEATURE_TEMPLATES[options.name];
|
|
105
|
+
if (generator === undefined) {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
const featureContent = generator();
|
|
109
|
+
const featurePath = path.join(featureDir, 'index.ts');
|
|
110
|
+
FileGenerator.writeFile(featurePath, featureContent);
|
|
111
|
+
filesCreated.push(featurePath);
|
|
112
|
+
if (options.withTest === true) {
|
|
113
|
+
const testPath = path.join(featureDir, `${options.name}.test.ts`);
|
|
114
|
+
FileGenerator.writeFile(testPath, generateFeatureTest(options.name));
|
|
115
|
+
filesCreated.push(testPath);
|
|
116
|
+
}
|
|
117
|
+
const readmePath = path.join(featureDir, 'README.md');
|
|
118
|
+
FileGenerator.writeFile(readmePath, generateFeatureReadme(options.name));
|
|
119
|
+
filesCreated.push(readmePath);
|
|
120
|
+
return filesCreated;
|
|
121
|
+
}
|
|
122
|
+
// Feature generators
|
|
123
|
+
function generateAuthFeature() {
|
|
124
|
+
return AUTH_TEMPLATE;
|
|
125
|
+
}
|
|
126
|
+
function generatePaymentsFeature() {
|
|
127
|
+
return PAYMENTS_TEMPLATE;
|
|
128
|
+
}
|
|
129
|
+
function generateLoggingFeature() {
|
|
130
|
+
return LOGGING_TEMPLATE;
|
|
131
|
+
}
|
|
132
|
+
function generateApiDocsFeature() {
|
|
133
|
+
return API_DOCS_TEMPLATE;
|
|
134
|
+
}
|
|
135
|
+
function generateEmailFeature() {
|
|
136
|
+
return EMAIL_TEMPLATE;
|
|
137
|
+
}
|
|
138
|
+
function generateCacheFeature() {
|
|
139
|
+
return CACHE_TEMPLATE;
|
|
140
|
+
}
|
|
141
|
+
function generateQueueFeature() {
|
|
142
|
+
return QUEUE_TEMPLATE;
|
|
143
|
+
}
|
|
144
|
+
function generateWebSocketFeature() {
|
|
145
|
+
return WEBSOCKET_TEMPLATE;
|
|
146
|
+
}
|
|
147
|
+
const AUTH_TEMPLATE = `/**
|
|
148
|
+
* Authentication Feature
|
|
149
|
+
* Provides JWT and session management
|
|
150
|
+
*/
|
|
151
|
+
|
|
152
|
+
import jwt from 'jsonwebtoken';
|
|
153
|
+
|
|
154
|
+
export interface AuthConfig {
|
|
155
|
+
secret: string;
|
|
156
|
+
expiresIn: string;
|
|
157
|
+
algorithm: 'HS256' | 'HS512';
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* AuthService - Pure Functional Object
|
|
162
|
+
*/
|
|
163
|
+
export const AuthService = {
|
|
164
|
+
/**
|
|
165
|
+
* Create a new auth service instance
|
|
166
|
+
*/
|
|
167
|
+
create(config: AuthConfig) {
|
|
168
|
+
return {
|
|
169
|
+
/**
|
|
170
|
+
* Generate JWT token
|
|
171
|
+
*/
|
|
172
|
+
generateToken(payload: Record<string, unknown>): string {
|
|
173
|
+
return jwt.sign(payload, config.secret, {
|
|
174
|
+
expiresIn: config.expiresIn,
|
|
175
|
+
algorithm: config.algorithm,
|
|
176
|
+
});
|
|
177
|
+
},
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Verify JWT token
|
|
181
|
+
*/
|
|
182
|
+
verifyToken(token: string): Record<string, unknown> | null {
|
|
183
|
+
try {
|
|
184
|
+
return jwt.verify(token, config.secret) as Record<string, unknown>;
|
|
185
|
+
} catch {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Decode token (without verification)
|
|
192
|
+
*/
|
|
193
|
+
decodeToken(token: string): Record<string, unknown> | null {
|
|
194
|
+
try {
|
|
195
|
+
return jwt.decode(token) as Record<string, unknown> | null;
|
|
196
|
+
} catch {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
export default AuthService;
|
|
205
|
+
`;
|
|
206
|
+
const PAYMENTS_TEMPLATE = `/**
|
|
207
|
+
* Payments Feature
|
|
208
|
+
* Handles payment processing and transactions
|
|
209
|
+
*/
|
|
210
|
+
|
|
211
|
+
import { randomBytes } from 'node:crypto';
|
|
212
|
+
|
|
213
|
+
export interface PaymentConfig {
|
|
214
|
+
provider: 'stripe' | 'paypal' | 'square';
|
|
215
|
+
apiKey: string;
|
|
216
|
+
webhookSecret?: string;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export interface Payment {
|
|
220
|
+
id: string;
|
|
221
|
+
amount: number;
|
|
222
|
+
currency: string;
|
|
223
|
+
status: 'pending' | 'completed' | 'failed' | 'refunded';
|
|
224
|
+
method: string;
|
|
225
|
+
createdAt: Date;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* PaymentService - Pure Functional Object
|
|
230
|
+
*/
|
|
231
|
+
export const PaymentService = {
|
|
232
|
+
/**
|
|
233
|
+
* Create a new payment service instance
|
|
234
|
+
*/
|
|
235
|
+
create(config: PaymentConfig) {
|
|
236
|
+
return {
|
|
237
|
+
/**
|
|
238
|
+
* Process payment
|
|
239
|
+
*/
|
|
240
|
+
async processPayment(payment: Payment): Promise<{ success: boolean; transactionId?: string }> {
|
|
241
|
+
// Implementation depends on provider
|
|
242
|
+
return { success: true, transactionId: 'txn_' + randomBytes(8).toString('hex') };
|
|
243
|
+
},
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Refund payment
|
|
247
|
+
*/
|
|
248
|
+
async refundPayment(transactionId: string): Promise<{ success: boolean }> {
|
|
249
|
+
return { success: true };
|
|
250
|
+
},
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Get payment status
|
|
254
|
+
*/
|
|
255
|
+
async getStatus(transactionId: string): Promise<Payment | null> {
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
export default PaymentService;
|
|
263
|
+
`;
|
|
264
|
+
const LOGGING_TEMPLATE = `/**
|
|
265
|
+
* Logging Feature
|
|
266
|
+
* Structured logging with multiple transports
|
|
267
|
+
*/
|
|
268
|
+
|
|
269
|
+
import { Logger } from '../../config/logger';
|
|
270
|
+
|
|
271
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
272
|
+
|
|
273
|
+
export interface LogEntry {
|
|
274
|
+
timestamp: Date;
|
|
275
|
+
level: LogLevel;
|
|
276
|
+
message: string;
|
|
277
|
+
context?: Record<string, unknown>;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* LoggingService - Pure Functional Object
|
|
282
|
+
*/
|
|
283
|
+
export const LoggingService = {
|
|
284
|
+
/**
|
|
285
|
+
* Create a new logging service instance
|
|
286
|
+
*/
|
|
287
|
+
create() {
|
|
288
|
+
let logs: LogEntry[] = [];
|
|
289
|
+
|
|
290
|
+
return {
|
|
291
|
+
/**
|
|
292
|
+
* Log message
|
|
293
|
+
*/
|
|
294
|
+
log(level: LogLevel, message: string, context?: Record<string, unknown>): void {
|
|
295
|
+
const entry: LogEntry = {
|
|
296
|
+
timestamp: new Date(),
|
|
297
|
+
level,
|
|
298
|
+
message,
|
|
299
|
+
context,
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
logs.push(entry);
|
|
303
|
+
|
|
304
|
+
if (level === 'error') {
|
|
305
|
+
Logger.error(message, context);
|
|
306
|
+
} else if (level === 'warn') {
|
|
307
|
+
Logger.warn(message, context);
|
|
308
|
+
} else {
|
|
309
|
+
Logger.info(message, context);
|
|
310
|
+
}
|
|
311
|
+
},
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Get logs
|
|
315
|
+
*/
|
|
316
|
+
getLogs(level?: LogLevel, limit: number = 100): LogEntry[] {
|
|
317
|
+
let filtered = logs;
|
|
318
|
+
if (level !== undefined) {
|
|
319
|
+
filtered = filtered.filter((log) => log.level === level);
|
|
320
|
+
}
|
|
321
|
+
return filtered.slice(-limit);
|
|
322
|
+
},
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Clear logs
|
|
326
|
+
*/
|
|
327
|
+
clear(): void {
|
|
328
|
+
logs = [];
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
export default LoggingService;
|
|
335
|
+
`;
|
|
336
|
+
const API_DOCS_TEMPLATE = `/**
|
|
337
|
+
* API Documentation Feature
|
|
338
|
+
* Generates OpenAPI/Swagger documentation
|
|
339
|
+
*/
|
|
340
|
+
|
|
341
|
+
export interface ApiEndpoint {
|
|
342
|
+
path: string;
|
|
343
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
344
|
+
description: string;
|
|
345
|
+
parameters?: Record<string, unknown>;
|
|
346
|
+
requestBody?: Record<string, unknown>;
|
|
347
|
+
responses: Record<string, unknown>;
|
|
348
|
+
tags?: string[];
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* ApiDocService - Pure Functional Object
|
|
353
|
+
*/
|
|
354
|
+
export const ApiDocService = {
|
|
355
|
+
/**
|
|
356
|
+
* Create a new API doc service instance
|
|
357
|
+
*/
|
|
358
|
+
create() {
|
|
359
|
+
let endpoints: ApiEndpoint[] = [];
|
|
360
|
+
|
|
361
|
+
const service = {
|
|
362
|
+
/**
|
|
363
|
+
* Register endpoint
|
|
364
|
+
*/
|
|
365
|
+
registerEndpoint(endpoint: ApiEndpoint): void {
|
|
366
|
+
endpoints.push(endpoint);
|
|
367
|
+
},
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* Generate OpenAPI spec
|
|
371
|
+
*/
|
|
372
|
+
generateOpenApiSpec(): Record<string, unknown> {
|
|
373
|
+
return {
|
|
374
|
+
openapi: '3.0.0',
|
|
375
|
+
info: {
|
|
376
|
+
title: 'Service API',
|
|
377
|
+
version: '1.0.0',
|
|
378
|
+
},
|
|
379
|
+
paths: service.groupByPath(),
|
|
380
|
+
};
|
|
381
|
+
},
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Generate Swagger/OpenAPI HTML
|
|
385
|
+
*/
|
|
386
|
+
generateSwaggerHtml(): string {
|
|
387
|
+
const spec = service.generateOpenApiSpec();
|
|
388
|
+
return \`<html>
|
|
389
|
+
<body>
|
|
390
|
+
<div id="swagger-ui"></div>
|
|
391
|
+
<script>
|
|
392
|
+
window.onload = function() {
|
|
393
|
+
window.ui = SwaggerUIBundle({
|
|
394
|
+
spec: \${JSON.stringify(spec)},
|
|
395
|
+
dom_id: '#swagger-ui',
|
|
396
|
+
});
|
|
397
|
+
};
|
|
398
|
+
</script>
|
|
399
|
+
</body>
|
|
400
|
+
</html>\`;
|
|
401
|
+
},
|
|
402
|
+
|
|
403
|
+
groupByPath(): Record<string, unknown> {
|
|
404
|
+
const grouped: Record<string, unknown> = {};
|
|
405
|
+
for (const endpoint of endpoints) {
|
|
406
|
+
if (grouped[endpoint.path] === undefined) {
|
|
407
|
+
grouped[endpoint.path] = {};
|
|
408
|
+
}
|
|
409
|
+
grouped[endpoint.path][endpoint.method.toLowerCase()] = {
|
|
410
|
+
description: endpoint.description,
|
|
411
|
+
parameters: endpoint.parameters,
|
|
412
|
+
requestBody: endpoint.requestBody,
|
|
413
|
+
responses: endpoint.responses,
|
|
414
|
+
tags: endpoint.tags,
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
return grouped;
|
|
418
|
+
}
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
return service;
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
|
|
425
|
+
export default ApiDocService;
|
|
426
|
+
`;
|
|
427
|
+
const EMAIL_TEMPLATE = `/**
|
|
428
|
+
* Email Feature
|
|
429
|
+
* Handles email sending
|
|
430
|
+
*/
|
|
431
|
+
|
|
432
|
+
import { randomBytes } from 'node:crypto';
|
|
433
|
+
|
|
434
|
+
export interface EmailConfig {
|
|
435
|
+
provider: 'sendgrid' | 'mailgun' | 'nodemailer';
|
|
436
|
+
apiKey?: string;
|
|
437
|
+
fromAddress: string;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
export interface EmailMessage {
|
|
441
|
+
to: string | string[];
|
|
442
|
+
subject: string;
|
|
443
|
+
html: string;
|
|
444
|
+
text?: string;
|
|
445
|
+
attachments?: Array<{ filename: string; content: string }>;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* EmailService - Pure Functional Object
|
|
450
|
+
*/
|
|
451
|
+
export const EmailService = {
|
|
452
|
+
/**
|
|
453
|
+
* Create a new email service instance
|
|
454
|
+
*/
|
|
455
|
+
create(config: EmailConfig) {
|
|
456
|
+
return {
|
|
457
|
+
/**
|
|
458
|
+
* Send email
|
|
459
|
+
*/
|
|
460
|
+
async send(message: EmailMessage): Promise<{ success: boolean; messageId?: string }> {
|
|
461
|
+
// Implementation depends on provider
|
|
462
|
+
return { success: true, messageId: 'msg_' + randomBytes(8).toString('hex') };
|
|
463
|
+
},
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Send template email
|
|
467
|
+
*/
|
|
468
|
+
async sendTemplate(
|
|
469
|
+
to: string,
|
|
470
|
+
template: string,
|
|
471
|
+
data: Record<string, unknown>
|
|
472
|
+
): Promise<{ success: boolean }> {
|
|
473
|
+
return { success: true };
|
|
474
|
+
}
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
export default EmailService;
|
|
480
|
+
`;
|
|
481
|
+
const CACHE_TEMPLATE = `/**
|
|
482
|
+
* Cache Feature
|
|
483
|
+
* In-memory and distributed caching
|
|
484
|
+
*/
|
|
485
|
+
|
|
486
|
+
export interface CacheConfig {
|
|
487
|
+
ttl: number; // Time to live in seconds
|
|
488
|
+
maxSize?: number; // Max cache entries
|
|
489
|
+
backend?: 'memory' | 'redis';
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* CacheService - Pure Functional Object
|
|
494
|
+
*/
|
|
495
|
+
export const CacheService = {
|
|
496
|
+
/**
|
|
497
|
+
* Create a new cache service instance
|
|
498
|
+
*/
|
|
499
|
+
create(config: CacheConfig) {
|
|
500
|
+
let cache = new Map<string, { value: unknown; expiresAt: number }>();
|
|
501
|
+
|
|
502
|
+
return {
|
|
503
|
+
/**
|
|
504
|
+
* Get cached value
|
|
505
|
+
*/
|
|
506
|
+
get<T>(key: string): T | null {
|
|
507
|
+
const entry = cache.get(key);
|
|
508
|
+
if (entry === undefined) return null;
|
|
509
|
+
|
|
510
|
+
if (Date.now() > entry.expiresAt) {
|
|
511
|
+
cache.delete(key);
|
|
512
|
+
return null;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
return entry.value as T;
|
|
516
|
+
},
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Set cache value
|
|
520
|
+
*/
|
|
521
|
+
set<T>(key: string, value: T): void {
|
|
522
|
+
const expiresAt = Date.now() + config.ttl * 1000;
|
|
523
|
+
cache.set(key, { value, expiresAt });
|
|
524
|
+
},
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* Delete cache entry
|
|
528
|
+
*/
|
|
529
|
+
delete(key: string): boolean {
|
|
530
|
+
return cache.delete(key);
|
|
531
|
+
},
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* Clear all cache
|
|
535
|
+
*/
|
|
536
|
+
clear(): void {
|
|
537
|
+
cache.clear();
|
|
538
|
+
}
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
};
|
|
542
|
+
|
|
543
|
+
export default CacheService;
|
|
544
|
+
`;
|
|
545
|
+
const QUEUE_TEMPLATE = `/**
|
|
546
|
+
* Queue Feature
|
|
547
|
+
* Job queue processing
|
|
548
|
+
*/
|
|
549
|
+
|
|
550
|
+
import { randomBytes } from 'node:crypto';
|
|
551
|
+
|
|
552
|
+
export interface Job {
|
|
553
|
+
id: string;
|
|
554
|
+
name: string;
|
|
555
|
+
data: Record<string, unknown>;
|
|
556
|
+
status: 'pending' | 'processing' | 'completed' | 'failed';
|
|
557
|
+
createdAt: Date;
|
|
558
|
+
processedAt?: Date;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
export interface QueueConfig {
|
|
562
|
+
backend: 'memory' | 'redis' | 'rabbitmq';
|
|
563
|
+
concurrency?: number;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* QueueService - Pure Functional Object
|
|
568
|
+
*/
|
|
569
|
+
export const QueueService = {
|
|
570
|
+
/**
|
|
571
|
+
* Create a new queue service instance
|
|
572
|
+
*/
|
|
573
|
+
create(config: QueueConfig) {
|
|
574
|
+
let jobs: Job[] = [];
|
|
575
|
+
let processing = false;
|
|
576
|
+
|
|
577
|
+
const service = {
|
|
578
|
+
/**
|
|
579
|
+
* Add job to queue
|
|
580
|
+
*/
|
|
581
|
+
async enqueue(name: string, data: Record<string, unknown>): Promise<Job> {
|
|
582
|
+
const job: Job = {
|
|
583
|
+
id: 'job_' + randomBytes(8).toString('hex'),
|
|
584
|
+
name,
|
|
585
|
+
data,
|
|
586
|
+
status: 'pending',
|
|
587
|
+
createdAt: new Date(),
|
|
588
|
+
};
|
|
589
|
+
|
|
590
|
+
jobs.push(job);
|
|
591
|
+
service.processQueue();
|
|
592
|
+
return job;
|
|
593
|
+
},
|
|
594
|
+
|
|
595
|
+
/**
|
|
596
|
+
* Get job status
|
|
597
|
+
*/
|
|
598
|
+
getJob(id: string): Job | undefined {
|
|
599
|
+
return jobs.find((job) => job.id === id);
|
|
600
|
+
},
|
|
601
|
+
|
|
602
|
+
processQueue(): void {
|
|
603
|
+
if (processing === true) return;
|
|
604
|
+
processing = true;
|
|
605
|
+
|
|
606
|
+
// Process queue
|
|
607
|
+
const pendingJobs = jobs.filter((job) => job.status === 'pending');
|
|
608
|
+
for (const job of pendingJobs) {
|
|
609
|
+
job.status = 'completed';
|
|
610
|
+
job.processedAt = new Date();
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
processing = false;
|
|
614
|
+
}
|
|
615
|
+
};
|
|
616
|
+
|
|
617
|
+
return service;
|
|
618
|
+
}
|
|
619
|
+
};
|
|
620
|
+
|
|
621
|
+
export default QueueService;
|
|
622
|
+
`;
|
|
623
|
+
const WEBSOCKET_TEMPLATE = `/**
|
|
624
|
+
* WebSocket Feature
|
|
625
|
+
* Real-time communication
|
|
626
|
+
*/
|
|
627
|
+
|
|
628
|
+
export interface WebSocketConfig {
|
|
629
|
+
port?: number;
|
|
630
|
+
cors?: { origin: string | string[] };
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
export interface SocketMessage {
|
|
634
|
+
event: string;
|
|
635
|
+
data: unknown;
|
|
636
|
+
timestamp: Date;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
/**
|
|
640
|
+
* WebSocketService - Pure Functional Object
|
|
641
|
+
*/
|
|
642
|
+
export const WebSocketService = {
|
|
643
|
+
/**
|
|
644
|
+
* Create a new websocket service instance
|
|
645
|
+
*/
|
|
646
|
+
create() {
|
|
647
|
+
let listeners: Map<string, Set<(data: unknown) => void>> = new Map();
|
|
648
|
+
|
|
649
|
+
return {
|
|
650
|
+
/**
|
|
651
|
+
* Listen for event
|
|
652
|
+
*/
|
|
653
|
+
on(event: string, callback: (data: unknown) => void): void {
|
|
654
|
+
if (listeners.has(event) === false) {
|
|
655
|
+
listeners.set(event, new Set());
|
|
656
|
+
}
|
|
657
|
+
listeners.get(event)?.add(callback);
|
|
658
|
+
},
|
|
659
|
+
|
|
660
|
+
/**
|
|
661
|
+
* Emit event
|
|
662
|
+
*/
|
|
663
|
+
emit(event: string, data: unknown): void {
|
|
664
|
+
const callbacks = listeners.get(event);
|
|
665
|
+
if (callbacks !== undefined) {
|
|
666
|
+
for (const callback of callbacks) {
|
|
667
|
+
callback(data);
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
},
|
|
671
|
+
|
|
672
|
+
/**
|
|
673
|
+
* Stop listening
|
|
674
|
+
*/
|
|
675
|
+
off(event: string, callback: (data: unknown) => void): void {
|
|
676
|
+
const callbacks = listeners.get(event);
|
|
677
|
+
if (callbacks !== undefined) {
|
|
678
|
+
callbacks.delete(callback);
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
};
|
|
682
|
+
}
|
|
683
|
+
};
|
|
684
|
+
|
|
685
|
+
export default WebSocketService;
|
|
686
|
+
`;
|
|
687
|
+
/**
|
|
688
|
+
* Generate feature test
|
|
689
|
+
*/
|
|
690
|
+
function generateFeatureTest(_name) {
|
|
691
|
+
return `/**
|
|
692
|
+
* \${name} Feature Tests
|
|
693
|
+
*/
|
|
694
|
+
|
|
695
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
696
|
+
|
|
697
|
+
describe('\${name} Feature', () => {
|
|
698
|
+
beforeEach(() => {
|
|
699
|
+
// Setup
|
|
700
|
+
});
|
|
701
|
+
|
|
702
|
+
it('should initialize successfully', () => {
|
|
703
|
+
expect(true).toBe(true);
|
|
704
|
+
});
|
|
705
|
+
|
|
706
|
+
it('should perform core functionality', () => {
|
|
707
|
+
expect(true).toBe(true);
|
|
708
|
+
});
|
|
709
|
+
});
|
|
710
|
+
`;
|
|
711
|
+
}
|
|
712
|
+
/**
|
|
713
|
+
* Generate feature README
|
|
714
|
+
*/
|
|
715
|
+
function generateFeatureReadme(_name) {
|
|
716
|
+
return `# \${name.charAt(0).toUpperCase()}\${name.slice(1)} Feature
|
|
717
|
+
|
|
718
|
+
This feature provides \${name} functionality for the service.
|
|
719
|
+
|
|
720
|
+
## Usage
|
|
721
|
+
|
|
722
|
+
\`\`\`typescript
|
|
723
|
+
import \${name}Service from './index';
|
|
724
|
+
|
|
725
|
+
const service = \${name}Service.create(config);
|
|
726
|
+
// Use service...
|
|
727
|
+
\`\`\`
|
|
728
|
+
|
|
729
|
+
## Configuration
|
|
730
|
+
|
|
731
|
+
See service configuration for settings related to this feature.
|
|
732
|
+
|
|
733
|
+
## Testing
|
|
734
|
+
|
|
735
|
+
\`\`\`bash
|
|
736
|
+
npm test -- \${name}.test.ts
|
|
737
|
+
\`\`\`
|
|
738
|
+
`;
|
|
739
|
+
}
|
|
740
|
+
/**
|
|
741
|
+
* FeatureScaffolder adds features to services
|
|
742
|
+
*/
|
|
743
|
+
export const FeatureScaffolder = Object.freeze({
|
|
744
|
+
validateOptions,
|
|
745
|
+
getAvailableFeatures,
|
|
746
|
+
addFeature,
|
|
747
|
+
});
|