@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.
Files changed (495) hide show
  1. package/README.md +10 -10
  2. package/bin/zintrust-main.d.ts.map +1 -1
  3. package/bin/zintrust-main.js +9 -0
  4. package/package.json +2 -2
  5. package/public/error-pages/404.html +145 -0
  6. package/public/error-pages/500.html +266 -0
  7. package/public/error-pages/error.css +628 -0
  8. package/public/error-pages/error.js +428 -0
  9. package/public/zintrust.svg +30 -0
  10. package/routes/api.d.ts.map +1 -1
  11. package/routes/api.js +41 -17
  12. package/routes/metrics.d.ts +9 -0
  13. package/routes/metrics.d.ts.map +1 -0
  14. package/routes/metrics.js +20 -0
  15. package/routes/openapi.d.ts +9 -0
  16. package/routes/openapi.d.ts.map +1 -0
  17. package/routes/openapi.js +76 -0
  18. package/src/boot/Application.d.ts +2 -2
  19. package/src/boot/Application.d.ts.map +1 -1
  20. package/src/boot/Application.js +18 -3
  21. package/src/boot/Server.d.ts +3 -2
  22. package/src/boot/Server.d.ts.map +1 -1
  23. package/src/boot/Server.js +39 -165
  24. package/src/cache/Cache.d.ts +1 -1
  25. package/src/cache/Cache.d.ts.map +1 -1
  26. package/src/cache/CacheDriver.d.ts +4 -0
  27. package/src/cache/CacheDriver.d.ts.map +1 -1
  28. package/src/cache/drivers/KVDriver.d.ts +1 -1
  29. package/src/cache/drivers/KVDriver.d.ts.map +1 -1
  30. package/src/cache/drivers/MemoryDriver.d.ts +1 -1
  31. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  32. package/src/cache/drivers/MemoryDriver.js +16 -0
  33. package/src/cache/drivers/MongoDriver.d.ts +1 -1
  34. package/src/cache/drivers/MongoDriver.d.ts.map +1 -1
  35. package/src/cache/drivers/RedisDriver.d.ts +1 -1
  36. package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
  37. package/src/cli/CLI.d.ts.map +1 -1
  38. package/src/cli/CLI.js +10 -4
  39. package/src/cli/commands/AddCommand.d.ts +2 -2
  40. package/src/cli/commands/AddCommand.d.ts.map +1 -1
  41. package/src/cli/commands/AddCommand.js +135 -58
  42. package/src/cli/commands/ConfigCommand.d.ts +1 -1
  43. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  44. package/src/cli/commands/CreateCommand.d.ts +15 -0
  45. package/src/cli/commands/CreateCommand.d.ts.map +1 -0
  46. package/src/cli/commands/CreateCommand.js +143 -0
  47. package/src/cli/commands/D1MigrateCommand.d.ts +1 -1
  48. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  49. package/src/cli/commands/D1MigrateCommand.js +16 -20
  50. package/src/cli/commands/DbSeedCommand.d.ts +9 -0
  51. package/src/cli/commands/DbSeedCommand.d.ts.map +1 -0
  52. package/src/cli/commands/DbSeedCommand.js +171 -0
  53. package/src/cli/commands/DebugCommand.d.ts +1 -1
  54. package/src/cli/commands/DebugCommand.d.ts.map +1 -1
  55. package/src/cli/commands/FixCommand.d.ts +1 -1
  56. package/src/cli/commands/FixCommand.d.ts.map +1 -1
  57. package/src/cli/commands/JwtDevCommand.d.ts +8 -0
  58. package/src/cli/commands/JwtDevCommand.d.ts.map +1 -0
  59. package/src/cli/commands/JwtDevCommand.js +114 -0
  60. package/src/cli/commands/KeyGenerateCommand.d.ts +1 -1
  61. package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -1
  62. package/src/cli/commands/LogsCommand.d.ts +2 -2
  63. package/src/cli/commands/LogsCommand.d.ts.map +1 -1
  64. package/src/cli/commands/LogsCommand.js +36 -2
  65. package/src/cli/commands/MakeMailTemplateCommand.d.ts +1 -1
  66. package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -1
  67. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +1 -1
  68. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -1
  69. package/src/cli/commands/MigrateCommand.d.ts +1 -1
  70. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  71. package/src/cli/commands/MigrateCommand.js +291 -35
  72. package/src/cli/commands/NewCommand.d.ts +1 -1
  73. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  74. package/src/cli/commands/NewCommand.js +12 -4
  75. package/src/cli/commands/PluginCommand.d.ts +1 -1
  76. package/src/cli/commands/PluginCommand.d.ts.map +1 -1
  77. package/src/cli/commands/PrepareCommand.d.ts +1 -1
  78. package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
  79. package/src/cli/commands/QACommand.d.ts +2 -2
  80. package/src/cli/commands/QACommand.d.ts.map +1 -1
  81. package/src/cli/commands/RoutesCommand.d.ts +10 -0
  82. package/src/cli/commands/RoutesCommand.d.ts.map +1 -0
  83. package/src/cli/commands/RoutesCommand.js +242 -0
  84. package/src/cli/commands/SimulateCommand.d.ts +1 -1
  85. package/src/cli/commands/SimulateCommand.d.ts.map +1 -1
  86. package/src/cli/commands/index.d.ts +3 -0
  87. package/src/cli/commands/index.d.ts.map +1 -1
  88. package/src/cli/commands/index.js +3 -0
  89. package/src/cli/config/ConfigManager.d.ts +1 -1
  90. package/src/cli/config/ConfigManager.d.ts.map +1 -1
  91. package/src/cli/config/ConfigValidator.d.ts +1 -1
  92. package/src/cli/config/ConfigValidator.d.ts.map +1 -1
  93. package/src/cli/config/ConfigValidator.js +1 -1
  94. package/src/cli/d1/D1SqlMigrations.d.ts +20 -0
  95. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -0
  96. package/src/cli/d1/D1SqlMigrations.js +224 -0
  97. package/src/cli/d1/WranglerConfig.d.ts +4 -0
  98. package/src/cli/d1/WranglerConfig.d.ts.map +1 -0
  99. package/src/cli/d1/WranglerConfig.js +122 -0
  100. package/src/cli/d1/WranglerD1.d.ts +11 -0
  101. package/src/cli/d1/WranglerD1.d.ts.map +1 -0
  102. package/src/cli/d1/WranglerD1.js +16 -0
  103. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  104. package/src/cli/scaffolding/ControllerGenerator.js +72 -22
  105. package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -1
  106. package/src/cli/scaffolding/FactoryGenerator.js +3 -1
  107. package/src/cli/scaffolding/GovernanceScaffolder.d.ts +23 -0
  108. package/src/cli/scaffolding/GovernanceScaffolder.d.ts.map +1 -0
  109. package/src/cli/scaffolding/GovernanceScaffolder.js +327 -0
  110. package/src/cli/scaffolding/MigrationGenerator.d.ts +10 -0
  111. package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
  112. package/src/cli/scaffolding/MigrationGenerator.js +137 -51
  113. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  114. package/src/cli/scaffolding/ProjectScaffolder.js +36 -4
  115. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
  116. package/src/cli/scaffolding/RouteGenerator.js +79 -43
  117. package/src/cli/scaffolding/SeederGenerator.d.ts +5 -0
  118. package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -1
  119. package/src/cli/scaffolding/SeederGenerator.js +63 -15
  120. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  121. package/src/cli/scaffolding/ServiceScaffolder.js +24 -3
  122. package/src/cli/scaffolding/index.d.ts +2 -0
  123. package/src/cli/scaffolding/index.d.ts.map +1 -1
  124. package/src/cli/scaffolding/index.js +1 -0
  125. package/src/common/index.d.ts +8 -0
  126. package/src/common/index.d.ts.map +1 -1
  127. package/src/common/index.js +28 -0
  128. package/src/common/utility.d.ts +38 -0
  129. package/src/common/utility.d.ts.map +1 -0
  130. package/src/common/utility.js +101 -0
  131. package/src/config/FileLogWriter.d.ts +2 -1
  132. package/src/config/FileLogWriter.d.ts.map +1 -1
  133. package/src/config/FileLogWriter.js +83 -2
  134. package/src/config/app.d.ts.map +1 -1
  135. package/src/config/app.js +3 -1
  136. package/src/config/broadcast.d.ts +1 -1
  137. package/src/config/broadcast.d.ts.map +1 -1
  138. package/src/config/cache.d.ts +1 -1
  139. package/src/config/cache.d.ts.map +1 -1
  140. package/src/config/cloudflare.d.ts +1 -1
  141. package/src/config/cloudflare.d.ts.map +1 -1
  142. package/src/config/database.d.ts +1 -1
  143. package/src/config/database.d.ts.map +1 -1
  144. package/src/config/database.js +92 -6
  145. package/src/config/env.d.ts +6 -0
  146. package/src/config/env.d.ts.map +1 -1
  147. package/src/config/env.js +7 -0
  148. package/src/config/index.d.ts +1 -1
  149. package/src/config/logging/KvLogger.js +1 -1
  150. package/src/config/logging/SlackLogger.js +2 -2
  151. package/src/config/middleware.d.ts +20 -1
  152. package/src/config/middleware.d.ts.map +1 -1
  153. package/src/config/middleware.js +135 -3
  154. package/src/config/security.d.ts +1 -1
  155. package/src/config/security.js +1 -1
  156. package/src/config/type.d.ts +1 -1
  157. package/src/config/type.d.ts.map +1 -1
  158. package/src/events/EventDispatcher.d.ts.map +1 -1
  159. package/src/events/EventDispatcher.js +6 -4
  160. package/src/exceptions/ZintrustError.d.ts +7 -0
  161. package/src/exceptions/ZintrustError.d.ts.map +1 -1
  162. package/src/exceptions/ZintrustError.js +56 -0
  163. package/src/features/Auth.d.ts +1 -1
  164. package/src/features/Auth.d.ts.map +1 -1
  165. package/src/features/Auth.js +3 -3
  166. package/src/features/Queue.js +1 -1
  167. package/src/functions/cloudflare.d.ts.map +1 -1
  168. package/src/functions/cloudflare.js +3 -14
  169. package/src/functions/deno.d.ts.map +1 -1
  170. package/src/functions/deno.js +3 -14
  171. package/src/functions/lambda.d.ts.map +1 -1
  172. package/src/functions/lambda.js +3 -14
  173. package/src/health/StartupHealthChecks.js +1 -1
  174. package/src/http/Controller.d.ts +2 -2
  175. package/src/http/Controller.d.ts.map +1 -1
  176. package/src/http/FileUpload.d.ts +68 -0
  177. package/src/http/FileUpload.d.ts.map +1 -0
  178. package/src/http/FileUpload.js +120 -0
  179. package/src/http/Kernel.d.ts +5 -5
  180. package/src/http/Kernel.d.ts.map +1 -1
  181. package/src/http/Kernel.js +139 -23
  182. package/src/http/Request.d.ts +20 -1
  183. package/src/http/Request.d.ts.map +1 -1
  184. package/src/http/Request.js +23 -0
  185. package/src/http/RequestContext.d.ts +6 -0
  186. package/src/http/RequestContext.d.ts.map +1 -1
  187. package/src/http/RequestContext.js +77 -1
  188. package/src/http/Response.d.ts +1 -1
  189. package/src/http/Response.d.ts.map +1 -1
  190. package/src/http/ValidationHelper.d.ts +78 -0
  191. package/src/http/ValidationHelper.d.ts.map +1 -0
  192. package/src/http/ValidationHelper.js +121 -0
  193. package/src/http/error-pages/ErrorPageRenderer.d.ts +17 -0
  194. package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -0
  195. package/src/http/error-pages/ErrorPageRenderer.js +88 -0
  196. package/src/http/middleware/BodyParsingMiddleware.d.ts +12 -0
  197. package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -0
  198. package/src/http/middleware/BodyParsingMiddleware.js +251 -0
  199. package/src/http/middleware/FileUploadMiddleware.d.ts +12 -0
  200. package/src/http/middleware/FileUploadMiddleware.d.ts.map +1 -0
  201. package/src/http/middleware/FileUploadMiddleware.js +74 -0
  202. package/src/http/parsers/BodyParsers.d.ts +32 -0
  203. package/src/http/parsers/BodyParsers.d.ts.map +1 -0
  204. package/src/http/parsers/BodyParsers.js +159 -0
  205. package/src/http/parsers/MultipartParser.d.ts +33 -0
  206. package/src/http/parsers/MultipartParser.d.ts.map +1 -0
  207. package/src/http/parsers/MultipartParser.js +129 -0
  208. package/src/http/parsers/MultipartParserRegistry.d.ts +34 -0
  209. package/src/http/parsers/MultipartParserRegistry.d.ts.map +1 -0
  210. package/src/http/parsers/MultipartParserRegistry.js +20 -0
  211. package/src/http/validated.d.ts +12 -0
  212. package/src/http/validated.d.ts.map +1 -0
  213. package/src/http/validated.js +41 -0
  214. package/src/index.d.ts +64 -7
  215. package/src/index.d.ts.map +1 -1
  216. package/src/index.js +59 -5
  217. package/src/microservices/RequestTracingMiddleware.d.ts +2 -2
  218. package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -1
  219. package/src/microservices/RequestTracingMiddleware.js +3 -0
  220. package/src/microservices/ServiceAuthMiddleware.d.ts +2 -2
  221. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
  222. package/src/middleware/AuthMiddleware.d.ts +10 -0
  223. package/src/middleware/AuthMiddleware.d.ts.map +1 -0
  224. package/src/middleware/AuthMiddleware.js +16 -0
  225. package/src/middleware/CsrfMiddleware.d.ts +11 -1
  226. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  227. package/src/middleware/CsrfMiddleware.js +33 -0
  228. package/src/middleware/JwtAuthMiddleware.d.ts +11 -0
  229. package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -0
  230. package/src/middleware/JwtAuthMiddleware.js +73 -0
  231. package/src/middleware/LoggingMiddleware.d.ts.map +1 -1
  232. package/src/middleware/LoggingMiddleware.js +8 -3
  233. package/src/middleware/MiddlewareStack.d.ts +2 -2
  234. package/src/middleware/MiddlewareStack.d.ts.map +1 -1
  235. package/src/middleware/RateLimiter.d.ts +2 -2
  236. package/src/middleware/RateLimiter.d.ts.map +1 -1
  237. package/src/middleware/SanitizeBodyMiddleware.d.ts +12 -0
  238. package/src/middleware/SanitizeBodyMiddleware.d.ts.map +1 -0
  239. package/src/middleware/SanitizeBodyMiddleware.js +31 -0
  240. package/src/middleware/SecurityMiddleware.d.ts +1 -1
  241. package/src/middleware/SecurityMiddleware.d.ts.map +1 -1
  242. package/src/middleware/SessionMiddleware.d.ts +1 -1
  243. package/src/middleware/SessionMiddleware.d.ts.map +1 -1
  244. package/src/middleware/ValidationMiddleware.d.ts +25 -0
  245. package/src/middleware/ValidationMiddleware.d.ts.map +1 -0
  246. package/src/middleware/ValidationMiddleware.js +251 -0
  247. package/src/migrations/MigrationDiscovery.d.ts +5 -0
  248. package/src/migrations/MigrationDiscovery.d.ts.map +1 -0
  249. package/src/migrations/MigrationDiscovery.js +16 -0
  250. package/src/migrations/MigrationLoader.d.ts +5 -0
  251. package/src/migrations/MigrationLoader.d.ts.map +1 -0
  252. package/src/migrations/MigrationLoader.js +43 -0
  253. package/src/migrations/MigrationLock.d.ts +4 -0
  254. package/src/migrations/MigrationLock.d.ts.map +1 -0
  255. package/src/migrations/MigrationLock.js +33 -0
  256. package/src/migrations/Migrator.d.ts +23 -0
  257. package/src/migrations/Migrator.d.ts.map +1 -0
  258. package/src/migrations/Migrator.js +4 -0
  259. package/src/migrations/MigratorFactory.d.ts +25 -0
  260. package/src/migrations/MigratorFactory.d.ts.map +1 -0
  261. package/src/migrations/MigratorFactory.js +323 -0
  262. package/src/migrations/schema/Blueprint.d.ts +5 -0
  263. package/src/migrations/schema/Blueprint.d.ts.map +1 -0
  264. package/src/migrations/schema/Blueprint.js +189 -0
  265. package/src/migrations/schema/Schema.d.ts +8 -0
  266. package/src/migrations/schema/Schema.d.ts.map +1 -0
  267. package/src/migrations/schema/Schema.js +141 -0
  268. package/src/migrations/schema/SchemaCompiler.d.ts +20 -0
  269. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -0
  270. package/src/migrations/schema/SchemaCompiler.js +262 -0
  271. package/src/migrations/schema/index.d.ts +5 -0
  272. package/src/migrations/schema/index.d.ts.map +1 -0
  273. package/src/migrations/schema/index.js +3 -0
  274. package/src/migrations/schema/types.d.ts +86 -0
  275. package/src/migrations/schema/types.d.ts.map +1 -0
  276. package/src/migrations/schema/types.js +1 -0
  277. package/src/migrations/types.d.ts +45 -0
  278. package/src/migrations/types.d.ts.map +1 -0
  279. package/src/migrations/types.js +1 -0
  280. package/src/node-singletons/crypto.d.ts +1 -1
  281. package/src/node-singletons/crypto.d.ts.map +1 -1
  282. package/src/node-singletons/crypto.js +1 -1
  283. package/src/node-singletons/fs.d.ts +2 -2
  284. package/src/node-singletons/fs.d.ts.map +1 -1
  285. package/src/node-singletons/fs.js +1 -1
  286. package/src/node-singletons/util.d.ts +6 -0
  287. package/src/node-singletons/util.d.ts.map +1 -0
  288. package/src/node-singletons/util.js +5 -0
  289. package/src/node.d.ts +3 -1
  290. package/src/node.d.ts.map +1 -1
  291. package/src/node.js +6 -2
  292. package/src/observability/OpenTelemetry.d.ts +62 -0
  293. package/src/observability/OpenTelemetry.d.ts.map +1 -0
  294. package/src/observability/OpenTelemetry.js +167 -0
  295. package/src/observability/PrometheusMetrics.d.ts +25 -0
  296. package/src/observability/PrometheusMetrics.d.ts.map +1 -0
  297. package/src/observability/PrometheusMetrics.js +114 -0
  298. package/src/openapi/OpenApiGenerator.d.ts +68 -0
  299. package/src/openapi/OpenApiGenerator.d.ts.map +1 -0
  300. package/src/openapi/OpenApiGenerator.js +287 -0
  301. package/src/orm/Database.d.ts +4 -2
  302. package/src/orm/Database.d.ts.map +1 -1
  303. package/src/orm/Database.js +142 -29
  304. package/src/orm/DatabaseAdapter.d.ts +13 -0
  305. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  306. package/src/orm/DatabaseAdapterRegistry.d.ts.map +1 -1
  307. package/src/orm/DatabaseAdapterRegistry.js +3 -1
  308. package/src/orm/Model.d.ts +30 -2
  309. package/src/orm/Model.d.ts.map +1 -1
  310. package/src/orm/Model.js +255 -62
  311. package/src/orm/QueryBuilder.d.ts +22 -1
  312. package/src/orm/QueryBuilder.d.ts.map +1 -1
  313. package/src/orm/QueryBuilder.js +405 -99
  314. package/src/orm/Relationships.d.ts +7 -1
  315. package/src/orm/Relationships.d.ts.map +1 -1
  316. package/src/orm/Relationships.js +18 -0
  317. package/src/orm/SchemaCompiler.d.ts +9 -0
  318. package/src/orm/SchemaCompiler.d.ts.map +1 -0
  319. package/src/orm/SchemaCompiler.js +145 -0
  320. package/src/orm/adapters/D1Adapter.d.ts +1 -1
  321. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  322. package/src/orm/adapters/MySQLAdapter.d.ts +1 -1
  323. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  324. package/src/orm/adapters/MySQLAdapter.js +88 -69
  325. package/src/orm/adapters/PostgreSQLAdapter.d.ts +1 -1
  326. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  327. package/src/orm/adapters/PostgreSQLAdapter.js +88 -69
  328. package/src/orm/adapters/SQLServerAdapter.d.ts +1 -1
  329. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  330. package/src/orm/adapters/SQLiteAdapter.d.ts +1 -1
  331. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  332. package/src/orm/adapters/SQLiteAdapter.js +58 -2
  333. package/src/orm/maintenance/SqliteMaintenance.d.ts +5 -0
  334. package/src/orm/maintenance/SqliteMaintenance.d.ts.map +1 -0
  335. package/src/orm/maintenance/SqliteMaintenance.js +14 -0
  336. package/src/orm/migrations/MigrationStore.d.ts +38 -0
  337. package/src/orm/migrations/MigrationStore.d.ts.map +1 -0
  338. package/src/orm/migrations/MigrationStore.js +157 -0
  339. package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -1
  340. package/src/performance/Optimizer.d.ts +1 -0
  341. package/src/performance/Optimizer.d.ts.map +1 -1
  342. package/src/performance/Optimizer.js +37 -3
  343. package/src/profiling/MemoryProfiler.d.ts +1 -1
  344. package/src/profiling/MemoryProfiler.d.ts.map +1 -1
  345. package/src/profiling/N1Detector.d.ts +1 -1
  346. package/src/profiling/N1Detector.d.ts.map +1 -1
  347. package/src/profiling/QueryLogger.d.ts +1 -1
  348. package/src/profiling/QueryLogger.d.ts.map +1 -1
  349. package/src/profiling/RequestProfiler.d.ts +3 -3
  350. package/src/profiling/RequestProfiler.d.ts.map +1 -1
  351. package/src/routes/metrics.d.ts +2 -0
  352. package/src/routes/metrics.d.ts.map +1 -0
  353. package/src/routes/metrics.js +1 -0
  354. package/src/routing/CoreRoutes.d.ts +12 -0
  355. package/src/routing/CoreRoutes.d.ts.map +1 -0
  356. package/src/routing/CoreRoutes.js +151 -0
  357. package/src/routing/RouteRegistry.d.ts +39 -0
  358. package/src/routing/RouteRegistry.d.ts.map +1 -0
  359. package/src/routing/RouteRegistry.js +44 -0
  360. package/src/routing/Router.d.ts +26 -9
  361. package/src/routing/Router.d.ts.map +1 -1
  362. package/src/routing/Router.js +79 -35
  363. package/src/routing/common.d.ts +15 -0
  364. package/src/routing/common.d.ts.map +1 -0
  365. package/src/routing/common.js +47 -0
  366. package/src/routing/doc.d.ts +28 -0
  367. package/src/routing/doc.d.ts.map +1 -0
  368. package/src/routing/doc.js +95 -0
  369. package/src/routing/error.d.ts +21 -0
  370. package/src/routing/error.d.ts.map +1 -0
  371. package/src/routing/error.js +126 -0
  372. package/src/routing/errorPages.d.ts +14 -0
  373. package/src/routing/errorPages.d.ts.map +1 -0
  374. package/src/routing/errorPages.js +103 -0
  375. package/src/routing/publicRoot.d.ts +18 -0
  376. package/src/routing/publicRoot.d.ts.map +1 -0
  377. package/src/routing/publicRoot.js +49 -0
  378. package/src/runtime/PluginAutoImports.d.ts +21 -0
  379. package/src/runtime/PluginAutoImports.d.ts.map +1 -0
  380. package/src/runtime/PluginAutoImports.js +59 -0
  381. package/src/runtime/PluginManager.d.ts +1 -5
  382. package/src/runtime/PluginManager.d.ts.map +1 -1
  383. package/src/runtime/PluginManager.js +25 -18
  384. package/src/runtime/RuntimeDetector.d.ts +1 -1
  385. package/src/runtime/RuntimeDetector.d.ts.map +1 -1
  386. package/src/runtime/adapters/CloudflareAdapter.d.ts +1 -1
  387. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  388. package/src/runtime/adapters/CloudflareAdapter.js +1 -1
  389. package/src/runtime/adapters/DenoAdapter.d.ts +1 -1
  390. package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -1
  391. package/src/runtime/adapters/DenoAdapter.js +1 -1
  392. package/src/runtime/adapters/LambdaAdapter.d.ts +1 -1
  393. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
  394. package/src/runtime/adapters/LambdaAdapter.js +1 -1
  395. package/src/runtime/adapters/NodeServerAdapter.d.ts +1 -1
  396. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
  397. package/src/runtime/getKernel.d.ts +9 -0
  398. package/src/runtime/getKernel.d.ts.map +1 -0
  399. package/src/runtime/getKernel.js +27 -0
  400. package/src/scripts/TemplateImportsCheck.js +40 -0
  401. package/src/scripts/TemplateSync.js +86 -20
  402. package/src/security/Encryptor.d.ts.map +1 -1
  403. package/src/security/Encryptor.js +64 -7
  404. package/src/security/JwtManager.d.ts +1 -0
  405. package/src/security/JwtManager.d.ts.map +1 -1
  406. package/src/security/JwtManager.js +33 -0
  407. package/src/security/Sanitizer.d.ts +76 -0
  408. package/src/security/Sanitizer.d.ts.map +1 -0
  409. package/src/security/Sanitizer.js +412 -0
  410. package/src/security/TokenRevocation.d.ts +7 -0
  411. package/src/security/TokenRevocation.d.ts.map +1 -0
  412. package/src/security/TokenRevocation.js +57 -0
  413. package/src/seeders/SeederDiscovery.d.ts +5 -0
  414. package/src/seeders/SeederDiscovery.d.ts.map +1 -0
  415. package/src/seeders/SeederDiscovery.js +21 -0
  416. package/src/seeders/SeederLoader.d.ts +5 -0
  417. package/src/seeders/SeederLoader.d.ts.map +1 -0
  418. package/src/seeders/SeederLoader.js +60 -0
  419. package/src/seeders/types.d.ts +18 -0
  420. package/src/seeders/types.d.ts.map +1 -0
  421. package/src/seeders/types.js +1 -0
  422. package/src/session/SessionManager.js +1 -1
  423. package/src/templates/adapters/MySQLAdapter.ts.tpl +109 -85
  424. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +129 -88
  425. package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -9
  426. package/src/templates/adapters/SQLiteAdapter.ts.tpl +78 -11
  427. package/src/templates/features/Queue.ts.tpl +3 -2
  428. package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +217 -0
  429. package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +1 -12
  430. package/src/templates/project/basic/app/Types/controller.ts.tpl +46 -0
  431. package/src/templates/project/basic/config/FileLogWriter.ts.tpl +5 -236
  432. package/src/templates/project/basic/config/SecretsManager.ts.tpl +10 -447
  433. package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +9 -268
  434. package/src/templates/project/basic/config/app.ts.tpl +13 -153
  435. package/src/templates/project/basic/config/broadcast.ts.tpl +15 -128
  436. package/src/templates/project/basic/config/cache.ts.tpl +15 -91
  437. package/src/templates/project/basic/config/cloudflare.ts.tpl +4 -39
  438. package/src/templates/project/basic/config/constants.ts.tpl +9 -65
  439. package/src/templates/project/basic/config/database.ts.tpl +29 -122
  440. package/src/templates/project/basic/config/env.ts.tpl +5 -169
  441. package/src/templates/project/basic/config/features.ts.tpl +6 -54
  442. package/src/templates/project/basic/config/index.ts.tpl +8 -23
  443. package/src/templates/project/basic/config/mail.ts.tpl +15 -114
  444. package/src/templates/project/basic/config/microservices.ts.tpl +11 -97
  445. package/src/templates/project/basic/config/middleware.ts.tpl +25 -43
  446. package/src/templates/project/basic/config/notification.ts.tpl +14 -126
  447. package/src/templates/project/basic/config/queue.ts.tpl +16 -79
  448. package/src/templates/project/basic/config/security.ts.tpl +11 -163
  449. package/src/templates/project/basic/config/startup.ts.tpl +10 -21
  450. package/src/templates/project/basic/config/storage.ts.tpl +15 -132
  451. package/src/templates/project/basic/config/type.ts.tpl +33 -451
  452. package/src/templates/project/basic/database/factories/UserFactory.ts.tpl +80 -0
  453. package/src/templates/project/basic/database/migrations/create_tasks_table.ts.tpl +28 -0
  454. package/src/templates/project/basic/database/migrations/create_users_table.ts.tpl +29 -0
  455. package/src/templates/project/basic/database/seeders/DatabaseSeeder.ts.tpl +19 -0
  456. package/src/templates/project/basic/database/seeders/UserSeeder.ts.tpl +18 -0
  457. package/src/templates/project/basic/database/seeders/index.ts.tpl +2 -0
  458. package/src/templates/project/basic/routes/api.ts.tpl +71 -33
  459. package/src/templates/project/basic/routes/metrics.ts.tpl +22 -0
  460. package/src/templates/project/basic/tsconfig.json.tpl +12 -11
  461. package/src/testing/TestEnvironment.d.ts +40 -0
  462. package/src/testing/TestEnvironment.d.ts.map +1 -0
  463. package/src/testing/TestEnvironment.js +141 -0
  464. package/src/testing/TestHttp.d.ts +29 -0
  465. package/src/testing/TestHttp.d.ts.map +1 -0
  466. package/src/testing/TestHttp.js +96 -0
  467. package/src/testing/index.d.ts +5 -0
  468. package/src/testing/index.d.ts.map +1 -0
  469. package/src/testing/index.js +2 -0
  470. package/src/time/DateTime.d.ts +181 -0
  471. package/src/time/DateTime.d.ts.map +1 -0
  472. package/src/time/DateTime.js +300 -0
  473. package/src/time/index.d.ts +7 -0
  474. package/src/time/index.d.ts.map +1 -0
  475. package/src/time/index.js +5 -0
  476. package/src/tools/http/Http.d.ts.map +1 -1
  477. package/src/tools/http/Http.js +4 -0
  478. package/src/tools/mail/drivers/Smtp.js +1 -1
  479. package/src/tools/queue/drivers/InMemory.d.ts +1 -1
  480. package/src/tools/queue/drivers/InMemory.d.ts.map +1 -1
  481. package/src/tools/queue/drivers/InMemory.js +1 -1
  482. package/src/tools/queue/drivers/Redis.d.ts +1 -1
  483. package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
  484. package/src/tools/queue/drivers/Redis.js +1 -1
  485. package/src/validation/ValidationError.d.ts.map +1 -1
  486. package/src/validation/ValidationError.js +4 -2
  487. package/src/validation/Validator.d.ts +49 -16
  488. package/src/validation/Validator.d.ts.map +1 -1
  489. package/src/validation/Validator.js +307 -5
  490. package/src/common/uuid.d.ts +0 -3
  491. package/src/common/uuid.d.ts.map +0 -1
  492. package/src/common/uuid.js +0 -30
  493. package/src/templates/project/basic/.env.example.tpl +0 -74
  494. package/src/templates/project/basic/.env.tpl +0 -166
  495. 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":"AAEA;;;GAGG;AASH,OAAO,EAAE,gBAAgB,EAAkB,MAAM,yBAAyB,CAAC;AA6Q3E,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
