@zintrust/core 0.1.19 → 0.1.21

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 (528) hide show
  1. package/README.md +10 -10
  2. package/bin/zintrust-main.d.ts.map +1 -1
  3. package/bin/zintrust-main.js +9 -0
  4. package/package.json +3 -2
  5. package/public/error-pages/404.html +145 -0
  6. package/public/error-pages/500.html +266 -0
  7. package/public/error-pages/error.css +628 -0
  8. package/public/error-pages/error.js +428 -0
  9. package/public/zintrust.svg +30 -0
  10. package/routes/api.d.ts.map +1 -1
  11. package/routes/api.js +41 -17
  12. package/routes/metrics.d.ts +9 -0
  13. package/routes/metrics.d.ts.map +1 -0
  14. package/routes/metrics.js +20 -0
  15. package/routes/openapi.d.ts +9 -0
  16. package/routes/openapi.d.ts.map +1 -0
  17. package/routes/openapi.js +76 -0
  18. package/src/boot/Application.d.ts +2 -2
  19. package/src/boot/Application.d.ts.map +1 -1
  20. package/src/boot/Application.js +66 -13
  21. package/src/boot/Server.d.ts +3 -2
  22. package/src/boot/Server.d.ts.map +1 -1
  23. package/src/boot/Server.js +39 -165
  24. package/src/boot/bootstrap.js +2 -0
  25. package/src/cache/Cache.d.ts +1 -1
  26. package/src/cache/Cache.d.ts.map +1 -1
  27. package/src/cache/CacheDriver.d.ts +4 -0
  28. package/src/cache/CacheDriver.d.ts.map +1 -1
  29. package/src/cache/drivers/KVDriver.d.ts +1 -1
  30. package/src/cache/drivers/KVDriver.d.ts.map +1 -1
  31. package/src/cache/drivers/MemoryDriver.d.ts +1 -1
  32. package/src/cache/drivers/MemoryDriver.d.ts.map +1 -1
  33. package/src/cache/drivers/MemoryDriver.js +16 -0
  34. package/src/cache/drivers/MongoDriver.d.ts +1 -1
  35. package/src/cache/drivers/MongoDriver.d.ts.map +1 -1
  36. package/src/cache/drivers/RedisDriver.d.ts +1 -1
  37. package/src/cache/drivers/RedisDriver.d.ts.map +1 -1
  38. package/src/cli/CLI.d.ts.map +1 -1
  39. package/src/cli/CLI.js +10 -4
  40. package/src/cli/commands/AddCommand.d.ts +2 -2
  41. package/src/cli/commands/AddCommand.d.ts.map +1 -1
  42. package/src/cli/commands/AddCommand.js +135 -58
  43. package/src/cli/commands/ConfigCommand.d.ts +1 -1
  44. package/src/cli/commands/ConfigCommand.d.ts.map +1 -1
  45. package/src/cli/commands/CreateCommand.d.ts +15 -0
  46. package/src/cli/commands/CreateCommand.d.ts.map +1 -0
  47. package/src/cli/commands/CreateCommand.js +143 -0
  48. package/src/cli/commands/D1MigrateCommand.d.ts +1 -1
  49. package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
  50. package/src/cli/commands/D1MigrateCommand.js +16 -20
  51. package/src/cli/commands/DbSeedCommand.d.ts +9 -0
  52. package/src/cli/commands/DbSeedCommand.d.ts.map +1 -0
  53. package/src/cli/commands/DbSeedCommand.js +171 -0
  54. package/src/cli/commands/DebugCommand.d.ts +1 -1
  55. package/src/cli/commands/DebugCommand.d.ts.map +1 -1
  56. package/src/cli/commands/FixCommand.d.ts +1 -1
  57. package/src/cli/commands/FixCommand.d.ts.map +1 -1
  58. package/src/cli/commands/JwtDevCommand.d.ts +8 -0
  59. package/src/cli/commands/JwtDevCommand.d.ts.map +1 -0
  60. package/src/cli/commands/JwtDevCommand.js +114 -0
  61. package/src/cli/commands/KeyGenerateCommand.d.ts +1 -1
  62. package/src/cli/commands/KeyGenerateCommand.d.ts.map +1 -1
  63. package/src/cli/commands/LogsCommand.d.ts +2 -2
  64. package/src/cli/commands/LogsCommand.d.ts.map +1 -1
  65. package/src/cli/commands/LogsCommand.js +36 -2
  66. package/src/cli/commands/MakeMailTemplateCommand.d.ts +1 -1
  67. package/src/cli/commands/MakeMailTemplateCommand.d.ts.map +1 -1
  68. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts +1 -1
  69. package/src/cli/commands/MakeNotificationTemplateCommand.d.ts.map +1 -1
  70. package/src/cli/commands/MigrateCommand.d.ts +1 -1
  71. package/src/cli/commands/MigrateCommand.d.ts.map +1 -1
  72. package/src/cli/commands/MigrateCommand.js +324 -35
  73. package/src/cli/commands/NewCommand.d.ts +1 -1
  74. package/src/cli/commands/NewCommand.d.ts.map +1 -1
  75. package/src/cli/commands/NewCommand.js +12 -4
  76. package/src/cli/commands/PluginCommand.d.ts +1 -1
  77. package/src/cli/commands/PluginCommand.d.ts.map +1 -1
  78. package/src/cli/commands/PrepareCommand.d.ts +1 -1
  79. package/src/cli/commands/PrepareCommand.d.ts.map +1 -1
  80. package/src/cli/commands/QACommand.d.ts +2 -2
  81. package/src/cli/commands/QACommand.d.ts.map +1 -1
  82. package/src/cli/commands/RoutesCommand.d.ts +10 -0
  83. package/src/cli/commands/RoutesCommand.d.ts.map +1 -0
  84. package/src/cli/commands/RoutesCommand.js +242 -0
  85. package/src/cli/commands/SimulateCommand.d.ts +1 -1
  86. package/src/cli/commands/SimulateCommand.d.ts.map +1 -1
  87. package/src/cli/commands/index.d.ts +3 -0
  88. package/src/cli/commands/index.d.ts.map +1 -1
  89. package/src/cli/commands/index.js +3 -0
  90. package/src/cli/config/ConfigManager.d.ts +1 -1
  91. package/src/cli/config/ConfigManager.d.ts.map +1 -1
  92. package/src/cli/config/ConfigValidator.d.ts +1 -1
  93. package/src/cli/config/ConfigValidator.d.ts.map +1 -1
  94. package/src/cli/config/ConfigValidator.js +1 -1
  95. package/src/cli/d1/D1SqlMigrations.d.ts +20 -0
  96. package/src/cli/d1/D1SqlMigrations.d.ts.map +1 -0
  97. package/src/cli/d1/D1SqlMigrations.js +229 -0
  98. package/src/cli/d1/WranglerConfig.d.ts +4 -0
  99. package/src/cli/d1/WranglerConfig.d.ts.map +1 -0
  100. package/src/cli/d1/WranglerConfig.js +122 -0
  101. package/src/cli/d1/WranglerD1.d.ts +11 -0
  102. package/src/cli/d1/WranglerD1.d.ts.map +1 -0
  103. package/src/cli/d1/WranglerD1.js +16 -0
  104. package/src/cli/scaffolding/ControllerGenerator.d.ts.map +1 -1
  105. package/src/cli/scaffolding/ControllerGenerator.js +76 -26
  106. package/src/cli/scaffolding/FactoryGenerator.d.ts.map +1 -1
  107. package/src/cli/scaffolding/FactoryGenerator.js +3 -1
  108. package/src/cli/scaffolding/GovernanceScaffolder.d.ts +23 -0
  109. package/src/cli/scaffolding/GovernanceScaffolder.d.ts.map +1 -0
  110. package/src/cli/scaffolding/GovernanceScaffolder.js +327 -0
  111. package/src/cli/scaffolding/MigrationGenerator.d.ts +10 -0
  112. package/src/cli/scaffolding/MigrationGenerator.d.ts.map +1 -1
  113. package/src/cli/scaffolding/MigrationGenerator.js +137 -51
  114. package/src/cli/scaffolding/ModelGenerator.js +1 -1
  115. package/src/cli/scaffolding/ProjectScaffolder.d.ts.map +1 -1
  116. package/src/cli/scaffolding/ProjectScaffolder.js +36 -4
  117. package/src/cli/scaffolding/RouteGenerator.d.ts.map +1 -1
  118. package/src/cli/scaffolding/RouteGenerator.js +79 -43
  119. package/src/cli/scaffolding/SeederGenerator.d.ts +5 -0
  120. package/src/cli/scaffolding/SeederGenerator.d.ts.map +1 -1
  121. package/src/cli/scaffolding/SeederGenerator.js +63 -15
  122. package/src/cli/scaffolding/ServiceScaffolder.d.ts.map +1 -1
  123. package/src/cli/scaffolding/ServiceScaffolder.js +28 -7
  124. package/src/cli/scaffolding/index.d.ts +2 -0
  125. package/src/cli/scaffolding/index.d.ts.map +1 -1
  126. package/src/cli/scaffolding/index.js +1 -0
  127. package/src/common/index.d.ts +8 -0
  128. package/src/common/index.d.ts.map +1 -1
  129. package/src/common/index.js +28 -0
  130. package/src/common/utility.d.ts +38 -0
  131. package/src/common/utility.d.ts.map +1 -0
  132. package/src/common/utility.js +101 -0
  133. package/src/config/FileLogWriter.d.ts +2 -1
  134. package/src/config/FileLogWriter.d.ts.map +1 -1
  135. package/src/config/FileLogWriter.js +83 -2
  136. package/src/config/app.d.ts.map +1 -1
  137. package/src/config/app.js +3 -1
  138. package/src/config/broadcast.d.ts +14 -28
  139. package/src/config/broadcast.d.ts.map +1 -1
  140. package/src/config/broadcast.js +69 -35
  141. package/src/config/cache.d.ts +13 -45
  142. package/src/config/cache.d.ts.map +1 -1
  143. package/src/config/cache.js +69 -25
  144. package/src/config/cloudflare.d.ts +1 -1
  145. package/src/config/cloudflare.d.ts.map +1 -1
  146. package/src/config/database.d.ts +22 -64
  147. package/src/config/database.d.ts.map +1 -1
  148. package/src/config/database.js +191 -37
  149. package/src/config/env.d.ts +12 -0
  150. package/src/config/env.d.ts.map +1 -1
  151. package/src/config/env.js +14 -0
  152. package/src/config/index.d.ts +33 -137
  153. package/src/config/index.d.ts.map +1 -1
  154. package/src/config/logging/KvLogger.js +1 -1
  155. package/src/config/logging/SlackLogger.js +2 -2
  156. package/src/config/mail.d.ts +19 -55
  157. package/src/config/mail.d.ts.map +1 -1
  158. package/src/config/mail.js +63 -21
  159. package/src/config/middleware.d.ts +44 -1
  160. package/src/config/middleware.d.ts.map +1 -1
  161. package/src/config/middleware.js +157 -5
  162. package/src/config/notification.d.ts +14 -27
  163. package/src/config/notification.d.ts.map +1 -1
  164. package/src/config/notification.js +82 -36
  165. package/src/config/queue.d.ts +21 -51
  166. package/src/config/queue.d.ts.map +1 -1
  167. package/src/config/queue.js +72 -27
  168. package/src/config/security.d.ts +1 -1
  169. package/src/config/security.js +1 -1
  170. package/src/config/storage.d.ts +27 -34
  171. package/src/config/storage.d.ts.map +1 -1
  172. package/src/config/storage.js +97 -56
  173. package/src/config/type.d.ts +13 -2
  174. package/src/config/type.d.ts.map +1 -1
  175. package/src/events/EventDispatcher.d.ts.map +1 -1
  176. package/src/events/EventDispatcher.js +6 -4
  177. package/src/exceptions/ZintrustError.d.ts +7 -0
  178. package/src/exceptions/ZintrustError.d.ts.map +1 -1
  179. package/src/exceptions/ZintrustError.js +56 -0
  180. package/src/features/Auth.d.ts +1 -1
  181. package/src/features/Auth.d.ts.map +1 -1
  182. package/src/features/Auth.js +3 -3
  183. package/src/features/Queue.js +1 -1
  184. package/src/functions/cloudflare.d.ts.map +1 -1
  185. package/src/functions/cloudflare.js +3 -14
  186. package/src/functions/deno.d.ts.map +1 -1
  187. package/src/functions/deno.js +3 -14
  188. package/src/functions/lambda.d.ts.map +1 -1
  189. package/src/functions/lambda.js +3 -14
  190. package/src/health/StartupHealthChecks.js +1 -1
  191. package/src/http/Controller.d.ts +2 -2
  192. package/src/http/Controller.d.ts.map +1 -1
  193. package/src/http/FileUpload.d.ts +68 -0
  194. package/src/http/FileUpload.d.ts.map +1 -0
  195. package/src/http/FileUpload.js +120 -0
  196. package/src/http/Kernel.d.ts +5 -5
  197. package/src/http/Kernel.d.ts.map +1 -1
  198. package/src/http/Kernel.js +139 -23
  199. package/src/http/Request.d.ts +20 -1
  200. package/src/http/Request.d.ts.map +1 -1
  201. package/src/http/Request.js +23 -0
  202. package/src/http/RequestContext.d.ts +6 -0
  203. package/src/http/RequestContext.d.ts.map +1 -1
  204. package/src/http/RequestContext.js +77 -1
  205. package/src/http/Response.d.ts +1 -1
  206. package/src/http/Response.d.ts.map +1 -1
  207. package/src/http/ValidationHelper.d.ts +78 -0
  208. package/src/http/ValidationHelper.d.ts.map +1 -0
  209. package/src/http/ValidationHelper.js +121 -0
  210. package/src/http/error-pages/ErrorPageRenderer.d.ts +17 -0
  211. package/src/http/error-pages/ErrorPageRenderer.d.ts.map +1 -0
  212. package/src/http/error-pages/ErrorPageRenderer.js +88 -0
  213. package/src/http/middleware/BodyParsingMiddleware.d.ts +12 -0
  214. package/src/http/middleware/BodyParsingMiddleware.d.ts.map +1 -0
  215. package/src/http/middleware/BodyParsingMiddleware.js +251 -0
  216. package/src/http/middleware/FileUploadMiddleware.d.ts +12 -0
  217. package/src/http/middleware/FileUploadMiddleware.d.ts.map +1 -0
  218. package/src/http/middleware/FileUploadMiddleware.js +74 -0
  219. package/src/http/parsers/BodyParsers.d.ts +32 -0
  220. package/src/http/parsers/BodyParsers.d.ts.map +1 -0
  221. package/src/http/parsers/BodyParsers.js +159 -0
  222. package/src/http/parsers/MultipartParser.d.ts +33 -0
  223. package/src/http/parsers/MultipartParser.d.ts.map +1 -0
  224. package/src/http/parsers/MultipartParser.js +156 -0
  225. package/src/http/parsers/MultipartParserRegistry.d.ts +34 -0
  226. package/src/http/parsers/MultipartParserRegistry.d.ts.map +1 -0
  227. package/src/http/parsers/MultipartParserRegistry.js +20 -0
  228. package/src/http/validated.d.ts +12 -0
  229. package/src/http/validated.d.ts.map +1 -0
  230. package/src/http/validated.js +41 -0
  231. package/src/index.d.ts +73 -12
  232. package/src/index.d.ts.map +1 -1
  233. package/src/index.js +60 -5
  234. package/src/microservices/PostgresAdapter.d.ts.map +1 -1
  235. package/src/microservices/PostgresAdapter.js +0 -1
  236. package/src/microservices/RequestTracingMiddleware.d.ts +2 -2
  237. package/src/microservices/RequestTracingMiddleware.d.ts.map +1 -1
  238. package/src/microservices/RequestTracingMiddleware.js +3 -0
  239. package/src/microservices/ServiceAuthMiddleware.d.ts +2 -2
  240. package/src/microservices/ServiceAuthMiddleware.d.ts.map +1 -1
  241. package/src/middleware/AuthMiddleware.d.ts +10 -0
  242. package/src/middleware/AuthMiddleware.d.ts.map +1 -0
  243. package/src/middleware/AuthMiddleware.js +16 -0
  244. package/src/middleware/CsrfMiddleware.d.ts +11 -1
  245. package/src/middleware/CsrfMiddleware.d.ts.map +1 -1
  246. package/src/middleware/CsrfMiddleware.js +33 -0
  247. package/src/middleware/JwtAuthMiddleware.d.ts +11 -0
  248. package/src/middleware/JwtAuthMiddleware.d.ts.map +1 -0
  249. package/src/middleware/JwtAuthMiddleware.js +73 -0
  250. package/src/middleware/LoggingMiddleware.d.ts.map +1 -1
  251. package/src/middleware/LoggingMiddleware.js +8 -3
  252. package/src/middleware/MiddlewareStack.d.ts +2 -2
  253. package/src/middleware/MiddlewareStack.d.ts.map +1 -1
  254. package/src/middleware/RateLimiter.d.ts +2 -2
  255. package/src/middleware/RateLimiter.d.ts.map +1 -1
  256. package/src/middleware/SanitizeBodyMiddleware.d.ts +12 -0
  257. package/src/middleware/SanitizeBodyMiddleware.d.ts.map +1 -0
  258. package/src/middleware/SanitizeBodyMiddleware.js +31 -0
  259. package/src/middleware/SecurityMiddleware.d.ts +1 -1
  260. package/src/middleware/SecurityMiddleware.d.ts.map +1 -1
  261. package/src/middleware/SessionMiddleware.d.ts +1 -1
  262. package/src/middleware/SessionMiddleware.d.ts.map +1 -1
  263. package/src/middleware/ValidationMiddleware.d.ts +25 -0
  264. package/src/middleware/ValidationMiddleware.d.ts.map +1 -0
  265. package/src/middleware/ValidationMiddleware.js +251 -0
  266. package/src/migrations/MigrationDiscovery.d.ts +5 -0
  267. package/src/migrations/MigrationDiscovery.d.ts.map +1 -0
  268. package/src/migrations/MigrationDiscovery.js +16 -0
  269. package/src/migrations/MigrationLoader.d.ts +5 -0
  270. package/src/migrations/MigrationLoader.d.ts.map +1 -0
  271. package/src/migrations/MigrationLoader.js +43 -0
  272. package/src/migrations/MigrationLock.d.ts +4 -0
  273. package/src/migrations/MigrationLock.d.ts.map +1 -0
  274. package/src/migrations/MigrationLock.js +33 -0
  275. package/src/migrations/Migrator.d.ts +23 -0
  276. package/src/migrations/Migrator.d.ts.map +1 -0
  277. package/src/migrations/Migrator.js +4 -0
  278. package/src/migrations/MigratorFactory.d.ts +25 -0
  279. package/src/migrations/MigratorFactory.d.ts.map +1 -0
  280. package/src/migrations/MigratorFactory.js +339 -0
  281. package/src/migrations/schema/Blueprint.d.ts +5 -0
  282. package/src/migrations/schema/Blueprint.d.ts.map +1 -0
  283. package/src/migrations/schema/Blueprint.js +189 -0
  284. package/src/migrations/schema/Schema.d.ts +8 -0
  285. package/src/migrations/schema/Schema.d.ts.map +1 -0
  286. package/src/migrations/schema/Schema.js +141 -0
  287. package/src/migrations/schema/SchemaCompiler.d.ts +20 -0
  288. package/src/migrations/schema/SchemaCompiler.d.ts.map +1 -0
  289. package/src/migrations/schema/SchemaCompiler.js +262 -0
  290. package/src/migrations/schema/index.d.ts +5 -0
  291. package/src/migrations/schema/index.d.ts.map +1 -0
  292. package/src/migrations/schema/index.js +3 -0
  293. package/src/migrations/schema/types.d.ts +86 -0
  294. package/src/migrations/schema/types.d.ts.map +1 -0
  295. package/src/migrations/schema/types.js +1 -0
  296. package/src/migrations/types.d.ts +45 -0
  297. package/src/migrations/types.d.ts.map +1 -0
  298. package/src/migrations/types.js +1 -0
  299. package/src/node-singletons/crypto.d.ts +1 -1
  300. package/src/node-singletons/crypto.d.ts.map +1 -1
  301. package/src/node-singletons/crypto.js +1 -1
  302. package/src/node-singletons/fs.d.ts +2 -2
  303. package/src/node-singletons/fs.d.ts.map +1 -1
  304. package/src/node-singletons/fs.js +1 -1
  305. package/src/node-singletons/util.d.ts +6 -0
  306. package/src/node-singletons/util.d.ts.map +1 -0
  307. package/src/node-singletons/util.js +5 -0
  308. package/src/node.d.ts +3 -1
  309. package/src/node.d.ts.map +1 -1
  310. package/src/node.js +6 -2
  311. package/src/observability/OpenTelemetry.d.ts +62 -0
  312. package/src/observability/OpenTelemetry.d.ts.map +1 -0
  313. package/src/observability/OpenTelemetry.js +167 -0
  314. package/src/observability/PrometheusMetrics.d.ts +25 -0
  315. package/src/observability/PrometheusMetrics.d.ts.map +1 -0
  316. package/src/observability/PrometheusMetrics.js +114 -0
  317. package/src/openapi/OpenApiGenerator.d.ts +68 -0
  318. package/src/openapi/OpenApiGenerator.d.ts.map +1 -0
  319. package/src/openapi/OpenApiGenerator.js +287 -0
  320. package/src/orm/Database.d.ts +5 -2
  321. package/src/orm/Database.d.ts.map +1 -1
  322. package/src/orm/Database.js +219 -63
  323. package/src/orm/DatabaseAdapter.d.ts +14 -0
  324. package/src/orm/DatabaseAdapter.d.ts.map +1 -1
  325. package/src/orm/DatabaseAdapterRegistry.d.ts.map +1 -1
  326. package/src/orm/DatabaseAdapterRegistry.js +3 -1
  327. package/src/orm/DatabaseRuntimeRegistration.d.ts.map +1 -1
  328. package/src/orm/DatabaseRuntimeRegistration.js +12 -0
  329. package/src/orm/Model.d.ts +30 -2
  330. package/src/orm/Model.d.ts.map +1 -1
  331. package/src/orm/Model.js +255 -62
  332. package/src/orm/QueryBuilder.d.ts +22 -1
  333. package/src/orm/QueryBuilder.d.ts.map +1 -1
  334. package/src/orm/QueryBuilder.js +406 -99
  335. package/src/orm/Relationships.d.ts +7 -1
  336. package/src/orm/Relationships.d.ts.map +1 -1
  337. package/src/orm/Relationships.js +18 -0
  338. package/src/orm/SchemaCompiler.d.ts +9 -0
  339. package/src/orm/SchemaCompiler.d.ts.map +1 -0
  340. package/src/orm/SchemaCompiler.js +145 -0
  341. package/src/orm/adapters/D1Adapter.d.ts +1 -1
  342. package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
  343. package/src/orm/adapters/MySQLAdapter.d.ts +1 -1
  344. package/src/orm/adapters/MySQLAdapter.d.ts.map +1 -1
  345. package/src/orm/adapters/MySQLAdapter.js +88 -69
  346. package/src/orm/adapters/PostgreSQLAdapter.d.ts +1 -1
  347. package/src/orm/adapters/PostgreSQLAdapter.d.ts.map +1 -1
  348. package/src/orm/adapters/PostgreSQLAdapter.js +88 -69
  349. package/src/orm/adapters/SQLServerAdapter.d.ts +1 -1
  350. package/src/orm/adapters/SQLServerAdapter.d.ts.map +1 -1
  351. package/src/orm/adapters/SQLiteAdapter.d.ts +1 -1
  352. package/src/orm/adapters/SQLiteAdapter.d.ts.map +1 -1
  353. package/src/orm/adapters/SQLiteAdapter.js +59 -3
  354. package/src/orm/maintenance/SqliteMaintenance.d.ts +5 -0
  355. package/src/orm/maintenance/SqliteMaintenance.d.ts.map +1 -0
  356. package/src/orm/maintenance/SqliteMaintenance.js +14 -0
  357. package/src/orm/migrations/MigrationStore.d.ts +38 -0
  358. package/src/orm/migrations/MigrationStore.d.ts.map +1 -0
  359. package/src/orm/migrations/MigrationStore.js +157 -0
  360. package/src/performance/CodeGenerationBenchmark.d.ts.map +1 -1
  361. package/src/performance/Optimizer.d.ts +7 -6
  362. package/src/performance/Optimizer.d.ts.map +1 -1
  363. package/src/performance/Optimizer.js +170 -55
  364. package/src/profiling/MemoryProfiler.d.ts +1 -1
  365. package/src/profiling/MemoryProfiler.d.ts.map +1 -1
  366. package/src/profiling/N1Detector.d.ts +1 -1
  367. package/src/profiling/N1Detector.d.ts.map +1 -1
  368. package/src/profiling/QueryLogger.d.ts +1 -1
  369. package/src/profiling/QueryLogger.d.ts.map +1 -1
  370. package/src/profiling/RequestProfiler.d.ts +3 -3
  371. package/src/profiling/RequestProfiler.d.ts.map +1 -1
  372. package/src/routes/metrics.d.ts +2 -0
  373. package/src/routes/metrics.d.ts.map +1 -0
  374. package/src/routes/metrics.js +1 -0
  375. package/src/routing/CoreRoutes.d.ts +12 -0
  376. package/src/routing/CoreRoutes.d.ts.map +1 -0
  377. package/src/routing/CoreRoutes.js +151 -0
  378. package/src/routing/RouteRegistry.d.ts +39 -0
  379. package/src/routing/RouteRegistry.d.ts.map +1 -0
  380. package/src/routing/RouteRegistry.js +44 -0
  381. package/src/routing/Router.d.ts +26 -9
  382. package/src/routing/Router.d.ts.map +1 -1
  383. package/src/routing/Router.js +79 -35
  384. package/src/routing/common.d.ts +15 -0
  385. package/src/routing/common.d.ts.map +1 -0
  386. package/src/routing/common.js +47 -0
  387. package/src/routing/doc.d.ts +27 -0
  388. package/src/routing/doc.d.ts.map +1 -0
  389. package/src/routing/doc.js +110 -0
  390. package/src/routing/error.d.ts +21 -0
  391. package/src/routing/error.d.ts.map +1 -0
  392. package/src/routing/error.js +126 -0
  393. package/src/routing/errorPages.d.ts +14 -0
  394. package/src/routing/errorPages.d.ts.map +1 -0
  395. package/src/routing/errorPages.js +103 -0
  396. package/src/routing/publicRoot.d.ts +27 -0
  397. package/src/routing/publicRoot.d.ts.map +1 -0
  398. package/src/routing/publicRoot.js +110 -0
  399. package/src/runtime/PluginAutoImports.d.ts +21 -0
  400. package/src/runtime/PluginAutoImports.d.ts.map +1 -0
  401. package/src/runtime/PluginAutoImports.js +59 -0
  402. package/src/runtime/PluginManager.d.ts +1 -5
  403. package/src/runtime/PluginManager.d.ts.map +1 -1
  404. package/src/runtime/PluginManager.js +25 -18
  405. package/src/runtime/RuntimeDetector.d.ts +1 -1
  406. package/src/runtime/RuntimeDetector.d.ts.map +1 -1
  407. package/src/runtime/StartupConfigFileRegistry.d.ts +20 -0
  408. package/src/runtime/StartupConfigFileRegistry.d.ts.map +1 -0
  409. package/src/runtime/StartupConfigFileRegistry.js +44 -0
  410. package/src/runtime/adapters/CloudflareAdapter.d.ts +1 -1
  411. package/src/runtime/adapters/CloudflareAdapter.d.ts.map +1 -1
  412. package/src/runtime/adapters/CloudflareAdapter.js +1 -1
  413. package/src/runtime/adapters/DenoAdapter.d.ts +1 -1
  414. package/src/runtime/adapters/DenoAdapter.d.ts.map +1 -1
  415. package/src/runtime/adapters/DenoAdapter.js +1 -1
  416. package/src/runtime/adapters/LambdaAdapter.d.ts +1 -1
  417. package/src/runtime/adapters/LambdaAdapter.d.ts.map +1 -1
  418. package/src/runtime/adapters/LambdaAdapter.js +1 -1
  419. package/src/runtime/adapters/NodeServerAdapter.d.ts +1 -1
  420. package/src/runtime/adapters/NodeServerAdapter.d.ts.map +1 -1
  421. package/src/runtime/getKernel.d.ts +9 -0
  422. package/src/runtime/getKernel.d.ts.map +1 -0
  423. package/src/runtime/getKernel.js +27 -0
  424. package/src/runtime/useFileLoader.d.ts +26 -0
  425. package/src/runtime/useFileLoader.d.ts.map +1 -0
  426. package/src/runtime/useFileLoader.js +188 -0
  427. package/src/scripts/TemplateImportsCheck.js +40 -0
  428. package/src/scripts/TemplateSync.js +90 -24
  429. package/src/security/Encryptor.d.ts.map +1 -1
  430. package/src/security/Encryptor.js +64 -7
  431. package/src/security/JwtManager.d.ts +1 -0
  432. package/src/security/JwtManager.d.ts.map +1 -1
  433. package/src/security/JwtManager.js +33 -0
  434. package/src/security/Sanitizer.d.ts +76 -0
  435. package/src/security/Sanitizer.d.ts.map +1 -0
  436. package/src/security/Sanitizer.js +412 -0
  437. package/src/security/TokenRevocation.d.ts +7 -0
  438. package/src/security/TokenRevocation.d.ts.map +1 -0
  439. package/src/security/TokenRevocation.js +57 -0
  440. package/src/security/XssProtection.d.ts.map +1 -1
  441. package/src/security/XssProtection.js +62 -14
  442. package/src/seeders/SeederDiscovery.d.ts +5 -0
  443. package/src/seeders/SeederDiscovery.d.ts.map +1 -0
  444. package/src/seeders/SeederDiscovery.js +21 -0
  445. package/src/seeders/SeederLoader.d.ts +5 -0
  446. package/src/seeders/SeederLoader.d.ts.map +1 -0
  447. package/src/seeders/SeederLoader.js +60 -0
  448. package/src/seeders/types.d.ts +18 -0
  449. package/src/seeders/types.d.ts.map +1 -0
  450. package/src/seeders/types.js +1 -0
  451. package/src/session/SessionManager.js +1 -1
  452. package/src/templates/adapters/MySQLAdapter.ts.tpl +109 -85
  453. package/src/templates/adapters/PostgreSQLAdapter.ts.tpl +129 -88
  454. package/src/templates/adapters/SQLServerAdapter.ts.tpl +5 -9
  455. package/src/templates/adapters/SQLiteAdapter.ts.tpl +78 -11
  456. package/src/templates/features/Queue.ts.tpl +3 -2
  457. package/src/templates/project/basic/app/Controllers/AuthController.ts.tpl +217 -0
  458. package/src/templates/project/basic/app/Controllers/UserController.ts.tpl +1 -12
  459. package/src/templates/project/basic/app/Types/controller.ts.tpl +46 -0
  460. package/src/templates/project/basic/config/FileLogWriter.ts.tpl +5 -236
  461. package/src/templates/project/basic/config/SecretsManager.ts.tpl +10 -447
  462. package/src/templates/project/basic/config/StartupConfigValidator.ts.tpl +9 -268
  463. package/src/templates/project/basic/config/app.ts.tpl +13 -153
  464. package/src/templates/project/basic/config/broadcast.ts.tpl +29 -126
  465. package/src/templates/project/basic/config/cache.ts.tpl +12 -70
  466. package/src/templates/project/basic/config/cloudflare.ts.tpl +4 -39
  467. package/src/templates/project/basic/config/constants.ts.tpl +9 -65
  468. package/src/templates/project/basic/config/database.ts.tpl +66 -123
  469. package/src/templates/project/basic/config/env.ts.tpl +5 -169
  470. package/src/templates/project/basic/config/features.ts.tpl +6 -54
  471. package/src/templates/project/basic/config/index.ts.tpl +8 -23
  472. package/src/templates/project/basic/config/logging/HttpLogger.ts.tpl +7 -114
  473. package/src/templates/project/basic/config/mail.ts.tpl +9 -62
  474. package/src/templates/project/basic/config/microservices.ts.tpl +11 -97
  475. package/src/templates/project/basic/config/middleware.ts.tpl +25 -43
  476. package/src/templates/project/basic/config/notification.ts.tpl +13 -114
  477. package/src/templates/project/basic/config/queue.ts.tpl +9 -40
  478. package/src/templates/project/basic/config/security.ts.tpl +11 -163
  479. package/src/templates/project/basic/config/startup.ts.tpl +10 -21
  480. package/src/templates/project/basic/config/storage.ts.tpl +57 -137
  481. package/src/templates/project/basic/config/type.ts.tpl +32 -451
  482. package/src/templates/project/basic/database/factories/UserFactory.ts.tpl +80 -0
  483. package/src/templates/project/basic/database/migrations/create_tasks_table.ts.tpl +28 -0
  484. package/src/templates/project/basic/database/migrations/create_users_table.ts.tpl +29 -0
  485. package/src/templates/project/basic/database/seeders/DatabaseSeeder.ts.tpl +19 -0
  486. package/src/templates/project/basic/database/seeders/UserSeeder.ts.tpl +18 -0
  487. package/src/templates/project/basic/database/seeders/index.ts.tpl +2 -0
  488. package/src/templates/project/basic/routes/api.ts.tpl +71 -33
  489. package/src/templates/project/basic/routes/metrics.ts.tpl +22 -0
  490. package/src/templates/project/basic/src/index.ts.tpl +3 -0
  491. package/src/templates/project/basic/tsconfig.json.tpl +12 -11
  492. package/src/testing/TestEnvironment.d.ts +40 -0
  493. package/src/testing/TestEnvironment.d.ts.map +1 -0
  494. package/src/testing/TestEnvironment.js +141 -0
  495. package/src/testing/TestHttp.d.ts +29 -0
  496. package/src/testing/TestHttp.d.ts.map +1 -0
  497. package/src/testing/TestHttp.js +96 -0
  498. package/src/testing/index.d.ts +5 -0
  499. package/src/testing/index.d.ts.map +1 -0
  500. package/src/testing/index.js +2 -0
  501. package/src/time/DateTime.d.ts +181 -0
  502. package/src/time/DateTime.d.ts.map +1 -0
  503. package/src/time/DateTime.js +300 -0
  504. package/src/time/index.d.ts +7 -0
  505. package/src/time/index.d.ts.map +1 -0
  506. package/src/time/index.js +5 -0
  507. package/src/tools/http/Http.d.ts.map +1 -1
  508. package/src/tools/http/Http.js +4 -0
  509. package/src/tools/mail/drivers/Smtp.js +1 -1
  510. package/src/tools/queue/drivers/InMemory.d.ts +1 -1
  511. package/src/tools/queue/drivers/InMemory.d.ts.map +1 -1
  512. package/src/tools/queue/drivers/InMemory.js +1 -1
  513. package/src/tools/queue/drivers/Redis.d.ts +1 -1
  514. package/src/tools/queue/drivers/Redis.d.ts.map +1 -1
  515. package/src/tools/queue/drivers/Redis.js +1 -1
  516. package/src/validation/ValidationError.d.ts.map +1 -1
  517. package/src/validation/ValidationError.js +4 -2
  518. package/src/validation/Validator.d.ts +49 -16
  519. package/src/validation/Validator.d.ts.map +1 -1
  520. package/src/validation/Validator.js +307 -5
  521. package/src/common/uuid.d.ts +0 -3
  522. package/src/common/uuid.d.ts.map +0 -1
  523. package/src/common/uuid.js +0 -30
  524. package/src/templates/project/basic/.env.example.tpl +0 -74
  525. package/src/templates/project/basic/.env.tpl +0 -166
  526. package/src/templates/project/basic/config/logging/KvLogger.ts.tpl +0 -181
  527. package/src/templates/project/basic/config/logging/SlackLogger.ts.tpl +0 -156
  528. package/src/templates/project/basic/database/migrations/index.ts.tpl +0 -2
