@zintrust/core 0.1.4 → 0.1.6

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 (321) hide show
  1. package/bin/z.d.ts +2 -2
  2. package/bin/z.d.ts.map +1 -1
  3. package/bin/z.js +3 -2
  4. package/bin/zin.d.ts +2 -2
  5. package/bin/zin.d.ts.map +1 -1
  6. package/bin/zin.js +3 -2
  7. package/bin/zintrust-main.d.ts +9 -0
  8. package/bin/zintrust-main.d.ts.map +1 -0
  9. package/bin/zintrust-main.js +101 -0
  10. package/bin/zintrust-microservices.js +7 -7
  11. package/bin/zintrust.d.ts +5 -4
  12. package/bin/zintrust.d.ts.map +1 -1
  13. package/bin/zintrust.js +7 -87
  14. package/bin/zt.d.ts +2 -2
  15. package/bin/zt.d.ts.map +1 -1
  16. package/bin/zt.js +3 -2
  17. package/package.json +13 -3
  18. package/public/index.html +4 -0
  19. package/src/boot/Application.js +13 -13
  20. package/src/boot/Server.d.ts.map +1 -1
  21. package/src/boot/Server.js +47 -39
  22. package/src/boot/bootstrap.js +71 -36
  23. package/src/builder/BundleOptimizer.js +3 -3
  24. package/src/cache/Cache.js +6 -6
  25. package/src/cache/drivers/KVDriver.js +2 -2
  26. package/src/cache/drivers/MongoDriver.js +3 -3
  27. package/src/cache/drivers/RedisDriver.js +3 -3
  28. package/src/cli/BaseCommand.d.ts +2 -0
  29. package/src/cli/BaseCommand.d.ts.map +1 -1
  30. package/src/cli/BaseCommand.js +12 -2
  31. package/src/cli/CLI.js +23 -23
  32. package/src/cli/ErrorHandler.d.ts.map +1 -1
  33. package/src/cli/ErrorHandler.js +14 -8
  34. package/src/cli/commands/AddCommand.js +15 -15
  35. package/src/cli/commands/ConfigCommand.js +6 -6
  36. package/src/cli/commands/D1MigrateCommand.js +6 -6
  37. package/src/cli/commands/DebugCommand.js +3 -3
  38. package/src/cli/commands/FixCommand.js +5 -5
  39. package/src/cli/commands/KeyGenerateCommand.js +5 -5
  40. package/src/cli/commands/LogsCleanupCommand.js +2 -2
  41. package/src/cli/commands/LogsCommand.js +6 -6
  42. package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -1
  43. package/src/cli/commands/MakeMailTemplateCommand.js +8 -7
  44. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -1
  45. package/src/cli/commands/MakeNotificationTemplateCommand.js +8 -7
  46. package/src/cli/commands/MigrateCommand.js +2 -2
  47. package/src/cli/commands/NewCommand.js +11 -11
  48. package/src/cli/commands/PluginCommand.js +3 -3
  49. package/src/cli/commands/PrepareCommand.js +6 -6
  50. package/src/cli/commands/QACommand.js +8 -8
  51. package/src/cli/commands/SecretsCommand.js +3 -3
  52. package/src/cli/commands/SimulateCommand.js +6 -6
  53. package/src/cli/commands/StartCommand.js +7 -7
  54. package/src/cli/commands/TemplatesCommand.js +5 -5
  55. package/src/cli/commands/index.js +12 -12
  56. package/src/cli/config/ConfigManager.js +5 -5
  57. package/src/cli/config/ConfigValidator.js +1 -1
  58. package/src/cli/config/index.js +3 -3
  59. package/src/cli/debug/Dashboard.js +3 -3
  60. package/src/cli/index.js +10 -10
  61. package/src/cli/logger/Logger.js +2 -2
  62. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  63. package/src/cli/scaffolding/ControllerGenerator.js +48 -64
  64. package/src/cli/scaffolding/FactoryGenerator.js +6 -6
  65. package/src/cli/scaffolding/FeatureScaffolder.js +8 -8
  66. package/src/cli/scaffolding/FileGenerator.js +4 -4
  67. package/src/cli/scaffolding/MigrationGenerator.js +4 -4
  68. package/src/cli/scaffolding/ModelGenerator.js +5 -5
  69. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  70. package/src/cli/scaffolding/ProjectScaffolder.js +78 -15
  71. package/src/cli/scaffolding/RequestFactoryGenerator.js +5 -5
  72. package/src/cli/scaffolding/ResponseFactoryGenerator.js +5 -5
  73. package/src/cli/scaffolding/RouteGenerator.js +4 -4
  74. package/src/cli/scaffolding/SeederGenerator.js +7 -7
  75. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +5 -5
  76. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +4 -4
  77. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  78. package/src/cli/scaffolding/ServiceScaffolder.js +24 -23
  79. package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -1
  80. package/src/cli/scaffolding/TemplateEngine.js +0 -2
  81. package/src/cli/scaffolding/TemplateGenerator.js +4 -4
  82. package/src/cli/scaffolding/WorkflowGenerator.js +4 -4
  83. package/src/cli/scaffolding/index.js +16 -16
  84. package/src/cli/utils/DistPackager.js +4 -4
  85. package/src/cli/utils/EnvFileLoader.js +2 -2
  86. package/src/cli/utils/spawn.d.ts.map +1 -1
  87. package/src/cli/utils/spawn.js +18 -7
  88. package/src/common/AwsSigV4.js +1 -1
  89. package/src/common/index.js +5 -5
  90. package/src/common/uuid.js +2 -2
  91. package/src/config/FileLogWriter.js +4 -4
  92. package/src/config/SecretsManager.d.ts +1 -42
  93. package/src/config/SecretsManager.d.ts.map +1 -1
  94. package/src/config/SecretsManager.js +2 -2
  95. package/src/config/StartupConfigValidator.d.ts +1 -9
  96. package/src/config/StartupConfigValidator.d.ts.map +1 -1
  97. package/src/config/StartupConfigValidator.js +115 -22
  98. package/src/config/app.d.ts +1 -1
  99. package/src/config/app.d.ts.map +1 -1
  100. package/src/config/app.js +1 -1
  101. package/src/config/broadcast.d.ts +1 -26
  102. package/src/config/broadcast.d.ts.map +1 -1
  103. package/src/config/broadcast.js +1 -1
  104. package/src/config/cache.d.ts +1 -22
  105. package/src/config/cache.d.ts.map +1 -1
  106. package/src/config/cache.js +1 -1
  107. package/src/config/cloudflare.d.ts +1 -13
  108. package/src/config/cloudflare.d.ts.map +1 -1
  109. package/src/config/database.d.ts +2 -47
  110. package/src/config/database.d.ts.map +1 -1
  111. package/src/config/database.js +1 -1
  112. package/src/config/env.d.ts.map +1 -1
  113. package/src/config/env.js +6 -2
  114. package/src/config/features.js +2 -2
  115. package/src/config/index.d.ts +10 -287
  116. package/src/config/index.d.ts.map +1 -1
  117. package/src/config/index.js +16 -16
  118. package/src/config/logger.d.ts.map +1 -1
  119. package/src/config/logger.js +10 -8
  120. package/src/config/logging/HttpLogger.js +4 -4
  121. package/src/config/logging/KvLogger.js +2 -2
  122. package/src/config/logging/SlackLogger.js +3 -3
  123. package/src/config/mail.d.ts +1 -27
  124. package/src/config/mail.d.ts.map +1 -1
  125. package/src/config/mail.js +1 -1
  126. package/src/config/microservices.js +1 -1
  127. package/src/config/middleware.d.ts +2 -6
  128. package/src/config/middleware.d.ts.map +1 -1
  129. package/src/config/middleware.js +5 -5
  130. package/src/config/notification.d.ts +0 -21
  131. package/src/config/notification.d.ts.map +1 -1
  132. package/src/config/notification.js +1 -1
  133. package/src/config/queue.d.ts +1 -39
  134. package/src/config/queue.d.ts.map +1 -1
  135. package/src/config/queue.js +1 -1
  136. package/src/config/security.d.ts +12 -0
  137. package/src/config/security.d.ts.map +1 -1
  138. package/src/config/security.js +17 -5
  139. package/src/config/startup.d.ts +2 -0
  140. package/src/config/startup.d.ts.map +1 -1
  141. package/src/config/startup.js +2 -1
  142. package/src/config/storage.d.ts +1 -48
  143. package/src/config/storage.d.ts.map +1 -1
  144. package/src/config/storage.js +1 -1
  145. package/src/config/type.d.ts +335 -0
  146. package/src/config/type.d.ts.map +1 -0
  147. package/src/config/type.js +1 -0
  148. package/src/container/ServiceContainer.js +1 -1
  149. package/src/exceptions/ZintrustError.js +1 -1
  150. package/src/features/Queue.js +2 -2
  151. package/src/functions/cloudflare.js +4 -4
  152. package/src/functions/deno.js +4 -4
  153. package/src/functions/lambda.js +4 -4
  154. package/src/health/RuntimeHealthProbes.js +3 -3
  155. package/src/health/StartupHealthChecks.js +9 -9
  156. package/src/http/Kernel.js +10 -10
  157. package/src/http/RequestContext.js +2 -2
  158. package/src/http/Response.js +1 -1
  159. package/src/index.d.ts +36 -1
  160. package/src/index.d.ts.map +1 -1
  161. package/src/index.js +69 -36
  162. package/src/microservices/MicroserviceBootstrap.js +5 -5
  163. package/src/microservices/MicroserviceGenerator.js +10 -10
  164. package/src/microservices/MicroserviceManager.js +4 -4
  165. package/src/microservices/PostgresAdapter.js +3 -3
  166. package/src/microservices/RequestTracingMiddleware.js +3 -3
  167. package/src/microservices/ServiceAuthMiddleware.js +3 -3
  168. package/src/microservices/ServiceBundler.js +3 -3
  169. package/src/microservices/ServiceHealthMonitor.js +2 -2
  170. package/src/middleware/CsrfMiddleware.js +3 -3
  171. package/src/middleware/ErrorHandlerMiddleware.js +4 -4
  172. package/src/middleware/LoggingMiddleware.js +3 -3
  173. package/src/middleware/RateLimiter.js +1 -1
  174. package/src/middleware/index.js +6 -6
  175. package/src/node-singletons/http.d.ts +2 -2
  176. package/src/node-singletons/http.d.ts.map +1 -1
  177. package/src/node-singletons/http.js +1 -1
  178. package/src/node-singletons/index.js +14 -14
  179. package/src/node-singletons/path.d.ts +1 -1
  180. package/src/node.d.ts +5 -0
  181. package/src/node.d.ts.map +1 -0
  182. package/src/node.js +4 -0
  183. package/src/orm/ConnectionManager.js +3 -3
  184. package/src/orm/Database.js +8 -8
  185. package/src/orm/Model.js +5 -5
  186. package/src/orm/QueryBuilder.js +1 -1
  187. package/src/orm/Relationships.js +1 -1
  188. package/src/orm/adapters/D1Adapter.js +5 -5
  189. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  190. package/src/orm/adapters/MySQLAdapter.js +4 -6
  191. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  192. package/src/orm/adapters/PostgreSQLAdapter.js +4 -6
  193. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  194. package/src/orm/adapters/SQLServerAdapter.js +4 -6
  195. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  196. package/src/orm/adapters/SQLiteAdapter.js +5 -7
  197. package/src/performance/CodeGenerationBenchmark.js +5 -5
  198. package/src/performance/Optimizer.js +3 -3
  199. package/src/performance/establish-baseline.js +4 -4
  200. package/src/profiling/RequestProfiler.js +4 -4
  201. package/src/runtime/PluginManager.js +8 -8
  202. package/src/runtime/RuntimeDetector.d.ts.map +1 -1
  203. package/src/runtime/RuntimeDetector.js +22 -12
  204. package/src/runtime/adapters/CloudflareAdapter.js +3 -3
  205. package/src/runtime/adapters/DenoAdapter.js +2 -2
  206. package/src/runtime/adapters/FargateAdapter.js +4 -4
  207. package/src/runtime/adapters/LambdaAdapter.js +4 -4
  208. package/src/runtime/adapters/NodeServerAdapter.js +4 -4
  209. package/src/scheduler/ScheduleRunner.js +2 -2
  210. package/src/scheduler/index.js +1 -1
  211. package/src/schedules/index.js +1 -1
  212. package/src/schedules/log-cleanup.js +2 -2
  213. package/src/scripts/GenerateEnvArtifacts.js +4 -4
  214. package/src/scripts/TemplateSync.js +8 -6
  215. package/src/security/CsrfTokenManager.js +2 -2
  216. package/src/security/Encryptor.js +3 -3
  217. package/src/security/Hash.js +2 -2
  218. package/src/security/JwtManager.js +2 -2
  219. package/src/security/StartupSecretValidation.js +4 -4
  220. package/src/security/UrlValidator.js +1 -1
  221. package/src/security/Xss.js +1 -1
  222. package/src/security/XssProtection.d.ts.map +1 -1
  223. package/src/security/XssProtection.js +8 -3
  224. package/src/templates/adapters/MySQLAdapter.ts.tpl +0 -2
  225. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +0 -3
  226. package/src/templates/adapters/SQLServerAdapter.ts.tpl +0 -2
  227. package/src/templates/adapters/SQLiteAdapter.ts.tpl +0 -2
  228. package/src/templates/project/basic/.env.tpl +8 -1
  229. package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +3 -2
  230. package/src/templates/project/basic/app/Middleware/ProfilerMiddleware.ts.tpl +3 -2
  231. package/src/templates/project/basic/app/Middleware/index.ts.tpl +8 -14
  232. package/src/templates/project/basic/app/Models/Post.ts.tpl +2 -1
  233. package/src/templates/project/basic/app/Models/User.ts.tpl +1 -1
  234. package/src/templates/project/basic/app/Toolkit/Broadcast/sendBroadcast.ts.tpl +1 -1
  235. package/src/templates/project/basic/app/Toolkit/Mail/sendWelcomeEmail.ts.tpl +1 -1
  236. package/src/templates/project/basic/app/Toolkit/Notification/sendSlackNotification.ts.tpl +1 -1
  237. package/src/templates/project/basic/app/Toolkit/Notification/sendSms.ts.tpl +1 -1
  238. package/src/templates/project/basic/config/FileLogWriter.ts.tpl +2 -4
  239. package/src/templates/project/basic/config/SecretsManager.ts.tpl +6 -39
  240. package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +154 -37
  241. package/src/templates/project/basic/config/app.ts.tpl +1 -5
  242. package/src/templates/project/basic/config/broadcast.ts.tpl +6 -36
  243. package/src/templates/project/basic/config/cache.ts.tpl +1 -42
  244. package/src/templates/project/basic/config/cloudflare.ts.tpl +1 -15
  245. package/src/templates/project/basic/config/database.ts.tpl +5 -51
  246. package/src/templates/project/basic/config/env.ts.tpl +6 -7
  247. package/src/templates/project/basic/config/features.ts.tpl +1 -1
  248. package/src/templates/project/basic/config/index.ts.tpl +1 -1
  249. package/src/templates/project/basic/config/logger.ts.tpl +3 -1
  250. package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +1 -1
  251. package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +1 -1
  252. package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +1 -1
  253. package/src/templates/project/basic/config/mail.ts.tpl +1 -57
  254. package/src/templates/project/basic/config/microservices.ts.tpl +1 -1
  255. package/src/templates/project/basic/config/middleware.ts.tpl +2 -6
  256. package/src/templates/project/basic/config/notification.ts.tpl +1 -36
  257. package/src/templates/project/basic/config/queue.ts.tpl +1 -49
  258. package/src/templates/project/basic/config/security.ts.tpl +13 -1
  259. package/src/templates/project/basic/config/startup.ts.tpl +2 -0
  260. package/src/templates/project/basic/config/storage.ts.tpl +6 -54
  261. package/src/templates/project/basic/config/type.ts.tpl +414 -0
  262. package/src/templates/project/basic/package.json.tpl +1 -0
  263. package/src/templates/project/basic/routes/api.ts.tpl +1 -1
  264. package/src/templates/project/basic/routes/broadcast.ts.tpl +1 -1
  265. package/src/templates/project/basic/routes/health.ts.tpl +1 -1
  266. package/src/templates/project/basic/routes/storage.ts.tpl +1 -1
  267. package/src/templates/project/basic/src/index.ts.tpl +49 -41
  268. package/src/templates/project/basic/template.json +1 -1
  269. package/src/templates/project/basic/tsconfig.json.tpl +3 -1
  270. package/src/toolkit/Secrets/EnvFile.js +3 -3
  271. package/src/toolkit/Secrets/Manifest.js +3 -3
  272. package/src/toolkit/Secrets/index.js +5 -5
  273. package/src/toolkit/Secrets/providers/AwsSecretsManager.js +2 -2
  274. package/src/toolkit/Secrets/providers/CloudflareKv.js +1 -1
  275. package/src/tools/broadcast/Broadcast.js +6 -6
  276. package/src/tools/broadcast/drivers/BaseDriver.js +1 -1
  277. package/src/tools/broadcast/drivers/Pusher.d.ts +1 -1
  278. package/src/tools/broadcast/drivers/Pusher.d.ts.map +1 -1
  279. package/src/tools/broadcast/drivers/Pusher.js +2 -2
  280. package/src/tools/broadcast/drivers/Redis.js +1 -1
  281. package/src/tools/broadcast/drivers/RedisHttps.js +3 -3
  282. package/src/tools/broadcast/index.js +6 -6
  283. package/src/tools/http/Http.js +4 -4
  284. package/src/tools/http/HttpResponse.js +1 -1
  285. package/src/tools/http/index.js +2 -2
  286. package/src/tools/mail/Mail.js +8 -8
  287. package/src/tools/mail/attachments.js +1 -1
  288. package/src/tools/mail/drivers/BaseDriver.js +1 -1
  289. package/src/tools/mail/drivers/Mailgun.js +1 -1
  290. package/src/tools/mail/drivers/SendGrid.js +1 -1
  291. package/src/tools/mail/drivers/Ses.js +2 -2
  292. package/src/tools/mail/drivers/Smtp.js +4 -4
  293. package/src/tools/mail/templates/markdown/index.js +3 -3
  294. package/src/tools/mail/templates/markdown/registry.js +5 -5
  295. package/src/tools/mail/templates/markdown/validator.js +1 -1
  296. package/src/tools/mail/testing.js +1 -1
  297. package/src/tools/notification/Notification.js +1 -1
  298. package/src/tools/notification/Registry.js +3 -3
  299. package/src/tools/notification/Service.js +3 -3
  300. package/src/tools/notification/config.js +1 -1
  301. package/src/tools/notification/drivers/BaseDriver.js +1 -1
  302. package/src/tools/notification/drivers/Slack.js +1 -1
  303. package/src/tools/notification/drivers/Termii.js +1 -1
  304. package/src/tools/notification/drivers/Twilio.js +1 -1
  305. package/src/tools/notification/templates/markdown/index.js +3 -3
  306. package/src/tools/notification/templates/markdown/registry.js +5 -5
  307. package/src/tools/notification/testing.js +1 -1
  308. package/src/tools/notification/testingHelpers.js +2 -2
  309. package/src/tools/queue/Queue.js +1 -1
  310. package/src/tools/queue/drivers/InMemory.js +1 -1
  311. package/src/tools/queue/drivers/Redis.js +2 -2
  312. package/src/tools/storage/LocalSignedUrl.js +2 -2
  313. package/src/tools/storage/drivers/Gcs.js +1 -1
  314. package/src/tools/storage/drivers/Local.js +5 -5
  315. package/src/tools/storage/drivers/R2.js +2 -2
  316. package/src/tools/storage/drivers/S3.js +3 -3
  317. package/src/tools/storage/index.js +6 -6
  318. package/src/tools/storage/testing.js +1 -1
  319. package/src/tools/templates/MarkdownRenderer.js +2 -2
  320. package/src/tools/templates/index.js +1 -1
  321. package/src/validation/Validator.js +3 -3
