@zintrust/core 0.1.0 → 0.1.2

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 (518) hide show
  1. package/README.md +214 -0
  2. package/bin/zintrust.d.ts.map +1 -1
  3. package/bin/zintrust.js +18 -1
  4. package/package.json +4 -34
  5. package/public/index.html +535 -0
  6. package/src/boot/Application.d.ts.map +1 -1
  7. package/src/boot/Application.js +46 -3
  8. package/src/boot/Server.d.ts.map +1 -1
  9. package/src/boot/Server.js +3 -4
  10. package/src/boot/bootstrap.js +77 -6
  11. package/src/builder/BundleOptimizer.d.ts.map +1 -1
  12. package/src/builder/BundleOptimizer.js +25 -29
  13. package/src/cache/Cache.d.ts.map +1 -1
  14. package/src/cache/Cache.js +4 -2
  15. package/src/cache/drivers/KVDriver.d.ts.map +1 -1
  16. package/src/cache/drivers/KVDriver.js +8 -7
  17. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  18. package/src/cache/drivers/MemoryDriver.js +5 -0
  19. package/src/cache/drivers/RedisDriver.js +1 -1
  20. package/src/cli/BaseCommand.d.ts +2 -2
  21. package/src/cli/BaseCommand.d.ts.map +1 -1
  22. package/src/cli/BaseCommand.js +2 -1
  23. package/src/cli/CLI.d.ts.map +1 -1
  24. package/src/cli/CLI.js +22 -18
  25. package/src/cli/ErrorHandler.d.ts.map +1 -1
  26. package/src/cli/ErrorHandler.js +2 -4
  27. package/src/cli/commands/AddCommand.d.ts +81 -0
  28. package/src/cli/commands/AddCommand.d.ts.map +1 -1
  29. package/src/cli/commands/AddCommand.js +24 -5
  30. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  31. package/src/cli/commands/ConfigCommand.js +59 -25
  32. package/src/cli/commands/D1MigrateCommand.d.ts +4 -0
  33. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  34. package/src/cli/commands/D1MigrateCommand.js +6 -4
  35. package/src/cli/commands/FixCommand.d.ts.map +1 -1
  36. package/src/cli/commands/FixCommand.js +3 -15
  37. package/src/cli/commands/LogsCleanupCommand.d.ts +6 -0
  38. package/src/cli/commands/LogsCleanupCommand.d.ts.map +1 -0
  39. package/src/cli/commands/LogsCleanupCommand.js +20 -0
  40. package/src/cli/commands/LogsCommand.d.ts.map +1 -1
  41. package/src/cli/commands/LogsCommand.js +4 -6
  42. package/src/cli/commands/MakeMailTemplateCommand.d.ts +10 -0
  43. package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -0
  44. package/src/cli/commands/MakeMailTemplateCommand.js +74 -0
  45. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +10 -0
  46. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -0
  47. package/src/cli/commands/MakeNotificationTemplateCommand.js +113 -0
  48. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  49. package/src/cli/commands/MigrateCommand.js +3 -3
  50. package/src/cli/commands/NewCommand.d.ts +4 -0
  51. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  52. package/src/cli/commands/NewCommand.js +34 -19
  53. package/src/cli/commands/PluginCommand.d.ts.map +1 -1
  54. package/src/cli/commands/PluginCommand.js +8 -4
  55. package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
  56. package/src/cli/commands/PrepareCommand.js +1 -1
  57. package/src/cli/commands/QACommand.d.ts.map +1 -1
  58. package/src/cli/commands/QACommand.js +16 -26
  59. package/src/cli/commands/SecretsCommand.d.ts +16 -0
  60. package/src/cli/commands/SecretsCommand.d.ts.map +1 -0
  61. package/src/cli/commands/SecretsCommand.js +91 -0
  62. package/src/cli/commands/StartCommand.d.ts.map +1 -1
  63. package/src/cli/commands/StartCommand.js +2 -2
  64. package/src/cli/commands/TemplatesCommand.d.ts +3 -0
  65. package/src/cli/commands/TemplatesCommand.d.ts.map +1 -0
  66. package/src/cli/commands/TemplatesCommand.js +65 -0
  67. package/src/cli/commands/index.d.ts +5 -0
  68. package/src/cli/commands/index.d.ts.map +1 -1
  69. package/src/cli/commands/index.js +5 -0
  70. package/src/cli/config/ConfigManager.js +1 -1
  71. package/src/cli/index.d.ts +2 -1
  72. package/src/cli/index.d.ts.map +1 -1
  73. package/src/cli/index.js +2 -1
  74. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  75. package/src/cli/scaffolding/ControllerGenerator.js +11 -10
  76. package/src/cli/scaffolding/FeatureScaffolder.js +4 -4
  77. package/src/cli/scaffolding/FileGenerator.js +1 -1
  78. package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
  79. package/src/cli/scaffolding/MigrationGenerator.js +10 -9
  80. package/src/cli/scaffolding/ModelGenerator.d.ts.map +1 -1
  81. package/src/cli/scaffolding/ModelGenerator.js +11 -10
  82. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  83. package/src/cli/scaffolding/ProjectScaffolder.js +61 -11
  84. package/src/cli/scaffolding/ResponseFactoryGenerator.d.ts.map +1 -1
  85. package/src/cli/scaffolding/ResponseFactoryGenerator.js +2 -1
  86. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
  87. package/src/cli/scaffolding/RouteGenerator.js +15 -14
  88. package/src/cli/scaffolding/SeederGenerator.js +1 -1
  89. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.d.ts.map +1 -1
  90. package/src/cli/scaffolding/ServiceIntegrationTestGenerator.js +7 -6
  91. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts +1 -1
  92. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.d.ts.map +1 -1
  93. package/src/cli/scaffolding/ServiceRequestFactoryGenerator.js +2 -2
  94. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  95. package/src/cli/scaffolding/ServiceScaffolder.js +13 -12
  96. package/src/cli/scaffolding/TemplateEngine.d.ts +10 -3
  97. package/src/cli/scaffolding/TemplateEngine.d.ts.map +1 -1
  98. package/src/cli/scaffolding/TemplateEngine.js +15 -285
  99. package/src/cli/scaffolding/TemplateGenerator.d.ts +40 -0
  100. package/src/cli/scaffolding/TemplateGenerator.d.ts.map +1 -0
  101. package/src/cli/scaffolding/TemplateGenerator.js +172 -0
  102. package/src/cli/scaffolding/index.d.ts +1 -0
  103. package/src/cli/scaffolding/index.d.ts.map +1 -1
  104. package/src/cli/scaffolding/index.js +1 -0
  105. package/src/cli/utils/spawn.js +1 -1
  106. package/src/common/AwsSigV4.d.ts +41 -0
  107. package/src/common/AwsSigV4.d.ts.map +1 -0
  108. package/src/common/AwsSigV4.js +69 -0
  109. package/src/common/index.d.ts +39 -0
  110. package/src/common/index.d.ts.map +1 -1
  111. package/src/common/index.js +101 -8
  112. package/src/common/uuid.d.ts +3 -0
  113. package/src/common/uuid.d.ts.map +1 -0
  114. package/src/common/uuid.js +30 -0
  115. package/src/config/FileLogWriter.d.ts +22 -0
  116. package/src/config/FileLogWriter.d.ts.map +1 -0
  117. package/src/config/FileLogWriter.js +192 -0
  118. package/src/config/SecretsManager.d.ts.map +1 -1
  119. package/src/config/SecretsManager.js +26 -0
  120. package/src/config/StartupConfigValidator.d.ts +15 -0
  121. package/src/config/StartupConfigValidator.d.ts.map +1 -0
  122. package/src/config/StartupConfigValidator.js +86 -0
  123. package/src/config/app.d.ts +2 -1
  124. package/src/config/app.d.ts.map +1 -1
  125. package/src/config/app.js +65 -15
  126. package/src/config/broadcast.d.ts +47 -0
  127. package/src/config/broadcast.d.ts.map +1 -0
  128. package/src/config/broadcast.js +54 -0
  129. package/src/config/cache.d.ts +13 -17
  130. package/src/config/cache.d.ts.map +1 -1
  131. package/src/config/cache.js +9 -11
  132. package/src/config/cloudflare.d.ts +26 -0
  133. package/src/config/cloudflare.d.ts.map +1 -0
  134. package/src/config/cloudflare.js +38 -0
  135. package/src/config/env.d.ts +6 -0
  136. package/src/config/env.d.ts.map +1 -1
  137. package/src/config/env.js +6 -0
  138. package/src/config/index.d.ts +52 -28
  139. package/src/config/index.d.ts.map +1 -1
  140. package/src/config/index.js +3 -0
  141. package/src/config/logger.d.ts +2 -0
  142. package/src/config/logger.d.ts.map +1 -1
  143. package/src/config/logger.js +270 -11
  144. package/src/config/logging/HttpLogger.d.ts +23 -0
  145. package/src/config/logging/HttpLogger.d.ts.map +1 -0
  146. package/src/config/logging/HttpLogger.js +93 -0
  147. package/src/config/logging/KvLogger.d.ts +22 -0
  148. package/src/config/logging/KvLogger.d.ts.map +1 -0
  149. package/src/config/logging/KvLogger.js +143 -0
  150. package/src/config/logging/SlackLogger.d.ts +23 -0
  151. package/src/config/logging/SlackLogger.d.ts.map +1 -0
  152. package/src/config/logging/SlackLogger.js +119 -0
  153. package/src/config/mail.d.ts +81 -0
  154. package/src/config/mail.d.ts.map +1 -0
  155. package/src/config/mail.js +73 -0
  156. package/src/config/middleware.d.ts +8 -0
  157. package/src/config/middleware.d.ts.map +1 -0
  158. package/src/config/middleware.js +18 -0
  159. package/src/config/notification.d.ts +62 -0
  160. package/src/config/notification.d.ts.map +1 -0
  161. package/src/config/notification.js +43 -0
  162. package/src/config/security.d.ts.map +1 -1
  163. package/src/config/security.js +2 -2
  164. package/src/config/startup.d.ts +23 -0
  165. package/src/config/startup.d.ts.map +1 -0
  166. package/src/config/startup.js +15 -0
  167. package/src/config/storage.d.ts +21 -35
  168. package/src/config/storage.d.ts.map +1 -1
  169. package/src/config/storage.js +57 -37
  170. package/src/database/migrations/index.d.ts +1 -1
  171. package/src/database/migrations/index.d.ts.map +1 -1
  172. package/src/database/migrations/index.js +2 -1
  173. package/src/features/Queue.js +1 -25
  174. package/src/functions/lambda.d.ts.map +1 -1
  175. package/src/functions/lambda.js +6 -1
  176. package/src/health/RuntimeHealthProbes.d.ts +13 -0
  177. package/src/health/RuntimeHealthProbes.d.ts.map +1 -0
  178. package/src/health/RuntimeHealthProbes.js +62 -0
  179. package/src/health/StartupHealthChecks.d.ts +26 -0
  180. package/src/health/StartupHealthChecks.d.ts.map +1 -0
  181. package/src/health/StartupHealthChecks.js +124 -0
  182. package/src/http/ErrorResponse.d.ts +28 -0
  183. package/src/http/ErrorResponse.d.ts.map +1 -0
  184. package/src/http/ErrorResponse.js +42 -0
  185. package/src/http/Kernel.d.ts +5 -0
  186. package/src/http/Kernel.d.ts.map +1 -1
  187. package/src/http/Kernel.js +96 -30
  188. package/src/http/Request.d.ts +1 -1
  189. package/src/http/Request.d.ts.map +1 -1
  190. package/src/http/RequestContext.d.ts +20 -0
  191. package/src/http/RequestContext.d.ts.map +1 -0
  192. package/src/http/RequestContext.js +77 -0
  193. package/src/index.d.ts +9 -1
  194. package/src/index.d.ts.map +1 -1
  195. package/src/index.js +8 -2
  196. package/src/microservices/MicroserviceBootstrap.d.ts.map +1 -1
  197. package/src/microservices/MicroserviceBootstrap.js +6 -5
  198. package/src/microservices/MicroserviceManager.d.ts.map +1 -1
  199. package/src/microservices/MicroserviceManager.js +7 -5
  200. package/src/microservices/PostgresAdapter.d.ts.map +1 -1
  201. package/src/microservices/PostgresAdapter.js +7 -4
  202. package/src/microservices/ServiceBundler.d.ts.map +1 -1
  203. package/src/microservices/ServiceBundler.js +3 -1
  204. package/src/microservices/ServiceHealthMonitor.d.ts.map +1 -1
  205. package/src/microservices/ServiceHealthMonitor.js +7 -3
  206. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  207. package/src/middleware/CsrfMiddleware.js +2 -19
  208. package/src/middleware/ErrorHandlerMiddleware.d.ts +6 -0
  209. package/src/middleware/ErrorHandlerMiddleware.d.ts.map +1 -0
  210. package/src/middleware/ErrorHandlerMiddleware.js +33 -0
  211. package/src/middleware/LoggingMiddleware.d.ts +9 -0
  212. package/src/middleware/LoggingMiddleware.d.ts.map +1 -0
  213. package/src/middleware/LoggingMiddleware.js +36 -0
  214. package/src/middleware/index.d.ts +2 -0
  215. package/src/middleware/index.d.ts.map +1 -1
  216. package/src/middleware/index.js +2 -0
  217. package/src/node-singletons/async_hooks.d.ts +9 -0
  218. package/src/node-singletons/async_hooks.d.ts.map +1 -0
  219. package/src/node-singletons/async_hooks.js +8 -0
  220. package/src/node-singletons/fs.d.ts +2 -2
  221. package/src/node-singletons/fs.d.ts.map +1 -1
  222. package/src/node-singletons/fs.js +2 -2
  223. package/src/node-singletons/http.d.ts +1 -1
  224. package/src/node-singletons/http.d.ts.map +1 -1
  225. package/src/node-singletons/http.js +1 -1
  226. package/src/node-singletons/index.d.ts +4 -0
  227. package/src/node-singletons/index.d.ts.map +1 -1
  228. package/src/node-singletons/index.js +4 -0
  229. package/src/node-singletons/net.d.ts +9 -0
  230. package/src/node-singletons/net.d.ts.map +1 -0
  231. package/src/node-singletons/net.js +8 -0
  232. package/src/node-singletons/os.d.ts +3 -3
  233. package/src/node-singletons/os.d.ts.map +1 -1
  234. package/src/node-singletons/os.js +3 -4
  235. package/src/node-singletons/path.d.ts +3 -1
  236. package/src/node-singletons/path.d.ts.map +1 -1
  237. package/src/node-singletons/path.js +3 -1
  238. package/src/node-singletons/perf-hooks.d.ts +3 -1
  239. package/src/node-singletons/perf-hooks.d.ts.map +1 -1
  240. package/src/node-singletons/perf-hooks.js +3 -1
  241. package/src/node-singletons/process.d.ts +23 -0
  242. package/src/node-singletons/process.d.ts.map +1 -0
  243. package/src/node-singletons/process.js +8 -0
  244. package/src/node-singletons/readline.d.ts +3 -3
  245. package/src/node-singletons/readline.d.ts.map +1 -1
  246. package/src/node-singletons/readline.js +3 -4
  247. package/src/node-singletons/tls.d.ts +9 -0
  248. package/src/node-singletons/tls.d.ts.map +1 -0
  249. package/src/node-singletons/tls.js +8 -0
  250. package/src/node-singletons/url.d.ts +3 -1
  251. package/src/node-singletons/url.d.ts.map +1 -1
  252. package/src/node-singletons/url.js +3 -1
  253. package/src/orm/ConnectionManager.d.ts +6 -1
  254. package/src/orm/ConnectionManager.d.ts.map +1 -1
  255. package/src/orm/ConnectionManager.js +14 -0
  256. package/src/orm/DatabaseAdapter.d.ts +6 -0
  257. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  258. package/src/orm/QueryBuilder.d.ts +8 -1
  259. package/src/orm/QueryBuilder.d.ts.map +1 -1
  260. package/src/orm/QueryBuilder.js +188 -28
  261. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  262. package/src/orm/adapters/D1Adapter.js +18 -12
  263. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  264. package/src/orm/adapters/MySQLAdapter.js +4 -0
  265. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  266. package/src/orm/adapters/PostgreSQLAdapter.js +4 -0
  267. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  268. package/src/orm/adapters/SQLServerAdapter.js +4 -0
  269. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  270. package/src/orm/adapters/SQLiteAdapter.js +4 -0
  271. package/src/performance/Benchmark.d.ts.map +1 -1
  272. package/src/performance/Benchmark.js +3 -0
  273. package/src/performance/CodeGenerationBenchmark.js +3 -3
  274. package/src/performance/Optimizer.d.ts +1 -1
  275. package/src/performance/Optimizer.d.ts.map +1 -1
  276. package/src/performance/Optimizer.js +157 -80
  277. package/src/performance/establish-baseline.js +3 -3
  278. package/src/runtime/PluginManager.d.ts +3 -1
  279. package/src/runtime/PluginManager.d.ts.map +1 -1
  280. package/src/runtime/PluginManager.js +124 -28
  281. package/src/runtime/RuntimeDetector.d.ts.map +1 -1
  282. package/src/runtime/RuntimeDetector.js +47 -5
  283. package/src/runtime/adapters/CloudflareAdapter.js +2 -2
  284. package/src/runtime/adapters/DenoAdapter.js +9 -7
  285. package/src/runtime/adapters/FargateAdapter.d.ts.map +1 -1
  286. package/src/runtime/adapters/FargateAdapter.js +4 -3
  287. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
  288. package/src/runtime/adapters/LambdaAdapter.js +4 -2
  289. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
  290. package/src/runtime/adapters/NodeServerAdapter.js +7 -6
  291. package/src/scheduler/ScheduleRunner.d.ts +18 -0
  292. package/src/scheduler/ScheduleRunner.d.ts.map +1 -0
  293. package/src/scheduler/ScheduleRunner.js +155 -0
  294. package/src/scheduler/index.d.ts +3 -0
  295. package/src/scheduler/index.d.ts.map +1 -0
  296. package/src/scheduler/index.js +1 -0
  297. package/src/scheduler/types.d.ts +16 -0
  298. package/src/scheduler/types.d.ts.map +1 -0
  299. package/src/scheduler/types.js +4 -0
  300. package/src/schedules/index.d.ts +2 -0
  301. package/src/schedules/index.d.ts.map +1 -0
  302. package/src/schedules/index.js +1 -0
  303. package/src/schedules/log-cleanup.d.ts +4 -0
  304. package/src/schedules/log-cleanup.d.ts.map +1 -0
  305. package/src/schedules/log-cleanup.js +18 -0
  306. package/src/scripts/GenerateEnvArtifacts.d.ts +13 -0
  307. package/src/scripts/GenerateEnvArtifacts.d.ts.map +1 -0
  308. package/src/scripts/GenerateEnvArtifacts.js +171 -0
  309. package/src/scripts/TemplateSync.js +109 -70
  310. package/src/security/CsrfTokenManager.js +1 -1
  311. package/src/security/Encryptor.js +1 -1
  312. package/src/security/Hash.d.ts +14 -0
  313. package/src/security/Hash.d.ts.map +1 -0
  314. package/src/security/Hash.js +81 -0
  315. package/src/security/StartupSecretValidation.d.ts +20 -0
  316. package/src/security/StartupSecretValidation.d.ts.map +1 -0
  317. package/src/security/StartupSecretValidation.js +61 -0
  318. package/src/security/UrlValidator.d.ts +0 -1
  319. package/src/security/UrlValidator.d.ts.map +1 -1
  320. package/src/security/UrlValidator.js +1 -2
  321. package/src/security/Xss.d.ts +14 -0
  322. package/src/security/Xss.d.ts.map +1 -0
  323. package/src/security/Xss.js +57 -0
  324. package/src/security/XssProtection.d.ts.map +1 -1
  325. package/src/security/XssProtection.js +150 -16
  326. package/src/templates/adapters/MySQLAdapter.ts.tpl +5 -0
  327. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +5 -0
  328. package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -0
  329. package/src/templates/adapters/SQLiteAdapter.ts.tpl +5 -0
  330. package/src/templates/features/Queue.ts.tpl +1 -29
  331. package/src/templates/project/basic/.env.example.tpl +48 -0
  332. package/src/templates/project/basic/.env.tpl +89 -94
  333. package/src/templates/project/basic/app/Toolkit/Broadcast/sendBroadcast.ts.tpl +7 -0
  334. package/src/templates/project/basic/app/Toolkit/Mail/sendWelcomeEmail.ts.tpl +30 -0
  335. package/src/templates/project/basic/app/Toolkit/Notification/sendSlackNotification.ts.tpl +10 -0
  336. package/src/templates/project/basic/app/Toolkit/Notification/sendSms.ts.tpl +13 -0
  337. package/src/templates/project/basic/config/FileLogWriter.ts.tpl +240 -0
  338. package/src/templates/project/basic/config/SecretsManager.ts.tpl +32 -1
  339. package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +151 -0
  340. package/src/templates/project/basic/config/app.ts.tpl +84 -15
  341. package/src/templates/project/basic/config/broadcast.ts.tpl +97 -0
  342. package/src/templates/project/basic/config/cache.ts.tpl +19 -23
  343. package/src/templates/project/basic/config/cloudflare.ts.tpl +57 -0
  344. package/src/templates/project/basic/config/env.ts.tpl +7 -1
  345. package/src/templates/project/basic/config/index.ts.tpl +3 -0
  346. package/src/templates/project/basic/config/logger.ts.tpl +301 -11
  347. package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +121 -0
  348. package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +181 -0
  349. package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +156 -0
  350. package/src/templates/project/basic/config/mail.ts.tpl +141 -0
  351. package/src/templates/project/basic/config/middleware.ts.tpl +27 -0
  352. package/src/templates/project/basic/config/notification.ts.tpl +86 -0
  353. package/src/templates/project/basic/config/security.ts.tpl +4 -5
  354. package/src/templates/project/basic/config/startup.ts.tpl +27 -0
  355. package/src/templates/project/basic/config/storage.ts.tpl +77 -42
  356. package/src/templates/project/basic/database/migrations/index.ts.tpl +1 -1
  357. package/src/templates/project/basic/package.json.tpl +1 -1
  358. package/src/templates/project/basic/routes/api.ts.tpl +9 -37
  359. package/src/templates/project/basic/routes/broadcast.ts.tpl +32 -0
  360. package/src/templates/project/basic/routes/health.ts.tpl +134 -0
  361. package/src/templates/project/basic/src/index.ts.tpl +38 -11
  362. package/src/templates/project/basic/template.json +3 -0
  363. package/src/toolkit/Secrets/EnvFile.d.ts +15 -0
  364. package/src/toolkit/Secrets/EnvFile.d.ts.map +1 -0
  365. package/src/toolkit/Secrets/EnvFile.js +63 -0
  366. package/src/toolkit/Secrets/Manifest.d.ts +24 -0
  367. package/src/toolkit/Secrets/Manifest.d.ts.map +1 -0
  368. package/src/toolkit/Secrets/Manifest.js +71 -0
  369. package/src/toolkit/Secrets/index.d.ts +42 -0
  370. package/src/toolkit/Secrets/index.d.ts.map +1 -0
  371. package/src/toolkit/Secrets/index.js +119 -0
  372. package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts +14 -0
  373. package/src/toolkit/Secrets/providers/AwsSecretsManager.d.ts.map +1 -0
  374. package/src/toolkit/Secrets/providers/AwsSecretsManager.js +131 -0
  375. package/src/toolkit/Secrets/providers/CloudflareKv.d.ts +9 -0
  376. package/src/toolkit/Secrets/providers/CloudflareKv.d.ts.map +1 -0
  377. package/src/toolkit/Secrets/providers/CloudflareKv.js +73 -0
  378. package/src/tools/broadcast/Broadcast.d.ts +7 -0
  379. package/src/tools/broadcast/Broadcast.d.ts.map +1 -0
  380. package/src/tools/broadcast/Broadcast.js +37 -0
  381. package/src/tools/broadcast/drivers/BaseDriver.d.ts +5 -0
  382. package/src/tools/broadcast/drivers/BaseDriver.d.ts.map +1 -0
  383. package/src/tools/broadcast/drivers/BaseDriver.js +8 -0
  384. package/src/tools/broadcast/drivers/InMemory.d.ts +18 -0
  385. package/src/tools/broadcast/drivers/InMemory.d.ts.map +1 -0
  386. package/src/tools/broadcast/drivers/InMemory.js +16 -0
  387. package/src/tools/broadcast/drivers/Pusher.d.ts +8 -0
  388. package/src/tools/broadcast/drivers/Pusher.d.ts.map +1 -0
  389. package/src/tools/broadcast/drivers/Pusher.js +75 -0
  390. package/src/tools/broadcast/drivers/Redis.d.ts +19 -0
  391. package/src/tools/broadcast/drivers/Redis.d.ts.map +1 -0
  392. package/src/tools/broadcast/drivers/Redis.js +73 -0
  393. package/src/tools/broadcast/drivers/RedisHttps.d.ts +14 -0
  394. package/src/tools/broadcast/drivers/RedisHttps.d.ts.map +1 -0
  395. package/src/tools/broadcast/drivers/RedisHttps.js +50 -0
  396. package/src/tools/broadcast/index.d.ts +7 -0
  397. package/src/tools/broadcast/index.d.ts.map +1 -0
  398. package/src/tools/broadcast/index.js +6 -0
  399. package/src/tools/http/Http.d.ts +51 -0
  400. package/src/tools/http/Http.d.ts.map +1 -0
  401. package/src/tools/http/Http.js +171 -0
  402. package/src/tools/http/HttpResponse.d.ts +32 -0
  403. package/src/tools/http/HttpResponse.d.ts.map +1 -0
  404. package/src/tools/http/HttpResponse.js +80 -0
  405. package/src/tools/http/index.d.ts +15 -0
  406. package/src/tools/http/index.d.ts.map +1 -0
  407. package/src/tools/http/index.js +9 -0
  408. package/src/tools/mail/Mail.d.ts +22 -0
  409. package/src/tools/mail/Mail.d.ts.map +1 -0
  410. package/src/tools/mail/Mail.js +105 -0
  411. package/src/tools/mail/attachments.d.ts +23 -0
  412. package/src/tools/mail/attachments.d.ts.map +1 -0
  413. package/src/tools/mail/attachments.js +26 -0
  414. package/src/tools/mail/drivers/BaseDriver.d.ts +5 -0
  415. package/src/tools/mail/drivers/BaseDriver.d.ts.map +1 -0
  416. package/src/tools/mail/drivers/BaseDriver.js +8 -0
  417. package/src/tools/mail/drivers/Mailgun.d.ts +31 -0
  418. package/src/tools/mail/drivers/Mailgun.d.ts.map +1 -0
  419. package/src/tools/mail/drivers/Mailgun.js +81 -0
  420. package/src/tools/mail/drivers/SendGrid.d.ts +29 -0
  421. package/src/tools/mail/drivers/SendGrid.d.ts.map +1 -0
  422. package/src/tools/mail/drivers/SendGrid.js +57 -0
  423. package/src/tools/mail/drivers/Ses.d.ts +24 -0
  424. package/src/tools/mail/drivers/Ses.d.ts.map +1 -0
  425. package/src/tools/mail/drivers/Ses.js +116 -0
  426. package/src/tools/mail/drivers/Smtp.d.ts +38 -0
  427. package/src/tools/mail/drivers/Smtp.d.ts.map +1 -0
  428. package/src/tools/mail/drivers/Smtp.js +327 -0
  429. package/src/tools/mail/templates/index.d.ts +27 -0
  430. package/src/tools/mail/templates/index.d.ts.map +1 -0
  431. package/src/tools/mail/templates/index.js +35 -0
  432. package/src/tools/mail/templates/markdown/index.d.ts +17 -0
  433. package/src/tools/mail/templates/markdown/index.d.ts.map +1 -0
  434. package/src/tools/mail/templates/markdown/index.js +49 -0
  435. package/src/tools/mail/templates/markdown/registry.d.ts +15 -0
  436. package/src/tools/mail/templates/markdown/registry.d.ts.map +1 -0
  437. package/src/tools/mail/templates/markdown/registry.js +34 -0
  438. package/src/tools/mail/templates/markdown/validator.d.ts +16 -0
  439. package/src/tools/mail/templates/markdown/validator.d.ts.map +1 -0
  440. package/src/tools/mail/templates/markdown/validator.js +24 -0
  441. package/src/tools/mail/testing.d.ts +41 -0
  442. package/src/tools/mail/testing.d.ts.map +1 -0
  443. package/src/tools/mail/testing.js +34 -0
  444. package/src/tools/notification/Driver.d.ts +11 -0
  445. package/src/tools/notification/Driver.d.ts.map +1 -0
  446. package/src/tools/notification/Driver.js +1 -0
  447. package/src/tools/notification/Notification.d.ts +11 -0
  448. package/src/tools/notification/Notification.d.ts.map +1 -0
  449. package/src/tools/notification/Notification.js +11 -0
  450. package/src/tools/notification/Registry.d.ts +10 -0
  451. package/src/tools/notification/Registry.d.ts.map +1 -0
  452. package/src/tools/notification/Registry.js +22 -0
  453. package/src/tools/notification/Service.d.ts +6 -0
  454. package/src/tools/notification/Service.d.ts.map +1 -0
  455. package/src/tools/notification/Service.js +18 -0
  456. package/src/tools/notification/config.d.ts +5 -0
  457. package/src/tools/notification/config.d.ts.map +1 -0
  458. package/src/tools/notification/config.js +5 -0
  459. package/src/tools/notification/drivers/BaseDriver.d.ts +5 -0
  460. package/src/tools/notification/drivers/BaseDriver.d.ts.map +1 -0
  461. package/src/tools/notification/drivers/BaseDriver.js +8 -0
  462. package/src/tools/notification/drivers/Console.d.ts +7 -0
  463. package/src/tools/notification/drivers/Console.d.ts.map +1 -0
  464. package/src/tools/notification/drivers/Console.js +13 -0
  465. package/src/tools/notification/drivers/Slack.d.ts +16 -0
  466. package/src/tools/notification/drivers/Slack.d.ts.map +1 -0
  467. package/src/tools/notification/drivers/Slack.js +24 -0
  468. package/src/tools/notification/drivers/Termii.d.ts +10 -0
  469. package/src/tools/notification/drivers/Termii.d.ts.map +1 -0
  470. package/src/tools/notification/drivers/Termii.js +47 -0
  471. package/src/tools/notification/drivers/Twilio.d.ts +21 -0
  472. package/src/tools/notification/drivers/Twilio.d.ts.map +1 -0
  473. package/src/tools/notification/drivers/Twilio.js +48 -0
  474. package/src/tools/notification/templates/markdown/index.d.ts +15 -0
  475. package/src/tools/notification/templates/markdown/index.d.ts.map +1 -0
  476. package/src/tools/notification/templates/markdown/index.js +38 -0
  477. package/src/tools/notification/templates/markdown/registry.d.ts +15 -0
  478. package/src/tools/notification/templates/markdown/registry.d.ts.map +1 -0
  479. package/src/tools/notification/templates/markdown/registry.js +36 -0
  480. package/src/tools/notification/testing.d.ts +19 -0
  481. package/src/tools/notification/testing.d.ts.map +1 -0
  482. package/src/tools/notification/testing.js +35 -0
  483. package/src/tools/notification/testingHelpers.d.ts +12 -0
  484. package/src/tools/notification/testingHelpers.d.ts.map +1 -0
  485. package/src/tools/notification/testingHelpers.js +32 -0
  486. package/src/tools/queue/Queue.d.ts +23 -0
  487. package/src/tools/queue/Queue.d.ts.map +1 -0
  488. package/src/tools/queue/Queue.js +38 -0
  489. package/src/tools/queue/drivers/InMemory.d.ts +10 -0
  490. package/src/tools/queue/drivers/InMemory.d.ts.map +1 -0
  491. package/src/tools/queue/drivers/InMemory.js +55 -0
  492. package/src/tools/queue/drivers/Redis.d.ts +10 -0
  493. package/src/tools/queue/drivers/Redis.d.ts.map +1 -0
  494. package/src/tools/queue/drivers/Redis.js +91 -0
  495. package/src/tools/storage/drivers/Gcs.d.ts +20 -0
  496. package/src/tools/storage/drivers/Gcs.d.ts.map +1 -0
  497. package/src/tools/storage/drivers/Gcs.js +152 -0
  498. package/src/tools/storage/drivers/Local.d.ts +17 -0
  499. package/src/tools/storage/drivers/Local.d.ts.map +1 -0
  500. package/src/tools/storage/drivers/Local.js +63 -0
  501. package/src/tools/storage/drivers/R2.d.ts +20 -0
  502. package/src/tools/storage/drivers/R2.d.ts.map +1 -0
  503. package/src/tools/storage/drivers/R2.js +73 -0
  504. package/src/tools/storage/drivers/S3.d.ts +26 -0
  505. package/src/tools/storage/drivers/S3.d.ts.map +1 -0
  506. package/src/tools/storage/drivers/S3.js +258 -0
  507. package/src/tools/storage/index.d.ts +24 -0
  508. package/src/tools/storage/index.d.ts.map +1 -0
  509. package/src/tools/storage/index.js +112 -0
  510. package/src/tools/storage/testing.d.ts +23 -0
  511. package/src/tools/storage/testing.d.ts.map +1 -0
  512. package/src/tools/storage/testing.js +52 -0
  513. package/src/tools/templates/MarkdownRenderer.d.ts +14 -0
  514. package/src/tools/templates/MarkdownRenderer.d.ts.map +1 -0
  515. package/src/tools/templates/MarkdownRenderer.js +300 -0
  516. package/src/tools/templates/index.d.ts +5 -0
  517. package/src/tools/templates/index.d.ts.map +1 -0
  518. package/src/tools/templates/index.js +4 -0
