@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.
Files changed (494) hide show
  1. package/bin/z.d.ts +7 -0
  2. package/bin/z.d.ts.map +1 -0
  3. package/bin/z.js +6 -0
  4. package/bin/zin.d.ts +7 -0
  5. package/bin/zin.d.ts.map +1 -0
  6. package/bin/zin.js +6 -0
  7. package/bin/zintrust-microservices.d.ts +7 -0
  8. package/bin/zintrust-microservices.d.ts.map +1 -0
  9. package/bin/zintrust-microservices.js +165 -0
  10. package/bin/zintrust.d.ts +9 -0
  11. package/bin/zintrust.d.ts.map +1 -0
  12. package/bin/zintrust.js +51 -0
  13. package/bin/zt.d.ts +7 -0
  14. package/bin/zt.d.ts.map +1 -0
  15. package/bin/zt.js +6 -0
  16. package/package.json +80 -0
  17. package/src/boot/Application.d.ts +31 -0
  18. package/src/boot/Application.d.ts.map +1 -0
  19. package/src/boot/Application.js +159 -0
  20. package/src/boot/Server.d.ts +23 -0
  21. package/src/boot/Server.d.ts.map +1 -0
  22. package/src/boot/Server.js +236 -0
  23. package/src/boot/bootstrap.d.ts +7 -0
  24. package/src/boot/bootstrap.d.ts.map +1 -0
  25. package/src/boot/bootstrap.js +64 -0
  26. package/src/builder/BundleOptimizer.d.ts +42 -0
  27. package/src/builder/BundleOptimizer.d.ts.map +1 -0
  28. package/src/builder/BundleOptimizer.js +356 -0
  29. package/src/cache/Cache.d.ts +26 -0
  30. package/src/cache/Cache.d.ts.map +1 -0
  31. package/src/cache/Cache.js +89 -0
  32. package/src/cache/CacheDriver.d.ts +28 -0
  33. package/src/cache/CacheDriver.d.ts.map +1 -0
  34. package/src/cache/CacheDriver.js +6 -0
  35. package/src/cache/drivers/KVDriver.d.ts +12 -0
  36. package/src/cache/drivers/KVDriver.d.ts.map +1 -0
  37. package/src/cache/drivers/KVDriver.js +54 -0
  38. package/src/cache/drivers/MemoryDriver.d.ts +12 -0
  39. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -0
  40. package/src/cache/drivers/MemoryDriver.js +50 -0
  41. package/src/cache/drivers/MongoDriver.d.ts +17 -0
  42. package/src/cache/drivers/MongoDriver.d.ts.map +1 -0
  43. package/src/cache/drivers/MongoDriver.js +80 -0
  44. package/src/cache/drivers/RedisDriver.d.ts +12 -0
  45. package/src/cache/drivers/RedisDriver.d.ts.map +1 -0
  46. package/src/cache/drivers/RedisDriver.js +79 -0
  47. package/src/cli/BaseCommand.d.ts +39 -0
  48. package/src/cli/BaseCommand.d.ts.map +1 -0
  49. package/src/cli/BaseCommand.js +58 -0
  50. package/src/cli/CLI.d.ts +21 -0
  51. package/src/cli/CLI.d.ts.map +1 -0
  52. package/src/cli/CLI.js +203 -0
  53. package/src/cli/ErrorHandler.d.ts +23 -0
  54. package/src/cli/ErrorHandler.d.ts.map +1 -0
  55. package/src/cli/ErrorHandler.js +95 -0
  56. package/src/cli/PromptHelper.d.ts +47 -0
  57. package/src/cli/PromptHelper.d.ts.map +1 -0
  58. package/src/cli/PromptHelper.js +155 -0
  59. package/src/cli/commands/AddCommand.d.ts +15 -0
  60. package/src/cli/commands/AddCommand.d.ts.map +1 -0
  61. package/src/cli/commands/AddCommand.js +817 -0
  62. package/src/cli/commands/ConfigCommand.d.ts +15 -0
  63. package/src/cli/commands/ConfigCommand.d.ts.map +1 -0
  64. package/src/cli/commands/ConfigCommand.js +273 -0
  65. package/src/cli/commands/D1MigrateCommand.d.ts +15 -0
  66. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -0
  67. package/src/cli/commands/D1MigrateCommand.js +73 -0
  68. package/src/cli/commands/DebugCommand.d.ts +15 -0
  69. package/src/cli/commands/DebugCommand.d.ts.map +1 -0
  70. package/src/cli/commands/DebugCommand.js +52 -0
  71. package/src/cli/commands/FixCommand.d.ts +15 -0
  72. package/src/cli/commands/FixCommand.d.ts.map +1 -0
  73. package/src/cli/commands/FixCommand.js +80 -0
  74. package/src/cli/commands/KeyGenerateCommand.d.ts +9 -0
  75. package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -0
  76. package/src/cli/commands/KeyGenerateCommand.js +76 -0
  77. package/src/cli/commands/LogsCommand.d.ts +19 -0
  78. package/src/cli/commands/LogsCommand.d.ts.map +1 -0
  79. package/src/cli/commands/LogsCommand.js +185 -0
  80. package/src/cli/commands/MigrateCommand.d.ts +15 -0
  81. package/src/cli/commands/MigrateCommand.d.ts.map +1 -0
  82. package/src/cli/commands/MigrateCommand.js +56 -0
  83. package/src/cli/commands/NewCommand.d.ts +32 -0
  84. package/src/cli/commands/NewCommand.d.ts.map +1 -0
  85. package/src/cli/commands/NewCommand.js +280 -0
  86. package/src/cli/commands/PluginCommand.d.ts +9 -0
  87. package/src/cli/commands/PluginCommand.d.ts.map +1 -0
  88. package/src/cli/commands/PluginCommand.js +94 -0
  89. package/src/cli/commands/PrepareCommand.d.ts +8 -0
  90. package/src/cli/commands/PrepareCommand.d.ts.map +1 -0
  91. package/src/cli/commands/PrepareCommand.js +51 -0
  92. package/src/cli/commands/QACommand.d.ts +33 -0
  93. package/src/cli/commands/QACommand.d.ts.map +1 -0
  94. package/src/cli/commands/QACommand.js +490 -0
  95. package/src/cli/commands/SimulateCommand.d.ts +12 -0
  96. package/src/cli/commands/SimulateCommand.d.ts.map +1 -0
  97. package/src/cli/commands/SimulateCommand.js +79 -0
  98. package/src/cli/commands/StartCommand.d.ts +5 -0
  99. package/src/cli/commands/StartCommand.d.ts.map +1 -0
  100. package/src/cli/commands/StartCommand.js +227 -0
  101. package/src/cli/commands/index.d.ts +11 -0
  102. package/src/cli/commands/index.d.ts.map +1 -0
  103. package/src/cli/commands/index.js +10 -0
  104. package/src/cli/config/ConfigManager.d.ts +42 -0
  105. package/src/cli/config/ConfigManager.d.ts.map +1 -0
  106. package/src/cli/config/ConfigManager.js +175 -0
  107. package/src/cli/config/ConfigSchema.d.ts +195 -0
  108. package/src/cli/config/ConfigSchema.d.ts.map +1 -0
  109. package/src/cli/config/ConfigSchema.js +171 -0
  110. package/src/cli/config/ConfigValidator.d.ts +41 -0
  111. package/src/cli/config/ConfigValidator.d.ts.map +1 -0
  112. package/src/cli/config/ConfigValidator.js +200 -0
  113. package/src/cli/config/index.d.ts +8 -0
  114. package/src/cli/config/index.d.ts.map +1 -0
  115. package/src/cli/config/index.js +7 -0
  116. package/src/cli/debug/Dashboard.d.ts +34 -0
  117. package/src/cli/debug/Dashboard.d.ts.map +1 -0
  118. package/src/cli/debug/Dashboard.js +152 -0
  119. package/src/cli/index.d.ts +14 -0
  120. package/src/cli/index.d.ts.map +1 -0
  121. package/src/cli/index.js +14 -0
  122. package/src/cli/logger/Logger.d.ts +43 -0
  123. package/src/cli/logger/Logger.d.ts.map +1 -0
  124. package/src/cli/logger/Logger.js +137 -0
  125. package/src/cli/scaffolding/ControllerGenerator.d.ts +44 -0
  126. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -0
  127. package/src/cli/scaffolding/ControllerGenerator.js +540 -0
  128. package/src/cli/scaffolding/FactoryGenerator.d.ts +47 -0
  129. package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -0
  130. package/src/cli/scaffolding/FactoryGenerator.js +356 -0
  131. package/src/cli/scaffolding/FeatureScaffolder.d.ts +40 -0
  132. package/src/cli/scaffolding/FeatureScaffolder.d.ts.map +1 -0
  133. package/src/cli/scaffolding/FeatureScaffolder.js +747 -0
  134. package/src/cli/scaffolding/FileGenerator.d.ts +31 -0
  135. package/src/cli/scaffolding/FileGenerator.d.ts.map +1 -0
  136. package/src/cli/scaffolding/FileGenerator.js +222 -0
  137. package/src/cli/scaffolding/MigrationGenerator.d.ts +35 -0
  138. package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -0
  139. package/src/cli/scaffolding/MigrationGenerator.js +257 -0
  140. package/src/cli/scaffolding/ModelGenerator.d.ts +81 -0
  141. package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -0
  142. package/src/cli/scaffolding/ModelGenerator.js +249 -0
  143. package/src/cli/scaffolding/ProjectScaffolder.d.ts +66 -0
  144. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -0
  145. package/src/cli/scaffolding/ProjectScaffolder.js +439 -0
  146. package/src/cli/scaffolding/RequestFactoryGenerator.d.ts +50 -0
  147. package/src/cli/scaffolding/RequestFactoryGenerator.d.ts.map +1 -0
  148. package/src/cli/scaffolding/RequestFactoryGenerator.js +465 -0
  149. package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts +43 -0
  150. package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts.map +1 -0
  151. package/src/cli/scaffolding/ResponseFactoryGenerator.js +321 -0
  152. package/src/cli/scaffolding/RouteGenerator.d.ts +66 -0
  153. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -0
  154. package/src/cli/scaffolding/RouteGenerator.js +306 -0
  155. package/src/cli/scaffolding/SeederGenerator.d.ts +47 -0
  156. package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -0
  157. package/src/cli/scaffolding/SeederGenerator.js +286 -0
  158. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts +40 -0
  159. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts.map +1 -0
  160. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +267 -0
  161. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts +45 -0
  162. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts.map +1 -0
  163. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +397 -0
  164. package/src/cli/scaffolding/ServiceScaffolder.d.ts +45 -0
  165. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -0
  166. package/src/cli/scaffolding/ServiceScaffolder.js +367 -0
  167. package/src/cli/scaffolding/TemplateEngine.d.ts +35 -0
  168. package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -0
  169. package/src/cli/scaffolding/TemplateEngine.js +379 -0
  170. package/src/cli/scaffolding/WorkflowGenerator.d.ts +31 -0
  171. package/src/cli/scaffolding/WorkflowGenerator.d.ts.map +1 -0
  172. package/src/cli/scaffolding/WorkflowGenerator.js +193 -0
  173. package/src/cli/scaffolding/index.d.ts +34 -0
  174. package/src/cli/scaffolding/index.d.ts.map +1 -0
  175. package/src/cli/scaffolding/index.js +18 -0
  176. package/src/cli/utils/DistPackager.d.ts +8 -0
  177. package/src/cli/utils/DistPackager.d.ts.map +1 -0
  178. package/src/cli/utils/DistPackager.js +94 -0
  179. package/src/cli/utils/EnvFileLoader.d.ts +21 -0
  180. package/src/cli/utils/EnvFileLoader.d.ts.map +1 -0
  181. package/src/cli/utils/EnvFileLoader.js +166 -0
  182. package/src/cli/utils/spawn.d.ts +11 -0
  183. package/src/cli/utils/spawn.d.ts.map +1 -0
  184. package/src/cli/utils/spawn.js +81 -0
  185. package/src/common/index.d.ts +87 -0
  186. package/src/common/index.d.ts.map +1 -0
  187. package/src/common/index.js +207 -0
  188. package/src/config/SecretsManager.d.ts +122 -0
  189. package/src/config/SecretsManager.d.ts.map +1 -0
  190. package/src/config/SecretsManager.js +328 -0
  191. package/src/config/app.d.ts +56 -0
  192. package/src/config/app.d.ts.map +1 -0
  193. package/src/config/app.js +77 -0
  194. package/src/config/cache.d.ts +76 -0
  195. package/src/config/cache.d.ts.map +1 -0
  196. package/src/config/cache.js +62 -0
  197. package/src/config/constants.d.ts +108 -0
  198. package/src/config/constants.d.ts.map +1 -0
  199. package/src/config/constants.js +64 -0
  200. package/src/config/database.d.ts +122 -0
  201. package/src/config/database.d.ts.map +1 -0
  202. package/src/config/database.js +89 -0
  203. package/src/config/env.d.ts +56 -0
  204. package/src/config/env.d.ts.map +1 -0
  205. package/src/config/env.js +133 -0
  206. package/src/config/features.d.ts +27 -0
  207. package/src/config/features.d.ts.map +1 -0
  208. package/src/config/features.js +49 -0
  209. package/src/config/index.d.ts +554 -0
  210. package/src/config/index.d.ts.map +1 -0
  211. package/src/config/index.js +31 -0
  212. package/src/config/logger.d.ts +17 -0
  213. package/src/config/logger.d.ts.map +1 -0
  214. package/src/config/logger.js +77 -0
  215. package/src/config/microservices.d.ts +88 -0
  216. package/src/config/microservices.d.ts.map +1 -0
  217. package/src/config/microservices.js +90 -0
  218. package/src/config/queue.d.ts +107 -0
  219. package/src/config/queue.d.ts.map +1 -0
  220. package/src/config/queue.js +74 -0
  221. package/src/config/security.d.ts +108 -0
  222. package/src/config/security.d.ts.map +1 -0
  223. package/src/config/security.js +134 -0
  224. package/src/config/storage.d.ts +105 -0
  225. package/src/config/storage.d.ts.map +1 -0
  226. package/src/config/storage.js +79 -0
  227. package/src/container/ServiceContainer.d.ts +25 -0
  228. package/src/container/ServiceContainer.d.ts.map +1 -0
  229. package/src/container/ServiceContainer.js +75 -0
  230. package/src/database/migrations/index.d.ts +2 -0
  231. package/src/database/migrations/index.d.ts.map +1 -0
  232. package/src/database/migrations/index.js +1 -0
  233. package/src/exceptions/ZintrustError.d.ts +88 -0
  234. package/src/exceptions/ZintrustError.d.ts.map +1 -0
  235. package/src/exceptions/ZintrustError.js +110 -0
  236. package/src/features/Auth.d.ts +20 -0
  237. package/src/features/Auth.d.ts.map +1 -0
  238. package/src/features/Auth.js +32 -0
  239. package/src/features/Queue.d.ts +21 -0
  240. package/src/features/Queue.d.ts.map +1 -0
  241. package/src/features/Queue.js +59 -0
  242. package/src/functions/cloudflare.d.ts +5 -0
  243. package/src/functions/cloudflare.d.ts.map +1 -0
  244. package/src/functions/cloudflare.js +34 -0
  245. package/src/functions/deno.d.ts +3 -0
  246. package/src/functions/deno.d.ts.map +1 -0
  247. package/src/functions/deno.js +31 -0
  248. package/src/functions/lambda.d.ts +2 -0
  249. package/src/functions/lambda.d.ts.map +1 -0
  250. package/src/functions/lambda.js +32 -0
  251. package/src/http/Controller.d.ts +20 -0
  252. package/src/http/Controller.d.ts.map +1 -0
  253. package/src/http/Controller.js +46 -0
  254. package/src/http/Kernel.d.ts +24 -0
  255. package/src/http/Kernel.d.ts.map +1 -0
  256. package/src/http/Kernel.js +72 -0
  257. package/src/http/Request.d.ts +36 -0
  258. package/src/http/Request.d.ts.map +1 -0
  259. package/src/http/Request.js +142 -0
  260. package/src/http/Response.d.ts +32 -0
  261. package/src/http/Response.d.ts.map +1 -0
  262. package/src/http/Response.js +70 -0
  263. package/src/index.d.ts +43 -0
  264. package/src/index.d.ts.map +1 -0
  265. package/src/index.js +37 -0
  266. package/src/microservices/MicroserviceBootstrap.d.ts +75 -0
  267. package/src/microservices/MicroserviceBootstrap.d.ts.map +1 -0
  268. package/src/microservices/MicroserviceBootstrap.js +285 -0
  269. package/src/microservices/MicroserviceGenerator.d.ts +27 -0
  270. package/src/microservices/MicroserviceGenerator.d.ts.map +1 -0
  271. package/src/microservices/MicroserviceGenerator.js +436 -0
  272. package/src/microservices/MicroserviceManager.d.ts +68 -0
  273. package/src/microservices/MicroserviceManager.d.ts.map +1 -0
  274. package/src/microservices/MicroserviceManager.js +266 -0
  275. package/src/microservices/PostgresAdapter.d.ts +90 -0
  276. package/src/microservices/PostgresAdapter.d.ts.map +1 -0
  277. package/src/microservices/PostgresAdapter.js +286 -0
  278. package/src/microservices/RequestTracingMiddleware.d.ts +41 -0
  279. package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -0
  280. package/src/microservices/RequestTracingMiddleware.js +122 -0
  281. package/src/microservices/ServiceAuthMiddleware.d.ts +58 -0
  282. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -0
  283. package/src/microservices/ServiceAuthMiddleware.js +240 -0
  284. package/src/microservices/ServiceBundler.d.ts +45 -0
  285. package/src/microservices/ServiceBundler.d.ts.map +1 -0
  286. package/src/microservices/ServiceBundler.js +297 -0
  287. package/src/microservices/ServiceHealthMonitor.d.ts +96 -0
  288. package/src/microservices/ServiceHealthMonitor.d.ts.map +1 -0
  289. package/src/microservices/ServiceHealthMonitor.js +379 -0
  290. package/src/middleware/CsrfMiddleware.d.ts +19 -0
  291. package/src/middleware/CsrfMiddleware.d.ts.map +1 -0
  292. package/src/middleware/CsrfMiddleware.js +121 -0
  293. package/src/middleware/MiddlewareStack.d.ts +27 -0
  294. package/src/middleware/MiddlewareStack.d.ts.map +1 -0
  295. package/src/middleware/MiddlewareStack.js +43 -0
  296. package/src/middleware/RateLimiter.d.ts +22 -0
  297. package/src/middleware/RateLimiter.d.ts.map +1 -0
  298. package/src/middleware/RateLimiter.js +72 -0
  299. package/src/middleware/SecurityMiddleware.d.ts +33 -0
  300. package/src/middleware/SecurityMiddleware.d.ts.map +1 -0
  301. package/src/middleware/SecurityMiddleware.js +106 -0
  302. package/src/middleware/index.d.ts +9 -0
  303. package/src/middleware/index.d.ts.map +1 -0
  304. package/src/middleware/index.js +8 -0
  305. package/src/node-singletons/child-process.d.ts +7 -0
  306. package/src/node-singletons/child-process.d.ts.map +1 -0
  307. package/src/node-singletons/child-process.js +6 -0
  308. package/src/node-singletons/crypto.d.ts +7 -0
  309. package/src/node-singletons/crypto.d.ts.map +1 -0
  310. package/src/node-singletons/crypto.js +6 -0
  311. package/src/node-singletons/events.d.ts +7 -0
  312. package/src/node-singletons/events.d.ts.map +1 -0
  313. package/src/node-singletons/events.js +6 -0
  314. package/src/node-singletons/fs.d.ts +12 -0
  315. package/src/node-singletons/fs.d.ts.map +1 -0
  316. package/src/node-singletons/fs.js +14 -0
  317. package/src/node-singletons/http.d.ts +8 -0
  318. package/src/node-singletons/http.d.ts.map +1 -0
  319. package/src/node-singletons/http.js +6 -0
  320. package/src/node-singletons/index.d.ts +30 -0
  321. package/src/node-singletons/index.d.ts.map +1 -0
  322. package/src/node-singletons/index.js +31 -0
  323. package/src/node-singletons/os.d.ts +9 -0
  324. package/src/node-singletons/os.d.ts.map +1 -0
  325. package/src/node-singletons/os.js +9 -0
  326. package/src/node-singletons/path.d.ts +7 -0
  327. package/src/node-singletons/path.d.ts.map +1 -0
  328. package/src/node-singletons/path.js +6 -0
  329. package/src/node-singletons/perf-hooks.d.ts +7 -0
  330. package/src/node-singletons/perf-hooks.d.ts.map +1 -0
  331. package/src/node-singletons/perf-hooks.js +6 -0
  332. package/src/node-singletons/readline.d.ts +10 -0
  333. package/src/node-singletons/readline.d.ts.map +1 -0
  334. package/src/node-singletons/readline.js +9 -0
  335. package/src/node-singletons/url.d.ts +7 -0
  336. package/src/node-singletons/url.d.ts.map +1 -0
  337. package/src/node-singletons/url.js +6 -0
  338. package/src/orm/ConnectionManager.d.ts +118 -0
  339. package/src/orm/ConnectionManager.d.ts.map +1 -0
  340. package/src/orm/ConnectionManager.js +401 -0
  341. package/src/orm/Database.d.ts +31 -0
  342. package/src/orm/Database.d.ts.map +1 -0
  343. package/src/orm/Database.js +163 -0
  344. package/src/orm/DatabaseAdapter.d.ts +96 -0
  345. package/src/orm/DatabaseAdapter.d.ts.map +1 -0
  346. package/src/orm/DatabaseAdapter.js +40 -0
  347. package/src/orm/Model.d.ts +91 -0
  348. package/src/orm/Model.d.ts.map +1 -0
  349. package/src/orm/Model.js +206 -0
  350. package/src/orm/QueryBuilder.d.ts +52 -0
  351. package/src/orm/QueryBuilder.d.ts.map +1 -0
  352. package/src/orm/QueryBuilder.js +134 -0
  353. package/src/orm/Relationships.d.ts +53 -0
  354. package/src/orm/Relationships.d.ts.map +1 -0
  355. package/src/orm/Relationships.js +98 -0
  356. package/src/orm/Schema.d.ts +123 -0
  357. package/src/orm/Schema.d.ts.map +1 -0
  358. package/src/orm/Schema.js +169 -0
  359. package/src/orm/adapters/D1Adapter.d.ts +15 -0
  360. package/src/orm/adapters/D1Adapter.d.ts.map +1 -0
  361. package/src/orm/adapters/D1Adapter.js +125 -0
  362. package/src/orm/adapters/MySQLAdapter.d.ts +16 -0
  363. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -0
  364. package/src/orm/adapters/MySQLAdapter.js +87 -0
  365. package/src/orm/adapters/PostgreSQLAdapter.d.ts +16 -0
  366. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -0
  367. package/src/orm/adapters/PostgreSQLAdapter.js +87 -0
  368. package/src/orm/adapters/SQLServerAdapter.d.ts +16 -0
  369. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -0
  370. package/src/orm/adapters/SQLServerAdapter.js +81 -0
  371. package/src/orm/adapters/SQLiteAdapter.d.ts +11 -0
  372. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -0
  373. package/src/orm/adapters/SQLiteAdapter.js +131 -0
  374. package/src/performance/Benchmark.d.ts +87 -0
  375. package/src/performance/Benchmark.d.ts.map +1 -0
  376. package/src/performance/Benchmark.js +304 -0
  377. package/src/performance/CodeGenerationBenchmark.d.ts +23 -0
  378. package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -0
  379. package/src/performance/CodeGenerationBenchmark.js +249 -0
  380. package/src/performance/Optimizer.d.ts +99 -0
  381. package/src/performance/Optimizer.d.ts.map +1 -0
  382. package/src/performance/Optimizer.js +396 -0
  383. package/src/performance/establish-baseline.d.ts +9 -0
  384. package/src/performance/establish-baseline.d.ts.map +1 -0
  385. package/src/performance/establish-baseline.js +55 -0
  386. package/src/profiling/MemoryProfiler.d.ts +32 -0
  387. package/src/profiling/MemoryProfiler.d.ts.map +1 -0
  388. package/src/profiling/MemoryProfiler.js +84 -0
  389. package/src/profiling/N1Detector.d.ts +16 -0
  390. package/src/profiling/N1Detector.d.ts.map +1 -0
  391. package/src/profiling/N1Detector.js +120 -0
  392. package/src/profiling/QueryLogger.d.ts +107 -0
  393. package/src/profiling/QueryLogger.d.ts.map +1 -0
  394. package/src/profiling/QueryLogger.js +148 -0
  395. package/src/profiling/RequestProfiler.d.ts +30 -0
  396. package/src/profiling/RequestProfiler.d.ts.map +1 -0
  397. package/src/profiling/RequestProfiler.js +94 -0
  398. package/src/profiling/types.d.ts +77 -0
  399. package/src/profiling/types.d.ts.map +1 -0
  400. package/src/profiling/types.js +5 -0
  401. package/src/routing/Router.d.ts +52 -0
  402. package/src/routing/Router.d.ts.map +1 -0
  403. package/src/routing/Router.js +191 -0
  404. package/src/runtime/PluginManager.d.ts +30 -0
  405. package/src/runtime/PluginManager.d.ts.map +1 -0
  406. package/src/runtime/PluginManager.js +197 -0
  407. package/src/runtime/PluginRegistry.d.ts +22 -0
  408. package/src/runtime/PluginRegistry.d.ts.map +1 -0
  409. package/src/runtime/PluginRegistry.js +93 -0
  410. package/src/runtime/RuntimeAdapter.d.ts +126 -0
  411. package/src/runtime/RuntimeAdapter.d.ts.map +1 -0
  412. package/src/runtime/RuntimeAdapter.js +127 -0
  413. package/src/runtime/RuntimeDetector.d.ts +15 -0
  414. package/src/runtime/RuntimeDetector.d.ts.map +1 -0
  415. package/src/runtime/RuntimeDetector.js +219 -0
  416. package/src/runtime/adapters/CloudflareAdapter.d.ts +43 -0
  417. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -0
  418. package/src/runtime/adapters/CloudflareAdapter.js +175 -0
  419. package/src/runtime/adapters/DenoAdapter.d.ts +30 -0
  420. package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -0
  421. package/src/runtime/adapters/DenoAdapter.js +191 -0
  422. package/src/runtime/adapters/FargateAdapter.d.ts +40 -0
  423. package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -0
  424. package/src/runtime/adapters/FargateAdapter.js +156 -0
  425. package/src/runtime/adapters/LambdaAdapter.d.ts +13 -0
  426. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -0
  427. package/src/runtime/adapters/LambdaAdapter.js +302 -0
  428. package/src/runtime/adapters/NodeServerAdapter.d.ts +16 -0
  429. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -0
  430. package/src/runtime/adapters/NodeServerAdapter.js +199 -0
  431. package/src/scripts/TemplateSync.d.ts +7 -0
  432. package/src/scripts/TemplateSync.d.ts.map +1 -0
  433. package/src/scripts/TemplateSync.js +234 -0
  434. package/src/security/CsrfTokenManager.d.ts +28 -0
  435. package/src/security/CsrfTokenManager.d.ts.map +1 -0
  436. package/src/security/CsrfTokenManager.js +78 -0
  437. package/src/security/Encryptor.d.ts +15 -0
  438. package/src/security/Encryptor.d.ts.map +1 -0
  439. package/src/security/Encryptor.js +142 -0
  440. package/src/security/JwtManager.d.ts +41 -0
  441. package/src/security/JwtManager.d.ts.map +1 -0
  442. package/src/security/JwtManager.js +229 -0
  443. package/src/security/UrlValidator.d.ts +21 -0
  444. package/src/security/UrlValidator.d.ts.map +1 -0
  445. package/src/security/UrlValidator.js +42 -0
  446. package/src/security/XssProtection.d.ts +24 -0
  447. package/src/security/XssProtection.d.ts.map +1 -0
  448. package/src/security/XssProtection.js +133 -0
  449. package/src/templates/TemplateRegistry.d.ts +40 -0
  450. package/src/templates/TemplateRegistry.d.ts.map +1 -0
  451. package/src/templates/TemplateRegistry.js +78 -0
  452. package/src/templates/TemplateRegistry.ts +91 -0
  453. package/src/templates/adapters/MySQLAdapter.ts.tpl +97 -0
  454. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +101 -0
  455. package/src/templates/adapters/SQLServerAdapter.ts.tpl +95 -0
  456. package/src/templates/adapters/SQLiteAdapter.ts.tpl +189 -0
  457. package/src/templates/features/Auth.ts.tpl +40 -0
  458. package/src/templates/features/Queue.ts.tpl +75 -0
  459. package/src/templates/project/basic/.env.example.tpl +26 -0
  460. package/src/templates/project/basic/.env.tpl +164 -0
  461. package/src/templates/project/basic/README.md.tpl +13 -0
  462. package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +155 -0
  463. package/src/templates/project/basic/app/Middleware/ProfilerMiddleware.ts.tpl +55 -0
  464. package/src/templates/project/basic/app/Middleware/index.ts.tpl +304 -0
  465. package/src/templates/project/basic/app/Models/Post.ts.tpl +30 -0
  466. package/src/templates/project/basic/app/Models/User.ts.tpl +53 -0
  467. package/src/templates/project/basic/config/SecretsManager.ts.tpl +453 -0
  468. package/src/templates/project/basic/config/app.ts.tpl +97 -0
  469. package/src/templates/project/basic/config/cache.ts.tpl +117 -0
  470. package/src/templates/project/basic/config/constants.ts.tpl +70 -0
  471. package/src/templates/project/basic/config/database.ts.tpl +152 -0
  472. package/src/templates/project/basic/config/env.ts.tpl +148 -0
  473. package/src/templates/project/basic/config/features.ts.tpl +57 -0
  474. package/src/templates/project/basic/config/index.ts.tpl +36 -0
  475. package/src/templates/project/basic/config/logger.ts.tpl +95 -0
  476. package/src/templates/project/basic/config/microservices.ts.tpl +104 -0
  477. package/src/templates/project/basic/config/queue.ts.tpl +134 -0
  478. package/src/templates/project/basic/config/security.ts.tpl +149 -0
  479. package/src/templates/project/basic/config/storage.ts.tpl +136 -0
  480. package/src/templates/project/basic/database/factories/.gitkeep.tpl +0 -0
  481. package/src/templates/project/basic/database/migrations/.gitkeep.tpl +0 -0
  482. package/src/templates/project/basic/database/migrations/index.ts.tpl +2 -0
  483. package/src/templates/project/basic/database/seeders/.gitkeep.tpl +0 -0
  484. package/src/templates/project/basic/package.json.tpl +22 -0
  485. package/src/templates/project/basic/routes/api.ts.tpl +135 -0
  486. package/src/templates/project/basic/src/index.ts.tpl +49 -0
  487. package/src/templates/project/basic/template.json +17 -0
  488. package/src/templates/project/basic/tsconfig.json.tpl +20 -0
  489. package/src/validation/ValidationError.d.ts +42 -0
  490. package/src/validation/ValidationError.d.ts.map +1 -0
  491. package/src/validation/ValidationError.js +53 -0
  492. package/src/validation/Validator.d.ts +60 -0
  493. package/src/validation/Validator.d.ts.map +1 -0
  494. package/src/validation/Validator.js +190 -0
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Plugin Command
3
+ * Manage framework plugins (install, uninstall, list)
4
+ */
5
+ import { BaseCommand } from '../BaseCommand';
6
+ import { Logger } from '../../config/logger';
7
+ import { PluginManager } from '../../runtime/PluginManager';
8
+ export const PluginCommand = Object.freeze({
9
+ create() {
10
+ return BaseCommand.create({
11
+ name: 'plugin',
12
+ description: 'Manage framework plugins',
13
+ addOptions: (command) => {
14
+ command.alias('p');
15
+ // Options for short syntax (zin p -i a:sqlite)
16
+ command.option('-i, --install <pluginId>', 'Install a plugin');
17
+ command.option('-u, --uninstall <pluginId>', 'Uninstall a plugin');
18
+ command.option('-l, --list', 'List available plugins');
19
+ command
20
+ .command('list')
21
+ .alias('ls')
22
+ .description('List available plugins')
23
+ .action(async () => {
24
+ await listPlugins();
25
+ });
26
+ command
27
+ .command('install <pluginId>')
28
+ .alias('i')
29
+ .description('Install a plugin')
30
+ .action(async (pluginId) => {
31
+ await installPlugin(pluginId);
32
+ });
33
+ command
34
+ .command('uninstall <pluginId>')
35
+ .alias('un')
36
+ .description('Uninstall a plugin')
37
+ .action(async (pluginId) => {
38
+ await uninstallPlugin(pluginId);
39
+ });
40
+ },
41
+ execute: async (options) => {
42
+ const installId = options['install'];
43
+ const uninstallId = options['uninstall'];
44
+ const shouldList = options['list'];
45
+ if (typeof installId === 'string' && installId.length > 0) {
46
+ await installPlugin(installId);
47
+ }
48
+ else if (typeof uninstallId === 'string' && uninstallId.length > 0) {
49
+ await uninstallPlugin(uninstallId);
50
+ }
51
+ else if (shouldList === true) {
52
+ await listPlugins();
53
+ }
54
+ else {
55
+ Logger.info('Use "plugin list", "plugin install <id>", or "plugin uninstall <id>"');
56
+ Logger.info('Shortcuts: "zin p -l", "zin p -i <id>", "zin p -u <id>"');
57
+ }
58
+ },
59
+ });
60
+ },
61
+ });
62
+ async function listPlugins() {
63
+ const plugins = PluginManager.list();
64
+ Logger.info('Available Plugins:');
65
+ const pluginEntries = Object.entries(plugins);
66
+ const installedStatuses = await Promise.all(pluginEntries.map(async ([id]) => PluginManager.isInstalled(id)));
67
+ for (let i = 0; i < pluginEntries.length; i++) {
68
+ const [id, plugin] = pluginEntries[i];
69
+ const isInstalled = installedStatuses[i] ?? false;
70
+ const status = isInstalled ? '✓ Installed' : '- Available';
71
+ const aliases = plugin.aliases !== undefined && plugin.aliases.length > 0
72
+ ? `(aliases: ${plugin.aliases.join(', ')})`
73
+ : '';
74
+ Logger.info(` ${id.padEnd(20)} ${status.padEnd(15)} ${plugin.description} ${aliases}`);
75
+ }
76
+ }
77
+ async function installPlugin(pluginId) {
78
+ try {
79
+ await PluginManager.install(pluginId);
80
+ }
81
+ catch (error) {
82
+ Logger.error(`Failed to install plugin ${pluginId}`, error);
83
+ process.exit(1);
84
+ }
85
+ }
86
+ async function uninstallPlugin(pluginId) {
87
+ try {
88
+ await PluginManager.uninstall(pluginId);
89
+ }
90
+ catch (error) {
91
+ Logger.error(`Failed to uninstall plugin ${pluginId}`, error);
92
+ process.exit(1);
93
+ }
94
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Prepare Command
3
+ * Makes the local dist/ folder installable via `file:/.../dist`.
4
+ * Usage: zintrust prepare
5
+ */
6
+ import { IBaseCommand } from '../BaseCommand';
7
+ export declare const PrepareCommand: IBaseCommand;
8
+ //# sourceMappingURL=PrepareCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrepareCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/PrepareCommand.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAchD,eAAO,MAAM,cAAc,EA2CtB,YAAY,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Prepare Command
3
+ * Makes the local dist/ folder installable via `file:/.../dist`.
4
+ * Usage: zintrust prepare
5
+ */
6
+ import { resolveNpmPath } from '../../common';
7
+ import { DistPackager } from '../utils/DistPackager';
8
+ import { SpawnUtil } from '../utils/spawn';
9
+ import { Logger } from '../../config/logger';
10
+ import { ErrorFactory } from '../../exceptions/ZintrustError';
11
+ import * as path from '../../node-singletons/path';
12
+ import chalk from 'chalk';
13
+ import { Command } from 'commander';
14
+ export const PrepareCommand = {
15
+ name: 'prepare',
16
+ description: 'Prepare local dist/ for file: installs (simulate/fresh install workflow)',
17
+ getCommand() {
18
+ return new Command('prepare')
19
+ .description('Prepare local dist/ so it can be installed via file:/.../dist')
20
+ .option('--dist <path>', 'Dist folder path (default: ./dist)')
21
+ .option('--link', 'Also run `npm link` to expose zintrust/zin/z/zt on PATH (dev-only)')
22
+ .action(async (options) => {
23
+ try {
24
+ const distRel = typeof options.dist === 'string' && options.dist.trim() !== '' ? options.dist : 'dist';
25
+ const distPath = path.resolve(process.cwd(), distRel);
26
+ DistPackager.prepare(distPath, process.cwd());
27
+ Logger.info(chalk.green('✅ Dist prepared.'));
28
+ Logger.info('Docs roots:');
29
+ Logger.info(`- Production/new apps: ${chalk.cyan('dist/public')}`);
30
+ Logger.info(`- Framework dev: ${chalk.cyan('docs-website/public')}`);
31
+ if (options.link === true) {
32
+ Logger.info(chalk.bold('\nLinking CLI globally (npm link)...'));
33
+ const npm = resolveNpmPath();
34
+ const exitCode = await SpawnUtil.spawnAndWait({
35
+ command: npm,
36
+ args: ['link'],
37
+ cwd: process.cwd(),
38
+ });
39
+ if (exitCode !== 0) {
40
+ throw ErrorFactory.createCliError(`npm link exited with code ${exitCode}`);
41
+ }
42
+ Logger.info(chalk.green('✅ Linked. You can now run `zintrust` from your shell.'));
43
+ }
44
+ }
45
+ catch (error) {
46
+ Logger.error('Failed to prepare dist', error);
47
+ throw ErrorFactory.createCliError('Prepare failed', error);
48
+ }
49
+ });
50
+ },
51
+ };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * QA Command - Unified Quality Assurance
3
+ * Runs linting, type-checking, tests, and SonarQube
4
+ */
5
+ import { CommandOptions, IBaseCommand } from '../BaseCommand';
6
+ import { Command } from 'commander';
7
+ /**
8
+ * QA Result interface
9
+ */
10
+ interface QAResult {
11
+ status: 'pending' | 'passed' | 'failed' | 'skipped';
12
+ output: string;
13
+ }
14
+ interface QAResults {
15
+ lint: QAResult;
16
+ typeCheck: QAResult;
17
+ tests: QAResult;
18
+ sonar: QAResult;
19
+ }
20
+ interface IQACommand extends IBaseCommand {
21
+ addOptions(command: Command): void;
22
+ runLint(result: QAResult): Promise<void>;
23
+ runTypeCheck(result: QAResult): Promise<void>;
24
+ runTests(result: QAResult): Promise<void>;
25
+ runSonar(result: QAResult, options: CommandOptions): void;
26
+ generateReport(results: QAResults): Promise<void>;
27
+ }
28
+ /**
29
+ * QA Command Factory - Create a new QA command instance
30
+ */
31
+ export declare const QACommand: () => IQACommand;
32
+ export {};
33
+ //# sourceMappingURL=QACommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QACommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/QACommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAe,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAM7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;GAEG;AACH,UAAU,QAAQ;IAChB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACpD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,QAAQ,CAAC;IACpB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,QAAQ,CAAC;CACjB;AAsaD,UAAU,UAAW,SAAQ,YAAY;IACvC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC1D,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AA0ED;;GAEG;AACH,eAAO,MAAM,SAAS,QAAO,UA0B5B,CAAC"}
@@ -0,0 +1,490 @@
1
+ /**
2
+ * QA Command - Unified Quality Assurance
3
+ * Runs linting, type-checking, tests, and SonarQube
4
+ */
5
+ import { resolveNpmPath } from '../../common';
6
+ import { BaseCommand } from '../BaseCommand';
7
+ import { Logger } from '../../config/logger';
8
+ import { ErrorFactory } from '../../exceptions/ZintrustError';
9
+ import { execFileSync } from '../../node-singletons/child-process';
10
+ import { existsSync } from '../../node-singletons/fs';
11
+ import { resolve } from '../../node-singletons/path';
12
+ const QA_REPORT_CSS = `
13
+ :root {
14
+ --qa-bg: #f8fafc;
15
+ --qa-panel: #ffffff;
16
+ --qa-text: #0f172a;
17
+ --qa-muted: #64748b;
18
+ --qa-border: #e2e8f0;
19
+ --qa-accent: #667eea;
20
+ --qa-success: #16a34a;
21
+ --qa-danger: #dc2626;
22
+ --qa-warn: #f59e0b;
23
+ }
24
+
25
+ body.qa-body {
26
+ margin: 0;
27
+ color: var(--qa-text);
28
+ background: var(--qa-bg);
29
+ }
30
+
31
+ .qa-shell {
32
+ max-width: 980px;
33
+ margin: 48px auto;
34
+ padding: 0 20px;
35
+ }
36
+
37
+ .qa-panel {
38
+ border: 1px solid var(--qa-border);
39
+ border-radius: 14px;
40
+ background: var(--qa-panel);
41
+ overflow: hidden;
42
+ }
43
+
44
+ .qa-hero {
45
+ padding: 28px 28px 18px;
46
+ border-bottom: 1px solid var(--qa-border);
47
+ background: linear-gradient(180deg, rgba(102, 126, 234, 0.10), rgba(255, 255, 255, 0));
48
+ }
49
+
50
+ .qa-title {
51
+ margin: 0;
52
+ font-size: 26px;
53
+ font-weight: 700;
54
+ letter-spacing: -0.02em;
55
+ }
56
+
57
+ .qa-subtitle {
58
+ margin: 8px 0 0;
59
+ color: var(--qa-muted);
60
+ font-size: 14px;
61
+ }
62
+
63
+ .qa-meta {
64
+ margin-top: 12px;
65
+ color: var(--qa-muted);
66
+ font-size: 12px;
67
+ }
68
+
69
+ .qa-content {
70
+ padding: 22px 28px 28px;
71
+ }
72
+
73
+ .qa-summary {
74
+ display: grid;
75
+ grid-template-columns: repeat(4, minmax(0, 1fr));
76
+ gap: 12px;
77
+ padding: 14px;
78
+ border: 1px solid var(--qa-border);
79
+ border-radius: 12px;
80
+ background: #fff;
81
+ }
82
+
83
+ @media (max-width: 800px) {
84
+ .qa-summary {
85
+ grid-template-columns: repeat(2, minmax(0, 1fr));
86
+ }
87
+ }
88
+
89
+ .qa-summary-item {
90
+ display: flex;
91
+ flex-direction: column;
92
+ align-items: center;
93
+ justify-content: center;
94
+ padding: 14px;
95
+ border-radius: 10px;
96
+ background: #f1f5f9;
97
+ }
98
+
99
+ .qa-summary-value {
100
+ font-size: 22px;
101
+ font-weight: 800;
102
+ color: var(--qa-accent);
103
+ line-height: 1;
104
+ margin-bottom: 6px;
105
+ }
106
+
107
+ .qa-summary-label {
108
+ font-size: 11px;
109
+ font-weight: 700;
110
+ color: var(--qa-muted);
111
+ text-transform: uppercase;
112
+ letter-spacing: 0.08em;
113
+ }
114
+
115
+ .qa-scan-list {
116
+ margin-top: 18px;
117
+ display: grid;
118
+ gap: 12px;
119
+ }
120
+
121
+ .qa-scan-item {
122
+ border: 1px solid var(--qa-border);
123
+ border-radius: 12px;
124
+ background: #ffffff;
125
+ overflow: hidden;
126
+ }
127
+
128
+ .qa-scan-item.passed { border-left: 4px solid var(--qa-success); }
129
+ .qa-scan-item.failed { border-left: 4px solid var(--qa-danger); }
130
+ .qa-scan-item.skipped { border-left: 4px solid var(--qa-warn); }
131
+ .qa-scan-item.pending { border-left: 4px solid var(--qa-border); }
132
+
133
+ .qa-scan-header {
134
+ display: flex;
135
+ align-items: center;
136
+ justify-content: space-between;
137
+ gap: 12px;
138
+ padding: 14px 14px 10px;
139
+ }
140
+
141
+ .qa-scan-title {
142
+ display: flex;
143
+ align-items: center;
144
+ gap: 10px;
145
+ font-weight: 700;
146
+ font-size: 14px;
147
+ }
148
+
149
+ .qa-status-icon {
150
+ width: 22px;
151
+ height: 22px;
152
+ border-radius: 999px;
153
+ display: inline-flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ color: #fff;
157
+ font-weight: 800;
158
+ font-size: 12px;
159
+ }
160
+
161
+ .qa-status-icon.passed { background: var(--qa-success); }
162
+ .qa-status-icon.failed { background: var(--qa-danger); }
163
+ .qa-status-icon.skipped { background: var(--qa-warn); }
164
+ .qa-status-icon.pending { background: #94a3b8; }
165
+
166
+ .qa-status-badge {
167
+ display: inline-flex;
168
+ align-items: center;
169
+ justify-content: center;
170
+ padding: 4px 10px;
171
+ border-radius: 999px;
172
+ font-size: 11px;
173
+ font-weight: 800;
174
+ text-transform: uppercase;
175
+ letter-spacing: 0.06em;
176
+ }
177
+
178
+ .qa-status-badge.passed { background: #dcfce7; color: #14532d; }
179
+ .qa-status-badge.failed { background: #fee2e2; color: #7f1d1d; }
180
+ .qa-status-badge.skipped { background: #fef3c7; color: #78350f; }
181
+ .qa-status-badge.pending { background: #e2e8f0; color: #334155; }
182
+
183
+ .qa-scan-details {
184
+ padding: 0 14px 14px;
185
+ color: var(--qa-muted);
186
+ font-size: 13px;
187
+ line-height: 1.55;
188
+ }
189
+
190
+ .qa-actions {
191
+ margin-top: 10px;
192
+ }
193
+
194
+ .qa-link {
195
+ display: inline-flex;
196
+ align-items: center;
197
+ justify-content: center;
198
+ gap: 8px;
199
+ padding: 10px 12px;
200
+ border-radius: 10px;
201
+ background: var(--qa-accent);
202
+ color: #fff;
203
+ font-weight: 700;
204
+ font-size: 13px;
205
+ text-decoration: none;
206
+ }
207
+
208
+ .qa-link:hover {
209
+ text-decoration: none;
210
+ filter: brightness(0.98);
211
+ }
212
+
213
+ .qa-footer {
214
+ border-top: 1px solid var(--qa-border);
215
+ padding: 14px 28px;
216
+ color: var(--qa-muted);
217
+ font-size: 12px;
218
+ background: #fff;
219
+ }
220
+ `;
221
+ const createEmptyResult = () => ({ status: 'pending', output: '' });
222
+ const createResults = () => ({
223
+ lint: createEmptyResult(),
224
+ typeCheck: createEmptyResult(),
225
+ tests: createEmptyResult(),
226
+ sonar: createEmptyResult(),
227
+ });
228
+ const errorToMessage = (error) => {
229
+ if (error instanceof Error)
230
+ return error.message;
231
+ return 'Unknown error';
232
+ };
233
+ const runNpmScript = (name, script, result) => {
234
+ try {
235
+ Logger.info(`Running npm run ${script}...`);
236
+ const npmPath = resolveNpmPath();
237
+ const output = execFileSync(npmPath, ['run', script], { stdio: 'inherit' });
238
+ result.status = 'passed';
239
+ result.output = output?.toString() ?? '';
240
+ return true;
241
+ }
242
+ catch (error) {
243
+ result.status = 'failed';
244
+ result.output = errorToMessage(error);
245
+ ErrorFactory.createTryCatchError(`${name} failed`, error);
246
+ Logger.warn(`${name} failed`);
247
+ return false;
248
+ }
249
+ };
250
+ const runSonarIfEnabled = (result, options) => {
251
+ if (options['sonar'] === false) {
252
+ result.status = 'skipped';
253
+ result.output = '';
254
+ return true;
255
+ }
256
+ return runNpmScript('Sonar', 'sonarqube', result);
257
+ };
258
+ const allStepsPassed = (results) => {
259
+ return (results.lint.status !== 'failed' &&
260
+ results.typeCheck.status !== 'failed' &&
261
+ results.tests.status !== 'failed' &&
262
+ results.sonar.status !== 'failed');
263
+ };
264
+ const getStatusIcon = (status) => {
265
+ switch (status) {
266
+ case 'passed':
267
+ return '✓';
268
+ case 'failed':
269
+ return '✗';
270
+ case 'skipped':
271
+ return '⊘';
272
+ default:
273
+ return '○';
274
+ }
275
+ };
276
+ const getScanItemHTML = (name, result, description, extra = '') => {
277
+ return `
278
+ <div class="qa-scan-item ${result.status}">
279
+ <div class="qa-scan-header">
280
+ <div class="qa-scan-title">
281
+ <div class="qa-status-icon ${result.status}">${getStatusIcon(result.status)}</div>
282
+ <span>${name}</span>
283
+ </div>
284
+ <span class="qa-status-badge ${result.status}">${result.status}</span>
285
+ </div>
286
+ <div class="qa-scan-details">
287
+ ${description}
288
+ ${extra}
289
+ </div>
290
+ </div>`;
291
+ };
292
+ const getSummaryItemHTML = (label, status) => {
293
+ const icon = getStatusIcon(status);
294
+ return `
295
+ <div class="qa-summary-item">
296
+ <div class="qa-summary-value">${icon}</div>
297
+ <div class="qa-summary-label">${label}</div>
298
+ </div>`;
299
+ };
300
+ const getScanDescription = (type, status) => {
301
+ const descriptions = {
302
+ lint: {
303
+ passed: 'No code style issues found.',
304
+ failed: 'Code style issues detected. Check output for details.',
305
+ skipped: 'Linting scan skipped.',
306
+ },
307
+ typeCheck: {
308
+ passed: 'All type checks passed successfully.',
309
+ failed: 'Type errors detected. Check output for details.',
310
+ skipped: 'Type check scan skipped.',
311
+ },
312
+ tests: {
313
+ passed: 'All unit tests passed with coverage report generated.',
314
+ failed: 'Some unit tests failed. Check output for details.',
315
+ skipped: 'Unit tests scan skipped.',
316
+ },
317
+ sonar: {
318
+ passed: 'Code quality analysis completed.',
319
+ failed: 'Code quality issues detected. Check SonarQube dashboard for details.',
320
+ skipped: 'SonarQube analysis skipped (use --no-sonar to disable).',
321
+ },
322
+ };
323
+ return descriptions[type]?.[status] || 'Scan pending or unknown status.';
324
+ };
325
+ /**
326
+ * Generate QA report HTML
327
+ */
328
+ const generateQAReport = (results) => {
329
+ const timestamp = new Date().toLocaleString();
330
+ const lintDesc = getScanDescription('lint', results.lint.status);
331
+ const typeDesc = getScanDescription('typeCheck', results.typeCheck.status);
332
+ const testDesc = getScanDescription('tests', results.tests.status);
333
+ const sonarDesc = getScanDescription('sonar', results.sonar.status);
334
+ return `<!DOCTYPE html>
335
+ <html lang="en">
336
+ <head>
337
+ <meta charset="UTF-8">
338
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
339
+ <title>Zintrust QA Report</title>
340
+ <link rel="stylesheet" href="base.css">
341
+ <link rel="stylesheet" href="qa-report.css">
342
+ </head>
343
+ <body class="qa-body">
344
+ <main class="qa-shell">
345
+ <section class="qa-panel">
346
+ <header class="qa-hero">
347
+ <h1 class="qa-title">Zintrust QA Report</h1>
348
+ <p class="qa-subtitle">Quality Assurance Suite Results</p>
349
+ <div class="qa-meta">Generated on ${timestamp}</div>
350
+ </header>
351
+
352
+ <div class="qa-content">
353
+ <div class="qa-summary">
354
+ ${getSummaryItemHTML('Lint', results.lint.status)}
355
+ ${getSummaryItemHTML('Type Check', results.typeCheck.status)}
356
+ ${getSummaryItemHTML('Tests', results.tests.status)}
357
+ ${getSummaryItemHTML('Sonar', results.sonar.status)}
358
+ </div>
359
+
360
+ <div class="qa-scan-list">
361
+ ${getScanItemHTML('ESLint (Linting)', results.lint, lintDesc)}
362
+ ${getScanItemHTML('TypeScript Compiler (Type Check)', results.typeCheck, typeDesc)}
363
+ ${getScanItemHTML('Vitest (Unit Tests)', results.tests, testDesc, '<div class="qa-actions"><a href="index.html" class="qa-link">View Coverage Report</a></div>')}
364
+ ${getScanItemHTML('SonarQube (Code Quality)', results.sonar, sonarDesc)}
365
+ </div>
366
+ </div>
367
+
368
+ <footer class="qa-footer">Zintrust Framework QA Suite | Generated automatically</footer>
369
+ </section>
370
+ </main>
371
+ </body>
372
+ </html>`;
373
+ };
374
+ /**
375
+ * Open HTML file in default browser
376
+ */
377
+ const openInBrowser = (filePath) => {
378
+ try {
379
+ const absolutePath = resolve(filePath);
380
+ if (!existsSync(absolutePath)) {
381
+ Logger.warn(`File not found: ${filePath}`);
382
+ return;
383
+ }
384
+ const fileUrl = `file://${absolutePath}`;
385
+ // macOS
386
+ if (process.platform === 'darwin') {
387
+ execFileSync('open', [fileUrl]); //NOSONAR
388
+ }
389
+ // Linux
390
+ else if (process.platform === 'linux') {
391
+ execFileSync('xdg-open', [fileUrl]); //NOSONAR
392
+ }
393
+ // Windows
394
+ else if (process.platform === 'win32') {
395
+ execFileSync('cmd', ['/c', 'start', '""', fileUrl]); //NOSONAR
396
+ }
397
+ Logger.info(`Opened: ${filePath}`);
398
+ }
399
+ catch (error) {
400
+ ErrorFactory.createTryCatchError('Could not open browser', error);
401
+ }
402
+ };
403
+ const runLint = async (result) => {
404
+ await runNpmScript('Lint', 'lint', result); // NOSONAR await needed for proper async handling when plugin used
405
+ };
406
+ const runTypeCheck = async (result) => {
407
+ await runNpmScript('Type Check', 'type-check', result); // NOSONAR
408
+ };
409
+ const runTests = async (result) => {
410
+ await runNpmScript('Tests', 'test:coverage', result); // NOSONAR
411
+ };
412
+ const runSonar = (result, options) => {
413
+ runSonarIfEnabled(result, options);
414
+ };
415
+ const generateReport = async (results) => {
416
+ Logger.info('Generating QA report...');
417
+ // Generate HTML report with QA results and coverage
418
+ const htmlContent = generateQAReport(results);
419
+ const reportPath = 'coverage/qa-report.html';
420
+ const reportCssPath = 'coverage/qa-report.css';
421
+ try {
422
+ const fs = await import('node:fs/promises');
423
+ await fs.writeFile(reportPath, htmlContent);
424
+ await fs.writeFile(reportCssPath, QA_REPORT_CSS);
425
+ Logger.info(`QA report generated: ${reportPath}`);
426
+ }
427
+ catch (error) {
428
+ ErrorFactory.createTryCatchError('Failed to generate QA report', error);
429
+ }
430
+ };
431
+ const executeQA = async (qa, options) => {
432
+ try {
433
+ qa.info('Starting Zintrust QA Suite...');
434
+ const results = createResults();
435
+ await qa.runLint(results.lint);
436
+ await qa.runTypeCheck(results.typeCheck);
437
+ // Run tests with coverage report
438
+ qa.info('Generating test coverage report...');
439
+ await qa.runTests(results.tests);
440
+ qa.runSonar(results.sonar, options);
441
+ // Always generate report to show QA suite results
442
+ await qa.generateReport(results);
443
+ if (allStepsPassed(results)) {
444
+ qa.success('QA Suite passed successfully!');
445
+ }
446
+ else {
447
+ qa.warn('QA Suite completed with some failures.');
448
+ }
449
+ // Open QA report in browser by default (unless --no-open is set)
450
+ if (options['open'] !== false) {
451
+ const reportPath = 'coverage/qa-report.html';
452
+ if (existsSync(reportPath)) {
453
+ qa.info('Opening QA report...');
454
+ openInBrowser(reportPath);
455
+ }
456
+ }
457
+ }
458
+ catch (error) {
459
+ ErrorFactory.createTryCatchError('QA Suite execution failed', error);
460
+ qa.debug(error);
461
+ throw error;
462
+ }
463
+ };
464
+ /**
465
+ * QA Command Factory - Create a new QA command instance
466
+ */
467
+ export const QACommand = () => {
468
+ const addOptions = (command) => {
469
+ command.option('--no-sonar', 'Skip SonarQube analysis');
470
+ command.option('--report', 'Generate QA report (with coverage)');
471
+ command.option('--no-open', 'Do not open coverage report in browser');
472
+ };
473
+ const cmd = BaseCommand.create({
474
+ name: 'qa',
475
+ description: 'Run full Quality Assurance suite',
476
+ addOptions,
477
+ execute: async (options) => executeQA(qa, options),
478
+ });
479
+ const qa = {
480
+ ...cmd,
481
+ addOptions,
482
+ runLint,
483
+ runTypeCheck,
484
+ runTests,
485
+ runSonar,
486
+ generateReport,
487
+ execute: async (options) => executeQA(qa, options), // NOSONAR
488
+ };
489
+ return qa;
490
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Simulate Command
3
+ * Internal dev tool that generates a simulated Zintrust app under ./simulate/
4
+ * IMPORTANT: this uses the same ProjectScaffolder as `zin new`.
5
+ * Usage: zin -sim my-blog
6
+ */
7
+ import { IBaseCommand } from '../BaseCommand';
8
+ /**
9
+ * SimulateCommand - Generate simulated apps for testing
10
+ */
11
+ export declare const SimulateCommand: IBaseCommand;
12
+ //# sourceMappingURL=SimulateCommand.d.ts.map