@@ -2,10 +2,10 @@
2
2
  * MigrationGenerator - Generate database migrations
3
3
  * Creates migration files for schema changes
4
4
  */
5
- import { FileGenerator } from '../scaffolding/FileGenerator';
6
- import { CommonUtils } from '../../common/index';
7
- import { Logger } from '../../config/logger';
8
- import * as path from '../../node-singletons/path';
5
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
6
+ import { CommonUtils } from '../../common/index.js';
7
+ import { Logger } from '../../config/logger.js';
8
+ import * as path from '../../node-singletons/path.js';
9
9
  /**
10
10
  * Validate migration options
11
11
  */
@@ -2,10 +2,10 @@
2
2
  * ModelGenerator - Generate ORM model files
3
3
  * Creates type-safe model modules with relationships and validation
4
4
  */
5
- import { FileGenerator } from '../scaffolding/FileGenerator';
6
- import { CommonUtils } from '../../common/index';
7
- import { Logger } from '../../config/logger';
8
- import * as path from '../../node-singletons/path';
5
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
6
+ import { CommonUtils } from '../../common/index.js';
7
+ import { Logger } from '../../config/logger.js';
8
+ import * as path from '../../node-singletons/path.js';
9
9
  /**
10
10
  * Validate model options
11
11
  */
