@zintrust/core 0.1.18 → 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 (558) hide show
  1. package/README.md +16 -10
  2. package/bin/zintrust-main.d.ts.map +1 -1
  3. package/bin/zintrust-main.js +9 -0
  4. package/package.json +11 -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/index.html +1 -1
  10. package/public/zintrust.svg +30 -0
  11. package/routes/api.d.ts +7 -0
  12. package/routes/api.d.ts.map +1 -0
  13. package/routes/api.js +115 -0
  14. package/routes/broadcast.d.ts +9 -0
  15. package/routes/broadcast.d.ts.map +1 -0
  16. package/routes/broadcast.js +27 -0
  17. package/routes/health.d.ts +7 -0
  18. package/routes/health.d.ts.map +1 -0
  19. package/routes/health.js +127 -0
  20. package/routes/metrics.d.ts +9 -0
  21. package/routes/metrics.d.ts.map +1 -0
  22. package/routes/metrics.js +20 -0
  23. package/routes/openapi.d.ts +9 -0
  24. package/routes/openapi.d.ts.map +1 -0
  25. package/routes/openapi.js +76 -0
  26. package/routes/storage.d.ts +4 -0
  27. package/routes/storage.d.ts.map +1 -0
  28. package/routes/storage.js +35 -0
  29. package/src/boot/Application.d.ts +2 -2
  30. package/src/boot/Application.d.ts.map +1 -1
  31. package/src/boot/Application.js +18 -3
  32. package/src/boot/Server.d.ts +3 -2
  33. package/src/boot/Server.d.ts.map +1 -1
  34. package/src/boot/Server.js +39 -165
  35. package/src/boot/bootstrap.js +1 -1
  36. package/src/cache/Cache.d.ts +1 -1
  37. package/src/cache/Cache.d.ts.map +1 -1
  38. package/src/cache/CacheDriver.d.ts +4 -0
  39. package/src/cache/CacheDriver.d.ts.map +1 -1
  40. package/src/cache/drivers/KVDriver.d.ts +1 -1
  41. package/src/cache/drivers/KVDriver.d.ts.map +1 -1
  42. package/src/cache/drivers/MemoryDriver.d.ts +1 -1
  43. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  44. package/src/cache/drivers/MemoryDriver.js +16 -0
  45. package/src/cache/drivers/MongoDriver.d.ts +1 -1
  46. package/src/cache/drivers/MongoDriver.d.ts.map +1 -1
  47. package/src/cache/drivers/RedisDriver.d.ts +1 -1
  48. package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
  49. package/src/cli/CLI.d.ts.map +1 -1
  50. package/src/cli/CLI.js +12 -4
  51. package/src/cli/PromptHelper.d.ts.map +1 -1
  52. package/src/cli/PromptHelper.js +4 -3
  53. package/src/cli/commands/AddCommand.d.ts +2 -2
  54. package/src/cli/commands/AddCommand.d.ts.map +1 -1
  55. package/src/cli/commands/AddCommand.js +135 -58
  56. package/src/cli/commands/ConfigCommand.d.ts +1 -1
  57. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  58. package/src/cli/commands/CreateCommand.d.ts +15 -0
  59. package/src/cli/commands/CreateCommand.d.ts.map +1 -0
  60. package/src/cli/commands/CreateCommand.js +143 -0
  61. package/src/cli/commands/D1MigrateCommand.d.ts +1 -1
  62. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  63. package/src/cli/commands/D1MigrateCommand.js +16 -20
  64. package/src/cli/commands/DbSeedCommand.d.ts +9 -0
  65. package/src/cli/commands/DbSeedCommand.d.ts.map +1 -0
  66. package/src/cli/commands/DbSeedCommand.js +171 -0
  67. package/src/cli/commands/DebugCommand.d.ts +1 -1
  68. package/src/cli/commands/DebugCommand.d.ts.map +1 -1
  69. package/src/cli/commands/FixCommand.d.ts +1 -1
  70. package/src/cli/commands/FixCommand.d.ts.map +1 -1
  71. package/src/cli/commands/JwtDevCommand.d.ts +8 -0
  72. package/src/cli/commands/JwtDevCommand.d.ts.map +1 -0
  73. package/src/cli/commands/JwtDevCommand.js +114 -0
  74. package/src/cli/commands/KeyGenerateCommand.d.ts +1 -1
  75. package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -1
  76. package/src/cli/commands/LogsCommand.d.ts +2 -2
  77. package/src/cli/commands/LogsCommand.d.ts.map +1 -1
  78. package/src/cli/commands/LogsCommand.js +36 -2
  79. package/src/cli/commands/MakeMailTemplateCommand.d.ts +1 -1
  80. package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -1
  81. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +1 -1
  82. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -1
  83. package/src/cli/commands/MigrateCommand.d.ts +1 -1
  84. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  85. package/src/cli/commands/MigrateCommand.js +291 -35
  86. package/src/cli/commands/NewCommand.d.ts +2 -2
  87. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  88. package/src/cli/commands/NewCommand.js +38 -13
  89. package/src/cli/commands/PluginCommand.d.ts +1 -1
  90. package/src/cli/commands/PluginCommand.d.ts.map +1 -1
  91. package/src/cli/commands/PrepareCommand.d.ts +1 -1
  92. package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
  93. package/src/cli/commands/QACommand.d.ts +2 -2
  94. package/src/cli/commands/QACommand.d.ts.map +1 -1
  95. package/src/cli/commands/RoutesCommand.d.ts +10 -0
  96. package/src/cli/commands/RoutesCommand.d.ts.map +1 -0
  97. package/src/cli/commands/RoutesCommand.js +242 -0
  98. package/src/cli/commands/SimulateCommand.d.ts +1 -1
  99. package/src/cli/commands/SimulateCommand.d.ts.map +1 -1
  100. package/src/cli/commands/SimulateCommand.js +1 -1
  101. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  102. package/src/cli/commands/StartCommand.js +90 -3
  103. package/src/cli/commands/UpgradeCommand.d.ts +16 -0
  104. package/src/cli/commands/UpgradeCommand.d.ts.map +1 -0
  105. package/src/cli/commands/UpgradeCommand.js +107 -0
  106. package/src/cli/commands/index.d.ts +3 -0
  107. package/src/cli/commands/index.d.ts.map +1 -1
  108. package/src/cli/commands/index.js +3 -0
  109. package/src/cli/commands/runner/index.d.ts +3 -0
  110. package/src/cli/commands/runner/index.d.ts.map +1 -0
  111. package/src/cli/commands/runner/index.js +139 -0
  112. package/src/cli/config/ConfigManager.d.ts +1 -1
  113. package/src/cli/config/ConfigManager.d.ts.map +1 -1
  114. package/src/cli/config/ConfigValidator.d.ts +1 -1
  115. package/src/cli/config/ConfigValidator.d.ts.map +1 -1
  116. package/src/cli/config/ConfigValidator.js +1 -1
  117. package/src/cli/d1/D1SqlMigrations.d.ts +20 -0
  118. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -0
  119. package/src/cli/d1/D1SqlMigrations.js +224 -0
  120. package/src/cli/d1/WranglerConfig.d.ts +4 -0
  121. package/src/cli/d1/WranglerConfig.d.ts.map +1 -0
  122. package/src/cli/d1/WranglerConfig.js +122 -0
  123. package/src/cli/d1/WranglerD1.d.ts +11 -0
  124. package/src/cli/d1/WranglerD1.d.ts.map +1 -0
  125. package/src/cli/d1/WranglerD1.js +16 -0
  126. package/src/cli/env/EnvFileBackfill.d.ts +10 -0
  127. package/src/cli/env/EnvFileBackfill.d.ts.map +1 -0
  128. package/src/cli/env/EnvFileBackfill.js +64 -0
  129. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  130. package/src/cli/scaffolding/ControllerGenerator.js +72 -22
  131. package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -1
  132. package/src/cli/scaffolding/FactoryGenerator.js +3 -1
  133. package/src/cli/scaffolding/GovernanceScaffolder.d.ts +23 -0
  134. package/src/cli/scaffolding/GovernanceScaffolder.d.ts.map +1 -0
  135. package/src/cli/scaffolding/GovernanceScaffolder.js +327 -0
  136. package/src/cli/scaffolding/MigrationGenerator.d.ts +10 -0
  137. package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
  138. package/src/cli/scaffolding/MigrationGenerator.js +137 -51
  139. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  140. package/src/cli/scaffolding/ProjectScaffolder.js +54 -59
  141. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
  142. package/src/cli/scaffolding/RouteGenerator.js +79 -43
  143. package/src/cli/scaffolding/SeederGenerator.d.ts +5 -0
  144. package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -1
  145. package/src/cli/scaffolding/SeederGenerator.js +63 -15
  146. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  147. package/src/cli/scaffolding/ServiceScaffolder.js +24 -3
  148. package/src/cli/scaffolding/index.d.ts +2 -0
  149. package/src/cli/scaffolding/index.d.ts.map +1 -1
  150. package/src/cli/scaffolding/index.js +1 -0
  151. package/src/cli/utils/DistPackager.d.ts.map +1 -1
  152. package/src/cli/utils/DistPackager.js +8 -0
  153. package/src/common/index.d.ts +8 -0
  154. package/src/common/index.d.ts.map +1 -1
  155. package/src/common/index.js +28 -0
  156. package/src/common/utility.d.ts +38 -0
  157. package/src/common/utility.d.ts.map +1 -0
  158. package/src/common/utility.js +101 -0
  159. package/src/config/FileLogWriter.d.ts +2 -1
  160. package/src/config/FileLogWriter.d.ts.map +1 -1
  161. package/src/config/FileLogWriter.js +83 -2
  162. package/src/config/app.d.ts.map +1 -1
  163. package/src/config/app.js +3 -1
  164. package/src/config/broadcast.d.ts +1 -1
  165. package/src/config/broadcast.d.ts.map +1 -1
  166. package/src/config/broadcast.js +1 -1
  167. package/src/config/cache.d.ts +1 -1
  168. package/src/config/cache.d.ts.map +1 -1
  169. package/src/config/cloudflare.d.ts +1 -1
  170. package/src/config/cloudflare.d.ts.map +1 -1
  171. package/src/config/database.d.ts +7 -1
  172. package/src/config/database.d.ts.map +1 -1
  173. package/src/config/database.js +99 -7
  174. package/src/config/env.d.ts +6 -0
  175. package/src/config/env.d.ts.map +1 -1
  176. package/src/config/env.js +7 -0
  177. package/src/config/index.d.ts +8 -2
  178. package/src/config/index.d.ts.map +1 -1
  179. package/src/config/logging/KvLogger.js +1 -1
  180. package/src/config/logging/SlackLogger.js +2 -2
  181. package/src/config/middleware.d.ts +22 -2
  182. package/src/config/middleware.d.ts.map +1 -1
  183. package/src/config/middleware.js +179 -11
  184. package/src/config/notification.js +1 -1
  185. package/src/config/security.d.ts +1 -1
  186. package/src/config/security.js +1 -1
  187. package/src/config/storage.js +1 -1
  188. package/src/config/type.d.ts +8 -2
  189. package/src/config/type.d.ts.map +1 -1
  190. package/src/events/EventDispatcher.d.ts.map +1 -1
  191. package/src/events/EventDispatcher.js +6 -4
  192. package/src/exceptions/ZintrustError.d.ts +7 -0
  193. package/src/exceptions/ZintrustError.d.ts.map +1 -1
  194. package/src/exceptions/ZintrustError.js +56 -0
  195. package/src/features/Auth.d.ts +1 -1
  196. package/src/features/Auth.d.ts.map +1 -1
  197. package/src/features/Auth.js +3 -3
  198. package/src/features/Queue.js +1 -1
  199. package/src/functions/cloudflare.d.ts.map +1 -1
  200. package/src/functions/cloudflare.js +3 -14
  201. package/src/functions/deno.d.ts.map +1 -1
  202. package/src/functions/deno.js +3 -14
  203. package/src/functions/lambda.d.ts.map +1 -1
  204. package/src/functions/lambda.js +3 -14
  205. package/src/health/StartupHealthChecks.js +1 -1
  206. package/src/http/Controller.d.ts +2 -2
  207. package/src/http/Controller.d.ts.map +1 -1
  208. package/src/http/FileUpload.d.ts +68 -0
  209. package/src/http/FileUpload.d.ts.map +1 -0
  210. package/src/http/FileUpload.js +120 -0
  211. package/src/http/Kernel.d.ts +5 -5
  212. package/src/http/Kernel.d.ts.map +1 -1
  213. package/src/http/Kernel.js +139 -23
  214. package/src/http/Request.d.ts +20 -1
  215. package/src/http/Request.d.ts.map +1 -1
  216. package/src/http/Request.js +23 -0
  217. package/src/http/RequestContext.d.ts +6 -0
  218. package/src/http/RequestContext.d.ts.map +1 -1
  219. package/src/http/RequestContext.js +77 -1
  220. package/src/http/Response.d.ts +1 -1
  221. package/src/http/Response.d.ts.map +1 -1
  222. package/src/http/ValidationHelper.d.ts +78 -0
  223. package/src/http/ValidationHelper.d.ts.map +1 -0
  224. package/src/http/ValidationHelper.js +121 -0
  225. package/src/http/error-pages/ErrorPageRenderer.d.ts +17 -0
  226. package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -0
  227. package/src/http/error-pages/ErrorPageRenderer.js +88 -0
  228. package/src/http/middleware/BodyParsingMiddleware.d.ts +12 -0
  229. package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -0
  230. package/src/http/middleware/BodyParsingMiddleware.js +251 -0
  231. package/src/http/middleware/FileUploadMiddleware.d.ts +12 -0
  232. package/src/http/middleware/FileUploadMiddleware.d.ts.map +1 -0
  233. package/src/http/middleware/FileUploadMiddleware.js +74 -0
  234. package/src/http/parsers/BodyParsers.d.ts +32 -0
  235. package/src/http/parsers/BodyParsers.d.ts.map +1 -0
  236. package/src/http/parsers/BodyParsers.js +159 -0
  237. package/src/http/parsers/MultipartParser.d.ts +33 -0
  238. package/src/http/parsers/MultipartParser.d.ts.map +1 -0
  239. package/src/http/parsers/MultipartParser.js +129 -0
  240. package/src/http/parsers/MultipartParserRegistry.d.ts +34 -0
  241. package/src/http/parsers/MultipartParserRegistry.d.ts.map +1 -0
  242. package/src/http/parsers/MultipartParserRegistry.js +20 -0
  243. package/src/http/validated.d.ts +12 -0
  244. package/src/http/validated.d.ts.map +1 -0
  245. package/src/http/validated.js +41 -0
  246. package/src/index.d.ts +65 -7
  247. package/src/index.d.ts.map +1 -1
  248. package/src/index.js +59 -5
  249. package/src/microservices/RequestTracingMiddleware.d.ts +2 -2
  250. package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -1
  251. package/src/microservices/RequestTracingMiddleware.js +3 -0
  252. package/src/microservices/ServiceAuthMiddleware.d.ts +2 -2
  253. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
  254. package/src/middleware/AuthMiddleware.d.ts +10 -0
  255. package/src/middleware/AuthMiddleware.d.ts.map +1 -0
  256. package/src/middleware/AuthMiddleware.js +16 -0
  257. package/src/middleware/CsrfMiddleware.d.ts +11 -1
  258. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  259. package/src/middleware/CsrfMiddleware.js +33 -0
  260. package/src/middleware/JwtAuthMiddleware.d.ts +11 -0
  261. package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -0
  262. package/src/middleware/JwtAuthMiddleware.js +73 -0
  263. package/src/middleware/LoggingMiddleware.d.ts.map +1 -1
  264. package/src/middleware/LoggingMiddleware.js +8 -3
  265. package/src/middleware/MiddlewareStack.d.ts +2 -2
  266. package/src/middleware/MiddlewareStack.d.ts.map +1 -1
  267. package/src/middleware/RateLimiter.d.ts +2 -2
  268. package/src/middleware/RateLimiter.d.ts.map +1 -1
  269. package/src/middleware/RateLimiter.js +26 -1
  270. package/src/middleware/SanitizeBodyMiddleware.d.ts +12 -0
  271. package/src/middleware/SanitizeBodyMiddleware.d.ts.map +1 -0
  272. package/src/middleware/SanitizeBodyMiddleware.js +31 -0
  273. package/src/middleware/SecurityMiddleware.d.ts +1 -1
  274. package/src/middleware/SecurityMiddleware.d.ts.map +1 -1
  275. package/src/middleware/SessionMiddleware.d.ts +1 -1
  276. package/src/middleware/SessionMiddleware.d.ts.map +1 -1
  277. package/src/middleware/ValidationMiddleware.d.ts +25 -0
  278. package/src/middleware/ValidationMiddleware.d.ts.map +1 -0
  279. package/src/middleware/ValidationMiddleware.js +251 -0
  280. package/src/migrations/MigrationDiscovery.d.ts +5 -0
  281. package/src/migrations/MigrationDiscovery.d.ts.map +1 -0
  282. package/src/migrations/MigrationDiscovery.js +16 -0
  283. package/src/migrations/MigrationLoader.d.ts +5 -0
  284. package/src/migrations/MigrationLoader.d.ts.map +1 -0
  285. package/src/migrations/MigrationLoader.js +43 -0
  286. package/src/migrations/MigrationLock.d.ts +4 -0
  287. package/src/migrations/MigrationLock.d.ts.map +1 -0
  288. package/src/migrations/MigrationLock.js +33 -0
  289. package/src/migrations/Migrator.d.ts +23 -0
  290. package/src/migrations/Migrator.d.ts.map +1 -0
  291. package/src/migrations/Migrator.js +4 -0
  292. package/src/migrations/MigratorFactory.d.ts +25 -0
  293. package/src/migrations/MigratorFactory.d.ts.map +1 -0
  294. package/src/migrations/MigratorFactory.js +323 -0
  295. package/src/migrations/schema/Blueprint.d.ts +5 -0
  296. package/src/migrations/schema/Blueprint.d.ts.map +1 -0
  297. package/src/migrations/schema/Blueprint.js +189 -0
  298. package/src/migrations/schema/Schema.d.ts +8 -0
  299. package/src/migrations/schema/Schema.d.ts.map +1 -0
  300. package/src/migrations/schema/Schema.js +141 -0
  301. package/src/migrations/schema/SchemaCompiler.d.ts +20 -0
  302. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -0
  303. package/src/migrations/schema/SchemaCompiler.js +262 -0
  304. package/src/migrations/schema/index.d.ts +5 -0
  305. package/src/migrations/schema/index.d.ts.map +1 -0
  306. package/src/migrations/schema/index.js +3 -0
  307. package/src/migrations/schema/types.d.ts +86 -0
  308. package/src/migrations/schema/types.d.ts.map +1 -0
  309. package/src/migrations/schema/types.js +1 -0
  310. package/src/migrations/types.d.ts +45 -0
  311. package/src/migrations/types.d.ts.map +1 -0
  312. package/src/migrations/types.js +1 -0
  313. package/src/node-singletons/crypto.d.ts +1 -1
  314. package/src/node-singletons/crypto.d.ts.map +1 -1
  315. package/src/node-singletons/crypto.js +1 -1
  316. package/src/node-singletons/fs.d.ts +2 -2
  317. package/src/node-singletons/fs.d.ts.map +1 -1
  318. package/src/node-singletons/fs.js +1 -1
  319. package/src/node-singletons/util.d.ts +6 -0
  320. package/src/node-singletons/util.d.ts.map +1 -0
  321. package/src/node-singletons/util.js +5 -0
  322. package/src/node.d.ts +2 -0
  323. package/src/node.d.ts.map +1 -1
  324. package/src/node.js +7 -0
  325. package/src/observability/OpenTelemetry.d.ts +62 -0
  326. package/src/observability/OpenTelemetry.d.ts.map +1 -0
  327. package/src/observability/OpenTelemetry.js +167 -0
  328. package/src/observability/PrometheusMetrics.d.ts +25 -0
  329. package/src/observability/PrometheusMetrics.d.ts.map +1 -0
  330. package/src/observability/PrometheusMetrics.js +114 -0
  331. package/src/openapi/OpenApiGenerator.d.ts +68 -0
  332. package/src/openapi/OpenApiGenerator.d.ts.map +1 -0
  333. package/src/openapi/OpenApiGenerator.js +287 -0
  334. package/src/orm/Database.d.ts +4 -2
  335. package/src/orm/Database.d.ts.map +1 -1
  336. package/src/orm/Database.js +142 -29
  337. package/src/orm/DatabaseAdapter.d.ts +13 -0
  338. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  339. package/src/orm/DatabaseAdapterRegistry.d.ts.map +1 -1
  340. package/src/orm/DatabaseAdapterRegistry.js +3 -1
  341. package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
  342. package/src/orm/DatabaseRuntimeRegistration.js +4 -0
  343. package/src/orm/Model.d.ts +30 -2
  344. package/src/orm/Model.d.ts.map +1 -1
  345. package/src/orm/Model.js +255 -62
  346. package/src/orm/QueryBuilder.d.ts +22 -1
  347. package/src/orm/QueryBuilder.d.ts.map +1 -1
  348. package/src/orm/QueryBuilder.js +405 -95
  349. package/src/orm/Relationships.d.ts +7 -1
  350. package/src/orm/Relationships.d.ts.map +1 -1
  351. package/src/orm/Relationships.js +18 -0
  352. package/src/orm/SchemaCompiler.d.ts +9 -0
  353. package/src/orm/SchemaCompiler.d.ts.map +1 -0
  354. package/src/orm/SchemaCompiler.js +145 -0
  355. package/src/orm/adapters/D1Adapter.d.ts +1 -1
  356. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  357. package/src/orm/adapters/MySQLAdapter.d.ts +1 -1
  358. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  359. package/src/orm/adapters/MySQLAdapter.js +88 -69
  360. package/src/orm/adapters/PostgreSQLAdapter.d.ts +1 -1
  361. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  362. package/src/orm/adapters/PostgreSQLAdapter.js +88 -69
  363. package/src/orm/adapters/SQLServerAdapter.d.ts +1 -1
  364. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  365. package/src/orm/adapters/SQLiteAdapter.d.ts +1 -1
  366. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  367. package/src/orm/adapters/SQLiteAdapter.js +63 -3
  368. package/src/orm/maintenance/SqliteMaintenance.d.ts +5 -0
  369. package/src/orm/maintenance/SqliteMaintenance.d.ts.map +1 -0
  370. package/src/orm/maintenance/SqliteMaintenance.js +14 -0
  371. package/src/orm/migrations/MigrationStore.d.ts +38 -0
  372. package/src/orm/migrations/MigrationStore.d.ts.map +1 -0
  373. package/src/orm/migrations/MigrationStore.js +157 -0
  374. package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -1
  375. package/src/performance/Optimizer.d.ts +1 -0
  376. package/src/performance/Optimizer.d.ts.map +1 -1
  377. package/src/performance/Optimizer.js +37 -3
  378. package/src/profiling/MemoryProfiler.d.ts +1 -1
  379. package/src/profiling/MemoryProfiler.d.ts.map +1 -1
  380. package/src/profiling/N1Detector.d.ts +1 -1
  381. package/src/profiling/N1Detector.d.ts.map +1 -1
  382. package/src/profiling/QueryLogger.d.ts +1 -1
  383. package/src/profiling/QueryLogger.d.ts.map +1 -1
  384. package/src/profiling/RequestProfiler.d.ts +3 -3
  385. package/src/profiling/RequestProfiler.d.ts.map +1 -1
  386. package/src/routes/api.d.ts +2 -0
  387. package/src/routes/api.d.ts.map +1 -0
  388. package/src/routes/api.js +1 -0
  389. package/src/routes/broadcast.d.ts +2 -0
  390. package/src/routes/broadcast.d.ts.map +1 -0
  391. package/src/routes/broadcast.js +1 -0
  392. package/src/routes/health.d.ts +2 -0
  393. package/src/routes/health.d.ts.map +1 -0
  394. package/src/routes/health.js +1 -0
  395. package/src/routes/metrics.d.ts +2 -0
  396. package/src/routes/metrics.d.ts.map +1 -0
  397. package/src/routes/metrics.js +1 -0
  398. package/src/routes/storage.d.ts +2 -0
  399. package/src/routes/storage.d.ts.map +1 -0
  400. package/src/routes/storage.js +1 -0
  401. package/src/routing/CoreRoutes.d.ts +12 -0
  402. package/src/routing/CoreRoutes.d.ts.map +1 -0
  403. package/src/routing/CoreRoutes.js +151 -0
  404. package/src/routing/RouteRegistry.d.ts +39 -0
  405. package/src/routing/RouteRegistry.d.ts.map +1 -0
  406. package/src/routing/RouteRegistry.js +44 -0
  407. package/src/routing/Router.d.ts +26 -9
  408. package/src/routing/Router.d.ts.map +1 -1
  409. package/src/routing/Router.js +79 -35
  410. package/src/routing/common.d.ts +15 -0
  411. package/src/routing/common.d.ts.map +1 -0
  412. package/src/routing/common.js +47 -0
  413. package/src/routing/doc.d.ts +28 -0
  414. package/src/routing/doc.d.ts.map +1 -0
  415. package/src/routing/doc.js +95 -0
  416. package/src/routing/error.d.ts +21 -0
  417. package/src/routing/error.d.ts.map +1 -0
  418. package/src/routing/error.js +126 -0
  419. package/src/routing/errorPages.d.ts +14 -0
  420. package/src/routing/errorPages.d.ts.map +1 -0
  421. package/src/routing/errorPages.js +103 -0
  422. package/src/routing/publicRoot.d.ts +18 -0
  423. package/src/routing/publicRoot.d.ts.map +1 -0
  424. package/src/routing/publicRoot.js +49 -0
  425. package/src/runtime/PluginAutoImports.d.ts +21 -0
  426. package/src/runtime/PluginAutoImports.d.ts.map +1 -0
  427. package/src/runtime/PluginAutoImports.js +59 -0
  428. package/src/runtime/PluginManager.d.ts +1 -5
  429. package/src/runtime/PluginManager.d.ts.map +1 -1
  430. package/src/runtime/PluginManager.js +25 -18
  431. package/src/runtime/RuntimeAdapter.d.ts.map +1 -1
  432. package/src/runtime/RuntimeAdapter.js +20 -1
  433. package/src/runtime/RuntimeDetector.d.ts +1 -1
  434. package/src/runtime/RuntimeDetector.d.ts.map +1 -1
  435. package/src/runtime/adapters/CloudflareAdapter.d.ts +1 -1
  436. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  437. package/src/runtime/adapters/CloudflareAdapter.js +1 -1
  438. package/src/runtime/adapters/DenoAdapter.d.ts +1 -1
  439. package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -1
  440. package/src/runtime/adapters/DenoAdapter.js +3 -3
  441. package/src/runtime/adapters/LambdaAdapter.d.ts +1 -1
  442. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
  443. package/src/runtime/adapters/LambdaAdapter.js +1 -1
  444. package/src/runtime/adapters/NodeServerAdapter.d.ts +1 -1
  445. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
  446. package/src/runtime/getKernel.d.ts +9 -0
  447. package/src/runtime/getKernel.d.ts.map +1 -0
  448. package/src/runtime/getKernel.js +27 -0
  449. package/src/scripts/TemplateImportsCheck.js +47 -7
  450. package/src/scripts/TemplateSync.js +92 -20
  451. package/src/security/Encryptor.d.ts.map +1 -1
  452. package/src/security/Encryptor.js +64 -7
  453. package/src/security/JwtManager.d.ts +1 -0
  454. package/src/security/JwtManager.d.ts.map +1 -1
  455. package/src/security/JwtManager.js +33 -0
  456. package/src/security/Sanitizer.d.ts +76 -0
  457. package/src/security/Sanitizer.d.ts.map +1 -0
  458. package/src/security/Sanitizer.js +412 -0
  459. package/src/security/TokenRevocation.d.ts +7 -0
  460. package/src/security/TokenRevocation.d.ts.map +1 -0
  461. package/src/security/TokenRevocation.js +57 -0
  462. package/src/seeders/SeederDiscovery.d.ts +5 -0
  463. package/src/seeders/SeederDiscovery.d.ts.map +1 -0
  464. package/src/seeders/SeederDiscovery.js +21 -0
  465. package/src/seeders/SeederLoader.d.ts +5 -0
  466. package/src/seeders/SeederLoader.d.ts.map +1 -0
  467. package/src/seeders/SeederLoader.js +60 -0
  468. package/src/seeders/types.d.ts +18 -0
  469. package/src/seeders/types.d.ts.map +1 -0
  470. package/src/seeders/types.js +1 -0
  471. package/src/session/SessionManager.js +1 -1
  472. package/src/start.d.ts +21 -0
  473. package/src/start.d.ts.map +1 -0
  474. package/src/start.js +60 -0
  475. package/src/templates/adapters/MySQLAdapter.ts.tpl +109 -85
  476. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +129 -88
  477. package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -9
  478. package/src/templates/adapters/SQLiteAdapter.ts.tpl +78 -11
  479. package/src/templates/features/Queue.ts.tpl +2 -2
  480. package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +217 -0
  481. package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +3 -16
  482. package/src/templates/project/basic/app/Middleware/ProfilerMiddleware.ts.tpl +1 -3
  483. package/src/templates/project/basic/app/Middleware/index.ts.tpl +3 -8
  484. package/src/templates/project/basic/app/Models/Post.ts.tpl +2 -3
  485. package/src/templates/project/basic/app/Models/User.ts.tpl +1 -1
  486. package/src/templates/project/basic/app/Types/controller.ts.tpl +46 -0
  487. package/src/templates/project/basic/config/FileLogWriter.ts.tpl +5 -236
  488. package/src/templates/project/basic/config/SecretsManager.ts.tpl +13 -450
  489. package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +9 -268
  490. package/src/templates/project/basic/config/app.ts.tpl +13 -153
  491. package/src/templates/project/basic/config/broadcast.ts.tpl +15 -129
  492. package/src/templates/project/basic/config/cache.ts.tpl +15 -92
  493. package/src/templates/project/basic/config/cloudflare.ts.tpl +4 -39
  494. package/src/templates/project/basic/config/constants.ts.tpl +9 -65
  495. package/src/templates/project/basic/config/database.ts.tpl +29 -116
  496. package/src/templates/project/basic/config/env.ts.tpl +5 -169
  497. package/src/templates/project/basic/config/features.ts.tpl +6 -54
  498. package/src/templates/project/basic/config/index.ts.tpl +27 -24
  499. package/src/templates/project/basic/config/logger.ts.tpl +5 -381
  500. package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +1 -1
  501. package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +2 -2
  502. package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +1 -1
  503. package/src/templates/project/basic/config/mail.ts.tpl +15 -115
  504. package/src/templates/project/basic/config/microservices.ts.tpl +11 -97
  505. package/src/templates/project/basic/config/middleware.ts.tpl +27 -18
  506. package/src/templates/project/basic/config/notification.ts.tpl +14 -127
  507. package/src/templates/project/basic/config/queue.ts.tpl +16 -79
  508. package/src/templates/project/basic/config/security.ts.tpl +11 -163
  509. package/src/templates/project/basic/config/startup.ts.tpl +10 -21
  510. package/src/templates/project/basic/config/storage.ts.tpl +15 -133
  511. package/src/templates/project/basic/config/type.ts.tpl +33 -441
  512. package/src/templates/project/basic/database/factories/UserFactory.ts.tpl +80 -0
  513. package/src/templates/project/basic/database/migrations/create_tasks_table.ts.tpl +28 -0
  514. package/src/templates/project/basic/database/migrations/create_users_table.ts.tpl +29 -0
  515. package/src/templates/project/basic/database/seeders/DatabaseSeeder.ts.tpl +19 -0
  516. package/src/templates/project/basic/database/seeders/UserSeeder.ts.tpl +18 -0
  517. package/src/templates/project/basic/database/seeders/index.ts.tpl +2 -0
  518. package/src/templates/project/basic/package.json.tpl +1 -1
  519. package/src/templates/project/basic/routes/api.ts.tpl +74 -36
  520. package/src/templates/project/basic/routes/health.ts.tpl +1 -6
  521. package/src/templates/project/basic/routes/metrics.ts.tpl +22 -0
  522. package/src/templates/project/basic/src/index.ts.tpl +7 -80
  523. package/src/templates/project/basic/tsconfig.json.tpl +12 -13
  524. package/src/testing/TestEnvironment.d.ts +40 -0
  525. package/src/testing/TestEnvironment.d.ts.map +1 -0
  526. package/src/testing/TestEnvironment.js +141 -0
  527. package/src/testing/TestHttp.d.ts +29 -0
  528. package/src/testing/TestHttp.d.ts.map +1 -0
  529. package/src/testing/TestHttp.js +96 -0
  530. package/src/testing/index.d.ts +5 -0
  531. package/src/testing/index.d.ts.map +1 -0
  532. package/src/testing/index.js +2 -0
  533. package/src/time/DateTime.d.ts +181 -0
  534. package/src/time/DateTime.d.ts.map +1 -0
  535. package/src/time/DateTime.js +300 -0
  536. package/src/time/index.d.ts +7 -0
  537. package/src/time/index.d.ts.map +1 -0
  538. package/src/time/index.js +5 -0
  539. package/src/tools/http/Http.d.ts.map +1 -1
  540. package/src/tools/http/Http.js +4 -0
  541. package/src/tools/mail/drivers/Smtp.js +1 -1
  542. package/src/tools/queue/drivers/InMemory.d.ts +1 -1
  543. package/src/tools/queue/drivers/InMemory.d.ts.map +1 -1
  544. package/src/tools/queue/drivers/InMemory.js +1 -1
  545. package/src/tools/queue/drivers/Redis.d.ts +1 -1
  546. package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
  547. package/src/tools/queue/drivers/Redis.js +1 -1
  548. package/src/validation/ValidationError.d.ts.map +1 -1
  549. package/src/validation/ValidationError.js +4 -2
  550. package/src/validation/Validator.d.ts +49 -16
  551. package/src/validation/Validator.d.ts.map +1 -1
  552. package/src/validation/Validator.js +307 -5
  553. package/src/common/uuid.d.ts +0 -3
  554. package/src/common/uuid.d.ts.map +0 -1
  555. package/src/common/uuid.js +0 -30
  556. package/src/templates/project/basic/.env.example.tpl +0 -74
  557. package/src/templates/project/basic/.env.tpl +0 -166
  558. package/src/templates/project/basic/database/migrations/index.ts.tpl +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ControllerGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ControllerGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAE/F,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgChG;AAED;;GAEG;AAEH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CA2CjG;AA4bD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,EAAE,CAEpD;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;EAI9B,CAAC"}