+ {"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
- if (pm === 'npm') {
110
- // Preserve legacy execSync behavior for npm so integration tests and simple CLI usage behave identically
111
- const cmdStr = options.dev
112
- ? `npm install -D ${packages.join(' ')}`
113
- : `npm install ${packages.join(' ')}`; // NOSONAR
114
- execSync(cmdStr, { stdio: 'inherit', cwd: projectRoot });
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
- for (const template of plugin.templates) {
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,4 +1,4 @@
1
- import { AdapterConfig, RuntimeAdapter, ZintrustHandler } from './RuntimeAdapter';
1
+ import type { AdapterConfig, RuntimeAdapter, ZintrustHandler } from './RuntimeAdapter';
2
2
  export declare const RuntimeDetector: Readonly<{
3
3
  RUNTIME_VAR: "RUNTIME";
4
4
  AUTO: "auto";
@@ -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;AAkKzF,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
+ {"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,EACL,aAAa,EAMb,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC;;;;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"}
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, } from '../RuntimeAdapter.js';
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,4 +1,4 @@
1
- import { AdapterConfig, RuntimeAdapter } from '../RuntimeAdapter';
1
+ import type { AdapterConfig, RuntimeAdapter } from '../RuntimeAdapter';
2
2
  /**
3
3
  * Deno runtime adapter for Deno Deploy and edge compute environments
4
4
  * Sealed namespace for immutability
@@ -1 +1 @@
1
- {"version":3,"file":"DenoAdapter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/adapters/DenoAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,aAAa,EAKb,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC;;;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"}
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, } from '../RuntimeAdapter.js';
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,EACL,aAAa,EAKb,cAAc,EACf,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,eAAO,MAAM,aAAa;IACxB;;OAEG;mBACY,aAAa,GAAG,cAAc;EA8D7C,CAAC"}
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, } from '../RuntimeAdapter.js';
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":"AAIA,OAAO,EACL,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"}
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');