@@ -84,7 +84,7 @@ function buildModelCode(options) {
84
84
  * Auto-generated model file
85
85
  */
86
86
 
87
- import { Model, IModel } from '../../orm/Model';
87
+ import { type IModel, Model } from '@zintrust/core';
88
88
 
89
89
  export const ${options.name} = Object.freeze(
90
90
  Model.define({
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ProjectScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtD,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IACpE,cAAc,IAAI,MAAM,CAAC;IACzB,sBAAsB,IAAI,OAAO,CAAC;IAClC,iBAAiB,IAAI,MAAM,CAAC;IAC5B,WAAW,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC;IACtD,gBAAgB,IAAI,OAAO,CAAC;IAC5B,aAAa,IAAI,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC3E;AAqWD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAsBrE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAsBA;AAwID;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,GAAE,MAAsB,GAAG,kBAAkB,CAsB/F;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;EAM5B,CAAC"}
1
+ {"version":3,"file":"ProjectScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ProjectScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtD,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IACpE,cAAc,IAAI,MAAM,CAAC;IACzB,sBAAsB,IAAI,OAAO,CAAC;IAClC,iBAAiB,IAAI,MAAM,CAAC;IAC5B,WAAW,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC;IACtD,gBAAgB,IAAI,OAAO,CAAC;IAC5B,aAAa,IAAI,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CAC3E;AAwaD,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAsBrE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAsBA;AA0ID;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,GAAE,MAAsB,GAAG,kBAAkB,CAsB/F;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;EAM5B,CAAC"}
@@ -2,10 +2,21 @@
2
2
  * Project Scaffolder - New project generation
3
3
  * Handles directory structure and boilerplate file creation
4
4
  */
5
- import { esmDirname } from '../../common/index';
6
- import { Logger } from '../../config/logger';
7
- import fs from '../../node-singletons/fs';
8
- import * as path from '../../node-singletons/path';
5
+ import { Logger } from '../../config/logger.js';
6
+ import { randomBytes } from '../../node-singletons/crypto.js';
7
+ import fs from '../../node-singletons/fs.js';
8
+ import * as path from '../../node-singletons/path.js';
9
+ import { fileURLToPath } from '../../node-singletons/url.js';
10
+ const loadCoreVersion = () => {
11
+ try {
12
+ const packageUrl = new URL('../../../package.json', import.meta.url);
13
+ const packageJson = JSON.parse(fs.readFileSync(packageUrl, 'utf-8'));
14
+ return typeof packageJson.version === 'string' ? packageJson.version : '0.0.0';
15
+ }
16
+ catch {
17
+ return '0.0.0';
18
+ }
19
+ };
9
20
  const createDirectories = (projectPath, directories) => {
10
21
  let count = 0;
11
22
  if (!fs.existsSync(projectPath)) {
@@ -99,13 +110,19 @@ const createEnvFile = (projectPath, variables) => {
99
110
  const name = typeof variables['projectName'] === 'string' ? variables['projectName'] : 'zintrust-app';
100
111
  const port = Number(variables['port'] ?? 3000);
101
112
  const database = typeof variables['database'] === 'string' ? variables['database'] : 'sqlite';
113
+ // Generate a secure APP_KEY (32 bytes = 256-bit, base64 encoded)
114
+ const appKeyBytes = randomBytes(32);
115
+ const appKey = appKeyBytes.toString('base64');
102
116
  const baseLines = [
103
117
  'NODE_ENV=development',
118
+ 'STARTUP_REQUIRE_ENV=true',
104
119
  `APP_NAME=${name}`,
120
+ 'HOST=localhost',
121
+ `PORT=${port}`,
105
122
  `APP_PORT=${port}`,
106
123
  'APP_DEBUG=true',
107
- // Placeholders only (no generated secrets during scaffold)
108
- 'APP_KEY=',
124
+ // Auto-generated secure key for storage signing and encryption
125
+ `APP_KEY=${appKey}`,
109
126
  `DB_CONNECTION=${database}`,
110
127
  ];
111
128
  const dbLines = (() => {
@@ -119,7 +136,8 @@ const createEnvFile = (projectPath, variables) => {
119
136
  ];
120
137
  }
121
138
  if (database === 'sqlite') {
122
- return ['DB_DATABASE=./database.sqlite'];
139
+ // Provide both DB_DATABASE (used by the framework) and DB_PATH (common alias)
140
+ return ['DB_DATABASE=./database.sqlite', 'DB_PATH=./database.sqlite'];
123
141
  }
124
142
  return [];
125
143
  })();
@@ -127,7 +145,8 @@ const createEnvFile = (projectPath, variables) => {
127
145
  '',
128
146
  '# Logging',
129
147
  'LOG_LEVEL=debug',
130
- 'LOG_CHANNEL=file',
148
+ 'LOG_CHANNEL=console',
149
+ 'LOG_FORMAT=json',
131
150
  '',
132
151
  '# Auth / Security',
133
152
  'JWT_SECRET=',
@@ -156,9 +175,9 @@ const createEnvFile = (projectPath, variables) => {
156
175
  }
157
176
  };
158
177
  const getProjectTemplatesRoot = () => {
159
- const thisDir = esmDirname(import.meta.url);
160
178
  // src/cli/scaffolding/ -> src/templates/project/
161
- return path.resolve(thisDir, '..', '..', 'templates', 'project');
179
+ const templatesUrl = new URL('../../templates/project', import.meta.url);
180
+ return fileURLToPath(templatesUrl);
162
181
  };
163
182
  const listTemplateFilesRecursive = (dirPath) => {
164
183
  const entries = fs.readdirSync(dirPath, { withFileTypes: true });
@@ -204,12 +223,54 @@ const resolveTemplateMetadata = (templateName, meta, fallback) => {
204
223
  const loadTemplateFiles = (templateDir) => {
205
224
  const files = {};
206
225
  const allFiles = listTemplateFilesRecursive(templateDir);
226
+ const allowedConfigFiles = new Set([
227
+ 'config/broadcast.ts',
228
+ 'config/cache.ts',
229
+ 'config/database.ts',
230
+ 'config/logging/HttpLogger.ts',
231
+ 'config/mail.ts',
232
+ 'config/notification.ts',
233
+ 'config/queue.ts',
234
+ 'config/storage.ts',
235
+ ]);
236
+ const isENOENT = (error) => error !== null &&
237
+ typeof error === 'object' &&
238
+ 'code' in error &&
239
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
240
+ error.code === 'ENOENT';
241
+ const normalizeRelPath = (relPath) => relPath.replaceAll('\\', '/');
242
+ const getOutputRelPath = (relPath) => relPath.endsWith('.tpl') ? relPath.slice(0, -'.tpl'.length) : relPath;
243
+ const shouldIncludeTemplateFile = (relPath) => {
244
+ if (relPath === 'template.json')
245
+ return false;
246
+ const normalized = normalizeRelPath(relPath);
247
+ if (!normalized.startsWith('config/'))
248
+ return true;
249
+ // Starter apps should only ship app-level config modules.
250
+ // Core/framework config internals (e.g. config/logging/*) remain core-owned.
251
+ const outputRel = normalizeRelPath(getOutputRelPath(relPath));
252
+ return allowedConfigFiles.has(outputRel);
253
+ };
254
+ const readUtf8FileOrUndefined = (absPath) => {
255
+ try {
256
+ return fs.readFileSync(absPath, 'utf8');
257
+ }
258
+ catch (error) {
259
+ // Some tests temporarily create/delete template files in parallel; if a file
260
+ // disappears between directory listing and read, skip it.
261
+ if (isENOENT(error))
262
+ return undefined;
263
+ throw error;
264
+ }
265
+ };
207
266
  for (const absPath of allFiles) {
208
267
  const rel = path.relative(templateDir, absPath);
209
- if (rel === 'template.json')
268
+ if (!shouldIncludeTemplateFile(rel))
269
+ continue;
270
+ const content = readUtf8FileOrUndefined(absPath);
271
+ if (content === undefined)
210
272
  continue;
211
- const content = fs.readFileSync(absPath, 'utf8');
212
- const outputRel = rel.endsWith('.tpl') ? rel.slice(0, -'.tpl'.length) : rel;
273
+ const outputRel = getOutputRelPath(rel);
213
274
  files[outputRel] = content;
214
275
  }
215
276
  return files;
@@ -233,10 +294,10 @@ const BASIC_TEMPLATE = {
233
294
  name: 'basic',
234
295
  description: 'Basic Zintrust project structure',
235
296
  directories: [
297
+ 'config',
236
298
  'app/Controllers',
237
299
  'app/Middleware',
238
300
  'app/Models',
239
- 'config',
240
301
  'database/migrations',
241
302
  'database/seeders',
242
303
  'logs',
@@ -289,7 +350,7 @@ const FULLSTACK_TEMPLATE = {
289
350
  'app/Controllers',
290
351
  'app/Middleware',
291
352
  'app/Models',
292
- 'config',
353
+ // Starter projects should not include framework config internals.
293
354
  'database/migrations',
294
355
  'database/seeders',
295
356
  'logs',
@@ -366,6 +427,7 @@ const prepareContext = (state, options) => {
366
427
  database: options.database ?? 'sqlite',
367
428
  template: state.templateName,
368
429
  migrationTimestamp,
430
+ coreVersion: loadCoreVersion(),
369
431
  };
370
432
  };
371
433
  const createDirectoriesForState = (state) => {
@@ -384,6 +446,7 @@ const createFilesForState = (state) => {
384
446
  files['.gitignore'] = `node_modules/
385
447
  dist/
386
448
  .env
449
+ .env.*
387
450
  .env.local
388
451
  .DS_Store
389
452
  coverage/
@@ -2,11 +2,11 @@
2
2
  * Request Factory Generator - Phase 6.3
3
3
  * Generates request/input DTO factories with built-in validation
4
4
  */
5
- import { FileGenerator } from '../scaffolding/FileGenerator';
6
- import { Logger } from '../../config/logger';
7
- import { ErrorFactory } from '../../exceptions/ZintrustError';
8
- import { fsPromises as fs } from '../../node-singletons/fs';
9
- import * as path from '../../node-singletons/path';
5
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
6
+ import { Logger } from '../../config/logger.js';
7
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
8
+ import { fsPromises as fs } from '../../node-singletons/fs.js';
9
+ import * as path from '../../node-singletons/path.js';
10
10
  /**
11
11
  * Validate request factory options
12
12
  */
@@ -2,11 +2,11 @@
2
2
  * Response Factory Generator - Phase 7
3
3
  * Generates response/output DTO factories with built-in validation
4
4
  */
5
- import { FileGenerator } from '../scaffolding/FileGenerator';
6
- import { Logger } from '../../config/logger';
7
- import { ErrorFactory } from '../../exceptions/ZintrustError';
8
- import { fsPromises as fs } from '../../node-singletons/fs';
9
- import * as path from '../../node-singletons/path';
5
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
6
+ import { Logger } from '../../config/logger.js';
7
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
8
+ import { fsPromises as fs } from '../../node-singletons/fs.js';
9
+ import * as path from '../../node-singletons/path.js';
10
10
  /**
11
11
  * Validate response factory options
12
12
  */
@@ -2,9 +2,9 @@
2
2
  * RouteGenerator - Generate route files
3
3
  * Creates route definitions with middleware and parameters
4
4
  */
5
- import { FileGenerator } from '../scaffolding/FileGenerator';
6
- import { Logger } from '../../config/logger';
7
- import * as path from '../../node-singletons/path';
5
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
6
+ import { Logger } from '../../config/logger.js';
7
+ import * as path from '../../node-singletons/path.js';
8
8
  /**
9
9
  * Validate route options
10
10
  */
@@ -93,7 +93,7 @@ ${routeRegistration}
93
93
  * Build import statements
94
94
  */
95
95
  function buildImports(options) {
96
- const imports = ['import { Router } from "../../routing/Router";'];
96
+ const imports = ['import { Router } from "../../routing/Router.js";'];
97
97
  // Collect unique controllers
98
98
  const controllers = new Set();
99
99
  for (const route of options.routes) {
@@ -3,12 +3,12 @@
3
3
  * Generates database seeders for populating development/staging databases
4
4
  * Uses factory generators for consistent data generation
5
5
  */
6
- import { FileGenerator } from '../scaffolding/FileGenerator';
7
- import { CommonUtils } from '../../common/index';
8
- import { Logger } from '../../config/logger';
9
- import { ErrorFactory } from '../../exceptions/ZintrustError';
10
- import { fsPromises as fs } from '../../node-singletons/fs';
11
- import * as path from '../../node-singletons/path';
6
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
7
+ import { CommonUtils } from '../../common/index.js';
8
+ import { Logger } from '../../config/logger.js';
9
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
10
+ import { fsPromises as fs } from '../../node-singletons/fs.js';
11
+ import * as path from '../../node-singletons/path.js';
12
12
  /**
13
13
  * Seeder Generator - Creates database seeders using factory classes
14
14
  * Enables rapid database population for development and staging
@@ -213,7 +213,7 @@ function buildSeederResetMethod(options) {
213
213
  */
214
214
  function buildImports(options) {
215
215
  const factoryName = getFactoryName(options);
216
- return `import { Logger } from '../../config/logger';
216
+ return `import { Logger } from '../../config/logger.js';
217
217
  import { ${factoryName} } from '@database/factories/${factoryName}';
218
218
  import { ${options.modelName} } from '@app/Models/${options.modelName}';`;
219
219
  }
@@ -2,10 +2,10 @@
2
2
  * Service Integration Test Generator
3
3
  * Generates integration tests for service-to-service communication
4
4
  */
5
- import { FileGenerator } from '../scaffolding/FileGenerator';
6
- import { CommonUtils } from '../../common/index';
7
- import { Logger } from '../../config/logger';
8
- import * as path from '../../node-singletons/path';
5
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
6
+ import { CommonUtils } from '../../common/index.js';
7
+ import { Logger } from '../../config/logger.js';
8
+ import * as path from '../../node-singletons/path.js';
9
9
  /**
10
10
  * Validate integration test options
11
11
  */
@@ -71,7 +71,7 @@ function buildTestCode(options) {
71
71
  */
72
72
 
73
73
  import { describe, it, expect, beforeAll, afterAll, vi } from 'vitest';
74
- import { ErrorFactory } from '../../exceptions/ZintrustError';
74
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
75
75
 
76
76
  interface ServiceConfig {
77
77
  baseUrl: string;
@@ -2,10 +2,10 @@
2
2
  * ServiceRequestFactoryGenerator - Generate inter-service request factories
3
3
  * Creates type-safe factories for testing service-to-service API calls
4
4
  */
5
- import { FileGenerator } from '../scaffolding/FileGenerator';
6
- import { CommonUtils } from '../../common/index';
7
- import { Logger } from '../../config/logger';
8
- import * as path from '../../node-singletons/path';
5
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
6
+ import { CommonUtils } from '../../common/index.js';
7
+ import { Logger } from '../../config/logger.js';
8
+ import * as path from '../../node-singletons/path.js';
9
9
  /**
10
10
  * Validate options
11
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ServiceScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAuB7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAGnF;AAED;;GAEG;AAEH,wBAAgB,QAAQ,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,qBAAqB,CAAC,CA+ChC;AA4SD,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAC"}
1
+ {"version":3,"file":"ServiceScaffolder.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/ServiceScaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAuB7F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAGnF;AAED;;GAEG;AAEH,wBAAgB,QAAQ,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,qBAAqB,CAAC,CA+ChC;AA6SD,eAAO,MAAM,iBAAiB;;;;EAI5B,CAAC"}
@@ -2,9 +2,9 @@
2
2
  * ServiceScaffolder - Generate microservices within a project
3
3
  * Creates service structure with controllers, models, routes, and config
4
4
  */
5
- import { FileGenerator } from '../scaffolding/FileGenerator';
6
- import { Logger } from '../../config/logger';
7
- import * as path from '../../node-singletons/path';
5
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
6
+ import { Logger } from '../../config/logger.js';
7
+ import * as path from '../../node-singletons/path.js';
8
8
  /**
9
9
  * ServiceScaffolder generates microservices with all necessary files
10
10
  */
@@ -97,6 +97,7 @@ function createServiceDirectories(servicePath) {
97
97
  'src/middleware',
98
98
  'src/migrations',
99
99
  'src/factories',
100
+ 'routes',
100
101
  ];
101
102
  for (const dir of dirs) {
102
103
  FileGenerator.createDirectory(path.join(servicePath, dir));
@@ -110,7 +111,7 @@ function createServiceFiles(servicePath, options) {
110
111
  const files = [
111
112
  { path: 'service.config.json', content: generateServiceConfig(options) },
112
113
  { path: 'src/index.ts', content: generateServiceIndex(options) },
113
- { path: 'src/routes.ts', content: generateServiceRoutes(options) },
114
+ { path: 'routes/api.ts', content: generateServiceRoutes(options) },
114
115
  { path: 'src/controllers/ExampleController.ts', content: generateExampleController(options) },
115
116
  { path: 'src/models/Example.ts', content: generateExampleModel(options) },
116
117
  { path: '.env', content: generateServiceEnv(options) },
@@ -161,24 +162,26 @@ function generateServiceIndex(options) {
161
162
  * Auth: ${options.auth ?? 'api-key'}
162
163
  */
163
164
 
164
- import { Application } from '../../boot/Application';
165
- import { Server } from '../../boot/Server';
166
- import { Logger } from '../../config/logger';
167
- import { Env } from '../../config/env';
168
- import { esmDirname } from '../../common/index';
169
- import * as path from '../../node-singletons/path';
165
+ import { Application, Server } from '@zintrust/core';
166
+ import { Logger } from '../../config/logger.js';
167
+ import { Env } from '../../config/env.js';
168
+ import { esmDirname } from '../../common/index.js';
169
+ import * as path from '../../node-singletons/path.js';
170
170
 
171
171
  const __dirname = esmDirname(import.meta.url);
172
- const app = new Application(path.join(__dirname, '..'));
173
172
  const port = Env.getInt('${options.name?.toUpperCase()}_PORT', ${options.port ?? 3001});
174
173
 
175
- // Start server
176
- const server = new Server(app, port);
177
- server.start().then(() => {
174
+ async function start(): Promise<void> {
175
+ const app = Application.create(path.join(__dirname, '..'));
176
+ await app.boot();
177
+
178
+ const server = Server.create(app, port);
179
+ await server.listen();
180
+
178
181
  Logger.info(\`${options.name} service running on port \${port}\`);
179
- });
182
+ }
180
183
 
181
- export default app;
184
+ await start();
182
185
  `;
183
186
  }
184
187
  /**
@@ -189,11 +192,11 @@ function generateServiceRoutes(options) {
189
192
  * ${options.name} Service Routes
190
193
  */
191
194
 
192
- import { Router } from '../../routing/Router';
195
+ import { Router, type IRouter } from '@zintrust/core';
193
196
 
194
- export function registerRoutes(router: Router): void {
197
+ export function registerRoutes(router: IRouter): void {
195
198
  // Example route
196
- router.get('/', (req, res) => {
199
+ Router.get(router, '/', (_req, res) => {
197
200
  res.json({ message: '${options.name} service' });
198
201
  });
199
202
  }
@@ -208,9 +211,7 @@ function generateExampleController(options) {
208
211
  * Example Controller for ${options.name} Service
209
212
  */
210
213
 
211
- import { IRequest } from '../../http/Request';
212
- import { IResponse } from '../../http/Response';
213
- import { Controller } from '../../http/Controller';
214
+ import { type IRequest, type IResponse, Controller } from '@zintrust/core';
214
215
 
215
216
  export const ${className} = {
216
217
  ...Controller,
@@ -263,7 +264,7 @@ function generateExampleModel(options) {
263
264
  * Example Model for ${options.name} Service
264
265
  */
265
266
 
266
- import { Model } from '../../orm/Model';
267
+ import { Model } from '@zintrust/core';
267
268
 
268
269
  export const Example = Model.define({
269
270
  table: '${options.name}',
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/TemplateEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAmDD;;GAEG;AACH,eAAO,MAAM,cAAc;sBAjDM,MAAM,aAAa,iBAAiB,KAAG,MAAM;6BAA7C,MAAM,aAAa,iBAAiB,KAAG,MAAM;0BAA7C,MAAM,aAAa,iBAAiB,KAAG,MAAM;6BAiBpE,iBAAiB,YACf,iBAAiB,KAC1B,iBAAiB;4BASmB,MAAM,KAAG,OAAO;gCASZ,MAAM,KAAG,MAAM,EAAE;EAmB1D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAgDvD,CAAC"}
1
+ {"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/TemplateEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAmDD;;GAEG;AACH,eAAO,MAAM,cAAc;sBAjDM,MAAM,aAAa,iBAAiB,KAAG,MAAM;6BAA7C,MAAM,aAAa,iBAAiB,KAAG,MAAM;0BAA7C,MAAM,aAAa,iBAAiB,KAAG,MAAM;6BAiBpE,iBAAiB,YACf,iBAAiB,KAC1B,iBAAiB;4BASmB,MAAM,KAAG,OAAO;gCASZ,MAAM,KAAG,MAAM,EAAE;EAmB1D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA8CvD,CAAC"}
@@ -70,7 +70,6 @@ export const BUILT_IN_TEMPLATES = {
70
70
  'routes',
71
71
  'tests/unit',
72
72
  'tests/integration',
73
- 'config',
74
73
  'database/migrations',
75
74
  'database/seeders',
76
75
  ],
@@ -95,7 +94,6 @@ export const BUILT_IN_TEMPLATES = {
95
94
  'routes',
96
95
  'tests/unit',
97
96
  'tests/integration',
98
- 'config',
99
97
  'database/migrations',
100
98
  'database/seeders',
101
99
  'services',
@@ -6,10 +6,10 @@
6
6
  * - Generates into application folders (default: src/mail/markdown and src/notification/markdown)
7
7
  * - Uses FileGenerator for consistent file I/O + logging
8
8
  */
9
- import { FileGenerator } from '../scaffolding/FileGenerator';
10
- import { Logger } from '../../config/logger';
11
- import { ErrorFactory } from '../../exceptions/ZintrustError';
12
- import * as path from '../../node-singletons/path';
9
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
10
+ import { Logger } from '../../config/logger.js';
11
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
12
+ import * as path from '../../node-singletons/path.js';
13
13
  const normalizeList = (items) => {
14
14
  const out = [];
15
15
  for (const raw of items) {
@@ -2,10 +2,10 @@
2
2
  * Workflow Generator
3
3
  * Generates GitHub Actions workflows for deployment and CI/CD
4
4
  */
5
- import { FileGenerator } from '../scaffolding/FileGenerator';
6
- import { Logger } from '../../config/logger';
7
- import { fsPromises as fs } from '../../node-singletons/fs';
8
- import * as path from '../../node-singletons/path';
5
+ import { FileGenerator } from '../scaffolding/FileGenerator.js';
6
+ import { Logger } from '../../config/logger.js';
7
+ import { fsPromises as fs } from '../../node-singletons/fs.js';
8
+ import * as path from '../../node-singletons/path.js';
9
9
  /**
10
10
  * Generate a deployment workflow
11
11
  */
@@ -1,19 +1,19 @@
1
1
  /**
2
2
  * Scaffolding Module Exports
3
3
  */
4
- export { ControllerGenerator } from '../scaffolding/ControllerGenerator';
5
- export { FactoryGenerator } from '../scaffolding/FactoryGenerator';
6
- export { FeatureScaffolder } from '../scaffolding/FeatureScaffolder';
7
- export { FileGenerator } from '../scaffolding/FileGenerator';
8
- export { MigrationGenerator } from '../scaffolding/MigrationGenerator';
9
- export { ModelGenerator } from '../scaffolding/ModelGenerator';
10
- export { ProjectScaffolder } from '../scaffolding/ProjectScaffolder';
11
- export { RequestFactoryGenerator } from '../scaffolding/RequestFactoryGenerator';
12
- export { ResponseFactoryGenerator } from '../scaffolding/ResponseFactoryGenerator';
13
- export { RouteGenerator } from '../scaffolding/RouteGenerator';
14
- export { SeederGenerator } from '../scaffolding/SeederGenerator';
15
- export { ServiceIntegrationTestGenerator } from '../scaffolding/ServiceIntegrationTestGenerator';
16
- export { ServiceRequestFactoryGenerator } from '../scaffolding/ServiceRequestFactoryGenerator';
17
- export { ServiceScaffolder } from '../scaffolding/ServiceScaffolder';
18
- export { BUILT_IN_TEMPLATES, TemplateEngine } from '../scaffolding/TemplateEngine';
19
- export { TemplateGenerator } from '../scaffolding/TemplateGenerator';
4
+ export { ControllerGenerator } from '../scaffolding/ControllerGenerator.js';
5
+ export { FactoryGenerator } from '../scaffolding/FactoryGenerator.js';
6
+ export { FeatureScaffolder } from '../scaffolding/FeatureScaffolder.js';
7
+ export { FileGenerator } from '../scaffolding/FileGenerator.js';
8
+ export { MigrationGenerator } from '../scaffolding/MigrationGenerator.js';
9
+ export { ModelGenerator } from '../scaffolding/ModelGenerator.js';
10
+ export { ProjectScaffolder } from '../scaffolding/ProjectScaffolder.js';
11
+ export { RequestFactoryGenerator } from '../scaffolding/RequestFactoryGenerator.js';
12
+ export { ResponseFactoryGenerator } from '../scaffolding/ResponseFactoryGenerator.js';
13
+ export { RouteGenerator } from '../scaffolding/RouteGenerator.js';
14
+ export { SeederGenerator } from '../scaffolding/SeederGenerator.js';
15
+ export { ServiceIntegrationTestGenerator } from '../scaffolding/ServiceIntegrationTestGenerator.js';
16
+ export { ServiceRequestFactoryGenerator } from '../scaffolding/ServiceRequestFactoryGenerator.js';
17
+ export { ServiceScaffolder } from '../scaffolding/ServiceScaffolder.js';
18
+ export { BUILT_IN_TEMPLATES, TemplateEngine } from '../scaffolding/TemplateEngine.js';
19
+ export { TemplateGenerator } from '../scaffolding/TemplateGenerator.js';
@@ -1,7 +1,7 @@
1
- import { Logger } from '../../config/logger';
2
- import { ErrorFactory } from '../../exceptions/ZintrustError';
3
- import fs from '../../node-singletons/fs';
4
- import * as path from '../../node-singletons/path';
1
+ import { Logger } from '../../config/logger.js';
2
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
3
+ import fs from '../../node-singletons/fs.js';
4
+ import * as path from '../../node-singletons/path.js';
5
5
  const readRootPackageJson = (rootPath) => {
6
6
  const rootPackageJsonPath = path.join(rootPath, 'package.json');
7
7
  if (!fs.existsSync(rootPackageJsonPath)) {
@@ -1,5 +1,5 @@
1
- import { existsSync, readFileSync } from '../../node-singletons/fs';
2
- import { join } from '../../node-singletons/path';
1
+ import { existsSync, readFileSync } from '../../node-singletons/fs.js';
2
+ import { join } from '../../node-singletons/path.js';
3
3
  const normalizeAppMode = (value) => {
4
4
  const normalized = value.trim().toLowerCase();
5
5
  if (normalized === 'production' || normalized === 'pro' || normalized === 'prod')
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/spawn.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA8BD,eAAO,MAAM,SAAS;wBACM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;EAwD7D,CAAC"}
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../../src/cli/utils/spawn.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AA8BD,eAAO,MAAM,SAAS;wBACM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;EAwE7D,CAAC"}
@@ -1,8 +1,8 @@
1
- import { appConfig } from '../../config/app';
2
- import { ErrorFactory } from '../../exceptions/ZintrustError';
3
- import { spawn } from '../../node-singletons/child-process';
4
- import { existsSync } from '../../node-singletons/fs';
5
- import * as path from '../../node-singletons/path';
1
+ import { appConfig } from '../../config/app.js';
2
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
3
+ import { spawn } from '../../node-singletons/child-process.js';
4
+ import { existsSync } from '../../node-singletons/fs.js';
5
+ import * as path from '../../node-singletons/path.js';
6
6
  const getExitCode = (exitCode, signal) => {
7
7
  if (typeof exitCode === 'number')
8
8
  return exitCode;
@@ -38,13 +38,24 @@ export const SpawnUtil = Object.freeze({
38
38
  env: input.env ?? appConfig.getSafeEnv(),
39
39
  stdio: 'inherit',
40
40
  });
41
- const forwardSignals = input.forwardSignals !== false;
41
+ // In interactive shells, the foreground process group already receives SIGINT
42
+ // (and often SIGTERM) so forwarding can cause duplicates. `tsx watch` is
43
+ // especially sensitive here and can print "Previous process hasn't exited yet. Force killing...".
44
+ const forwardSignals = typeof input.forwardSignals === 'boolean' ? input.forwardSignals : !process.stdin.isTTY;
42
45
  const forwardSignal = (signal) => {
43
46
  try {
44
47
  child.kill(signal);
45
48
  }
46
49
  catch (error) {
47
- throw ErrorFactory.createTryCatchError('Failed to forward signal to child process', error);
50
+ const wrapped = ErrorFactory.createTryCatchError('Failed to forward signal to child process', error);
51
+ // Best-effort logging; then rethrow (tests/assertions rely on this behavior).
52
+ try {
53
+ process.stderr.write(`${String(wrapped.message)}\n`);
54
+ }
55
+ catch {
56
+ // ignore
57
+ }
58
+ throw wrapped;
48
59
  }
49
60
  };
50
61
  const onSigint = () => forwardSignal('SIGINT');
@@ -1,4 +1,4 @@
1
- import { createHash, createHmac } from '../node-singletons/crypto';
1
+ import { createHash, createHmac } from '../node-singletons/crypto.js';
2
2
  export const AwsSigV4 = Object.freeze({
3
3
  sha256Hex(data) {
4
4
  return createHash('sha256').update(data).digest('hex');