1
+ {"version":3,"file":"ControllerGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ControllerGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;AAE/F,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAcD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgChG;AAED;;GAEG;AAEH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CA2CjG;AA8eD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,EAAE,CAEpD;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;EAI9B,CAAC"}
@@ -125,7 +125,7 @@ function handleError(res: IResponse, error: unknown): void {
125
125
  res.setStatus(500).json({ error: message });
126
126
  }
127
127
 
128
- export const ${className} = Object.freeze({
128
+ const controller = Object.freeze({
129
129
  ...Controller,
130
130
  ${buildIndexMethod(modelName)},
131
131
 
@@ -137,6 +137,16 @@ ${buildUpdateMethod(modelName)},
137
137
 
138
138
  ${buildDestroyMethod(modelName)},
139
139
  });
140
+
141
+ export type ${className}Api = typeof controller;
142
+
143
+ export const ${className} = Object.freeze({
144
+ create(): ${className}Api {
145
+ return controller;
146
+ },
147
+ });
148
+
149
+ export default ${className};
140
150
  `;
141
151
  }
142
152
  /**
@@ -283,16 +293,26 @@ function handleError(res: IResponse, error: unknown): void {
283
293
  res.setStatus(500).json({ error: message });
284
294
  }
285
295
 
286
- export const ${className} = {\n ...Controller,
287
- ${buildApiControllerBody(className)},
288
- };
296
+ const controller = Object.freeze({\n ...Controller,
297
+ ${buildApiControllerBody()},
298
+ });
299
+
300
+ export type ${className}Api = typeof controller;
301
+
302
+ export const ${className} = Object.freeze({
303
+ create(): ${className}Api {
304
+ return controller;
305
+ },
306
+ });
307
+
308
+ export default ${className};
289
309
  `;
290
310
  }
291
311
  /**
292
312
  * Build API controller body
293
313
  */
294
- function buildApiControllerBody(className) {
295
- return `${buildApiMainHandler(className)},
314
+ function buildApiControllerBody() {
315
+ return `${buildApiMainHandler()},
296
316
 
297
317
  ${buildApiMethodHandlers()},
298
318
  `;
@@ -300,7 +320,7 @@ ${buildApiMethodHandlers()},
300
320
  /**
301
321
  * Build API main handler
302
322
  */
303
- function buildApiMainHandler(className) {
323
+ function buildApiMainHandler() {
304
324
  return ` /**
305
325
  * API endpoint template
306
326
  */
@@ -310,13 +330,13 @@ function buildApiMainHandler(className) {
310
330
 
311
331
  // Route to appropriate handler
312
332
  if (method === 'GET') {
313
- await ${className}.handleGet(req, res);
333
+ await controller.handleGet(req, res);
314
334
  } else if (method === 'POST') {
315
- await ${className}.handlePost(req, res);
335
+ await controller.handlePost(req, res);
316
336
  } else if (method === 'PUT') {
317
- await ${className}.handlePut(req, res);
337
+ await controller.handlePut(req, res);
318
338
  } else if (method === 'DELETE') {
319
- await ${className}.handleDelete(req, res);
339
+ await controller.handleDelete(req, res);
320
340
  } else {
321
341
  res.setStatus(405).json({ error: 'Method not allowed' });
322
342
  }
@@ -374,7 +394,7 @@ function handleError(res: IResponse, error: unknown): void {
374
394
  res.setStatus(500).json({ errors: [{ message }] });
375
395
  }
376
396
 
377
- export const ${className} = {\n ...Controller,
397
+ const controller = Object.freeze({\n ...Controller,
378
398
  /**
379
399
  * GraphQL endpoint
380
400
  */
@@ -389,7 +409,7 @@ export const ${className} = {\n ...Controller,
389
409
  const query = body.query as string;
390
410
 
391
411
  // TODO: Execute GraphQL query
392
- const result = await ${className}.executeQuery(query);
412
+ const result = await controller.executeQuery(query);
393
413
 
394
414
  res.json(result);
395
415
  } catch (error) {
@@ -404,7 +424,17 @@ export const ${className} = {\n ...Controller,
404
424
  // TODO: Implement GraphQL execution
405
425
  return { data: null };
406
426
  },
407
- };
427
+ });
428
+
429
+ export type ${className}Api = typeof controller;
430
+
431
+ export const ${className} = Object.freeze({
432
+ create(): ${className}Api {
433
+ return controller;
434
+ },
435
+ });
436
+
437
+ export default ${className};
408
438
  `;
409
439
  }
410
440
  /**
@@ -419,7 +449,7 @@ function generateWebSocketController(options) {
419
449
 
420
450
  import { Logger } from '../../config/logger';
421
451
 
422
- export const ${className} = {
452
+ const controller = Object.freeze({
423
453
  /**
424
454
  * Handle WebSocket connection
425
455
  */
@@ -441,7 +471,17 @@ export const ${className} = {
441
471
  async onDisconnect(socket: { id: string }): Promise<void> {
442
472
  Logger.info('Client disconnected:', { socketId: socket.id });
443
473
  },
444
- };
474
+ });
475
+
476
+ export type ${className}Api = typeof controller;
477
+
478
+ export const ${className} = Object.freeze({
479
+ create(): ${className}Api {
480
+ return controller;
481
+ },
482
+ });
483
+
484
+ export default ${className};
445
485
  `;
446
486
  }
447
487
  /**
@@ -462,15 +502,25 @@ function handleError(res: IResponse, error: unknown): void {
462
502
  res.setStatus(500).json({ error: message });
463
503
  }
464
504
 
465
- export const ${className} = {\n ...Controller,
466
- ${buildWebhookControllerBody(className)},
467
- };
505
+ const controller = Object.freeze({\n ...Controller,
506
+ ${buildWebhookControllerBody()},
507
+ });
508
+
509
+ export type ${className}Api = typeof controller;
510
+
511
+ export const ${className} = Object.freeze({
512
+ create(): ${className}Api {
513
+ return controller;
514
+ },
515
+ });
516
+
517
+ export default ${className};
468
518
  `;
469
519
  }
470
520
  /**
471
521
  * Build Webhook controller body
472
522
  */
473
- function buildWebhookControllerBody(className) {
523
+ function buildWebhookControllerBody() {
474
524
  return ` /**
475
525
  * Handle incoming webhook
476
526
  */
@@ -478,13 +528,13 @@ function buildWebhookControllerBody(className) {
478
528
  try {
479
529
  // Verify webhook signature
480
530
  const signature = req.getHeader('x-webhook-signature');
481
- if (${className}.verifySignature(req, signature as string) === false) {
531
+ if (controller.verifySignature(req, signature as string) === false) {
482
532
  res.setStatus(401).json({ error: 'Invalid signature' });
483
533
  return;
484
534
  }
485
535
 
486
536
  const body = req.getBody();
487
- await ${className}.processWebhook(body);
537
+ await controller.processWebhook(body);
488
538
 
489
539
  res.json({ success: true });
490
540
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"FactoryGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/FactoryGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,UAAU,GACV,MAAM,GACN,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AAEH;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B5E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAyB9F;AA+SD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;EAI3B,CAAC"}
1
+ {"version":3,"file":"FactoryGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/FactoryGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,UAAU,GACV,MAAM,GACN,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AAEH;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B5E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAyB9F;AAiTD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;EAI3B,CAAC"}
@@ -156,8 +156,10 @@ ${statePatterns}
156
156
 
157
157
  return result;
158
158
  }
159
+ };
160
+
159
161
  return factory;
160
- }`;
162
+ },`;
161
163
  }
162
164
  /**
163
165
  * Build import statements
@@ -0,0 +1,23 @@
1
+ /**
2
+ * GovernanceScaffolder
3
+ *
4
+ * Adds optional governance tooling to a generated app:
5
+ * - ESLint config + scripts
6
+ * - Architecture tests (Vitest)
7
+ */
8
+ export type GovernanceScaffoldOptions = Readonly<{
9
+ writeEslintConfig?: boolean;
10
+ writeArchTests?: boolean;
11
+ install?: boolean;
12
+ packageManager?: string;
13
+ }>;
14
+ export type GovernanceScaffoldResult = Readonly<{
15
+ success: boolean;
16
+ filesCreated: string[];
17
+ message: string;
18
+ }>;
19
+ export declare const GovernanceScaffolder: Readonly<{
20
+ scaffold(projectRoot: string, options?: GovernanceScaffoldOptions): Promise<GovernanceScaffoldResult>;
21
+ }>;
22
+ export default GovernanceScaffolder;
23
+ //# sourceMappingURL=GovernanceScaffolder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GovernanceScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/GovernanceScaffolder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AA8RH,eAAO,MAAM,oBAAoB;0BAEhB,MAAM,YACV,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC;EA+DpC,CAAC;AAEH,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,327 @@
1
+ /**
2
+ * GovernanceScaffolder
3
+ *
4
+ * Adds optional governance tooling to a generated app:
5
+ * - ESLint config + scripts
6
+ * - Architecture tests (Vitest)
7
+ */
8
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
9
+ import { SpawnUtil } from '../utils/spawn.js';
10
+ import { resolvePackageManager } from '../../common/index.js';
11
+ import { Logger } from '../../config/logger.js';
12
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
13
+ import * as path from '../../node-singletons/path.js';
14
+ const getStringRecord = (value) => {
15
+ if (typeof value !== 'object' || value === null)
16
+ return undefined;
17
+ const obj = value;
18
+ const out = {};
19
+ for (const [k, v] of Object.entries(obj)) {
20
+ if (typeof v === 'string')
21
+ out[k] = v;
22
+ }
23
+ return out;
24
+ };
25
+ const readPackageJsonOrThrow = (projectRoot) => {
26
+ const pkgPath = path.join(projectRoot, 'package.json');
27
+ if (!FileGenerator.fileExists(pkgPath)) {
28
+ throw ErrorFactory.createValidationError(`package.json not found at ${pkgPath}`);
29
+ }
30
+ const raw = FileGenerator.readFile(pkgPath);
31
+ const parsed = JSON.parse(raw);
32
+ if (typeof parsed !== 'object' || parsed === null) {
33
+ throw ErrorFactory.createValidationError('package.json is not a JSON object');
34
+ }
35
+ return parsed;
36
+ };
37
+ const writePackageJson = (projectRoot, pkg) => {
38
+ const pkgPath = path.join(projectRoot, 'package.json');
39
+ const content = `${JSON.stringify(pkg, null, 2)}\n`;
40
+ FileGenerator.writeFile(pkgPath, content, { overwrite: true });
41
+ };
42
+ const upsertScript = (scripts, name, value) => {
43
+ if (typeof scripts[name] !== 'string' || scripts[name] === '') {
44
+ scripts[name] = value;
45
+ }
46
+ };
47
+ const ensureDevDependency = (devDependencies, name, version) => {
48
+ if (typeof devDependencies[name] !== 'string' || devDependencies[name] === '') {
49
+ devDependencies[name] = version;
50
+ }
51
+ };
52
+ const inferGovernanceVersion = (pkg) => {
53
+ const deps = getStringRecord(pkg.dependencies);
54
+ const core = deps?.['@zintrust/core'];
55
+ if (typeof core === 'string' && core.trim() !== '')
56
+ return core;
57
+ return '^0.1.0';
58
+ };
59
+ const writeEslintConfig = (projectRoot) => {
60
+ const eslintConfigPath = path.join(projectRoot, 'eslint.config.mjs');
61
+ const content = `import { zintrustAppEslintConfig } from '@zintrust/governance';
62
+
63
+ export default zintrustAppEslintConfig({
64
+ tsconfigRootDir: import.meta.dirname,
65
+ });
66
+ `;
67
+ const wrote = FileGenerator.writeFile(eslintConfigPath, content, { overwrite: false });
68
+ return wrote ? [eslintConfigPath] : [];
69
+ };
70
+ const IMPORT_BOUNDARIES_ARCH_TEST_CONTENT = `import * as fs from 'node:fs/promises';
71
+ import * as path from 'node:path';
72
+ import * as ts from 'typescript';
73
+ import { describe, expect, it } from 'vitest';
74
+
75
+ type ImportHit = {
76
+ specifier: string;
77
+ line: string;
78
+ };
79
+
80
+ type Violation = {
81
+ file: string;
82
+ reason: string;
83
+ hit: ImportHit;
84
+ };
85
+
86
+ const repoRoot = process.cwd();
87
+
88
+ const isTsFile = (filePath: string): boolean => {
89
+ if (!filePath.endsWith('.ts')) return false;
90
+ if (filePath.endsWith('.d.ts')) return false;
91
+ return true;
92
+ };
93
+
94
+ const walkTsFiles = async (dir: string): Promise<string[]> => {
95
+ const entries = await fs.readdir(dir, { withFileTypes: true });
96
+
97
+ const files = entries
98
+ .filter((ent) => ent.isFile())
99
+ .map((ent) => path.join(dir, ent.name))
100
+ .filter(isTsFile);
101
+
102
+ const subDirs = entries.filter((ent) => ent.isDirectory()).map((ent) => path.join(dir, ent.name));
103
+ const nested = await Promise.all(subDirs.map((subDir) => walkTsFiles(subDir)));
104
+
105
+ return [...files, ...nested.flat()];
106
+ };
107
+
108
+ const extractImportSpecifiers = (source: string, filePath: string): ImportHit[] => {
109
+ const sourceFile = ts.createSourceFile(
110
+ filePath,
111
+ source,
112
+ ts.ScriptTarget.ESNext,
113
+ true,
114
+ ts.ScriptKind.TS
115
+ );
116
+ const lines = source.split(/\r?\n/);
117
+ const hits: ImportHit[] = [];
118
+
119
+ const addHit = (specifier: string, pos: number) => {
120
+ const { line } = sourceFile.getLineAndCharacterOfPosition(pos);
121
+ hits.push({
122
+ specifier,
123
+ line: (lines[line] ?? '').trim(),
124
+ });
125
+ };
126
+
127
+ const visit = (node: ts.Node) => {
128
+ if (ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) {
129
+ const moduleSpecifier = node.moduleSpecifier;
130
+ if (moduleSpecifier && ts.isStringLiteral(moduleSpecifier)) {
131
+ addHit(moduleSpecifier.text, moduleSpecifier.getStart(sourceFile));
132
+ }
133
+ }
134
+
135
+ if (ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.ImportKeyword) {
136
+ const arg = node.arguments.at(0);
137
+ if (arg && ts.isStringLiteral(arg)) {
138
+ addHit(arg.text, arg.getStart(sourceFile));
139
+ }
140
+ }
141
+
142
+ ts.forEachChild(node, visit);
143
+ };
144
+
145
+ visit(sourceFile);
146
+ return hits.filter((h) => h.specifier.trim() !== '');
147
+ };
148
+
149
+ const relFromRoot = (absPath: string): string => path.relative(repoRoot, absPath).replaceAll('\\\\', '/');
150
+
151
+ const startsWithAny = (value: string, prefixes: readonly string[]): boolean => {
152
+ for (const p of prefixes) {
153
+ if (value.startsWith(p)) return true;
154
+ }
155
+ return false;
156
+ };
157
+
158
+ const findViolations = async (
159
+ files: string[],
160
+ disallowedPrefixes: readonly string[],
161
+ reasonPrefix: string
162
+ ): Promise<Violation[]> => {
163
+ const perFile = await Promise.all(
164
+ files.map(async (file): Promise<Violation[]> => {
165
+ const contents = await fs.readFile(file, 'utf-8');
166
+ const imports = extractImportSpecifiers(contents, file);
167
+
168
+ return imports
169
+ .filter((hit) => startsWithAny(hit.specifier, disallowedPrefixes))
170
+ .map((hit) => ({
171
+ file: relFromRoot(file),
172
+ reason: reasonPrefix + ' ' + hit.specifier,
173
+ hit,
174
+ }));
175
+ })
176
+ );
177
+
178
+ return perFile.flat();
179
+ };
180
+
181
+ describe('Architecture: import boundaries', () => {
182
+ it('prevents src/ from importing app/routes', async () => {
183
+ const srcDir = path.join(repoRoot, 'src');
184
+ const files = await walkTsFiles(srcDir);
185
+
186
+ const violations = await findViolations(files, ['@app/', '@routes/'], 'src/ must not import');
187
+
188
+ expect(violations).toEqual([]);
189
+ });
190
+
191
+ it('prevents app/ from importing routes', async () => {
192
+ const appDir = path.join(repoRoot, 'app');
193
+ const files = await walkTsFiles(appDir);
194
+
195
+ const violations = await findViolations(files, ['@routes/'], 'app/ must not import');
196
+
197
+ expect(violations).toEqual([]);
198
+ });
199
+ });
200
+ `;
201
+ const ROUTE_MIDDLEWARE_REGISTRY_ARCH_TEST_CONTENT = `import { middlewareConfigObj } from '../../config/middleware';
202
+ import { registerRoutes } from '../../../routes/api';
203
+ import { RouteRegistry, Router } from '@zintrust/core';
204
+ import { beforeEach, describe, expect, it } from 'vitest';
205
+
206
+ describe('Architecture: route middleware registry', () => {
207
+ beforeEach(() => {
208
+ RouteRegistry.clear();
209
+ });
210
+
211
+ it('ensures all route middleware names exist in middlewareConfigObj', () => {
212
+ const router = Router.createRouter();
213
+ registerRoutes(router);
214
+
215
+ const allowed = new Set(Object.keys(middlewareConfigObj));
216
+ const unknown: Array<{ method: string; path: string; middleware: string }> = [];
217
+
218
+ for (const route of RouteRegistry.list()) {
219
+ for (const name of route.middleware ?? []) {
220
+ if (!allowed.has(name)) {
221
+ unknown.push({ method: route.method, path: route.path, middleware: name });
222
+ }
223
+ }
224
+ }
225
+
226
+ expect(unknown).toEqual([]);
227
+ });
228
+ });
229
+ `;
230
+ const writeArchTests = (projectRoot) => {
231
+ const files = [
232
+ {
233
+ rel: 'tests/unit/architecture/ImportBoundaries.arch.test.ts',
234
+ content: IMPORT_BOUNDARIES_ARCH_TEST_CONTENT,
235
+ },
236
+ {
237
+ rel: 'tests/unit/architecture/RouteMiddlewareRegistry.arch.test.ts',
238
+ content: ROUTE_MIDDLEWARE_REGISTRY_ARCH_TEST_CONTENT,
239
+ },
240
+ ];
241
+ const created = [];
242
+ for (const file of files) {
243
+ const abs = path.join(projectRoot, file.rel);
244
+ const wrote = FileGenerator.writeFile(abs, file.content, {
245
+ overwrite: false,
246
+ createDirs: true,
247
+ });
248
+ if (wrote)
249
+ created.push(abs);
250
+ }
251
+ return created;
252
+ };
253
+ const installGovernanceDeps = async (projectRoot, pm, packages) => {
254
+ if (packages.length === 0)
255
+ return;
256
+ let command = pm;
257
+ let args;
258
+ switch (pm) {
259
+ case 'pnpm':
260
+ args = ['add', '-D', ...packages];
261
+ break;
262
+ case 'yarn':
263
+ args = ['add', '--dev', ...packages];
264
+ break;
265
+ case 'npm':
266
+ default:
267
+ command = 'npm';
268
+ args = ['install', '--save-dev', ...packages];
269
+ break;
270
+ }
271
+ const exit = await SpawnUtil.spawnAndWait({ command, args, cwd: projectRoot });
272
+ if (exit !== 0) {
273
+ throw ErrorFactory.createCliError(`Failed to install governance dependencies (exit ${exit})`);
274
+ }
275
+ };
276
+ export const GovernanceScaffolder = Object.freeze({
277
+ async scaffold(projectRoot, options = {}) {
278
+ try {
279
+ const pkg = readPackageJsonOrThrow(projectRoot);
280
+ const scripts = typeof pkg.scripts === 'object' && pkg.scripts !== null ? pkg.scripts : {};
281
+ pkg.scripts = scripts;
282
+ upsertScript(scripts, 'lint', 'eslint .');
283
+ upsertScript(scripts, 'test:coverage', 'vitest run --coverage');
284
+ upsertScript(scripts, 'sonarqube', 'node -e "console.log(\'SonarQube not configured for this project; skipping.\');"');
285
+ const devDeps = typeof pkg.devDependencies === 'object' && pkg.devDependencies !== null
286
+ ? pkg.devDependencies
287
+ : {};
288
+ pkg.devDependencies = devDeps;
289
+ const govVersion = inferGovernanceVersion(pkg);
290
+ ensureDevDependency(devDeps, 'eslint', '^9.0.0');
291
+ ensureDevDependency(devDeps, '@zintrust/governance', govVersion);
292
+ writePackageJson(projectRoot, pkg);
293
+ const filesCreated = [];
294
+ if (options.writeEslintConfig !== false) {
295
+ filesCreated.push(...writeEslintConfig(projectRoot));
296
+ }
297
+ if (options.writeArchTests !== false) {
298
+ filesCreated.push(...writeArchTests(projectRoot));
299
+ }
300
+ if (options.install === true) {
301
+ const pm = typeof options.packageManager === 'string' && options.packageManager.trim() !== ''
302
+ ? options.packageManager.trim()
303
+ : resolvePackageManager();
304
+ Logger.info(`Installing governance devDependencies using ${pm}...`);
305
+ await installGovernanceDeps(projectRoot, pm, [
306
+ 'eslint',
307
+ `@zintrust/governance@${govVersion}`,
308
+ ]);
309
+ }
310
+ return {
311
+ success: true,
312
+ filesCreated,
313
+ message: 'Governance installed successfully',
314
+ };
315
+ }
316
+ catch (error) {
317
+ Logger.error('Governance scaffolding failed', error);
318
+ const msg = error instanceof Error ? error.message : String(error);
319
+ return {
320
+ success: false,
321
+ filesCreated: [],
322
+ message: msg,
323
+ };
324
+ }
325
+ },
326
+ });
327
+ export default GovernanceScaffolder;
@@ -7,6 +7,16 @@ export interface MigrationOptions {
7
7
  name: string;
8
8
  migrationsPath: string;
9
9
  type?: MigrationType;
10
+ /**
11
+ * Optional explicit table name to use in generated content.
12
+ * When provided, the generator will use it instead of inferring from the migration name.
13
+ */
14
+ table?: string;
15
+ /**
16
+ * Optional column name hint for alter migrations.
17
+ * When provided, the generator will use it in the example placeholder.
18
+ */
19
+ column?: string;
10
20
  }
11
21
  export interface MigrationScaffoldResult {
12
22
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"MigrationGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/MigrationGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAmB/F;AAED;;GAEG;AAEH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAwD7F;AAqLD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;EAG7B,CAAC"}
1
+ {"version":3,"file":"MigrationGenerator.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/MigrationGenerator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAmB/F;AAED;;GAEG;AAEH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAwE7F;AAoRD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;EAG7B,CAAC"}