@@ -0,0 +1,535 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>ZinTrust Documentation</title>
7
+ <link rel="icon" type="image/svg+xml" href="https://zintrust.com/zintrust.svg" />
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
10
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
+ <link
12
+ href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap"
13
+ rel="stylesheet"
14
+ />
15
+ <script>
16
+ tailwind.config = {
17
+ darkMode: 'class',
18
+ theme: {
19
+ extend: {
20
+ fontFamily: {
21
+ sans: ['Plus Jakarta Sans', 'sans-serif'],
22
+ mono: ['JetBrains Mono', 'monospace'],
23
+ },
24
+ colors: {
25
+ primary: '#0ea5e9',
26
+ secondary: '#10b981',
27
+ ink: '#0b1220',
28
+ },
29
+ keyframes: {
30
+ floaty: {
31
+ '0%, 100%': { transform: 'translateY(0px)' },
32
+ '50%': { transform: 'translateY(-10px)' },
33
+ },
34
+ shimmer: {
35
+ '0%': { backgroundPosition: '0% 50%' },
36
+ '100%': { backgroundPosition: '100% 50%' },
37
+ },
38
+ cardIn: {
39
+ '0%': { opacity: '0', transform: 'translateY(10px)' },
40
+ '100%': { opacity: '1', transform: 'translateY(0px)' },
41
+ },
42
+ },
43
+ animation: {
44
+ floaty: 'floaty 7s ease-in-out infinite',
45
+ shimmer: 'shimmer 8s ease-in-out infinite',
46
+ cardIn: 'cardIn 700ms ease-out forwards',
47
+ },
48
+ },
49
+ },
50
+ };
51
+ </script>
52
+ <style>
53
+ :root {
54
+ color-scheme: light;
55
+ }
56
+ html.dark {
57
+ color-scheme: dark;
58
+ }
59
+ .mesh {
60
+ position: fixed;
61
+ inset: 0;
62
+ z-index: -1;
63
+ background:
64
+ radial-gradient(1000px 500px at 10% 10%, rgba(14, 165, 233, 0.18), transparent 55%),
65
+ radial-gradient(900px 500px at 90% 20%, rgba(16, 185, 129, 0.16), transparent 55%),
66
+ radial-gradient(900px 600px at 70% 90%, rgba(14, 165, 233, 0.1), transparent 60%),
67
+ radial-gradient(900px 600px at 0% 90%, rgba(16, 185, 129, 0.1), transparent 60%);
68
+ }
69
+ .glass {
70
+ backdrop-filter: blur(16px);
71
+ -webkit-backdrop-filter: blur(16px);
72
+ }
73
+ .noise {
74
+ position: fixed;
75
+ inset: 0;
76
+ z-index: -1;
77
+ opacity: 0.06;
78
+ mix-blend-mode: overlay;
79
+ background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="160" height="160"><filter id="n"><feTurbulence type="fractalNoise" baseFrequency="0.9" numOctaves="2" stitchTiles="stitch"/></filter><rect width="160" height="160" filter="url(%23n)" opacity="0.5"/></svg>');
80
+ }
81
+ .lang-card {
82
+ transform-style: preserve-3d;
83
+ }
84
+ .lang-card:hover .lang-card-inner {
85
+ transform: translateY(-6px) rotateX(2deg) rotateY(-2deg);
86
+ }
87
+ .lang-card-inner {
88
+ transition:
89
+ transform 450ms cubic-bezier(0.2, 0.8, 0.2, 1),
90
+ box-shadow 450ms;
91
+ }
92
+ .glow-primary:hover {
93
+ box-shadow: 0 0 42px rgba(14, 165, 233, 0.22);
94
+ }
95
+ .glow-secondary:hover {
96
+ box-shadow: 0 0 42px rgba(16, 185, 129, 0.2);
97
+ }
98
+ .caret {
99
+ display: inline-block;
100
+ width: 8px;
101
+ height: 1.1em;
102
+ transform: translateY(2px);
103
+ background: rgba(148, 163, 184, 0.9);
104
+ animation: blink 1s steps(1) infinite;
105
+ }
106
+ @keyframes blink {
107
+ 50% {
108
+ opacity: 0;
109
+ }
110
+ }
111
+ .tab-active {
112
+ background: rgba(255, 255, 255, 0.08);
113
+ border-color: rgba(255, 255, 255, 0.14);
114
+ }
115
+ html:not(.dark) .tab-active {
116
+ background: rgba(2, 6, 23, 0.06);
117
+ border-color: rgba(2, 6, 23, 0.12);
118
+ }
119
+ </style>
120
+ </head>
121
+ <body class="antialiased font-sans">
122
+ <div class="mesh"></div>
123
+ <div class="noise"></div>
124
+
125
+ <main
126
+ class="min-h-screen px-6 py-10 md:py-14 bg-white text-slate-900 dark:bg-ink dark:text-slate-100"
127
+ >
128
+ <div class="mx-auto max-w-6xl">
129
+ <header class="flex items-center justify-between gap-4">
130
+ <a href="https://zintrust.com/doc" class="flex items-center gap-3">
131
+ <span
132
+ class="inline-flex h-10 w-10 items-center justify-center rounded-2xl border border-black/10 bg-black/5 dark:border-white/10 dark:bg-white/5"
133
+ >
134
+ <img src="https://zintrust.com/zintrust.svg" alt="ZinTrust Logo" class="h-6 w-6" />
135
+ </span>
136
+ <div>
137
+ <div class="text-sm font-semibold">ZinTrust</div>
138
+ <div class="text-xs text-slate-500 dark:text-slate-400">Documentation</div>
139
+ </div>
140
+ </a>
141
+
142
+ <div class="flex items-center gap-3">
143
+ <a
144
+ href="https://github.com/ZinTrust/ZinTrust"
145
+ class="text-sm font-semibold text-slate-600 hover:text-slate-900 dark:text-slate-300 dark:hover:text-white"
146
+ target="_blank"
147
+ >
148
+ GitHub
149
+ </a>
150
+ <button
151
+ id="themeBtn"
152
+ class="inline-flex items-center gap-2 rounded-2xl border border-black/10 bg-black/5 px-4 py-2 text-sm font-semibold text-slate-700 hover:bg-black/10 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:bg-white/10"
153
+ type="button"
154
+ >
155
+ <span id="themeIcon">☾</span>
156
+ <span class="hidden sm:inline">Theme</span>
157
+ </button>
158
+ </div>
159
+ </header>
160
+
161
+ <section class="mt-12 grid grid-cols-1 gap-10 lg:grid-cols-2 lg:items-center">
162
+ <div>
163
+ <div
164
+ class="inline-flex items-center gap-2 rounded-full border border-black/10 bg-black/5 px-4 py-2 text-xs font-bold tracking-widest text-slate-600 dark:border-white/10 dark:bg-white/5 dark:text-slate-300"
165
+ >
166
+ <span class="h-2 w-2 rounded-full bg-secondary animate-floaty"></span>
167
+ ZERO-DEPENDENCY • TYPESAFE • PRODUCTION-READY
168
+ </div>
169
+
170
+ <h1 class="mt-6 text-5xl md:text-6xl font-extrabold tracking-tight">
171
+ Build fast backends with
172
+ <span
173
+ class="bg-clip-text text-transparent bg-[linear-gradient(90deg,#10b981,#0ea5e9,#10b981)] bg-size-[200%_200%] animate-shimmer"
174
+ >ZinTrust</span
175
+ >
176
+ </h1>
177
+
178
+ <p class="mt-5 text-lg leading-relaxed text-slate-600 dark:text-slate-300">
179
+ A zero-dependency TypeScript framework built for high-performance APIs, clean
180
+ architecture, and microservices. Read the docs and ship.
181
+ </p>
182
+
183
+ <div class="mt-8 grid grid-cols-1 sm:grid-cols-3 gap-4">
184
+ <div
185
+ class="rounded-2xl border border-black/10 bg-black/5 p-4 dark:border-white/10 dark:bg-white/5"
186
+ >
187
+ <div class="text-xs font-bold text-slate-500 dark:text-slate-400">Runtime</div>
188
+ <div class="mt-1 font-semibold">Node http</div>
189
+ </div>
190
+ <div
191
+ class="rounded-2xl border border-black/10 bg-black/5 p-4 dark:border-white/10 dark:bg-white/5"
192
+ >
193
+ <div class="text-xs font-bold text-slate-500 dark:text-slate-400">Core</div>
194
+ <div class="mt-1 font-semibold">Zero deps</div>
195
+ </div>
196
+ <div
197
+ class="rounded-2xl border border-black/10 bg-black/5 p-4 dark:border-white/10 dark:bg-white/5"
198
+ >
199
+ <div class="text-xs font-bold text-slate-500 dark:text-slate-400">DX</div>
200
+ <div class="mt-1 font-semibold">ZinTrust CLI</div>
201
+ </div>
202
+ </div>
203
+
204
+ <div class="mt-10 flex flex-wrap gap-4">
205
+ <a
206
+ href="https://zintrust.com/doc/getting-started"
207
+ class="px-8 py-4 rounded-2xl bg-primary text-white font-bold text-lg hover:bg-primary/90 transition-all shadow-lg shadow-primary/20"
208
+ >
209
+ Start Reading
210
+ </a>
211
+ <a
212
+ href="https://github.com/ZinTrust/ZinTrust"
213
+ class="px-8 py-4 rounded-2xl border border-black/10 bg-black/5 dark:border-white/10 dark:bg-white/5 font-bold text-lg hover:bg-black/10 dark:hover:bg-white/10 transition-all"
214
+ target="_blank"
215
+ >
216
+ GitHub
217
+ </a>
218
+ </div>
219
+
220
+ <div class="mt-12">
221
+ <a href="https://zintrust.com/doc/getting-started" class="lang-card group block">
222
+ <div
223
+ class="lang-card-inner glow-primary rounded-3xl border border-black/10 bg-white/60 p-8 shadow-sm dark:border-white/10 dark:bg-white/5 glass"
224
+ >
225
+ <div class="flex items-center justify-between">
226
+ <div>
227
+ <div
228
+ class="text-xs font-bold tracking-widest text-slate-500 dark:text-slate-400"
229
+ >
230
+ DOCUMENTATION
231
+ </div>
232
+ <div class="mt-2 text-3xl font-bold">Start Reading</div>
233
+ <div class="mt-2 text-base text-slate-600 dark:text-slate-300">
234
+ Explore the zero-dependency TypeScript framework.
235
+ </div>
236
+ </div>
237
+ <div
238
+ class="h-16 w-16 rounded-2xl border border-primary/25 bg-primary/10 flex items-center justify-center text-primary"
239
+ >
240
+ <img
241
+ src="https://zintrust.com/zintrust.svg"
242
+ alt="ZinTrust Logo"
243
+ class="h-10 w-10"
244
+ />
245
+ </div>
246
+ </div>
247
+ <div class="mt-8 flex items-center gap-2 text-primary text-lg font-bold">
248
+ Open Documentation
249
+ <span class="transition-transform group-hover:translate-x-2">→</span>
250
+ </div>
251
+ </div>
252
+ </a>
253
+ </div>
254
+ </div>
255
+
256
+ <div class="relative">
257
+ <div
258
+ class="rounded-3xl border border-black/10 bg-white/60 shadow-sm dark:border-white/10 dark:bg-white/5 glass overflow-hidden"
259
+ >
260
+ <div
261
+ class="flex items-center justify-between px-5 py-4 border-b border-black/10 dark:border-white/10"
262
+ >
263
+ <div class="flex items-center gap-2">
264
+ <span class="h-3 w-3 rounded-full bg-red-500/60"></span>
265
+ <span class="h-3 w-3 rounded-full bg-amber-500/60"></span>
266
+ <span class="h-3 w-3 rounded-full bg-emerald-500/60"></span>
267
+ </div>
268
+ <div
269
+ class="text-[10px] font-mono font-bold tracking-widest text-slate-500 dark:text-slate-400"
270
+ id="terminalTitle"
271
+ >
272
+ TERMINAL — QUICKSTART
273
+ </div>
274
+ <button
275
+ id="copyBtn"
276
+ type="button"
277
+ class="rounded-xl border border-black/10 bg-black/5 px-3 py-1.5 text-xs font-bold text-slate-600 hover:bg-black/10 dark:border-white/10 dark:bg-white/5 dark:text-slate-300 dark:hover:bg-white/10"
278
+ >
279
+ Copy
280
+ </button>
281
+ </div>
282
+
283
+ <div class="px-5 pt-4 pb-2 flex gap-2">
284
+ <button
285
+ class="tab px-3 py-1.5 rounded-xl border border-black/10 bg-black/5 text-xs font-bold text-slate-700 dark:border-white/10 dark:bg-white/5 dark:text-slate-200"
286
+ data-script="quickstart"
287
+ type="button"
288
+ >
289
+ Setup
290
+ </button>
291
+ <button
292
+ class="tab px-3 py-1.5 rounded-xl border border-black/10 bg-black/5 text-xs font-bold text-slate-700 dark:border-white/10 dark:bg-white/5 dark:text-slate-200"
293
+ data-script="deploy"
294
+ type="button"
295
+ >
296
+ Deploy (Docker)
297
+ </button>
298
+ </div>
299
+
300
+ <div class="p-5 font-mono text-sm leading-relaxed">
301
+ <div class="text-slate-500 dark:text-slate-400">
302
+ $ <span id="typed"></span><span class="caret"></span>
303
+ </div>
304
+ <div class="mt-4 text-xs text-slate-500 dark:text-slate-400" id="hint"></div>
305
+ </div>
306
+ </div>
307
+
308
+ <div class="mt-6 grid grid-cols-1 sm:grid-cols-2 gap-4">
309
+ <div
310
+ class="rounded-2xl border border-black/10 bg-black/5 p-4 dark:border-white/10 dark:bg-white/5"
311
+ >
312
+ <div class="text-xs font-bold text-slate-500 dark:text-slate-400">Health</div>
313
+ <div class="mt-2 font-mono text-sm text-slate-700 dark:text-slate-200">
314
+ GET /health
315
+ </div>
316
+ </div>
317
+ <div
318
+ class="rounded-2xl border border-black/10 bg-black/5 p-4 dark:border-white/10 dark:bg-white/5"
319
+ >
320
+ <div class="text-xs font-bold text-slate-500 dark:text-slate-400">Debug</div>
321
+ <div class="mt-2 font-mono text-sm text-slate-700 dark:text-slate-200">
322
+ zin debug
323
+ </div>
324
+ </div>
325
+ </div>
326
+ </div>
327
+ </section>
328
+
329
+ <footer
330
+ class="mt-14 flex flex-col md:flex-row items-center justify-between gap-4 border-t border-black/10 pt-8 text-sm text-slate-500 dark:border-white/10 dark:text-slate-400"
331
+ >
332
+ <div>© <span id="year"></span> Zintrust Framework. All rights reserved.</div>
333
+ <div class="flex flex-wrap justify-center gap-x-5 gap-y-2 font-semibold">
334
+ <a
335
+ class="hover:text-slate-900 dark:hover:text-white"
336
+ href="https://zintrust.com/doc/getting-started"
337
+ >Docs</a
338
+ >
339
+ <a
340
+ class="hover:text-slate-900 dark:hover:text-white"
341
+ href="https://github.com/ZinTrust/ZinTrust"
342
+ target="_blank"
343
+ >GitHub</a
344
+ >
345
+ <a
346
+ class="hover:text-slate-900 dark:hover:text-white"
347
+ href="https://x.com/zintrust"
348
+ target="_blank"
349
+ >X</a
350
+ >
351
+ <a
352
+ class="hover:text-slate-900 dark:hover:text-white"
353
+ href="https://discord.gg/zintrust"
354
+ target="_blank"
355
+ >Discord</a
356
+ >
357
+ <a
358
+ class="hover:text-slate-900 dark:hover:text-white"
359
+ href="https://slack.zintrust.com"
360
+ target="_blank"
361
+ >Slack</a
362
+ >
363
+ <a
364
+ class="hover:text-slate-900 dark:hover:text-white"
365
+ href="https://linkedin.com/company/zintrust"
366
+ target="_blank"
367
+ >LinkedIn</a
368
+ >
369
+ </div>
370
+ <div class="mt-8 pt-8 border-t border-slate-200 dark:border-slate-800 text-center">
371
+ <p class="text-sm text-slate-500 dark:text-slate-400">
372
+ &copy; 2025 Zintrust Framework. All rights reserved.
373
+ </p>
374
+ </div>
375
+ </footer>
376
+ </div>
377
+ </main>
378
+
379
+ <script>
380
+ const STORAGE_KEY = 'ZinTrust-docs-theme';
381
+ const themeBtn = document.getElementById('themeBtn');
382
+ const themeIcon = document.getElementById('themeIcon');
383
+ const htmlEl = document.documentElement;
384
+
385
+ function applyTheme(theme) {
386
+ const useDark = theme === 'dark';
387
+ htmlEl.classList.toggle('dark', useDark);
388
+ themeIcon.textContent = useDark ? '☀' : '☾';
389
+ }
390
+
391
+ function getPreferredTheme() {
392
+ const saved = localStorage.getItem(STORAGE_KEY);
393
+ if (saved === 'dark' || saved === 'light') return saved;
394
+ return globalThis.matchMedia &&
395
+ globalThis.matchMedia('(prefers-color-scheme: dark)').matches
396
+ ? 'dark'
397
+ : 'light';
398
+ }
399
+
400
+ function toggleTheme() {
401
+ const next = htmlEl.classList.contains('dark') ? 'light' : 'dark';
402
+ localStorage.setItem(STORAGE_KEY, next);
403
+ applyTheme(next);
404
+ }
405
+
406
+ applyTheme(getPreferredTheme());
407
+ themeBtn.addEventListener('click', toggleTheme);
408
+
409
+ document.getElementById('year').textContent = String(new Date().getFullYear());
410
+
411
+ const scripts = {
412
+ quickstart: {
413
+ title: 'TERMINAL — QUICKSTART',
414
+ hint: 'Tip: run the health check to verify your service is up.',
415
+ lines: [
416
+ 'npm install',
417
+ 'npm run build',
418
+ 'npm link',
419
+ 'zin --version',
420
+ 'zin new my-api',
421
+ 'cd my-api',
422
+ 'npm run dev',
423
+ 'curl http://localhost:3000/health',
424
+ 'zin debug',
425
+ ],
426
+ },
427
+ deploy: {
428
+ title: 'TERMINAL — DEPLOY',
429
+ hint: 'Tip: bake an image, run it, then hit /health for confidence.',
430
+ lines: [
431
+ 'docker build -t my-api:latest .',
432
+ 'docker run --rm -p 3000:3000 my-api:latest',
433
+ 'curl http://localhost:3000/health',
434
+ ],
435
+ },
436
+ };
437
+
438
+ const typedEl = document.getElementById('typed');
439
+ const hintEl = document.getElementById('hint');
440
+ const terminalTitleEl = document.getElementById('terminalTitle');
441
+ const tabs = Array.from(document.querySelectorAll('.tab'));
442
+ const copyBtn = document.getElementById('copyBtn');
443
+
444
+ let activeKey = 'quickstart';
445
+ let lineIndex = 0;
446
+ let charIndex = 0;
447
+ let isDeleting = false;
448
+ let timerId = null;
449
+
450
+ function stopTyping() {
451
+ if (timerId !== null) {
452
+ globalThis.clearTimeout(timerId);
453
+ timerId = null;
454
+ }
455
+ }
456
+
457
+ async function copyText(text) {
458
+ if (navigator.clipboard && globalThis.isSecureContext === true) {
459
+ await navigator.clipboard.writeText(text);
460
+ return;
461
+ }
462
+
463
+ const textarea = document.createElement('textarea');
464
+ textarea.value = text;
465
+ textarea.setAttribute('readonly', '');
466
+ textarea.style.position = 'fixed';
467
+ textarea.style.left = '-9999px';
468
+ textarea.style.top = '0';
469
+ document.body.appendChild(textarea);
470
+ textarea.select();
471
+ const ok = document.execCommand('copy');
472
+ textarea.remove();
473
+ if (!ok) throw new Error('copy failed');
474
+ }
475
+
476
+ function setActiveTab(key) {
477
+ stopTyping();
478
+ activeKey = key;
479
+ lineIndex = 0;
480
+ charIndex = 0;
481
+ isDeleting = false;
482
+ typedEl.textContent = '';
483
+ terminalTitleEl.textContent = scripts[key].title;
484
+ hintEl.textContent = scripts[key].hint;
485
+ tabs.forEach((t) => t.classList.toggle('tab-active', t.dataset.script === key));
486
+
487
+ step();
488
+ }
489
+
490
+ function step() {
491
+ const { lines } = scripts[activeKey];
492
+ const full = lines[lineIndex % lines.length];
493
+
494
+ const targetLen = isDeleting ? charIndex - 1 : charIndex + 1;
495
+ charIndex = Math.max(0, Math.min(full.length, targetLen));
496
+ typedEl.textContent = full.slice(0, charIndex);
497
+
498
+ let delay = isDeleting ? 18 : 28;
499
+
500
+ if (!isDeleting && charIndex === full.length) {
501
+ delay = 850;
502
+ isDeleting = true;
503
+ } else if (isDeleting && charIndex === 0) {
504
+ isDeleting = false;
505
+ lineIndex++;
506
+ delay = 260;
507
+ }
508
+
509
+ timerId = globalThis.setTimeout(step, delay);
510
+ }
511
+
512
+ tabs.forEach((t) =>
513
+ t.addEventListener('click', () => {
514
+ const key = t.dataset.script;
515
+ if (!key || !(key in scripts) || key === activeKey) return;
516
+ setActiveTab(key);
517
+ })
518
+ );
519
+
520
+ copyBtn.addEventListener('click', async () => {
521
+ const text = scripts[activeKey].lines.join('\n');
522
+ try {
523
+ await copyText(text);
524
+ copyBtn.textContent = 'Copied';
525
+ globalThis.setTimeout(() => (copyBtn.textContent = 'Copy'), 900);
526
+ } catch {
527
+ copyBtn.textContent = 'Copy failed';
528
+ globalThis.setTimeout(() => (copyBtn.textContent = 'Copy'), 1100);
529
+ }
530
+ });
531
+
532
+ setActiveTab('quickstart');
533
+ </script>
534
+ </body>
535
+ </html>
@@ -1 +1 @@
1
- {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../src/boot/Application.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAoB,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAmB,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,kBAAkB,CAAC;AAMxD,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,IAAI,OAAO,CAAC;IACpB,aAAa,IAAI,OAAO,CAAC;IACzB,YAAY,IAAI,OAAO,CAAC;IACxB,SAAS,IAAI,OAAO,CAAC;IACrB,cAAc,IAAI,MAAM,CAAC;IACzB,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,iBAAiB,CAAC;IAClC,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,WAAW,IAAI,MAAM,CAAC;CACvB;AAqJD;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;sBACe,MAAM,GAAG,YAAY;EAwCvC,CAAC;AAEH,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../src/boot/Application.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAoB,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAmB,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,kBAAkB,CAAC;AAOxD,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,QAAQ,IAAI,OAAO,CAAC;IACpB,aAAa,IAAI,OAAO,CAAC;IACzB,YAAY,IAAI,OAAO,CAAC;IACxB,SAAS,IAAI,OAAO,CAAC;IACrB,cAAc,IAAI,MAAM,CAAC;IACzB,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,iBAAiB,CAAC;IAClC,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,WAAW,IAAI,MAAM,CAAC;CACvB;AA2LD;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB;;OAEG;sBACe,MAAM,GAAG,YAAY;EAmDvC,CAAC;AAEH,eAAe,WAAW,CAAC"}
@@ -2,11 +2,14 @@
2
2
  * Application - Framework core entry point
3
3
  * Handles application lifecycle, booting, and environment
4
4
  */
5
+ import { appConfig } from '../config';
5
6
  import { ServiceContainer } from '../container/ServiceContainer';
7
+ import { StartupHealthChecks } from '../health/StartupHealthChecks';
6
8
  import { MiddlewareStack } from '../middleware/MiddlewareStack';
7
9
  import { Router } from '../routing/Router';
8
- import { Env } from '../config/env';
10
+ import { FeatureFlags } from '../config/features';
9
11
  import { Logger } from '../config/logger';
12
+ import { StartupConfigValidator } from '../config/StartupConfigValidator';
10
13
  import * as path from '../node-singletons/path';
11
14
  import { pathToFileURL } from '../node-singletons/url';
12
15
  const ShutdownManager = Object.freeze({
@@ -89,11 +92,41 @@ const registerRoutes = async (resolvedBasePath, router) => {
89
92
  Logger.error('Failed to register routes:', error);
90
93
  }
91
94
  };
95
+ const initializeArtifactDirectories = async (resolvedBasePath) => {
96
+ if (resolvedBasePath === '')
97
+ return;
98
+ if (typeof process === 'undefined')
99
+ return;
100
+ let nodeFs;
101
+ try {
102
+ nodeFs = await import('../node-singletons/fs');
103
+ }
104
+ catch {
105
+ return;
106
+ }
107
+ const dirs = ['logs', 'storage', 'tmp'];
108
+ for (const dir of dirs) {
109
+ const fullPath = path.join(resolvedBasePath, dir);
110
+ try {
111
+ if (!nodeFs.existsSync(fullPath)) {
112
+ nodeFs.mkdirSync(fullPath, { recursive: true });
113
+ Logger.info(`✓ Created directory: ${dir}`);
114
+ }
115
+ }
116
+ catch (error) {
117
+ Logger.warn(`Failed to create ${dir} directory`, error);
118
+ }
119
+ }
120
+ };
92
121
  const createLifecycle = (params) => {
93
122
  const boot = async () => {
94
123
  if (params.getBooted())
95
124
  return;
96
125
  Logger.info(`🚀 Booting Zintrust Application in ${params.environment} mode...`);
126
+ StartupConfigValidator.assertValid();
127
+ FeatureFlags.initialize();
128
+ await StartupHealthChecks.assertHealthy();
129
+ await initializeArtifactDirectories(params.resolvedBasePath);
97
130
  await registerRoutes(params.resolvedBasePath, params.router);
98
131
  // Register service providers
99
132
  // Bootstrap services
@@ -123,7 +156,7 @@ export const Application = Object.freeze({
123
156
  create(basePath) {
124
157
  const resolvedBasePath = resolveBasePath(basePath);
125
158
  const joinFromBase = makeJoinFromBase(resolvedBasePath);
126
- const environment = Env.get('NODE_ENV', 'development');
159
+ const environment = appConfig.environment;
127
160
  const container = ServiceContainer.create();
128
161
  const router = Router.createRouter();
129
162
  const middlewareStack = MiddlewareStack.create();
@@ -131,6 +164,16 @@ export const Application = Object.freeze({
131
164
  let booted = false;
132
165
  registerCorePaths(container, resolvedBasePath, joinFromBase);
133
166
  registerCoreInstances({ container, environment, router, middlewareStack, shutdownManager });
167
+ // Register framework-level shutdown hooks for long-lived resources
168
+ // ConnectionManager may not be initialized; shutdownIfInitialized is safe
169
+ // Use dynamic import without top-level await to avoid transforming the module into an async module
170
+ import('../orm/ConnectionManager')
171
+ .then(({ ConnectionManager }) => {
172
+ shutdownManager.add(async () => ConnectionManager.shutdownIfInitialized());
173
+ })
174
+ .catch(() => {
175
+ /* ignore import failures in restrictive runtimes */
176
+ });
134
177
  const { boot, shutdown } = createLifecycle({
135
178
  environment,
136
179
  resolvedBasePath,
@@ -147,7 +190,7 @@ export const Application = Object.freeze({
147
190
  isBooted: () => booted,
148
191
  isDevelopment: () => environment === 'development',
149
192
  isProduction: () => environment === 'production',
150
- isTesting: () => environment === 'testing' || environment === 'test',
193
+ isTesting: () => environment === 'testing',
151
194
  getEnvironment: () => environment,
152
195
  getRouter: () => router,
153
196
  getContainer: () => container,
@@ -1 +1 @@
1
- {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../../src/boot/Server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQjD,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAK9C,MAAM,WAAW,OAAO;IACtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;CAC9B;AA4ND;;;GAGG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;gBACS,YAAY,SAAS,MAAM,SAAS,MAAM,GAAG,OAAO;EA8BhE,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../../src/boot/Server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AASjD,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAI9C,MAAM,WAAW,OAAO;IACtB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;CAC9B;AA2ND;;;GAGG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;gBACS,YAAY,SAAS,MAAM,SAAS,MAAM,GAAG,OAAO;EA8BhE,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -2,6 +2,7 @@
2
2
  * Server - HTTP Server implementation
3
3
  * Uses Node.js built-in HTTP server with no external dependencies
4
4
  */
5
+ import { esmDirname } from '../common/index';
5
6
  import { appConfig } from '../config/app';
6
7
  import { HTTP_HEADERS, MIME_TYPES } from '../config/constants';
7
8
  import { Logger } from '../config/logger';
@@ -11,7 +12,6 @@ import { Response } from '../http/Response';
11
12
  import * as fs from '../node-singletons/fs';
12
13
  import * as http from '../node-singletons/http';
13
14
  import * as path from '../node-singletons/path';
14
- import { fileURLToPath } from '../node-singletons/url';
15
15
  import { Router } from '../routing/Router';
16
16
  const MIME_TYPES_MAP = {
17
17
  '.html': MIME_TYPES.HTML,
@@ -43,8 +43,7 @@ const findPackageRoot = (startDir) => {
43
43
  return startDir;
44
44
  };
45
45
  const getFrameworkPublicRoots = () => {
46
- const thisFile = fileURLToPath(import.meta.url);
47
- const thisDir = path.dirname(thisFile);
46
+ const thisDir = esmDirname(import.meta.url);
48
47
  const packageRoot = findPackageRoot(thisDir);
49
48
  return [
50
49
  path.join(packageRoot, 'dist/public'),
@@ -53,7 +52,7 @@ const getFrameworkPublicRoots = () => {
53
52
  ];
54
53
  };
55
54
  const getDocsPublicRoot = () => {
56
- const isProduction = process.env.NODE_ENV === 'production';
55
+ const isProduction = appConfig.isProduction();
57
56
  // First try app-local roots (developer app override), then fall back to framework-shipped assets.
58
57
  const appRoots = isProduction
59
58
  ? [path.join(process.cwd(), 'public')]