@@ -0,0 +1,14 @@
1
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
2
+ const supportsResetSchema = (adapter) => typeof adapter.resetSchema === 'function';
3
+ export const SqliteMaintenance = Object.freeze({
4
+ async dropAllTables(db) {
5
+ if (db.getType() !== 'sqlite') {
6
+ throw ErrorFactory.createDatabaseError('dropAllTables is only supported for sqlite');
7
+ }
8
+ const adapter = db.getAdapterInstance(false);
9
+ if (!supportsResetSchema(adapter)) {
10
+ throw ErrorFactory.createDatabaseError('SQLite adapter does not support resetSchema()');
11
+ }
12
+ await adapter.resetSchema();
13
+ },
14
+ });
@@ -0,0 +1,38 @@
1
+ import type { IDatabase } from '../Database';
2
+ import type { MigrationRecord, MigrationRecordStatus, MigrationScope } from '../../migrations/types';
3
+ export declare const MigrationStore: Readonly<{
4
+ ensureTable(db: IDatabase): Promise<void>;
5
+ getLastCompletedBatch(db: IDatabase, scope?: MigrationScope, service?: string): Promise<number>;
6
+ getAppliedMap(db: IDatabase, scope: MigrationScope, service: string): Promise<Map<string, MigrationRecord>>;
7
+ insertRunning(db: IDatabase, params: {
8
+ name: string;
9
+ scope: MigrationScope;
10
+ service: string;
11
+ batch: number;
12
+ }): Promise<void>;
13
+ markStatus(db: IDatabase, params: {
14
+ name: string;
15
+ scope: MigrationScope;
16
+ service: string;
17
+ status: MigrationRecordStatus;
18
+ appliedAt?: string | null;
19
+ }): Promise<void>;
20
+ listCompletedInBatchesGte(db: IDatabase, params: {
21
+ scope: MigrationScope;
22
+ service: string;
23
+ minBatch: number;
24
+ }): Promise<Array<{
25
+ name: string;
26
+ batch: number;
27
+ }>>;
28
+ listAllCompletedNames(db: IDatabase, params: {
29
+ scope: MigrationScope;
30
+ service: string;
31
+ }): Promise<string[]>;
32
+ deleteRecord(db: IDatabase, params: {
33
+ name: string;
34
+ scope: MigrationScope;
35
+ service: string;
36
+ }): Promise<void>;
37
+ }>;
38
+ //# sourceMappingURL=MigrationStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MigrationStore.d.ts","sourceRoot":"","sources":["../../../../src/orm/migrations/MigrationStore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI/C,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AA8CjG,eAAO,MAAM,cAAc;oBACH,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;8BASzC,SAAS,UACN,cAAc,YACZ,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;sBAiBZ,SAAS,SACN,cAAc,WACZ,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;sBAyBlC,SAAS,UACL;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC9E,OAAO,CAAC,IAAI,CAAC;mBAuCV,SAAS,UACL;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,cAAc,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,qBAAqB,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,GACA,OAAO,CAAC,IAAI,CAAC;kCAiBV,SAAS,UACL;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GACnE,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;8BAyB5C,SAAS,UACL;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GACjD,OAAO,CAAC,MAAM,EAAE,CAAC;qBAgBd,SAAS,UACL;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAC/D,OAAO,CAAC,IAAI,CAAC;EAShB,CAAC"}
@@ -0,0 +1,157 @@
1
+ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
2
+ import { QueryBuilder } from '../QueryBuilder.js';
3
+ function nowIso() {
4
+ // MySQL/MariaDB DATETIME does not accept ISO8601 with timezone (e.g. trailing 'Z').
5
+ // Use a portable UTC datetime string.
6
+ return new Date().toISOString().slice(0, 19).replace('T', ' ');
7
+ }
8
+ const toSafeService = (service) => {
9
+ if (typeof service !== 'string')
10
+ return '';
11
+ return service.length > 0 ? service : '';
12
+ };
13
+ const assertDbSupportsMigrations = (db) => {
14
+ const t = db.getType();
15
+ if (t === 'd1' || t === 'd1-remote') {
16
+ throw ErrorFactory.createCliError('This project is configured for D1. Use `zin d1:migrate --local|--remote` for now.');
17
+ }
18
+ };
19
+ const hasMigrationsTableSupport = (adapter) => {
20
+ return (typeof adapter.ensureMigrationsTable === 'function');
21
+ };
22
+ const requireMigrationsTableSupport = (adapter) => {
23
+ if (!hasMigrationsTableSupport(adapter)) {
24
+ throw ErrorFactory.createCliError('Migrations tracking is not supported for this database adapter yet.');
25
+ }
26
+ return async () => {
27
+ await adapter.ensureMigrationsTable();
28
+ };
29
+ };
30
+ export const MigrationStore = Object.freeze({
31
+ async ensureTable(db) {
32
+ assertDbSupportsMigrations(db);
33
+ const adapter = db.getAdapterInstance(false);
34
+ const ensure = requireMigrationsTableSupport(adapter);
35
+ await ensure();
36
+ },
37
+ async getLastCompletedBatch(db, scope = 'global', service = '') {
38
+ assertDbSupportsMigrations(db);
39
+ const normalizedService = toSafeService(service);
40
+ const row = await QueryBuilder.create('migrations', db)
41
+ .max('batch', 'max_batch')
42
+ .where('status', '=', 'completed')
43
+ .andWhere('scope', '=', scope)
44
+ .andWhere('service', '=', normalizedService)
45
+ .first();
46
+ const value = row?.max_batch;
47
+ return typeof value === 'number' && Number.isFinite(value) ? value : 0;
48
+ },
49
+ async getAppliedMap(db, scope, service) {
50
+ assertDbSupportsMigrations(db);
51
+ const normalizedService = toSafeService(service);
52
+ const rows = await QueryBuilder.create('migrations', db)
53
+ .select('name', 'scope', 'service', 'batch', 'status')
54
+ .selectAs('applied_at', 'appliedAt')
55
+ .where('scope', '=', scope)
56
+ .andWhere('service', '=', normalizedService)
57
+ .get();
58
+ const map = new Map();
59
+ for (const r of rows) {
60
+ if (typeof r.name === 'string' && r.name.length > 0) {
61
+ map.set(r.name, {
62
+ ...r,
63
+ service: toSafeService(r.service),
64
+ });
65
+ }
66
+ }
67
+ return map;
68
+ },
69
+ async insertRunning(db, params) {
70
+ assertDbSupportsMigrations(db);
71
+ const normalizedService = toSafeService(params.service);
72
+ const existing = await QueryBuilder.create('migrations', db)
73
+ .select('id')
74
+ .where('name', '=', params.name)
75
+ .andWhere('scope', '=', params.scope)
76
+ .andWhere('service', '=', normalizedService)
77
+ .first();
78
+ // Allow re-running previously failed/running migrations by updating the existing row.
79
+ // This avoids tripping the UNIQUE(name, scope, service) constraint.
80
+ if (existing?.id !== undefined && existing.id !== null) {
81
+ await QueryBuilder.create('migrations', db)
82
+ .where('name', '=', params.name)
83
+ .andWhere('scope', '=', params.scope)
84
+ .andWhere('service', '=', normalizedService)
85
+ .update({
86
+ batch: params.batch,
87
+ status: 'running',
88
+ applied_at: null,
89
+ });
90
+ return;
91
+ }
92
+ await QueryBuilder.create('migrations', db).insert({
93
+ name: params.name,
94
+ scope: params.scope,
95
+ service: normalizedService,
96
+ batch: params.batch,
97
+ status: 'running',
98
+ applied_at: null,
99
+ created_at: nowIso(),
100
+ });
101
+ },
102
+ async markStatus(db, params) {
103
+ assertDbSupportsMigrations(db);
104
+ const builder = QueryBuilder.create('migrations', db)
105
+ .where('name', '=', params.name)
106
+ .andWhere('scope', '=', params.scope)
107
+ .andWhere('service', '=', toSafeService(params.service));
108
+ if (params.appliedAt !== undefined) {
109
+ await builder.update({ status: params.status, applied_at: params.appliedAt });
110
+ return;
111
+ }
112
+ await builder.update({ status: params.status });
113
+ },
114
+ async listCompletedInBatchesGte(db, params) {
115
+ assertDbSupportsMigrations(db);
116
+ const rows = await QueryBuilder.create('migrations', db)
117
+ .select('name', 'batch')
118
+ .where('status', '=', 'completed')
119
+ .andWhere('scope', '=', params.scope)
120
+ .andWhere('service', '=', toSafeService(params.service))
121
+ .andWhere('batch', '>=', params.minBatch)
122
+ .orderBy('batch', 'DESC')
123
+ .orderBy('id', 'DESC')
124
+ .get();
125
+ const out = [];
126
+ for (const r of rows) {
127
+ const name = typeof r.name === 'string' ? r.name : '';
128
+ const batch = typeof r.batch === 'number' ? r.batch : Number(r.batch);
129
+ if (name.length === 0)
130
+ continue;
131
+ if (!Number.isFinite(batch))
132
+ continue;
133
+ out.push({ name, batch });
134
+ }
135
+ return out;
136
+ },
137
+ async listAllCompletedNames(db, params) {
138
+ assertDbSupportsMigrations(db);
139
+ const rows = await QueryBuilder.create('migrations', db)
140
+ .select('name')
141
+ .where('status', '=', 'completed')
142
+ .andWhere('scope', '=', params.scope)
143
+ .andWhere('service', '=', toSafeService(params.service))
144
+ .orderBy('batch', 'DESC')
145
+ .orderBy('id', 'DESC')
146
+ .get();
147
+ return rows.map((r) => (typeof r.name === 'string' ? r.name : '')).filter((n) => n.length > 0);
148
+ },
149
+ async deleteRecord(db, params) {
150
+ assertDbSupportsMigrations(db);
151
+ await QueryBuilder.create('migrations', db)
152
+ .where('name', '=', params.name)
153
+ .andWhere('scope', '=', params.scope)
154
+ .andWhere('service', '=', toSafeService(params.service))
155
+ .delete();
156
+ },
157
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"CodeGenerationBenchmark.d.ts","sourceRoot":"","sources":["../../../src/performance/CodeGenerationBenchmark.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,wBAAwB;IACvC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,KAAK,yBAAyB,GAAG;IAC/B,IAAI,wBAAwB,CAAC;IAC7B,MAAM,EAAE,MAAM,wBAAwB,CAAC;CACxC,CAAC;AAgDF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,yBAmCG,CAAC;AAoL1C;;GAEG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAOjE"}
1
+ {"version":3,"file":"CodeGenerationBenchmark.d.ts","sourceRoot":"","sources":["../../../src/performance/CodeGenerationBenchmark.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,WAAW,wBAAwB;IACvC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,KAAK,yBAAyB,GAAG;IAC/B,IAAI,wBAAwB,CAAC;IAC7B,MAAM,EAAE,MAAM,wBAAwB,CAAC;CACxC,CAAC;AAgDF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,yBAmCG,CAAC;AAoL1C;;GAEG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAOjE"}
@@ -3,16 +3,16 @@
3
3
  * Implements caching, lazy-loading, and parallel generation
4
4
  */
5
5
  export interface IGenerationCache {
6
- get(type: string, params: Record<string, unknown>): string | null;
7
- set(type: string, params: Record<string, unknown>, code: string): void;
8
- save(): void;
9
- clear(): void;
10
- getStats(): {
6
+ get(type: string, params: Record<string, unknown>): Promise<string | null>;
7
+ set(type: string, params: Record<string, unknown>, code: string): Promise<void>;
8
+ save(): Promise<void>;
9
+ clear(): Promise<void>;
10
+ getStats(): Promise<{
11
11
  size: number;
12
12
  entries: number;
13
13
  diskUsage: string;
14
14
  keys: string[];
15
- };
15
+ }>;
16
16
  }
17
17
  /**
18
18
  * Generation Cache - Cache generated code to avoid re-generating identical code
@@ -63,6 +63,7 @@ export declare const ParallelGenerator: Readonly<{
63
63
  export declare function createMemoized<T extends (...args: any[]) => any>(fn: T, options?: {
64
64
  ttl?: number;
65
65
  keyGenerator?: (args: Parameters<T>) => string;
66
+ maxSize?: number;
66
67
  }): T;
67
68
  export declare const Memoize: Readonly<{
68
69
  create: typeof createMemoized;
@@ -1 +1 @@
1
- {"version":3,"file":"Optimizer.d.ts","sourceRoot":"","sources":["../../../src/performance/Optimizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Optimizer.d.ts","sourceRoot":"","sources":["../../../src/performance/Optimizer.ts"],"names":[],"mappings":"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"}
@@ -95,26 +95,26 @@ function startCacheCleanup(state) {
95
95
  function createCacheInstance(state) {
96
96
  return {
97
97
  /**
98
- * Get from cache
98
+ * Get from cache (async)
99
99
  */
100
- get(type, params) {
100
+ async get(type, params) {
101
101
  const key = getCacheKey(type, params);
102
102
  const entry = state.cache.get(key);
103
103
  if (entry === undefined)
104
- return null;
104
+ return Promise.resolve(null); //NoSONAR
105
105
  // Check TTL
106
106
  if (Date.now() - entry.timestamp > state.ttlMs) {
107
107
  state.cache.delete(key);
108
108
  const file = path.join(state.cacheDir, `${key}.json`);
109
109
  deleteFileNonBlocking(file);
110
- return null;
110
+ return Promise.resolve(null); //NoSONAR
111
111
  }
112
- return entry.code;
112
+ return Promise.resolve(entry.code); //NoSONAR
113
113
  },
114
114
  /**
115
- * Set in cache
115
+ * Set in cache (async)
116
116
  */
117
- set(type, params, code) {
117
+ async set(type, params, code) {
118
118
  const key = getCacheKey(type, params);
119
119
  // If key already exists, delete first so insertion order updates for LRU
120
120
  if (state.cache.has(key))
@@ -134,27 +134,36 @@ function createCacheInstance(state) {
134
134
  deleteFileNonBlocking(file);
135
135
  }
136
136
  }
137
+ // Save to disk asynchronously
138
+ const file = path.join(state.cacheDir, `${key}.json`);
139
+ try {
140
+ await fs.fsPromises.access(state.cacheDir);
141
+ }
142
+ catch {
143
+ await fs.fsPromises.mkdir(state.cacheDir, { recursive: true });
144
+ }
145
+ await fs.fsPromises.writeFile(file, JSON.stringify({ code, timestamp: Date.now() }, null, 2));
137
146
  },
138
147
  /**
139
- * Save cache to disk
148
+ * Save cache to disk (async)
140
149
  */
141
- save() {
142
- saveCacheToDisk(state);
150
+ async save() {
151
+ await saveCacheToDisk(state);
143
152
  },
144
153
  /**
145
- * Clear cache
154
+ * Clear cache (async)
146
155
  */
147
- clear() {
156
+ async clear() {
148
157
  if (state.cleanupInterval) {
149
158
  clearInterval(state.cleanupInterval);
150
159
  state.cleanupInterval = undefined;
151
160
  }
152
- clearCache(state);
161
+ await clearCache(state);
153
162
  },
154
163
  /**
155
- * Get cache statistics
164
+ * Get cache statistics (async)
156
165
  */
157
- getStats() {
166
+ async getStats() {
158
167
  return getCacheStats(state);
159
168
  },
160
169
  };
@@ -166,38 +175,66 @@ function attachCacheStateForTests(instance, state) {
166
175
  });
167
176
  }
168
177
  /**
169
- * Save cache to disk
178
+ * Save cache to disk (async)
170
179
  */
171
- function saveCacheToDisk(state) {
172
- if (fs.existsSync(state.cacheDir) === false) {
173
- fs.mkdirSync(state.cacheDir, { recursive: true });
180
+ async function saveCacheToDisk(state) {
181
+ try {
182
+ try {
183
+ await fs.fsPromises.access(state.cacheDir);
184
+ }
185
+ catch {
186
+ await fs.fsPromises.mkdir(state.cacheDir, { recursive: true });
187
+ }
188
+ const writes = Array.from(state.cache.entries()).map(async ([key, entry]) => {
189
+ const file = path.join(state.cacheDir, `${key}.json`);
190
+ await fs.fsPromises.writeFile(file, JSON.stringify(entry, null, 2));
191
+ });
192
+ await Promise.all(writes);
174
193
  }
175
- for (const [key, entry] of state.cache.entries()) {
176
- const file = path.join(state.cacheDir, `${key}.json`);
177
- fs.writeFileSync(file, JSON.stringify(entry, null, 2));
194
+ catch (error) {
195
+ Logger.error('Failed to save cache to disk', error);
178
196
  }
179
197
  }
180
198
  /**
181
- * Clear cache
199
+ * Clear cache (async)
182
200
  */
183
- function clearCache(state) {
201
+ async function clearCache(state) {
184
202
  state.cache.clear();
185
- if (fs.existsSync(state.cacheDir) === true) {
186
- fs.rmSync(state.cacheDir, { recursive: true });
203
+ try {
204
+ try {
205
+ await fs.fsPromises.access(state.cacheDir);
206
+ }
207
+ catch {
208
+ return; // Dir doesn't exist
209
+ }
210
+ await fs.fsPromises.rm(state.cacheDir, { recursive: true });
211
+ }
212
+ catch (error) {
213
+ Logger.error('Failed to clear cache', error);
187
214
  }
188
215
  }
189
216
  /**
190
- * Get cache statistics
217
+ * Get cache statistics (async)
191
218
  */
192
- function getCacheStats(state) {
219
+ async function getCacheStats(state) {
193
220
  let diskUsage = 0;
194
- if (fs.existsSync(state.cacheDir) === true) {
195
- const files = fs.readdirSync(state.cacheDir);
196
- for (const file of files) {
197
- const stats = fs.statSync(path.join(state.cacheDir, file));
198
- diskUsage += stats.size;
221
+ try {
222
+ try {
223
+ await fs.fsPromises.access(state.cacheDir);
224
+ const files = await fs.fsPromises.readdir(state.cacheDir);
225
+ const sizes = await Promise.all(files.map(async (file) => {
226
+ const stats = await fs.fsPromises.stat(path.join(state.cacheDir, file));
227
+ return stats.size;
228
+ }));
229
+ diskUsage = sizes.reduce((sum, size) => sum + size, 0);
230
+ }
231
+ catch {
232
+ // ignore
199
233
  }
200
234
  }
235
+ catch {
236
+ // ignore
237
+ }
201
238
  return {
202
239
  size: diskUsage,
203
240
  entries: state.cache.size,
@@ -242,23 +279,38 @@ function toInt32(value) {
242
279
  return uint32 > 2147483647 ? uint32 - 4294967296 : uint32;
243
280
  }
244
281
  /**
245
- * Load cache from disk
282
+ * Load cache from disk (async)
246
283
  */
247
- function loadFromDisk(state) {
248
- if (fs.existsSync(state.cacheDir) === true) {
284
+ async function loadFromDisk(state) {
285
+ try {
249
286
  try {
250
- const files = fs.readdirSync(state.cacheDir);
251
- for (const file of files) {
252
- if (file.endsWith('.json') === true) {
253
- const content = fs.readFileSync(path.join(state.cacheDir, file), 'utf-8');
254
- const data = JSON.parse(content);
255
- state.cache.set(file.replace('.json', ''), data);
256
- }
257
- }
287
+ await fs.fsPromises.access(state.cacheDir);
258
288
  }
259
- catch (err) {
260
- Logger.error(`Failed to load cache from disk: ${err instanceof Error ? err.message : String(err)}`);
289
+ catch {
290
+ return;
261
291
  }
292
+ const files = await fs.fsPromises.readdir(state.cacheDir);
293
+ const jsonFiles = files.filter((file) => file.endsWith('.json') === true);
294
+ const parsedEntries = await Promise.all(jsonFiles.map(async (file) => {
295
+ const filePath = path.join(state.cacheDir, file);
296
+ const content = await fs.fsPromises.readFile(filePath, 'utf-8');
297
+ try {
298
+ const data = JSON.parse(content);
299
+ return { key: file.replace('.json', ''), data };
300
+ }
301
+ catch {
302
+ // ignore corrupted files
303
+ return null;
304
+ }
305
+ }));
306
+ for (const entry of parsedEntries) {
307
+ if (entry !== null) {
308
+ state.cache.set(entry.key, entry.data);
309
+ }
310
+ }
311
+ }
312
+ catch (err) {
313
+ Logger.error(`Failed to load cache from disk: ${err instanceof Error ? err.message : String(err)}`);
262
314
  }
263
315
  }
264
316
  /**
@@ -340,17 +392,51 @@ export const ParallelGenerator = Object.freeze({
340
392
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
341
393
  export function createMemoized(fn, options = {}) {
342
394
  const cache = new Map();
395
+ const maxSize = options.maxSize ?? 1000; // Default max size: 1000 entries
396
+ const evictLRU = () => {
397
+ if (cache.size < maxSize)
398
+ return;
399
+ // Find oldest entry (LRU)
400
+ let oldestKey = null;
401
+ let oldestTime = Infinity;
402
+ for (const [key, entry] of cache.entries()) {
403
+ if (entry.lastAccessAt < oldestTime) {
404
+ oldestTime = entry.lastAccessAt;
405
+ oldestKey = key;
406
+ }
407
+ }
408
+ if (oldestKey !== null) {
409
+ cache.delete(oldestKey);
410
+ }
411
+ };
343
412
  return ((...args) => {
344
- const key = options.keyGenerator === undefined ? JSON.stringify(args) : options.keyGenerator(args);
413
+ let key;
414
+ if (options.keyGenerator === undefined) {
415
+ // Optimization: Avoid JSON.stringify for simple primitive arguments
416
+ const arePrimitives = args.every((a) => a === null ||
417
+ typeof a === 'string' ||
418
+ typeof a === 'number' ||
419
+ typeof a === 'boolean' ||
420
+ a === 'undefined');
421
+ key = arePrimitives ? args.join('|') : JSON.stringify(args);
422
+ }
423
+ else {
424
+ key = options.keyGenerator(args);
425
+ }
345
426
  const entry = cache.get(key);
346
427
  if (entry !== undefined) {
347
- if (options.ttl === undefined || Date.now() - entry.timestamp < options.ttl) {
428
+ if (options.ttl === undefined || Date.now() - entry.createdAt < options.ttl) {
429
+ // Update access time for LRU; TTL remains based on creation time
430
+ entry.lastAccessAt = Date.now();
348
431
  return entry.result;
349
432
  }
350
433
  cache.delete(key);
351
434
  }
352
435
  const result = fn(...args);
353
- cache.set(key, { result, timestamp: Date.now() });
436
+ // Evict LRU before adding new entry
437
+ evictLRU();
438
+ const now = Date.now();
439
+ cache.set(key, { result, createdAt: now, lastAccessAt: now });
354
440
  return result;
355
441
  });
356
442
  }
@@ -440,17 +526,36 @@ async function generateInParallel(stats, generators, batchSize) {
440
526
  */
441
527
  async function generateWithCache(cache, stats, type, params, generatorFn) {
442
528
  // Try cache
443
- const cached = cache.get(type, params);
529
+ let cached = null;
530
+ try {
531
+ cached = await cache.get(type, params);
532
+ }
533
+ catch (err) {
534
+ Logger.warn('GenerationCache.get failed; treating as cache miss', {
535
+ type,
536
+ error: err instanceof Error ? err.message : String(err),
537
+ });
538
+ }
444
539
  if (cached !== null) {
445
- stats.cacheHits++;
446
- return JSON.parse(cached);
540
+ try {
541
+ stats.cacheHits++;
542
+ return JSON.parse(cached);
543
+ }
544
+ catch (err) {
545
+ Logger.warn('Failed to parse cached generation result; treating as cache miss', {
546
+ type,
547
+ error: err instanceof Error ? err.message : String(err),
548
+ });
549
+ }
447
550
  }
448
551
  // Generate
449
552
  const startTime = performance.now();
450
553
  const result = await generatorFn();
451
554
  const duration = performance.now() - startTime;
452
- // Cache result
453
- cache.set(type, params, JSON.stringify(result));
555
+ // Cache result (fire-and-forget)
556
+ void cache
557
+ .set(type, params, JSON.stringify(result))
558
+ .catch((err) => Logger.error('GenerationCache.set failed', err));
454
559
  stats.cacheMisses++;
455
560
  stats.savedTime += duration;
456
561
  return result;
@@ -458,6 +563,16 @@ async function generateWithCache(cache, stats, type, params, generatorFn) {
458
563
  /**
459
564
  * Get optimization statistics
460
565
  */
566
+ function getCacheStatusSync(cache) {
567
+ const state = cache[GENERATION_CACHE_STATE_SYMBOL];
568
+ const map = state?.cache;
569
+ if (!(map instanceof Map))
570
+ return { size: 0, keys: [] };
571
+ return {
572
+ size: map.size,
573
+ keys: Array.from(map.keys()),
574
+ };
575
+ }
461
576
  function getOptimizerStats(cache, stats) {
462
577
  const total = stats.cacheHits + stats.cacheMisses;
463
578
  const hitRate = total > 0 ? (stats.cacheHits / total) * 100 : 0;
@@ -467,7 +582,7 @@ function getOptimizerStats(cache, stats) {
467
582
  hitRate: `${hitRate.toFixed(1)}%`,
468
583
  parallelRuns: stats.parallelRuns,
469
584
  estimatedSavedTime: `${stats.savedTime.toFixed(2)}ms`,
470
- cacheStatus: cache.getStats(),
585
+ cacheStatus: getCacheStatusSync(cache),
471
586
  };
472
587
  }
473
588
  export default PerformanceOptimizer;
@@ -2,7 +2,7 @@
2
2
  * Memory Profiler
3
3
  * Tracks heap memory usage and garbage collection events
4
4
  */
5
- import { MemoryDelta, MemorySnapshot } from './types';
5
+ import type { MemoryDelta, MemorySnapshot } from './types';
6
6
  export interface IMemoryProfiler {
7
7
  start(): void;
8
8
  end(): MemorySnapshot;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryProfiler.d.ts","sourceRoot":"","sources":["../../../src/profiling/MemoryProfiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,KAAK,IAAI,IAAI,CAAC;IACd,GAAG,IAAI,cAAc,CAAC;IACtB,KAAK,IAAI,WAAW,CAAC;IACrB,gBAAgB,IAAI,cAAc,GAAG,IAAI,CAAC;IAC1C,cAAc,IAAI,cAAc,GAAG,IAAI,CAAC;IACxC,SAAS,IAAI,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;cACO,eAAe;IAmEzB;;OAEG;uBACgB,MAAM,GAAG,MAAM;EAGlC,CAAC;AAEH;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQjD"}
1
+ {"version":3,"file":"MemoryProfiler.d.ts","sourceRoot":"","sources":["../../../src/profiling/MemoryProfiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,KAAK,IAAI,IAAI,CAAC;IACd,GAAG,IAAI,cAAc,CAAC;IACtB,KAAK,IAAI,WAAW,CAAC;IACrB,gBAAgB,IAAI,cAAc,GAAG,IAAI,CAAC;IAC1C,cAAc,IAAI,cAAc,GAAG,IAAI,CAAC;IACxC,SAAS,IAAI,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;cACO,eAAe;IAmEzB;;OAEG;uBACgB,MAAM,GAAG,MAAM;EAGlC,CAAC;AAEH;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQjD"}
@@ -2,7 +2,7 @@
2
2
  * N+1 Query Pattern Detector
3
3
  * Analyzes query logs to identify N+1 patterns
4
4
  */
5
- import { IN1Detector } from './types';
5
+ import type { IN1Detector } from './types';
6
6
  /**\n * N1Detector analyzes query logs to identify N+1 patterns
7
7
  * Groups identical queries and flags those executed 5+ times as critical
8
8
  * Sealed namespace for immutability
@@ -1 +1 @@
1
- {"version":3,"file":"N1Detector.d.ts","sourceRoot":"","sources":["../../../src/profiling/N1Detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAA4B,MAAM,kBAAkB,CAAC;AAEzE;;;GAGG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;cACO,WAAW;EAiCrB,CAAC"}
1
+ {"version":3,"file":"N1Detector.d.ts","sourceRoot":"","sources":["../../../src/profiling/N1Detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAA4B,MAAM,kBAAkB,CAAC;AAE9E;;;GAGG;AACH,eAAO,MAAM,UAAU;IACrB;;OAEG;cACO,WAAW;EAiCrB,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * Query Logger
3
3
  * Tracks database query execution with parameters, duration, and context
4
4
  */
5
- import { QueryLogEntry } from './types';
5
+ import type { QueryLogEntry } from './types';
6
6
  /**
7
7
  * QueryLogger tracks all database queries executed during a request context
8
8
  * Provides N+1 detection heuristic by flagging identical queries executed 5+ times
@@ -1 +1 @@
1
- {"version":3,"file":"QueryLogger.d.ts","sourceRoot":"","sources":["../../../src/profiling/QueryLogger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnF;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/C;;OAEG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE3F;;OAEG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAErE;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;OAEG;IACH,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAE3C;;OAEG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExC;;OAEG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5C;AASD;;;;GAIG;AACH,eAAO,MAAM,WAAW;;mBAGP,YAAY;IAG3B;;OAEG;wBACiB,MAAM,GAAG,IAAI;IAcjC;;OAEG;kBACW,MAAM;IAIpB;;OAEG;kBAEI,MAAM,UACH,OAAO,EAAE,YACP,MAAM,YACP,MAAM,GACd,IAAI;IA+BP;;OAEG;0BACkB,MAAM,GAAoB,aAAa,EAAE;IAK9D;;OAEG;8BAEQ,MAAM,GACd,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAiB1D;;;OAGG;4BACoB,MAAM,cAA8B,MAAM,GAAO,aAAa,EAAE;IAavF;;OAEG;oBACa,MAAM,GAAG,IAAI;IAS7B;;OAEG;kBACW,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAU1C;;OAEG;4BACoB,MAAM,GAAoB,MAAM;IAIvD;;OAEG;+BACuB,MAAM,GAAoB,MAAM;EAI1D,CAAC"}
1
+ {"version":3,"file":"QueryLogger.d.ts","sourceRoot":"","sources":["../../../src/profiling/QueryLogger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnF;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/C;;OAEG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE3F;;OAEG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAErE;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE9B;;OAEG;IACH,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAE3C;;OAEG;IACH,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExC;;OAEG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5C;AASD;;;;GAIG;AACH,eAAO,MAAM,WAAW;;mBAGP,YAAY;IAG3B;;OAEG;wBACiB,MAAM,GAAG,IAAI;IAcjC;;OAEG;kBACW,MAAM;IAIpB;;OAEG;kBAEI,MAAM,UACH,OAAO,EAAE,YACP,MAAM,YACP,MAAM,GACd,IAAI;IA+BP;;OAEG;0BACkB,MAAM,GAAoB,aAAa,EAAE;IAK9D;;OAEG;8BAEQ,MAAM,GACd,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAiB1D;;;OAGG;4BACoB,MAAM,cAA8B,MAAM,GAAO,aAAa,EAAE;IAavF;;OAEG;oBACa,MAAM,GAAG,IAAI;IAS7B;;OAEG;kBACW,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;IAU1C;;OAEG;4BACoB,MAAM,GAAoB,MAAM;IAIvD;;OAEG;+BACuB,MAAM,GAAoB,MAAM;EAI1D,CAAC"}