@kabyeon/nexusjs 0.6.5

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 (669) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +860 -0
  3. package/dist/auth/auth.controller.d.ts +175 -0
  4. package/dist/auth/auth.controller.d.ts.map +1 -0
  5. package/dist/auth/auth.d.ts +47 -0
  6. package/dist/auth/auth.d.ts.map +1 -0
  7. package/dist/auth/auth.module.d.ts +34 -0
  8. package/dist/auth/auth.module.d.ts.map +1 -0
  9. package/dist/auth/auth.service.d.ts +192 -0
  10. package/dist/auth/auth.service.d.ts.map +1 -0
  11. package/dist/auth/decorators/current-user.d.ts +58 -0
  12. package/dist/auth/decorators/current-user.d.ts.map +1 -0
  13. package/dist/auth/index.d.ts +43 -0
  14. package/dist/auth/index.d.ts.map +1 -0
  15. package/dist/auth/index.js +730 -0
  16. package/dist/auth/index.js.map +25 -0
  17. package/dist/auth/middleware.d.ts +50 -0
  18. package/dist/auth/middleware.d.ts.map +1 -0
  19. package/dist/auth/types.d.ts +135 -0
  20. package/dist/auth/types.d.ts.map +1 -0
  21. package/dist/cache/cache.module.d.ts +22 -0
  22. package/dist/cache/cache.module.d.ts.map +1 -0
  23. package/dist/cache/cache.service.d.ts +37 -0
  24. package/dist/cache/cache.service.d.ts.map +1 -0
  25. package/dist/cache/index.d.ts +9 -0
  26. package/dist/cache/index.d.ts.map +1 -0
  27. package/dist/cache/index.js +814 -0
  28. package/dist/cache/index.js.map +25 -0
  29. package/dist/cache/stores/drizzle.d.ts +76 -0
  30. package/dist/cache/stores/drizzle.d.ts.map +1 -0
  31. package/dist/cache/stores/index.d.ts +10 -0
  32. package/dist/cache/stores/index.d.ts.map +1 -0
  33. package/dist/cache/stores/memory.d.ts +34 -0
  34. package/dist/cache/stores/memory.d.ts.map +1 -0
  35. package/dist/cache/stores/redis.d.ts +46 -0
  36. package/dist/cache/stores/redis.d.ts.map +1 -0
  37. package/dist/cache/types.d.ts +88 -0
  38. package/dist/cache/types.d.ts.map +1 -0
  39. package/dist/cli/commands/config.d.ts +44 -0
  40. package/dist/cli/commands/config.d.ts.map +1 -0
  41. package/dist/cli/commands/db-generate.d.ts +20 -0
  42. package/dist/cli/commands/db-generate.d.ts.map +1 -0
  43. package/dist/cli/commands/db-migrate.d.ts +33 -0
  44. package/dist/cli/commands/db-migrate.d.ts.map +1 -0
  45. package/dist/cli/commands/db-seed.d.ts +43 -0
  46. package/dist/cli/commands/db-seed.d.ts.map +1 -0
  47. package/dist/cli/commands/index.d.ts +11 -0
  48. package/dist/cli/commands/index.d.ts.map +1 -0
  49. package/dist/cli/commands/info.d.ts +11 -0
  50. package/dist/cli/commands/info.d.ts.map +1 -0
  51. package/dist/cli/commands/init.d.ts +38 -0
  52. package/dist/cli/commands/init.d.ts.map +1 -0
  53. package/dist/cli/commands/make-auth.d.ts +17 -0
  54. package/dist/cli/commands/make-auth.d.ts.map +1 -0
  55. package/dist/cli/commands/make-controller.d.ts +16 -0
  56. package/dist/cli/commands/make-controller.d.ts.map +1 -0
  57. package/dist/cli/commands/make-crud.d.ts +28 -0
  58. package/dist/cli/commands/make-crud.d.ts.map +1 -0
  59. package/dist/cli/commands/make-listener.d.ts +15 -0
  60. package/dist/cli/commands/make-listener.d.ts.map +1 -0
  61. package/dist/cli/commands/make-middleware.d.ts +7 -0
  62. package/dist/cli/commands/make-middleware.d.ts.map +1 -0
  63. package/dist/cli/commands/make-migration.d.ts +21 -0
  64. package/dist/cli/commands/make-migration.d.ts.map +1 -0
  65. package/dist/cli/commands/make-model.d.ts +22 -0
  66. package/dist/cli/commands/make-model.d.ts.map +1 -0
  67. package/dist/cli/commands/make-module.d.ts +11 -0
  68. package/dist/cli/commands/make-module.d.ts.map +1 -0
  69. package/dist/cli/commands/make-queue.d.ts +17 -0
  70. package/dist/cli/commands/make-queue.d.ts.map +1 -0
  71. package/dist/cli/commands/make-schedule.d.ts +17 -0
  72. package/dist/cli/commands/make-schedule.d.ts.map +1 -0
  73. package/dist/cli/commands/make-service.d.ts +7 -0
  74. package/dist/cli/commands/make-service.d.ts.map +1 -0
  75. package/dist/cli/commands/make-session.d.ts +15 -0
  76. package/dist/cli/commands/make-session.d.ts.map +1 -0
  77. package/dist/cli/commands/make-validator.d.ts +7 -0
  78. package/dist/cli/commands/make-validator.d.ts.map +1 -0
  79. package/dist/cli/commands/new.d.ts +14 -0
  80. package/dist/cli/commands/new.d.ts.map +1 -0
  81. package/dist/cli/commands/repl.d.ts +42 -0
  82. package/dist/cli/commands/repl.d.ts.map +1 -0
  83. package/dist/cli/commands/route-list.d.ts +12 -0
  84. package/dist/cli/commands/route-list.d.ts.map +1 -0
  85. package/dist/cli/core/args.d.ts +29 -0
  86. package/dist/cli/core/args.d.ts.map +1 -0
  87. package/dist/cli/core/config.d.ts +137 -0
  88. package/dist/cli/core/config.d.ts.map +1 -0
  89. package/dist/cli/core/fs.d.ts +38 -0
  90. package/dist/cli/core/fs.d.ts.map +1 -0
  91. package/dist/cli/core/index.d.ts +42 -0
  92. package/dist/cli/core/index.d.ts.map +1 -0
  93. package/dist/cli/core/logger.d.ts +46 -0
  94. package/dist/cli/core/logger.d.ts.map +1 -0
  95. package/dist/cli/core/loose-json.d.ts +26 -0
  96. package/dist/cli/core/loose-json.d.ts.map +1 -0
  97. package/dist/cli/core/prompts.d.ts +22 -0
  98. package/dist/cli/core/prompts.d.ts.map +1 -0
  99. package/dist/cli/core/template.d.ts +26 -0
  100. package/dist/cli/core/template.d.ts.map +1 -0
  101. package/dist/cli/index.d.ts +1 -0
  102. package/dist/cli/index.d.ts.map +1 -0
  103. package/dist/cli/index.js +6136 -0
  104. package/dist/cli/index.js.map +91 -0
  105. package/dist/cli/templates/controller/adonis.d.ts +10 -0
  106. package/dist/cli/templates/controller/adonis.d.ts.map +1 -0
  107. package/dist/cli/templates/controller/functional.d.ts +9 -0
  108. package/dist/cli/templates/controller/functional.d.ts.map +1 -0
  109. package/dist/cli/templates/controller/nest.d.ts +17 -0
  110. package/dist/cli/templates/controller/nest.d.ts.map +1 -0
  111. package/dist/cli/templates/crud/controller.d.ts +8 -0
  112. package/dist/cli/templates/crud/controller.d.ts.map +1 -0
  113. package/dist/cli/templates/crud/dto.d.ts +8 -0
  114. package/dist/cli/templates/crud/dto.d.ts.map +1 -0
  115. package/dist/cli/templates/crud/index.d.ts +33 -0
  116. package/dist/cli/templates/crud/index.d.ts.map +1 -0
  117. package/dist/cli/templates/crud/module.d.ts +6 -0
  118. package/dist/cli/templates/crud/module.d.ts.map +1 -0
  119. package/dist/cli/templates/crud/test.d.ts +10 -0
  120. package/dist/cli/templates/crud/test.d.ts.map +1 -0
  121. package/dist/cli/templates/index.d.ts +39 -0
  122. package/dist/cli/templates/index.d.ts.map +1 -0
  123. package/dist/cli/templates/middleware/middleware.d.ts +8 -0
  124. package/dist/cli/templates/middleware/middleware.d.ts.map +1 -0
  125. package/dist/cli/templates/migration/drizzle.d.ts +12 -0
  126. package/dist/cli/templates/migration/drizzle.d.ts.map +1 -0
  127. package/dist/cli/templates/migration/sql.d.ts +10 -0
  128. package/dist/cli/templates/migration/sql.d.ts.map +1 -0
  129. package/dist/cli/templates/model/drizzle-dialect.d.ts +29 -0
  130. package/dist/cli/templates/model/drizzle-dialect.d.ts.map +1 -0
  131. package/dist/cli/templates/model/drizzle.d.ts +14 -0
  132. package/dist/cli/templates/model/drizzle.d.ts.map +1 -0
  133. package/dist/cli/templates/model/kysely.d.ts +12 -0
  134. package/dist/cli/templates/model/kysely.d.ts.map +1 -0
  135. package/dist/cli/templates/model/prisma.d.ts +12 -0
  136. package/dist/cli/templates/model/prisma.d.ts.map +1 -0
  137. package/dist/cli/templates/module/module.d.ts +16 -0
  138. package/dist/cli/templates/module/module.d.ts.map +1 -0
  139. package/dist/cli/templates/project/drizzle.config.d.ts +12 -0
  140. package/dist/cli/templates/project/drizzle.config.d.ts.map +1 -0
  141. package/dist/cli/templates/project/nx.config.d.ts +7 -0
  142. package/dist/cli/templates/project/nx.config.d.ts.map +1 -0
  143. package/dist/cli/templates/repository/repository.d.ts +13 -0
  144. package/dist/cli/templates/repository/repository.d.ts.map +1 -0
  145. package/dist/cli/templates/service/service.d.ts +12 -0
  146. package/dist/cli/templates/service/service.d.ts.map +1 -0
  147. package/dist/cli/templates/validator/validator.d.ts +8 -0
  148. package/dist/cli/templates/validator/validator.d.ts.map +1 -0
  149. package/dist/config/config.module.d.ts +39 -0
  150. package/dist/config/config.module.d.ts.map +1 -0
  151. package/dist/config/config.service.d.ts +47 -0
  152. package/dist/config/config.service.d.ts.map +1 -0
  153. package/dist/config/index.d.ts +39 -0
  154. package/dist/config/index.d.ts.map +1 -0
  155. package/dist/config/index.js +436 -0
  156. package/dist/config/index.js.map +21 -0
  157. package/dist/config/types.d.ts +78 -0
  158. package/dist/config/types.d.ts.map +1 -0
  159. package/dist/core/application.d.ts +77 -0
  160. package/dist/core/application.d.ts.map +1 -0
  161. package/dist/core/constants.d.ts +48 -0
  162. package/dist/core/constants.d.ts.map +1 -0
  163. package/dist/core/decorators/controller.d.ts +21 -0
  164. package/dist/core/decorators/controller.d.ts.map +1 -0
  165. package/dist/core/decorators/http-methods.d.ts +33 -0
  166. package/dist/core/decorators/http-methods.d.ts.map +1 -0
  167. package/dist/core/decorators/index.d.ts +12 -0
  168. package/dist/core/decorators/index.d.ts.map +1 -0
  169. package/dist/core/decorators/injectable.d.ts +42 -0
  170. package/dist/core/decorators/injectable.d.ts.map +1 -0
  171. package/dist/core/decorators/metadata.d.ts +7 -0
  172. package/dist/core/decorators/metadata.d.ts.map +1 -0
  173. package/dist/core/decorators/module.d.ts +23 -0
  174. package/dist/core/decorators/module.d.ts.map +1 -0
  175. package/dist/core/decorators/params.d.ts +33 -0
  176. package/dist/core/decorators/params.d.ts.map +1 -0
  177. package/dist/core/decorators/repository.d.ts +24 -0
  178. package/dist/core/decorators/repository.d.ts.map +1 -0
  179. package/dist/core/decorators/validate.d.ts +21 -0
  180. package/dist/core/decorators/validate.d.ts.map +1 -0
  181. package/dist/core/di/container.d.ts +70 -0
  182. package/dist/core/di/container.d.ts.map +1 -0
  183. package/dist/core/di/index.d.ts +9 -0
  184. package/dist/core/di/index.d.ts.map +1 -0
  185. package/dist/core/di/request-middleware.d.ts +36 -0
  186. package/dist/core/di/request-middleware.d.ts.map +1 -0
  187. package/dist/core/di/request-scope.d.ts +45 -0
  188. package/dist/core/di/request-scope.d.ts.map +1 -0
  189. package/dist/core/di/scanner.d.ts +36 -0
  190. package/dist/core/di/scanner.d.ts.map +1 -0
  191. package/dist/core/di/tokens.d.ts +98 -0
  192. package/dist/core/di/tokens.d.ts.map +1 -0
  193. package/dist/core/http/context.d.ts +30 -0
  194. package/dist/core/http/context.d.ts.map +1 -0
  195. package/dist/core/http/index.d.ts +8 -0
  196. package/dist/core/http/index.d.ts.map +1 -0
  197. package/dist/core/http/middleware.d.ts +31 -0
  198. package/dist/core/http/middleware.d.ts.map +1 -0
  199. package/dist/core/http/router.d.ts +46 -0
  200. package/dist/core/http/router.d.ts.map +1 -0
  201. package/dist/core/http/server.d.ts +58 -0
  202. package/dist/core/http/server.d.ts.map +1 -0
  203. package/dist/core/index.d.ts +20 -0
  204. package/dist/core/index.d.ts.map +1 -0
  205. package/dist/core/orm/drizzle-adapter.d.ts +73 -0
  206. package/dist/core/orm/drizzle-adapter.d.ts.map +1 -0
  207. package/dist/core/orm/index.d.ts +5 -0
  208. package/dist/core/orm/index.d.ts.map +1 -0
  209. package/dist/core/runtime/bun.d.ts +13 -0
  210. package/dist/core/runtime/bun.d.ts.map +1 -0
  211. package/dist/core/runtime/cloudflare.d.ts +18 -0
  212. package/dist/core/runtime/cloudflare.d.ts.map +1 -0
  213. package/dist/core/runtime/index.d.ts +11 -0
  214. package/dist/core/runtime/index.d.ts.map +1 -0
  215. package/dist/core/runtime/node.d.ts +10 -0
  216. package/dist/core/runtime/node.d.ts.map +1 -0
  217. package/dist/core/validation/index.d.ts +5 -0
  218. package/dist/core/validation/index.d.ts.map +1 -0
  219. package/dist/core/validation/validator.d.ts +46 -0
  220. package/dist/core/validation/validator.d.ts.map +1 -0
  221. package/dist/crypto/encryption.d.ts +71 -0
  222. package/dist/crypto/encryption.d.ts.map +1 -0
  223. package/dist/crypto/hash.d.ts +52 -0
  224. package/dist/crypto/hash.d.ts.map +1 -0
  225. package/dist/crypto/index.d.ts +49 -0
  226. package/dist/crypto/index.d.ts.map +1 -0
  227. package/dist/crypto/index.js +533 -0
  228. package/dist/crypto/index.js.map +14 -0
  229. package/dist/crypto/module.d.ts +28 -0
  230. package/dist/crypto/module.d.ts.map +1 -0
  231. package/dist/crypto/types.d.ts +81 -0
  232. package/dist/crypto/types.d.ts.map +1 -0
  233. package/dist/drive/drive.module.d.ts +20 -0
  234. package/dist/drive/drive.module.d.ts.map +1 -0
  235. package/dist/drive/drive.service.d.ts +21 -0
  236. package/dist/drive/drive.service.d.ts.map +1 -0
  237. package/dist/drive/drivers/index.d.ts +9 -0
  238. package/dist/drive/drivers/index.d.ts.map +1 -0
  239. package/dist/drive/drivers/local.d.ts +24 -0
  240. package/dist/drive/drivers/local.d.ts.map +1 -0
  241. package/dist/drive/drivers/memory.d.ts +19 -0
  242. package/dist/drive/drivers/memory.d.ts.map +1 -0
  243. package/dist/drive/drivers/s3.d.ts +44 -0
  244. package/dist/drive/drivers/s3.d.ts.map +1 -0
  245. package/dist/drive/index.d.ts +9 -0
  246. package/dist/drive/index.d.ts.map +1 -0
  247. package/dist/drive/index.js +714 -0
  248. package/dist/drive/index.js.map +25 -0
  249. package/dist/drive/types.d.ts +97 -0
  250. package/dist/drive/types.d.ts.map +1 -0
  251. package/dist/drizzle/decorators/columns.d.ts +16 -0
  252. package/dist/drizzle/decorators/columns.d.ts.map +1 -0
  253. package/dist/drizzle/decorators/index.d.ts +6 -0
  254. package/dist/drizzle/decorators/index.d.ts.map +1 -0
  255. package/dist/drizzle/drivers/base.d.ts +32 -0
  256. package/dist/drizzle/drivers/base.d.ts.map +1 -0
  257. package/dist/drizzle/drivers/bun-sqlite.d.ts +6 -0
  258. package/dist/drizzle/drivers/bun-sqlite.d.ts.map +1 -0
  259. package/dist/drizzle/drivers/d1.d.ts +7 -0
  260. package/dist/drizzle/drivers/d1.d.ts.map +1 -0
  261. package/dist/drizzle/drivers/index.d.ts +14 -0
  262. package/dist/drizzle/drivers/index.d.ts.map +1 -0
  263. package/dist/drizzle/drivers/mysql.d.ts +6 -0
  264. package/dist/drizzle/drivers/mysql.d.ts.map +1 -0
  265. package/dist/drizzle/drivers/postgres.d.ts +12 -0
  266. package/dist/drizzle/drivers/postgres.d.ts.map +1 -0
  267. package/dist/drizzle/drivers/sqlite.d.ts +8 -0
  268. package/dist/drizzle/drivers/sqlite.d.ts.map +1 -0
  269. package/dist/drizzle/drizzle.module.d.ts +29 -0
  270. package/dist/drizzle/drizzle.module.d.ts.map +1 -0
  271. package/dist/drizzle/drizzle.service.d.ts +52 -0
  272. package/dist/drizzle/drizzle.service.d.ts.map +1 -0
  273. package/dist/drizzle/index.d.ts +13 -0
  274. package/dist/drizzle/index.d.ts.map +1 -0
  275. package/dist/drizzle/index.js +979 -0
  276. package/dist/drizzle/index.js.map +32 -0
  277. package/dist/drizzle/model.d.ts +26 -0
  278. package/dist/drizzle/model.d.ts.map +1 -0
  279. package/dist/drizzle/raw-query.d.ts +41 -0
  280. package/dist/drizzle/raw-query.d.ts.map +1 -0
  281. package/dist/drizzle/repository/index.d.ts +6 -0
  282. package/dist/drizzle/repository/index.d.ts.map +1 -0
  283. package/dist/drizzle/repository/repository.d.ts +60 -0
  284. package/dist/drizzle/repository/repository.d.ts.map +1 -0
  285. package/dist/drizzle/types.d.ts +160 -0
  286. package/dist/drizzle/types.d.ts.map +1 -0
  287. package/dist/events/decorators/on-event.d.ts +49 -0
  288. package/dist/events/decorators/on-event.d.ts.map +1 -0
  289. package/dist/events/emitter.d.ts +52 -0
  290. package/dist/events/emitter.d.ts.map +1 -0
  291. package/dist/events/event.service.d.ts +27 -0
  292. package/dist/events/event.service.d.ts.map +1 -0
  293. package/dist/events/events.module.d.ts +35 -0
  294. package/dist/events/events.module.d.ts.map +1 -0
  295. package/dist/events/index.d.ts +43 -0
  296. package/dist/events/index.d.ts.map +1 -0
  297. package/dist/events/index.js +646 -0
  298. package/dist/events/index.js.map +23 -0
  299. package/dist/events/types.d.ts +120 -0
  300. package/dist/events/types.d.ts.map +1 -0
  301. package/dist/grpc/decorators.d.ts +34 -0
  302. package/dist/grpc/decorators.d.ts.map +1 -0
  303. package/dist/grpc/index.d.ts +70 -0
  304. package/dist/grpc/index.d.ts.map +1 -0
  305. package/dist/grpc/index.js +528 -0
  306. package/dist/grpc/index.js.map +22 -0
  307. package/dist/grpc/module.d.ts +32 -0
  308. package/dist/grpc/module.d.ts.map +1 -0
  309. package/dist/grpc/service.d.ts +60 -0
  310. package/dist/grpc/service.d.ts.map +1 -0
  311. package/dist/grpc/types.d.ts +79 -0
  312. package/dist/grpc/types.d.ts.map +1 -0
  313. package/dist/health/health.controller.d.ts +61 -0
  314. package/dist/health/health.controller.d.ts.map +1 -0
  315. package/dist/health/health.module.d.ts +29 -0
  316. package/dist/health/health.module.d.ts.map +1 -0
  317. package/dist/health/health.service.d.ts +34 -0
  318. package/dist/health/health.service.d.ts.map +1 -0
  319. package/dist/health/index.d.ts +38 -0
  320. package/dist/health/index.d.ts.map +1 -0
  321. package/dist/health/index.js +599 -0
  322. package/dist/health/index.js.map +25 -0
  323. package/dist/health/indicators/drizzle.d.ts +18 -0
  324. package/dist/health/indicators/drizzle.d.ts.map +1 -0
  325. package/dist/health/indicators/index.d.ts +59 -0
  326. package/dist/health/indicators/index.d.ts.map +1 -0
  327. package/dist/health/types.d.ts +105 -0
  328. package/dist/health/types.d.ts.map +1 -0
  329. package/dist/i18n/decorators.d.ts +14 -0
  330. package/dist/i18n/decorators.d.ts.map +1 -0
  331. package/dist/i18n/index.d.ts +48 -0
  332. package/dist/i18n/index.d.ts.map +1 -0
  333. package/dist/i18n/index.js +589 -0
  334. package/dist/i18n/index.js.map +17 -0
  335. package/dist/i18n/middleware.d.ts +26 -0
  336. package/dist/i18n/middleware.d.ts.map +1 -0
  337. package/dist/i18n/module.d.ts +39 -0
  338. package/dist/i18n/module.d.ts.map +1 -0
  339. package/dist/i18n/service.d.ts +130 -0
  340. package/dist/i18n/service.d.ts.map +1 -0
  341. package/dist/i18n/types.d.ts +65 -0
  342. package/dist/i18n/types.d.ts.map +1 -0
  343. package/dist/index.d.ts +2 -0
  344. package/dist/index.js +2056 -0
  345. package/dist/index.js.map +53 -0
  346. package/dist/limiter/backends/drizzle.d.ts +40 -0
  347. package/dist/limiter/backends/drizzle.d.ts.map +1 -0
  348. package/dist/limiter/backends/index.d.ts +6 -0
  349. package/dist/limiter/backends/index.d.ts.map +1 -0
  350. package/dist/limiter/backends/memory.d.ts +28 -0
  351. package/dist/limiter/backends/memory.d.ts.map +1 -0
  352. package/dist/limiter/index.d.ts +9 -0
  353. package/dist/limiter/index.d.ts.map +1 -0
  354. package/dist/limiter/index.js +640 -0
  355. package/dist/limiter/index.js.map +25 -0
  356. package/dist/limiter/limiter.middleware.d.ts +11 -0
  357. package/dist/limiter/limiter.middleware.d.ts.map +1 -0
  358. package/dist/limiter/limiter.module.d.ts +23 -0
  359. package/dist/limiter/limiter.module.d.ts.map +1 -0
  360. package/dist/limiter/limiter.service.d.ts +18 -0
  361. package/dist/limiter/limiter.service.d.ts.map +1 -0
  362. package/dist/limiter/types.d.ts +99 -0
  363. package/dist/limiter/types.d.ts.map +1 -0
  364. package/dist/logger/index.d.ts +36 -0
  365. package/dist/logger/index.d.ts.map +1 -0
  366. package/dist/logger/index.js +538 -0
  367. package/dist/logger/index.js.map +22 -0
  368. package/dist/logger/logger.module.d.ts +35 -0
  369. package/dist/logger/logger.module.d.ts.map +1 -0
  370. package/dist/logger/logger.service.d.ts +55 -0
  371. package/dist/logger/logger.service.d.ts.map +1 -0
  372. package/dist/logger/transports/index.d.ts +35 -0
  373. package/dist/logger/transports/index.d.ts.map +1 -0
  374. package/dist/logger/types.d.ts +58 -0
  375. package/dist/logger/types.d.ts.map +1 -0
  376. package/dist/mail/index.d.ts +9 -0
  377. package/dist/mail/index.d.ts.map +1 -0
  378. package/dist/mail/index.js +479 -0
  379. package/dist/mail/index.js.map +25 -0
  380. package/dist/mail/mail.module.d.ts +21 -0
  381. package/dist/mail/mail.module.d.ts.map +1 -0
  382. package/dist/mail/mail.service.d.ts +18 -0
  383. package/dist/mail/mail.service.d.ts.map +1 -0
  384. package/dist/mail/transports/file.d.ts +19 -0
  385. package/dist/mail/transports/file.d.ts.map +1 -0
  386. package/dist/mail/transports/index.d.ts +9 -0
  387. package/dist/mail/transports/index.d.ts.map +1 -0
  388. package/dist/mail/transports/null.d.ts +11 -0
  389. package/dist/mail/transports/null.d.ts.map +1 -0
  390. package/dist/mail/transports/smtp.d.ts +40 -0
  391. package/dist/mail/transports/smtp.d.ts.map +1 -0
  392. package/dist/mail/types.d.ts +73 -0
  393. package/dist/mail/types.d.ts.map +1 -0
  394. package/dist/metrics/controller.d.ts +27 -0
  395. package/dist/metrics/controller.d.ts.map +1 -0
  396. package/dist/metrics/counter.d.ts +36 -0
  397. package/dist/metrics/counter.d.ts.map +1 -0
  398. package/dist/metrics/decorators/counted.d.ts +26 -0
  399. package/dist/metrics/decorators/counted.d.ts.map +1 -0
  400. package/dist/metrics/decorators/index.d.ts +3 -0
  401. package/dist/metrics/decorators/index.d.ts.map +1 -0
  402. package/dist/metrics/decorators/timed.d.ts +25 -0
  403. package/dist/metrics/decorators/timed.d.ts.map +1 -0
  404. package/dist/metrics/gauge.d.ts +38 -0
  405. package/dist/metrics/gauge.d.ts.map +1 -0
  406. package/dist/metrics/histogram.d.ts +52 -0
  407. package/dist/metrics/histogram.d.ts.map +1 -0
  408. package/dist/metrics/index.d.ts +35 -0
  409. package/dist/metrics/index.d.ts.map +1 -0
  410. package/dist/metrics/index.js +1033 -0
  411. package/dist/metrics/index.js.map +21 -0
  412. package/dist/metrics/module.d.ts +33 -0
  413. package/dist/metrics/module.d.ts.map +1 -0
  414. package/dist/metrics/registry.d.ts +52 -0
  415. package/dist/metrics/registry.d.ts.map +1 -0
  416. package/dist/metrics/service.d.ts +42 -0
  417. package/dist/metrics/service.d.ts.map +1 -0
  418. package/dist/metrics/summary.d.ts +50 -0
  419. package/dist/metrics/summary.d.ts.map +1 -0
  420. package/dist/metrics/types.d.ts +115 -0
  421. package/dist/metrics/types.d.ts.map +1 -0
  422. package/dist/openapi/decorators/body.d.ts +9 -0
  423. package/dist/openapi/decorators/body.d.ts.map +1 -0
  424. package/dist/openapi/decorators/index.d.ts +11 -0
  425. package/dist/openapi/decorators/index.d.ts.map +1 -0
  426. package/dist/openapi/decorators/operation.d.ts +9 -0
  427. package/dist/openapi/decorators/operation.d.ts.map +1 -0
  428. package/dist/openapi/decorators/param.d.ts +17 -0
  429. package/dist/openapi/decorators/param.d.ts.map +1 -0
  430. package/dist/openapi/decorators/property.d.ts +24 -0
  431. package/dist/openapi/decorators/property.d.ts.map +1 -0
  432. package/dist/openapi/decorators/response.d.ts +10 -0
  433. package/dist/openapi/decorators/response.d.ts.map +1 -0
  434. package/dist/openapi/decorators/security.d.ts +9 -0
  435. package/dist/openapi/decorators/security.d.ts.map +1 -0
  436. package/dist/openapi/decorators/tags.d.ts +2 -0
  437. package/dist/openapi/decorators/tags.d.ts.map +1 -0
  438. package/dist/openapi/index.d.ts +10 -0
  439. package/dist/openapi/index.d.ts.map +1 -0
  440. package/dist/openapi/index.js +974 -0
  441. package/dist/openapi/index.js.map +31 -0
  442. package/dist/openapi/openapi.module.d.ts +46 -0
  443. package/dist/openapi/openapi.module.d.ts.map +1 -0
  444. package/dist/openapi/openapi.service.d.ts +55 -0
  445. package/dist/openapi/openapi.service.d.ts.map +1 -0
  446. package/dist/openapi/scalar.d.ts +16 -0
  447. package/dist/openapi/scalar.d.ts.map +1 -0
  448. package/dist/openapi/types.d.ts +266 -0
  449. package/dist/openapi/types.d.ts.map +1 -0
  450. package/dist/openapi/zod-to-json-schema.d.ts +34 -0
  451. package/dist/openapi/zod-to-json-schema.d.ts.map +1 -0
  452. package/dist/package.json +59 -0
  453. package/dist/queue/backends/bullmq.d.ts +41 -0
  454. package/dist/queue/backends/bullmq.d.ts.map +1 -0
  455. package/dist/queue/backends/cloudflare.d.ts +84 -0
  456. package/dist/queue/backends/cloudflare.d.ts.map +1 -0
  457. package/dist/queue/backends/index.d.ts +7 -0
  458. package/dist/queue/backends/index.d.ts.map +1 -0
  459. package/dist/queue/backends/memory.d.ts +24 -0
  460. package/dist/queue/backends/memory.d.ts.map +1 -0
  461. package/dist/queue/decorators/on-queue-ready.d.ts +43 -0
  462. package/dist/queue/decorators/on-queue-ready.d.ts.map +1 -0
  463. package/dist/queue/index.d.ts +57 -0
  464. package/dist/queue/index.d.ts.map +1 -0
  465. package/dist/queue/index.js +961 -0
  466. package/dist/queue/index.js.map +25 -0
  467. package/dist/queue/queue.module.d.ts +46 -0
  468. package/dist/queue/queue.module.d.ts.map +1 -0
  469. package/dist/queue/queue.service.d.ts +61 -0
  470. package/dist/queue/queue.service.d.ts.map +1 -0
  471. package/dist/queue/types.d.ts +204 -0
  472. package/dist/queue/types.d.ts.map +1 -0
  473. package/dist/redis/adapters/bun.d.ts +27 -0
  474. package/dist/redis/adapters/bun.d.ts.map +1 -0
  475. package/dist/redis/adapters/cloudflare.d.ts +51 -0
  476. package/dist/redis/adapters/cloudflare.d.ts.map +1 -0
  477. package/dist/redis/adapters/index.d.ts +29 -0
  478. package/dist/redis/adapters/index.d.ts.map +1 -0
  479. package/dist/redis/adapters/memory.d.ts +28 -0
  480. package/dist/redis/adapters/memory.d.ts.map +1 -0
  481. package/dist/redis/adapters/node.d.ts +36 -0
  482. package/dist/redis/adapters/node.d.ts.map +1 -0
  483. package/dist/redis/index.d.ts +33 -0
  484. package/dist/redis/index.d.ts.map +1 -0
  485. package/dist/redis/index.js +667 -0
  486. package/dist/redis/index.js.map +25 -0
  487. package/dist/redis/module.d.ts +32 -0
  488. package/dist/redis/module.d.ts.map +1 -0
  489. package/dist/redis/types.d.ts +146 -0
  490. package/dist/redis/types.d.ts.map +1 -0
  491. package/dist/schedule/backends/cloudflare.d.ts +55 -0
  492. package/dist/schedule/backends/cloudflare.d.ts.map +1 -0
  493. package/dist/schedule/backends/index.d.ts +3 -0
  494. package/dist/schedule/backends/index.d.ts.map +1 -0
  495. package/dist/schedule/backends/memory.d.ts +39 -0
  496. package/dist/schedule/backends/memory.d.ts.map +1 -0
  497. package/dist/schedule/cron-parser.d.ts +48 -0
  498. package/dist/schedule/cron-parser.d.ts.map +1 -0
  499. package/dist/schedule/decorators/cron.d.ts +71 -0
  500. package/dist/schedule/decorators/cron.d.ts.map +1 -0
  501. package/dist/schedule/index.d.ts +51 -0
  502. package/dist/schedule/index.d.ts.map +1 -0
  503. package/dist/schedule/index.js +1108 -0
  504. package/dist/schedule/index.js.map +25 -0
  505. package/dist/schedule/schedule.module.d.ts +44 -0
  506. package/dist/schedule/schedule.module.d.ts.map +1 -0
  507. package/dist/schedule/schedule.service.d.ts +51 -0
  508. package/dist/schedule/schedule.service.d.ts.map +1 -0
  509. package/dist/schedule/types.d.ts +150 -0
  510. package/dist/schedule/types.d.ts.map +1 -0
  511. package/dist/session/backends/cookie.d.ts +56 -0
  512. package/dist/session/backends/cookie.d.ts.map +1 -0
  513. package/dist/session/backends/drizzle.d.ts +65 -0
  514. package/dist/session/backends/drizzle.d.ts.map +1 -0
  515. package/dist/session/backends/index.d.ts +6 -0
  516. package/dist/session/backends/index.d.ts.map +1 -0
  517. package/dist/session/backends/memory.d.ts +32 -0
  518. package/dist/session/backends/memory.d.ts.map +1 -0
  519. package/dist/session/backends/redis.d.ts +53 -0
  520. package/dist/session/backends/redis.d.ts.map +1 -0
  521. package/dist/session/decorators/current-session.d.ts +56 -0
  522. package/dist/session/decorators/current-session.d.ts.map +1 -0
  523. package/dist/session/index.d.ts +42 -0
  524. package/dist/session/index.d.ts.map +1 -0
  525. package/dist/session/index.js +1498 -0
  526. package/dist/session/index.js.map +28 -0
  527. package/dist/session/session-middleware.d.ts +29 -0
  528. package/dist/session/session-middleware.d.ts.map +1 -0
  529. package/dist/session/session.module.d.ts +35 -0
  530. package/dist/session/session.module.d.ts.map +1 -0
  531. package/dist/session/session.service.d.ts +49 -0
  532. package/dist/session/session.service.d.ts.map +1 -0
  533. package/dist/session/types.d.ts +201 -0
  534. package/dist/session/types.d.ts.map +1 -0
  535. package/dist/shield/guards/csrf.d.ts +33 -0
  536. package/dist/shield/guards/csrf.d.ts.map +1 -0
  537. package/dist/shield/guards/headers.d.ts +22 -0
  538. package/dist/shield/guards/headers.d.ts.map +1 -0
  539. package/dist/shield/guards/index.d.ts +6 -0
  540. package/dist/shield/guards/index.d.ts.map +1 -0
  541. package/dist/shield/index.d.ts +8 -0
  542. package/dist/shield/index.d.ts.map +1 -0
  543. package/dist/shield/index.js +728 -0
  544. package/dist/shield/index.js.map +25 -0
  545. package/dist/shield/shield.module.d.ts +25 -0
  546. package/dist/shield/shield.module.d.ts.map +1 -0
  547. package/dist/shield/shield.service.d.ts +21 -0
  548. package/dist/shield/shield.service.d.ts.map +1 -0
  549. package/dist/shield/types.d.ts +95 -0
  550. package/dist/shield/types.d.ts.map +1 -0
  551. package/dist/sse/index.d.ts +7 -0
  552. package/dist/sse/index.d.ts.map +1 -0
  553. package/dist/sse/index.js +214 -0
  554. package/dist/sse/index.js.map +13 -0
  555. package/dist/sse/sse-stream.d.ts +46 -0
  556. package/dist/sse/sse-stream.d.ts.map +1 -0
  557. package/dist/sse/sse.d.ts +24 -0
  558. package/dist/sse/sse.d.ts.map +1 -0
  559. package/dist/sse/types.d.ts +84 -0
  560. package/dist/sse/types.d.ts.map +1 -0
  561. package/dist/static/index.d.ts +41 -0
  562. package/dist/static/index.d.ts.map +1 -0
  563. package/dist/static/index.js +313 -0
  564. package/dist/static/index.js.map +13 -0
  565. package/dist/static/static.module.d.ts +41 -0
  566. package/dist/static/static.module.d.ts.map +1 -0
  567. package/dist/static/static.service.d.ts +38 -0
  568. package/dist/static/static.service.d.ts.map +1 -0
  569. package/dist/tracing/decorators/index.d.ts +2 -0
  570. package/dist/tracing/decorators/index.d.ts.map +1 -0
  571. package/dist/tracing/decorators/trace.d.ts +37 -0
  572. package/dist/tracing/decorators/trace.d.ts.map +1 -0
  573. package/dist/tracing/hono-instrumentation.d.ts +21 -0
  574. package/dist/tracing/hono-instrumentation.d.ts.map +1 -0
  575. package/dist/tracing/index.d.ts +29 -0
  576. package/dist/tracing/index.d.ts.map +1 -0
  577. package/dist/tracing/index.js +782 -0
  578. package/dist/tracing/index.js.map +24 -0
  579. package/dist/tracing/module.d.ts +45 -0
  580. package/dist/tracing/module.d.ts.map +1 -0
  581. package/dist/tracing/propagation.d.ts +53 -0
  582. package/dist/tracing/propagation.d.ts.map +1 -0
  583. package/dist/tracing/service.d.ts +95 -0
  584. package/dist/tracing/service.d.ts.map +1 -0
  585. package/dist/tracing/types.d.ts +90 -0
  586. package/dist/tracing/types.d.ts.map +1 -0
  587. package/dist/upload/decorators/index.d.ts +6 -0
  588. package/dist/upload/decorators/index.d.ts.map +1 -0
  589. package/dist/upload/decorators/upload.d.ts +16 -0
  590. package/dist/upload/decorators/upload.d.ts.map +1 -0
  591. package/dist/upload/decorators/uploaded-file.d.ts +10 -0
  592. package/dist/upload/decorators/uploaded-file.d.ts.map +1 -0
  593. package/dist/upload/index.d.ts +9 -0
  594. package/dist/upload/index.d.ts.map +1 -0
  595. package/dist/upload/index.js +553 -0
  596. package/dist/upload/index.js.map +25 -0
  597. package/dist/upload/types.d.ts +103 -0
  598. package/dist/upload/types.d.ts.map +1 -0
  599. package/dist/upload/upload.middleware.d.ts +15 -0
  600. package/dist/upload/upload.middleware.d.ts.map +1 -0
  601. package/dist/upload/upload.module.d.ts +33 -0
  602. package/dist/upload/upload.module.d.ts.map +1 -0
  603. package/dist/upload/upload.service.d.ts +29 -0
  604. package/dist/upload/upload.service.d.ts.map +1 -0
  605. package/dist/view/edge.d.ts +23 -0
  606. package/dist/view/edge.d.ts.map +1 -0
  607. package/dist/view/eta.d.ts +30 -0
  608. package/dist/view/eta.d.ts.map +1 -0
  609. package/dist/view/index.d.ts +34 -0
  610. package/dist/view/index.d.ts.map +1 -0
  611. package/dist/view/index.js +240 -0
  612. package/dist/view/index.js.map +14 -0
  613. package/dist/view/inertia/default-ssr.d.ts +15 -0
  614. package/dist/view/inertia/default-ssr.d.ts.map +1 -0
  615. package/dist/view/inertia/form-helper.d.ts +102 -0
  616. package/dist/view/inertia/form-helper.d.ts.map +1 -0
  617. package/dist/view/inertia/form-middleware.d.ts +53 -0
  618. package/dist/view/inertia/form-middleware.d.ts.map +1 -0
  619. package/dist/view/inertia/helpers.d.ts +149 -0
  620. package/dist/view/inertia/helpers.d.ts.map +1 -0
  621. package/dist/view/inertia/index.d.ts +18 -0
  622. package/dist/view/inertia/index.d.ts.map +1 -0
  623. package/dist/view/inertia/inertia-adapter.d.ts +93 -0
  624. package/dist/view/inertia/inertia-adapter.d.ts.map +1 -0
  625. package/dist/view/inertia/inertia-response.d.ts +51 -0
  626. package/dist/view/inertia/inertia-response.d.ts.map +1 -0
  627. package/dist/view/inertia/ssr/index.d.ts +13 -0
  628. package/dist/view/inertia/ssr/index.d.ts.map +1 -0
  629. package/dist/view/inertia/ssr/react-adapter.d.ts +33 -0
  630. package/dist/view/inertia/ssr/react-adapter.d.ts.map +1 -0
  631. package/dist/view/inertia/ssr/registry.d.ts +42 -0
  632. package/dist/view/inertia/ssr/registry.d.ts.map +1 -0
  633. package/dist/view/inertia/ssr/solid-adapter.d.ts +31 -0
  634. package/dist/view/inertia/ssr/solid-adapter.d.ts.map +1 -0
  635. package/dist/view/inertia/ssr/svelte-adapter.d.ts +31 -0
  636. package/dist/view/inertia/ssr/svelte-adapter.d.ts.map +1 -0
  637. package/dist/view/inertia/ssr/vue-adapter.d.ts +26 -0
  638. package/dist/view/inertia/ssr/vue-adapter.d.ts.map +1 -0
  639. package/dist/view/inertia/types.d.ts +131 -0
  640. package/dist/view/inertia/types.d.ts.map +1 -0
  641. package/dist/view/rendu.d.ts +11 -0
  642. package/dist/view/rendu.d.ts.map +1 -0
  643. package/dist/view/types.d.ts +52 -0
  644. package/dist/view/types.d.ts.map +1 -0
  645. package/dist/view/view-engine.d.ts +28 -0
  646. package/dist/view/view-engine.d.ts.map +1 -0
  647. package/dist/ws/client.d.ts +42 -0
  648. package/dist/ws/client.d.ts.map +1 -0
  649. package/dist/ws/decorators.d.ts +44 -0
  650. package/dist/ws/decorators.d.ts.map +1 -0
  651. package/dist/ws/index.d.ts +57 -0
  652. package/dist/ws/index.d.ts.map +1 -0
  653. package/dist/ws/index.js +796 -0
  654. package/dist/ws/index.js.map +26 -0
  655. package/dist/ws/module.d.ts +48 -0
  656. package/dist/ws/module.d.ts.map +1 -0
  657. package/dist/ws/runtime/bun.d.ts +41 -0
  658. package/dist/ws/runtime/bun.d.ts.map +1 -0
  659. package/dist/ws/runtime/index.d.ts +14 -0
  660. package/dist/ws/runtime/index.d.ts.map +1 -0
  661. package/dist/ws/runtime/node.d.ts +46 -0
  662. package/dist/ws/runtime/node.d.ts.map +1 -0
  663. package/dist/ws/runtime/types.d.ts +18 -0
  664. package/dist/ws/runtime/types.d.ts.map +1 -0
  665. package/dist/ws/service.d.ts +65 -0
  666. package/dist/ws/service.d.ts.map +1 -0
  667. package/dist/ws/types.d.ts +77 -0
  668. package/dist/ws/types.d.ts.map +1 -0
  669. package/package.json +262 -0
@@ -0,0 +1,91 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/constants.ts", "../src/core/di/request-scope.ts", "../src/core/di/container.ts", "../src/core/di/scanner.ts", "../src/core/http/middleware.ts", "../src/core/decorators/controller.ts", "../src/core/decorators/http-methods.ts", "../src/core/decorators/params.ts", "../src/core/decorators/validate.ts", "../src/core/validation/validator.ts", "../src/view/rendu.ts", "../src/view/edge.ts", "../src/view/eta.ts", "../src/view/view-engine.ts", "../src/core/http/router.ts", "../src/core/di/request-middleware.ts", "../src/core/runtime/bun.ts", "../src/core/runtime/node.ts", "../src/core/runtime/cloudflare.ts", "../src/core/http/server.ts", "../src/view/inertia/helpers.ts", "../src/view/inertia/default-ssr.ts", "../src/view/inertia/inertia-response.ts", "../src/view/inertia/form-helper.ts", "../src/view/inertia/form-middleware.ts", "../src/view/inertia/inertia-adapter.ts", "../src/view/inertia/ssr/registry.ts", "../src/view/inertia/ssr/index.ts", "../src/view/inertia/index.ts", "../src/core/application.ts", "../src/cli/commands/info.ts", "../src/cli/core/args.ts", "../src/cli/core/config.ts", "../src/cli/core/fs.ts", "../src/cli/core/logger.ts", "../src/cli/core/prompts.ts", "../src/cli/core/template.ts", "../src/cli/commands/init.ts", "../src/cli/core/loose-json.ts", "../src/cli/templates/controller/adonis.ts", "../src/cli/templates/controller/functional.ts", "../src/cli/templates/controller/nest.ts", "../src/cli/templates/crud/controller.ts", "../src/cli/templates/crud/dto.ts", "../src/cli/templates/crud/module.ts", "../src/cli/templates/crud/test.ts", "../src/cli/templates/middleware/middleware.ts", "../src/cli/templates/migration/drizzle.ts", "../src/cli/templates/migration/sql.ts", "../src/cli/templates/model/drizzle.ts", "../src/cli/templates/model/kysely.ts", "../src/cli/templates/model/prisma.ts", "../src/cli/templates/module/module.ts", "../src/cli/templates/project/nx.config.ts", "../src/cli/templates/project/drizzle.config.ts", "../src/cli/templates/repository/repository.ts", "../src/cli/templates/service/service.ts", "../src/cli/templates/validator/validator.ts", "../src/cli/templates/index.ts", "../src/cli/commands/make-auth.ts", "../src/cli/commands/make-controller.ts", "../src/cli/commands/make-crud.ts", "../src/cli/templates/model/drizzle-dialect.ts", "../src/cli/commands/make-listener.ts", "../src/cli/commands/make-middleware.ts", "../src/cli/commands/make-migration.ts", "../src/cli/commands/make-model.ts", "../src/cli/commands/make-module.ts", "../src/cli/commands/make-queue.ts", "../src/cli/commands/make-schedule.ts", "../src/cli/commands/make-service.ts", "../src/cli/commands/make-session.ts", "../src/cli/commands/make-validator.ts", "../src/cli/commands/db-migrate.ts", "../src/cli/commands/db-generate.ts", "../src/cli/commands/db-seed.ts", "../src/cli/commands/new.ts", "../src/cli/commands/config.ts", "../src/cli/commands/repl.ts", "../src/cli/commands/route-list.ts", "../src/cli/commands/index.ts", "../src/cli/index.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Metadata keys used by reflect-metadata for storing decorator data.\n *\n * These constants are the contract between decorators and the framework\n * core (DI container, router, validator).\n */\nexport const METADATA_KEY = {\n\t/** Marks a class as a Nest-style controller, stores route prefix. */\n\tCONTROLLER: \"nexus:controller\",\n\n\t/** Marks a class as an injectable provider. */\n\tINJECTABLE: \"nexus:injectable\",\n\n\t/** Marks a class as a repository. */\n\tREPOSITORY: \"nexus:repository\",\n\n\t/** Marks a class as a module. Stores module options. */\n\tMODULE: \"nexus:module\",\n\n\t/** HTTP method routes registered on a controller (Get/Post/...). */\n\tROUTES: \"nexus:routes\",\n\n\t/** Method parameter type metadata (body/query/param/headers/ctx). */\n\tPARAMS: \"nexus:params\",\n\n\t/** Validation schema per method (Zod schema or class). */\n\tVALIDATE: \"nexus:validate\",\n\n\t/** Class-level design:paramtypes (built-in). */\n\tPARAMTYPES: \"design:paramtypes\",\n\n\t/** Class-level design:type (built-in). */\n\tTYPE: \"design:type\",\n\n\t/** Class-level design:returntype (built-in). */\n\tRETURNTYPE: \"design:returntype\",\n\n\t/** Provider token to inject for a parameter (for custom tokens). */\n\tINJECT: \"nexus:inject\",\n} as const;\n\nexport type MetadataKey = (typeof METADATA_KEY)[keyof typeof METADATA_KEY];\n\n/** Available parameter decorator locations. */\nexport const PARAM_TYPES = {\n\tREQUEST: 0,\n\tRESPONSE: 1,\n\tNEXT: 2,\n\tBODY: 3,\n\tQUERY: 4,\n\tPARAM: 5,\n\tHEADERS: 6,\n\tCTX: 7,\n\tUSER: 8,\n} as const;\n\nexport type ParamType = (typeof PARAM_TYPES)[keyof typeof PARAM_TYPES];\n\n/** HTTP methods supported by the router. */\nexport const HTTP_METHODS = [\n\t\"GET\",\n\t\"POST\",\n\t\"PUT\",\n\t\"DELETE\",\n\t\"PATCH\",\n\t\"OPTIONS\",\n\t\"HEAD\",\n] as const;\nexport type HttpMethod = (typeof HTTP_METHODS)[number];\n",
6
+ "/**\n * `RequestScope` — per-request DI lifetime via `AsyncLocalStorage`.\n *\n * Usage from a controller:\n *\n * @Get('/')\n * index(@Inject(REQUEST) req: any, @Inject(RequestContext) ctx: MyCtx) {\n * return { requestId: ctx.requestId };\n * }\n *\n * Usage from anywhere (e.g. a service deeper in the call tree):\n *\n * import { getRequest, getRequestScope } from 'nexusjs/core';\n *\n * function audit() {\n * const req = getRequest();\n * const scope = getRequestScope();\n * // ... read user, request id, etc.\n * }\n *\n * Implementation: a single `AsyncLocalStorage` slot per request. The\n * HTTP server middleware enters a new context at request start, and\n * the DI container checks for an active context when resolving\n * `scope: 'request'` providers.\n */\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { randomUUID } from \"node:crypto\";\nimport type { DIContainer } from \"./container.js\";\n\n/** The Hono context type. Kept loose to avoid a circular import. */\nexport type HonoContext = any;\n\n/**\n * Per-request state. Created by the HTTP middleware, lives for the\n * duration of a single request, and is propagated through the entire\n * async call tree via `AsyncLocalStorage`.\n */\nexport interface RequestScope {\n\t/** Unique id for this request. Useful for log correlation. */\n\treadonly id: string;\n\t/** The Hono context (c). */\n\tcontext: HonoContext;\n\t/** A per-request DI container (singleton container + this scope). */\n\tcontainer: DIContainer;\n\t/** User-extensible state bag. Modules can stash request-scoped data here. */\n\tstate: Map<string | symbol, unknown>;\n}\n\n/** Symbol token: inject the active Hono context. */\nexport const REQUEST = Symbol.for(\"nexus:REQUEST\");\n\n/** Symbol token: inject the entire RequestScope. */\nexport const REQUEST_SCOPE = Symbol.for(\"nexus:REQUEST_SCOPE\");\n\n/** Generate a short, log-friendly id. */\nfunction newRequestId(): string {\n\treturn randomUUID().slice(0, 8);\n}\n\nconst storage = new AsyncLocalStorage<RequestScope>();\n\n/** Internal: read/write access to the AsyncLocalStorage slot. */\nexport const RequestScopeStorage = {\n\t/** Get the current scope, or `undefined` if not inside a request. */\n\tget(): RequestScope | undefined {\n\t\treturn storage.getStore();\n\t},\n\t/**\n\t * Run `fn` inside a new request scope. The scope is propagated\n\t * through the async call tree.\n\t */\n\trun<T>(scope: RequestScope, fn: () => T | Promise<T>): T | Promise<T> {\n\t\treturn storage.run(scope, fn);\n\t},\n\t/**\n\t * Create a new scope. Used by the HTTP middleware.\n\t */\n\tcreate(context: HonoContext, container: DIContainer): RequestScope {\n\t\treturn {\n\t\t\tid: newRequestId(),\n\t\t\tcontext,\n\t\t\tcontainer,\n\t\t\tstate: new Map(),\n\t\t};\n\t},\n};\n\n// ---------------------------------------------------------------------------\n// Convenience helpers\n// ---------------------------------------------------------------------------\n\n/** Get the active Hono context, or `undefined` if not in a request. */\nexport function getRequest<T = HonoContext>(): T | undefined {\n\treturn storage.getStore()?.context as T | undefined;\n}\n\n/** Get the active RequestScope, or `undefined`. */\nexport function getRequestScope(): RequestScope | undefined {\n\treturn storage.getStore();\n}\n\n/** Get a piece of request-scoped state by key. */\nexport function getRequestState<T = unknown>(key: string | symbol): T | undefined {\n\treturn storage.getStore()?.state.get(key) as T | undefined;\n}\n\n/** Set a piece of request-scoped state. */\nexport function setRequestState(key: string | symbol, value: unknown): void {\n\tconst s = storage.getStore();\n\tif (s) s.state.set(key, value);\n}\n",
7
+ "/**\n * Dependency Injection Container.\n *\n * The container is the heart of the framework. It:\n * - Registers providers (classes, values, factories, aliases)\n * - Resolves dependencies recursively through reflect-metadata\n * - Manages instance lifecycles (singleton / request / transient)\n * - Detects circular dependencies and throws helpful errors\n *\n * Design notes:\n * - Modules each have their own container scope, but share the root\n * container for global providers. Exports propagate tokens upward.\n * - The container is lazy: nothing is instantiated until first resolve.\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type {\n\tFactoryProvider,\n\tInjectionToken,\n\tProvider,\n\tProviderScope,\n\tType,\n\tValueProvider,\n} from \"./tokens.js\";\nimport { RequestScopeStorage } from \"./request-scope.js\";\n\ninterface ProviderRecord {\n\ttoken: InjectionToken<any>;\n\tprovider: Provider<any>;\n\tscope: ProviderScope;\n\t/** Set of tokens this provider depends on (for cycle detection). */\n\tdependencies: Set<InjectionToken<any>>;\n}\n\nexport class DIContainer {\n\t/** Token -> provider record. */\n\tprivate providers = new Map<InjectionToken<any>, ProviderRecord>();\n\n\t/** Token -> singleton instance (lazy). */\n\tprivate singletons = new Map<InjectionToken<any>, any>();\n\n\t/** Token -> \"currently resolving\" flag for cycle detection. */\n\tprivate resolving = new Set<InjectionToken<any>>();\n\n\t/** Parent container (for hierarchical lookup of exports). */\n\tprivate parent?: DIContainer;\n\n\tconstructor(parent?: DIContainer) {\n\t\tthis.parent = parent;\n\t}\n\n\t/** Create a child container (used by modules). */\n\tcreateChild(): DIContainer {\n\t\treturn new DIContainer(this);\n\t}\n\n\t/** Register a provider or list of providers. */\n\tregister(providers: Provider<any> | Provider<any>[]): void {\n\t\tconst list = Array.isArray(providers) ? providers : [providers];\n\t\tfor (const provider of list) {\n\t\t\tthis.registerOne(provider);\n\t\t}\n\t}\n\n\tprivate registerOne(provider: Provider<any>): void {\n\t\tconst record = this.normalizeProvider(provider);\n\t\tif (this.providers.has(record.token)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Duplicate provider for token \"${this.tokenName(record.token)}\". ` +\n\t\t\t\t\t`Each token may only be registered once per container.`,\n\t\t\t);\n\t\t}\n\t\tthis.providers.set(record.token, record);\n\t}\n\n\t/**\n\t * Normalize a provider union into a uniform ProviderRecord.\n\t * - Type<...> → useClass equivalent\n\t * - { useClass | useValue | useFactory | useExisting } → as-is\n\t */\n\tprivate normalizeProvider(provider: Provider<any>): ProviderRecord {\n\t\tif (this.isClass(provider)) {\n\t\t\tconst dependencies = this.readClassDependencies(provider);\n\t\t\t// Read scope from @Injectable({ scope }) metadata if present.\n\t\t\tconst classScope = Reflect.getMetadata(\"nexus:di:scope\", provider) as\n\t\t\t\t| ProviderScope\n\t\t\t\t| undefined;\n\t\t\treturn {\n\t\t\t\ttoken: provider,\n\t\t\t\tprovider,\n\t\t\t\tscope: classScope ?? \"singleton\",\n\t\t\t\tdependencies,\n\t\t\t};\n\t\t}\n\n\t\tconst deps = this.readProviderDependencies(provider);\n\t\tconst scope: ProviderScope =\n\t\t\t(\"scope\" in provider && provider.scope) || \"singleton\";\n\n\t\treturn {\n\t\t\ttoken: provider.provide,\n\t\t\tprovider,\n\t\t\tscope,\n\t\t\tdependencies: deps,\n\t\t};\n\t}\n\n\t/** Read constructor parameter types from a class using reflect-metadata. */\n\tprivate readClassDependencies(cls: Type<any>): Set<InjectionToken<any>> {\n\t\tconst paramTypes: any[] =\n\t\t\tReflect.getMetadata(METADATA_KEY.PARAMTYPES, cls) || [];\n\t\tconst set = new Set<InjectionToken<any>>();\n\t\tfor (const t of paramTypes) {\n\t\t\tif (t && t !== Object) set.add(t);\n\t\t}\n\t\treturn set;\n\t}\n\n\t/** Read dependencies from a structured provider's `inject` array (factory). */\n\tprivate readProviderDependencies(\n\t\tprovider: Provider<any>,\n\t): Set<InjectionToken<any>> {\n\t\tconst set = new Set<InjectionToken<any>>();\n\t\tif (\n\t\t\t\"inject\" in provider &&\n\t\t\tArray.isArray((provider as FactoryProvider).inject)\n\t\t) {\n\t\t\tfor (const dep of (provider as FactoryProvider).inject!) {\n\t\t\t\tif (dep && typeof dep === \"object\" && \"token\" in dep) {\n\t\t\t\t\tset.add((dep as any).token);\n\t\t\t\t} else if (dep) {\n\t\t\t\t\tset.add(dep as InjectionToken<any>);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (\"useClass\" in provider) {\n\t\t\tconst cls = (provider as any).useClass;\n\t\t\treturn this.readClassDependencies(cls);\n\t\t}\n\t\treturn set;\n\t}\n\n\t/**\n\t * Resolve a token to an instance. Walks up the parent chain on miss.\n\t * Returns undefined when nothing is registered and the token is optional.\n\t */\n\tresolve<T = any>(token: InjectionToken<T>): T {\n\t\tif (this.resolving.has(token)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Circular dependency detected while resolving \"${this.tokenName(token)}\". ` +\n\t\t\t\t\t`Resolution stack: ${[...this.resolving].map((t) => this.tokenName(t)).join(\" -> \")}`,\n\t\t\t);\n\t\t}\n\n\t\t// Singletons are memoized at the container level where they were registered.\n\t\tconst cached = this.singletons.get(token);\n\t\tif (cached !== undefined) return cached;\n\n\t\t// Request-scoped providers are memoized per active request. The\n\t\t// request scope is held in AsyncLocalStorage so any deep call\n\t\t// (services, repositories, ...) sees the same instance.\n\t\tconst record0 = this.providers.get(token);\n\t\tif (record0 && record0.scope === \"request\") {\n\t\t\tconst scope = RequestScopeStorage.get();\n\t\t\tif (scope) {\n\t\t\t\tconst r2 = scope.container.singletons.get(token);\n\t\t\t\tif (r2 !== undefined) return r2;\n\t\t\t\tconst inst = this.instantiate(record0);\n\t\t\t\tscope.container.singletons.set(token, inst);\n\t\t\t\treturn inst;\n\t\t\t}\n\t\t}\n\n\t\tconst record = this.providers.get(token);\n\t\tif (!record) {\n\t\t\tif (this.parent) {\n\t\t\t\ttry {\n\t\t\t\t\treturn this.parent.resolve<T>(token);\n\t\t\t\t} catch {\n\t\t\t\t\t// Fall through to throw a richer error below.\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`No provider for \"${this.tokenName(token)}\". ` +\n\t\t\t\t\t`Register it via DIContainer.register() or @Module({ providers: [...] }).`,\n\t\t\t);\n\t\t}\n\n\t\t// Singletons resolve from the registering container so identity is stable.\n\t\tconst owningContainer = this.providers.get(token) === record ? this : this;\n\n\t\tthis.resolving.add(token);\n\t\ttry {\n\t\t\tconst instance = owningContainer.instantiate(record);\n\t\t\tif (record.scope === \"singleton\") {\n\t\t\t\towningContainer.singletons.set(token, instance);\n\t\t\t}\n\t\t\treturn instance;\n\t\t} finally {\n\t\t\tthis.resolving.delete(token);\n\t\t}\n\t}\n\n\t/** Try to resolve; return undefined instead of throwing when missing. */\n\ttryResolve<T = any>(token: InjectionToken<T>): T | undefined {\n\t\ttry {\n\t\t\treturn this.resolve<T>(token);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Instantiate a single provider record. Calls itself recursively\n\t * for each constructor parameter.\n\t */\n\tprivate instantiate(record: ProviderRecord): any {\n\t\tconst provider = record.provider;\n\n\t\tif (this.isClass(provider)) {\n\t\t\tconst paramTypes: any[] =\n\t\t\t\tReflect.getMetadata(METADATA_KEY.PARAMTYPES, provider) || [];\n\t\t\t// Bun's TypeScript transformer does NOT emit `design:paramtypes`,\n\t\t\t// so we also accept explicit @Inject() tokens per parameter as a\n\t\t\t// portable fallback. If @Inject metadata exists for a given index,\n\t\t\t// it overrides the (missing) type metadata.\n\t\t\tconst injectMap: Map<number, any> =\n\t\t\t\tReflect.getMetadata(METADATA_KEY.INJECT, provider) ?? new Map();\n\n\t\t\t// Use the larger of paramTypes.length and the highest @Inject key,\n\t\t\t// because esbuild/Bun may emit empty paramTypes while @Inject metadata\n\t\t\t// still describes real dependencies.\n\t\t\tconst maxInjectIndex =\n\t\t\t\tinjectMap.size > 0 ? Math.max(...Array.from(injectMap.keys())) + 1 : 0;\n\t\t\tconst totalParams = Math.max(paramTypes.length, maxInjectIndex);\n\t\t\tconst params: any[] = new Array(totalParams);\n\n\t\t\tfor (let index = 0; index < totalParams; index++) {\n\t\t\t\tif (injectMap.has(index)) {\n\t\t\t\t\tparams[index] = this.resolve(injectMap.get(index));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst type = paramTypes[index];\n\t\t\t\tif (!type || type === Object) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Cannot inject parameter at index ${index} of \"${provider.name || \"<anonymous>\"}\" ` +\n\t\t\t\t\t\t\t`(type is \"Object\" or \"undefined\"). This usually means ` +\n\t\t\t\t\t\t\t`reflect-metadata was not emitted by your toolchain (Bun's ` +\n\t\t\t\t\t\t\t`native transpiler doesn't emit decorator metadata). Use the ` +\n\t\t\t\t\t\t\t`@Inject(Token) parameter decorator to specify the dependency ` +\n\t\t\t\t\t\t\t`explicitly, e.g. \\`constructor(@Inject(UserService) private users: UserService)\\`.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tparams[index] = this.resolve(type);\n\t\t\t}\n\n\t\t\treturn new provider(...params);\n\t\t}\n\n\t\tif (\"useValue\" in provider) {\n\t\t\treturn (provider as ValueProvider<any>).useValue;\n\t\t}\n\n\t\tif (\"useClass\" in provider) {\n\t\t\tconst ClassRef = (provider as any).useClass as Type<any>;\n\t\t\t// Same logic as the bare-class branch: prefer @Inject tokens, fall\n\t\t\t// back to design:paramtypes, throw on missing metadata.\n\t\t\tconst paramTypes: any[] =\n\t\t\t\tReflect.getMetadata(METADATA_KEY.PARAMTYPES, ClassRef) || [];\n\t\t\tconst injectMap: Map<number, any> =\n\t\t\t\tReflect.getMetadata(METADATA_KEY.INJECT, ClassRef) ?? new Map();\n\t\t\tconst maxInjectIndex =\n\t\t\t\tinjectMap.size > 0 ? Math.max(...Array.from(injectMap.keys())) + 1 : 0;\n\t\t\tconst totalParams = Math.max(paramTypes.length, maxInjectIndex);\n\t\t\tconst params: any[] = new Array(totalParams);\n\t\t\tfor (let index = 0; index < totalParams; index++) {\n\t\t\t\tif (injectMap.has(index)) {\n\t\t\t\t\tparams[index] = this.resolve(injectMap.get(index));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst type = paramTypes[index];\n\t\t\t\tif (!type || type === Object) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Cannot inject parameter at index ${index} of \"${ClassRef.name}\" ` +\n\t\t\t\t\t\t\t`(type is \"Object\" or \"undefined\"). Add explicit type annotations or ` +\n\t\t\t\t\t\t\t`use @Inject(Token).`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tparams[index] = this.resolve(type);\n\t\t\t}\n\t\t\treturn new ClassRef(...params);\n\t\t}\n\n\t\tif (\"useFactory\" in provider) {\n\t\t\tconst factoryProvider = provider as FactoryProvider<any>;\n\t\t\tconst inject = factoryProvider.inject ?? [];\n\t\t\tconst args = inject.map((dep) => {\n\t\t\t\tif (dep && typeof dep === \"object\" && \"token\" in dep) {\n\t\t\t\t\tconst { token, optional } = dep as any;\n\t\t\t\t\treturn optional ? this.tryResolve(token) : this.resolve(token);\n\t\t\t\t}\n\t\t\t\treturn this.resolve(dep as InjectionToken<any>);\n\t\t\t});\n\t\t\treturn factoryProvider.useFactory(...args);\n\t\t}\n\n\t\tif (\"useExisting\" in provider) {\n\t\t\tconst existing = (provider as any).useExisting as InjectionToken<any>;\n\t\t\treturn this.resolve(existing);\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`Unknown provider shape for token \"${this.tokenName(record.token)}\"`,\n\t\t);\n\t}\n\n\t/** Check whether a token is registered locally (does not consult parent). */\n\thas(token: InjectionToken<any>): boolean {\n\t\treturn this.providers.has(token);\n\t}\n\n\t/** Inspect the registered tokens (debug aid). */\n\tlist(): string[] {\n\t\treturn [...this.providers.keys()].map((t) => this.tokenName(t));\n\t}\n\n\tprivate isClass(value: any): value is Type<any> {\n\t\treturn typeof value === \"function\";\n\t}\n\n\tprivate tokenName(token: InjectionToken<any>): string {\n\t\tif (typeof token === \"function\") return token.name || \"<anonymous class>\";\n\t\tif (typeof token === \"symbol\") return token.toString();\n\t\treturn String(token);\n\t}\n}\n\n/**\n * Root application container. Modules created via @Module register their\n * providers into child containers of this root.\n */\nexport class ApplicationContainer extends DIContainer {\n\tprivate moduleContainers = new Map<Type<any>, DIContainer>();\n\n\tregisterModule(moduleClass: Type<any>, container: DIContainer): void {\n\t\tthis.moduleContainers.set(moduleClass, container);\n\t}\n\n\tgetModuleContainer(moduleClass: Type<any>): DIContainer | undefined {\n\t\treturn this.moduleContainers.get(moduleClass);\n\t}\n}\n",
8
+ "/**\n * Module scanner.\n *\n * Reads the @Module({...}) metadata and recursively registers all\n * providers/controllers from imports, registering exports into the\n * parent container so cross-module injection works.\n */\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { ApplicationContainer, DIContainer } from \"./container.js\";\nimport type { ModuleOptions, Provider, Type } from \"./tokens.js\";\n\ninterface ScanResult {\n\t/** Controllers registered by this module. */\n\tcontrollers: Type[];\n\t/** Providers registered locally (classes + non-class providers). */\n\tproviders: Provider[];\n\t/** Tokens exported by this module. */\n\texports: any[];\n\t/** Container holding the module's locally-scoped providers. */\n\tcontainer: DIContainer;\n}\n\nexport class ModuleScanner {\n\tprivate scanned = new Map<Type<any>, ScanResult>();\n\n\tconstructor(private root: ApplicationContainer) {}\n\n\t/**\n\t * Scan a module tree starting from `rootModule`, registering all\n\t * providers and controllers into the appropriate containers.\n\t */\n\tscan(rootModule: Type<any>): { root: ScanResult; modules: ScanResult[] } {\n\t\tconst rootResult = this.scanModule(rootModule, this.root);\n\t\tconst all = [...this.scanned.values()];\n\t\treturn { root: rootResult, modules: all };\n\t}\n\n\t/**\n\t * Scan one module. Recurses into its `imports`, then registers its\n\t * providers and controllers. Exports are exposed to the parent\n\t * container.\n\t */\n\tprivate scanModule(\n\t\tmoduleClass: Type<any>,\n\t\tparentContainer: DIContainer,\n\t): ScanResult {\n\t\tif (this.scanned.has(moduleClass)) {\n\t\t\treturn this.scanned.get(moduleClass)!;\n\t\t}\n\n\t\tconst options = this.readModuleOptions(moduleClass);\n\t\tconst container = parentContainer.createChild();\n\t\tthis.root.registerModule(moduleClass, container);\n\n\t\t// Pre-fill the slot to break import cycles when modules reference each other.\n\t\tconst placeholder: ScanResult = {\n\t\t\tcontrollers: [],\n\t\t\tproviders: [],\n\t\t\texports: [],\n\t\t\tcontainer,\n\t\t};\n\t\tthis.scanned.set(moduleClass, placeholder);\n\n\t\t// Recurse into imports first so dependent tokens exist.\n\t\tfor (const imported of options.imports ?? []) {\n\t\t\tconst importedResult = this.scanModule(imported, parentContainer);\n\t\t\t// Expose imports' exports to the parent's container so the importing\n\t\t\t// module can resolve them.\n\t\t\tfor (const exp of importedResult.exports) {\n\t\t\t\tif (!parentContainer.has(exp)) {\n\t\t\t\t\t// Re-export by creating a passthrough provider that resolves from\n\t\t\t\t\t// the imported module's container.\n\t\t\t\t\tparentContainer.register({\n\t\t\t\t\t\tprovide: exp,\n\t\t\t\t\t\tuseFactory: () => importedResult.container.resolve(exp),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Register providers (and controllers as providers for DI).\n\t\tconst providers = [\n\t\t\t...(options.providers ?? []),\n\t\t\t...(options.controllers ?? []),\n\t\t];\n\t\tcontainer.register(providers);\n\n\t\t// Expose declared exports from this module's container to the parent.\n\t\tfor (const exp of options.exports ?? []) {\n\t\t\tif (!parentContainer.has(exp)) {\n\t\t\t\tparentContainer.register({\n\t\t\t\t\tprovide: exp,\n\t\t\t\t\tuseFactory: () => container.resolve(exp),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst result: ScanResult = {\n\t\t\tcontrollers: options.controllers ?? [],\n\t\t\tproviders: options.providers ?? [],\n\t\t\texports: options.exports ?? [],\n\t\t\tcontainer,\n\t\t};\n\t\tthis.scanned.set(moduleClass, result);\n\t\treturn result;\n\t}\n\n\tprivate readModuleOptions(moduleClass: Type<any>): ModuleOptions {\n\t\tconst meta = Reflect.getMetadata(METADATA_KEY.MODULE, moduleClass) as\n\t\t\t| ModuleOptions\n\t\t\t| undefined;\n\t\tif (!meta) {\n\t\t\tthrow new Error(\n\t\t\t\t`Class \"${moduleClass.name}\" is missing the @Module() decorator.`,\n\t\t\t);\n\t\t}\n\t\treturn meta;\n\t}\n\n\t/** Get a previously-scanned module's result (debug aid). */\n\tget(moduleClass: Type<any>): ScanResult | undefined {\n\t\treturn this.scanned.get(moduleClass);\n\t}\n}\n",
9
+ "/**\n * HTTP middleware primitives.\n *\n * Middleware in Nexus is just a Hono-compatible function: `(c, next) => ...`.\n * The framework exposes a few ready-made middlewares (logger, CORS, error)\n * and lets users write their own.\n */\nimport type { Context, Next } from \"hono\";\n\n/** A Nexus/Hono middleware signature. */\nexport type Middleware = (c: Context, next: Next) => any | Promise<any>;\n\n/** Simple request logger. Logs method, URL, status, duration. */\nexport function logger(): Middleware {\n\treturn async (c, next) => {\n\t\tconst start = performance.now();\n\t\tawait next();\n\t\tconst ms = (performance.now() - start).toFixed(2);\n\t\tconst status = c.res.status;\n\t\tconsole.log(`[${c.req.method}] ${c.req.path} -> ${status} (${ms}ms)`);\n\t\treturn;\n\t};\n}\n\n/**\n * CORS middleware.\n *\n * An explicit origin (string or string[]) is required. The function does\n * not default to '*' because that is unsafe with credentials. Pass '*'\n * explicitly via `origin: '*'` only if you know your API has no cookies.\n */\nexport function cors(options: {\n\torigin: string | string[];\n\tmethods?: string[];\n\theaders?: string[];\n\tcredentials?: boolean;\n}): Middleware {\n\tconst origin = options.origin;\n\tconst methods = options.methods ?? [\n\t\t\"GET\",\n\t\t\"POST\",\n\t\t\"PUT\",\n\t\t\"DELETE\",\n\t\t\"PATCH\",\n\t\t\"OPTIONS\",\n\t\t\"HEAD\",\n\t];\n\tconst headerList = options.headers ?? [\"Content-Type\", \"Authorization\"];\n\tconst headersValue = Array.isArray(headerList)\n\t\t? headerList.join(\",\")\n\t\t: headerList;\n\n\treturn async (c, next) => {\n\t\tconst set = (key: string, value: string) => {\n\t\t\tc.res.headers.set(key, value);\n\t\t};\n\t\tset(\n\t\t\t\"Access-Control-Allow-Origin\",\n\t\t\tArray.isArray(origin) ? origin.join(\",\") : origin,\n\t\t);\n\t\tset(\"Access-Control-Allow-Methods\", methods.join(\",\"));\n\t\tset(\"Access-Control-Allow-Headers\", headersValue);\n\t\tif (options.credentials) set(\"Access-Control-Allow-Credentials\", \"true\");\n\n\t\tif (c.req.method === \"OPTIONS\") {\n\t\t\treturn c.body(null, 204);\n\t\t}\n\t\tawait next();\n\t\treturn;\n\t};\n}\n\n/**\n * Catch-all error handler. Translates errors with `status` and `body`\n * properties into JSON responses.\n */\nexport function errorHandler(): Middleware {\n\treturn async (c, next) => {\n\t\ttry {\n\t\t\tawait next();\n\t\t} catch (err: any) {\n\t\t\tconst status = err?.status ?? 500;\n\t\t\tconst body = err?.body ?? {\n\t\t\t\terror: err?.message ?? \"Internal Server Error\",\n\t\t\t};\n\t\t\treturn c.json(body, status as any);\n\t\t}\n\t\treturn;\n\t};\n}\n",
10
+ "/**\n * @Controller decorator.\n *\n * Marks a class as a controller and registers a route prefix.\n * Routes inside the controller class are decorated with @Get/@Post/etc.\n *\n * @example\n * ```ts\n * @Controller('/users')\n * class UserController {\n * @Get('/')\n * list() { ... }\n * }\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { ControllerMetadata } from \"../di/tokens.js\";\n\nexport function Controller(prefix: string = \"/\"): ClassDecorator {\n\treturn (target: object) => {\n\t\tconst normalized = normalizePrefix(prefix);\n\t\tconst meta: ControllerMetadata = { prefix: normalized };\n\t\tReflect.defineMetadata(METADATA_KEY.CONTROLLER, meta, target);\n\t};\n}\n\nexport function getControllerMetadata(target: any): ControllerMetadata {\n\treturn (\n\t\tReflect.getMetadata(METADATA_KEY.CONTROLLER, target) ?? { prefix: \"/\" }\n\t);\n}\n\nexport function isController(target: any): boolean {\n\treturn Reflect.hasMetadata(METADATA_KEY.CONTROLLER, target);\n}\n\n/**\n * Normalize a prefix so we can safely concatenate it with handler paths.\n * - Empty string becomes '/'.\n * - Trailing slashes are trimmed (we re-add them on the join).\n * - No leading slash is added; the router always joins with `/`.\n */\nfunction normalizePrefix(prefix: string): string {\n\tif (!prefix) return \"\";\n\tif (prefix !== \"/\" && prefix.endsWith(\"/\")) {\n\t\treturn prefix.slice(0, -1);\n\t}\n\treturn prefix;\n}\n",
11
+ "/**\n * HTTP method decorators.\n *\n * `@Get`, `@Post`, `@Put`, `@Delete`, `@Patch`, `@Options`, `@Head` mark a\n * controller method as a route handler. The path argument is appended to\n * the controller's prefix.\n *\n * @example\n * ```ts\n * @Controller('/users')\n * class UserController {\n * @Get('/')\n * list() {}\n *\n * @Post('/')\n * create(@Body() body: CreateUserDto) {}\n * }\n * ```\n */\nimport \"reflect-metadata\";\nimport { HTTP_METHODS, METADATA_KEY, type HttpMethod } from \"../constants.js\";\nimport type { RouteMetadata } from \"../di/tokens.js\";\n\nfunction defineRoute(method: HttpMethod, path: string): MethodDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol,\n\t\tdescriptor: PropertyDescriptor,\n\t) => {\n\t\tconst routes: RouteMetadata[] =\n\t\t\tReflect.getMetadata(METADATA_KEY.ROUTES, target.constructor) ?? [];\n\n\t\troutes.push({\n\t\t\tmethod,\n\t\t\tpath: normalizePath(path),\n\t\t\tpropertyKey,\n\t\t\thandler: descriptor.value,\n\t\t});\n\n\t\tReflect.defineMetadata(METADATA_KEY.ROUTES, routes, target.constructor);\n\t};\n}\n\nfunction normalizePath(path: string): string {\n\tif (!path || path === \"/\") return \"/\";\n\treturn path.startsWith(\"/\") ? path : `/${path}`;\n}\n\nexport const Get = (path: string = \"/\") => defineRoute(\"GET\", path);\nexport const Post = (path: string = \"/\") => defineRoute(\"POST\", path);\nexport const Put = (path: string = \"/\") => defineRoute(\"PUT\", path);\nexport const Delete = (path: string = \"/\") => defineRoute(\"DELETE\", path);\nexport const Patch = (path: string = \"/\") => defineRoute(\"PATCH\", path);\nexport const Options = (path: string = \"/\") => defineRoute(\"OPTIONS\", path);\nexport const Head = (path: string = \"/\") => defineRoute(\"HEAD\", path);\n\nexport function getRoutes(target: any): RouteMetadata[] {\n\treturn Reflect.getMetadata(METADATA_KEY.ROUTES, target) ?? [];\n}\n\nexport { HTTP_METHODS };\nexport type { RouteMetadata };\n",
12
+ "/**\n * Parameter decorators.\n *\n * These mark a controller method argument as a source of request data:\n * - `@Req()` → Hono context\n * - `@Res()` → Response helper\n * - `@Next()` → next() callback (for middleware-style handlers)\n * - `@Body()` → request body (parsed)\n * - `@Query('key')` → a single query param, or full query object\n * - `@Param('key')` → a single path param, or full params object\n * - `@Headers('k')` → a single header, or full headers object\n * - `@Ctx()` → Hono context (alias for @Req)\n * - `@User()` → authenticated user (resolved via auth provider)\n *\n * The metadata is read by the router at mount time to build the\n * handler invocation list.\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY, PARAM_TYPES } from \"../constants.js\";\nimport type { ParamMetadata } from \"../di/tokens.js\";\n\nexport function createParamDecorator(\n\ttype: number,\n\tdata?: string | object,\n): ParameterDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol | undefined,\n\t\tparameterIndex: number,\n\t) => {\n\t\t// Method parameter: target is the prototype, propertyKey is the method name.\n\t\t// Constructor parameter: target is the class, propertyKey is undefined.\n\t\tif (propertyKey !== undefined) {\n\t\t\tconst params: ParamMetadata[] =\n\t\t\t\tReflect.getMetadata(METADATA_KEY.PARAMS, target, propertyKey) ?? [];\n\t\t\tparams.push({\n\t\t\t\tindex: parameterIndex,\n\t\t\t\ttype,\n\t\t\t\tname: typeof data === \"string\" ? data : undefined,\n\t\t\t\tdata: typeof data === \"object\" ? data : undefined,\n\t\t\t});\n\t\t\tReflect.defineMetadata(METADATA_KEY.PARAMS, params, target, propertyKey);\n\t\t} else {\n\t\t\tconst params: ParamMetadata[] =\n\t\t\t\tReflect.getMetadata(METADATA_KEY.PARAMS, target) ?? [];\n\t\t\tparams.push({\n\t\t\t\tindex: parameterIndex,\n\t\t\t\ttype,\n\t\t\t\tname: typeof data === \"string\" ? data : undefined,\n\t\t\t\tdata: typeof data === \"object\" ? data : undefined,\n\t\t\t});\n\t\t\tReflect.defineMetadata(METADATA_KEY.PARAMS, params, target);\n\t\t}\n\t};\n}\n\nexport const Req = () => createParamDecorator(PARAM_TYPES.REQUEST);\nexport const Res = () => createParamDecorator(PARAM_TYPES.RESPONSE);\nexport const Next = () => createParamDecorator(PARAM_TYPES.NEXT);\nexport const Body = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.BODY, key);\nexport const Query = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.QUERY, key);\nexport const Param = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.PARAM, key);\nexport const Headers = (key?: string) =>\n\tcreateParamDecorator(PARAM_TYPES.HEADERS, key);\nexport const Ctx = () => createParamDecorator(PARAM_TYPES.CTX);\nexport const User = () => createParamDecorator(PARAM_TYPES.USER);\n\nexport function getParamMetadata(\n\ttarget: any,\n\tpropertyKey: string | symbol,\n): ParamMetadata[] {\n\treturn Reflect.getMetadata(METADATA_KEY.PARAMS, target, propertyKey) ?? [];\n}\n\nexport { PARAM_TYPES };\n",
13
+ "/**\n * @Validate decorator.\n *\n * Attaches Zod schemas (or class validators) to a route handler. Each\n * schema is run against the corresponding request part before the handler\n * executes; failed validation throws or returns a 400 response.\n *\n * @example\n * ```ts\n * const UserSchema = z.object({ name: z.string(), email: z.email() });\n *\n * @Post('/')\n * @Validate({ body: UserSchema })\n * create(@Body() body: z.infer<typeof UserSchema>) { ... }\n * ```\n */\nimport \"reflect-metadata\";\nimport { METADATA_KEY } from \"../constants.js\";\nimport type { ValidationMetadata } from \"../di/tokens.js\";\n\nexport function Validate(options: ValidationMetadata): MethodDecorator {\n\treturn (\n\t\ttarget: object,\n\t\tpropertyKey: string | symbol,\n\t\tdescriptor: PropertyDescriptor,\n\t) => {\n\t\tReflect.defineMetadata(\n\t\t\tMETADATA_KEY.VALIDATE,\n\t\t\toptions,\n\t\t\ttarget.constructor,\n\t\t\tpropertyKey,\n\t\t);\n\t};\n}\n\nexport function getValidationMetadata(\n\ttarget: any,\n\tpropertyKey: string | symbol,\n): ValidationMetadata | undefined {\n\treturn Reflect.getMetadata(METADATA_KEY.VALIDATE, target, propertyKey);\n}\n",
14
+ "/**\n * Zod-based validation pipeline.\n *\n * `validateRequest` runs the configured Zod schemas for each request part\n * and either returns the parsed value or throws a ValidationError.\n *\n * Schemas are read from @Validate({ body, query, params, headers }) on the\n * handler method.\n */\nimport type { ZodError, ZodSchema } from \"zod\";\nimport type { ValidationMetadata } from \"../di/tokens.js\";\n\nexport class ValidationError extends Error {\n\treadonly status = 400;\n\treadonly issues: ZodError[\"issues\"];\n\n\tconstructor(zodError: ZodError) {\n\t\tsuper(\"Validation failed\");\n\t\tthis.name = \"ValidationError\";\n\t\tthis.issues = zodError.issues;\n\t}\n}\n\nexport interface ValidationInput {\n\tbody?: unknown;\n\tquery?: unknown;\n\tparams?: unknown;\n\theaders?: unknown;\n}\n\nexport interface ValidationResult {\n\tbody?: unknown;\n\tquery?: unknown;\n\tparams?: unknown;\n\theaders?: unknown;\n}\n\n/**\n * Validate the request using the handler's @Validate metadata. Returns\n * parsed values keyed by part. Throws ValidationError on the first\n * failure (body → query → params → headers order).\n */\nexport function validateRequest(\n\tmetadata: ValidationMetadata | undefined,\n\tinput: ValidationInput,\n): ValidationResult {\n\tif (!metadata) return input as ValidationResult;\n\n\tconst result: ValidationResult = {};\n\n\tif (metadata.body) result.body = runSchema(metadata.body, input.body, \"body\");\n\telse result.body = input.body;\n\n\tif (metadata.query)\n\t\tresult.query = runSchema(metadata.query, input.query, \"query\");\n\telse result.query = input.query;\n\n\tif (metadata.params)\n\t\tresult.params = runSchema(metadata.params, input.params, \"params\");\n\telse result.params = input.params;\n\n\tif (metadata.headers)\n\t\tresult.headers = runSchema(metadata.headers, input.headers, \"headers\");\n\telse result.headers = input.headers;\n\n\treturn result;\n}\n\nfunction runSchema(schema: any, value: unknown, part: string): unknown {\n\tif (!isZodSchema(schema)) {\n\t\t// Allow passing a class validator or function as an escape hatch.\n\t\tif (typeof schema === \"function\") return schema(value);\n\t\tthrow new Error(\n\t\t\t`@Validate \"${part}\" must be a Zod schema or validator function. Got ${typeof schema}.`,\n\t\t);\n\t}\n\tconst parsed = schema.safeParse(value);\n\tif (!parsed.success) {\n\t\tthrow new ValidationError(parsed.error);\n\t}\n\treturn parsed.data;\n}\n\nfunction isZodSchema(value: any): value is ZodSchema {\n\treturn (\n\t\tvalue !== null &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof value.safeParse === \"function\"\n\t);\n}\n\n/**\n * Default error formatter for ValidationError.\n * Renders a JSON body suitable for the framework's HTTP layer.\n */\nexport function formatValidationError(err: ValidationError): {\n\tstatus: number;\n\tbody: { error: string; issues: ZodError[\"issues\"] };\n} {\n\treturn {\n\t\tstatus: err.status,\n\t\tbody: {\n\t\t\terror: err.message,\n\t\t\tissues: err.issues,\n\t\t},\n\t};\n}\n",
15
+ "/**\n * Rendu template engine adapter.\n *\n * Rendu is a PHP-style templating library that compiles templates into\n * render functions, which makes it fast and edge-friendly (no eval, no\n * file-system access at render time). It is the default adapter because\n * it works on every runtime the framework supports.\n *\n * See: https://github.com/h3js/rendu\n */\nimport { compileTemplate } from \"rendu\";\nimport type { ViewAdapter, ViewContext, ViewOptions } from \"./types.js\";\n\nexport class RenduAdapter implements ViewAdapter {\n\treadonly name = \"rendu\";\n\tprivate cache = new Map<string, ReturnType<typeof compileTemplate>>();\n\n\trender(\n\t\ttemplate: string,\n\t\tdata: Record<string, any>,\n\t\tcontext?: ViewContext,\n\t\toptions?: ViewOptions,\n\t): Promise<string> {\n\t\t// Workaround for a Rendu 0.1.0 bug: its generated runtime\n\t\t// does `typeof chunk === \"string\" ? chunk : new TextDecoder()\n\t\t// .decode(chunk)`, so any non-string chunk (a number from\n\t\t// `<?= year ?>`, a boolean, etc.) throws. We shallow-coerce\n\t\t// top-level values to strings here. The framework's contract\n\t\t// is that view templates render output — arithmetic in\n\t\t// templates is rare and users who need it can wrap with\n\t\t// `Number(...)` explicitly.\n\t\tconst safe: Record<string, any> = {};\n\t\tfor (const [k, v] of Object.entries(data)) {\n\t\t\tsafe[k] = typeof v === \"string\" ? v : v == null ? \"\" : String(v);\n\t\t}\n\t\tconst merged = this.mergeData(safe, context, options);\n\t\treturn this.getCompiled(template, options)(merged);\n\t}\n\n\tcompile(template: string, options?: ViewOptions) {\n\t\tconst compiled = this.getCompiled(template, options);\n\t\treturn (data: Record<string, any>) => compiled(data);\n\t}\n\n\tprivate getCompiled(template: string, options?: ViewOptions) {\n\t\tconst cacheKey = options ? `${options.stream ? \"s\" : \"\"}` : \"\";\n\t\tlet compiled = this.cache.get(cacheKey);\n\t\tif (!compiled) {\n\t\t\tcompiled = compileTemplate(template, {\n\t\t\t\tstream: options?.stream ?? false,\n\t\t\t});\n\t\t\tthis.cache.set(cacheKey, compiled);\n\t\t}\n\t\treturn compiled;\n\t}\n\n\t/** Merge user data with view context globals. */\n\tprivate mergeData(\n\t\tdata: Record<string, any>,\n\t\tcontext?: ViewContext,\n\t\toptions?: ViewOptions,\n\t): Record<string, any> {\n\t\tconst merged: Record<string, any> = { ...data };\n\t\tif (context) {\n\t\t\tif (context.request) merged.$REQUEST = context.request;\n\t\t\tif (context.response) merged.$RESPONSE = context.response;\n\t\t\tif (context.globals) Object.assign(merged, context.globals);\n\t\t}\n\t\tif (options?.layout) merged.$LAYOUT = options.layout;\n\t\treturn merged;\n\t}\n}\n",
16
+ "/**\n * Edge-style template engine adapter (Adonis-style).\n *\n * Edge is the templating engine built for AdonisJS with a mustache-like\n * syntax (`{{ }}`, `@if`, `@each`). It is bundled here as a placeholder\n * for users who prefer that style.\n *\n * The adapter does not bundle Edge directly — it expects the user to\n * provide an `Edge` instance via the constructor so the dependency\n * stays optional.\n */\nimport type { ViewAdapter, ViewContext, ViewOptions } from \"./types.js\";\n\nexport interface EdgeLike {\n\trenderRaw?: (template: string, data: Record<string, any>) => Promise<string>;\n\trenderString?: (\n\t\ttemplate: string,\n\t\tdata: Record<string, any>,\n\t) => Promise<string>;\n}\n\nexport class EdgeAdapter implements ViewAdapter {\n\treadonly name = \"edge\";\n\tconstructor(private edge?: EdgeLike) {}\n\n\tasync render(\n\t\ttemplate: string,\n\t\tdata: Record<string, any>,\n\t\tcontext?: ViewContext,\n\t\toptions?: ViewOptions,\n\t): Promise<string> {\n\t\tif (!this.edge) {\n\t\t\tthrow new Error(\n\t\t\t\t\"EdgeAdapter requires an Edge instance. \" +\n\t\t\t\t\t\"Install `edge.js` and pass it to `new EdgeAdapter(edge)`, \" +\n\t\t\t\t\t\"or use the default RenduAdapter instead.\",\n\t\t\t);\n\t\t}\n\t\tconst fn = this.edge.renderRaw ?? this.edge.renderString;\n\t\tif (!fn) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Provided Edge instance does not implement renderRaw/renderString.\",\n\t\t\t);\n\t\t}\n\t\treturn fn.call(this.edge, template, { ...data, $OPTIONS: options });\n\t}\n}\n",
17
+ "/**\n * Eta template engine adapter.\n *\n * Eta is a lightweight, high-performance templating engine with\n * EJS-like syntax (`<%= expr %>`, `<% code %>`). It works on every\n * runtime (Bun, Node, Deno, Cloudflare Workers) because templates\n * are compiled to JavaScript render functions — no eval, no\n * filesystem access at render time.\n *\n * Install (optional peer dep): `bun add eta`\n *\n * import { EtaAdapter } from \"nexusjs/view\";\n * const eta = new EtaAdapter();\n * const html = await eta.render(\"<h1><%= it.title %></h1>\", { title: \"Hi\" });\n *\n * Or just use a file with a `.eta` extension — `renderView` picks\n * the Eta adapter automatically:\n *\n * setViewPaths(\"views\");\n * return { view: \"about.eta\", data: { title: \"Hi\" } };\n */\nimport type { ViewAdapter, ViewContext, ViewOptions } from \"./types.js\";\n\nexport class EtaAdapter implements ViewAdapter {\n\treadonly name = \"eta\";\n\tprivate cache = new Map<string, (data: Record<string, any>) => string>();\n\n\tasync render(\n\t\ttemplate: string,\n\t\tdata: Record<string, any>,\n\t\t_context?: ViewContext,\n\t\t_options?: ViewOptions,\n\t): Promise<string> {\n\t\tconst compiled = this.getCompiled(template);\n\t\treturn compiled(data);\n\t}\n\n\tcompile(template: string, _options?: ViewOptions) {\n\t\tconst compiled = this.getCompiled(template);\n\t\treturn (data: Record<string, any>) => Promise.resolve(compiled(data));\n\t}\n\n\tprivate getCompiled(template: string) {\n\t\tlet fn = this.cache.get(template);\n\t\tif (!fn) {\n\t\t\t// Lazy require so `eta` is truly optional. If the\n\t\t\t// user never uses `.eta` files, Eta isn't loaded.\n\t\t\tlet Eta: any;\n\t\t\ttry {\n\t\t\t\t// @ts-ignore — eta is an optional peer dep\n\t\t\t\tEta = require(\"eta\").Eta;\n\t\t\t} catch (e) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`[nexus] EtaAdapter: the \"eta\" package is not installed. ` +\n\t\t\t\t\t\t`Run \\`bun add eta\\` (or \\`npm install eta\\`) to use .eta templates.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst eta = new Eta();\n\t\t\tfn = (data: Record<string, any>) =>\n\t\t\t\teta.renderString(template, data) as string;\n\t\t\tthis.cache.set(template, fn);\n\t\t}\n\t\treturn fn;\n\t}\n}\n",
18
+ "/**\n * View engine abstraction.\n *\n * The framework can render templates using any installed engine. Built-in\n * adapters ship for Rendu (PHP-style templates), Edge (Adonis-style),\n * and Eta (EJS-style).\n *\n * The default adapter is Rendu because it works on every runtime —\n * Cloudflare Workers, Bun, Deno, and Node — without extra dependencies.\n */\nimport { RenduAdapter } from \"./rendu.js\";\nimport { EdgeAdapter } from \"./edge.js\";\nimport { EtaAdapter } from \"./eta.js\";\nimport type { ViewAdapter, ViewContext } from \"./types.js\";\n\nexport type { ViewAdapter, ViewContext, ViewOptions } from \"./types.js\";\n\n/**\n * A single directory to search when the `view` value looks like a file path\n * (e.g. `\"about.html\"` or `\"emails/welcome.html\"`). Configured via\n * `setViewPaths()` or `Application.setViewPaths()`. Empty by default\n * — leave it empty (the default) to require inline templates,\n * or set it once at boot to enable file-based views.\n */\nlet viewPath: string = \"\";\n\n/** Set the directory searched for view files. Pass `\"\"` to disable. */\nexport function setViewPaths(path: string): void {\n\tviewPath = path ? (path.endsWith(\"/\") || path.endsWith(\"\\\\\") ? path : `${path}/`) : \"\";\n}\n\n/** Return the current view path (empty string means disabled). */\nexport function getViewPaths(): string {\n\treturn viewPath;\n}\n\n/** File extensions that indicate the `view` value is a file path. */\nconst VIEW_FILE_EXTS = [\".html\", \".edge\", \".rendu\", \".eta\"] as const;\n\n/**\n * Is the given string a file path (i.e. has one of the known view\n * file extensions)? Used to decide whether `renderView` should\n * load the file from disk or treat the string as inline source.\n */\nfunction isViewFilePath(name: string): boolean {\n\tconst lower = name.toLowerCase();\n\treturn VIEW_FILE_EXTS.some((ext) => lower.endsWith(ext));\n}\n\n/**\n * Pick the right adapter for a given template source. Selection\n * is by file extension:\n * `.edge` → EdgeAdapter\n * `.eta` → EtaAdapter\n * `.html` / `.rendu` / no extension → RenduAdapter (default)\n */\nfunction selectAdapter(template: string): ViewAdapter {\n\tconst lower = template.toLowerCase();\n\tif (lower.endsWith(\".edge\")) return new EdgeAdapter();\n\tif (lower.endsWith(\".eta\")) return new EtaAdapter();\n\treturn new RenduAdapter();\n}\n\n/**\n * Render a view.\n *\n * - If `template` ends in a known view file extension (`.html`,\n * `.edge`, `.rendu`, `.eta`) and `viewPaths` is non-empty, the\n * file is loaded from the first matching directory and used\n * as the template source. The adapter is picked by extension.\n * - Otherwise `template` is treated as inline template source\n * with the default (Rendu) adapter.\n *\n * Override the default adapter globally with\n * `app.setViewAdapter()`.\n */\nexport async function renderView(\n\ttemplate: string,\n\tdata: Record<string, any>,\n\tcontext?: ViewContext,\n): Promise<string> {\n\tlet source = template;\n\tif (isViewFilePath(template) && viewPath.length > 0) {\n\t\tconst loaded = await loadTemplate(viewPath, template);\n\t\tif (loaded === null) {\n\t\t\tthrow new Error(\n\t\t\t\t`[nexus] View file not found: \"${template}\" (searched: ${viewPath})`,\n\t\t\t);\n\t\t}\n\t\tsource = loaded;\n\t}\n\tconst adapter = selectAdapter(source);\n\treturn adapter.render(source, data, context);\n}\n\n/**\n * Try to locate a template file inside the given directory. Returns the\n * file contents or `null` if not found. This is intentionally\n * filesystem-based and only used on serverful runtimes; edge adapters\n * should pass inline strings instead.\n */\nexport async function loadTemplate(\n\tdir: string,\n\tname: string,\n): Promise<string | null> {\n\tif (!dir) return null;\n\tconst full = joinPath(dir, name);\n\ttry {\n\t\tconst file = await readFile(full);\n\t\tif (file !== null) return file;\n\t} catch {\n\t\t// ignore\n\t}\n\treturn null;\n}\n\n/**\n * Path join that works on both POSIX and Windows. Node/Bun provide path,\n * but Cloudflare Workers do not, so we re-implement minimally.\n */\nfunction joinPath(dir: string, name: string): string {\n\tif (!dir.endsWith(\"/\") && !dir.endsWith(\"\\\\\")) return `${dir}/${name}`;\n\treturn `${dir}${name}`;\n}\n\nasync function readFile(path: string): Promise<string | null> {\n\t// Node/Bun.\n\tif (typeof globalThis.Bun !== \"undefined\") {\n\t\ttry {\n\t\t\tconst file = (globalThis as any).Bun.file(path);\n\t\t\tif (await file.exists()) return file.text();\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t}\n\t// Node-style (also works in Bun).\n\ttry {\n\t\tconst fs = await import(\"node:fs/promises\");\n\t\treturn await fs.readFile(path, \"utf8\");\n\t} catch {\n\t\treturn null;\n\t}\n}\n",
19
+ "/**\n * Router.\n *\n * The router is responsible for translating the framework's declarative\n * metadata (controllers + @Get/@Post + param decorators + validation)\n * into Hono route handlers.\n *\n * It supports three registration styles:\n * 1. **Nest style** — class decorators (@Controller, @Get, ...)\n * 2. **Adonis style** — `router.get('/users', UserController, 'list')`\n * 3. **Functional style** — `app.get('/users', async (c) => ...)`\n *\n * The router does NOT own the Hono instance; it just adds routes to\n * the Hono app passed to `Router.create(app, container)`.\n */\nimport \"reflect-metadata\";\nimport type { Hono } from \"hono\";\nimport { PARAM_TYPES } from \"../constants.js\";\nimport type { ApplicationContainer, DIContainer } from \"../di/container.js\";\nimport {\n\tgetControllerMetadata,\n\tisController,\n} from \"../decorators/controller.js\";\nimport { getRoutes } from \"../decorators/http-methods.js\";\nimport { getParamMetadata } from \"../decorators/params.js\";\nimport { getValidationMetadata } from \"../decorators/validate.js\";\nimport {\n\tValidationError,\n\tformatValidationError,\n\tvalidateRequest,\n} from \"../validation/validator.js\";\nimport type { HttpMethod, RouteMetadata, Type } from \"../di/tokens.js\";\n\nexport interface NexusRouter {\n\t/** Register a controller class (Nest style). */\n\tregisterController(controller: Type<any>, container?: DIContainer): void;\n\t/** Register a method handler in Adonis style. */\n\tadd(\n\t\tmethod: HttpMethod,\n\t\tpath: string,\n\t\thandler: any,\n\t\tmethodName?: string,\n\t\tcontainer?: DIContainer,\n\t): void;\n\t/** Register a raw Hono-compatible handler. */\n\traw(method: HttpMethod, path: string, handler: HonoHandler): void;\n\t/** Return the underlying Hono instance. */\n\tgetHono(): Hono;\n\t/** Return all registered routes (for OpenAPI spec generation). */\n\tgetRoutes(): Array<{\n\t\tmethod: string;\n\t\tpath: string;\n\t\ttarget: any;\n\t\tpropertyKey: string | symbol;\n\t\tvalidation?: {\n\t\t\tbody?: unknown;\n\t\t\tquery?: unknown;\n\t\t\tparams?: unknown;\n\t\t\theaders?: unknown;\n\t\t};\n\t}>;\n}\n\nexport type HonoHandler = (c: any, next?: any) => any | Promise<any>;\n\nconst HTTP_METHOD_TO_HONO: Record<\n\tHttpMethod,\n\t\"get\" | \"post\" | \"put\" | \"delete\" | \"patch\" | \"options\" | \"head\"\n> = {\n\tGET: \"get\",\n\tPOST: \"post\",\n\tPUT: \"put\",\n\tDELETE: \"delete\",\n\tPATCH: \"patch\",\n\tOPTIONS: \"options\",\n\tHEAD: \"head\",\n};\n\nclass NexusRouterImpl implements NexusRouter {\n\tprivate hono: Hono;\n\tprivate root: ApplicationContainer;\n\t/** Stored route metadata for OpenAPI spec generation. */\n\t#routeList: Array<{\n\t\tmethod: string;\n\t\tpath: string;\n\t\ttarget: any;\n\t\tpropertyKey: string | symbol;\n\t\tvalidation?: {\n\t\t\tbody?: unknown;\n\t\t\tquery?: unknown;\n\t\t\tparams?: unknown;\n\t\t\theaders?: unknown;\n\t\t};\n\t}> = [];\n\n\tconstructor(hono: Hono, root: ApplicationContainer) {\n\t\tthis.hono = hono;\n\t\tthis.root = root;\n\t}\n\n\tgetHono(): Hono {\n\t\treturn this.hono;\n\t}\n\n\t/** Return all registered routes (for OpenAPI spec generation). */\n\tgetRoutes(): Array<{\n\t\tmethod: string;\n\t\tpath: string;\n\t\ttarget: any;\n\t\tpropertyKey: string | symbol;\n\t\tvalidation?: {\n\t\t\tbody?: unknown;\n\t\t\tquery?: unknown;\n\t\t\tparams?: unknown;\n\t\t\theaders?: unknown;\n\t\t};\n\t}> {\n\t\treturn this.#routeList;\n\t}\n\n\tregisterController(controller: Type<any>, container?: DIContainer): void {\n\t\tif (!isController(controller)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Class \"${controller.name}\" is missing the @Controller() decorator.`,\n\t\t\t);\n\t\t}\n\n\t\tconst { prefix } = getControllerMetadata(controller);\n\t\tconst routes = getRoutes(controller);\n\t\tconst resolvedContainer =\n\t\t\tcontainer ?? this.resolveControllerContainer(controller);\n\n\t\tif (routes.length === 0) {\n\t\t\t// Register the controller so DI still wires it up; useful for future\n\t\t\t// features (CLI introspection, lifecycle hooks, etc.).\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const route of routes) {\n\t\t\tconst fullPath = this.joinPaths(prefix, route.path);\n\t\t\tthis.mountRoute(controller, route, fullPath, resolvedContainer);\n\t\t}\n\t}\n\n\tadd(\n\t\tmethod: HttpMethod,\n\t\tpath: string,\n\t\thandler: any,\n\t\tmethodName?: string,\n\t\tcontainer?: DIContainer,\n\t): void {\n\t\t// Two forms:\n\t\t// add('GET', '/users', handlerFn) → functional style\n\t\t// add('GET', '/users', UserController, 'list') → Adonis style\n\t\tif (\n\t\t\ttypeof handler === \"function\" &&\n\t\t\tmethodName &&\n\t\t\thandler.prototype &&\n\t\t\tisController(handler)\n\t\t) {\n\t\t\tconst controllerInstance = (container ?? this.root).resolve(handler);\n\t\t\tconst handlerFn = controllerInstance[methodName];\n\t\t\tconst fullPath = this.joinPaths(\n\t\t\t\tgetControllerMetadata(handler).prefix,\n\t\t\t\tpath,\n\t\t\t);\n\t\t\tconst routes = getRoutes(handler);\n\t\t\tconst route = routes.find((r) => r.propertyKey === methodName);\n\t\t\tif (!route) {\n\t\t\t\t// The route metadata wasn't found because we passed a free path\n\t\t\t\t// (not declared with @Get). Fall back to invoking the raw method.\n\t\t\t\tthis.raw(method, fullPath, async (c) =>\n\t\t\t\t\thandlerFn.call(controllerInstance, c),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.mountRoute(\n\t\t\t\thandler,\n\t\t\t\t{ ...route, handler: handlerFn },\n\t\t\t\tfullPath,\n\t\t\t\tcontainer ?? this.root,\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Functional style: handler is already a Hono-compatible function.\n\t\tthis.raw(method, path, handler);\n\t}\n\n\traw(method: HttpMethod, path: string, handler: HonoHandler): void {\n\t\tconst fn = HTTP_METHOD_TO_HONO[method];\n\t\t// Hono doesn't expose a `head` method; fall back to `on` for HEAD.\n\t\tif (method === \"HEAD\") {\n\t\t\t(this.hono as any).on(\"HEAD\", path, handler as any);\n\t\t\treturn;\n\t\t}\n\t\t(this.hono as any)[fn](path, handler as any);\n\t}\n\n\t/**\n\t * Mount a single @Route-decorated method to Hono, including validation,\n\t * param resolution, and DI lookup of the controller instance.\n\t */\n\tprivate mountRoute(\n\t\tcontroller: Type<any>,\n\t\troute: RouteMetadata,\n\t\tfullPath: string,\n\t\tcontainer: DIContainer,\n\t): void {\n\t\tconst validation = getValidationMetadata(controller, route.propertyKey);\n\t\tconst paramMeta = getParamMetadata(controller.prototype, route.propertyKey);\n\n\t\t// Store for OpenAPI spec generation.\n\t\tthis.#routeList.push({\n\t\t\tmethod: route.method,\n\t\t\tpath: fullPath,\n\t\t\ttarget: controller.prototype,\n\t\t\tpropertyKey: route.propertyKey,\n\t\t\tvalidation: validation ?? undefined,\n\t\t});\n\n\t\tconst honoHandler = async (c: any) => {\n\t\t\ttry {\n\t\t\t\t// Lazy: resolve the controller from the container for each request.\n\t\t\t\t// This is important for transient/request-scoped controllers.\n\t\t\t\tconst instance = container.resolve(controller);\n\t\t\t\tconst args = await this.buildArgs(c, paramMeta, validation);\n\n\t\t\t\tconst result = await Promise.resolve(\n\t\t\t\t\troute.handler.call(instance, ...args),\n\t\t\t\t);\n\n\t\t\t\treturn await this.serialize(c, result);\n\t\t\t} catch (err) {\n\t\t\t\treturn this.handleError(c, err);\n\t\t\t}\n\t\t};\n\n\t\tconst fn = HTTP_METHOD_TO_HONO[route.method];\n\t\tif (route.method === \"HEAD\") {\n\t\t\t(this.hono as any).on(\"HEAD\", fullPath, honoHandler);\n\t\t\treturn;\n\t\t}\n\t\t(this.hono as any)[fn](fullPath, honoHandler);\n\t}\n\n\t/**\n\t * Build the argument list for a controller method invocation based on\n\t * the parameter decorator metadata.\n\t */\n\tprivate async buildArgs(\n\t\tc: any,\n\t\tparams: ReturnType<typeof getParamMetadata>,\n\t\tvalidation: any,\n\t) {\n\t\t// Run validation once; pass parsed values into @Body/@Query/@Param/@Headers.\n\t\tlet parsed: any;\n\t\tconst needsValidation =\n\t\t\tvalidation &&\n\t\t\t(validation.body ||\n\t\t\t\tvalidation.query ||\n\t\t\t\tvalidation.params ||\n\t\t\t\tvalidation.headers);\n\n\t\t// We also need the raw body when *any* parameter uses `@Body()`,\n\t\t// even without a `@Validate` schema. Without this a controller\n\t\t// like `@Post('/store') async store(@Body() input) { ... }`\n\t\t// would receive an empty body in vitest (and any environment\n\t\t// where the framework's parser isn't called eagerly).\n\t\tconst hasBodyParam = params.some((p: any) => p.type === PARAM_TYPES.BODY);\n\n\t\tif (needsValidation || hasBodyParam) {\n\t\t\tconst bodyPromise =\n\t\t\t\tneedsValidation && validation.body\n\t\t\t\t\t? safeReadBody(c)\n\t\t\t\t\t: hasBodyParam\n\t\t\t\t\t\t? safeReadBody(c)\n\t\t\t\t\t\t: Promise.resolve(undefined);\n\t\t\tconst [body] = await Promise.all([bodyPromise]);\n\t\t\tparsed = validateRequest(validation ?? {}, {\n\t\t\t\tbody,\n\t\t\t\tquery: c.req.query(),\n\t\t\t\tparams: c.req.param(),\n\t\t\t\theaders: c.req.header(),\n\t\t\t});\n\t\t}\n\n\t\tconst positional: any[] = [];\n\t\tfor (const param of params) {\n\t\t\tpositional[param.index] = this.resolveParam(c, param, parsed);\n\t\t}\n\t\treturn positional;\n\t}\n\n\tprivate resolveParam(c: any, param: any, parsed: any) {\n\t\tswitch (param.type) {\n\t\t\tcase PARAM_TYPES.REQUEST:\n\t\t\tcase PARAM_TYPES.CTX:\n\t\t\t\treturn c;\n\t\t\tcase PARAM_TYPES.RESPONSE:\n\t\t\t\treturn c.res;\n\t\t\tcase PARAM_TYPES.NEXT:\n\t\t\t\treturn async () => {};\n\t\t\tcase PARAM_TYPES.BODY:\n\t\t\t\tif (parsed) return parsed.body;\n\t\t\t\treturn param.name\n\t\t\t\t\t? (safeReadBody(c) as any)?.[param.name]\n\t\t\t\t\t: safeReadBody(c);\n\t\t\tcase PARAM_TYPES.QUERY:\n\t\t\t\tif (parsed) {\n\t\t\t\t\tif (param.name) return (parsed.query as any)?.[param.name];\n\t\t\t\t\treturn parsed.query;\n\t\t\t\t}\n\t\t\t\treturn param.name ? c.req.query(param.name) : c.req.query();\n\t\t\tcase PARAM_TYPES.PARAM:\n\t\t\t\tif (parsed) {\n\t\t\t\t\tif (param.name) return (parsed.params as any)?.[param.name];\n\t\t\t\t\treturn parsed.params;\n\t\t\t\t}\n\t\t\t\treturn param.name ? c.req.param(param.name) : c.req.param();\n\t\t\tcase PARAM_TYPES.HEADERS:\n\t\t\t\tif (parsed) {\n\t\t\t\t\tif (param.name)\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t(parsed.headers as any)?.[param.name] ?? c.req.header(param.name)\n\t\t\t\t\t\t);\n\t\t\t\t\treturn parsed.headers ?? c.req.header();\n\t\t\t\t}\n\t\t\t\treturn param.name ? c.req.header(param.name) : c.req.header();\n\t\t\tcase PARAM_TYPES.USER:\n\t\t\t\treturn (c as any).var?.nexus?.user;\n\t\t\tdefault:\n\t\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Serialize a controller return value into a Hono response. Supports:\n\t * - `Response` / `Response`-like objects\n\t * - `InertiaResponse` — serializes per the Inertia protocol\n\t * - `{ view: 'name', data }` for templates\n\t * - `{ redirect: '/path', status: 302 }` for redirects\n\t * - Plain objects → JSON\n\t * - Strings → text/html\n\t */\n\tprivate async serialize(c: any, value: any): Promise<any> {\n\t\tif (value === undefined || value === null) {\n\t\t\treturn c.body(null, 204);\n\t\t}\n\t\tif (value instanceof Response) {\n\t\t\t// Pass through to Hono by wrapping into the context. Going through\n\t\t\t// `c.body` ensures Hono correctly forwards the status, headers,\n\t\t\t// and body even when the response was created outside the\n\t\t\t// request-scoped Hono instance (e.g. from the Inertia adapter's\n\t\t\t// redirect/redirect-back helpers).\n\t\t\tconst headers: Record<string, string> = {};\n\t\t\tvalue.headers.forEach((v, k) => {\n\t\t\t\theaders[k] = v;\n\t\t\t});\n\t\t\tconst text = await value.text();\n\t\t\treturn c.body(text, value.status as any, headers);\n\t\t}\n\t\t// Inertia responses carry a discriminator tag — route them through\n\t\t// the dedicated serializer (handles JSON vs HTML, asset-version\n\t\t// mismatch, partial reloads, deferred props, etc.).\n\t\tif (this.isInertiaResponse(value)) {\n\t\t\treturn this.serializeInertia(c, value);\n\t\t}\n\t\tif (typeof value === \"object\") {\n\t\t\tif (\"view\" in value) {\n\t\t\t\t// Lazy import to avoid circular dependency.\n\t\t\t\treturn renderViewResponse(c, value);\n\t\t\t}\n\t\t\tif (\"redirect\" in value) {\n\t\t\t\treturn c.redirect(value.redirect, value.status ?? 302);\n\t\t\t}\n\t\t\tif (\"status\" in value && \"body\" in value) {\n\t\t\t\treturn c.json(value.body, value.status);\n\t\t\t}\n\t\t\treturn c.json(value);\n\t\t}\n\t\tif (typeof value === \"string\") {\n\t\t\treturn c.html(value);\n\t\t}\n\t\treturn c.json(value);\n\t}\n\n\t/**\n\t * Type guard for InertiaResponse — uses the discriminator tag set in\n\t * the constructor. We avoid `instanceof` so user code can subclass.\n\t */\n\tprivate isInertiaResponse(value: any): boolean {\n\t\treturn (\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === \"object\" &&\n\t\t\tvalue[\"__nexus_inertia_response__\"] === true &&\n\t\t\ttypeof value.toResponse === \"function\"\n\t\t);\n\t}\n\n\t/**\n\t * Serialize an InertiaResponse. Detects XHR vs HTML and emits the\n\t * correct shape. The response itself owns the version check and partial\n\t * reload logic.\n\t */\n\tprivate async serializeInertia(c: any, value: any): Promise<Response> {\n\t\treturn await value.toResponse(c);\n\t}\n\n\tprivate handleError(c: any, err: any): any {\n\t\tif (err instanceof ValidationError) {\n\t\t\tconst { status, body } = formatValidationError(err);\n\t\t\treturn c.json(body, status as any);\n\t\t}\n\t\t// Re-throw; the user-provided error middleware (if any) will catch it.\n\t\tthrow err;\n\t}\n\n\tprivate resolveControllerContainer(controller: Type<any>): DIContainer {\n\t\t// Walk the module tree looking for the container that owns this class.\n\t\tfor (const [, container] of (this.root as any).moduleContainers ??\n\t\t\tnew Map()) {\n\t\t\tif ((container as any).has?.(controller)) return container;\n\t\t}\n\t\t// Fallback to root.\n\t\treturn this.root;\n\t}\n\n\tprivate joinPaths(prefix: string, path: string): string {\n\t\tif (!prefix || prefix === \"/\") return path || \"/\";\n\t\tif (!path || path === \"/\") return prefix;\n\t\tif (prefix.endsWith(\"/\")) return `${prefix}${path}`;\n\t\treturn `${prefix}${path}`;\n\t}\n}\n\nasync function renderViewResponse(c: any, value: any): Promise<Response> {\n\tconst { renderView } = await import(\"../../view/view-engine.js\");\n\tconst html = await renderView(value.view, value.data ?? {});\n\treturn c.html(html, value.status ?? 200);\n}\n\nasync function safeReadBody(c: any): Promise<any> {\n\ttry {\n\t\tconst ct = c.req.header(\"content-type\") ?? \"\";\n\t\tif (ct.includes(\"application/json\")) {\n\t\t\treturn await c.req.json();\n\t\t}\n\t\tif (\n\t\t\tct.includes(\"application/x-www-form-urlencoded\") ||\n\t\t\tct.includes(\"multipart/form-data\")\n\t\t) {\n\t\t\treturn await c.req.parseBody();\n\t\t}\n\t\treturn await c.req.text();\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Factory: build a router wrapping a Hono instance + container. */\nexport function createRouter(\n\thono: Hono,\n\tcontainer: ApplicationContainer,\n): NexusRouter {\n\treturn new NexusRouterImpl(hono, container);\n}\n",
20
+ "/**\n * Hono middleware that activates a `RequestScope` for the duration\n * of an HTTP request. The scope is held in `AsyncLocalStorage` and\n * propagated through the entire async call tree.\n *\n * - At request start: build a new `RequestScope` (with a child\n * DI container that inherits from the application's container).\n * - Run the rest of the request inside the scope.\n * - At request end: the scope (and child container) is dropped,\n * so all per-request state is garbage-collected.\n *\n * The framework installs this middleware on the Hono app at\n * `NexusServer.start()` / `Application.listen()` time.\n */\nimport type { MiddlewareHandler } from \"hono\";\nimport { DIContainer } from \"./container.js\";\nimport {\n\tRequestScopeStorage,\n\tREQUEST,\n\tREQUEST_SCOPE,\n\ttype HonoContext,\n} from \"./request-scope.js\";\n\n/**\n * One-time setup: register the `REQUEST` and `REQUEST_SCOPE` tokens\n * on the root container. The factory reads the active scope on\n * each resolve, so the same `REQUEST` always points at the\n * current request regardless of which container resolves it.\n *\n * Idempotent — calling it twice is a no-op.\n */\nexport function installRequestTokens(root: DIContainer): void {\n\t// Avoid duplicate registrations on the same container.\n\tconst existing = (root as any).providers as Map<unknown, unknown> | undefined;\n\tif (existing && (existing.has(REQUEST) || existing.has(REQUEST_SCOPE))) return;\n\n\troot.register({\n\t\tprovide: REQUEST,\n\t\tscope: \"transient\",\n\t\tuseFactory: () => RequestScopeStorage.get()?.context,\n\t});\n\troot.register({\n\t\tprovide: REQUEST_SCOPE,\n\t\tscope: \"transient\",\n\t\tuseFactory: () => RequestScopeStorage.get(),\n\t});\n}\n\n/**\n * Build the request-scope middleware against the given root container.\n * The root container is the application's `ApplicationContainer` —\n * the one that holds every singleton provider.\n *\n * Call `installRequestTokens(root)` once before the server starts.\n * (The framework does this for you; you only need to call this\n * factory directly when wiring a custom Hono app.)\n */\nexport function requestScopeMiddleware(root: DIContainer): MiddlewareHandler {\n\tinstallRequestTokens(root);\n\treturn async (c, next) => {\n\t\t// The request container shares the root's providers but\n\t\t// gets its own per-request cache (the `singletons` Map).\n\t\tconst reqContainer = new DIContainer(root);\n\t\tconst scope = RequestScopeStorage.create(c as HonoContext, reqContainer);\n\t\treturn RequestScopeStorage.run(scope, () => next());\n\t};\n}",
21
+ "/**\n * Bun runtime adapter.\n *\n * Uses Bun's native HTTP server (Bun.serve) which is built on top of\n * uWebSockets and provides the fastest HTTP throughput in JavaScript.\n *\n * Usage:\n * const { bunAdapter } = await import('nexusjs/runtime');\n * bunAdapter(honoApp, 3000);\n */\nimport type { Hono } from \"hono\";\n\nexport function bunAdapter(app: Hono, port: number = 3000): any {\n\tconst Bun = (globalThis as any).Bun;\n\tif (!Bun || typeof Bun.serve !== \"function\") {\n\t\tthrow new Error(\"bunAdapter() requires the Bun runtime.\");\n\t}\n\n\tconst server = Bun.serve({\n\t\tport,\n\t\tfetch: (req: Request) => app.fetch(req),\n\t\terror: (err: Error) => {\n\t\t\tconsole.error(\"[bun-adapter] error:\", err);\n\t\t\treturn new Response(\"Internal Server Error\", { status: 500 });\n\t\t},\n\t});\n\n\tconsole.log(`[nexus] Listening on http://localhost:${server.port}`);\n\treturn server;\n}\n",
22
+ "/**\n * Node.js runtime adapter.\n *\n * Falls back to the standard `node:http` module. Bun can also run this\n * adapter when targeting Node-compatible servers, but Bun's native\n * adapter is significantly faster — only use this on actual Node.\n */\nimport type { Hono } from \"hono\";\nimport { createServer } from \"node:http\";\n\nexport function nodeAdapter(app: Hono, port: number = 3000): any {\n\tconst server = createServer(async (req, res) => {\n\t\ttry {\n\t\t\tconst url = `http://${req.headers.host}${req.url}`;\n\t\t\tconst headers = new Headers();\n\t\t\tfor (const [k, v] of Object.entries(req.headers)) {\n\t\t\t\tif (v == null) continue;\n\t\t\t\tif (Array.isArray(v)) headers.set(k, v.join(\", \"));\n\t\t\t\telse headers.set(k, String(v));\n\t\t\t}\n\n\t\t\tconst method = req.method ?? \"GET\";\n\t\t\tconst init: RequestInit = { method, headers };\n\n\t\t\tif (method !== \"GET\" && method !== \"HEAD\") {\n\t\t\t\tconst bodyBuf = await new Promise<Buffer>((resolve, reject) => {\n\t\t\t\t\tconst chunks: Buffer[] = [];\n\t\t\t\t\treq.on(\"data\", (c) => chunks.push(c));\n\t\t\t\t\treq.on(\"end\", () => resolve(Buffer.concat(chunks)));\n\t\t\t\t\treq.on(\"error\", reject);\n\t\t\t\t});\n\t\t\t\t// Web Request accepts ReadableStream (preferred) or a BufferSource.\n\t\t\t\t// Node's Buffer is a Uint8Array subclass but TS treats it as\n\t\t\t\t// `Buffer<ArrayBufferLike>` which isn't assignable to BodyInit, so\n\t\t\t\t// we copy into a plain Uint8Array view of the same memory.\n\t\t\t\tinit.body = new Uint8Array(\n\t\t\t\t\tbodyBuf.buffer,\n\t\t\t\t\tbodyBuf.byteOffset,\n\t\t\t\t\tbodyBuf.byteLength,\n\t\t\t\t) as BodyInit;\n\t\t\t\t// Duplex is required when sending a body in undici.\n\t\t\t\t(init as any).duplex = \"half\";\n\t\t\t}\n\n\t\t\tconst honoRes = await app.fetch(new Request(url, init));\n\t\t\tres.statusCode = honoRes.status;\n\t\t\thonoRes.headers.forEach((v, k) => res.setHeader(k, v));\n\t\t\tconst buf = Buffer.from(await honoRes.arrayBuffer());\n\t\t\tres.end(buf);\n\t\t} catch (err) {\n\t\t\tconsole.error(\"[node-adapter] error:\", err);\n\t\t\tres.statusCode = 500;\n\t\t\tres.end(\"Internal Server Error\");\n\t\t}\n\t});\n\n\tserver.listen(port, () => {\n\t\tconsole.log(`[nexus] Listening on http://localhost:${port}`);\n\t});\n\n\treturn server;\n}\n",
23
+ "/**\n * Cloudflare Workers runtime adapter.\n *\n * Returns a fetch handler suitable for `export default { fetch }` in a\n * Workers entry point. The Hono app is the actual fetch handler, so this\n * is mostly a thin wrapper.\n *\n * Usage:\n * // src/worker.ts\n * import { bootstrap } from './app.js';\n * const { fetch } = bootstrap();\n * export default { fetch };\n */\nimport type { Hono } from \"hono\";\n\nexport function cloudflareAdapter(app: Hono) {\n\treturn {\n\t\tfetch: (req: Request, env?: any, ctx?: any) => app.fetch(req, env, ctx),\n\t};\n}\n",
24
+ "/**\n * HTTP server.\n *\n * Builds a Hono app, attaches framework-level middleware (logging, CORS,\n * error handler), and returns a configured server instance. The Hono app\n * is exposed for users who want to register additional routes/middleware.\n *\n * Server.start() chooses the correct runtime adapter (Bun, Node, or\n * Cloudflare) automatically based on the global environment.\n */\nimport \"reflect-metadata\";\nimport { Hono } from \"hono\";\nimport type { ApplicationContainer } from \"../di/container.js\";\nimport { errorHandler, logger } from \"./middleware.js\";\nimport { createRouter, type NexusRouter } from \"./router.js\";\n\nexport interface NexusServerOptions {\n\t/** Enable request logging (default: true). */\n\tlogging?: boolean;\n\t/**\n\t * Enable the framework error handler (default: true). CORS is NOT\n\t * installed automatically; use `app.use(cors({ origin }))` for explicit\n\t * cross-origin setup.\n\t */\n\terrorHandler?: boolean;\n\t/** Port for the underlying HTTP server (Bun/Node). */\n\tport?: number;\n}\n\nexport class NexusServer {\n\treadonly app: Hono;\n\treadonly container: ApplicationContainer;\n\treadonly router: NexusRouter;\n\tprivate options: Required<NexusServerOptions>;\n\n\tconstructor(\n\t\tcontainer: ApplicationContainer,\n\t\toptions: NexusServerOptions = {},\n\t) {\n\t\tthis.container = container;\n\t\tthis.app = new Hono();\n\t\tthis.router = createRouter(this.app, container);\n\t\tthis.options = {\n\t\t\tlogging: options.logging ?? true,\n\t\t\terrorHandler: options.errorHandler ?? true,\n\t\t\tport: options.port ?? 3000,\n\t\t};\n\t\tthis.bootstrap();\n\t}\n\n\t/** Install the framework's built-in middleware. */\n\tprivate bootstrap(): void {\n\t\t// Request-scope middleware MUST come first so that everything\n\t\t// downstream (logging, error handler, controllers) can read\n\t\t// from the request scope.\n\t\tconst { requestScopeMiddleware } = require(\"../di/request-middleware.js\") as typeof import(\"../di/request-middleware.js\");\n\t\tthis.app.use(\"*\", requestScopeMiddleware(this.container as any));\n\t\tif (this.options.errorHandler) this.app.use(\"*\", errorHandler());\n\t\tif (this.options.logging) this.app.use(\"*\", logger());\n\t\t// CORS is intentionally NOT enabled by default. Use\n\t\t// `app.use(cors({ origin: 'https://example.com' }))` explicitly.\n\t}\n\n\t/** Register additional global middleware. */\n\tuse(...handlers: any[]): this {\n\t\tfor (const h of handlers) this.app.use(\"*\", h);\n\t\treturn this;\n\t}\n\n\t/** Override the port (use before start()). */\n\tsetPort(port: number): this {\n\t\t(this.options as any).port = port;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Start the HTTP server using the best available runtime adapter.\n\t * Returns the underlying server handle (Bun.Server, Node http.Server, or\n\t * a fetch-compatible Hono instance for Cloudflare Workers).\n\t */\n\tasync start(): Promise<any> {\n\t\tconst runtime = await detectRuntime();\n\t\tif (runtime === \"bun\") {\n\t\t\tconst { bunAdapter } = await import(\"../runtime/bun.js\");\n\t\t\treturn bunAdapter(this.app, this.options.port);\n\t\t}\n\t\tif (runtime === \"node\") {\n\t\t\tconst { nodeAdapter } = await import(\"../runtime/node.js\");\n\t\t\treturn nodeAdapter(this.app, this.options.port);\n\t\t}\n\t\tif (runtime === \"cloudflare\") {\n\t\t\tconst { cloudflareAdapter } = await import(\"../runtime/cloudflare.js\");\n\t\t\treturn cloudflareAdapter(this.app);\n\t\t}\n\t\tthrow new Error(\n\t\t\t\"No supported runtime detected (Bun, Node, or Cloudflare Workers).\",\n\t\t);\n\t}\n\n\t/**\n\t * For serverless / Edge runtimes: return a fetch handler that can be\n\t * exported from a Workers entry point.\n\t */\n\tget fetch(): (req: Request, env?: any, ctx?: any) => Promise<Response> {\n\t\treturn async (req, env, ctx) => this.app.fetch(req, env, ctx);\n\t}\n}\n\n/**\n * Auto-detect the current runtime. Order matters:\n * - Bun first (most specific)\n * - Node next\n * - Cloudflare Workers last (no Bun/Node globals)\n */\nexport async function detectRuntime(): Promise<\"bun\" | \"node\" | \"cloudflare\"> {\n\tif (typeof (globalThis as any).Bun !== \"undefined\") return \"bun\";\n\tif (typeof process !== \"undefined\" && process.versions?.node) return \"node\";\n\treturn \"cloudflare\";\n}\n",
25
+ "/**\n * Inertia.js lazy-evaluation helpers.\n *\n * These wrap a callback so the framework can decide *when* to resolve\n * it:\n *\n * - `defer()` → resolved on a follow-up partial reload only.\n * - `always()` → included in every partial reload, never trimmed.\n * - `optional()` → skipped on partial reloads when empty.\n * - `merge()` → client merges new value with previous.\n * - `deepMerge()` → client deep-merges new value with previous.\n * - `once()` → included only on first page load.\n *\n * Each helper is a thin wrapper class with a discriminator tag. The\n * adapter inspects the tag to decide the correct serialization behaviour.\n */\n\n/** Common shape for all Inertia helper wrappers. */\nexport interface InertiaHelper<T = any> {\n\t/** Discriminator tag — read by the adapter, never sent to the client. */\n\treadonly __inertiaKind: string;\n\t/** Resolve the wrapped callback. */\n\tresolve(): T | Promise<T>;\n}\n\n/**\n * Deferred prop. The client receives a `null` placeholder initially and\n * issues a follow-up request to fetch the real value. Use for expensive\n * data that shouldn't block the initial render.\n */\nexport class DeferredProp<T = any> implements InertiaHelper<T> {\n\treadonly __inertiaKind = \"deferred\";\n\n\tconstructor(\n\t\tprivate readonly callback: () => T | Promise<T>,\n\t\t/** Group name. Props in the same group resolve in one request. */\n\t\tpublic readonly group: string = \"default\",\n\t) {}\n\n\tresolve(): T | Promise<T> {\n\t\treturn this.callback();\n\t}\n}\n\n/** Build a deferred prop. */\nexport function defer<T>(\n\tcallback: () => T | Promise<T>,\n\tgroup: string = \"default\",\n): DeferredProp<T> {\n\treturn new DeferredProp(callback, group);\n}\n\n/**\n * Always-on prop. Included in *every* partial reload, regardless of the\n * client's `only` / `except` filter. Useful for data that nearly every\n * page needs (e.g. notification counts, current user).\n */\nexport class AlwaysProp<T = any> implements InertiaHelper<T> {\n\treadonly __inertiaKind = \"always\";\n\tconstructor(private readonly callback: () => T | Promise<T>) {}\n\tresolve(): T | Promise<T> {\n\t\treturn this.callback();\n\t}\n}\n\nexport function always<T>(callback: () => T | Promise<T>): AlwaysProp<T> {\n\treturn new AlwaysProp(callback);\n}\n\n/**\n * Optional prop. On partial reloads, omitted when the resolved value is\n * an array shorter than or equal to `threshold` (default 0). Helps\n * reduce response size when the user is filtering down to zero results.\n */\nexport class OptionalProp<T = any> implements InertiaHelper<T> {\n\treadonly __inertiaKind = \"optional\";\n\tconstructor(\n\t\tprivate readonly callback: () => T | Promise<T>,\n\t\tpublic readonly threshold: number = 0,\n\t) {}\n\tresolve(): T | Promise<T> {\n\t\treturn this.callback();\n\t}\n}\n\nexport function optional<T>(\n\tcallback: () => T | Promise<T>,\n\tthreshold: number = 0,\n): OptionalProp<T> {\n\treturn new OptionalProp(callback, threshold);\n}\n\n/**\n * Merge prop. The client merges the new value with its previous value,\n * which is essential for infinite-scroll pagination (append rather\n * than replace).\n */\nexport class MergeProp<T = any> implements InertiaHelper<T> {\n\treadonly __inertiaKind = \"merge\";\n\t/**\n\t * When provided, the client uses these paths to identify matching\n\t * items between the old and new arrays. Each inner array is a list of\n\t * property names whose combined values are compared.\n\t */\n\tpublic readonly matchPropsOn: string[][];\n\n\tconstructor(callback: () => T | Promise<T>, matchPropsOn: string[][] = []) {\n\t\tthis.matchPropsOn = matchPropsOn;\n\t\tthis.callback = callback;\n\t}\n\n\tprivate callback: () => T | Promise<T>;\n\tresolve(): T | Promise<T> {\n\t\treturn this.callback();\n\t}\n}\n\nexport function merge<T>(\n\tcallback: () => T | Promise<T>,\n\tmatchPropsOn: string[][] = [],\n): MergeProp<T> {\n\treturn new MergeProp(callback, matchPropsOn);\n}\n\n/**\n * Deep-merge prop. Like `merge`, but the client performs a recursive\n * object merge instead of array deduplication.\n */\nexport class DeepMergeProp<T = any> implements InertiaHelper<T> {\n\treadonly __inertiaKind = \"deepMerge\";\n\tconstructor(private readonly callback: () => T | Promise<T>) {}\n\tresolve(): T | Promise<T> {\n\t\treturn this.callback();\n\t}\n}\n\nexport function deepMerge<T>(callback: () => T | Promise<T>): DeepMergeProp<T> {\n\treturn new DeepMergeProp(callback);\n}\n\n/**\n * Once prop. Resolved and included only on the very first page load;\n * subsequent partial reloads never include it.\n */\nexport class OnceProp<T = any> implements InertiaHelper<T> {\n\treadonly __inertiaKind = \"once\";\n\tconstructor(private readonly callback: () => T | Promise<T>) {}\n\tresolve(): T | Promise<T> {\n\t\treturn this.callback();\n\t}\n}\n\nexport function once<T>(callback: () => T | Promise<T>): OnceProp<T> {\n\treturn new OnceProp(callback);\n}\n\n/**\n * Lazy prop. Resolved on every response (just like a plain prop), but\n * with two important differences:\n *\n * 1. The factory is invoked only once per request — even if multiple\n * keys point at the same factory or the same prop is referenced\n * elsewhere on the page. The adapter keys the cache on\n * `LazyProp.tag`, so two `lazy()` calls with the same tag share\n * their resolved value.\n * 2. Resolutions run alongside other lazy props so independent work\n * can overlap.\n *\n * Use this for any expensive computation you don't want to repeat\n * within a single request, but that should not be deferred to a\n * follow-up partial reload.\n */\nexport class LazyProp<T = any> implements InertiaHelper<T> {\n\treadonly __inertiaKind = \"lazy\";\n\t/** Cache key used by the adapter to deduplicate. */\n\treadonly tag: string;\n\t/** Increments on every resolve() — useful for tests / observability. */\n\tinvocations = 0;\n\n\tconstructor(\n\t\tprivate readonly callback: () => T | Promise<T>,\n\t\ttag?: string,\n\t) {\n\t\tthis.tag = tag ?? `lazy:${Math.random().toString(36).slice(2)}`;\n\t}\n\n\tresolve(): T | Promise<T> {\n\t\tthis.invocations++;\n\t\treturn this.callback();\n\t}\n}\n\n/** Build a lazy prop. Two calls with the same `tag` share their value. */\nexport function lazy<T>(\n\tcallback: () => T | Promise<T>,\n\ttag?: string,\n): LazyProp<T> {\n\treturn new LazyProp(callback, tag);\n}\n\n/**\n * Type guard: check whether a value is any Inertia helper wrapper.\n */\nexport function isInertiaHelper(value: unknown): value is InertiaHelper {\n\treturn (\n\t\tvalue !== null &&\n\t\ttypeof value === \"object\" &&\n\t\ttypeof (value as any).__inertiaKind === \"string\" &&\n\t\ttypeof (value as any).resolve === \"function\"\n\t);\n}\n\n/**\n * Strip helper wrappers from a props object, returning a plain\n * `{ [helperKind]: string[] }` map of which keys were wrapped and how.\n */\nexport interface PropAnnotation {\n\t/** Map of helperKind → array of prop keys. */\n\tbyKind: Record<string, string[]>;\n\t/** Optional config extracted per prop (e.g. merge matchPropsOn). */\n\tconfigs: Record<string, InertiaHelper>;\n}\n\nexport function annotateProps(props: Record<string, any>): PropAnnotation {\n\tconst byKind: Record<string, string[]> = {};\n\tconst configs: Record<string, InertiaHelper> = {};\n\n\tfor (const [key, value] of Object.entries(props)) {\n\t\tif (isInertiaHelper(value)) {\n\t\t\tconst kind = value.__inertiaKind;\n\t\t\t(byKind[kind] ??= []).push(key);\n\t\t\tconfigs[key] = value;\n\t\t}\n\t}\n\n\treturn { byKind, configs };\n}\n",
26
+ "/**\n * Default Inertia HTML shell renderer.\n *\n * When no SSR adapter is configured (the most common case for getting\n * started), we ship a minimal HTML page with the page object embedded\n * as a `data-page` attribute. The client picks it up and hydrates from\n * there.\n *\n * When an SSR adapter is configured, we render the page tree and\n * inject the resulting HTML into `<div id=\"app\">` before sending.\n */\nimport type { Context } from \"hono\";\nimport type { InertiaAdapter, InertiaPage, SsrAdapter } from \"./types.js\";\n\nexport async function renderDefaultRoot(\n\tadapter: InertiaAdapter,\n\tssr: SsrAdapter | null,\n\tcomponent: string,\n\tpage: InertiaPage,\n\tc: Context,\n): Promise<Response> {\n\tconst title = adapter.title();\n\tconst headTags: string[] = [];\n\tlet bodyHtml = \"\";\n\n\tif (ssr) {\n\t\ttry {\n\t\t\tconst result = await ssr.render(component, page.props);\n\t\t\tbodyHtml = result.html ?? \"\";\n\t\t\tif (result.head) headTags.push(...result.head);\n\t\t\tif (result.data) {\n\t\t\t\t// Merge any extra data the SSR engine emitted (rare).\n\t\t\t\tObject.assign(page, result.data);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\t// SSR is best-effort. If it fails we fall through to the shell\n\t\t\t// so the client can still hydrate from `data-page`.\n\t\t\tconsole.error(`[inertia] SSR render failed for \"${component}\":`, err);\n\t\t}\n\t}\n\n\tif (ssr?.head) {\n\t\ttry {\n\t\t\tconst extra = await ssr.head();\n\t\t\theadTags.push(...extra);\n\t\t} catch {\n\t\t\t// Ignore — head tags are optional.\n\t\t}\n\t}\n\n\tconst html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>${escapeHtml(title)}</title>\n${headTags.join(\"\\n\")}\n</head>\n<body>\n<div id=\"app\" data-page=\"${escapeAttr(JSON.stringify(page))}\">${bodyHtml}</div>\n</body>\n</html>`;\n\n\treturn c.html(html, 200, {\n\t\tVary: \"X-Inertia\",\n\t});\n}\n\nfunction escapeHtml(s: string): string {\n\treturn s\n\t\t.replace(/&/g, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\");\n}\n\nfunction escapeAttr(s: string): string {\n\treturn escapeHtml(s).replace(/'/g, \"&#39;\");\n}\n",
27
+ "/**\n * InertiaResponse.\n *\n * The controller returns one of these via `inertia.render(...)`. When\n * the router sees it (a marker property), it asks the response to\n * serialize itself for the current request. The serialization differs\n * for Inertia XHR requests (JSON) and first-page loads (HTML shell).\n */\nimport type { Context } from \"hono\";\nimport type {\n\tInertiaAdapter,\n\tInertiaRequestInfo,\n\tInertiaPage,\n} from \"./types.js\";\nimport { isInertiaHelper } from \"./helpers.js\";\nimport { renderDefaultRoot } from \"./default-ssr.js\";\n\n/** Discriminator: the router detects InertiaResponse by this tag. */\nexport const INERTIA_RESPONSE_TAG = \"__nexus_inertia_response__\";\n\nexport class InertiaResponse {\n\t/** Discriminator tag — the router checks this before serializing. */\n\treadonly [INERTIA_RESPONSE_TAG] = true;\n\n\tprivate readonly options: {\n\t\tencryptHistory?: boolean;\n\t\tclearHistory?: boolean;\n\t} = {};\n\n\t/**\n\t * Per-response memoization cache for `lazy()` props. Keyed by\n\t * `LazyProp.tag`. Populated as factories resolve and reused on\n\t * subsequent lookups in the same request.\n\t */\n\tprivate readonly lazyCache = new Map<string, any>();\n\n\tconstructor(\n\t\tprivate readonly adapter: InertiaAdapter,\n\t\tprivate readonly component: string,\n\t\tprivate readonly props: Record<string, any>,\n\t) {}\n\n\t/** Override `encryptHistory` for this response. */\n\twithEncryptHistory(encrypt: boolean = true): this {\n\t\tthis.options.encryptHistory = encrypt;\n\t\treturn this;\n\t}\n\n\t/** Override `clearHistory` for this response. */\n\twithClearHistory(clear: boolean = true): this {\n\t\tthis.options.clearHistory = clear;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Serialize the response. The router calls this; you typically don't.\n\t */\n\tasync toResponse(c: Context): Promise<Response> {\n\t\tconst url = c.req.url;\n\t\tconst info = this.parseInertiaRequest(c);\n\n\t\t// 1. Asset-version mismatch → 409 + X-Inertia-Location.\n\t\tif (info.isInertia && info.clientVersion !== undefined) {\n\t\t\tconst serverVersion = await this.adapter.resolveVersion();\n\t\t\tif (serverVersion !== undefined && info.clientVersion !== serverVersion) {\n\t\t\t\treturn this.assetVersionMismatch(c.req.url);\n\t\t\t}\n\t\t}\n\n\t\t// 2. Build the page object.\n\t\tconst page = await this.buildPage(url, info, c);\n\n\t\t// 3. Branch on request type.\n\t\tif (info.isInertia) {\n\t\t\treturn this.jsonResponse(page);\n\t\t}\n\t\treturn this.htmlResponse(c, page);\n\t}\n\n\t// ============================================================================\n\t// Internals\n\t// ============================================================================\n\n\tprivate async buildPage(\n\t\turl: string,\n\t\tinfo: InertiaRequestInfo,\n\t\tc: Context,\n\t): Promise<InertiaPage> {\n\t\t// 1. Merge shared data (config-level shared + app-level shared).\n\t\tconst shared = await this.adapter.getSharedFor(c);\n\t\tconst allProps = { ...shared, ...this.props };\n\n\t\t// 2. Annotate helper wrappers and resolve them.\n\t\tconst resolved: Record<string, any> = {};\n\t\tconst deferredProps: Record<string, string[]> = {};\n\t\tconst mergeProps: string[] = [];\n\t\tconst deepMergeProps: string[] = [];\n\t\tconst matchPropsOn: string[][] = [];\n\n\t\tfor (const [key, value] of Object.entries(allProps)) {\n\t\t\tif (isInertiaHelper(value)) {\n\t\t\t\tconst helper = value;\n\t\t\t\tswitch (helper.__inertiaKind) {\n\t\t\t\t\tcase \"deferred\": {\n\t\t\t\t\t\tconst d = helper as any;\n\t\t\t\t\t\tconst group: string = d.group ?? \"default\";\n\t\t\t\t\t\t(deferredProps[group] ??= []).push(key);\n\t\t\t\t\t\t// Placeholder: must be `null` per spec.\n\t\t\t\t\t\tresolved[key] = null;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"always\": {\n\t\t\t\t\t\tresolved[key] = await Promise.resolve(helper.resolve());\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"optional\": {\n\t\t\t\t\t\tconst v = await Promise.resolve(helper.resolve());\n\t\t\t\t\t\tconst o = helper as any;\n\t\t\t\t\t\tconst threshold: number = o.threshold ?? 0;\n\t\t\t\t\t\tif (Array.isArray(v) && v.length <= threshold) {\n\t\t\t\t\t\t\t// On partial reload, drop; on full load, keep.\n\t\t\t\t\t\t\tif (this.isPartialReload(info)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolved[key] = v;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"merge\": {\n\t\t\t\t\t\tconst v = await Promise.resolve(helper.resolve());\n\t\t\t\t\t\tmergeProps.push(key);\n\t\t\t\t\t\tconst m = helper as any;\n\t\t\t\t\t\tif (m.matchPropsOn && m.matchPropsOn.length > 0) {\n\t\t\t\t\t\t\tdeepMergeProps.push(key);\n\t\t\t\t\t\t\tmatchPropsOn.push(m.matchPropsOn);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolved[key] = v;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"deepMerge\": {\n\t\t\t\t\t\tresolved[key] = await Promise.resolve(helper.resolve());\n\t\t\t\t\t\tmergeProps.push(key);\n\t\t\t\t\t\tdeepMergeProps.push(key);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"once\": {\n\t\t\t\t\t\tif (info.isInertia) {\n\t\t\t\t\t\t\t// Already loaded once — skip.\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolved[key] = await Promise.resolve(helper.resolve());\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"lazy\": {\n\t\t\t\t\t\t// Lazy props are memoised per response. If multiple\n\t\t\t\t\t\t// keys share the same LazyProp tag, the factory\n\t\t\t\t\t\t// runs only once and every key receives the result.\n\t\t\t\t\t\tconst lz = helper as any;\n\t\t\t\t\t\tconst tag = lz.tag;\n\t\t\t\t\t\tif (this.lazyCache.has(tag)) {\n\t\t\t\t\t\t\tresolved[key] = this.lazyCache.get(tag);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst v = await Promise.resolve(helper.resolve());\n\t\t\t\t\t\t\tthis.lazyCache.set(tag, v);\n\t\t\t\t\t\t\tresolved[key] = v;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\t// Future helper kinds: just resolve and send.\n\t\t\t\t\t\tresolved[key] = await Promise.resolve(helper.resolve());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresolved[key] = value;\n\t\t\t}\n\t\t}\n\n\t\t// 3. Apply partial-reload filters (only/except).\n\t\tconst sharedKeys = new Set(Object.keys(shared));\n\t\tthis.applyPartialFilter(resolved, info, sharedKeys);\n\n\t\t// 4. Resolve final metadata.\n\t\tconst version = await this.adapter.resolveVersion();\n\t\treturn {\n\t\t\tcomponent: this.component,\n\t\t\tprops: resolved,\n\t\t\turl,\n\t\t\tversion: version ?? \"\",\n\t\t\tencryptHistory:\n\t\t\t\tthis.options.encryptHistory ?? this.adapter.encryptHistory(),\n\t\t\tclearHistory: this.options.clearHistory ?? false,\n\t\t\tdeferredProps:\n\t\t\t\tObject.keys(deferredProps).length > 0 ? deferredProps : undefined,\n\t\t\tmergeProps: mergeProps.length > 0 ? mergeProps : undefined,\n\t\t\tdeepMergeProps: deepMergeProps.length > 0 ? deepMergeProps : undefined,\n\t\t\tmatchPropsOn: matchPropsOn.length > 0 ? matchPropsOn : undefined,\n\t\t\tscrollRegions: {},\n\t\t};\n\t}\n\n\t/**\n\t * Partial-reload filtering. Props not in `only` (or in `except`) are\n\t * dropped, except for:\n\t * - `AlwaysProp`-wrapped props\n\t * - Shared props (configured via `inertia.share(...)` or `sharedProps`)\n\t * - Deferred props (placeholders are kept so the client knows what to fetch)\n\t */\n\tprivate applyPartialFilter(\n\t\tresolved: Record<string, any>,\n\t\tinfo: InertiaRequestInfo,\n\t\tsharedKeys: Set<string>,\n\t): void {\n\t\tif (!this.isPartialReload(info)) return;\n\n\t\tif (info.partialOnly) {\n\t\t\tfor (const key of Object.keys(resolved)) {\n\t\t\t\tconst isAlways = sharedKeys.has(key); // shared + always treated equally\n\t\t\t\tif (!info.partialOnly.includes(key) && !isAlways) {\n\t\t\t\t\tdelete resolved[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (info.partialExcept) {\n\t\t\tfor (const key of Object.keys(resolved)) {\n\t\t\t\tconst isAlways = sharedKeys.has(key);\n\t\t\t\tif (info.partialExcept.includes(key) && !isAlways) {\n\t\t\t\t\tdelete resolved[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate isPartialReload(info: InertiaRequestInfo): boolean {\n\t\treturn info.isInertia && (!!info.partialOnly || !!info.partialExcept);\n\t}\n\n\tprivate parseInertiaRequest(c: Context): InertiaRequestInfo {\n\t\tconst isInertia = c.req.header(\"x-inertia\") === \"true\";\n\t\tconst partialOnlyHeader = c.req.header(\"x-inertia-partial-data\");\n\t\tconst partialExceptHeader = c.req.header(\"x-inertia-partial-except\");\n\t\tconst resetHeader = c.req.header(\"x-inertia-reset\");\n\n\t\treturn {\n\t\t\tisInertia,\n\t\t\tclientVersion: c.req.header(\"x-inertia-version\") ?? undefined,\n\t\t\tpartialComponent:\n\t\t\t\tc.req.header(\"x-inertia-partial-component\") ?? undefined,\n\t\t\tpartialOnly: this.csv(partialOnlyHeader),\n\t\t\tpartialExcept: this.csv(partialExceptHeader),\n\t\t\treset: this.csv(resetHeader),\n\t\t\tisHardReload: c.req.header(\"x-inertia-hard-reload\") === \"true\",\n\t\t};\n\t}\n\n\tprivate csv(value: string | undefined): string[] | undefined {\n\t\tif (!value) return undefined;\n\t\tconst parts = value\n\t\t\t.split(\",\")\n\t\t\t.map((s) => s.trim())\n\t\t\t.filter(Boolean);\n\t\treturn parts.length > 0 ? parts : undefined;\n\t}\n\n\tprivate jsonResponse(page: InertiaPage): Response {\n\t\treturn new Response(JSON.stringify(page), {\n\t\t\tstatus: 200,\n\t\t\theaders: {\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\tVary: \"X-Inertia\",\n\t\t\t\t\"X-Inertia\": \"true\",\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate htmlResponse(\n\t\tc: Context,\n\t\tpage: InertiaPage,\n\t): Promise<Response> | Response {\n\t\tconst ssr = this.adapter.ssr();\n\t\treturn renderDefaultRoot(\n\t\t\tthis.adapter,\n\t\t\tssr ?? null,\n\t\t\tthis.component,\n\t\t\tpage,\n\t\t\tc,\n\t\t);\n\t}\n\n\tprivate assetVersionMismatch(url: string): Response {\n\t\treturn new Response(null, {\n\t\t\tstatus: 409,\n\t\t\theaders: {\n\t\t\t\t\"X-Inertia-Location\": url,\n\t\t\t},\n\t\t});\n\t}\n}\n",
28
+ "/**\n * Inertia `<Form>` server-side helper.\n *\n * Mirrors the Inertia v3 client-side `<Form>` component behaviour:\n *\n * 1. Controllers wrap form actions with `inertia.form(...)`.\n * 2. They validate input (typically with Zod). On failure they call\n * `.withErrors(...).render()` and the page re-renders with the\n * `errors` and (optionally) `errorBag` props injected.\n * 3. On success they call `.redirect(url)` which emits a 303 — the\n * PRG (Post-Redirect-Get) pattern that prevents double-submits.\n * 4. `.withValues(input)` re-populates the form after a validation\n * failure so the user does not have to retype everything.\n *\n * The `errors` prop is special-cased by the Inertia client: it surfaces\n * validation errors to form fields automatically when you wire up the\n * matching `useForm` hook. `errorBag` lets multiple forms on the same\n * page coexist (each form has its own error namespace).\n *\n * @example\n * ```ts\n * @Post('/users')\n * async store(@Body() input: any) {\n * const form = this.inertia.form('Users/Create');\n * const result = UserSchema.safeParse(input);\n * if (!result.success) {\n * return form\n * .withErrorBag('createUser')\n * .withErrors(result.error.flatten().fieldErrors)\n * .withValues(input)\n * .render();\n * }\n * await this.userService.create(result.data);\n * return form.redirect('/users');\n * }\n * ```\n */\nimport type { Inertia } from \"./inertia-adapter.js\";\nimport type { InertiaResponse } from \"./inertia-response.js\";\n\n/**\n * Value shape for `withErrors`. Each field maps to a string (single\n * error) or an array of strings (multiple errors).\n */\nexport type ErrorMap = Record<string, string | string[]>;\n\n/**\n * Builder for an Inertia form response. Fluent API — every method\n * returns `this` so calls can be chained.\n */\nexport class InertiaFormBuilder {\n\tprivate props: Record<string, any>;\n\tprivate errorMap: Record<string, string[]> = {};\n\tprivate errorBagName?: string;\n\n\tconstructor(\n\t\tprivate readonly adapter: Inertia,\n\t\tprivate readonly component: string,\n\t\tinitialProps: Record<string, any> = {},\n\t) {\n\t\tthis.props = { ...initialProps };\n\t}\n\n\t// ============================================================================\n\t// Builder methods — all return `this` for chaining.\n\t// ============================================================================\n\n\t/** Merge a batch of props at once. */\n\twithProps(extra: Record<string, any>): this {\n\t\tObject.assign(this.props, extra);\n\t\treturn this;\n\t}\n\n\t/** Set a single prop. */\n\twith(key: string, value: any): this {\n\t\tthis.props[key] = value;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Attach validation errors. Each field maps to a string (single\n\t * error) or string[] (multiple). Strings are wrapped in arrays\n\t * internally to keep the shape uniform.\n\t */\n\twithErrors(errors: ErrorMap): this {\n\t\tfor (const [field, message] of Object.entries(errors)) {\n\t\t\tconst list = Array.isArray(message) ? message : [message];\n\t\t\t// Merge with existing errors on the same field.\n\t\t\tthis.errorMap[field] = [...(this.errorMap[field] ?? []), ...list];\n\t\t}\n\t\treturn this;\n\t}\n\n\t/** Add a single error to a field. */\n\twithError(field: string, message: string): this {\n\t\t(this.errorMap[field] ??= []).push(message);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Name the form's error namespace. Useful when multiple forms share\n\t * a page; each `useForm` hook on the client can read its own bag.\n\t */\n\twithErrorBag(name: string): this {\n\t\tthis.errorBagName = name;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Re-populate the form with the originally submitted values so\n\t * users don't have to retype them after a validation failure.\n\t */\n\twithValues(values: Record<string, any>): this {\n\t\tthis.props.values = values;\n\t\treturn this;\n\t}\n\n\t// ============================================================================\n\t// Terminal methods — emit the actual response.\n\t// ============================================================================\n\n\t/**\n\t * Render the page with the (possibly error-laden) props. If any\n\t * errors were attached, they are automatically injected as the\n\t * `errors` prop (and `errorBag` if a bag name was set).\n\t */\n\trender(): InertiaResponse {\n\t\tif (Object.keys(this.errorMap).length > 0) {\n\t\t\tthis.props.errors = { ...this.errorMap };\n\t\t}\n\t\tif (this.errorBagName) {\n\t\t\tthis.props.errorBag = this.errorBagName;\n\t\t}\n\t\treturn this.adapter.render(this.component, this.props);\n\t}\n\n\t/**\n\t * Issue a 303 redirect. 303 is the right status for non-GET methods\n\t * (POST/PUT/PATCH/DELETE) because it forces the client to follow up\n\t * with a GET — i.e. the PRG pattern. This prevents the browser from\n\t * resubmitting the form on refresh.\n\t */\n\tredirect(url: string): Response {\n\t\treturn new Response(null, {\n\t\t\tstatus: 303,\n\t\t\theaders: { Location: url },\n\t\t});\n\t}\n\n\t/**\n\t * Navigate back to the previous page (the Inertia client interprets\n\t * `Location: back` and steps one entry in its history). If `to` is\n\t * provided, redirect there instead.\n\t */\n\tback(to?: string): Response {\n\t\treturn new Response(null, {\n\t\t\tstatus: 303,\n\t\t\theaders: { Location: to ?? \"back\" },\n\t\t});\n\t}\n\n\t// ============================================================================\n\t// Inspection — useful in tests.\n\t// ============================================================================\n\n\t/** Read the currently-accumulated errors (without rendering). */\n\tgetErrors(): Record<string, string[]> {\n\t\treturn { ...this.errorMap };\n\t}\n\n\t/** Read the current prop draft. */\n\tgetProps(): Record<string, any> {\n\t\treturn { ...this.props };\n\t}\n}\n",
29
+ "/**\n * Inertia form middleware.\n *\n * Hooks into the request lifecycle for form actions (POST/PUT/PATCH/\n * DELETE) to do two things:\n *\n * 1. **Pre-parse form bodies.** When the client posts URL-encoded or\n * multipart data, parsing the body consumes the request stream.\n * The framework's `@Body()` parameter decorator parses JSON bodies\n * by default; this middleware additionally caches the parsed form\n * under `c.var.nexus.formBody` so controllers can read it via\n * `c.get('formBody')` without re-parsing.\n *\n * 2. **CSRF token validation.** If `validateCsrf` is enabled the\n * middleware looks for a token either in a header (`csrfHeader`) or\n * a form field (`csrfField`), compares it to the token registered\n * in shared props (`csrfSharedKey`), and returns 419 on mismatch.\n *\n * The middleware does NOT enforce a specific redirect strategy — the\n * `InertiaFormBuilder` handles that at the action level (303 + PRG).\n */\nimport type { Context, Next } from \"hono\";\nimport type { Middleware } from \"../../core/http/middleware.js\";\n\nexport interface InertiaFormMiddlewareOptions {\n\t/**\n\t * Whether to enforce CSRF validation. Off by default; turn on for\n\t * any deployment that exposes session-cookie auth.\n\t */\n\tvalidateCsrf?: boolean;\n\n\t/** Header name carrying the CSRF token. Default: `X-CSRF-Token`. */\n\tcsrfHeader?: string;\n\n\t/** Form field name carrying the CSRF token. Default: `_token`. */\n\tcsrfField?: string;\n\n\t/**\n\t * Key under `sharedProps` where the canonical CSRF token lives.\n\t * Default: `csrfToken`. The middleware reads this from\n\t * `c.var.nexus?.shared` (populated by `inertia.share(...)`).\n\t */\n\tcsrfSharedKey?: string;\n\n\t/**\n\t * Provide a custom CSRF resolver. Overrides the default shared-prop\n\t * lookup. Useful when the token is rotated per request via a\n\t * dedicated provider.\n\t */\n\tgetCsrfToken?: (c: Context) => string | undefined;\n\n\t/**\n\t * Status code to return on CSRF mismatch. Default: 419 (Laravel's\n\t * \"Page Expired\" convention).\n\t */\n\tcsrfFailureStatus?: number;\n}\n\n/** Methods that may carry form bodies and are CSRF-sensitive. */\nconst FORM_METHODS = new Set([\"POST\", \"PUT\", \"PATCH\", \"DELETE\"]);\n\nexport function inertiaFormMiddleware(\n\toptions: InertiaFormMiddlewareOptions = {},\n): Middleware {\n\tconst csrfHeader = (options.csrfHeader ?? \"X-CSRF-Token\").toLowerCase();\n\tconst csrfField = options.csrfField ?? \"_token\";\n\tconst csrfSharedKey = options.csrfSharedKey ?? \"csrfToken\";\n\tconst csrfStatus = options.csrfFailureStatus ?? 419;\n\n\treturn async (c: Context, next: Next) => {\n\t\tconst method = c.req.method;\n\n\t\t// 1. Skip non-form methods. We still want this middleware in the\n\t\t// chain so the user doesn't have to think about ordering.\n\t\tif (!FORM_METHODS.has(method)) {\n\t\t\tawait next();\n\t\t\treturn;\n\t\t}\n\n\t\t// 2. CSRF check (optional). Done before parsing the body so we\n\t\t// don't waste cycles on requests we'll reject.\n\t\tif (options.validateCsrf) {\n\t\t\tconst expected = options.getCsrfToken\n\t\t\t\t? options.getCsrfToken(c)\n\t\t\t\t: (c.get(\"nexusjs\") as any)?.shared?.[csrfSharedKey];\n\n\t\t\tif (typeof expected === \"string\" && expected.length > 0) {\n\t\t\t\tconst submittedHeader = c.req.header(csrfHeader);\n\t\t\t\tconst submittedField = await readFieldFromBody(c, csrfField);\n\t\t\t\tconst submitted = submittedHeader ?? submittedField;\n\n\t\t\t\tif (submitted !== expected) {\n\t\t\t\t\treturn c.json({ message: \"CSRF token mismatch\" }, csrfStatus as any);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 3. Pre-parse form body. We only parse when the Content-Type\n\t\t// indicates a form encoding — JSON is handled by the\n\t\t// `@Body()` parameter decorator.\n\t\tconst contentType = c.req.header(\"content-type\") ?? \"\";\n\t\tif (\n\t\t\tcontentType.includes(\"application/x-www-form-urlencoded\") ||\n\t\t\tcontentType.includes(\"multipart/form-data\")\n\t\t) {\n\t\t\ttry {\n\t\t\t\tconst parsed = await c.req.parseBody();\n\t\t\t\t// Expose to downstream handlers via Hono's `c.set` so any\n\t\t\t\t// middleware in the chain (e.g. logging) can see it.\n\t\t\t\tc.set(\"formBody\" as any, parsed as Record<string, any>);\n\t\t\t} catch {\n\t\t\t\t// Malformed body — let the controller deal with it. We\n\t\t\t\t// don't want to 400 here because the user might have\n\t\t\t\t// shipped a controller that validates manually.\n\t\t\t}\n\t\t}\n\n\t\tawait next();\n\t\treturn;\n\t};\n}\n\n/**\n * Look for a single field in a form body. We avoid a full body parse\n * if Hono hasn't already cached one. In practice the `parseBody` call\n * upstream is the expensive bit; reading a field from the result is\n * constant time.\n */\nasync function readFieldFromBody(\n\tc: Context,\n\tfield: string,\n): Promise<string | undefined> {\n\tconst cached = c.get(\"formBody\" as any) as Record<string, any> | undefined;\n\tif (cached && Object.hasOwn(cached, field)) {\n\t\tconst v = cached[field];\n\t\treturn Array.isArray(v) ? v[0] : v;\n\t}\n\ttry {\n\t\tconst body = await c.req.parseBody();\n\t\tif (body && Object.hasOwn(body, field)) {\n\t\t\tconst v = (body as any)[field];\n\t\t\treturn Array.isArray(v) ? v[0] : v;\n\t\t}\n\t} catch {\n\t\t// Body was JSON or malformed; CSRF token cannot live there.\n\t}\n\treturn undefined;\n}\n",
30
+ "/**\n * The Inertia adapter.\n *\n * One instance lives on `app.inertia`. Controllers call\n * `inertia.render('Users/Index', { users: ... })` to build a page\n * response; the router detects the marker tag and routes the response\n * through the appropriate XHR / HTML pipeline.\n *\n * The adapter also exposes:\n * - `share(...)` for global per-page props (current user, flash, CSRF)\n * - `setVersion(...)` for asset versioning\n * - `setSsrAdapter(...)` for plugging in React/Vue/Svelte SSR\n * - `location(...)` for full-page reloads (e.g. on logout)\n * - `back()` to navigate one step in history\n */\nimport \"reflect-metadata\";\nimport type { Context } from \"hono\";\nimport type {\n\tInertiaConfig,\n\tInertiaAdapter,\n\tInertiaVersion,\n\tSsrAdapter,\n} from \"./types.js\";\nimport {\n\tAlwaysProp,\n\tDeepMergeProp,\n\tDeferredProp,\n\tMergeProp,\n\tOptionalProp,\n\tOnceProp,\n\tannotateProps,\n\ttype isInertiaHelper,\n} from \"./helpers.js\";\nimport { InertiaResponse, INERTIA_RESPONSE_TAG } from \"./inertia-response.js\";\nimport { InertiaFormBuilder } from \"./form-helper.js\";\n\nconst INERTIA_TOKEN = Symbol.for(\"nexus:Inertia\");\n\nexport class Inertia implements InertiaAdapter {\n\tprivate config: InertiaConfig;\n\t/** Static, in-process shared data. Resolved via `share(...)`. */\n\tprivate shared: Record<string, any> = {};\n\n\tconstructor(config: InertiaConfig = {}) {\n\t\tthis.config = {\n\t\t\tencryptHistory: false,\n\t\t\t...config,\n\t\t};\n\t}\n\n\t// ============================================================================\n\t// Public API — the controller-facing surface\n\t// ============================================================================\n\n\t/**\n\t * Render an Inertia page. Supports two call shapes:\n\t *\n\t * render(component, props) — simple form\n\t * render(component, deferred, props) — advanced form with deferred map\n\t *\n\t * Props can be plain values or helper wrappers (`defer()`, `always()`, ...).\n\t */\n\trender(component: string, props: Record<string, any>): InertiaResponse;\n\trender(\n\t\tcomponent: string,\n\t\tdeferred: Record<string, DeferredProp>,\n\t\tprops: Record<string, any>,\n\t): InertiaResponse;\n\trender(\n\t\tcomponent: string,\n\t\tpropsOrDeferred: Record<string, any>,\n\t\tmaybeProps?: Record<string, any>,\n\t): InertiaResponse {\n\t\tconst { component: comp, props } = this.normalizeRenderArgs(\n\t\t\tcomponent,\n\t\t\tpropsOrDeferred,\n\t\t\tmaybeProps,\n\t\t);\n\t\treturn new InertiaResponse(this, comp, props);\n\t}\n\n\t/**\n\t * Build a redirect-style response that forces the client to do a full\n\t * page navigation (NOT a client-side visit). Useful for logout, asset\n\t * revalidation, or any time you want to bypass Inertia's history.\n\t */\n\tlocation(url: string): Response {\n\t\treturn new Response(null, {\n\t\t\tstatus: 409,\n\t\t\theaders: {\n\t\t\t\t\"X-Inertia-Location\": url,\n\t\t\t},\n\t\t});\n\t}\n\n\t/** Render a redirect that the Inertia client can follow. */\n\tredirect(url: string, status: number = 302): Response {\n\t\t// Inertia treats 302/303 as client-side visits; use 409 for hard\n\t\t// redirects (bypassing Inertia history).\n\t\treturn new Response(null, {\n\t\t\tstatus,\n\t\t\theaders: { Location: url },\n\t\t});\n\t}\n\n\t/** Special \"back\" navigation — the client steps back in its history. */\n\tback(): Response {\n\t\treturn new Response(null, {\n\t\t\tstatus: 302,\n\t\t\theaders: { Location: \"back\" },\n\t\t});\n\t}\n\n\t/**\n\t * Begin a `<Form>` server-side flow. Returns a builder that the\n\t * controller chains onto (validate → on-error render, on-success\n\t * redirect). See `form-helper.ts` for the full lifecycle.\n\t *\n\t * @example\n\t * ```ts\n\t * const form = inertia.form('Users/Create');\n\t * const r = UserSchema.safeParse(input);\n\t * if (!r.success) return form.withErrors(r.error.flatten().fieldErrors).render();\n\t * return form.redirect('/users');\n\t * ```\n\t */\n\tform(\n\t\tcomponent: string,\n\t\tinitialProps: Record<string, any> = {},\n\t): InertiaFormBuilder {\n\t\treturn new InertiaFormBuilder(this, component, initialProps);\n\t}\n\n\t// ============================================================================\n\t// Configuration\n\t// ============================================================================\n\n\tsetVersion(version: InertiaVersion): this {\n\t\tthis.config.version = version;\n\t\treturn this;\n\t}\n\n\tsetSsrAdapter(adapter: SsrAdapter | null): this {\n\t\tthis.config.ssr = adapter ?? undefined;\n\t\treturn this;\n\t}\n\n\tsetTitle(title: string): this {\n\t\tthis.config.title = title;\n\t\treturn this;\n\t}\n\n\tsetEncryptHistory(encrypt: boolean = true): this {\n\t\tthis.config.encryptHistory = encrypt;\n\t\treturn this;\n\t}\n\n\tsetSharedProps(shared: InertiaConfig[\"sharedProps\"]): this {\n\t\tthis.config.sharedProps = shared;\n\t\treturn this;\n\t}\n\n\t// ============================================================================\n\t// Shared data\n\t// ============================================================================\n\n\t/**\n\t * Share data with every response. Two call shapes:\n\t * - `share('key', value)` — single key/value\n\t * - `share({ a: 1, b: 2 })` — batch update\n\t */\n\tshare(key: string | Record<string, any>, value?: any): void {\n\t\tif (typeof key === \"string\") {\n\t\t\tthis.shared[key] = value;\n\t\t} else if (key && typeof key === \"object\") {\n\t\t\tObject.assign(this.shared, key);\n\t\t}\n\t}\n\n\t/** Remove a previously shared key. */\n\tunshare(key: string): void {\n\t\tdelete this.shared[key];\n\t}\n\n\t/** Read the currently shared static data. */\n\tgetShared(): Record<string, any> {\n\t\treturn { ...this.shared };\n\t}\n\n\t// ============================================================================\n\t// InertiaAdapter interface — used by InertiaResponse\n\t// ============================================================================\n\n\ttitle(): string {\n\t\treturn this.config.title ?? \"Nexus\";\n\t}\n\n\tencryptHistory(): boolean {\n\t\treturn this.config.encryptHistory ?? false;\n\t}\n\n\tssr(): SsrAdapter | null {\n\t\treturn this.config.ssr ?? null;\n\t}\n\n\tasync resolveVersion(): Promise<string | undefined> {\n\t\tconst v = this.config.version;\n\t\tif (typeof v === \"function\") return await v();\n\t\treturn v;\n\t}\n\n\tasync getSharedFor(_c: Context): Promise<Record<string, any>> {\n\t\tconst static_ = this.getShared();\n\t\tconst configured = this.config.sharedProps;\n\t\tif (typeof configured === \"function\") {\n\t\t\tconst dyn = await configured();\n\t\t\treturn { ...static_, ...dyn };\n\t\t}\n\t\treturn { ...static_, ...(configured ?? {}) };\n\t}\n\n\t// ============================================================================\n\t// DI token — so users can inject the Inertia instance.\n\t// ============================================================================\n\n\t/** Symbol used as the DI token for the Inertia instance. */\n\tstatic readonly TOKEN = INERTIA_TOKEN;\n\n\t// ============================================================================\n\t// Internals\n\t// ============================================================================\n\n\t/**\n\t * Normalize the two call shapes into `{ component, props }`. The\n\t * `deferred` map (3-arg form) is folded into the props here so the\n\t * InertiaResponse sees a single props map.\n\t */\n\tprivate normalizeRenderArgs(\n\t\tcomponent: string,\n\t\tpropsOrDeferred: Record<string, any>,\n\t\tmaybeProps?: Record<string, any>,\n\t): {\n\t\tcomponent: string;\n\t\tprops: Record<string, any>;\n\t} {\n\t\tif (maybeProps !== undefined) {\n\t\t\t// 3-arg form: render(component, deferred, props)\n\t\t\tconst deferred: Record<string, DeferredProp> = {};\n\t\t\tfor (const [k, v] of Object.entries(propsOrDeferred)) {\n\t\t\t\tif (v instanceof DeferredProp) deferred[k] = v;\n\t\t\t\telse\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Inertia.render: 3-arg form expects the second argument to be a map of deferred props. ` +\n\t\t\t\t\t\t\t`Got non-deferred value at key \"${k}\".`,\n\t\t\t\t\t);\n\t\t\t}\n\t\t\treturn { component, props: { ...deferred, ...maybeProps } };\n\t\t}\n\n\t\t// 2-arg form: render(component, props) — helpers are left in place\n\t\t// so the response builder can recognize and resolve them.\n\t\treturn { component, props: propsOrDeferred ?? {} };\n\t}\n}\n\n// ============================================================================\n// Re-exports for convenience (so users can do `import { Inertia, defer }`)\n// ============================================================================\n\nexport {\n\tAlwaysProp,\n\tDeepMergeProp,\n\ttype DeferredProp,\n\tMergeProp,\n\tOptionalProp,\n\tOnceProp,\n\tannotateProps,\n\ttype isInertiaHelper,\n};\nexport type {\n\tAlwaysProp as AlwaysPropType,\n\tDeepMergeProp as DeepMergePropType,\n\tDeferredProp as DeferredPropType,\n\tMergeProp as MergePropType,\n\tOptionalProp as OptionalPropType,\n\tOnceProp as OncePropType,\n} from \"./helpers.js\";\n\nexport { InertiaResponse, INERTIA_RESPONSE_TAG };\n",
31
+ "/**\n * Component registry shared by all SSR adapters.\n *\n * Each SSR adapter (React, Vue, Svelte, Solid) needs to map an Inertia\n * component name (e.g. `\"Users/Index\"`) to a real component that can\n * be rendered server-side. The registry centralizes that mapping so\n * the same configuration works across adapters and so users can\n * register components once and reuse them across requests.\n *\n * The registry is intentionally framework-agnostic: it doesn't care\n * what a \"component\" actually is, only that the SSR adapter knows how\n * to render it.\n */\nexport class ComponentRegistry {\n\tprivate readonly map = new Map<string, any>();\n\n\t/**\n\t * Register a single component under `name`. Returns `this` so\n\t * registrations can be chained.\n\t */\n\tregister(name: string, component: any): this {\n\t\tthis.map.set(name, component);\n\t\treturn this;\n\t}\n\n\t/** Register a batch of components at once. */\n\tregisterAll(components: Record<string, any>): this {\n\t\tfor (const [name, component] of Object.entries(components)) {\n\t\t\tthis.map.set(name, component);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/** Look up a component by name. Returns `undefined` when missing. */\n\tresolve(name: string): any {\n\t\treturn this.map.get(name);\n\t}\n\n\t/** Whether the registry has a binding for `name`. */\n\thas(name: string): boolean {\n\t\treturn this.map.has(name);\n\t}\n\n\t/** Drop a binding. */\n\tunregister(name: string): boolean {\n\t\treturn this.map.delete(name);\n\t}\n\n\t/** List of all registered component names (for diagnostics). */\n\tnames(): string[] {\n\t\treturn [...this.map.keys()];\n\t}\n\n\t/** Total number of registered components. */\n\tget size(): number {\n\t\treturn this.map.size;\n\t}\n}\n\n/** Convenience factory. */\nexport function createRegistry(\n\tinitial?: Record<string, any>,\n): ComponentRegistry {\n\tconst reg = new ComponentRegistry();\n\tif (initial) reg.registerAll(initial);\n\treturn reg;\n}\n\n/**\n * Normalize the `components` option from any SSR adapter. Adapters\n * accept either an existing `ComponentRegistry` or a plain object\n * map; this helper unifies the two.\n */\nexport function asRegistry(\n\tinput: ComponentRegistry | Record<string, any>,\n): ComponentRegistry {\n\treturn input instanceof ComponentRegistry ? input : createRegistry(input);\n}\n",
32
+ "/**\n * SSR adapter barrel.\n *\n * Each adapter is loaded dynamically by the Inertia response when\n * SSR is needed. The framework core stays framework-agnostic; users\n * install only the frontend packages they actually use.\n */\nexport * from \"./registry.js\";\nexport * from \"./react-adapter.js\";\nexport * from \"./vue-adapter.js\";\nexport * from \"./svelte-adapter.js\";\nexport * from \"./solid-adapter.js\";\n",
33
+ "/**\n * Inertia adapter barrel.\n *\n * Public exports for the server-side Inertia.js v2/v3 adapter. The\n * adapter implements the Inertia protocol: JSON responses for XHR,\n * HTML shell with embedded page data for first-page loads, deferred /\n * merge / always / once / lazy prop helpers, asset versioning, shared\n * data, form helpers, and a pluggable SSR adapter interface.\n */\nexport * from \"./types.js\";\nexport * from \"./helpers.js\";\nexport * from \"./inertia-response.js\";\nexport * from \"./form-helper.js\";\nexport * from \"./form-middleware.js\";\nexport * from \"./inertia-adapter.js\";\nexport * from \"./default-ssr.js\";\nexport * from \"./ssr/index.js\";\n",
34
+ "/**\n * Application.\n *\n * The Application is the user-facing entry point: it owns the DI container,\n * the HTTP server, and the view engine. Typical bootstrap:\n *\n * ```ts\n * const app = await new Application(AppModule).bootstrap();\n * await app.listen(3000);\n * ```\n *\n * The class is intentionally small — every feature (DI, HTTP, ORM, view)\n * is a separate concern with its own module. Application composes them.\n */\nimport \"reflect-metadata\";\nimport { ApplicationContainer } from \"./di/container.js\";\nimport { ModuleScanner } from \"./di/scanner.js\";\nimport { NexusServer, type NexusServerOptions } from \"./http/server.js\";\nimport type { ViewAdapter } from \"../view/types.js\";\nimport { RenduAdapter } from \"../view/rendu.js\";\nimport { setViewPaths as setViewPathsModule } from \"../view/view-engine.js\";\nimport type { Type } from \"./di/tokens.js\";\nimport { Inertia, type InertiaConfig } from \"../view/inertia/index.js\";\n\nexport interface ApplicationOptions extends NexusServerOptions {\n\t/** Default view adapter. Defaults to Rendu. */\n\tviewAdapter?: ViewAdapter;\n\t/** Inertia configuration. If supplied, `app.inertia` is initialized. */\n\tinertia?: InertiaConfig;\n}\n\nexport class Application {\n\treadonly container: ApplicationContainer;\n\treadonly server: NexusServer;\n\t/** Inertia adapter (or `null` if not configured). Always defined after ctor. */\n\treadonly inertia: Inertia | null;\n\tprivate viewAdapter: ViewAdapter;\n\n\tconstructor(rootModule: Type<any>, options: ApplicationOptions = {}) {\n\t\t// Build the DI container and scan the module tree.\n\t\tthis.container = new ApplicationContainer();\n\t\tconst scanner = new ModuleScanner(this.container);\n\t\tconst { root, modules } = scanner.scan(rootModule);\n\n\t\t// Create the HTTP server around the same container.\n\t\tthis.server = new NexusServer(this.container, options);\n\n\t\t// Register all controllers from every scanned module.\n\t\tfor (const m of modules) {\n\t\t\tfor (const controller of m.controllers) {\n\t\t\t\tthis.server.router.registerController(controller, m.container);\n\t\t\t}\n\t\t}\n\t\t// Root module providers/controllers were already added in the scan.\n\t\tfor (const controller of root.controllers) {\n\t\t\tthis.server.router.registerController(controller, root.container);\n\t\t}\n\n\t\tthis.viewAdapter = options.viewAdapter ?? new RenduAdapter();\n\n\t\t// Initialize the Inertia adapter if configured. The instance is\n\t\t// also registered into the container under its symbol token so\n\t\t// controllers can inject it via `@Inject(Inertia.TOKEN)`.\n\t\tif (options.inertia) {\n\t\t\tthis.inertia = new Inertia(options.inertia);\n\t\t\tthis.container.register({\n\t\t\t\tprovide: Inertia.TOKEN,\n\t\t\t\tuseValue: this.inertia,\n\t\t\t});\n\t\t} else {\n\t\t\tthis.inertia = null;\n\t\t}\n\n\t\t// Auto-load nx.config.ts at boot so viewPaths (and future config)\n\t\t// take effect without an explicit app.setViewPaths() call.\n\t\tthis.tryLoadNxConfig();\n\n\t\t// Surface debug info in dev.\n\t\tif (process.env[\"NEXUS_DEBUG\"] === \"1\") {\n\t\t\tconsole.log(\"[nexus] Modules:\", modules.length);\n\t\t\tconsole.log(\n\t\t\t\t\"[nexus] Controllers:\",\n\t\t\t\tmodules.flatMap((m) => m.controllers).map((c) => c.name),\n\t\t\t);\n\t\t\tconsole.log(\"[nexus] Providers (root):\", this.container.list());\n\t\t\tconsole.log(\"[nexus] Inertia:\", this.inertia ? \"enabled\" : \"disabled\");\n\t\t}\n\t}\n\n\t/** Try to load nx.config.ts and apply runtime-relevant settings. */\n\tprivate tryLoadNxConfig(): void {\n\t\t// Bun provides require() even in ESM. On other runtimes (Node,\n\t\t// Cloudflare Workers) nx.config.ts may not be loadable — that's\n\t\t// fine, the user can set viewPaths explicitly via\n\t\t// app.setViewPaths().\n\t\tif (typeof require === \"undefined\") return;\n\t\ttry {\n\t\t\tconst mod = require(process.cwd() + \"/nx.config.ts\");\n\t\t\tconst cfg = mod.default ?? mod;\n\t\t\tif (cfg && typeof cfg.viewPaths === \"string\" && cfg.viewPaths.length > 0) {\n\t\t\t\tsetViewPathsModule(cfg.viewPaths);\n\t\t\t}\n\t\t} catch {\n\t\t\t// nx.config.ts not found or unparseable — that's fine.\n\t\t}\n\t}\n\n\t/** Replace the default view adapter. */\n\tsetViewAdapter(adapter: ViewAdapter): this {\n\t\tthis.viewAdapter = adapter;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Set the directories to search when a controller returns\n\t * `{ view: 'about.html' }`. Defaults to `[]` (no file-based\n\t * views; controllers must pass inline template source).\n\t *\n\t * The Application auto-loads nx.config.ts at construction time, so if\n\t * you already set viewPaths there, no explicit call is needed.\n\t * This method exists to override the config-file value at runtime.\n\t *\n\t * Typical setup in nx.config.ts (auto-detected):\n\t *\n\t * export default {\n\t * view: 'rendu',\n\t * viewPaths: 'resources/views',\n\t * };\n\t *\n\t * After this, `@Get('/about') return { view: 'about.html', data }`\n\t * loads `views/about.html` from disk instead of treating the\n\t * string as inline template source.\n\t *\n\t * Edge-only runtimes (Cloudflare Workers) should leave this\n\t * empty and pass inline template strings.\n\t */\n\tsetViewPaths(path: string): this {\n\t\tsetViewPathsModule(path);\n\t\treturn this;\n\t}\n\n\t/** Render a view using the configured adapter. */\n\tasync render(view: string, data: Record<string, any> = {}): Promise<string> {\n\t\treturn this.viewAdapter.render(view, data);\n\t}\n\n\t/**\n\t * Convenience: start the server using the auto-detected runtime adapter.\n\t */\n\tasync listen(port?: number): Promise<any> {\n\t\tif (port) {\n\t\t\tthis.server.setPort(port);\n\t\t}\n\t\treturn this.server.start();\n\t}\n\n\t/**\n\t * For Cloudflare / Workers: return the fetch handler.\n\t */\n\tget fetch() {\n\t\treturn this.server.fetch;\n\t}\n\n\t/**\n\t * Static factory that mirrors the typical `bootstrap()` pattern.\n\t */\n\tstatic bootstrap(\n\t\trootModule: Type<any>,\n\t\toptions?: ApplicationOptions,\n\t): Application {\n\t\treturn new Application(rootModule, options);\n\t}\n}\n",
35
+ "/**\n * `nx info` — print the resolved project configuration.\n *\n * Useful for debugging the config layer: shows which `nx.config.ts`\n * file was loaded, the resolved config (with env overrides), and the\n * current environment values that affect the CLI.\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { colors, logger } from \"../core/index.js\";\n\nexport const infoCommand: Command = {\n\tname: \"info\",\n\taliases: [\"i\"],\n\tsummary: \"Show project configuration\",\n\tdescription: \"Prints the resolved nx.config.ts plus relevant env vars.\",\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tlogger.heading(\"Nexus CLI — Project Info\");\n\n\t\tlogger.info(colors.bold(\"Resolved configuration\"));\n\t\tlogger.blank();\n\t\tlogger.table([\n\t\t\t[\"routing\", String(ctx.config.routing)],\n\t\t\t[\"view\", String(ctx.config.view)],\n\t\t\t[\"orm\", String(ctx.config.orm)],\n\t\t\t[\"dialect\", String(ctx.config.dialect ?? \"(none)\")],\n\t\t\t[\"database.driver\", String(ctx.config.database.driver)],\n\t\t\t[\"database.url\", String(ctx.config.database.url)],\n\t\t\t[\"inertia.frontend\", String(ctx.config.inertia.frontend)],\n\t\t\t[\"inertia.ssr\", String(ctx.config.inertia.ssr)],\n\t\t\t[\"inertia.version\", String(ctx.config.inertia.version)],\n\t\t]);\n\n\t\tlogger.blank();\n\t\tlogger.info(colors.bold(\"Paths\"));\n\t\tlogger.blank();\n\t\tfor (const [k, v] of Object.entries(ctx.config.paths)) {\n\t\t\tlogger.table([[k, v]]);\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.info(colors.bold(\"Environment\"));\n\t\tlogger.blank();\n\t\tconst envKeys = [\n\t\t\t\"NODE_ENV\",\n\t\t\t\"PORT\",\n\t\t\t\"NEXUS_DEBUG\",\n\t\t\t\"NO_COLOR\",\n\t\t\t\"FORCE_COLOR\",\n\t\t\t\"NX_ROUTING\",\n\t\t\t\"NX_VIEW\",\n\t\t\t\"NX_ORM\",\n\t\t\t\"NX_DATABASE_DRIVER\",\n\t\t\t\"NX_DATABASE_URL\",\n\t\t\t\"NX_INERTIA_FRONTEND\",\n\t\t\t\"NX_INERTIA_SSR\",\n\t\t];\n\t\tfor (const k of envKeys) {\n\t\t\tconst v = process.env[k];\n\t\t\tlogger.table([[k, v === undefined ? colors.dim(\"(unset)\") : v]]);\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.info(colors.bold(\"Working directory\"));\n\t\tlogger.blank();\n\t\tlogger.info(` ${resolve(ctx.cwd)}`);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nexport default infoCommand;\n",
36
+ "/**\n * Minimal argv parser for the `nx` CLI.\n *\n * Supports:\n * - positional args\n * - short flags (-v, -p 3000)\n * - long flags (--verbose, --port=3000, --port 3000)\n * - boolean toggles (--no-color / --color)\n * - `--` end-of-options marker\n *\n * Usage:\n * const { command, positional, flags } = parseArgs(process.argv.slice(2));\n */\n\nexport interface ParsedArgs {\n\t/** Subcommand name (first positional arg, e.g. `make:controller`). */\n\tcommand: string | undefined;\n\t/** Remaining positional args after the command. */\n\tpositional: string[];\n\t/** Flag map: long → string | boolean | string[]. */\n\tflags: Record<string, string | boolean | string[]>;\n}\n\nconst LONG_RE = /^--([^=]+)(?:=(.*))?$/;\nconst SHORT_RE = /^-([A-Za-z])$/;\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n\tconst positional: string[] = [];\n\tconst flags: Record<string, string | boolean | string[]> = {};\n\tlet endOfOptions = false;\n\n\tlet i = 0;\n\twhile (i < argv.length) {\n\t\tconst arg = argv[i]!;\n\n\t\tif (arg === \"--\") {\n\t\t\tendOfOptions = true;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (endOfOptions || !arg.startsWith(\"-\")) {\n\t\t\tpositional.push(arg);\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst longMatch = LONG_RE.exec(arg);\n\t\tif (longMatch) {\n\t\t\tconst [, name, inline] = longMatch;\n\t\t\tconst flagName = name!;\n\n\t\t\tif (inline !== undefined) {\n\t\t\t\tsetFlag(flags, flagName, inline);\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// `--flag` (boolean) or `--flag value` (consume next arg if no leading dash)\n\t\t\tconst next = argv[i + 1];\n\t\t\tif (next !== undefined && !next.startsWith(\"-\")) {\n\t\t\t\tsetFlag(flags, flagName, next);\n\t\t\t\ti += 2;\n\t\t\t} else {\n\t\t\t\tsetFlag(flags, flagName, true);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst shortMatch = SHORT_RE.exec(arg);\n\t\tif (shortMatch) {\n\t\t\tconst flagName = shortMatch[1]!;\n\t\t\tconst next = argv[i + 1];\n\t\t\tif (next !== undefined && !next.startsWith(\"-\")) {\n\t\t\t\tsetFlag(flags, flagName, next);\n\t\t\t\ti += 2;\n\t\t\t} else {\n\t\t\t\tsetFlag(flags, flagName, true);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Unknown flag shape — treat as positional.\n\t\tpositional.push(arg);\n\t\ti++;\n\t}\n\n\tconst command = positional.shift();\n\treturn { command, positional, flags };\n}\n\nfunction setFlag(\n\tflags: Record<string, string | boolean | string[]>,\n\tname: string,\n\tvalue: string | boolean,\n) {\n\t// `--no-foo` toggles `foo` to false.\n\tif (name.startsWith(\"no-\") && value === true) {\n\t\tconst key = name.slice(3);\n\t\tflags[key] = false;\n\t\treturn;\n\t}\n\n\tconst existing = flags[name];\n\tif (existing === undefined) {\n\t\tflags[name] = value;\n\t} else if (Array.isArray(existing)) {\n\t\texisting.push(typeof value === \"string\" ? value : String(value));\n\t} else {\n\t\tflags[name] = [\n\t\t\tString(existing),\n\t\t\ttypeof value === \"string\" ? value : String(value),\n\t\t];\n\t}\n}\n\n/** Coerce a flag value to string with a default. */\nexport function flagString(\n\tflags: Record<string, string | boolean | string[]>,\n\tname: string,\n\tfallback?: string,\n): string | undefined {\n\tconst v = flags[name];\n\tif (v === undefined || v === false) return fallback;\n\tif (typeof v === \"string\") return v;\n\tif (Array.isArray(v)) return v[0];\n\treturn String(v);\n}\n\n/** Coerce a flag value to boolean with a default. */\nexport function flagBool(\n\tflags: Record<string, string | boolean | string[]>,\n\tname: string,\n\tfallback = false,\n): boolean {\n\tconst v = flags[name];\n\tif (v === undefined) return fallback;\n\tif (typeof v === \"boolean\") return v;\n\treturn v !== \"false\" && v !== \"0\" && v !== \"no\";\n}\n\n/** Read a flag list (each occurrence appends). */\nexport function flagList(\n\tflags: Record<string, string | boolean | string[]>,\n\tname: string,\n): string[] {\n\tconst v = flags[name];\n\tif (v === undefined) return [];\n\tif (Array.isArray(v)) return v;\n\tif (typeof v === \"string\") return [v];\n\treturn [String(v)];\n}\n",
37
+ "/**\n * `nx.config.ts` loader.\n *\n * Reads the project's `nx.config.ts` (or `.nxrc.json`) and merges it\n * with environment overrides (`NX_ROUTING`, `NX_VIEW`, `NX_ORM`,\n * `NX_DATABASE_URL`, etc.).\n *\n * The config file is dynamically imported so users can write it in\n * TypeScript with full type checking.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport type RoutingStyle = \"nest\" | \"adonis\" | \"functional\" | \"mixed\";\nexport type ViewEngine = \"rendu\" | \"edge\" | \"inertia\" | \"none\";\nexport type OrmDriver = \"drizzle\" | \"prisma\" | \"kysely\" | \"none\";\nexport type InertiaFrontend = \"react\" | \"vue\" | \"svelte\" | \"solid\";\nexport type DatabaseDriver =\n\t| \"bun-sqlite\"\n\t| \"node-sqlite\"\n\t| \"libsql\"\n\t| \"postgres\"\n\t| \"mysql\"\n\t| \"none\";\nexport type QueueBackendKind = \"bullmq\" | \"cloudflare\" | \"memory\";\n\n/** Authentication surface. Mirrors `src/auth/types.ts` (kept inline so\n * the CLI doesn't depend on the auth module). */\nexport interface NxAuthConfig {\n\t/** Mount path for better-auth handler. Default: `/api/auth`. */\n\tbasePath?: string;\n\t/** Email + password authentication. */\n\temailAndPassword?: {\n\t\tenabled?: boolean;\n\t\trequireEmailVerification?: boolean;\n\t\tminPasswordLength?: number;\n\t\tmaxPasswordLength?: number;\n\t};\n\t/** Social providers keyed by name (github, google, discord, ...). */\n\tsocialProviders?: Record<\n\t\tstring,\n\t\t{\n\t\t\tclientId: string;\n\t\t\tclientSecret: string;\n\t\t\tscope?: string[];\n\t\t\tredirectURI?: string;\n\t\t}\n\t>;\n\t/** JWT plugin (token + JWKS endpoint). */\n\tjwt?: {\n\t\tenabled: boolean;\n\t\tjwksPath?: string;\n\t\tissuer?: string;\n\t\taudience?: string;\n\t\texpiresIn?: number;\n\t};\n\t/** Passkey plugin (WebAuthn). */\n\tpasskey?: {\n\t\tenabled: boolean;\n\t\trpName: string;\n\t\trpId: string;\n\t\torigin: string | string[];\n\t};\n\t/** Session TTL in seconds. Default: 7 days. */\n\tsessionExpiresInSeconds?: number;\n\t/** Cookie domain for subdomains. */\n\tcookieDomain?: string;\n\t/** Cross-subdomain cookies. */\n\tcrossSubDomainCookies?: {\n\t\tenabled: boolean;\n\t\tdomain?: string;\n\t};\n\t/** Cookie `SameSite` attribute. */\n\tcookieSameSite?: \"lax\" | \"strict\" | \"none\";\n\t/** Cookie `Secure` flag. Default: true in production. */\n\tcookieSecure?: boolean;\n}\n\nexport interface NxConfig {\n\t/** Routing style for `make:controller` templates. */\n\trouting: RoutingStyle;\n\t/** View engine for view templates. */\n\tview: ViewEngine;\n\t/** ORM driver. */\n\torm: OrmDriver;\n\t/** Drizzle dialect (when `orm === 'drizzle'`). */\n\tdialect?: \"postgres\" | \"mysql\" | \"sqlite\" | \"bun-sqlite\" | \"d1\";\n\t/** Database driver. */\n\tdatabase: {\n\t\tdriver: DatabaseDriver;\n\t\turl: string;\n\t};\n\t/** Inertia-specific config (only consulted when `view === 'inertia'`). */\n\tinertia: {\n\t\tfrontend: InertiaFrontend;\n\t\tssr: boolean;\n\t\tversion: string;\n\t};\n\t/** Where to scaffold files. */\n\tpaths: {\n\t\tapp: string;\n\t\tcontrollers: string;\n\t\tservices: string;\n\t\tmodules: string;\n\t\tmodels: string;\n\t\tmigrations: string;\n\t\tseeds?: string;\n\t\tmiddleware: string;\n\t\tdto: string;\n\t};\n\t/** Names that get auto-included in `@Module({ controllers: [...] })`. */\n\tmoduleStyle: \"nest\" | \"adonis\";\n\n\t/** Authentication (better-auth) configuration. Optional. */\n\tauth?: NxAuthConfig;\n\n\t/** Queue (BullMQ / Cloudflare Queues) configuration. Optional. */\n\tqueue?: {\n\t\tbackend: QueueBackendKind;\n\t\tbullmq?: {\n\t\t\tconnection: string | { host: string; port: number; password?: string };\n\t\t\tprefix?: string;\n\t\t};\n\t\tcloudflare?: {\n\t\t\t/** Name of the Queue binding on the Worker (e.g. 'MY_QUEUE'). */\n\t\t\tbindingName: string;\n\t\t\tqueueName?: string;\n\t\t};\n\t\tdefaults?: {\n\t\t\tdelaySeconds?: number;\n\t\t\tattempts?: number;\n\t\t\tbackoff?: { type: \"fixed\" | \"exponential\"; delayMs: number };\n\t\t};\n\t};\n}\n\nexport const DEFAULT_CONFIG: NxConfig = {\n\trouting: \"nest\",\n\tview: \"inertia\",\n\torm: \"drizzle\",\n\tdatabase: {\n\t\tdriver: \"bun-sqlite\",\n\t\turl: \"app.db\",\n\t},\n\tinertia: {\n\t\tfrontend: \"react\",\n\t\tssr: true,\n\t\tversion: \"1.0.0\",\n\t},\n\tpaths: {\n\t\tapp: \"app\",\n\t\tcontrollers: \"app/controllers\",\n\t\tservices: \"app/services\",\n\t\tmodules: \"app/modules\",\n\t\tmodels: \"app/models\",\n\t\tmigrations: \"app/database/migrations\",\n\t\tseeds: \"db/seeds\",\n\t\tmiddleware: \"app/middleware\",\n\t\tdto: \"app/dto\",\n\t},\n\tmoduleStyle: \"nest\",\n\tauth: undefined,\n\tqueue: undefined,\n};\n\nconst CONFIG_CANDIDATES = [\n\t\"nx.config.ts\",\n\t\"nx.config.js\",\n\t\"nx.config.mjs\",\n\t\".nxrc.json\",\n];\n\n/**\n * Load the project's nx.config file, falling back to defaults.\n * Merges with environment overrides.\n *\n * Missing / unloadable config files are not fatal — we log a debug\n * message and use defaults so the CLI works in fresh projects where\n * `nexusjs` hasn't been installed yet.\n */\nexport async function loadConfig(\n\tcwd: string = process.cwd(),\n): Promise<NxConfig> {\n\tlet config: Partial<NxConfig> = {};\n\tlet configSource = \"<defaults>\";\n\n\tfor (const candidate of CONFIG_CANDIDATES) {\n\t\tconst path = resolve(cwd, candidate);\n\t\tif (!existsSync(path)) continue;\n\n\t\ttry {\n\t\t\tif (candidate.endsWith(\".json\")) {\n\t\t\t\tconst raw = readFileSync(path, \"utf8\");\n\t\t\t\tconfig = JSON.parse(raw) as Partial<NxConfig>;\n\t\t\t} else {\n\t\t\t\t// Dynamic import — works under Bun and Node (tsx).\n\t\t\t\t// Some nx.config.ts files import from `nexusjs/cli` for\n\t\t\t\t// type-safety. When nexus isn't installed yet (e.g. in\n\t\t\t\t// a fresh project after `nx new`), swallow the import\n\t\t\t\t// failure and fall back to defaults.\n\t\t\t\ttry {\n\t\t\t\t\tconst mod: any = await import(path);\n\t\t\t\t\tconfig = (mod.default ?? mod) as Partial<NxConfig>;\n\t\t\t\t} catch (importErr: any) {\n\t\t\t\t\t// If the file imports from nexus and nexus isn't installed,\n\t\t\t\t\t// try to extract the config by evaluating the export with a\n\t\t\t\t\t// simple regex (last resort). For now, just log and fall back.\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`[nx] Could not dynamically import ${candidate}: ${importErr.message ?? importErr}. Falling back to defaults.`,\n\t\t\t\t\t);\n\t\t\t\t\tconfig = {};\n\t\t\t\t}\n\t\t\t}\n\t\t\tconfigSource = candidate;\n\t\t\tbreak;\n\t\t} catch (err: any) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to load ${candidate}: ${err.message ?? String(err)}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst merged = mergeWithEnv(DEFAULT_CONFIG, config);\n\n\t// Sanity-check enum values.\n\tassertEnum(\"routing\", merged.routing, [\n\t\t\"nest\",\n\t\t\"adonis\",\n\t\t\"functional\",\n\t\t\"mixed\",\n\t]);\n\tassertEnum(\"view\", merged.view, [\"rendu\", \"edge\", \"inertia\", \"none\"]);\n\tassertEnum(\"orm\", merged.orm, [\"drizzle\", \"prisma\", \"kysely\", \"none\"]);\n\tassertEnum(\"database.driver\", merged.database.driver, [\n\t\t\"bun-sqlite\",\n\t\t\"node-sqlite\",\n\t\t\"libsql\",\n\t\t\"postgres\",\n\t\t\"mysql\",\n\t\t\"none\",\n\t]);\n\tassertEnum(\"inertia.frontend\", merged.inertia.frontend, [\n\t\t\"react\",\n\t\t\"vue\",\n\t\t\"svelte\",\n\t\t\"solid\",\n\t]);\n\n\tif (process.env[\"NX_DEBUG\"] === \"1\") {\n\t\tconsole.log(`[nx] config source: ${configSource}`);\n\t}\n\n\treturn merged;\n}\n\n/**\n * Apply environment overrides on top of a config object.\n * Recognized env vars:\n * NX_ROUTING, NX_VIEW, NX_ORM, NX_DATABASE_DRIVER, NX_DATABASE_URL,\n * NX_INERTIA_FRONTEND, NX_INERTIA_SSR, NX_INERTIA_VERSION\n */\nfunction mergeWithEnv(base: NxConfig, override: Partial<NxConfig>): NxConfig {\n\tconst env = process.env;\n\tconst merged: NxConfig = {\n\t\t...base,\n\t\t...override,\n\t\tdatabase: { ...base.database, ...(override.database ?? {}) },\n\t\tinertia: { ...base.inertia, ...(override.inertia ?? {}) },\n\t\tpaths: { ...base.paths, ...(override.paths ?? {}) },\n\t};\n\n\tif (env[\"NX_ROUTING\"]) merged.routing = env[\"NX_ROUTING\"] as RoutingStyle;\n\tif (env[\"NX_VIEW\"]) merged.view = env[\"NX_VIEW\"] as ViewEngine;\n\tif (env[\"NX_ORM\"]) merged.orm = env[\"NX_ORM\"] as OrmDriver;\n\tif (env[\"NX_DATABASE_DRIVER\"])\n\t\tmerged.database.driver = env[\"NX_DATABASE_DRIVER\"] as DatabaseDriver;\n\tif (env[\"NX_DATABASE_URL\"]) merged.database.url = env[\"NX_DATABASE_URL\"]!;\n\tif (env[\"NX_INERTIA_FRONTEND\"])\n\t\tmerged.inertia.frontend = env[\"NX_INERTIA_FRONTEND\"] as InertiaFrontend;\n\tif (env[\"NX_INERTIA_SSR\"])\n\t\tmerged.inertia.ssr =\n\t\t\tenv[\"NX_INERTIA_SSR\"] !== \"false\" && env[\"NX_INERTIA_SSR\"] !== \"0\";\n\tif (env[\"NX_INERTIA_VERSION\"])\n\t\tmerged.inertia.version = env[\"NX_INERTIA_VERSION\"]!;\n\n\treturn merged;\n}\n\nfunction assertEnum<K extends string>(\n\tkey: string,\n\tvalue: string,\n\tallowed: readonly K[],\n): asserts value is K {\n\tif (!allowed.includes(value as K)) {\n\t\tthrow new Error(\n\t\t\t`Invalid value for ${key}: \"${value}\". Allowed: ${allowed.join(\", \")}.`,\n\t\t);\n\t}\n}\n",
38
+ "/**\n * Filesystem helpers for the CLI.\n */\n\nimport {\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, relative, resolve } from \"node:path\";\n\nexport interface WriteOptions {\n\t/** Skip writing if the file exists. Default `false` (overwrite OK). */\n\tskipIfExists?: boolean;\n\t/** Make the path absolute relative to this directory. Default cwd. */\n\tbase?: string;\n}\n\n/**\n * Write a file, creating parent directories as needed.\n * Throws if `skipIfExists` is `true` and the file already exists.\n */\nexport function writeFile(\n\tpath: string,\n\tcontents: string,\n\topts: WriteOptions = {},\n): boolean {\n\tconst base = opts.base ?? process.cwd();\n\tconst target = isAbsolute(path) ? path : resolve(base, path);\n\n\tif (opts.skipIfExists && existsSync(target)) {\n\t\treturn false;\n\t}\n\n\tmkdirSync(dirname(target), { recursive: true });\n\twriteFileSync(target, contents);\n\treturn true;\n}\n\n/**\n * Read a file, or return `undefined` if missing.\n */\nexport function readFile(path: string): string | undefined {\n\tif (!existsSync(path)) return undefined;\n\treturn readFileSync(path, \"utf8\");\n}\n\n/** True if a file exists at the given path. */\nexport function fileExists(path: string): boolean {\n\treturn existsSync(path);\n}\n\n/** True if a directory exists at the given path. */\nexport function directoryExists(path: string): boolean {\n\ttry {\n\t\treturn existsSync(path) && statSync(path).isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/** Compute a project-relative path. */\nexport function relativePath(from: string, to: string): string {\n\tconst r = relative(from, to);\n\treturn r.startsWith(\".\") ? r : `./${r}`;\n}\n\n/**\n * Convert a name like \"User\", \"user\", \"users\", \"user_profile\" into a\n * consistent set of variants used by templates.\n */\nexport function nameVariants(input: string) {\n\tconst trimmed = input.replace(/\\.(ts|js|tsx|jsx)$/, \"\");\n\n\t// PascalCase.\n\tconst pascal =\n\t\ttrimmed\n\t\t\t.split(/[\\s_-]+/)\n\t\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n\t\t\t.filter(Boolean)\n\t\t\t.join(\"\") || input;\n\n\t// camelCase.\n\tconst camel = pascal.charAt(0).toLowerCase() + pascal.slice(1);\n\n\t// snake_case.\n\tconst snake = pascal\n\t\t.split(/(?=[A-Z])/)\n\t\t.map((w) => w.toLowerCase())\n\t\t.filter(Boolean)\n\t\t.join(\"_\");\n\n\t// kebab-case.\n\tconst kebab = snake.replace(/_/g, \"-\");\n\n\treturn {\n\t\tpascal,\n\t\tcamel,\n\t\tsnake,\n\t\tkebab,\n\t\tplural: pluralize(pascal),\n\t\tpluralSnake: pluralize(snake),\n\t\tpluralKebab: pluralize(kebab),\n\t};\n}\n\n/** English pluralization (matches `core/template.ts`). */\nfunction pluralize(s: string): string {\n\tif (!s) return s;\n\tif (/(s|x|z|ch|sh)$/i.test(s)) return `${s}es`;\n\tif (/[^aeiou]y$/i.test(s)) return `${s.slice(0, -1)}ies`;\n\tif (/y$/i.test(s)) return `${s}s`;\n\treturn `${s}s`;\n}\n",
39
+ "/**\n * Colored logger for the `nx` CLI.\n *\n * Mirrors the look-and-feel of Adonis ACE / Rails:\n * - info → cyan\n * - success → green\n * - warn → yellow\n * - error → red\n * - debug → dim gray\n *\n * Honors the `NO_COLOR` env var and disables color when stdout is not a\n * TTY (so logs piped into a file don't contain escape codes).\n */\n\nconst USE_COLOR =\n\tprocess.env[\"NO_COLOR\"] === undefined &&\n\tprocess.env[\"FORCE_COLOR\"] !== \"0\" &&\n\tprocess.stdout.isTTY === true;\n\nconst wrap = (open: number, close: number) => (s: string) =>\n\tUSE_COLOR ? `\\x1b[${open}m${s}\\x1b[${close}m` : s;\n\nconst c = {\n\treset: wrap(0, 0),\n\tbold: wrap(1, 22),\n\tdim: wrap(2, 22),\n\tred: wrap(31, 39),\n\tgreen: wrap(32, 39),\n\tyellow: wrap(33, 39),\n\tblue: wrap(34, 39),\n\tmagenta: wrap(35, 39),\n\tcyan: wrap(36, 39),\n\tgray: wrap(90, 39),\n};\n\nconst PREFIXES = {\n\tinfo: `${c.cyan(\"ℹ\")}`,\n\tsuccess: `${c.green(\"✔\")}`,\n\twarn: `${c.yellow(\"⚠\")}`,\n\terror: `${c.red(\"✖\")}`,\n\tdebug: `${c.gray(\"·\")}`,\n\tfinger: `${c.magenta(\"➜\")}`,\n};\n\nexport type LoggerLevel = \"info\" | \"success\" | \"warn\" | \"error\" | \"debug\";\n\nexport class Logger {\n\tprivate verbose = false;\n\n\tsetVerbose(v: boolean) {\n\t\tthis.verbose = v;\n\t}\n\n\tinfo(message: string) {\n\t\tconsole.log(`${PREFIXES.info} ${message}`);\n\t}\n\n\tsuccess(message: string) {\n\t\tconsole.log(`${PREFIXES.success} ${message}`);\n\t}\n\n\twarn(message: string) {\n\t\tconsole.warn(`${PREFIXES.warn} ${c.yellow(message)}`);\n\t}\n\n\terror(message: string) {\n\t\tconsole.error(`${PREFIXES.error} ${c.red(message)}`);\n\t}\n\n\tdebug(message: string) {\n\t\tif (!this.verbose) return;\n\t\tconsole.log(`${PREFIXES.debug} ${c.gray(message)}`);\n\t}\n\n\tfinger(message: string) {\n\t\tconsole.log(`${PREFIXES.finger} ${c.magenta(message)}`);\n\t}\n\n\t/**\n\t * Render a small table. `rows` is an array of `[label, value]`\n\t * tuples; the label column is dimmed.\n\t */\n\ttable(rows: Array<[string, string]>) {\n\t\tconst labelWidth = Math.max(...rows.map(([l]) => l.length));\n\t\tfor (const [label, value] of rows) {\n\t\t\tconst padded = label.padEnd(labelWidth);\n\t\t\tconsole.log(` ${c.dim(padded)} ${value}`);\n\t\t}\n\t}\n\n\theading(text: string) {\n\t\tconst bar = \"─\".repeat(text.length + 4);\n\t\tconsole.log(`\\n${c.bold(c.cyan(bar))}`);\n\t\tconsole.log(`${c.bold(c.cyan(` ${text} `))}`);\n\t\tconsole.log(`${c.bold(c.cyan(bar))}\\n`);\n\t}\n\n\tblank() {\n\t\tconsole.log(\"\");\n\t}\n}\n\nexport const logger = new Logger();\n\n/** ANSI helpers (exported for templates that want colored output). */\nexport const colors = c;\n",
40
+ "/**\n * Lightweight interactive prompts.\n *\n * Avoids a runtime dependency on a TTY prompt library — we only need\n * confirm / select / text prompts, all of which can be done with\n * `readline` and a fallback to defaults when stdin is not a TTY.\n *\n * Every prompt can be skipped with `--no-interaction` or by passing the\n * answer via flags. This mirrors Adonis ACE and Symfony Console.\n */\n\nimport { createInterface } from \"node:readline\";\n\nexport interface PromptOptions {\n\t/** Default value when the user just presses enter. */\n\tdefault?: string;\n\t/** Choices for select. The first one is the default. */\n\tchoices?: string[];\n\t/** When false, stdin must be a TTY — otherwise the default is used. */\n\tinteractive?: boolean;\n}\n\nexport async function prompt(\n\tmessage: string,\n\toptions: PromptOptions = {},\n): Promise<string> {\n\tconst interactive = options.interactive ?? true;\n\tconst fallback = options.default ?? options.choices?.[0];\n\n\tif (!interactive || !process.stdin.isTTY) {\n\t\tif (fallback === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`No default provided for non-interactive prompt: ${message}`,\n\t\t\t);\n\t\t}\n\t\treturn fallback;\n\t}\n\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\treturn new Promise((resolve) => {\n\t\tconst suffix = options.choices ? ` [${options.choices.join(\"/\")}]` : \"\";\n\t\tconst def = options.default ?? options.choices?.[0] ?? \"\";\n\t\tconst promptStr = ` ${message}${suffix} (${def}): `;\n\t\trl.question(promptStr, (answer) => {\n\t\t\trl.close();\n\t\t\tconst trimmed = answer.trim();\n\t\t\tresolve(trimmed === \"\" ? def : trimmed);\n\t\t});\n\t});\n}\n\nexport async function confirm(\n\tmessage: string,\n\tdefaultYes = false,\n\toptions: PromptOptions = {},\n): Promise<boolean> {\n\tconst interactive = options.interactive ?? true;\n\tif (!interactive || !process.stdin.isTTY) return defaultYes;\n\n\tconst rl = createInterface({ input: process.stdin, output: process.stdout });\n\treturn new Promise((resolve) => {\n\t\tconst suffix = defaultYes ? \" [Y/n]\" : \" [y/N]\";\n\t\trl.question(` ${message}${suffix}: `, (answer) => {\n\t\t\trl.close();\n\t\t\tconst v = answer.trim().toLowerCase();\n\t\t\tif (v === \"\") resolve(defaultYes);\n\t\t\telse resolve(v === \"y\" || v === \"yes\");\n\t\t});\n\t});\n}\n\nexport async function select(\n\tmessage: string,\n\tchoices: string[],\n\toptions: PromptOptions = {},\n): Promise<string> {\n\treturn prompt(message, { ...options, choices });\n}\n",
41
+ "/**\n * Minimal template engine for code generation.\n *\n * Supports:\n * - `{{ key }}` substitution\n * - `{{ key | filter }}` filters (upper/lower/pascal/camel/snake/kebab/plural/singular)\n * - `{{# flag }} ... {{/ flag }}` truthy sections (include if `flag` is truthy)\n * - `{{^ flag }} ... {{/ flag }}` falsy sections (include if `flag` is falsy)\n * - dotted lookup (`{{ user.name }}`)\n *\n * Multi-line templates are fine; placeholders can span any whitespace.\n */\n\nexport type Filter =\n\t| \"raw\"\n\t| \"upper\"\n\t| \"lower\"\n\t| \"pascal\"\n\t| \"camel\"\n\t| \"snake\"\n\t| \"kebab\"\n\t| \"plural\"\n\t| \"singular\";\n\nexport interface RenderObject {\n\t[key: string]: RenderValue;\n}\nexport type RenderValue =\n\t| string\n\t| number\n\t| boolean\n\t| undefined\n\t| null\n\t| RenderObject\n\t| RenderValue[];\nexport type RenderContext = RenderObject;\n\nconst VAR_RE = /\\{\\{\\s*([\\w.]+)(?:\\s*\\|\\s*(\\w+))?\\s*\\}\\}/;\nconst SECTION_RE =\n\t/\\{\\{\\s*([#^])\\s*([\\w.]+)\\s*\\}\\}([\\s\\S]*?)\\{\\{\\s*\\/\\s*\\2\\s*\\}\\}/g;\n\nexport function render(template: string, context: RenderContext): string {\n\t// 1. Expand sections (truthy / falsy).\n\tlet out = template.replace(\n\t\tSECTION_RE,\n\t\t(_, kind: \"#\" | \"^\", key: string, body: string) => {\n\t\t\tconst v = lookup(context, key);\n\t\t\tconst truthy = isTruthy(v);\n\t\t\tif (kind === \"#\") return truthy ? body : \"\";\n\t\t\treturn truthy ? \"\" : body;\n\t\t},\n\t);\n\n\t// 2. Substitute variables (repeatedly, in case substitutions introduce\n\t// more variables — unusual but safe).\n\tlet prev: string;\n\tdo {\n\t\tprev = out;\n\t\tout = out.replace(VAR_RE, (_, key: string, filter?: string) => {\n\t\t\tconst v = lookup(context, key);\n\t\t\treturn applyFilter(\n\t\t\t\tv === undefined || v === null ? \"\" : String(v),\n\t\t\t\tfilter,\n\t\t\t);\n\t\t});\n\t} while (out !== prev);\n\n\treturn out;\n}\n\nfunction lookup(ctx: RenderContext, dotted: string): RenderValue {\n\tif (dotted in ctx) return ctx[dotted] as RenderValue;\n\tconst parts = dotted.split(\".\");\n\tlet cur: any = ctx;\n\tfor (const p of parts) {\n\t\tif (cur == null || typeof cur !== \"object\") return undefined;\n\t\tcur = cur[p];\n\t}\n\treturn cur === undefined || cur === null ? undefined : cur;\n}\n\nfunction isTruthy(v: RenderValue): boolean {\n\tif (v === undefined || v === null) return false;\n\tif (typeof v === \"string\") return v.length > 0 && v !== \"false\" && v !== \"0\";\n\tif (typeof v === \"number\") return v !== 0;\n\tif (typeof v === \"boolean\") return v;\n\t// Object → truthy if it has any keys.\n\tif (Array.isArray(v)) return v.length > 0;\n\treturn Object.keys(v).length > 0;\n}\n\nfunction applyFilter(value: string, filter: string | undefined): string {\n\tswitch (filter as Filter | undefined) {\n\t\tcase undefined:\n\t\tcase \"raw\":\n\t\t\treturn value;\n\t\tcase \"upper\":\n\t\t\treturn value.toUpperCase();\n\t\tcase \"lower\":\n\t\t\treturn value.toLowerCase();\n\t\tcase \"pascal\":\n\t\t\treturn toPascal(value);\n\t\tcase \"camel\":\n\t\t\treturn toCamel(value);\n\t\tcase \"snake\":\n\t\t\treturn toSnake(value);\n\t\tcase \"kebab\":\n\t\t\treturn toKebab(value);\n\t\tcase \"plural\":\n\t\t\treturn pluralize(value);\n\t\tcase \"singular\":\n\t\t\treturn singularize(value);\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown template filter: ${filter}`);\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Case-conversion helpers\n// ---------------------------------------------------------------------------\n\nfunction splitWords(s: string): string[] {\n\treturn s\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n\t\t.split(/[\\s_-]+/)\n\t\t.filter(Boolean);\n}\n\nexport function toPascal(s: string): string {\n\treturn splitWords(s)\n\t\t.map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n\t\t.join(\"\");\n}\n\nexport function toCamel(s: string): string {\n\tconst p = toPascal(s);\n\treturn p.charAt(0).toLowerCase() + p.slice(1);\n}\n\nexport function toSnake(s: string): string {\n\treturn splitWords(s)\n\t\t.map((w) => w.toLowerCase())\n\t\t.join(\"_\");\n}\n\nexport function toKebab(s: string): string {\n\treturn splitWords(s)\n\t\t.map((w) => w.toLowerCase())\n\t\t.join(\"-\");\n}\n\n// ---------------------------------------------------------------------------\n// Pluralization (English-only; matches Adonis/Rails conventions)\n// ---------------------------------------------------------------------------\n\nexport function pluralize(s: string): string {\n\tif (!s) return s;\n\tif (/(s|x|z|ch|sh)$/i.test(s)) return `${s}es`;\n\tif (/[^aeiou]y$/i.test(s)) return `${s.slice(0, -1)}ies`;\n\tif (/y$/i.test(s)) return `${s}s`;\n\treturn `${s}s`;\n}\n\nexport function singularize(s: string): string {\n\tif (!s) return s;\n\tif (/(ses|xes|zes|ches|shes)$/i.test(s)) return s.slice(0, -2);\n\tif (/ies$/i.test(s)) return `${s.slice(0, -3)}y`;\n\tif (/s$/i.test(s) && s.length > 1) return s.slice(0, -1);\n\treturn s;\n}\n",
42
+ "/**\n * `nx init [dir]` — scaffold NexusJS into the current (or target) directory.\n *\n * Unlike `nx new <name>` — which requires a fresh, empty directory —\n * `nx init` is non-destructive: it skips files that already exist,\n * preserves the user's existing `package.json` (only adding the\n * `nexusjs` dependency if missing), and merges its `tsconfig.json`\n * additions into the user's existing config.\n *\n * The matching pattern from other ecosystems:\n * - `bun init` / `npm init` → init in the current directory\n * - `cargo init` → init in the current directory\n * - `nx new <name>` → create a fresh project in a new dir\n *\n * Typical use case: the user already ran `bun init` (or has an\n * existing app) and now wants to add NexusJS to it without losing\n * their existing setup.\n *\n * $ bun init\n * $ bun add nexusjs\n * $ nx init\n * $ bun run dev\n *\n * Flags:\n * --target <dir> Scaffold into <dir> instead of the cwd\n * --style <name> Routing style (nest|adonis|functional)\n\t* --view <name> View engine (rendu|edge|eta|inertia|none)\n * --orm <name> ORM driver (drizzle|prisma|kysely|none)\n * --db <name> Database driver (bun-sqlite|node-sqlite|libsql|postgres|mysql|none)\n * --frontend <name> Inertia frontend (react|vue|svelte|solid)\n * --no-ssr Disable Inertia SSR\n * --force Overwrite existing files\n * --no-interaction Disable interactive prompts\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { flagBool, logger, render, select } from \"../core/index.js\";\nimport { parseJsonLoose } from \"../core/loose-json.js\";\nimport { templates } from \"../templates/index.js\";\n\ntype WriteMode = \"write\" | \"skip\" | \"merge-pkg\" | \"merge-tsconfig\";\n\ninterface PlanEntry {\n\tpath: string;\n\tmode: WriteMode;\n}\n\nexport const initCommand: Command = {\n\tname: \"init\",\n\taliases: [\"i\"],\n\tsummary: \"Initialize nx.config.ts + app scaffold in the current directory\",\n\tdescription:\n\t\t\"Non-destructive scaffold: adds nx.config.ts, app/*, and merges NexusJS into the existing package.json and tsconfig.json. Skips files that already exist (unless --force).\",\n\texamples: [\n\t\t\"nx init\",\n\t\t\"nx init ./my-existing-app\",\n\t\t\"nx init --style nest --view inertia --orm drizzle --db bun-sqlite\",\n\t\t\"nx init --force\",\n\t],\n\tflags: [\n\t\t{ name: \"target\", description: \"Target directory (default: cwd)\" },\n\t\t{\n\t\t\tname: \"style\",\n\t\t\tdescription: \"Routing style (nest|adonis|functional|mixed)\",\n\t\t},\n\t\t{ name: \"view\", description: \"View engine (rendu|edge|eta|inertia|none)\" },\n\t\t{ name: \"orm\", description: \"ORM driver (drizzle|prisma|kysely|none)\" },\n\t\t{\n\t\t\tname: \"db\",\n\t\t\tdescription:\n\t\t\t\t\"Database driver (bun-sqlite|node-sqlite|libsql|postgres|mysql|none)\",\n\t\t},\n\t\t{\n\t\t\tname: \"frontend\",\n\t\t\tdescription: \"Inertia frontend (react|vue|svelte|solid)\",\n\t\t},\n\t\t{ name: \"no-ssr\", description: \"Disable Inertia SSR\" },\n\t\t{ name: \"force\", description: \"Overwrite files that already exist\" },\n\t\t{ name: \"no-interaction\", description: \"Disable interactive prompts\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst interactive = !flagBool(ctx.flags, \"no-interaction\", false);\n\t\tconst force = flagBool(ctx.flags, \"force\", false);\n\t\tconst target = resolve(\n\t\t\tctx.cwd,\n\t\t\t(ctx.flags[\"target\"] as string | undefined) ?? \".\",\n\t\t);\n\n\t\tif (!existsSync(target)) {\n\t\t\tlogger.error(`Target directory does not exist: ${target}`);\n\t\t\tlogger.info(\n\t\t\t\t`Run \\`nx new <name>\\` to create a fresh project, or \\`mkdir -p ${target}\\` first.`,\n\t\t\t);\n\t\t\treturn 1;\n\t\t}\n\n\t\t// Interactive prompts (only if not provided via flags and interactive mode)\n\t\tconst routing =\n\t\t\t(ctx.flags[\"style\"] as string | undefined) ??\n\t\t\t(await select(\"Routing style\", [\"nest\", \"adonis\", \"functional\"], {\n\t\t\t\tinteractive,\n\t\t\t\tdefault: \"nest\",\n\t\t\t}));\n\t\tconst view =\n\t\t\t(ctx.flags[\"view\"] as string | undefined) ??\n\t\t\t(await select(\"View engine\", [\"rendu\", \"edge\", \"eta\", \"inertia\", \"none\"], {\n\t\t\t\tinteractive,\n\t\t\t\tdefault: \"rendu\",\n\t\t\t}));\n\t\tconst orm =\n\t\t\t(ctx.flags[\"orm\"] as string | undefined) ??\n\t\t\t(await select(\"ORM driver\", [\"drizzle\", \"prisma\", \"kysely\", \"none\"], {\n\t\t\t\tinteractive,\n\t\t\t\tdefault: \"drizzle\",\n\t\t\t}));\n\t\tconst db =\n\t\t\t(ctx.flags[\"db\"] as string | undefined) ??\n\t\t\t(await select(\n\t\t\t\t\"Database driver\",\n\t\t\t\t[\"bun-sqlite\", \"node-sqlite\", \"libsql\", \"postgres\", \"mysql\", \"none\"],\n\t\t\t\t{\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: \"bun-sqlite\",\n\t\t\t\t},\n\t\t\t));\n\t\tconst frontend =\n\t\t\t(ctx.flags[\"frontend\"] as string | undefined) ??\n\t\t\t(await select(\"Inertia frontend\", [\"react\", \"vue\", \"svelte\", \"solid\"], {\n\t\t\t\tinteractive,\n\t\t\t\tdefault: \"react\",\n\t\t\t}));\n\t\tconst ssr = !flagBool(ctx.flags, \"no-ssr\", false);\n\n\t\t// Build the plan: which files to write / skip / merge\n\t\tconst plan: PlanEntry[] = [\n\t\t\t{ path: \"nx.config.ts\", mode: \"write\" },\n\t\t\t{ path: \"package.json\", mode: \"merge-pkg\" },\n\t\t\t{ path: \"tsconfig.json\", mode: \"merge-tsconfig\" },\n\t\t\t{ path: \"public/.gitkeep\", mode: \"write\" },\n\t\t\t{ path: \"resources/views/welcome.html\", mode: \"write\" },\n\t\t\t{ path: \".env\", mode: \"skip\" },\n\t\t\t{ path: \".env.local\", mode: \"skip\" },\n\t\t\t{ path: \".gitignore\", mode: \"skip\" },\n\t\t\t{ path: \"app/main.ts\", mode: \"write\" },\n\t\t\t{ path: \"app/app.module.ts\", mode: \"write\" },\n\t\t\t{ path: \"app/controllers/home.controller.ts\", mode: \"write\" },\n\t\t\t{ path: \"README.md\", mode: \"write\" },\n\t\t];\n\n\t\tconst created: string[] = [];\n\t\tconst skipped: string[] = [];\n\t\tconst merged: string[] = [];\n\n\t\t// Ensure directories exist\n\t\tmkdirSync(resolve(target, \"app/controllers\"), { recursive: true });\n\t\tmkdirSync(resolve(target, \"public\"), { recursive: true });\n\t\tmkdirSync(resolve(target, \"resources/views\"), { recursive: true });\n\n\t\tfor (const entry of plan) {\n\t\t\tconst abs = resolve(target, entry.path);\n\t\t\tconst exists = existsSync(abs);\n\n\t\t\tif (entry.mode === \"merge-pkg\") {\n\t\t\t\t// Always merge: never clobber an existing package.json.\n\t\t\t\t// If missing, create a minimal one.\n\t\t\t\tif (exists) {\n\t\t\t\t\tmergePackageJson(abs, {\n\t\t\t\t\t\tnexusjs: \"*\",\n\t\t\t\t\t\t\"reflect-metadata\": \"^0.2.2\",\n\t\t\t\t\t\thono: \"^4.6.0\",\n\t\t\t\t\t\tzod: \"^3.23.8\",\n\t\t\t\t\t});\n\t\t\t\t\tmerged.push(entry.path);\n\t\t\t\t} else {\n\t\t\t\t\twriteFileSync(\n\t\t\t\t\t\tabs,\n\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: target.split(\"/\").pop() ?? \"nexus-app\",\n\t\t\t\t\t\t\t\tversion: \"0.1.0\",\n\t\t\t\t\t\t\t\ttype: \"module\",\n\t\t\t\t\t\t\t\tprivate: true,\n\t\t\t\t\t\t\t\tscripts: {\n\t\t\t\t\t\t\t\t\tdev: \"bun --hot app/main.ts\",\n\t\t\t\t\t\t\t\t\tbuild: \"bun run build.ts\",\n\t\t\t\t\t\t\t\t\tstart: \"bun app/main.ts\",\n\t\t\t\t\t\t\t\t\ttest: \"vitest\",\n\t\t\t\t\t\t\t\t\tnx: \"nx\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdependencies: {\n\t\t\t\t\t\t\t\t\tnexusjs: \"*\",\n\t\t\t\t\t\t\t\t\t\"reflect-metadata\": \"^0.2.2\",\n\t\t\t\t\t\t\t\t\thono: \"^4.6.0\",\n\t\t\t\t\t\t\t\t\tzod: \"^3.23.8\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t2,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tcreated.push(entry.path);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (entry.mode === \"merge-tsconfig\") {\n\t\t\t\t// Always merge: never clobber an existing tsconfig.json.\n\t\t\t\tif (exists) {\n\t\t\t\t\tmergeTsconfig(abs, {\n\t\t\t\t\t\texperimentalDecorators: true,\n\t\t\t\t\t\temitDecoratorMetadata: true,\n\t\t\t\t\t});\n\t\t\t\t\tmerged.push(entry.path);\n\t\t\t\t} else {\n\t\t\t\t\twriteFileSync(abs, defaultTsconfig());\n\t\t\t\t\tcreated.push(entry.path);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Plain write mode\n\t\t\tif (exists && !force) {\n\t\t\t\tskipped.push(entry.path);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst content = renderContent(entry.path, {\n\t\t\t\trouting,\n\t\t\t\tview,\n\t\t\t\tviewPaths: view === \"none\" ? \"\" : \"resources/views\",\n\t\t\t\torm,\n\t\t\t\tdbDriver: db,\n\t\t\t\tdbUrl: db === \"bun-sqlite\" || db === \"node-sqlite\" ? \"app.db\" : \"\",\n\t\t\t\tinertiaFrontend: frontend,\n\t\t\t\tinertiaSSR: ssr,\n\t\t\t\tinertiaVersion: \"1.0.0\",\n\t\t\t\ttargetName: target.split(\"/\").pop() ?? \"nexus-app\",\n\t\t\t});\n\t\t\twriteFileSync(abs, content);\n\t\t\tcreated.push(entry.path);\n\t\t}\n\n\t\t// Report\n\t\tlogger.success(`initialized NexusJS in ${target}`);\n\t\tlogger.blank();\n\t\tif (created.length) {\n\t\t\tlogger.heading(\"Created\");\n\t\t\tfor (const f of created) logger.info(` + ${f}`);\n\t\t}\n\t\tif (merged.length) {\n\t\t\tlogger.heading(\"Merged into existing files\");\n\t\t\tfor (const f of merged) logger.info(` ~ ${f}`);\n\t\t}\n\t\tif (skipped.length) {\n\t\t\tlogger.heading(\"Skipped (already exist; use --force to overwrite)\");\n\t\t\tfor (const f of skipped) logger.info(` - ${f}`);\n\t\t}\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(` cd ${target === ctx.cwd ? \".\" : target}`);\n\t\tlogger.info(` bun install`);\n\t\tlogger.info(` bun run dev`);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\ninterface RenderCtx {\n\trouting: string;\n\tview: string;\n\tviewPaths: string;\n\torm: string;\n\tdbDriver: string;\n\tdbUrl: string;\n\tinertiaFrontend: string;\n\tinertiaSSR: boolean;\n\tinertiaVersion: string;\n\ttargetName: string;\n\t// Index signature so RenderCtx is assignable to RenderObject.\n\t[key: string]: string | number | boolean | undefined | null;\n}\n\nfunction renderContent(path: string, ctx: RenderCtx): string {\n\tswitch (path) {\n\t\tcase \"nx.config.ts\":\n\t\t\treturn render(templates.project[\"nx.config.ts\"], ctx);\n\t\tcase \"public/.gitkeep\":\n\t\t\treturn \"\";\n\t\tcase \"resources/views/welcome.html\":\n\t\t\treturn `<h1>Welcome to ${ctx.targetName}</h1>\\n<p>This is a sample Rendu template.</p>\\n<p>Founded <?= year ?>.</p>\\n`;\n\t\tcase \".gitignore\":\n\t\t\treturn `# NexusJS\nnode_modules/\napp.db\n*.db\n.env.local\ndist/\n`;\n\t\tcase \".env\":\n\t\t\treturn `# ──────────────────────────────────────────────────────\n# NexusJS — Environment Variables (committed to git)\n#\n# Shared defaults for all environments. Override locally via\n# .env.local (gitignored) or by environment via .env.{NODE_ENV}\n# (e.g. .env.production, .env.development).\n#\n# Uncomment the database config for your driver:\n# ──────────────────────────────────────────────────────\n\n# ── App ──\nNODE_ENV=development\nPORT=3000\n\n# ── Session secret (REQUIRED) ──\n# Generate with: openssl rand -base64 32\nSESSION_SECRET=change-me-in-production\n\n# ── Database: SQLite (default, zero config) ──\nDATABASE_URL=app.db\n\n# ── Database: PostgreSQL ──\n# DATABASE_URL=postgres://user:password@localhost:5432/myapp\n\n# ── Database: MySQL ──\n# DATABASE_URL=mysql://user:password@localhost:3306/myapp\n\n# ── Better Auth (if using nexusjs/auth) ──\n# BETTER_AUTH_SECRET=\n# BETTER_AUTH_URL=http://localhost:3000\n`;\n\t\tcase \".env.local\":\n\t\t\treturn `# ──────────────────────────────────────────────────────\n# NexusJS — Local Overrides (DO NOT COMMIT to git)\n#\n# This file is gitignored. Use it for secrets and local\n# configuration that should never be checked in.\n# ──────────────────────────────────────────────────────\n\n# Override any value from .env here:\n# DATABASE_URL=postgres://user:password@localhost:5432/myapp\n# SESSION_SECRET=my-local-secret\n`;\n\t\tcase \"app/main.ts\":\n\t\t\treturn `import 'reflect-metadata';\nimport { Application } from 'nexusjs';\nimport { StaticModule } from 'nexusjs/static';\nimport { AppModule } from './app.module.js';\n\nconst app = new Application(AppModule);\n// Serve ./public files under /static/*\napp.server.app.use('/static/*', StaticModule.mount({ root: './public', prefix: '/static' }));\n\nconst port = Number(process.env[\"PORT\"] ?? 3000);\nawait app.listen(port);\nconsole.log(\"[nexusjs] Listening on http://localhost:\" + port);\n`;\n\t\tcase \"app/app.module.ts\":\n\t\t\treturn `import { Module } from 'nexusjs';\nimport { HomeController } from './controllers/home.controller.js';\n\n@Module({\n imports: [],\n controllers: [HomeController],\n})\nexport class AppModule {}\n`;\n\t\tcase \"app/controllers/home.controller.ts\":\n\t\t\treturn `import { Controller, Get } from 'nexusjs';\n\n@Controller('/')\nexport class HomeController {\n @Get('/')\n index() {\n return {\n view: 'welcome.html',\n data: { year: new Date().getFullYear() },\n };\n }\n}\n`;\n\t\tcase \"README.md\":\n\t\t\treturn `# ${ctx.targetName}\n\nA Nexus project.\n\n## Run\n\n\\`\\`\\`bash\nbun install\nbun run dev\n\\`\\`\\`\n\n## Scaffolding\n\n\\`\\`\\`bash\nbunx nx make:crud Post\n\\`\\`\\`\n`;\n\t\tdefault:\n\t\t\tthrow new Error(`No render template for: ${path}`);\n\t}\n}\n\nfunction defaultTsconfig(): string {\n\treturn `{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"ESNext\",\n \"moduleResolution\": \"bundler\",\n \"experimentalDecorators\": true,\n \"emitDecoratorMetadata\": true,\n \"strict\": true,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"types\": [\"bun-types\"]\n },\n \"include\": [\"app/**/*.ts\", \"nx.config.ts\"]\n}\n`;\n}\n\n/**\n * Merge NexusJS fields into an existing package.json. Preserves all\n * existing fields; only adds what's missing.\n */\nfunction mergePackageJson(path: string, additions: Record<string, string>): void {\n\tconst raw = readFileSync(path, \"utf8\");\n\tconst pkg = parseJsonLoose<Record<string, unknown>>(raw);\n\tlet changed = false;\n\n\t// Ensure type: \"module\"\n\tif (!pkg[\"type\"]) {\n\t\tpkg[\"type\"] = \"module\";\n\t\tchanged = true;\n\t}\n\n\t// Ensure private: true\n\tif (!pkg[\"private\"]) {\n\t\tpkg[\"private\"] = true;\n\t\tchanged = true;\n\t}\n\n\t// Merge scripts (only add missing ones, never overwrite)\n\tconst SCRIPTS: Record<string, string> = {\n\t\tdev: \"bun --hot app/main.ts\",\n\t\tbuild: \"bun run build.ts\",\n\t\tstart: \"bun app/main.ts\",\n\t\ttest: \"vitest\",\n\t\tnx: \"nx\",\n\t};\n\tconst existingScripts = (pkg[\"scripts\"] as Record<string, string> | undefined) ?? {};\n\tfor (const [k, v] of Object.entries(SCRIPTS)) {\n\t\tif (!(k in existingScripts)) {\n\t\t\texistingScripts[k] = v;\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif (Object.keys(existingScripts).length > 0) {\n\t\tpkg[\"scripts\"] = existingScripts;\n\t}\n\n\t// Merge dependencies\n\tconst deps = (pkg[\"dependencies\"] as Record<string, string> | undefined) ?? {};\n\tfor (const [k, v] of Object.entries(additions)) {\n\t\tif (!(k in deps)) {\n\t\t\tdeps[k] = v;\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tpkg[\"dependencies\"] = deps;\n\n\tif (changed) {\n\t\twriteFileSync(path, JSON.stringify(pkg, null, 2) + \"\\n\");\n\t}\n}\n\n/**\n * Merge NexusJS compiler options into an existing tsconfig.json.\n * Preserves all existing fields; only adds what's missing.\n */\nfunction mergeTsconfig(\n\tpath: string,\n\tadditions: Record<string, boolean | string>,\n): void {\n\tconst raw = readFileSync(path, \"utf8\");\n\tconst cfg = parseJsonLoose<{\n\t\tcompilerOptions?: Record<string, unknown>;\n\t\tinclude?: string[];\n\t}>(raw);\n\tconst co = (cfg.compilerOptions ?? {}) as Record<string, unknown>;\n\tlet changed = false;\n\tfor (const [k, v] of Object.entries(additions)) {\n\t\tif (!(k in co)) {\n\t\t\tco[k] = v;\n\t\t\tchanged = true;\n\t\t}\n\t}\n\t// Also ensure src/**/*.ts and nx.config.ts are in `include`\n\tconst inc = (cfg.include ?? []) as string[];\n\tif (!inc.includes(\"app/**/*.ts\")) {\n\t\tinc.push(\"app/**/*.ts\");\n\t\tchanged = true;\n\t}\n\tif (!inc.includes(\"nx.config.ts\")) {\n\t\tinc.push(\"nx.config.ts\");\n\t\tchanged = true;\n\t}\n\tif (changed) {\n\t\tcfg.compilerOptions = co;\n\t\tcfg.include = inc;\n\t\twriteFileSync(path, JSON.stringify(cfg, null, 2) + \"\\n\");\n\t}\n}\n\nexport default initCommand;\n",
43
+ "/**\n * Lenient JSON parser.\n *\n * Standard `JSON.parse` rejects three things that show up regularly\n * in hand-edited `package.json` / `tsconfig.json` files:\n *\n * 1. Line comments: `// like this`\n * 2. Block comments: `/* like this *\\/`\n * 3. Trailing commas: `\\{ \"a\": 1, \\}` or `[ 1, 2, ]`\n *\n * `bun init` and several other generators emit files with at least\n * some of these (the user's `package.json` had `//` comments and\n * tripped the CLI with `Unrecognized token '/'`).\n *\n * Bun has full JSON5 support built in (`Bun.JSON5.parse()`,\n * `Bun.JSON5.stringify()` — see\n * https://bun.sh/docs/runtime/json5#bun-json5-parse), so this\n * module is a thin pass-through rather than a reimplementation.\n * The CLI runs in Bun >= 1.1.0 (see `engines` in package.json).\n *\n * Use this anywhere the CLI reads a user-owned `package.json` or\n * `tsconfig.json`. For framework-owned files (like the templates\n * we render), use plain `JSON.parse` — they're always strict.\n */\nexport function parseJsonLoose<T = Record<string, unknown>>(text: string): T {\n\treturn Bun.JSON5.parse(text) as T;\n}\n",
44
+ "/**\n * AdonisJS-style controller template (no decorators, just methods).\n *\n * Use when `nx.config.ts` has `routing: 'adonis'`. Routes are added\n * separately by the user (or by the `make:crud` command) to a route\n * table; this controller is just a plain class.\n */\n\nexport default `\nimport { {{ service }} } from '../services/{{ kebab }}.service.js';\n\nexport class {{ name }}Controller {\n async index() {\n return new {{ service }}().findAll();\n }\n\n async show({ params }: { params: { id: string } }) {\n return new {{ service }}().findOne(Number(params.id));\n }\n\n async create({ body }: { body: any }) {\n return { status: 201, body: new {{ service }}().create(body) };\n }\n\n async update({ params, body }: { params: { id: string }; body: any }) {\n return new {{ service }}().update(Number(params.id), body);\n }\n\n async destroy({ params }: { params: { id: string } }) {\n return new {{ service }}().delete(Number(params.id));\n }\n}\n\nexport const {{ camel }}Controller = new {{ name }}Controller();\n`.trimStart();\n",
45
+ "/**\n * Functional (Hono-native) controller template.\n *\n * Each route is a plain function `(c) => Response`. Useful for\n * webhooks, SSE endpoints, or anything that doesn't fit a class shape.\n */\n\nexport default `\nimport type { Context } from 'hono';\n\nexport const {{ camel }}Routes = {\n list: async (c: Context) => {\n return c.json([]);\n },\n\n show: async (c: Context) => {\n const id = c.req.param('id');\n return c.json({ id });\n },\n\n create: async (c: Context) => {\n const body = await c.req.json();\n return c.json({ created: body }, 201);\n },\n\n update: async (c: Context) => {\n const id = c.req.param('id');\n const body = await c.req.json();\n return c.json({ id, body });\n },\n\n destroy: async (c: Context) => {\n const id = c.req.param('id');\n return c.json({ removed: id });\n },\n};\n`.trimStart();\n",
46
+ "/**\n * NestJS-style controller template.\n *\n * Renders an `@Controller(prefix)` class with `@Get` / `@Post` /\n * `@Put` / `@Delete` routes that delegate to an injected service.\n *\n * Context keys used:\n * name — PascalCase class name (e.g. \"User\")\n * kebab — kebab-case URL segment (e.g. \"user\")\n * pascal — alias for name (template convenience)\n * camel — camelCase variable name (e.g. \"userService\")\n * service — PascalCase service name (e.g. \"UserService\")\n * serviceCamel — camelCase service variable (e.g. \"userService\")\n */\n\nexport default `\nimport { Body, Controller, Delete, Get, Inject, Param, Post, Put } from 'nexusjs';\nimport { {{ service }} } from '../services/{{ kebab }}.service.js';\n\n@Controller('/{{ kebab }}s')\nexport class {{ name }}Controller {\n constructor(@Inject({{ service }}) private readonly {{ serviceCamel }}: {{ service }}) {}\n\n @Get('/')\n async index() {\n return this.{{ serviceCamel }}.findAll();\n }\n\n @Get('/:id')\n async show(@Param('id') id: string) {\n return this.{{ serviceCamel }}.findOne(Number(id));\n }\n\n @Post('/')\n async create(@Body() body: any) {\n return { status: 201, body: this.{{ serviceCamel }}.create(body) };\n }\n\n @Put('/:id')\n async update(@Param('id') id: string, @Body() body: any) {\n return this.{{ serviceCamel }}.update(Number(id), body);\n }\n\n @Delete('/:id')\n async destroy(@Param('id') id: string) {\n return this.{{ serviceCamel }}.delete(Number(id));\n }\n}\n`.trimStart();\n",
47
+ "/**\n * Controller template for `make:crud` (Nest style, with optional Inertia).\n *\n * Renders all five RESTful actions + an Inertia page if `view === 'inertia'`.\n */\n\nexport default `\nimport { Body, Controller, Delete, Get, Inject, Param, Post, Put } from 'nexusjs';\nimport { z } from 'zod';\nimport { Validate } from 'nexusjs';\nimport { {{ service }} } from '../services/{{ kebab }}.service.js';\n{{#hasInertia}}import { Inertia } from 'nexusjs/view/inertia';{{/hasInertia}}\n\nconst Create{{ name }}Schema = z.object({\n // TODO: define fields\n title: z.string().min(1),\n});\n\n@Controller('/{{ kebab }}s')\nexport class {{ controller }} {\n constructor(\n @Inject({{ service }}) private readonly {{ camel }}Service: {{ service }},\n{{#hasInertia}} @Inject(Inertia.TOKEN) private readonly inertia: Inertia,{{/hasInertia}}\n ) {}\n\n @Get('/')\n async index() {\n const items = await this.{{ camel }}Service.findAll();\n{{#hasInertia}}\n return this.inertia.render('{{ viewComponent }}', { items });\n{{/hasInertia}}\n{{^hasInertia}}\n return items;\n{{/hasInertia}}\n }\n\n @Get('/:id')\n async show(@Param('id') id: string) {\n const item = await this.{{ camel }}Service.findOne(Number(id));\n{{#hasInertia}}\n return this.inertia.render('{{ viewShowComponent }}', { item });\n{{/hasInertia}}\n{{^hasInertia}}\n return item;\n{{/hasInertia}}\n }\n\n @Post('/')\n @Validate({ body: Create{{ name }}Schema })\n async create(@Body() body: z.infer<typeof Create{{ name }}Schema>) {\n return { status: 201, body: await this.{{ camel }}Service.create(body) };\n }\n\n @Put('/:id')\n @Validate({ body: Create{{ name }}Schema.partial() })\n async update(\n @Param('id') id: string,\n @Body() body: Partial<z.infer<typeof Create{{ name }}Schema>>,\n ) {\n return await this.{{ camel }}Service.update(Number(id), body);\n }\n\n @Delete('/:id')\n async destroy(@Param('id') id: string) {\n return await this.{{ camel }}Service.delete(Number(id));\n }\n}\n`.trimStart();\n",
48
+ "/**\n * DTO / validation schema template for `make:crud`.\n *\n * Generates a `{{ name }}Dto` schema and a typesafe `Create{{ name }}` type.\n */\n\nexport default `\nimport { z } from 'zod';\n\nexport const Create{{ name }}Dto = z.object({\n // TODO: define fields. Example:\n // title: z.string().min(1).max(200),\n // body: z.string().optional(),\n});\n\nexport const Update{{ name }}Dto = Create{{ name }}Dto.partial();\n\nexport type Create{{ name }} = z.infer<typeof Create{{ name }}Dto>;\nexport type Update{{ name }} = z.infer<typeof Update{{ name }}Dto>;\n`.trimStart();\n",
49
+ "/**\n * Module template for `make:crud`.\n */\n\nexport default `\nimport { Module } from 'nexusjs';\nimport { {{ controller }} } from '../controllers/{{ kebab }}.controller.js';\nimport { {{ service }} } from '../services/{{ kebab }}.service.js';\n{{#hasRepo}}import { {{ repository }} } from '../repositories/{{ kebab }}.repository.js';{{/hasRepo}}\n\n@Module({\n controllers: [{{ controller }}],\n providers: [\n {{ service }},\n {{#hasRepo}}{{ repository }},{{/hasRepo}}\n ],\n exports: [{{ service }}],\n})\nexport class {{ name }}Module {}\n`.trimStart();\n",
50
+ "/**\n * Vitest test template for `make:crud`.\n *\n * Renders an integration test that exercises the controller's CRUD\n * endpoints through the running server. The test auto-imports the\n * appropriate service depending on `hasRepo`.\n */\n\nexport default `\nimport { describe, it, expect, beforeEach } from 'vitest';\nimport { Application } from 'nexusjs';\nimport { {{ name }}Module } from '../{{ kebab }}.module.js';\n\ndescribe('{{ controller }}', () => {\n let app: Application;\n\n beforeEach(() => {\n app = new Application({{ name }}Module);\n });\n\n it('GET /{{ kebab }}s returns an empty list', async () => {\n const res = await app.server.app.request('/{{ kebab }}s');\n expect(res.status).toBe(200);\n const body = await res.json();\n expect(Array.isArray(body) || typeof body === 'object').toBe(true);\n });\n\n it('POST /{{ kebab }}s creates a record', async () => {\n const res = await app.server.app.request('/{{ kebab }}s', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ title: 'Test' }),\n });\n expect([200, 201]).toContain(res.status);\n });\n});\n`.trimStart();\n",
51
+ "/**\n * Middleware template — for `make:middleware <Name>`.\n *\n * Generates an `@Injectable()` middleware class with a `handle` method.\n */\n\nexport default `\nimport { Injectable } from 'nexusjs';\nimport type { Context, Next } from 'hono';\n\n/**\n * {{ name }} middleware — generated by \\`nx make:middleware {{ name }}\\`.\n */\n@Injectable()\nexport class {{ name }}Middleware {\n async handle(c: Context, next: Next): Promise<Response> {\n // TODO: pre-handler logic\n const res = await next();\n // TODO: post-handler logic\n return res;\n }\n}\n`.trimStart();\n",
52
+ "/**\n * Drizzle migration template.\n *\n * Context:\n * name — PascalCase model name\n * tableName — snake_case plural table\n * columns — column definitions (rendered by command)\n * timestamp — ISO timestamp prefix used in the filename\n */\n\nexport default `\nimport { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core';\n\n/**\n * {{ name }} — migration generated by \\`nx make:migration {{ name }}\\`.\n * Run with \\`bunx drizzle-kit migrate\\` or your migration runner.\n */\nexport const {{ snake }} = sqliteTable('{{ tableName }}', {\n id: integer('id').primaryKey({ autoIncrement: true }),\n{{ columns }}\n created_at: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n updated_at: integer('updated_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n});\n`.trimStart();\n",
53
+ "/**\n * Generic migration header.\n *\n * Context:\n * name — PascalCase model name\n * timestamp — ISO timestamp prefix\n */\n\nexport default `\n-- {{ timestamp }}_create_{{ snake }}.sql\n-- Generated by \\`nx make:migration {{ name }}\\`.\n\nCREATE TABLE IF NOT EXISTS {{ tableName }} (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n{{ columns }}\n created_at INTEGER NOT NULL DEFAULT (unixepoch()),\n updated_at INTEGER NOT NULL DEFAULT (unixepoch())\n);\n`.trimStart();\n",
54
+ "/**\n * Drizzle ORM model template.\n *\n * Generates a Drizzle table schema + a typed repository wrapper.\n *\n * Context:\n * name — PascalCase class name (e.g. \"User\")\n * kebab — kebab-case file name (e.g. \"user\")\n * tableName — snake_case plural table name (e.g. \"users\")\n * columns — newline-separated column list (rendered by command)\n */\n\nexport default `\nimport { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core';\n\n/**\n * {{ tableName }} — generated by \\`nx make:model {{ name }}\\`.\n */\nexport const {{ snake }} = sqliteTable('{{ tableName }}', {\n id: integer('id').primaryKey({ autoIncrement: true }),\n{{ columns }}\n createdAt: integer('created_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()),\n});\n\nexport type {{ name }} = typeof {{ snake }}.$inferSelect;\nexport type New{{ name }} = typeof {{ snake }}.$inferInsert;\n`.trimStart();\n",
55
+ "/**\n * Kysely model template.\n *\n * Generates a typed table interface + repository.\n *\n * Context:\n * name — PascalCase (e.g. \"User\")\n * tableName — snake_case plural (e.g. \"users\")\n */\n\nexport default `\nimport type { Generated, Insertable, Selectable, Updateable } from 'kysely';\nimport { Kysely } from 'kysely';\nimport { Inject, Injectable } from 'nexusjs';\n\nexport interface {{ name }}Table {\n id: Generated<number>;\n{{ columns }}\n created_at: Generated<Date>;\n updated_at: Generated<Date>;\n}\n\nexport type {{ name }} = Selectable<{{ name }}Table>;\nexport type New{{ name }} = Insertable<{{ name }}Table>;\nexport type {{ name }}Update = Updateable<{{ name }}Table>;\n\n@Injectable()\nexport class {{ name }}Repository {\n constructor(@Inject('DB') private readonly db: Kysely<any>) {}\n\n findAll() {\n return this.db.selectFrom('{{ tableName }}').selectAll().execute();\n }\n\n findOne(id: number) {\n return this.db\n .selectFrom('{{ tableName }}')\n .selectAll()\n .where('id', '=', id)\n .executeTakeFirst();\n }\n\n create(data: New{{ name }}) {\n return this.db.insertInto('{{ tableName }}').values(data).returningAll().executeTakeFirst();\n }\n\n update(id: number, data: {{ name }}Update) {\n return this.db\n .updateTable('{{ tableName }}')\n .set(data)\n .where('id', '=', id)\n .returningAll()\n .executeTakeFirst();\n }\n\n delete(id: number) {\n return this.db.deleteFrom('{{ tableName }}').where('id', '=', id).execute();\n }\n}\n`.trimStart();\n",
56
+ "/**\n * Prisma model template.\n *\n * Renders a `model Foo { ... }` block plus a typed client wrapper.\n *\n * Context:\n * name — PascalCase (e.g. \"User\")\n * fields — rendered field lines (name, type, optionality)\n */\n\nexport default `\n/**\n * {{ name }} — generated by \\`nx make:model {{ name }}\\`.\n *\n * Add this block to your schema.prisma file:\n *\n{{ prismaBlock }}\n */\n\nimport { PrismaClient } from '@prisma/client';\nimport { Inject, Injectable } from 'nexusjs';\n\n@Injectable()\nexport class {{ name }}Repository {\n constructor(@Inject('PRISMA') private readonly prisma: PrismaClient) {}\n\n findAll() {\n return this.prisma.{{ camel }}.findMany();\n }\n\n findOne(id: number) {\n return this.prisma.{{ camel }}.findUnique({ where: { id } });\n }\n\n create(data: any) {\n return this.prisma.{{ camel }}.create({ data });\n }\n\n update(id: number, data: any) {\n return this.prisma.{{ camel }}.update({ where: { id }, data });\n }\n\n delete(id: number) {\n return this.prisma.{{ camel }}.delete({ where: { id } });\n }\n}\n`.trimStart();\n",
57
+ "/**\n * Module template.\n *\n * Aggregates controllers, services, and repositories for a feature\n * folder. Mirrors NestJS `@Module({ controllers, providers, exports })`.\n *\n * Context:\n * name — PascalCase module name (e.g. \"User\")\n * controller — PascalCase controller (e.g. \"UserController\")\n * service — PascalCase service (e.g. \"UserService\")\n * repository — PascalCase repository (e.g. \"UserRepository\") — optional\n * exports — comma-separated tokens to re-export (e.g. \"UserService\")\n */\n\nexport default `\nimport { Module } from 'nexusjs';\nimport { {{ controller }} } from '../controllers/{{ kebab }}.controller.js';\n{{#hasService}}import { {{ service }} } from '../services/{{ kebab }}.service.js';{{/hasService}}\n{{#hasRepo}}import { {{ repository }} } from '../repositories/{{ kebab }}.repository.js';{{/hasRepo}}\n\n@Module({\n controllers: [{{ controller }}],\n providers: [\n {{#hasService}}{{ service }},{{/hasService}}\n {{#hasRepo}}{{ repository }},{{/hasRepo}}\n ],\n exports: [\n {{#hasService}}{{ service }},{{/hasService}}\n ],\n})\nexport class {{ name }}Module {}\n`.trimStart();\n",
58
+ "/**\n * nx.config.ts template — placed at the project root by `nx init` /\n * `nx new`.\n */\n\nexport default `/**\n * Nexus project configuration.\n * Run \\`nx info\\` to see the resolved values.\n */\n\nexport default {\n // ---------------------------------------------------------------------------\n // Core\n // ---------------------------------------------------------------------------\n\n /** Routing style used by \\`make:controller\\` / \\`make:crud\\`. */\n routing: '{{ routing }}',\n\n /** View engine — \\`inertia\\`, \\`rendu\\`, \\`edge\\`, or \\`none\\`. */\n view: '{{ view }}',\n\n /**\n * Directory searched when a controller returns a view file name\n * (e.g. \\`about.html\\`). Empty string = inline templates only.\n * Typical: \\`'resources/views'\\`. On edge runtimes\n * (Cloudflare Workers), leave empty and pass inline strings.\n */\n viewPaths: '{{ viewPaths }}',\n\n /** ORM driver — \\`drizzle\\`, \\`prisma\\`, \\`kysely\\`, or \\`none\\`. */\n orm: '{{ orm }}',\n\n // ---------------------------------------------------------------------------\n // Database\n // ---------------------------------------------------------------------------\n\n database: {\n driver: '{{ dbDriver }}',\n url: process.env.DATABASE_URL ?? '{{ dbUrl }}',\n },\n\n // ---------------------------------------------------------------------------\n // Inertia (only consulted when \\`view === 'inertia'\\`)\n // ---------------------------------------------------------------------------\n\n inertia: {\n frontend: '{{ inertiaFrontend }}',\n ssr: {{ inertiaSSR }},\n version: '{{ inertiaVersion }}',\n },\n\n // ---------------------------------------------------------------------------\n // Paths\n // ---------------------------------------------------------------------------\n\n paths: {\n app: 'app',\n controllers: 'app/controllers',\n services: 'app/services',\n modules: 'app/modules',\n models: 'app/models',\n migrations: 'app/database/migrations',\n seeds: 'db/seeds',\n middleware: 'app/middleware',\n dto: 'app/dto',\n },\n};\n`;\n",
59
+ "/**\n * drizzle.config.ts template — placed at the project root by\n * `nx config` when the project's ORM is set to `drizzle`.\n *\n * The dialect is derived from the project's `db` driver:\n * bun-sqlite / node-sqlite / libsql → sqlite\n * postgres → postgresql\n * mysql → mysql\n */\n\nexport default `\nimport { defineConfig } from \"drizzle-kit\";\n\nexport default defineConfig({\n dialect: \"{{ dialect }}\",\n schema: \"./app/models/*.model.ts\",\n out: \"./drizzle\",\n dbCredentials: {\n url: process.env.DATABASE_URL ?? \"{{ dbUrl }}\",\n },\n verbose: true,\n strict: true,\n});\n`;\n",
60
+ "/**\n * Repository template.\n *\n * Context:\n * name — PascalCase class name\n * camel — camelCase variable\n * kebab — kebab-case\n * tableName — plural snake_case table name\n * repository — PascalCase repository name\n */\n\nexport default `\nimport { Injectable } from 'nexusjs';\nimport { DrizzleRepository } from 'nexusjs/drizzle';\nimport { {{ tableName }} } from '../models/{{ kebab }}.model.js';\nimport type { {{ name }}, New{{ name }} } from '../models/{{ kebab }}.model.js';\n\n@Injectable()\nexport class {{ repository }} extends DrizzleRepository<typeof {{ tableName }}, {{ name }}> {\n constructor() {\n super({{ tableName }});\n }\n}\n`.trimStart();\n",
61
+ "/**\n * Service template.\n *\n * Context:\n * name — PascalCase class name\n * camel — camelCase variable\n * repository — PascalCase repository name (only if ORM !== 'none')\n * repositoryCamel — camelCase repo variable\n */\n\nexport default `\nimport { Inject, Injectable } from 'nexusjs';\n{{#hasRepo}}import { {{ repository }} } from '../repositories/{{ kebab }}.repository.js';{{/hasRepo}}\n\n@Injectable()\nexport class {{ name }}Service {\n constructor({{#hasRepo}}\n @Inject({{ repository }}) private readonly {{ repositoryCamel }}: {{ repository }},\n {{/hasRepo}}) {}\n\n async findAll() {\n {{#hasRepo}}return this.{{ repositoryCamel }}.findAll();{{/hasRepo}}\n {{^hasRepo}}return []; // TODO: implement{{/hasRepo}}\n }\n\n async findOne(id: number) {\n {{#hasRepo}}return this.{{ repositoryCamel }}.findOne(id);{{/hasRepo}}\n {{^hasRepo}}return { id }; // TODO: implement{{/hasRepo}}\n }\n\n async create(data: any) {\n {{#hasRepo}}return this.{{ repositoryCamel }}.create(data);{{/hasRepo}}\n {{^hasRepo}}return { id: Date.now(), ...data }; // TODO: implement{{/hasRepo}}\n }\n\n async update(id: number, data: any) {\n {{#hasRepo}}return this.{{ repositoryCamel }}.update(id, data);{{/hasRepo}}\n {{^hasRepo}}return { id, ...data }; // TODO: implement{{/hasRepo}}\n }\n\n async delete(id: number) {\n {{#hasRepo}}return this.{{ repositoryCamel }}.delete(id);{{/hasRepo}}\n {{^hasRepo}}return { removed: id }; // TODO: implement{{/hasRepo}}\n }\n}\n`.trimStart();\n",
62
+ "/**\n * Validator (DTO) template — for `make:validator <Name>`.\n *\n * Generates a Zod schema with reasonable starter fields.\n */\n\nexport default `\nimport { z } from 'zod';\n\n/**\n * Validation schema for {{ name }}.\n * Generated by \\`nx make:validator {{ name }}\\`.\n */\nexport const {{ name }}Schema = z.object({\n // TODO: define fields. Example:\n // name: z.string().min(1).max(100),\n // email: z.string().email().optional(),\n});\n\nexport type {{ name }}Input = z.infer<typeof {{ name }}Schema>;\n`.trimStart();\n",
63
+ "/**\n * Re-exports for scaffold templates.\n *\n * Commands import the templates they need and pass a render context.\n * Adding a new template is a one-line change here.\n */\n\nimport controllerAdonis from \"./controller/adonis.js\";\nimport controllerFunctional from \"./controller/functional.js\";\nimport controllerNest from \"./controller/nest.js\";\nimport crudController from \"./crud/controller.js\";\nimport crudDto from \"./crud/dto.js\";\nimport crudModule from \"./crud/module.js\";\nimport crudTest from \"./crud/test.js\";\nimport middleware from \"./middleware/middleware.js\";\nimport migrationDrizzle from \"./migration/drizzle.js\";\nimport migrationSql from \"./migration/sql.js\";\nimport modelDrizzle from \"./model/drizzle.js\";\nimport modelKysely from \"./model/kysely.js\";\nimport modelPrisma from \"./model/prisma.js\";\nimport module from \"./module/module.js\";\nimport projectNxConfig from \"./project/nx.config.js\";\nimport projectDrizzleConfig from \"./project/drizzle.config.js\";\nimport repository from \"./repository/repository.js\";\nimport service from \"./service/service.js\";\nimport validator from \"./validator/validator.js\";\n\nexport const templates = {\n\tcontroller: {\n\t\tnest: controllerNest,\n\t\tadonis: controllerAdonis,\n\t\tfunctional: controllerFunctional,\n\t},\n\tservice,\n\trepository,\n\tmodule,\n\tvalidator,\n\tmiddleware,\n\tmodel: {\n\t\tdrizzle: modelDrizzle,\n\t\tprisma: modelPrisma,\n\t\tkysely: modelKysely,\n\t},\n\tmigration: {\n\t\tdrizzle: migrationDrizzle,\n\t\tsql: migrationSql,\n\t},\n\tcrud: {\n\t\tcontroller: crudController,\n\t\tmodule: crudModule,\n\t\tdto: crudDto,\n\t\ttest: crudTest,\n\t},\n\tproject: {\n\t\t\"nx.config.ts\": projectNxConfig,\n\t\t\"drizzle.config.ts\": projectDrizzleConfig,\n\t},\n};\n\nexport type TemplateKey = keyof typeof templates;\n",
64
+ "/**\n * `nx make:auth` — scaffold an auth module.\n *\n * Generates:\n * - app/auth/auth.ts — better-auth instance\n * - app/auth/auth.module.ts — NexusJS module (or copy if exists)\n * - app/auth/.env.example — BETTER_AUTH_SECRET / URL placeholders\n * - patches nx.config.ts to include the `auth` section (with --update-config)\n *\n * Usage:\n * nx make:auth --provider github,google --jwt --passkey\n * nx make:auth --provider github --jwt --no-passkey\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport {\n\tflagList,\n\tlogger,\n\trender,\n\twriteFile,\n} from \"../core/index.js\";\n\nconst AUTH_INSTANCE_TEMPLATE = `/**\n * Better-auth instance — generated by \\`nx make:auth\\`.\n *\n * Edit \\`nx.config.ts\\` (\\`auth\\` section) instead of this file when possible.\n */\nimport 'reflect-metadata';\nimport { createAuth } from 'nexusjs/auth';\n\nexport const auth = createAuth({\n{{^jwt}}\n jwt: { enabled: false },\n{{/jwt}}\n{{#jwt}}\n jwt: { enabled: true },\n{{/jwt}}\n{{#passkey}}\n passkey: {\n enabled: true,\n rpName: '{{ passkeyRpName }}',\n rpId: '{{ passkeyRpId }}',\n origin: '{{ passkeyOrigin }}',\n },\n{{/passkey}}\n{{#providers}}\n socialProviders: {\n{{#entries}}\n {{ name }}: {\n clientId: process.env.{{ envVar }}_CLIENT_ID!,\n clientSecret: process.env.{{ envVar }}_CLIENT_SECRET!,\n },\n{{/entries}}\n },\n{{/providers}}\n});\n`;\n\nconst ENV_EXAMPLE_TEMPLATE = `# Better Auth — generated by \\`nx make:auth\\`.\n# Generate a secret with: openssl rand -base64 32\nBETTER_AUTH_SECRET=\nBETTER_AUTH_URL=http://localhost:3000\n{{#providers}}\n{{#entries}}\n{{ envVar }}_CLIENT_ID=\n{{ envVar }}_CLIENT_SECRET=\n{{/entries}}\n{{/providers}}\n`;\n\nconst MODULE_UPDATE_HINT = `import { AuthModule } from 'nexusjs/auth';\n// In your AppModule.imports:\nimports: [AuthModule.forRoot({ /* ... */ })],\n`;\n\nconst KNOWN_PROVIDERS: Record<string, { env: string; label: string }> = {\n\tgithub: { env: \"GITHUB\", label: \"GitHub\" },\n\tgoogle: { env: \"GOOGLE\", label: \"Google\" },\n\tdiscord: { env: \"DISCORD\", label: \"Discord\" },\n\tmicrosoft: { env: \"MICROSOFT\", label: \"Microsoft\" },\n\tapple: { env: \"APPLE\", label: \"Apple\" },\n\tfacebook: { env: \"FACEBOOK\", label: \"Facebook\" },\n\tgitlab: { env: \"GITLAB\", label: \"GitLab\" },\n\tslack: { env: \"SLACK\", label: \"Slack\" },\n\ttwitter: { env: \"TWITTER\", label: \"Twitter\" },\n\tspotify: { env: \"SPOTIFY\", label: \"Spotify\" },\n\tlinkedin: { env: \"LINKEDIN\", label: \"LinkedIn\" },\n};\n\nexport const makeAuthCommand: Command = {\n\tname: \"make:auth\",\n\taliases: [\"auth\", \"auth-install\"],\n\tsummary: \"Scaffold the auth module\",\n\tdescription:\n\t\t\"Generates app/auth/auth.ts, .env.example, and an auth-ready module skeleton using better-auth.\",\n\texamples: [\n\t\t\"nx make:auth\",\n\t\t\"nx make:auth --provider github --jwt\",\n\t\t\"nx make:auth --provider github,google --jwt --passkey --rp-id example.com\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"provider\",\n\t\t\tdescription: \"Comma-separated OAuth providers (github, google, ...)\",\n\t\t},\n\t\t{\n\t\t\tname: \"jwt\",\n\t\t\tdescription: \"Enable the JWT plugin (token + JWKS endpoint)\",\n\t\t},\n\t\t{ name: \"passkey\", description: \"Enable the passkey (WebAuthn) plugin\" },\n\t\t{ name: \"rp-id\", description: \"Passkey RP ID (defaults to 'localhost')\" },\n\t\t{ name: \"rp-name\", description: \"Passkey RP display name\" },\n\t\t{\n\t\t\tname: \"origin\",\n\t\t\tdescription: \"Passkey origin (defaults to http://localhost:3000)\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tlogger.heading(\"Scaffolding auth module\");\n\n\t\tconst providers = flagList(ctx.flags, \"provider\");\n\t\tconst jwtEnabled = ctx.flags[\"jwt\"] === true;\n\t\tconst passkeyEnabled = ctx.flags[\"passkey\"] === true;\n\t\tconst rpId = (ctx.flags[\"rp-id\"] as string | undefined) ?? \"localhost\";\n\t\tconst rpName =\n\t\t\t(ctx.flags[\"rp-name\"] as string | undefined) ?? \"NexusJS App\";\n\t\tconst origin =\n\t\t\t(ctx.flags[\"origin\"] as string | undefined) ?? \"http://localhost:3000\";\n\n\t\tconst entries = providers.map((p) => {\n\t\t\tconst known = KNOWN_PROVIDERS[p.toLowerCase()];\n\t\t\treturn {\n\t\t\t\tname: p.toLowerCase(),\n\t\t\t\tenvVar: known?.env ?? p.toUpperCase(),\n\t\t\t};\n\t\t});\n\n\t\t// 1) src/auth/auth.ts\n\t\tconst authCode = render(AUTH_INSTANCE_TEMPLATE, {\n\t\t\tjwt: jwtEnabled,\n\t\t\tpasskey: passkeyEnabled,\n\t\t\tproviders: providers.length > 0,\n\t\t\tentries,\n\t\t\tpasskeyRpName: rpName,\n\t\t\tpasskeyRpId: rpId,\n\t\t\tpasskeyOrigin: Array.isArray(origin) ? origin.join(\",\") : origin,\n\t\t});\n\t\tconst authOut = resolve(ctx.cwd, \"app/auth/auth.ts\");\n\t\tif (writeFile(authOut, authCode)) {\n\t\t\tlogger.success(`created ${authOut}`);\n\t\t} else {\n\t\t\tlogger.warn(`skipped (exists): ${authOut}`);\n\t\t}\n\n\t\t// 2) .env.example\n\t\tconst envCode = render(ENV_EXAMPLE_TEMPLATE, {\n\t\t\tproviders: providers.length > 0,\n\t\t\tentries,\n\t\t});\n\t\tconst envOut = resolve(ctx.cwd, \".env.example\");\n\t\tif (writeFile(envOut, envCode, { skipIfExists: true })) {\n\t\t\tlogger.success(`created ${envOut}`);\n\t\t} else {\n\t\t\tlogger.warn(`skipped (exists): ${envOut}`);\n\t\t}\n\n\t\t// 3) Module hint\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(\"1. Add a secret to .env:\");\n\t\tlogger.info(\" BETTER_AUTH_SECRET=$(openssl rand -base64 32)\");\n\t\tlogger.info(\"2. Wire the module in AppModule:\");\n\t\tlogger.info(` ${MODULE_UPDATE_HINT.trim()}`);\n\t\tif (providers.length > 0) {\n\t\t\tlogger.info(`3. Set up OAuth credentials for: ${providers.join(\", \")}`);\n\t\t}\n\t\tif (passkeyEnabled) {\n\t\t\tlogger.info(\"4. Configure passkey RP ID + origin for your domain.\");\n\t\t}\n\t\tlogger.info(\"5. Run `bun --hot app/main.ts` to start the server.\");\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nexport default makeAuthCommand;\n",
65
+ "/**\n * `nx make:controller <Name>` — generate a controller file.\n *\n * The template is chosen from `nx.config.ts`'s `routing` field:\n * - `nest` → @Controller / @Get / @Post class\n * - `adonis` → plain class with methods (registered via route table)\n * - `functional` → object of Hono-native handlers\n *\n * Usage:\n * nx make:controller User\n * nx make:controller Post --style nest --no-service\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger, nameVariants, render, writeFile } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\nexport const makeControllerCommand: Command = {\n\tname: \"make:controller\",\n\taliases: [\"mc\", \"make-controller\"],\n\tsummary: \"Generate a controller class\",\n\tdescription:\n\t\t\"Generates a controller file under app/controllers/. The routing style is read from nx.config.ts.\",\n\texamples: [\n\t\t\"nx make:controller User\",\n\t\t\"nx make:controller Post --style nest\",\n\t\t\"nx make:controller Webhook --style functional\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"style\",\n\t\t\tdescription: \"Override routing style (nest|adonis|functional)\",\n\t\t},\n\t\t{\n\t\t\tname: \"no-service\",\n\t\t\tdescription: \"Skip injecting a service into the controller\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:controller <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst style =\n\t\t\t(ctx.flags[\"style\"] as string | undefined) ?? ctx.config.routing;\n\n\t\tif (![\"nest\", \"adonis\", \"functional\"].includes(style)) {\n\t\t\tlogger.error(\n\t\t\t\t`Unknown style: ${style}. Allowed: nest, adonis, functional.`,\n\t\t\t);\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst skipService = ctx.flags[\"no-service\"] === true;\n\t\tconst serviceName = `${variants.pascal}Service`;\n\t\tconst serviceCamel = variants.camel + \"Service\";\n\n\t\tconst tpl =\n\t\t\ttemplates.controller[style as keyof typeof templates.controller];\n\t\tconst code = render(tpl, {\n\t\t\tname: variants.pascal,\n\t\t\tcamel: variants.camel,\n\t\t\tkebab: variants.kebab,\n\t\t\tsnake: variants.snake,\n\t\t\tpascal: variants.pascal,\n\t\t\tservice: serviceName,\n\t\t\tserviceCamel,\n\t\t}).replace(\n\t\t\t// Strip the unused service import line if --no-service.\n\t\t\t/import .*\\n/g,\n\t\t\tskipService\n\t\t\t\t? (m: string) => (m.includes(\"services/\") ? \"\" : m)\n\t\t\t\t: (m: string) => m,\n\t\t);\n\n\t\tconst out = resolve(\n\t\t\tctx.cwd,\n\t\t\tctx.config.paths.controllers,\n\t\t\t`${variants.kebab}.controller.ts`,\n\t\t);\n\n\t\tconst ok = writeFile(out, code, { skipIfExists: false });\n\t\tif (!ok) {\n\t\t\tlogger.error(`Refusing to overwrite existing file: ${out}`);\n\t\t\treturn 1;\n\t\t}\n\n\t\tlogger.success(`created ${out}`);\n\t\tlogger.finger(`edit ${variants.kebab}.controller.ts and add to a module.`);\n\t\treturn 0;\n\t},\n};\n\nexport default makeControllerCommand;\n",
66
+ "/**\n * `nx make:crud <Name>` — generate a full CRUD scaffold for a resource.\n *\n * Mirrors Ruby on Rails' `rails generate scaffold`:\n *\n * nx make:crud Post\n *\n * Produces (under app/):\n *\n * controllers/post.controller.ts — RESTful routes (Nest/Adonis/Functional)\n * services/post.service.ts — business logic\n * repositories/post.repository.ts — DB access (only if orm !== 'none')\n * models/post.model.ts — table schema (only if orm !== 'none')\n * dto/post.dto.ts — Zod validation schemas\n * modules/post.module.ts — @Module({...}) wiring\n * tests/post.test.ts — Vitest integration test\n *\n * The output adapts to `nx.config.ts`:\n * - routing → controller template\n * - view → emits Inertia render() when 'inertia', otherwise plain JSON\n * - orm → Drizzle/Prisma/Kysely template selection\n *\n * Use `--no-views` to skip view-aware parts even when `view === 'inertia'`.\n */\n\nimport { mkdirSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport {\n\tflagBool,\n\tlogger,\n\tnameVariants,\n\trender,\n\twriteFile,\n} from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\nimport {\n\tmapDrizzleType,\n\trenderDrizzleDialect,\n} from \"../templates/model/drizzle-dialect.js\";\n\nexport const makeCrudCommand: Command = {\n\tname: \"make:crud\",\n\taliases: [\"crud\", \"make-crud\", \"scaffold\"],\n\tsummary: \"Generate a full CRUD scaffold for a resource\",\n\tdescription:\n\t\t\"Generates controller + service + repository + model + dto + module + test for a single resource, adapted to the project's nx.config.ts.\",\n\texamples: [\n\t\t\"nx make:crud Post\",\n\t\t\"nx make:crud User --no-views\",\n\t\t\"nx make:crud Comment --no-repo --no-test\",\n\t],\n\tflags: [\n\t\t{ name: \"no-views\", description: \"Skip Inertia view rendering\" },\n\t\t{ name: \"no-repo\", description: \"Skip the repository / model\" },\n\t\t{ name: \"no-test\", description: \"Skip generating the test file\" },\n\t\t{ name: \"style\", description: \"Override routing style\" },\n\t\t{ name: \"orm\", description: \"Override ORM driver\" },\n\t\t{\n\t\t\tname: \"dialect\",\n\t\t\tdescription:\n\t\t\t\t\"Drizzle dialect (postgres|mysql|sqlite|bun-sqlite|d1). Default: bun-sqlite\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:crud <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst style =\n\t\t\t(ctx.flags[\"style\"] as string | undefined) ?? ctx.config.routing;\n\t\tconst orm = (ctx.flags[\"orm\"] as string | undefined) ?? ctx.config.orm;\n\t\tconst dialect =\n\t\t\t(ctx.flags[\"dialect\"] as string | undefined) ??\n\t\t\tctx.config.dialect ??\n\t\t\t\"bun-sqlite\";\n\t\tconst noRepo = flagBool(ctx.flags, \"no-repo\", false) || orm === \"none\";\n\t\tconst noTest = flagBool(ctx.flags, \"no-test\", false);\n\t\tconst hasInertia =\n\t\t\tctx.config.view === \"inertia\" && !flagBool(ctx.flags, \"no-views\", false);\n\n\t\t// Service/repo/controller names.\n\t\tconst controller = `${variants.pascal}Controller`;\n\t\tconst service = `${variants.pascal}Service`;\n\t\tconst repository = `${variants.pascal}Repository`;\n\t\tconst tableName = variants.pluralSnake;\n\t\tconst viewComponent = `${variants.pascal}s/Index`;\n\t\tconst viewShowComponent = `${variants.pascal}s/Show`;\n\n\t\tlogger.heading(\n\t\t\t`Scaffolding ${variants.pascal} (style=${style}, view=${ctx.config.view}, orm=${orm})`,\n\t\t);\n\t\tconst written: string[] = [];\n\n\t\t// 1) Controller\n\t\t{\n\t\t\tconst code = render(templates.crud.controller, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\tsnake: variants.snake,\n\t\t\t\ttableName,\n\t\t\t\tservice,\n\t\t\t\tserviceCamel: variants.camel + \"Service\",\n\t\t\t\tcontroller,\n\t\t\t\tviewComponent,\n\t\t\t\tviewShowComponent,\n\t\t\t\thasInertia,\n\t\t\t});\n\t\t\tconst out = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\tctx.config.paths.controllers,\n\t\t\t\t`${variants.kebab}.controller.ts`,\n\t\t\t);\n\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\twritten.push(out);\n\t\t\t}\n\t\t}\n\n\t\t// 2) Service\n\t\t{\n\t\t\tconst code = render(templates.service, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\thasRepo: !noRepo,\n\t\t\t\trepository,\n\t\t\t\trepositoryCamel: variants.camel + \"Repository\",\n\t\t\t});\n\t\t\tconst out = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\tctx.config.paths.services,\n\t\t\t\t`${variants.kebab}.service.ts`,\n\t\t\t);\n\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\twritten.push(out);\n\t\t\t}\n\t\t}\n\n\t\t// 3) Repository + Model (only if ORM is configured)\n\t\tif (!noRepo) {\n\t\t\tif (orm === \"drizzle\" || orm === \"prisma\" || orm === \"kysely\") {\n\t\t\t\tlet code: string;\n\t\t\t\tif (orm === \"drizzle\") {\n\t\t\t\t\t// Use the dialect-aware template.\n\t\t\t\t\tconst tpl = renderDrizzleDialect(dialect);\n\t\t\t\t\tcode = render(tpl, {\n\t\t\t\t\t\tname: variants.pascal,\n\t\t\t\t\t\tcamel: variants.camel,\n\t\t\t\t\t\tkebab: variants.kebab,\n\t\t\t\t\t\tsnake: variants.snake,\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tcolumns: renderDrizzleColumns(dialect),\n\t\t\t\t\t\tprismaBlock: \"\",\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tconst tpl = templates.model[orm];\n\t\t\t\t\tcode = render(tpl, {\n\t\t\t\t\t\tname: variants.pascal,\n\t\t\t\t\t\tcamel: variants.camel,\n\t\t\t\t\t\tkebab: variants.kebab,\n\t\t\t\t\t\tsnake: variants.snake,\n\t\t\t\t\t\ttableName,\n\t\t\t\t\t\tcolumns: renderDefaultColumns(orm),\n\t\t\t\t\t\tprismaBlock: \"\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tconst out = resolve(\n\t\t\t\t\tctx.cwd,\n\t\t\t\t\tctx.config.paths.models,\n\t\t\t\t\t`${variants.kebab}.model.ts`,\n\t\t\t\t);\n\t\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\t\twritten.push(out);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Repository\n\t\t\tconst repoCode = render(templates.repository, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\ttableName,\n\t\t\t\trepository,\n\t\t\t});\n\t\t\tconst repoOut = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\t`${ctx.config.paths.app}/repositories`,\n\t\t\t\t`${variants.kebab}.repository.ts`,\n\t\t\t);\n\t\t\tmkdirSync(dirname(repoOut), { recursive: true });\n\t\t\tif (!writeFile(repoOut, repoCode, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${repoOut}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${repoOut}`);\n\t\t\t\twritten.push(repoOut);\n\t\t\t}\n\t\t}\n\n\t\t// 4) DTO\n\t\t{\n\t\t\tconst code = render(templates.crud.dto, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t});\n\t\t\tconst out = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\tctx.config.paths.dto,\n\t\t\t\t`${variants.kebab}.dto.ts`,\n\t\t\t);\n\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\twritten.push(out);\n\t\t\t}\n\t\t}\n\n\t\t// 5) Module\n\t\t{\n\t\t\tconst code = render(templates.crud.module, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\tcontroller,\n\t\t\t\tservice,\n\t\t\t\trepository,\n\t\t\t\thasRepo: !noRepo,\n\t\t\t});\n\t\t\tconst out = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\tctx.config.paths.modules,\n\t\t\t\t`${variants.kebab}.module.ts`,\n\t\t\t);\n\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\twritten.push(out);\n\t\t\t}\n\t\t}\n\n\t\t// 6) Test\n\t\tif (!noTest) {\n\t\t\tconst code = render(templates.crud.test, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\tcontroller,\n\t\t\t\tservice,\n\t\t\t});\n\t\t\tconst out = resolve(ctx.cwd, \"tests\", `${variants.kebab}.test.ts`);\n\t\t\tif (!writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t\twritten.push(out);\n\t\t\t}\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(`1. Review the generated files:`);\n\t\tfor (const f of written) logger.info(` ${f}`);\n\t\tlogger.info(`2. Add ${variants.pascal}Module to AppModule.imports.`);\n\t\tlogger.info(\n\t\t\t`3. ${noRepo ? \"\" : `Run \\`bunx drizzle-kit migrate\\` (or your migration tool).`}`,\n\t\t);\n\t\tlogger.info(`4. Start the dev server: \\`bun --hot app/main.ts\\`.`);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nfunction renderDefaultColumns(orm: string): string {\n\tif (orm === \"drizzle\") {\n\t\treturn \" title: text('title').notNull(),\";\n\t}\n\tif (orm === \"kysely\") {\n\t\treturn \" title: string,\";\n\t}\n\treturn \" title text,\";\n}\n\nfunction renderDrizzleColumns(dialect: string): string {\n\tconst helper = mapDrizzleType(dialect, \"text\");\n\treturn ` title: ${helper}('title').notNull(),`;\n}\n\nexport default makeCrudCommand;\n",
67
+ "/**\n * Drizzle ORM model template — dialect-aware.\n *\n * Renders a Drizzle table schema + types. The right import path\n * (`drizzle-orm/pg-core`, `drizzle-orm/mysql-core`, `drizzle-orm/sqlite-core`,\n * `drizzle-orm/bun-sqlite`, `drizzle-orm/d1`) and column helpers are\n * selected by the caller.\n *\n * Context:\n * name — PascalCase class name (e.g. \"User\")\n * kebab — kebab-case file name (e.g. \"user\")\n * tableName — snake_case plural table name (e.g. \"users\")\n * columns — newline-separated column lines (rendered by command)\n * importPath — drizzle dialect module path\n * idHelper — 'serial' (pg), 'int' (mysql), 'integer' (sqlite/bun/d1)\n * tsHelper — 'integer' (pg), 'int' (mysql), 'integer' (sqlite/bun/d1)\n * tsText — 'text' for all dialects\n * tsTimestamp — 'timestamp' (pg/mysql) or 'integer' (sqlite/d1)\n * tsBool — 'boolean' (pg/mysql) or 'integer' (sqlite/d1)\n * tsDateMode — '' (pg), '' (mysql), \"{ mode: 'timestamp' }\" (sqlite/d1)\n * idType — Drizzle column type for id (e.g. \"serial\", \"integer\")\n * timestampType — Drizzle column type for createdAt/updatedAt\n */\n\nexport function renderDrizzleDialect(dialect: string): string {\n\tconst spec = DIALECT_SPECS[dialect] ?? DIALECT_SPECS.sqlite;\n\treturn `\nimport { ${spec.imports.join(\", \")} } from '${spec.importPath}';\n\n/**\n * {{ tableName }} — generated by \\`nx make:model {{ name }}\\`.\n */\nexport const {{ snake }} = ${spec.tableFn}('{{ tableName }}', {\n id: ${spec.idHelper}('id').primaryKey(${spec.idOpts}),\n{{ columns }}\n createdAt: ${spec.tsTimestamp}('created_at'${spec.tsDateMode}).notNull().$defaultFn(() => new Date()),\n updatedAt: ${spec.tsTimestamp}('updated_at'${spec.tsDateMode}).notNull().$defaultFn(() => new Date()),\n});\n\nexport type {{ name }} = typeof {{ snake }}.$inferSelect;\nexport type New{{ name }} = typeof {{ snake }}.$inferInsert;\n`.trimStart();\n}\n\ninterface DialectSpec {\n\timports: string[];\n\timportPath: string;\n\ttableFn: string;\n\tidHelper: string;\n\tidOpts: string;\n\ttsTimestamp: string;\n\ttsDateMode: string;\n}\n\nconst DIALECT_SPECS: Record<string, DialectSpec> = {\n\tpostgres: {\n\t\timports: [\n\t\t\t\"pgTable\",\n\t\t\t\"serial\",\n\t\t\t\"text\",\n\t\t\t\"timestamp\",\n\t\t\t\"boolean\",\n\t\t\t\"integer\",\n\t\t\t\"bigint\",\n\t\t],\n\t\timportPath: \"drizzle-orm/pg-core\",\n\t\ttableFn: \"pgTable\",\n\t\tidHelper: \"serial\",\n\t\tidOpts: \"\",\n\t\ttsTimestamp: \"timestamp\",\n\t\ttsDateMode: \"\",\n\t},\n\t\"bun-sqlite\": {\n\t\timports: [\"sqliteTable\", \"integer\", \"text\", \"real\"],\n\t\timportPath: \"drizzle-orm/sqlite-core\",\n\t\ttableFn: \"sqliteTable\",\n\t\tidHelper: \"integer\",\n\t\tidOpts: \"{ autoIncrement: true }\",\n\t\ttsTimestamp: \"integer\",\n\t\ttsDateMode: \", { mode: 'timestamp' }\",\n\t},\n\tsqlite: {\n\t\timports: [\"sqliteTable\", \"integer\", \"text\", \"real\"],\n\t\timportPath: \"drizzle-orm/sqlite-core\",\n\t\ttableFn: \"sqliteTable\",\n\t\tidHelper: \"integer\",\n\t\tidOpts: \"{ autoIncrement: true }\",\n\t\ttsTimestamp: \"integer\",\n\t\ttsDateMode: \", { mode: 'timestamp' }\",\n\t},\n\td1: {\n\t\timports: [\"sqliteTable\", \"integer\", \"text\", \"real\"],\n\t\timportPath: \"drizzle-orm/d1\",\n\t\ttableFn: \"sqliteTable\",\n\t\tidHelper: \"integer\",\n\t\tidOpts: \"{ autoIncrement: true }\",\n\t\ttsTimestamp: \"integer\",\n\t\ttsDateMode: \", { mode: 'timestamp' }\",\n\t},\n\tmysql: {\n\t\timports: [\n\t\t\t\"mysqlTable\",\n\t\t\t\"int\",\n\t\t\t\"text\",\n\t\t\t\"timestamp\",\n\t\t\t\"boolean\",\n\t\t\t\"bigint\",\n\t\t\t\"double\",\n\t\t],\n\t\timportPath: \"drizzle-orm/mysql-core\",\n\t\ttableFn: \"mysqlTable\",\n\t\tidHelper: \"int\",\n\t\tidOpts: \"{ autoIncrement: true }\",\n\t\ttsTimestamp: \"timestamp\",\n\t\ttsDateMode: \"\",\n\t},\n};\n\n/** Per-dialect TS-type for a column flag. */\nexport function mapDrizzleType(dialect: string, type: string): string {\n\tconst t = type.toLowerCase();\n\tif (t === \"text\" || t === \"string\" || t === \"varchar\") return \"text\";\n\tif (t === \"int\" || t === \"integer\") {\n\t\treturn dialect === \"mysql\" ? \"int\" : \"integer\";\n\t}\n\tif (t === \"bigint\" || t === \"bigintunsigned\")\n\t\treturn dialect === \"mysql\" ? \"bigint\" : \"bigint\";\n\tif (t === \"bool\" || t === \"boolean\")\n\t\treturn dialect === \"mysql\" ? \"boolean\" : \"boolean\";\n\tif (t === \"float\" || t === \"number\" || t === \"real\" || t === \"double\") {\n\t\treturn dialect === \"mysql\" ? \"double\" : \"real\";\n\t}\n\tif (t === \"datetime\" || t === \"timestamp\" || t === \"date\") {\n\t\treturn dialect === \"mysql\"\n\t\t\t? \"timestamp\"\n\t\t\t: dialect === \"postgres\"\n\t\t\t\t? \"timestamp\"\n\t\t\t\t: \"integer\";\n\t}\n\tif (t === \"json\" || t === \"jsonb\") {\n\t\treturn dialect === \"mysql\" ? \"text\" : \"text\";\n\t}\n\treturn \"text\";\n}\n\n/** Whether the column needs a notNull() modifier by default. */\nexport function shouldBeNotNull(type: string): boolean {\n\treturn type !== \"text\";\n}\n",
68
+ "/**\n * `nx make:listener <Name>` — scaffold an event listener class.\n *\n * Generates:\n * - app/events/listeners/<name>.listener.ts\n * — an @Injectable class with example @OnEvent handlers\n *\n * Usage:\n * nx make:listener UserEvents\n * nx make:listener OrderEvents --pattern \"order.*\"\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger, nameVariants, render, writeFile } from \"../core/index.js\";\n\nconst LISTENER_TEMPLATE = `\nimport { Inject, Injectable } from 'nexusjs';\nimport { EventService, OnEvent } from 'nexusjs/events';\n\n/**\n * {{ name }} listener — generated by \\`nx make:listener {{ name }}\\`.\n *\n * Register handlers below with \\`@OnEvent(pattern)\\`. Pair with\n * \\`scanForListeners(this, eventService)\\` at boot.\n */\n@Injectable()\nexport class {{ name }}Listener {\n constructor(@Inject(EventService.TOKEN) private readonly events: EventService) {}\n\n // TODO: add @OnEvent('your.event') handlers below.\n\n // @OnEvent('user.created')\n // async onUserCreated(payload: { userId: string; email: string }) {\n // this.events; // unused — remove if you don't need it\n // }\n}\n\nimport { scanForListeners } from 'nexusjs/events';\n\n/**\n * Bootstrap helper — call this from your main.ts (or wherever you\n * wire up the application) to register every \\`@OnEvent\\` handler\n * on this listener class.\n */\nexport async function register{{ name }}(listener: {{ name }}Listener, events: EventService) {\n return scanForListeners(listener, events);\n}\n`.trimStart();\n\nexport const makeListenerCommand: Command = {\n\tname: \"make:listener\",\n\taliases: [\"ml\", \"make-listener\"],\n\tsummary: \"Scaffold an event listener class\",\n\tdescription:\n\t\t\"Generates an @Injectable listener class with example @OnEvent handlers under app/events/listeners/.\",\n\texamples: [\"nx make:listener UserEvents\", \"nx make:listener OrderEvents\"],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:listener <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst code = render(LISTENER_TEMPLATE, {\n\t\t\tname: variants.pascal,\n\t\t\tkebab: variants.kebab,\n\t\t});\n\t\tconst out = resolve(\n\t\t\tctx.cwd,\n\t\t\t\"app/events/listeners\",\n\t\t\t`${variants.kebab}.listener.ts`,\n\t\t);\n\n\t\tif (writeFile(out, code, { skipIfExists: true })) {\n\t\t\tlogger.success(`created ${out}`);\n\t\t} else {\n\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(\"1. Add @OnEvent('your.event') handlers to the class.\");\n\t\tlogger.info(`2. Import + register at boot:`);\n\t\tlogger.info(` scanForListeners(listener, events)`);\n\t\tlogger.info(`3. Emit events from anywhere:`);\n\t\tlogger.info(` await events.emit('user.created', { userId: '1' })`);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nexport default makeListenerCommand;\n",
69
+ "/**\n * `nx make:middleware <Name>` — generate a middleware class.\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger, nameVariants, render, writeFile } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\nexport const makeMiddlewareCommand: Command = {\n\tname: \"make:middleware\",\n\taliases: [\"mwm\", \"make-middleware\"],\n\tsummary: \"Generate a middleware class\",\n\tdescription:\n\t\t\"Generates an @Injectable() middleware class with a `handle(c, next)` method.\",\n\texamples: [\"nx make:middleware Auth\", \"nx make:middleware RateLimit\"],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:middleware <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst code = render(templates.middleware, {\n\t\t\tname: variants.pascal,\n\t\t});\n\n\t\tconst out = resolve(\n\t\t\tctx.cwd,\n\t\t\tctx.config.paths.middleware,\n\t\t\t`${variants.kebab}.middleware.ts`,\n\t\t);\n\n\t\twriteFile(out, code);\n\t\tlogger.success(`created ${out}`);\n\t\tlogger.finger(\n\t\t\t`register with: app.server.app.use('*', new ${variants.pascal}Middleware().handle)`,\n\t\t);\n\t\treturn 0;\n\t},\n};\n\nexport default makeMiddlewareCommand;\n",
70
+ "/**\n * `nx make:migration <Name>` — generate a database migration.\n *\n * Filename pattern: `YYYYMMDD_HHmmss_<snake>.sql` (or `.ts` for\n * Drizzle). The file is placed under the configured `paths.migrations`\n * directory.\n *\n * Drizzle dialect is chosen via `--dialect` (postgres | mysql | sqlite\n * | bun-sqlite | d1) or `nx.config.ts`'s `dialect` field. Default: bun-sqlite.\n *\n * Drizzle migrations are TypeScript files that export a `pgTable` /\n * `mysqlTable` / `sqliteTable` definition — the same shape as\n * `nx make:model` — and are loaded by the Drizzle migrator at runtime.\n *\n * Plain SQL migrations work for any dialect that uses Drizzle's\n * migrator (postgres-js / node-postgres / mysql2 / better-sqlite3).\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger, nameVariants, render, writeFile } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\nimport {\n\tmapDrizzleType,\n\trenderDrizzleDialect,\n} from \"../templates/model/drizzle-dialect.js\";\n\nexport const makeMigrationCommand: Command = {\n\tname: \"make:migration\",\n\taliases: [\"mkm\", \"make-migration\"],\n\tsummary: \"Generate a migration file\",\n\tdescription:\n\t\t\"Generates a migration under app/database/migrations/. The template is chosen from nx.config.ts's `orm` field. Use --dialect for Drizzle migrations.\",\n\texamples: [\n\t\t\"nx make:migration create_users_table\",\n\t\t\"nx make:migration add_email_to_users --orm drizzle --dialect postgres\",\n\t\t\"nx make:migration drop_old_index --orm none\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"columns\",\n\t\t\tdescription: \"Comma-separated `name:type` pairs (default: title:text)\",\n\t\t},\n\t\t{\n\t\t\tname: \"orm\",\n\t\t\tdescription: \"Override ORM driver (drizzle|prisma|kysely|none)\",\n\t\t},\n\t\t{\n\t\t\tname: \"dialect\",\n\t\t\tdescription:\n\t\t\t\t\"Drizzle dialect (postgres|mysql|sqlite|bun-sqlite|d1). Default: bun-sqlite\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:migration <Name> [--dialect ...]\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst orm = (ctx.flags[\"orm\"] as string | undefined) ?? ctx.config.orm;\n\t\tconst dialect =\n\t\t\t(ctx.flags[\"dialect\"] as string | undefined) ??\n\t\t\tctx.config.dialect ??\n\t\t\t\"bun-sqlite\";\n\t\tconst isDrizzle = orm === \"drizzle\";\n\t\tconst useGenericSql =\n\t\t\torm === \"none\" || orm === \"prisma\" || orm === \"kysely\";\n\n\t\tconst variants = nameVariants(name);\n\t\tconst tableName = inferTableName(name);\n\t\tconst colsFlag = ctx.flags[\"columns\"] as string | string[] | undefined;\n\t\tconst cols = parseColumns(colsFlag ?? \"title:text\");\n\t\t// For Drizzle: use the dialect-aware TS-style column rendering\n\t\t// (e.g. `text('email')`, `integer('age')`). For plain SQL: keep\n\t\t// the raw SQL syntax.\n\t\tconst drizzleColumns = renderDrizzleColumns(cols, dialect);\n\t\tconst sqlColumns = renderSqlColumns(cols, dialect);\n\n\t\tlet code: string;\n\t\tlet extension: string;\n\t\tif (isDrizzle) {\n\t\t\tif (!isValidDialect(dialect)) {\n\t\t\t\tlogger.error(\n\t\t\t\t\t`Unsupported drizzle dialect: ${dialect}. Allowed: postgres, mysql, sqlite, bun-sqlite, d1.`,\n\t\t\t\t);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tcode = renderDrizzleDialect(dialect);\n\t\t\tcode = render(code, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tsnake: variants.snake,\n\t\t\t\ttableName,\n\t\t\t\tcolumns: drizzleColumns,\n\t\t\t\ttimestamp: formatTimestamp(new Date()),\n\t\t\t});\n\t\t\textension = \"ts\";\n\t\t} else if (useGenericSql) {\n\t\t\tconst tpl = templates.migration.sql;\n\t\t\tcode = render(tpl, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tsnake: variants.snake,\n\t\t\t\ttableName,\n\t\t\t\tcolumns: sqlColumns,\n\t\t\t\ttimestamp: formatTimestamp(new Date()),\n\t\t\t});\n\t\t\textension = \"sql\";\n\t\t} else {\n\t\t\tlogger.error(\n\t\t\t\t`Unsupported ORM for migration: ${orm}. Allowed: drizzle, none, prisma, kysely.`,\n\t\t\t);\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst filename = `${formatTimestamp(new Date())}_${variants.snake}.${extension}`;\n\t\tconst out = resolve(ctx.cwd, ctx.config.paths.migrations, filename);\n\n\t\twriteFile(out, code);\n\t\tlogger.success(`created ${out}`);\n\t\tif (isDrizzle) {\n\t\t\tlogger.finger(`run \\`nx migrate\\` to apply pending migrations.`);\n\t\t} else {\n\t\t\tlogger.finger(`run \\`bunx drizzle-kit migrate\\` or your migration tool.`);\n\t\t}\n\t\treturn 0;\n\t},\n};\n\nfunction isValidDialect(\n\td: string,\n): d is \"postgres\" | \"mysql\" | \"sqlite\" | \"bun-sqlite\" | \"d1\" {\n\treturn [\"postgres\", \"mysql\", \"sqlite\", \"bun-sqlite\", \"d1\"].includes(d);\n}\n\nfunction inferTableName(input: string): string {\n\t// `create_users_table` → `users`; `add_email_to_users` → `users`;\n\t// `Posts` → `posts`; fallback to the lowercased input.\n\tconst m = /^create_(\\w+)_table$/.exec(input);\n\tif (m) return m[1]!;\n\tconst m2 = /^(?:add|remove|drop|alter)_(\\w+)_to_(\\w+)$/.exec(input);\n\tif (m2) return m2[2]!;\n\treturn input.toLowerCase().replace(/s$/, \"\") + \"s\";\n}\n\nfunction parseColumns(input: string | string[]): Array<[string, string]> {\n\tconst list = Array.isArray(input) ? input : input.split(\",\");\n\treturn list\n\t\t.map((s) => s.trim())\n\t\t.filter(Boolean)\n\t\t.map((c) => {\n\t\t\tconst [name, type = \"text\"] = c.split(\":\");\n\t\t\treturn [name!, type];\n\t\t});\n}\n\nfunction renderSqlColumns(\n\tcols: Array<[string, string]>,\n\tdialect: string,\n): string {\n\treturn cols\n\t\t.map(([name, type]) => {\n\t\t\tconst sqlType = mapSqlType(type, dialect);\n\t\t\tconst notNull = /NOT NULL/i.test(sqlType) ? \"\" : \" NOT NULL\";\n\t\t\treturn ` ${name} ${sqlType}${notNull},`;\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nfunction renderDrizzleColumns(\n\tcols: Array<[string, string]>,\n\tdialect: string,\n): string {\n\treturn cols\n\t\t.map(([name, type]) => {\n\t\t\tconst helper = mapDrizzleType(dialect, type);\n\t\t\treturn ` ${name}: ${helper}('${name}'),`;\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nfunction mapSqlType(t: string, dialect: string): string {\n\tconst type = t.toLowerCase();\n\tswitch (type) {\n\t\tcase \"text\":\n\t\tcase \"string\":\n\t\tcase \"varchar\":\n\t\t\treturn dialect === \"mysql\" ? \"VARCHAR(255)\" : \"TEXT\";\n\t\tcase \"int\":\n\t\tcase \"integer\":\n\t\t\treturn dialect === \"postgres\"\n\t\t\t\t? \"INTEGER\"\n\t\t\t\t: dialect === \"mysql\"\n\t\t\t\t\t? \"INT\"\n\t\t\t\t\t: \"INTEGER\";\n\t\tcase \"bigint\":\n\t\tcase \"bigintunsigned\":\n\t\t\treturn dialect === \"postgres\" ? \"BIGINT\" : \"BIGINT UNSIGNED\";\n\t\tcase \"serial\":\n\t\t\treturn dialect === \"postgres\" ? \"SERIAL\" : \"INTEGER AUTO_INCREMENT\";\n\t\tcase \"bool\":\n\t\tcase \"boolean\":\n\t\t\treturn dialect === \"mysql\" ? \"BOOLEAN\" : \"BOOLEAN\";\n\t\tcase \"float\":\n\t\tcase \"number\":\n\t\tcase \"real\":\n\t\tcase \"double\":\n\t\t\treturn dialect === \"mysql\" ? \"DOUBLE\" : \"REAL\";\n\t\tcase \"datetime\":\n\t\tcase \"timestamp\":\n\t\t\treturn dialect === \"postgres\"\n\t\t\t\t? \"TIMESTAMP\"\n\t\t\t\t: dialect === \"mysql\"\n\t\t\t\t\t? \"DATETIME\"\n\t\t\t\t\t: \"INTEGER\";\n\t\tcase \"date\":\n\t\t\treturn dialect === \"mysql\" ? \"DATE\" : \"TEXT\";\n\t\tcase \"json\":\n\t\t\treturn dialect === \"postgres\"\n\t\t\t\t? \"JSONB\"\n\t\t\t\t: dialect === \"mysql\"\n\t\t\t\t\t? \"JSON\"\n\t\t\t\t\t: \"TEXT\";\n\t\tcase \"jsonb\":\n\t\t\treturn dialect === \"postgres\" ? \"JSONB\" : \"TEXT\";\n\t\tdefault:\n\t\t\treturn \"TEXT\";\n\t}\n}\n\nfunction formatTimestamp(d: Date): string {\n\tconst pad = (n: number) => String(n).padStart(2, \"0\");\n\treturn (\n\t\t`${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}` +\n\t\t`_${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`\n\t);\n}\n\nexport default makeMigrationCommand;\n",
71
+ "/**\n * `nx make:model <Name>` — generate a model (table schema).\n *\n * Supports three ORMs via `nx.config.ts`'s `orm` field:\n * - drizzle → Drizzle table definition (dialect-aware)\n * - prisma → schema.prisma block + typed repository\n * - kysely → table interface + typed repository\n *\n * For Drizzle, the `--dialect` flag selects the right import path and\n * column types: postgres | mysql | sqlite | bun-sqlite | d1. Default\n * is `bun-sqlite` (the typical Bun + local-dev setup).\n *\n * Columns are read from the optional `--columns` flag as a comma-separated\n * list of `name:type` pairs:\n *\n * nx make:model User --columns \"name:text,email:text,bio:text\"\n * nx make:model Post --orm drizzle --dialect postgres --columns \"title:text,body:text,published:boolean\"\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport {\n\tflagList,\n\tlogger,\n\tnameVariants,\n\trender,\n\twriteFile,\n} from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\nimport {\n\tmapDrizzleType,\n\trenderDrizzleDialect,\n} from \"../templates/model/drizzle-dialect.js\";\n\nexport const makeModelCommand: Command = {\n\tname: \"make:model\",\n\taliases: [\"mmodel\", \"make-model\"],\n\tsummary: \"Generate a model (table schema)\",\n\tdescription:\n\t\t\"Generates a model file under app/models/. The template is chosen from nx.config.ts's `orm` field (drizzle|prisma|kysely). For drizzle, use --dialect to pick the import path.\",\n\texamples: [\n\t\t\"nx make:model User\",\n\t\t'nx make:model User --columns \"name:text,email:text\"',\n\t\t\"nx make:model User --orm drizzle --dialect postgres\",\n\t\t\"nx make:model Post --orm drizzle --dialect postgres --columns 'title:text,body:text,published:boolean'\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"columns\",\n\t\t\tdescription: \"Comma-separated `name:type` pairs (default: title:text)\",\n\t\t},\n\t\t{\n\t\t\tname: \"orm\",\n\t\t\tdescription: \"Override ORM driver (drizzle|prisma|kysely)\",\n\t\t},\n\t\t{\n\t\t\tname: \"dialect\",\n\t\t\tdescription:\n\t\t\t\t\"Drizzle dialect (postgres|mysql|sqlite|bun-sqlite|d1). Default: bun-sqlite\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\n\t\t\t\t\"Usage: nx make:model <Name> [--columns name:type,...] [--dialect ...]\",\n\t\t\t);\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst orm = (ctx.flags[\"orm\"] as string | undefined) ?? ctx.config.orm;\n\t\tif (orm !== \"drizzle\" && orm !== \"prisma\" && orm !== \"kysely\") {\n\t\t\tlogger.error(\n\t\t\t\t`Unsupported ORM: ${orm}. Allowed: drizzle, prisma, kysely. Use --orm or set \"orm\" in nx.config.ts.`,\n\t\t\t);\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst tableName = variants.pluralSnake;\n\n\t\t// Parse --columns. Default to a single `title:text` column.\n\t\tconst colsFlag = flagList(ctx.flags, \"columns\");\n\t\tconst columns = colsFlag.length > 0 ? colsFlag : [\"title:text\"];\n\t\tconst columnLines = renderColumns(\n\t\t\tcolumns,\n\t\t\torm,\n\t\t\tctx.flags[\"dialect\"] as string | undefined,\n\t\t);\n\t\tconst prismaBlock = renderPrismaBlock(variants.pascal, columns);\n\n\t\tlet code: string;\n\t\tif (orm === \"drizzle\") {\n\t\t\tconst dialect =\n\t\t\t\t(ctx.flags[\"dialect\"] as string | undefined) ??\n\t\t\t\tctx.config.dialect ??\n\t\t\t\t\"bun-sqlite\";\n\t\t\tif (!isValidDialect(dialect)) {\n\t\t\t\tlogger.error(\n\t\t\t\t\t`Unsupported drizzle dialect: ${dialect}. Allowed: postgres, mysql, sqlite, bun-sqlite, d1.`,\n\t\t\t\t);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tcode = renderDrizzleDialect(dialect);\n\t\t\tcode = render(code, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\tsnake: variants.snake,\n\t\t\t\ttableName,\n\t\t\t\tcolumns: columnLines,\n\t\t\t\tprismaBlock,\n\t\t\t});\n\t\t} else {\n\t\t\tconst tpl = templates.model[orm as \"prisma\" | \"kysely\"];\n\t\t\tcode = render(tpl, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tcamel: variants.camel,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t\tsnake: variants.snake,\n\t\t\t\ttableName,\n\t\t\t\tcolumns: columnLines,\n\t\t\t\tprismaBlock,\n\t\t\t});\n\t\t}\n\n\t\tconst out = resolve(\n\t\t\tctx.cwd,\n\t\t\tctx.config.paths.models,\n\t\t\t`${variants.kebab}.model.ts`,\n\t\t);\n\n\t\twriteFile(out, code);\n\t\tlogger.success(`created ${out}`);\n\t\tlogger.finger(\n\t\t\t`run \\`nx make:migration create_${tableName}_table\\` to scaffold a migration.`,\n\t\t);\n\t\tif (orm === \"drizzle\") {\n\t\t\tlogger.finger(\n\t\t\t\t`run \\`nx migrate\\` to apply pending migrations to the database.`,\n\t\t\t);\n\t\t}\n\t\treturn 0;\n\t},\n};\n\nfunction isValidDialect(\n\td: string,\n): d is \"postgres\" | \"mysql\" | \"sqlite\" | \"bun-sqlite\" | \"d1\" {\n\treturn [\"postgres\", \"mysql\", \"sqlite\", \"bun-sqlite\", \"d1\"].includes(d);\n}\n\nfunction renderColumns(\n\tcols: string[],\n\torm: \"drizzle\" | \"prisma\" | \"kysely\",\n\tdialect: string | undefined,\n): string {\n\t// `cols` may contain comma-separated entries (e.g. `--columns \"a:text,b:int\"`).\n\tconst flat = cols\n\t\t.flatMap((c) => c.split(\",\"))\n\t\t.map((c) => c.trim())\n\t\t.filter(Boolean);\n\treturn flat\n\t\t.map((col) => {\n\t\t\tconst [colName, colType = \"text\"] = col.split(\":\");\n\t\t\tconst tsName = toCamel(colName);\n\t\t\tswitch (orm) {\n\t\t\t\tcase \"drizzle\": {\n\t\t\t\t\tconst d = (dialect ?? \"bun-sqlite\") as\n\t\t\t\t\t\t| \"postgres\"\n\t\t\t\t\t\t| \"mysql\"\n\t\t\t\t\t\t| \"sqlite\"\n\t\t\t\t\t\t| \"bun-sqlite\"\n\t\t\t\t\t\t| \"d1\";\n\t\t\t\t\tconst helper = mapDrizzleType(d, colType);\n\t\t\t\t\treturn ` ${tsName}: ${helper}('${colName}'),`;\n\t\t\t\t}\n\t\t\t\tcase \"kysely\": {\n\t\t\t\t\tconst tsType = colType === \"text\" ? \"string\" : colType;\n\t\t\t\t\treturn ` ${colName}: ${tsType},`;\n\t\t\t\t}\n\t\t\t\tcase \"prisma\":\n\t\t\t\tdefault:\n\t\t\t\t\treturn ` ${colName} ${colType},`;\n\t\t\t}\n\t\t})\n\t\t.join(\"\\n\");\n}\n\nfunction renderPrismaBlock(modelName: string, cols: string[]): string {\n\tconst fieldLines = cols\n\t\t.map((c) => {\n\t\t\tconst [name, type = \"String\"] = c.split(\":\");\n\t\t\treturn ` ${name.padEnd(16)} ${capitalize(type)}`;\n\t\t})\n\t\t.join(\"\\n\");\n\treturn ` * model ${modelName} {\n * id Int @id @default(autoincrement())\n${fieldLines\n\t.split(\"\\n\")\n\t.map((l) => ` *${l}`)\n\t.join(\"\\n\")}\n * createdAt DateTime @default(now())\n * updatedAt DateTime @updatedAt\n * }`;\n}\n\nfunction toCamel(s: string): string {\n\treturn s.replace(/_([a-z])/g, (_, c) => c.toUpperCase());\n}\n\nfunction capitalize(s: string): string {\n\treturn s.charAt(0).toUpperCase() + s.slice(1);\n}\n\nexport default makeModelCommand;\n",
72
+ "/**\n * `nx make:module <Name>` — generate a feature module.\n *\n * A module aggregates a controller, service, and (optionally) a\n * repository under a single `@Module({ controllers, providers, exports })`\n * class.\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport {\n\tflagBool,\n\tlogger,\n\tnameVariants,\n\trender,\n\twriteFile,\n} from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\nexport const makeModuleCommand: Command = {\n\tname: \"make:module\",\n\taliases: [\"mm\", \"make-module\"],\n\tsummary: \"Generate a feature module\",\n\tdescription:\n\t\t\"Generates a @Module() class that wires a controller + service (+ optional repository) under app/modules/.\",\n\texamples: [\"nx make:module User\", \"nx make:module User --no-controller\"],\n\tflags: [\n\t\t{\n\t\t\tname: \"no-controller\",\n\t\t\tdescription: \"Skip including the controller in the module\",\n\t\t},\n\t\t{ name: \"no-service\", description: \"Skip including the service\" },\n\t\t{ name: \"no-repo\", description: \"Skip including the repository\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:module <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst hasController = !flagBool(ctx.flags, \"no-controller\", false);\n\t\tconst hasService = !flagBool(ctx.flags, \"no-service\", false);\n\t\tconst hasRepo =\n\t\t\t!flagBool(ctx.flags, \"no-repo\", false) && ctx.config.orm !== \"none\";\n\n\t\tconst code = render(templates.module, {\n\t\t\tname: variants.pascal,\n\t\t\tkebab: variants.kebab,\n\t\t\tcontroller: `${variants.pascal}Controller`,\n\t\t\tservice: `${variants.pascal}Service`,\n\t\t\trepository: `${variants.pascal}Repository`,\n\t\t\thasService,\n\t\t\thasRepo,\n\t\t});\n\n\t\tconst out = resolve(\n\t\t\tctx.cwd,\n\t\t\tctx.config.paths.modules,\n\t\t\t`${variants.kebab}.module.ts`,\n\t\t);\n\n\t\twriteFile(out, code);\n\t\tlogger.success(`created ${out}`);\n\t\tlogger.finger(`add ${variants.pascal}Module to AppModule.imports.`);\n\t\treturn 0;\n\t},\n};\n\nexport default makeModuleCommand;\n",
73
+ "/**\n * `nx make:queue <Name>` — scaffold a queue worker.\n *\n * Generates:\n * - app/queue/workers/<name>.worker.ts — @OnQueueReady handler class\n * - app/queue/jobs/<name>.job.ts — a `enqueue*` helper for callers\n * - prints wiring instructions\n *\n * Usage:\n * nx make:queue send-welcome-email --backend bullmq\n * nx make:queue process-image --backend cloudflare\n * nx make:queue notify --backend memory\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport {\n\tflagBool,\n\tlogger,\n\tnameVariants,\n\trender,\n\twriteFile,\n} from \"../core/index.js\";\n\nconst WORKER_TEMPLATE = `\nimport { Inject, Injectable } from 'nexusjs';\nimport { QueueService, OnQueueReady } from 'nexusjs/queue';\n\n/**\n * {{ name }} worker — generated by \\`nx make:queue {{ name }}\\`.\n *\n * Registers a handler for the \\`{{ name }}\\` job name on boot.\n */\n@Injectable()\nexport class {{ name }}Worker {\n constructor(@Inject(QueueService.TOKEN) private readonly queue: QueueService) {}\n\n @OnQueueReady()\n async register(): Promise<void> {\n await this.queue.process('{{ name }}', async (data, ctx) => {\n ctx.prefix; // → \"[queue:{{ name }}]\"\n try {\n await this.handle(data as {{ name }}Data);\n return { status: 'completed' };\n } catch (err) {\n return {\n status: 'failed',\n error: err instanceof Error ? err : new Error(String(err)),\n willRetry: ctx.attempts < 3,\n };\n }\n });\n }\n\n /**\n * Replace this body with your actual worker logic.\n */\n async handle(data: {{ name }}Data): Promise<void> {\n // TODO: implement\n }\n}\n\n/**\n * Typed payload for the \\`{{ name }}\\` job.\n */\nexport interface {{ name }}Data {\n // TODO: define fields\n [key: string]: unknown;\n}\n`.trimStart();\n\nconst JOB_HELPER_TEMPLATE = `\nimport { Inject, Injectable } from 'nexusjs';\nimport { QueueService } from 'nexusjs/queue';\nimport type { {{ name }}Data } from './{{ kebab }}.worker.js';\n\n/**\n * Helper for enqueuing \\`{{ name }}\\` jobs from controllers / services.\n * Generated by \\`nx make:queue {{ name }}\\`.\n */\n@Injectable()\nexport class {{ name }}Job {\n constructor(@Inject(QueueService.TOKEN) private readonly queue: QueueService) {}\n\n /** Enqueue a single {{ name }} job. */\n async enqueue(data: {{ name }}Data, options?: {\n delaySeconds?: number;\n attempts?: number;\n }) {\n return this.queue.add('{{ name }}', data, options);\n }\n\n /** Enqueue many at once. */\n async enqueueBatch(items: {{ name }}Data[]) {\n return this.queue.addBatch(\n items.map((data) => ({ name: '{{ name }}', data })),\n );\n }\n}\n`.trimStart();\n\nconst WIRE_HINT = `\nimport { QueueService } from 'nexusjs/queue';\nimport { %%NAME%%Job } from './queue/jobs/%%KEBAB%%.job.js';\nimport { %%NAME%%Worker } from './queue/workers/%%KEBAB%%.worker.js';\n\n@Module({\n providers: [%%NAME%%Job, %%NAME%%Worker],\n})\nexport class QueueBindingsModule {}\n`.trim();\n\nexport const makeQueueCommand: Command = {\n\tname: \"make:queue\",\n\taliases: [\"mq\", \"make-queue\"],\n\tsummary: \"Scaffold a queue worker\",\n\tdescription:\n\t\t\"Generates a worker class + enqueue helper under app/queue/. The backend is read from nx.config.ts (or --backend).\",\n\texamples: [\n\t\t\"nx make:queue send-welcome-email\",\n\t\t\"nx make:queue process-image --backend cloudflare\",\n\t\t\"nx make:queue notify --backend memory\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"backend\",\n\t\t\tdescription: \"Override backend (bullmq|cloudflare|memory)\",\n\t\t},\n\t\t{\n\t\t\tname: \"no-job\",\n\t\t\tdescription: \"Skip the enqueue helper, only generate the worker\",\n\t\t},\n\t\t{\n\t\t\tname: \"no-worker\",\n\t\t\tdescription: \"Skip the worker class, only generate the enqueue helper\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:queue <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst backend =\n\t\t\t(ctx.flags[\"backend\"] as string | undefined) ??\n\t\t\tctx.config.queue?.backend ??\n\t\t\t\"memory\";\n\n\t\tif (![\"bullmq\", \"cloudflare\", \"memory\"].includes(backend)) {\n\t\t\tlogger.error(\n\t\t\t\t`Unknown backend: ${backend}. Allowed: bullmq, cloudflare, memory.`,\n\t\t\t);\n\t\t\treturn 1;\n\t\t}\n\n\t\tlogger.heading(`Scaffolding ${variants.pascal} (backend=${backend})`);\n\n\t\t// 1) Worker\n\t\tif (!flagBool(ctx.flags, \"no-worker\", false)) {\n\t\t\tconst code = render(WORKER_TEMPLATE, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t});\n\t\t\tconst out = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\t\"app/queue/workers\",\n\t\t\t\t`${variants.kebab}.worker.ts`,\n\t\t\t);\n\t\t\tif (writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t}\n\t\t}\n\n\t\t// 2) Enqueue helper\n\t\tif (!flagBool(ctx.flags, \"no-job\", false)) {\n\t\t\tconst code = render(JOB_HELPER_TEMPLATE, {\n\t\t\t\tname: variants.pascal,\n\t\t\t\tkebab: variants.kebab,\n\t\t\t});\n\t\t\tconst out = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\t\"app/queue/jobs\",\n\t\t\t\t`${variants.kebab}.job.ts`,\n\t\t\t);\n\t\t\tif (writeFile(out, code, { skipIfExists: true })) {\n\t\t\t\tlogger.success(`created ${out}`);\n\t\t\t} else {\n\t\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t\t}\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(`1. Add QueueModule.forRoot() to your AppModule.imports:`);\n\t\tlogger.info(` QueueModule.forRoot({ backend: '${backend}', ... })`);\n\t\tlogger.info(`2. Wire the worker + helper as providers:`);\n\t\tlogger.info(\n\t\t\trender(WIRE_HINT, { name: variants.pascal, kebab: variants.kebab })\n\t\t\t\t.split(\"\\n\")\n\t\t\t\t.map((l) => \" \" + l)\n\t\t\t\t.join(\"\\n\"),\n\t\t);\n\t\tlogger.info(\n\t\t\t`3. Replace the TODO in ${variants.pascal}Worker.handle() with your logic.`,\n\t\t);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nexport default makeQueueCommand;\n",
74
+ "/**\n * `nx make:schedule <Name>` — scaffold a scheduled task class.\n *\n * Generates:\n * - app/schedule/tasks/<name>.task.ts\n * — an @Injectable class with example @Cron / @Interval /\n * @Timeout handlers\n *\n * Usage:\n * nx make:schedule HourlyCleanup\n * nx make:schedule DailyDigest --cron \"@daily\"\n * nx make:schedule Heartbeat --interval 30000\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger, nameVariants, render, writeFile } from \"../core/index.js\";\n\nconst TASK_TEMPLATE = `\nimport { Inject, Injectable } from 'nexusjs';\nimport { Cron, Interval, Timeout, ScheduleService } from 'nexusjs/schedule';\n\n/**\n * {{ name }} task — generated by \\`nx make:schedule {{ name }}\\`.\n *\n * Mark methods with \\`@Cron\\`, \\`@Interval\\`, or \\`@Timeout\\` and register\n * them at boot via \\`scanForSchedulers(this, scheduleService)\\`.\n */\n@Injectable()\nexport class {{ name }}Task {\n constructor(@Inject(ScheduleService.TOKEN) private readonly schedule: ScheduleService) {}\n\n // TODO: add @Cron, @Interval, or @Timeout handlers below.\n\n // @Cron('0 * * * *') // every hour\n // async hourly() {\n // this.schedule; // unused — remove if you don't need it\n // }\n\n // @Interval(60_000) // every minute\n // async tick() { /* ... */ }\n\n // @Timeout(5_000) // 5s after boot\n // async startup() { /* ... */ }\n}\n\nimport { scanForSchedulers } from 'nexusjs/schedule';\n\n/**\n * Bootstrap helper — call from main.ts to register every @Cron /\n * @Interval / @Timeout handler on this task class.\n */\nexport async function register{{ name }}(task: {{ name }}Task, schedule: ScheduleService) {\n return scanForSchedulers(task, schedule);\n}\n`.trimStart();\n\nexport const makeScheduleCommand: Command = {\n\tname: \"make:schedule\",\n\taliases: [\"msk\", \"make-schedule\"],\n\tsummary: \"Scaffold a scheduled task class\",\n\tdescription:\n\t\t\"Generates an @Injectable task class with example @Cron / @Interval / @Timeout handlers under app/schedule/tasks/.\",\n\texamples: [\"nx make:schedule HourlyCleanup\", \"nx make:schedule DailyDigest\"],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:schedule <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst code = render(TASK_TEMPLATE, {\n\t\t\tname: variants.pascal,\n\t\t\tkebab: variants.kebab,\n\t\t});\n\t\tconst out = resolve(\n\t\t\tctx.cwd,\n\t\t\t\"app/schedule/tasks\",\n\t\t\t`${variants.kebab}.task.ts`,\n\t\t);\n\n\t\tif (writeFile(out, code, { skipIfExists: true })) {\n\t\t\tlogger.success(`created ${out}`);\n\t\t} else {\n\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(\"1. Add @Cron / @Interval / @Timeout handlers to the class.\");\n\t\tlogger.info(`2. Import + register at boot:`);\n\t\tlogger.info(` scanForSchedulers(task, schedule)`);\n\t\tlogger.info(\n\t\t\t`3. Don't forget to call \\`schedule.start()\\` to begin the tick.`,\n\t\t);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nexport default makeScheduleCommand;\n",
75
+ "/**\n * `nx make:service <Name>` — generate a service class.\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger, nameVariants, render, writeFile } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\nexport const makeServiceCommand: Command = {\n\tname: \"make:service\",\n\taliases: [\"ms\", \"make-service\"],\n\tsummary: \"Generate a service class\",\n\tdescription:\n\t\t\"Generates an @Injectable() service under app/services/. If the project's ORM is configured, the service constructor takes a repository.\",\n\texamples: [\"nx make:service User\", \"nx make:service Order --no-repo\"],\n\tflags: [\n\t\t{\n\t\t\tname: \"no-repo\",\n\t\t\tdescription: \"Skip injecting a repository (no ORM dependency)\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:service <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst hasRepo = ctx.flags[\"no-repo\"] !== true && ctx.config.orm !== \"none\";\n\t\tconst repository = `${variants.pascal}Repository`;\n\t\tconst repositoryCamel = variants.camel + \"Repository\";\n\n\t\tconst code = render(templates.service, {\n\t\t\tname: variants.pascal,\n\t\t\tcamel: variants.camel,\n\t\t\tkebab: variants.kebab,\n\t\t\thasRepo,\n\t\t\trepository,\n\t\t\trepositoryCamel,\n\t\t});\n\n\t\tconst out = resolve(\n\t\t\tctx.cwd,\n\t\t\tctx.config.paths.services,\n\t\t\t`${variants.kebab}.service.ts`,\n\t\t);\n\n\t\twriteFile(out, code);\n\t\tlogger.success(`created ${out}`);\n\t\treturn 0;\n\t},\n};\n\nexport default makeServiceCommand;\n",
76
+ "/**\n * `nx make:session <Name>` — scaffold a session helper class.\n *\n * Generates:\n * - app/session/services/<name>.session.ts\n * — an @Injectable class with example session helpers\n *\n * Usage:\n * nx make:session Cart\n * nx make:session Flash --data \"message: string\"\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger, nameVariants, render, writeFile } from \"../core/index.js\";\n\nconst SESSION_TEMPLATE = `\nimport { Inject, Injectable } from 'nexusjs';\nimport { SessionService } from 'nexusjs/session';\nimport type { SessionRecord } from 'nexusjs/session';\n\n/**\n * {{ name }} session helper — generated by \\`nx make:session {{ name }}\\`.\n *\n * Wraps SessionService with typed accessors for the {{ name }} session's\n * data. Use from controllers / services.\n */\n@Injectable()\nexport class {{ name }}Session {\n constructor(@Inject(SessionService.TOKEN) private readonly sessions: SessionService) {}\n\n /** Read the current session record (or null). */\n async getCurrent(sessionId: string | null | undefined) {\n if (!sessionId) return null;\n return this.sessions.read(sessionId);\n }\n\n /** Patch the {{ name }} session's data. */\n async update(sessionId: string, patch: {{ name }}DataPatch) {\n return this.sessions.update(sessionId, { dataPatch: patch });\n }\n\n /** Destroy the session (logout-everywhere equivalent). */\n async destroy(sessionId: string) {\n return this.sessions.destroy(sessionId, 'logout');\n }\n}\n\n/**\n * Typed payload for the {{ name }} session.\n *\n * TODO: define the fields below to match your feature.\n */\nexport interface {{ name }}Data {\n // userId?: string;\n // createdAt?: string;\n}\n\nexport type {{ name }}DataPatch = Partial<{{ name }}Data>;\n`.trimStart();\n\nexport const makeSessionCommand: Command = {\n\tname: \"make:session\",\n\taliases: [\"msess\", \"make-session\"],\n\tsummary: \"Scaffold a session helper class\",\n\tdescription:\n\t\t\"Generates an @Injectable session helper under app/session/services/.\",\n\texamples: [\"nx make:session Cart\", \"nx make:session Flash\"],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:session <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst code = render(SESSION_TEMPLATE, {\n\t\t\tname: variants.pascal,\n\t\t\tkebab: variants.kebab,\n\t\t});\n\t\tconst out = resolve(\n\t\t\tctx.cwd,\n\t\t\t\"app/session/services\",\n\t\t\t`${variants.kebab}.session.ts`,\n\t\t);\n\n\t\tif (writeFile(out, code, { skipIfExists: true })) {\n\t\t\tlogger.success(`created ${out}`);\n\t\t} else {\n\t\t\tlogger.warn(`skipped (exists): ${out}`);\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(\"1. Define the typed payload (replace the TODO interface).\");\n\t\tlogger.info(`2. Inject {{name}}Session in your controllers / services.`);\n\t\tlogger.info(\"3. Bind it in the module's providers array.\");\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\nexport default makeSessionCommand;\n",
77
+ "/**\n * `nx make:validator <Name>` — generate a Zod validation schema (DTO).\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger, nameVariants, render, writeFile } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\nexport const makeValidatorCommand: Command = {\n\tname: \"make:validator\",\n\taliases: [\"mv\", \"make-validator\"],\n\tsummary: \"Generate a Zod validation schema\",\n\tdescription: \"Generates a Zod schema and inferred type under app/dto/.\",\n\texamples: [\"nx make:validator User\", \"nx make:validator CreateOrder\"],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx make:validator <Name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst variants = nameVariants(name);\n\t\tconst code = render(templates.validator, {\n\t\t\tname: variants.pascal,\n\t\t});\n\n\t\tconst out = resolve(\n\t\t\tctx.cwd,\n\t\t\tctx.config.paths.dto,\n\t\t\t`${variants.kebab}.dto.ts`,\n\t\t);\n\n\t\twriteFile(out, code);\n\t\tlogger.success(`created ${out}`);\n\t\treturn 0;\n\t},\n};\n\nexport default makeValidatorCommand;\n",
78
+ "/**\n * `nx db:migrate` — apply pending database migrations.\n *\n * Two modes:\n *\n * 1. **Default**: scan the project's `nx.config.ts` for\n * `paths.migrations` and run every pending file through the\n * drizzle-kit-equivalent migrator path.\n *\n * Implementation: spawns `bunx drizzle-kit migrate` if the\n * drizzle-kit binary is on PATH; otherwise runs an in-process\n * migration script that uses `nexusjs/drizzle`'s\n * `db.migrate(folder)` directly.\n *\n * 2. **`--status`**: list applied migrations + pending count.\n *\n * 3. **`--generate \"<name>\"`**: wrapper around `drizzle-kit\n * generate` — useful when you want to commit a migration file\n * but prefer the `nx` alias over the bare command.\n *\n * Examples:\n * nx db:migrate\n * nx db:migrate --status\n * nx db:migrate --generate \"add_user_email\"\n * nx db:migrate --folder ./drizzle --dialect postgres\n *\n * See also: `nx db:seed` for inserting fixture data.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger } from \"../core/index.js\";\n\nexport const dbMigrateCommand: Command = {\n\tname: \"db:migrate\",\n\taliases: [\"db:m\", \"migrate\"],\n\tsummary: \"Apply pending database migrations\",\n\tdescription:\n\t\t\"Runs the Drizzle migrator against the configured migrations folder. Use --status to inspect, --generate to scaffold a new migration via drizzle-kit. See also `nx db:seed` for fixture data.\",\n\texamples: [\n\t\t\"nx db:migrate\",\n\t\t\"nx db:migrate --status\",\n\t\t\"nx db:migrate --generate 'add_email_to_users'\",\n\t\t\"nx db:migrate --folder ./drizzle\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"status\",\n\t\t\tdescription: \"List applied migrations and exit (no apply).\",\n\t\t},\n\t\t{\n\t\t\tname: \"generate\",\n\t\t\tdescription: \"Run `drizzle-kit generate` with the given migration name.\",\n\t\t},\n\t\t{\n\t\t\tname: \"folder\",\n\t\t\tdescription: \"Override migrations folder (default: from nx.config.ts).\",\n\t\t},\n\t\t{\n\t\t\tname: \"dialect\",\n\t\t\tdescription:\n\t\t\t\t\"Drizzle dialect (postgres|mysql|sqlite|bun-sqlite|d1). Default: bun-sqlite.\",\n\t\t},\n\t\t{\n\t\t\tname: \"config\",\n\t\t\tdescription: \"Path to drizzle.config.ts. Default: ./drizzle.config.ts.\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst folder =\n\t\t\t(ctx.flags[\"folder\"] as string | undefined) ??\n\t\t\tresolve(ctx.cwd, ctx.config.paths.migrations);\n\t\tconst dialect =\n\t\t\t(ctx.flags[\"dialect\"] as string | undefined) ??\n\t\t\tctx.config.dialect ??\n\t\t\t\"bun-sqlite\";\n\t\tconst configPath =\n\t\t\t(ctx.flags[\"config\"] as string | undefined) ??\n\t\t\tresolve(ctx.cwd, \"drizzle.config.ts\");\n\t\tconst wantStatus = Boolean(ctx.flags[\"status\"]);\n\t\tconst generateName = ctx.flags[\"generate\"] as string | undefined;\n\n\t\tif (generateName) {\n\t\t\treturn runDrizzleKit(ctx.cwd, [\n\t\t\t\t\"generate\",\n\t\t\t\t...(existsSync(configPath) ? [`--config=${configPath}`] : []),\n\t\t\t\t\"--name\",\n\t\t\t\tgenerateName,\n\t\t\t]);\n\t\t}\n\n\t\tif (wantStatus) {\n\t\t\treturn await runStatus(\n\t\t\tctx.cwd,\n\t\t\tfolder,\n\t\t\tdialect,\n\t\t\t(ctx.config.database as any)?.url ?? \"\",\n\t\t);\n\t\t}\n\n\t\t// Default: apply pending migrations via drizzle-kit.\n\t\treturn runDrizzleKit(ctx.cwd, [\n\t\t\t\"migrate\",\n\t\t\t...(existsSync(configPath) ? [`--config=${configPath}`] : []),\n\t\t]);\n\t},\n};\n\nexport function runDrizzleKit(cwd: string, args: string[]): Promise<number> {\n\treturn new Promise((resolveP) => {\n\t\tconst cmd = \"bunx\";\n\t\tlogger.info(`$ ${cmd} drizzle-kit ${args.join(\" \")}`);\n\t\tconst child = spawn(cmd, [\"drizzle-kit\", ...args], {\n\t\t\tcwd,\n\t\t\tstdio: \"inherit\",\n\t\t\tshell: process.platform === \"win32\",\n\t\t});\n\t\tchild.on(\"exit\", (code) => resolveP(code ?? 0));\n\t\tchild.on(\"error\", (err) => {\n\t\t\tlogger.error(`failed to spawn drizzle-kit: ${err.message}`);\n\t\t\tresolveP(1);\n\t\t});\n\t});\n}\n\n/**\n * Run a tiny inline script that opens the Drizzle service and prints\n * applied migrations. Used when the user runs `nx migrate --status`\n * and we don't have a full app boot context.\n */\nasync function runStatus(\n\tcwd: string,\n\tfolder: string,\n\tdialect: string,\n\tconfigUrl: string = \"\",\n): Promise<number> {\n\tif (!existsSync(folder)) {\n\t\tlogger.warn(`migrations folder not found: ${folder}`);\n\t\treturn 0;\n\t}\n\tconst url = readEnvUrl(dialect) ?? configUrl;\n\tif (!url) {\n\t\tlogger.error(\n\t\t\t`could not read ${dialect} URL from environment. Set DATABASE_URL or NEXUS_DB_URL.`,\n\t\t);\n\t\treturn 1;\n\t}\n\tconst script = `\nimport 'reflect-metadata';\nimport { DrizzleService } from 'nexusjs/drizzle';\n\nconst url = ${JSON.stringify(url)};\nconst dialect = ${JSON.stringify(dialect)};\nconst folder = ${JSON.stringify(folder)};\n\nconst cfg = { dialect, connection: { url }, schema: dialect === 'postgres' ? 'public' : undefined };\nconst svc = new DrizzleService(cfg);\nawait svc.open();\nconst applied = await svc.appliedMigrations();\nconsole.log(JSON.stringify({ total: applied.length, applied }, null, 2));\nawait svc.close();\n`;\n\tconst tmpFile = resolve(cwd, \".nx-migrate-status.mjs\");\n\tawait import(\"node:fs/promises\").then((m) =>\n\t\tm.writeFile(tmpFile, script, \"utf-8\"),\n\t);\n\ttry {\n\t\tconst code = await new Promise<number>((resP) => {\n\t\t\tconst child = spawn(\"bun\", [tmpFile], {\n\t\t\t\tcwd,\n\t\t\t\tstdio: \"inherit\",\n\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t});\n\t\t\tchild.on(\"exit\", (c) => resP(c ?? 0));\n\t\t\tchild.on(\"error\", () => resP(1));\n\t\t});\n\t\treturn code;\n\t} finally {\n\t\tawait import(\"node:fs/promises\").then((m) =>\n\t\t\tm.unlink(tmpFile).catch(() => {}),\n\t\t);\n\t}\n}\n\nfunction readEnvUrl(dialect: string): string | null {\n\tconst url =\n\t\tprocess.env[\"DATABASE_URL\"] ??\n\t\tprocess.env[\"NEXUS_DB_URL\"] ??\n\t\t(dialect === \"postgres\"\n\t\t\t? process.env[\"POSTGRES_URL\"]\n\t\t\t: dialect === \"mysql\"\n\t\t\t\t? process.env[\"MYSQL_URL\"]\n\t\t\t\t: dialect.includes(\"sqlite\")\n\t\t\t\t\t? process.env[\"SQLITE_FILENAME\"]\n\t\t\t\t\t: null);\n\treturn url ?? null;\n}\n\n\nexport default dbMigrateCommand;\n",
79
+ "/**\n * `nx db:generate <name>` — generate a new migration file from schema changes.\n *\n * Wraps `drizzle-kit generate` with the project's config, so you\n * don't need to pass `--config` every time.\n *\n * Examples:\n * nx db:generate add_users_table\n * nx db:generate add_posts_table --dialect postgres\n * nx db:generate --sql # raw SQL file (no drizzle-kit)\n *\n * See also:\n * nx db:migrate — apply pending migrations\n * nx db:seed — run database seeds\n * nx make:migration — scaffold an empty migration file\n */\n\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger } from \"../core/index.js\";\nimport { runDrizzleKit } from \"./db-migrate.js\";\n\nexport const dbGenerateCommand: Command = {\n\tname: \"db:generate\",\n\taliases: [\"db:g\", \"db-generate\", \"generate-migration\"],\n\tsummary: \"Generate a new migration from schema changes\",\n\tdescription:\n\t\t\"Generates a new migration file by running drizzle-kit generate with the project's config. \" +\n\t\t\"If no name is given, drizzle-kit auto-generates one. \" +\n\t\t\"Run after editing your schema files, then apply with `nx db:migrate`.\",\n\texamples: [\n\t\t\"nx db:generate\",\n\t\t\"nx db:generate add_users_table\",\n\t\t\"nx db:generate add_posts --dialect postgres\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"dialect\",\n\t\t\tdescription:\n\t\t\t\t\"Database dialect (bun-sqlite|postgres|mysql|sqlite). Reads from nx.config.ts by default.\",\n\t\t},\n\t\t{\n\t\t\tname: \"sql\",\n\t\t\tdescription: \"Generate a raw SQL file instead of using drizzle-kit\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tconst dialect =\n\t\t\t(ctx.flags[\"dialect\"] as string | undefined) ?? ctx.config.dialect ?? \"bun-sqlite\";\n\t\tconst isSql = ctx.flags[\"sql\"] === true;\n\n\t\tif (isSql) {\n\t\t\tif (!name) {\n\t\t\t\tlogger.error(\"Usage: nx db:generate <name> --sql\");\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tlogger.info(`Generating raw SQL migration: ${name} (dialect=${dialect})`);\n\t\t\treturn runSqlTemplate(ctx.cwd, name, dialect);\n\t\t}\n\n\t\t// Resolve drizzle.config.ts path\n\t\tconst configPath = resolve(ctx.cwd, \"drizzle.config.ts\");\n\t\tconst args = [\"generate\", \"--config\", configPath];\n\t\tif (name) args.push(\"--name\", name);\n\n\t\tlogger.info(`Generating migration: ${name} (dialect=${dialect})`);\n\t\treturn runDrizzleKit(ctx.cwd, args);\n\t},\n};\n\n/**\n * Generate a raw SQL migration file (without drizzle-kit).\n */\nasync function runSqlTemplate(\n\tcwd: string,\n\tname: string,\n\tdialect: string,\n): Promise<number> {\n\tconst { mkdirSync, writeFileSync } = await import(\"node:fs\");\n\tconst { join } = await import(\"node:path\");\n\tconst migrationsDir = join(cwd, \"app\", \"database\", \"migrations\");\n\tmkdirSync(migrationsDir, { recursive: true });\n\n\tconst timestamp = Date.now();\n\tconst filename = `${timestamp}_${name.replace(/[^a-z0-9_]+/g, \"_\")}.sql`;\n\tconst filepath = join(migrationsDir, filename);\n\n\tconst header = dialect === \"postgres\" || dialect === \"mysql\"\n\t\t? `-- Migration: ${name}\\n-- Dialect: ${dialect}\\n-- Generated: ${new Date().toISOString()}\\n\\n`\n\t\t: `-- Migration: ${name}\\n-- Dialect: ${dialect} (SQLite)\\n-- Generated: ${new Date().toISOString()}\\n\\n`;\n\n\twriteFileSync(filepath, header);\n\tlogger.success(`created ${filepath}`);\n\tlogger.info(\"Edit the SQL file, then run `nx db:migrate` to apply it.\");\n\treturn 0;\n}\n\nexport default dbGenerateCommand;\n",
80
+ "/**\n * `nx db:seed` — run database seed scripts.\n *\n * Seeds are TypeScript (or JavaScript) files that populate the\n * database with fixture data. The command:\n *\n * 1. Scans the configured `seeds` directory (default\n * `./db/seeds` — overridable via `paths.seeds` in\n * `nx.config.ts`).\n * 2. Loads every `*.ts` (or `*.js` / `*.mjs`) file in\n * alphabetical order.\n * 3. Invokes the default export as an async function, passing\n * a `SeedContext` that exposes the active DrizzleService,\n * logger, and a few helpers (see below).\n *\n * Examples:\n * nx db:seed # run all seeds in db/seeds/\n * nx db:seed --file 01_users # run a single seed\n * nx db:seed --reset # clear all tables first (DESTRUCTIVE)\n * nx db:seed --create users # scaffold a new seed file\n * nx db:seed --folder ./seeds # custom folder\n *\n * Seed file example:\n *\n * // db/seeds/01_users.ts\n * import type { SeedContext } from \"nexusjs/cli\";\n *\n * export default async function seed(ctx: SeedContext) {\n * await ctx.db.insert(users).values([\n * { email: \"alice@example.com\" },\n * { email: \"bob@example.com\" },\n * ]);\n * ctx.logger.info(`Inserted 2 users`);\n * }\n *\n * The \"01_users.ts\" naming convention (zero-padded numbers as\n * prefixes) is recommended but not required — alphabetical\n * ordering is the only rule.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { mkdir, readdir, readFile, writeFile, unlink } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { logger } from \"../core/index.js\";\n\nconst SEED_TEMPLATE = `/**\n * Seed: {name}\n *\n * Run with: nx db:seed\n *\n * The default export receives a \\`SeedContext\\` with:\n * - \\`ctx.db\\` : the active DrizzleService\n * - \\`ctx.logger\\` : the framework logger\n * - \\`ctx.dialect\\` : the active Drizzle dialect\n * - \\`ctx.truncate(table)\\` : helper to clear a table\n *\n * Use ctx.db.insert(table).values([...]) etc. for inserts.\n */\n\nimport type { SeedContext } from \"nexusjs/cli\";\n\nexport default async function seed(ctx: SeedContext): Promise<void> {\n\\tctx.logger.info(\"Running seed: {name}\");\n\\t// Example:\n\\t// await ctx.db.insert(usersTable).values([\n\\t// { email: \"alice@example.com\", name: \"Alice\" },\n\\t// { email: \"bob@example.com\", name: \"Bob\" },\n\\t// ]);\n}\n`;\n\nexport const dbSeedCommand: Command = {\n\tname: \"db:seed\",\n\taliases: [\"db:s\", \"seed\"],\n\tsummary: \"Run database seed scripts\",\n\tdescription:\n\t\t\"Loads and runs every seed file in the configured seeds folder in alphabetical order. Use --file to run a single seed, --create to scaffold a new one, --reset to truncate first (DESTRUCTIVE).\",\n\texamples: [\n\t\t\"nx db:seed\",\n\t\t\"nx db:seed --file 01_users\",\n\t\t\"nx db:seed --create users\",\n\t\t\"nx db:seed --reset\",\n\t\t\"nx db:seed --folder ./seeds\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"file\",\n\t\t\tdescription:\n\t\t\t\t\"Run a single seed file by name (without .ts extension, fuzzy match).\",\n\t\t},\n\t\t{\n\t\t\tname: \"create\",\n\t\t\tdescription:\n\t\t\t\t\"Scaffold a new seed file with a default template. Provide a name (e.g. `users`).\",\n\t\t},\n\t\t{\n\t\t\tname: \"reset\",\n\t\t\tdescription:\n\t\t\t\t\"DESTRUCTIVE: Truncate every table in the schema before running seeds.\",\n\t\t},\n\t\t{\n\t\t\tname: \"folder\",\n\t\t\tdescription:\n\t\t\t\t\"Override seeds folder. Default: ./db/seeds (or nx.config.ts paths.seeds).\",\n\t\t},\n\t\t{\n\t\t\tname: \"dialect\",\n\t\t\tdescription:\n\t\t\t\t\"Drizzle dialect (postgres|mysql|sqlite|bun-sqlite|d1). Default: from nx.config.ts or bun-sqlite.\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst folder = resolve(\n\t\t\tctx.cwd,\n\t\t\t(ctx.flags[\"folder\"] as string | undefined) ??\n\t\t\t\t(ctx.config.paths as { seeds?: string })?.seeds ??\n\t\t\t\t\"db/seeds\",\n\t\t);\n\t\tconst dialect =\n\t\t\t(ctx.flags[\"dialect\"] as string | undefined) ??\n\t\t\tctx.config.dialect ??\n\t\t\t\"bun-sqlite\";\n\t\tconst createName = ctx.flags[\"create\"] as string | undefined;\n\t\tconst fileName = ctx.flags[\"file\"] as string | undefined;\n\t\tconst reset = Boolean(ctx.flags[\"reset\"]);\n\n\t\t// --create scaffolds a new seed file. Doesn't run anything else.\n\t\tif (createName) {\n\t\t\treturn await createSeedFile(folder, createName);\n\t\t}\n\n\t\tif (!existsSync(folder)) {\n\t\t\t// No seeds folder yet. Create an empty one with a README.\n\t\t\tlogger.info(`creating empty seeds folder at ${folder}`);\n\t\t\tawait mkdir(folder, { recursive: true });\n\t\t\tawait writeFile(\n\t\t\t\tresolve(folder, \"_README.ts\"),\n\t\t\t\t`// Seed files go here. Run with: nx db:seed\\n`,\n\t\t\t\t\"utf-8\",\n\t\t\t);\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst files = await collectSeedFiles(folder);\n\n\t\t// If --file was given but matches nothing, fail fast.\n\t\tif (fileName) {\n\t\t\tconst matched = files.filter((f) =>\n\t\t\t\tf.toLowerCase().includes(fileName.toLowerCase()),\n\t\t\t);\n\t\t\tif (matched.length === 0) {\n\t\t\t\tlogger.error(`no seed file matching \"${fileName}\" in ${folder}`);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t} else if (files.length === 0) {\n\t\t\tlogger.warn(`no seed files found in ${folder}`);\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst target = fileName\n\t\t\t? files.filter((f) => f.toLowerCase().includes(fileName.toLowerCase()))\n\t\t\t: files;\n\n\t\tconst url = readEnvUrl(dialect);\n\t\tif (!url) {\n\t\t\tlogger.error(\n\t\t\t\t`could not read ${dialect} URL from environment. Set DATABASE_URL or NEXUS_DB_URL.`,\n\t\t\t);\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (reset) {\n\t\t\tlogger.warn(\n\t\t\t\t\"--reset is set: truncating every table in the schema before running seeds.\",\n\t\t\t);\n\t\t}\n\n\t\t// Generate an in-process runner script that:\n\t\t// 1. Opens the DrizzleService.\n\t\t// 2. Optionally truncates every table.\n\t\t// 3. Imports each seed file and invokes its default export.\n\t\tconst seedImports = target\n\t\t\t.map((f, i) => `import seed_${i} from ${JSON.stringify(resolve(folder, f))};`)\n\t\t\t.join(\"\\n\");\n\t\tconst seedCalls = target\n\t\t\t.map(\n\t\t\t\t(_, i) =>\n\t\t\t\t\t` await seed_${i}({ db, logger, dialect, truncate: (t) => db.truncate(t) });`,\n\t\t\t)\n\t\t\t.join(\"\\n\");\n\n\t\tconst script = `\nimport 'reflect-metadata';\nimport { DrizzleService } from '${relativeImport(ctx.cwd, \"src/drizzle/index.js\")}';\nimport { logger as frameworkLogger } from '${relativeImport(ctx.cwd, \"src/logger/index.js\")}';\n\nconst url = ${JSON.stringify(url)};\nconst dialect = ${JSON.stringify(dialect)};\nconst reset = ${JSON.stringify(reset)};\n\nconst cfg = { dialect, connection: { url }, schema: dialect === 'postgres' ? 'public' : undefined };\nconst db = new DrizzleService(cfg);\nawait db.open();\nconst logger = frameworkLogger;\n\nif (reset) {\n const tables = await db.allTables();\n for (const t of tables) {\n await db.truncate(t);\n }\n logger.info(\\`Truncated \\${tables.length} table(s)\\`);\n}\n\n${seedImports}\n\n${seedCalls}\n\nawait db.close();\nlogger.info(\\`Seeds complete (\\${${target.length}} file(s))\\`);\n`;\n\t\tconst tmpFile = resolve(ctx.cwd, \".nx-db-seed.mjs\");\n\t\tawait writeFile(tmpFile, script, \"utf-8\");\n\t\ttry {\n\t\t\tconst code = await new Promise<number>((resP) => {\n\t\t\t\tconst child = spawn(\"bun\", [tmpFile], {\n\t\t\t\t\tcwd: ctx.cwd,\n\t\t\t\t\tstdio: \"inherit\",\n\t\t\t\t\tshell: process.platform === \"win32\",\n\t\t\t\t});\n\t\t\t\tchild.on(\"exit\", (c) => resP(c ?? 0));\n\t\t\t\tchild.on(\"error\", () => resP(1));\n\t\t\t});\n\t\t\treturn code;\n\t\t} finally {\n\t\t\tawait unlink(tmpFile).catch(() => {});\n\t\t}\n\t},\n};\n\n/* ------------------------------------------------------------------ *\n * Helpers\n * ------------------------------------------------------------------ */\n\nasync function collectSeedFiles(folder: string): Promise<string[]> {\n\tconst all = await readdir(folder, { withFileTypes: true });\n\tconst out: string[] = [];\n\tfor (const e of all) {\n\t\tif (!e.isFile()) continue;\n\t\tif (e.name.startsWith(\"_\")) continue; // _README.ts etc.\n\t\tif (!/\\.(ts|js|mjs|cjs)$/.test(e.name)) continue;\n\t\tout.push(e.name);\n\t}\n\tout.sort();\n\treturn out;\n}\n\nasync function createSeedFile(\n\tfolder: string,\n\tname: string,\n): Promise<number> {\n\tif (!/^[a-z0-9_-]+$/i.test(name)) {\n\t\tlogger.error(\n\t\t\t`invalid seed name \"${name}\" — use letters, numbers, dash, underscore.`,\n\t\t);\n\t\treturn 1;\n\t}\n\tif (!existsSync(folder)) await mkdir(folder, { recursive: true });\n\n\t// Find a non-clobbering filename\n\tlet candidate = `${name}.ts`;\n\tlet i = 1;\n\twhile (existsSync(resolve(folder, candidate))) {\n\t\tcandidate = `${name}_${i}.ts`;\n\t\ti++;\n\t}\n\tconst path = resolve(folder, candidate);\n\tconst body = SEED_TEMPLATE.replace(/\\{name\\}/g, name);\n\tawait writeFile(path, body, \"utf-8\");\n\tlogger.info(`created ${path}`);\n\treturn 0;\n}\n\nfunction readEnvUrl(dialect: string): string | null {\n\tconst url =\n\t\tprocess.env[\"DATABASE_URL\"] ??\n\t\tprocess.env[\"NEXUS_DB_URL\"] ??\n\t\t(dialect === \"postgres\"\n\t\t\t? process.env[\"POSTGRES_URL\"]\n\t\t\t: dialect === \"mysql\"\n\t\t\t\t? process.env[\"MYSQL_URL\"]\n\t\t\t\t: dialect.includes(\"sqlite\")\n\t\t\t\t\t? process.env[\"SQLITE_FILENAME\"]\n\t\t\t\t\t: null);\n\treturn url ?? null;\n}\n\nfunction relativeImport(cwd: string, target: string): string {\n\tconst abs = resolve(cwd, target);\n\tlet rel = abs;\n\tif (rel.startsWith(cwd)) rel = rel.slice(cwd.length);\n\tif (rel.startsWith(\"/\")) rel = rel.slice(1);\n\tif (!rel.startsWith(\".\")) rel = \"./\" + rel;\n\treturn rel;\n}\n\nexport default dbSeedCommand;\n",
81
+ "/**\n * `nx new <name>` — scaffold a new project.\n *\n * Creates a fresh directory with `nx.config.ts`, `package.json`,\n * `tsconfig.json`, `app/main.ts`, and a README. Useful as a\n * starting point for kicking off a new app without `bun create`.\n *\n * This is intentionally minimal — it does not run `bun install`. After\n * generation, the user runs `bun install` themselves.\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { flagBool, logger, render, select } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\nexport const newCommand: Command = {\n\tname: \"new\",\n\taliases: [\"n\"],\n\tsummary: \"Create a new Nexus project\",\n\tdescription:\n\t\t\"Generates a new project directory with nx.config.ts, tsconfig, package.json, and a starter app/main.ts.\",\n\texamples: [\n\t\t\"nx new my-app\",\n\t\t\"nx new my-app --style nest --view rendu --orm drizzle --db bun-sqlite\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"style\",\n\t\t\tdescription: \"Routing style (nest|adonis|functional|mixed)\",\n\t\t},\n\t\t{ name: \"view\", description: \"View engine (rendu|edge|eta|inertia|none)\" },\n\t\t{ name: \"orm\", description: \"ORM driver (drizzle|prisma|kysely|none)\" },\n\t\t{\n\t\t\tname: \"db\",\n\t\t\tdescription:\n\t\t\t\t\"Database driver (bun-sqlite|node-sqlite|libsql|postgres|mysql|none)\",\n\t\t},\n\t\t{\n\t\t\tname: \"frontend\",\n\t\t\tdescription: \"Inertia frontend (react|vue|svelte|solid)\",\n\t\t},\n\t\t{ name: \"no-ssr\", description: \"Disable Inertia SSR\" },\n\t\t{ name: \"no-interaction\", description: \"Disable interactive prompts\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst name = ctx.positional[0];\n\t\tif (!name) {\n\t\t\tlogger.error(\"Usage: nx new <project-name>\");\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst interactive = !flagBool(ctx.flags, \"no-interaction\", false);\n\t\tconst target = resolve(ctx.cwd, name);\n\n\t\tif (existsSync(target)) {\n\t\t\tlogger.error(`Directory already exists: ${target}`);\n\t\t\treturn 1;\n\t\t}\n\n\t\tconst routing =\n\t\t\t(ctx.flags[\"style\"] as string | undefined) ??\n\t\t\t(await select(\"Routing style\", [\"nest\", \"adonis\", \"functional\"], {\n\t\t\t\tinteractive,\n\t\t\t\tdefault: \"nest\",\n\t\t\t}));\n\n\t\tconst view =\n\t\t\t(ctx.flags[\"view\"] as string | undefined) ??\n\t\t\t(await select(\"View engine\", [\"rendu\", \"edge\", \"eta\", \"inertia\", \"none\"], {\n\t\t\t\tinteractive,\n\t\t\t\tdefault: \"rendu\",\n\t\t\t}));\n\n\t\tconst orm =\n\t\t\t(ctx.flags[\"orm\"] as string | undefined) ??\n\t\t\t(await select(\"ORM driver\", [\"drizzle\", \"prisma\", \"kysely\", \"none\"], {\n\t\t\t\tinteractive,\n\t\t\t\tdefault: \"drizzle\",\n\t\t\t}));\n\n\t\tconst db =\n\t\t\t(ctx.flags[\"db\"] as string | undefined) ??\n\t\t\t(await select(\n\t\t\t\t\"Database driver\",\n\t\t\t\t[\"bun-sqlite\", \"node-sqlite\", \"libsql\", \"postgres\", \"mysql\", \"none\"],\n\t\t\t\t{\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: \"bun-sqlite\",\n\t\t\t\t},\n\t\t\t));\n\n\t\tconst frontend =\n\t\t\t(ctx.flags[\"frontend\"] as string | undefined) ??\n\t\t\t(await select(\"Inertia frontend\", [\"react\", \"vue\", \"svelte\", \"solid\"], {\n\t\t\t\tinteractive,\n\t\t\t\tdefault: \"react\",\n\t\t\t}));\n\n\t\tconst ssr = !flagBool(ctx.flags, \"no-ssr\", false);\n\n\t\tmkdirSync(resolve(target, \"app\"), { recursive: true });\n\t\tmkdirSync(resolve(target, \"public\"), { recursive: true });\n\t\tmkdirSync(resolve(target, \"resources/views\"), { recursive: true });\n\n\t\twriteFileSync(resolve(target, \"public/.gitkeep\"), \"\");\n\n\t\twriteFileSync(\n\t\t\tresolve(target, \"resources/views/welcome.html\"),\n\t\t\t`<h1>Welcome to ${name}</h1>\\n<p>This is a sample Rendu template.</p>\\n<p>Founded <?= year ?>.</p>\\n`,\n\t\t);\n\n\t\twriteFileSync(resolve(target, \".env\"), generateEnvFile());\n\t\twriteFileSync(resolve(target, \".env.local\"), generateEnvLocalFile());\n\t\twriteFileSync(resolve(target, \".gitignore\"), generateGitIgnore());\n\n\t\tconst code = render(templates.project[\"nx.config.ts\"], {\n\t\t\trouting,\n\t\t\tview,\n\t\t\tviewPaths: view === \"none\" ? \"\" : \"resources/views\",\n\t\t\torm,\n\t\t\tdbDriver: db,\n\t\t\tdbUrl: db === \"bun-sqlite\" || db === \"node-sqlite\" ? \"app.db\" : \"\",\n\t\t\tinertiaFrontend: frontend,\n\t\t\tinertiaSSR: ssr,\n\t\t\tinertiaVersion: \"1.0.0\",\n\t\t});\n\t\twriteFileSync(resolve(target, \"nx.config.ts\"), code);\n\n\t\twriteFileSync(\n\t\t\tresolve(target, \"package.json\"),\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\tname,\n\t\t\t\t\tversion: \"0.1.0\",\n\t\t\t\t\ttype: \"module\",\n\t\t\t\t\tscripts: {\n\t\t\t\t\t\tdev: \"bun --hot app/main.ts\",\n\t\t\t\t\t\tbuild: \"bun run build.ts\",\n\t\t\t\t\t\tstart: \"bun app/main.ts\",\n\t\t\t\t\t\ttest: \"vitest\",\n\t\t\t\t\t\tnx: \"nx\",\n\t\t\t\t\t},\n\t\t\t\t\tdependencies: {\n\t\t\t\t\t\tnexusjs: \"*\",\n\t\t\t\t\t\t\"reflect-metadata\": \"^0.2.2\",\n\t\t\t\t\t\thono: \"^4.6.0\",\n\t\t\t\t\t\tzod: \"^3.23.8\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2,\n\t\t\t),\n\t\t);\n\n\t\twriteFileSync(\n\t\t\tresolve(target, \"tsconfig.json\"),\n\t\t\t`{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"ESNext\",\n \"moduleResolution\": \"bundler\",\n \"experimentalDecorators\": true,\n \"emitDecoratorMetadata\": true,\n \"strict\": true,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"types\": [\"bun-types\"]\n },\n \"include\": [\"app/**/*.ts\", \"nx.config.ts\"]\n}\n`,\n\t\t);\n\n\t\twriteFileSync(\n\t\t\tresolve(target, \"app/main.ts\"),\n\t\t\t`import 'reflect-metadata';\nimport { Application } from 'nexusjs';\nimport { StaticModule } from 'nexusjs/static';\nimport { AppModule } from './app.module.js';\n\nconst app = new Application(AppModule);\n// Serve ./public files under /static/*\napp.server.app.use('/static/*', StaticModule.mount({ root: './public', prefix: '/static' }));\n\nconst port = Number(process.env[\"PORT\"] ?? 3000);\nawait app.listen(port);\nconsole.log(\"[nexusjs] Listening on http://localhost:\" + port);\n`,\n\t\t);\n\n\t\twriteFileSync(\n\t\t\tresolve(target, \"app/app.module.ts\"),\n\t\t\t`import { Module } from 'nexusjs';\nimport { HomeController } from './controllers/home.controller.js';\n\n@Module({\n imports: [],\n controllers: [HomeController],\n})\nexport class AppModule {}\n`,\n\t\t);\n\n\t\tmkdirSync(resolve(target, \"app/controllers\"), { recursive: true });\n\t\twriteFileSync(\n\t\t\tresolve(target, \"app/controllers/home.controller.ts\"),\n\t\t\t`import { Controller, Get } from 'nexusjs';\n\n@Controller('/')\nexport class HomeController {\n @Get('/')\n index() {\n return {\n view: 'welcome.html',\n data: { year: new Date().getFullYear() },\n };\n }\n}\n`,\n\t\t);\n\n\t\twriteFileSync(\n\t\t\tresolve(target, \"README.md\"),\n\t\t\t`# ${name}\n\nA new Nexus project.\n\n## Run\n\n\\`\\`\\`bash\nbun install\nbun run dev\n\\`\\`\\`\n\n## Scaffolding\n\n\\`\\`\\`bash\nbunx nx make:crud Post\n\\`\\`\\`\n`,\n\t\t);\n\n\t\tlogger.success(`created ${target}`);\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(` cd ${name}`);\n\t\tlogger.info(` bun install`);\n\t\tlogger.info(` bun run dev`);\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\n/** Generate the default .env file content. */\nfunction generateEnvFile(): string {\n\treturn `# ──────────────────────────────────────────────────────\n# NexusJS — Environment Variables (committed to git)\n#\n# Shared defaults for all environments. Override locally via\n# .env.local (gitignored) or by environment via .env.{NODE_ENV}\n# (e.g. .env.production, .env.development).\n#\n# Uncomment the database config for your driver:\n# ──────────────────────────────────────────────────────\n\n# ── App ──\nNODE_ENV=development\nPORT=3000\n\n# ── Session secret (REQUIRED) ──\n# Generate with: openssl rand -base64 32\nSESSION_SECRET=change-me-in-production\n\n# ── Database: SQLite (default, zero config) ──\nDATABASE_URL=app.db\n\n# ── Database: PostgreSQL ──\n# DATABASE_URL=postgres://user:password@localhost:5432/myapp\n\n# ── Database: MySQL ──\n# DATABASE_URL=mysql://user:password@localhost:3306/myapp\n`;\n}\n\nfunction generateEnvLocalFile(): string {\n\treturn `# ──────────────────────────────────────────────────────\n# NexusJS — Local Overrides (DO NOT COMMIT to git)\n#\n# This file is gitignored. Use it for secrets and local\n# configuration that should never be checked in.\n# ──────────────────────────────────────────────────────\n\n# Override any value from .env here:\n# DATABASE_URL=postgres://user:password@localhost:5432/myapp\n# SESSION_SECRET=my-local-secret\n`;\n}\n\nfunction generateGitIgnore(): string {\n\treturn `# NexusJS\nnode_modules/\napp.db\n*.db\n.env.local\ndist/\n`;\n}\n\nexport default newCommand;\n",
82
+ "/**\n * `nx config` — update or create nx.config.ts (+ drizzle.config.ts\n * if Drizzle is selected).\n *\n * Companion to `nx init`:\n * - `nx init` → scaffold the whole project (config + src/app + README)\n * - `nx config` → only the config files; idempotent\n *\n * Behaviour:\n * - If nx.config.ts exists, parses the current values, merges\n * with any flag values (flags win), and re-renders.\n * - If it does not exist, creates it from scratch with the\n * provided (or prompted) values.\n * - If ORM is `drizzle`, also writes drizzle.config.ts.\n * - If ORM is NOT `drizzle`, an existing drizzle.config.ts is\n * left alone (the user may have it intentionally).\n *\n * Typical use cases:\n * - \"I want to switch from bun-sqlite to postgres\"\n * → nx config --db postgres\n * - \"I want to add Drizzle to an existing project\"\n * → nx config --orm drizzle\n * - \"I want to change the Inertia frontend from React to Vue\"\n * → nx config --frontend vue\n * - \"I haven't decided yet, just show me the prompts\"\n * → nx config --no-interaction=false\n *\n * Flags:\n * --target <dir> Target directory (default: cwd)\n * --style <name> Routing style (nest|adonis|functional)\n * --view <name> View engine (rendu|edge|inertia|none)\n * --orm <name> ORM driver (drizzle|prisma|kysely|none)\n * --db <name> Database driver\n * --db-url <url> Database URL (used when DATABASE_URL is unset)\n * --frontend <name> Inertia frontend (react|vue|svelte|solid)\n * --ssr Enable Inertia SSR\n * --no-ssr Disable Inertia SSR\n * --force Overwrite even if file already exists\n * --no-interaction Skip interactive prompts\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { flagBool, logger, render, select } from \"../core/index.js\";\nimport { templates } from \"../templates/index.js\";\n\ninterface NxConfigValues {\n\trouting: string;\n\tview: string;\n\tviewPaths: string;\n\torm: string;\n\tdbDriver: string;\n\tdbUrl: string;\n\tinertiaFrontend: string;\n\tinertiaSSR: boolean;\n\tinertiaVersion: string;\n\t[key: string]: string | number | boolean | undefined | null;\n}\n\nconst DEFAULT_VALUES: NxConfigValues = {\n\trouting: \"nest\",\n\tview: \"rendu\",\n\tviewPaths: \"resources/views\",\n\torm: \"drizzle\",\n\tdbDriver: \"bun-sqlite\",\n\tdbUrl: \"app.db\",\n\tinertiaFrontend: \"react\",\n\tinertiaSSR: true,\n\tinertiaVersion: \"1.0.0\",\n};\n\n/**\n * Parse an existing nx.config.ts and extract the scalar values.\n * Falls back to DEFAULT_VALUES for any field it can't read.\n */\nfunction parseExistingConfig(path: string): NxConfigValues {\n\tconst out: NxConfigValues = { ...DEFAULT_VALUES };\n\tif (!existsSync(path)) return out;\n\tconst src = readFileSync(path, \"utf8\");\n\tconst grab = (re: RegExp): string | undefined => {\n\t\tconst m = src.match(re);\n\t\treturn m?.[1];\n\t};\n\tconst routing = grab(/routing:\\s*['\"]([^'\"]+)['\"]/);\n\tconst view = grab(/view:\\s*['\"]([^'\"]+)['\"]/);\n\tconst viewPathsMatch = src.match(/viewPaths:\\s*['\"]([^'\"]+)['\"]/);\n\tif (viewPathsMatch) {\n\t\tout.viewPaths = viewPathsMatch[1];\n\t}\n\tconst orm = grab(/orm:\\s*['\"]([^'\"]+)['\"]/);\n\tconst driver = grab(/driver:\\s*['\"]([^'\"]+)['\"]/);\n\tconst url = grab(/url:\\s*process\\.env\\.DATABASE_URL\\s*\\?\\?\\s*['\"]([^'\"]+)['\"]/);\n\tconst frontend = grab(/frontend:\\s*['\"]([^'\"]+)['\"]/);\n\tconst ssr = grab(/ssr:\\s*(true|false)/);\n\tconst version = grab(/version:\\s*['\"]([^'\"]+)['\"]/);\n\tif (routing) out.routing = routing;\n\tif (view) out.view = view;\n\tif (orm) out.orm = orm;\n\tif (driver) out.dbDriver = driver;\n\tif (url !== undefined) out.dbUrl = url;\n\tif (frontend) out.inertiaFrontend = frontend;\n\tif (ssr) out.inertiaSSR = ssr === \"true\";\n\tif (version) out.inertiaVersion = version;\n\treturn out;\n}\n\n/** Map a `db` driver name to a drizzle-kit dialect. */\nfunction driverToDialect(driver: string): string {\n\tswitch (driver) {\n\t\tcase \"bun-sqlite\":\n\t\tcase \"node-sqlite\":\n\t\tcase \"libsql\":\n\t\t\treturn \"sqlite\";\n\t\tcase \"postgres\":\n\t\t\treturn \"postgresql\";\n\t\tcase \"mysql\":\n\t\t\treturn \"mysql\";\n\t\tdefault:\n\t\t\treturn \"sqlite\";\n\t}\n}\n\n/** Default DATABASE_URL fallback based on the driver. */\nfunction defaultDbUrl(driver: string): string {\n\tif (driver === \"bun-sqlite\" || driver === \"node-sqlite\" || driver === \"libsql\") {\n\t\treturn \"app.db\";\n\t}\n\treturn \"\";\n}\n\nexport const configCommand: Command = {\n\tname: \"config\",\n\taliases: [\"cfg\"],\n\tsummary: \"Update or create nx.config.ts (+ drizzle.config.ts if Drizzle is selected)\",\n\tdescription:\n\t\t\"Re-renders nx.config.ts from the current values (parsed from the existing file, or prompted) plus any flag overrides. Also creates or updates drizzle.config.ts when the ORM is `drizzle`.\",\n\texamples: [\n\t\t\"nx config\",\n\t\t\"nx config --db postgres --db-url postgres://localhost/mydb\",\n\t\t\"nx config --orm drizzle --db bun-sqlite\",\n\t\t\"nx config --view inertia --frontend vue --no-ssr\",\n\t\t\"nx config --force\",\n\t],\n\tflags: [\n\t\t{ name: \"target\", description: \"Target directory (default: cwd)\" },\n\t\t{\n\t\t\tname: \"style\",\n\t\t\tdescription: \"Routing style (nest|adonis|functional|mixed)\",\n\t\t},\n\t\t{ name: \"view\", description: \"View engine (rendu|edge|inertia|none)\" },\n\t\t{\n\t\t\tname: \"view-paths\",\n\t\t\tdescription: \"Comma-separated directories searched for view files (e.g. resources/views)\",\n\t\t},\n\t\t{ name: \"orm\", description: \"ORM driver (drizzle|prisma|kysely|none)\" },\n\t\t{\n\t\t\tname: \"db\",\n\t\t\tdescription:\n\t\t\t\t\"Database driver (bun-sqlite|node-sqlite|libsql|postgres|mysql|none)\",\n\t\t},\n\t\t{\n\t\t\tname: \"db-url\",\n\t\t\tdescription: \"Default DATABASE_URL when the env var is unset\",\n\t\t},\n\t\t{\n\t\t\tname: \"frontend\",\n\t\t\tdescription: \"Inertia frontend (react|vue|svelte|solid)\",\n\t\t},\n\t\t{ name: \"ssr\", description: \"Enable Inertia SSR\" },\n\t\t{ name: \"no-ssr\", description: \"Disable Inertia SSR\" },\n\t\t{ name: \"force\", description: \"Overwrite even if file already exists\" },\n\t\t{ name: \"no-interaction\", description: \"Disable interactive prompts\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst interactive = !flagBool(ctx.flags, \"no-interaction\", false);\n\t\tconst force = flagBool(ctx.flags, \"force\", false);\n\t\tconst target = resolve(\n\t\t\tctx.cwd,\n\t\t\t(ctx.flags[\"target\"] as string | undefined) ?? \".\",\n\t\t);\n\n\t\tif (!existsSync(target)) {\n\t\t\tlogger.error(`Target directory does not exist: ${target}`);\n\t\t\treturn 1;\n\t\t}\n\n\t\t// 1. Start with the existing file's values (or defaults)\n\t\tconst nxConfigPath = resolve(target, \"nx.config.ts\");\n\t\tconst values: NxConfigValues = parseExistingConfig(nxConfigPath);\n\n\t\t// 2. Apply flag overrides\n\t\tconst flag = (k: string) => ctx.flags[k] as string | undefined;\n\t\tconst flagBoolStrict = (k: string, def: boolean) =>\n\t\t\tflagBool(ctx.flags, k, def);\n\t\tif (flag(\"style\")) values.routing = flag(\"style\")!;\n\t\tif (flag(\"view\")) values.view = flag(\"view\")!;\n\tif (flag(\"view-paths\")) {\n\t\tvalues.viewPaths = flag(\"view-paths\")!;\n\t}\n\t\tif (flag(\"orm\")) values.orm = flag(\"orm\")!;\n\t\tif (flag(\"db\")) values.dbDriver = flag(\"db\")!;\n\t\tif (flag(\"db-url\") !== undefined) values.dbUrl = flag(\"db-url\")!;\n\t\tif (flag(\"frontend\")) values.inertiaFrontend = flag(\"frontend\")!;\n\t\tif (flagBoolStrict(\"ssr\", false)) values.inertiaSSR = true;\n\t\tif (flagBoolStrict(\"no-ssr\", false)) values.inertiaSSR = false;\n\t\t// --inertia-version intentionally not exposed — too internal\n\n\t\t// 3. Interactive prompt for fields the user didn't supply\n\t\t// (only if the file didn't already exist OR they passed no\n\t\t// flags at all — i.e. they want a guided setup)\n\t\tconst anyFlag = Object.values(ctx.flags).some(\n\t\t\t(v) => v !== undefined && v !== false,\n\t\t);\n\t\tif (interactive && !anyFlag && !existsSync(nxConfigPath)) {\n\t\t\tvalues.routing =\n\t\t\t\t(await select(\"Routing style\", [\"nest\", \"adonis\", \"functional\"], {\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: values.routing,\n\t\t\t\t})) ?? values.routing;\n\t\t\tvalues.view =\n\t\t\t\t(await select(\"View engine\", [\"inertia\", \"rendu\", \"edge\", \"none\"], {\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: values.view,\n\t\t\t\t})) ?? values.view;\n\t\t\tvalues.orm =\n\t\t\t\t(await select(\"ORM driver\", [\"drizzle\", \"prisma\", \"kysely\", \"none\"], {\n\t\t\t\t\tinteractive,\n\t\t\t\t\tdefault: values.orm,\n\t\t\t\t})) ?? values.orm;\n\t\t\tvalues.dbDriver =\n\t\t\t\t(await select(\n\t\t\t\t\t\"Database driver\",\n\t\t\t\t\t[\"bun-sqlite\", \"node-sqlite\", \"libsql\", \"postgres\", \"mysql\", \"none\"],\n\t\t\t\t\t{ interactive, default: values.dbDriver },\n\t\t\t\t)) ?? values.dbDriver;\n\t\t\tvalues.inertiaFrontend =\n\t\t\t\t(await select(\n\t\t\t\t\t\"Inertia frontend\",\n\t\t\t\t\t[\"react\", \"vue\", \"svelte\", \"solid\"],\n\t\t\t\t\t{ interactive, default: values.inertiaFrontend },\n\t\t\t\t)) ?? values.inertiaFrontend;\n\t\t}\n\n\t\t// 4. Derive dbUrl from driver if user didn't pass --db-url\n\t\tif (flag(\"db-url\") === undefined && flag(\"db\") !== undefined) {\n\t\t\tvalues.dbUrl = defaultDbUrl(values.dbDriver);\n\t\t}\n\n\t\t// 5. Render and write\n\t\tconst existed = existsSync(nxConfigPath);\n\t\tif (existed && !force) {\n\t\t\t// Existing file: rewrite only if something actually changed.\n\t\t\t// (Always rewrite when the user passed any flag, since\n\t\t\t// they're explicitly asking for a change.)\n\t\t\tif (anyFlag) {\n\t\t\t\twriteNxConfig(target, values);\n\t\t\t\tlogger.info(` ~ nx.config.ts (updated)`);\n\t\t\t} else {\n\t\t\t\tlogger.info(` - nx.config.ts (unchanged; pass --force or a flag to update)`);\n\t\t\t}\n\t\t} else {\n\t\t\twriteNxConfig(target, values);\n\t\t\tlogger.info(` + nx.config.ts`);\n\t\t}\n\n\t\t// 6. Handle drizzle.config.ts\n\t\tconst drizzleConfigPath = resolve(target, \"drizzle.config.ts\");\n\t\tif (values.orm === \"drizzle\") {\n\t\t\tconst dialect = driverToDialect(values.dbDriver);\n\t\t\tconst dbUrl = values.dbUrl;\n\t\t\tconst existedDrizzle = existsSync(drizzleConfigPath);\n\t\t\tif (existedDrizzle && !force && !anyFlag) {\n\t\t\t\tlogger.info(` - drizzle.config.ts (unchanged; pass --force or a flag to update)`);\n\t\t\t} else {\n\t\t\t\twriteDrizzleConfig(target, { dialect, dbUrl });\n\t\t\t\tlogger.info(` ${existedDrizzle ? \"~\" : \"+\"} drizzle.config.ts`);\n\t\t\t}\n\t\t} else if (existsSync(drizzleConfigPath)) {\n\t\t\tlogger.info(\n\t\t\t\t` - drizzle.config.ts (left as-is; ORM is '${values.orm}', not 'drizzle')`,\n\t\t\t);\n\t\t}\n\n\t\tlogger.blank();\n\t\tlogger.success(`config updated in ${target}`);\n\t\tlogger.blank();\n\t\tlogger.heading(\"Next steps\");\n\t\tlogger.info(` cd ${target === ctx.cwd ? \".\" : target}`);\n\t\tif (values.orm === \"drizzle\") {\n\t\t\tlogger.info(` bun run db:generate # generate migrations`);\n\t\t}\n\t\tlogger.blank();\n\n\t\treturn 0;\n\t},\n};\n\n// ---------------------------------------------------------------------------\n// Writers\n// ---------------------------------------------------------------------------\n\nfunction writeNxConfig(target: string, values: NxConfigValues): void {\n\tconst code = render(templates.project[\"nx.config.ts\"], values);\n\twriteFileSync(resolve(target, \"nx.config.ts\"), code);\n}\n\nfunction writeDrizzleConfig(\n\ttarget: string,\n\tvalues: { dialect: string; dbUrl: string },\n): void {\n\tconst code = render(templates.project[\"drizzle.config.ts\"], values);\n\twriteFileSync(resolve(target, \"drizzle.config.ts\"), code);\n}\n\nexport default configCommand;\n",
83
+ "/**\n * `nx repl` — interactive REPL with the app's services loaded.\n *\n * Boots the user's `AppModule` and drops you into a REPL with\n * `app`, `container`, `db`, `logger`, `cfg`, `cache`, and `events`\n * pre-loaded. Useful for debugging, exploring data, and trying\n * out queries without writing a throwaway script.\n *\n * Usage:\n * nx repl # default: ./app/app.module.ts\n * nx repl --module app/app.module.ts\n * nx repl --no-boot # vanilla REPL\n * nx repl --history /tmp/nx-history # custom history file\n *\n * Once inside the REPL:\n * ❯ await db.select().from(users).all()\n * ❯ logger.info(\"hello from REPL\")\n * ❯ .services\n * ❯ .routes\n * ❯ .help\n * ❯ .exit\n *\n * Multi-line input is detected by a bracket-matcher — an\n * expression with an unclosed `{}`, `[]`, or `()` keeps the\n * prompt in `...` continuation mode.\n *\n * History is persisted to `.nx-repl-history` (or the path\n * given by `--history`).\n */\n\nimport {\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport * as readline from \"node:readline\";\nimport * as vm from \"node:vm\";\nimport { logger } from \"../core/index.js\";\nimport type { Command, CommandContext } from \"../core/index.js\";\n\nconst BANNER = `\n╭─────────────────────────────────────────────────╮\n│ NexusJS REPL │\n╰─────────────────────────────────────────────────╯\n`;\n\nconst HELP = `\nAvailable commands:\n .help Show this help\n .exit Exit the REPL (alias: .quit)\n .services List services in the DI container\n .modules List all modules\n .routes List all registered routes\n .history Show command history\n .clear Clear the screen\n .reset Reset the REPL context (clear all variables)\n\nPre-loaded variables (when an app is booted):\n app The Application instance\n container The DI container\n db DrizzleService (if registered)\n logger LoggerService (if registered)\n cfg ConfigService (if registered)\n cache CacheService (if registered)\n events EventService (if registered)\n\nExamples:\n > await db.select().from(users).all()\n > logger.info(\"hello from REPL\")\n > app.container.size\n`;\n\n/** Pair of (module path inside the framework, export name). */\nconst PRELOAD: Array<[string, string, string]> = [\n\t[\"db\", \"../../drizzle/drizzle.service.js\", \"DrizzleService\"],\n\t[\"logger\", \"../../logger/logger.service.js\", \"LoggerService\"],\n\t[\"cfg\", \"../../config/config.service.js\", \"ConfigService\"],\n\t[\"cache\", \"../../cache/cache.service.js\", \"CacheService\"],\n\t[\"events\", \"../../events/event.service.js\", \"EventService\"],\n];\n\nexport const replCommand: Command = {\n\tname: \"repl\",\n\taliases: [\"console\", \"shell\"],\n\tsummary: \"Start an interactive REPL with the app's services\",\n\tdescription:\n\t\t\"Boots the user's app module and drops into an interactive REPL. Useful for debugging, exploring data, and trying out queries. Multi-line input is supported. History is persisted to .nx-repl-history.\",\n\texamples: [\n\t\t\"nx repl\",\n\t\t\"nx repl --module app/app.module.ts\",\n\t\t\"nx repl --no-boot\",\n\t\t\"nx repl --history /tmp/nx-history\",\n\t],\n\tflags: [\n\t\t{\n\t\t\tname: \"module\",\n\t\t\tdescription:\n\t\t\t\t\"Path to the AppModule (default: app/app.module.ts).\",\n\t\t},\n\t\t{\n\t\t\tname: \"no-boot\",\n\t\t\tdescription: \"Skip booting the app — start a vanilla REPL.\",\n\t\t},\n\t\t{\n\t\t\tname: \"history\",\n\t\t\tdescription: \"History file path (default: .nx-repl-history).\",\n\t\t},\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst mod = ctx.flags[\"module\"] as string | undefined;\n\t\tconst noBoot = Boolean(ctx.flags[\"no-boot\"]);\n\t\tconst histPath = resolve(\n\t\t\tctx.cwd,\n\t\t\t(ctx.flags[\"history\"] as string | undefined) ?? \".nx-repl-history\",\n\t\t);\n\n\t\tconst env: Record<string, unknown> = { console };\n\n\t\tif (!noBoot) {\n\t\t\tconst modPath = resolve(\n\t\t\t\tctx.cwd,\n\t\t\t\tmod ?? \"app/app.module.ts\",\n\t\t\t);\n\t\t\tif (!existsSync(modPath)) {\n\t\t\t\tlogger.error(`module not found: ${modPath}`);\n\t\t\t\tlogger.info(\n\t\t\t\t\t\"pass --module <path> or --no-boot to skip booting\",\n\t\t\t\t);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst modSpec = await import(modPath);\n\t\t\t\tconst AppModule =\n\t\t\t\t\tmodSpec.default ?? modSpec.AppModule;\n\t\t\t\tif (!AppModule) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t`module at ${modPath} does not export AppModule as default or named export`,\n\t\t\t\t\t);\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\tconst { Application } = await import(\n\t\t\t\t\t\"../../core/application.js\"\n\t\t\t\t);\n\t\t\t\tconst app = new Application(AppModule);\n\t\t\t\tenv.app = app;\n\t\t\t\tenv.container = app.container;\n\n\t\t\t\tfor (const [name, path, className] of PRELOAD) {\n\t\t\t\t\tawait preloadService(\n\t\t\t\t\t\tenv,\n\t\t\t\t\t\tapp as { container: { resolve: (t: unknown) => unknown } },\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlogger.info(`✓ Booted ${modPath}`);\n\t\t\t} catch (err) {\n\t\t\t\tlogger.error(`failed to boot: ${(err as Error).message}`);\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t}\n\n\t\tconsole.log(BANNER);\n\t\tif (noBoot) {\n\t\t\tconsole.log(\" (started with --no-boot; no app is loaded)\");\n\t\t}\n\n\t\tconst history = loadHistory(histPath);\n\n\t\tconst rl = readline.createInterface({\n\t\t\tinput: process.stdin,\n\t\t\toutput: process.stdout,\n\t\t\tprompt: \"❯ \",\n\t\t\tterminal: true,\n\t\t\thistory,\n\t\t\thistorySize: 1000,\n\t\t});\n\n\t\tconst saveHist = () => saveHistoryFile(histPath, (rl as unknown as { history?: string[] }).history ?? []);\n\t\trl.on(\"close\", () => {\n\t\t\tsaveHist();\n\t\t\tprocess.exit(0);\n\t\t});\n\t\tprocess.on(\"SIGINT\", () => {\n\t\t\tsaveHist();\n\t\t\tprocess.exit(0);\n\t\t});\n\t\tprocess.on(\"exit\", saveHist);\n\n\t\tlet buffer = \"\";\n\t\tconst vmContext = vm.createContext(env);\n\n\t\tconst evaluate = async (code: string): Promise<void> => {\n\t\t\ttry {\n\t\t\t\tconst script = new vm.Script(code, { filename: \"<nx-repl>\" });\n\t\t\t\tconst result = script.runInContext(vmContext, {\n\t\t\t\t\tdisplayErrors: false,\n\t\t\t\t});\n\t\t\t\tif (result === undefined) return;\n\t\t\t\tif (\n\t\t\t\t\tresult &&\n\t\t\t\t\ttypeof (result as { then?: unknown }).then === \"function\"\n\t\t\t\t) {\n\t\t\t\t\tconst v = await (result as Promise<unknown>);\n\t\t\t\t\tconsole.log(formatResult(v));\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log(formatResult(result));\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(formatError(err as Error));\n\t\t\t}\n\t\t};\n\n\t\tconst handleDotCommand = async (line: string): Promise<boolean> => {\n\t\t\tconst cmd = line.trim();\n\t\t\tswitch (cmd) {\n\t\t\t\tcase \".help\":\n\t\t\t\t\tconsole.log(HELP);\n\t\t\t\t\treturn true;\n\t\t\t\tcase \".exit\":\n\t\t\t\tcase \".quit\":\n\t\t\t\t\tsaveHist();\n\t\t\t\t\trl.close();\n\t\t\t\t\treturn true;\n\t\t\t\tcase \".clear\":\n\t\t\t\t\tconsole.clear();\n\t\t\t\t\tconsole.log(BANNER);\n\t\t\t\t\treturn true;\n\t\t\t\tcase \".services\": {\n\t\t\t\t\tconst services = listServices(env.container);\n\t\t\t\t\tif (services.length === 0) {\n\t\t\t\t\t\tconsole.log(\" (no services registered)\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const s of services) console.log(` ${s}`);\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tcase \".modules\": {\n\t\t\t\t\tconst mods = (env.app as { modules?: unknown[] } | undefined)\n\t\t\t\t\t\t?.modules as Array<{ name?: string; constructor?: { name?: string } }> | undefined;\n\t\t\t\t\tif (!mods || mods.length === 0) {\n\t\t\t\t\t\tconsole.log(\" (no modules)\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const m of mods) {\n\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t` ${m.name ?? m.constructor?.name ?? \"(anon)\"}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tcase \".routes\": {\n\t\t\t\t\tconst app = env.app as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tserver?: {\n\t\t\t\t\t\t\t\t\tapp?: { routes?: Array<{ method?: string; path?: string }> };\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst routes = app?.server?.app?.routes ?? [];\n\t\t\t\t\tif (routes.length === 0) {\n\t\t\t\t\t\tconsole.log(\" (no routes registered)\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (const r of routes) {\n\t\t\t\t\t\t\tconst m = (r.method ?? \"?\").padEnd(7);\n\t\t\t\t\t\t\tconsole.log(` ${m} ${r.path ?? \"?\"}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tcase \".history\": {\n\t\t\t\t\tconst hist = (rl as unknown as { history?: string[] }).history ?? [];\n\t\t\t\t\tconst histArr = hist as string[];\n\t\t\t\t\thistArr.forEach((h: string, i: number) => {\n\t\t\t\t\t\tconsole.log(` ${(i + 1).toString().padStart(4)}: ${h}`);\n\t\t\t\t\t});\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tcase \".reset\": {\n\t\t\t\t\tfor (const k of Object.keys(env)) {\n\t\t\t\t\t\tif (k !== \"console\") delete env[k];\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(\" context reset\");\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error(` unknown command: ${cmd}`);\n\t\t\t\t\tconsole.log(\" type .help for the list\");\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t};\n\n\t\trl.on(\"line\", async (line) => {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (trimmed.startsWith(\".\")) {\n\t\t\t\tawait handleDotCommand(trimmed);\n\t\t\t} else {\n\t\t\t\tbuffer += line + \"\\n\";\n\t\t\t\tif (isIncomplete(buffer)) {\n\t\t\t\t\trl.setPrompt(\"... \");\n\t\t\t\t\trl.prompt();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait evaluate(buffer);\n\t\t\t\tbuffer = \"\";\n\t\t\t\trl.setPrompt(\"❯ \");\n\t\t\t}\n\t\t\trl.prompt();\n\t\t});\n\n\t\trl.prompt();\n\n\t\t// Keep the process alive. readline drives the rest.\n\t\treturn new Promise(() => {\n\t\t\t/* never resolves */\n\t\t});\n\t},\n};\n\n/* ------------------------------------------------------------------ *\n * Helpers — exported for testing\n * ------------------------------------------------------------------ */\n\nexport async function preloadService(\n\tenv: Record<string, unknown>,\n\tapp: { container: { resolve: (t: unknown) => unknown } },\n\tname: string,\n\tpath: string,\n\tclassName: string,\n): Promise<void> {\n\ttry {\n\t\tconst mod = (await import(path)) as Record<string, unknown>;\n\t\tconst ServiceClass = mod[className] as\n\t\t\t| (abstract new (...args: never[]) => unknown) & {\n\t\t\t\t\tTOKEN?: unknown;\n\t\t\t\t\t[key: string]: unknown;\n\t\t\t }\n\t\t\t| undefined;\n\t\tif (!ServiceClass) return;\n\t\tconst Token =\n\t\t\tServiceClass.TOKEN ??\n\t\t\tServiceClass[`${className.toUpperCase()}_TOKEN`];\n\t\tif (!Token) return;\n\t\ttry {\n\t\t\tenv[name] = app.container.resolve(Token);\n\t\t} catch {\n\t\t\ttry {\n\t\t\t\tenv[name] = app.container.resolve(ServiceClass);\n\t\t\t} catch {\n\t\t\t\t// not registered\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// module not installed — skip silently\n\t}\n}\n\nexport function listServices(\n\tcontainer: unknown,\n): string[] {\n\tif (!container) return [];\n\tconst c = container as {\n\t\tlistProviders?: () => Array<{ token?: { toString(): string } }>;\n\t};\n\tif (typeof c.listProviders !== \"function\") return [];\n\ttry {\n\t\treturn c\n\t\t\t.listProviders()\n\t\t\t.map((p) => p.token?.toString?.() ?? String(p.token));\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nexport function isIncomplete(code: string): boolean {\n\t// Track string literals, line comments, block comments, and\n\t// bracket depth. Returns true if the code has any unclosed\n\t// bracket / string / comment.\n\tconst stack: string[] = [];\n\tlet inString: string | null = null;\n\tlet inComment: \"line\" | \"block\" | null = null;\n\tfor (let i = 0; i < code.length; i++) {\n\t\tconst c = code[i];\n\t\tconst next = code[i + 1];\n\t\tif (inComment === \"line\") {\n\t\t\tif (c === \"\\n\") inComment = null;\n\t\t\tcontinue;\n\t\t}\n\t\tif (inComment === \"block\") {\n\t\t\tif (c === \"*\" && next === \"/\") {\n\t\t\t\tinComment = null;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (inString) {\n\t\t\tif (c === \"\\\\\") {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (c === inString) inString = null;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"/\" && next === \"/\") {\n\t\t\tinComment = \"line\";\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"/\" && next === \"*\") {\n\t\t\tinComment = \"block\";\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === '\"' || c === \"'\" || c === \"`\") {\n\t\t\tinString = c;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"{\" || c === \"[\" || c === \"(\") stack.push(c);\n\t\telse if (c === \"}\" || c === \"]\" || c === \")\") stack.pop();\n\t}\n\treturn stack.length > 0 || inString !== null || inComment === \"block\";\n}\n\nexport function formatResult(r: unknown): string {\n\tif (r === null) return \"null\";\n\tif (r === undefined) return \"undefined\";\n\tif (typeof r === \"string\") return r;\n\tif (\n\t\ttypeof r === \"number\" ||\n\t\ttypeof r === \"boolean\" ||\n\t\ttypeof r === \"bigint\"\n\t) return String(r);\n\tif (typeof r === \"function\") {\n\t\tconst fn = r as { name?: string };\n\t\treturn `[Function: ${fn.name || \"anonymous\"}]`;\n\t}\n\tif (typeof r === \"symbol\") return r.toString();\n\ttry {\n\t\treturn JSON.stringify(r, null, 2);\n\t} catch {\n\t\treturn Object.prototype.toString.call(r);\n\t}\n}\n\nexport function formatError(e: Error): string {\n\tif (e.name === \"SyntaxError\") return e.message;\n\treturn e.stack ? e.stack.split(\"\\n\").slice(0, 5).join(\"\\n\") : e.message;\n}\n\nfunction loadHistory(path: string): string[] {\n\tif (!existsSync(path)) return [];\n\ttry {\n\t\treturn readFileSync(path, \"utf-8\").split(\"\\n\").filter(Boolean);\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction saveHistoryFile(path: string, history: string[]): void {\n\ttry {\n\t\tconst dir = dirname(path);\n\t\tif (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n\t\twriteFileSync(path, history.slice(-1000).join(\"\\n\"));\n\t} catch {\n\t\t// best effort\n\t}\n}\n\nexport default replCommand;\n",
84
+ "/**\n * `nx route:list` — list every registered HTTP route.\n *\n * Walks the project's controllers (under paths.controllers) and reads\n * the `@Controller(prefix)` + `@Get/@Post/...` metadata via reflection.\n * For modules that don't use the decorator style, this command emits\n * an informational message instead of failing.\n */\n\nimport { readdirSync, statSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport type { Command, CommandContext } from \"../core/index.js\";\nimport { colors, logger } from \"../core/index.js\";\n\ninterface DiscoveredRoute {\n\tmethod: string;\n\tpath: string;\n\thandler: string;\n\tcontroller: string;\n}\n\nexport const routeListCommand: Command = {\n\tname: \"route:list\",\n\taliases: [\"routes\", \"route-list\"],\n\tsummary: \"List registered HTTP routes\",\n\tdescription:\n\t\t\"Reads route metadata from controllers and prints a table. Falls back to a scan message when controllers don't use the decorator style.\",\n\tflags: [\n\t\t{ name: \"format\", description: \"Output format: table (default) | json\" },\n\t],\n\tasync run(ctx: CommandContext): Promise<number> {\n\t\tconst controllersDir = resolve(ctx.cwd, ctx.config.paths.controllers);\n\n\t\ttry {\n\t\t\tstatSync(controllersDir);\n\t\t} catch {\n\t\t\tlogger.warn(`No controllers directory at ${controllersDir}.`);\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst files = readdirSync(controllersDir).filter((f) => f.endsWith(\".ts\"));\n\t\tif (files.length === 0) {\n\t\t\tlogger.info(\"No controllers found.\");\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst routes: DiscoveredRoute[] = [];\n\n\t\tfor (const file of files) {\n\t\t\tconst fullPath = resolve(controllersDir, file);\n\t\t\ttry {\n\t\t\t\tconst mod: any = await import(`${fullPath}?t=${Date.now()}`);\n\t\t\t\tfor (const exportName of Object.keys(mod)) {\n\t\t\t\t\tconst cls = mod[exportName];\n\t\t\t\t\tif (typeof cls !== \"function\") continue;\n\n\t\t\t\t\tconst prefix =\n\t\t\t\t\t\tReflect.getMetadata(\"nexus:controller:prefix\", cls) ?? \"\";\n\t\t\t\t\tconst routeList = Reflect.getMetadata(\"nexus:routes\", cls) ?? [];\n\n\t\t\t\t\tfor (const r of routeList) {\n\t\t\t\t\t\troutes.push({\n\t\t\t\t\t\t\tmethod: String(r.method).toUpperCase(),\n\t\t\t\t\t\t\tpath: joinPath(prefix, r.path),\n\t\t\t\t\t\t\thandler: String(r.propertyKey),\n\t\t\t\t\t\t\tcontroller: cls.name || exportName,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (err: any) {\n\t\t\t\tlogger.warn(`could not parse ${file}: ${err.message ?? err}`);\n\t\t\t}\n\t\t}\n\n\t\tif (routes.length === 0) {\n\t\t\tlogger.info(\n\t\t\t\t\"No routes discovered via metadata. \" +\n\t\t\t\t\t\"This usually means the controllers use the Adonis or functional style — see nx.config.ts:routing.\",\n\t\t\t);\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst format = (ctx.flags[\"format\"] as string | undefined) ?? \"table\";\n\t\tif (format === \"json\") {\n\t\t\tconsole.log(JSON.stringify(routes, null, 2));\n\t\t\treturn 0;\n\t\t}\n\n\t\troutes.sort((a, b) => a.path.localeCompare(b.path));\n\t\tlogger.heading(`Routes (${routes.length})`);\n\t\tconst methodColors: Record<string, (s: string) => string> = {\n\t\t\tGET: colors.cyan,\n\t\t\tPOST: colors.green,\n\t\t\tPUT: colors.yellow,\n\t\t\tPATCH: colors.yellow,\n\t\t\tDELETE: colors.red,\n\t\t\tOPTIONS: colors.gray,\n\t\t\tHEAD: colors.gray,\n\t\t};\n\t\tconst pathWidth = Math.max(...routes.map((r) => r.path.length));\n\t\tconst methodWidth = Math.max(...routes.map((r) => r.method.length));\n\t\tfor (const r of routes) {\n\t\t\tconst colorize = methodColors[r.method] ?? colors.reset;\n\t\t\tconst m = colorize(r.method.padEnd(methodWidth));\n\t\t\tconst p = colors.bold(r.path.padEnd(pathWidth));\n\t\t\tconst c = colors.dim(`${r.controller}.${r.handler}`);\n\t\t\tconsole.log(` ${m} ${p} ${c}`);\n\t\t}\n\t\tlogger.blank();\n\t\treturn 0;\n\t},\n};\n\nfunction joinPath(prefix: string, sub: string): string {\n\tconst a = prefix.endsWith(\"/\") ? prefix.slice(0, -1) : prefix;\n\tconst b = sub.startsWith(\"/\") ? sub : `/${sub}`;\n\treturn `${a}${b}` || \"/\";\n}\n\nexport default routeListCommand;\n",
85
+ "/**\n * CLI command registry. Imported by `src/cli/index.ts`.\n *\n * Each command is a `Command` object (see `core/index.ts`). The order\n * here is the order commands appear in `nx help`.\n */\n\nimport type { Command } from \"../core/index.js\";\nimport info from \"./info.js\";\nimport init from \"./init.js\";\nimport makeAuth from \"./make-auth.js\";\nimport makeController from \"./make-controller.js\";\nimport makeCrud from \"./make-crud.js\";\nimport makeListener from \"./make-listener.js\";\nimport makeMiddleware from \"./make-middleware.js\";\nimport makeMigration from \"./make-migration.js\";\nimport makeModel from \"./make-model.js\";\nimport makeModule from \"./make-module.js\";\nimport makeQueue from \"./make-queue.js\";\nimport makeSchedule from \"./make-schedule.js\";\nimport makeService from \"./make-service.js\";\nimport makeSession from \"./make-session.js\";\nimport makeValidator from \"./make-validator.js\";\nimport dbMigrate from \"./db-migrate.js\";\nimport dbGenerate from \"./db-generate.js\";\nimport dbSeed from \"./db-seed.js\";\nimport newCmd from \"./new.js\";\nimport configCmd from \"./config.js\";\nimport repl from \"./repl.js\";\nimport routeList from \"./route-list.js\";\n\nexport const commands: Command[] = [\n\tnewCmd,\n\tinit,\n\tconfigCmd,\n\tmakeCrud,\n\tmakeController,\n\tmakeService,\n\tmakeModule,\n\tmakeModel,\n\tmakeMigration,\n\tmakeMiddleware,\n\tmakeValidator,\n\tmakeAuth,\n\tmakeQueue,\n\tmakeSchedule,\n\tmakeListener,\n\tmakeSession,\n\tdbMigrate,\n\tdbGenerate,\n\tdbSeed,\n\trouteList,\n\tinfo,\n\trepl,\n];\n\n/** Look up a command by primary name OR by any alias. */\nexport function findCommand(name: string): Command | undefined {\n\treturn commands.find(\n\t\t(c) => c.name === name || (c.aliases ?? []).includes(name),\n\t);\n}\n",
86
+ "#!/usr/bin/env bun\n\n/**\n * `nx` — the Nexus CLI entry point.\n *\n * Invocation:\n * bunx nx <command> [args...]\n * bunx nx help\n * bunx nx help <command>\n *\n * Resembles Adonis ACE / Rails generators:\n * nx make:controller User\n * nx make:crud Post --no-views\n * nx make:migration create_users_table --columns \"name:text,email:text\"\n * nx info\n * nx route:list\n * nx init --style nest --view inertia --orm drizzle\n *\n * The CLI loads `nx.config.ts` (or `nx.config.js` / `.nxrc.json`) and\n * passes the resolved config + parsed flags to each command.\n */\n\nimport { commands, findCommand } from \"./commands/index.js\";\nimport { loadConfig } from \"./core/config.js\";\nimport { colors, flagBool, logger, parseArgs } from \"./core/index.js\";\n\nasync function main(): Promise<number> {\n\tconst parsed = parseArgs(process.argv.slice(2));\n\tconst verbose = flagBool(parsed.flags, \"verbose\", false);\n\tlogger.setVerbose(verbose);\n\n\t// Top-level flags.\n\tif (parsed.flags[\"version\"] === true) {\n\t\tconsole.log(PKG_VERSION);\n\t\treturn 0;\n\t}\n\n\tif (parsed.flags[\"help\"] === true || parsed.command === \"help\") {\n\t\treturn renderHelp(parsed.positional[0]);\n\t}\n\n\tconst command = parsed.command ? findCommand(parsed.command) : undefined;\n\tif (!command) {\n\t\tif (parsed.command) {\n\t\t\tlogger.error(`Unknown command: ${parsed.command}`);\n\t\t\tlogger.info(`Run \\`nx help\\` for a list of commands.`);\n\t\t\treturn 1;\n\t\t}\n\t\treturn renderHelp();\n\t}\n\n\tconst cwd = process.cwd();\n\tconst config = await loadConfig(cwd);\n\n\treturn command.run({\n\t\tcwd,\n\t\tconfig,\n\t\tpositional: parsed.positional,\n\t\tflags: parsed.flags,\n\t});\n}\n\nfunction renderHelp(commandName?: string): number {\n\tif (commandName) {\n\t\tconst cmd = findCommand(commandName);\n\t\tif (!cmd) {\n\t\t\tlogger.error(`Unknown command: ${commandName}`);\n\t\t\treturn 1;\n\t\t}\n\t\trenderCommandHelp(cmd);\n\t\treturn 0;\n\t}\n\n\tlogger.heading(\"nx — Nexus CLI\");\n\tconsole.log(`\n ${colors.dim(\"Adonis ACE-style command runner for the NexusJS framework.\")}\n\n${colors.bold(\"Usage\")}\n nx <command> [args...]\n\n${colors.bold(\"Commands\")}\n`);\n\n\tconst nameWidth = Math.max(...commands.map((c) => c.name.length));\n\tfor (const c of commands) {\n\t\tconst padded = c.name.padEnd(nameWidth);\n\t\tconst aliasStr = c.aliases?.length\n\t\t\t? ` ${colors.dim(`(${c.aliases.join(\", \")})`)}`\n\t\t\t: \"\";\n\t\tconsole.log(` ${colors.cyan(padded)}${aliasStr} ${c.summary}`);\n\t}\n\n\tconsole.log(`\n${colors.bold(\"Global flags\")}\n --help, -h Show help (or \\`nx help <command>\\`)\n --version, -v Print the CLI version\n --verbose Verbose output\n --no-color Disable ANSI color output\n\n${colors.bold(\"Examples\")}\n ${colors.dim(\"nx new my-app\")}\n ${colors.dim(\"nx init --style nest --view inertia --orm drizzle\")}\n ${colors.dim(\"nx make:crud Post\")}\n ${colors.dim(\"nx make:controller User\")}\n ${colors.dim(\"nx make:migration create_users_table\")}\n ${colors.dim(\"nx info\")}\n ${colors.dim(\"nx route:list\")}\n`);\n\treturn 0;\n}\n\nfunction renderCommandHelp(cmd: import(\"./core/index.js\").Command): void {\n\tlogger.heading(cmd.name);\n\tif (cmd.aliases?.length) {\n\t\tconsole.log(` ${colors.dim(\"aliases:\")} ${cmd.aliases.join(\", \")}`);\n\t}\n\tif (cmd.description) console.log(`\\n ${cmd.description}\\n`);\n\n\tif (cmd.flags?.length) {\n\t\tconsole.log(colors.bold(\"\\nFlags\"));\n\t\tfor (const f of cmd.flags) {\n\t\t\tconst short = f.short ? `, -${f.short}` : \"\";\n\t\t\tconst def =\n\t\t\t\tf.default !== undefined\n\t\t\t\t\t? ` ${colors.dim(`(default: ${String(f.default)})`)}`\n\t\t\t\t\t: \"\";\n\t\t\tconsole.log(` --${f.name}${short.padEnd(6)} ${f.description}${def}`);\n\t\t}\n\t}\n\n\tif (cmd.examples?.length) {\n\t\tconsole.log(colors.bold(\"\\nExamples\"));\n\t\tfor (const ex of cmd.examples) {\n\t\t\tconsole.log(` ${colors.cyan(ex)}`);\n\t\t}\n\t}\n\tconsole.log();\n}\n\nconst PKG_VERSION = \"0.1.0\";\n\nmain()\n\t.then((code) => process.exit(code))\n\t.catch((err) => {\n\t\tlogger.error(err?.message ?? String(err));\n\t\tif (process.env[\"NX_DEBUG\"] === \"1\" && err?.stack) {\n\t\t\tconsole.error(err.stack);\n\t\t}\n\t\tprocess.exit(1);\n\t});\n"
87
+ ],
88
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAMa,cAsCA,aAeA;AAAA;AAAA,EArDA,eAAe;AAAA,IAE3B,YAAY;AAAA,IAGZ,YAAY;AAAA,IAGZ,YAAY;AAAA,IAGZ,QAAQ;AAAA,IAGR,QAAQ;AAAA,IAGR,QAAQ;AAAA,IAGR,UAAU;AAAA,IAGV,YAAY;AAAA,IAGZ,MAAM;AAAA,IAGN,YAAY;AAAA,IAGZ,QAAQ;AAAA,EACT;AAAA,EAKa,cAAc;AAAA,IAC1B,SAAS;AAAA,IACT,UAAU;AAAA,IACV,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,SAAS;AAAA,IACT,KAAK;AAAA,IACL,MAAM;AAAA,EACP;AAAA,EAKa,eAAe;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA;;;AC1CA;AACA;AA6BA,SAAS,YAAY,GAAW;AAAA,EAC/B,OAAO,WAAW,EAAE,MAAM,GAAG,CAAC;AAAA;AAoCxB,SAAS,UAA2B,GAAkB;AAAA,EAC5D,OAAO,QAAQ,SAAS,GAAG;AAAA;AAIrB,SAAS,eAAe,GAA6B;AAAA,EAC3D,OAAO,QAAQ,SAAS;AAAA;AAIlB,SAAS,eAA4B,CAAC,KAAqC;AAAA,EACjF,OAAO,QAAQ,SAAS,GAAG,MAAM,IAAI,GAAG;AAAA;AAIlC,SAAS,eAAe,CAAC,KAAsB,OAAsB;AAAA,EAC3E,MAAM,IAAI,QAAQ,SAAS;AAAA,EAC3B,IAAI;AAAA,IAAG,EAAE,MAAM,IAAI,KAAK,KAAK;AAAA;AAAA,IA5DjB,SAGA,eAOP,SAGO;AAAA;AAAA,EAbA,UAAU,OAAO,IAAI,eAAe;AAAA,EAGpC,gBAAgB,OAAO,IAAI,qBAAqB;AAAA,EAOvD,UAAU,IAAI;AAAA,EAGP,sBAAsB;AAAA,IAElC,GAAG,GAA6B;AAAA,MAC/B,OAAO,QAAQ,SAAS;AAAA;AAAA,IAMzB,GAAM,CAAC,OAAqB,IAA0C;AAAA,MACrE,OAAO,QAAQ,IAAI,OAAO,EAAE;AAAA;AAAA,IAK7B,MAAM,CAAC,SAAsB,WAAsC;AAAA,MAClE,OAAO;AAAA,QACN,IAAI,aAAa;AAAA,QACjB;AAAA,QACA;AAAA,QACA,OAAO,IAAI;AAAA,MACZ;AAAA;AAAA,EAEF;AAAA;;;ACvEA;AAAA;AAoBO,MAAM,YAAY;AAAA,EAEhB,YAAY,IAAI;AAAA,EAGhB,aAAa,IAAI;AAAA,EAGjB,YAAY,IAAI;AAAA,EAGhB;AAAA,EAER,WAAW,CAAC,QAAsB;AAAA,IACjC,KAAK,SAAS;AAAA;AAAA,EAIf,WAAW,GAAgB;AAAA,IAC1B,OAAO,IAAI,YAAY,IAAI;AAAA;AAAA,EAI5B,QAAQ,CAAC,WAAkD;AAAA,IAC1D,MAAM,OAAO,MAAM,QAAQ,SAAS,IAAI,YAAY,CAAC,SAAS;AAAA,IAC9D,WAAW,YAAY,MAAM;AAAA,MAC5B,KAAK,YAAY,QAAQ;AAAA,IAC1B;AAAA;AAAA,EAGO,WAAW,CAAC,UAA+B;AAAA,IAClD,MAAM,SAAS,KAAK,kBAAkB,QAAQ;AAAA,IAC9C,IAAI,KAAK,UAAU,IAAI,OAAO,KAAK,GAAG;AAAA,MACrC,MAAM,IAAI,MACT,iCAAiC,KAAK,UAAU,OAAO,KAAK,SAC3D,uDACF;AAAA,IACD;AAAA,IACA,KAAK,UAAU,IAAI,OAAO,OAAO,MAAM;AAAA;AAAA,EAQhC,iBAAiB,CAAC,UAAyC;AAAA,IAClE,IAAI,KAAK,QAAQ,QAAQ,GAAG;AAAA,MAC3B,MAAM,eAAe,KAAK,sBAAsB,QAAQ;AAAA,MAExD,MAAM,aAAa,QAAQ,YAAY,kBAAkB,QAAQ;AAAA,MAGjE,OAAO;AAAA,QACN,OAAO;AAAA,QACP;AAAA,QACA,OAAO,cAAc;AAAA,QACrB;AAAA,MACD;AAAA,IACD;AAAA,IAEA,MAAM,OAAO,KAAK,yBAAyB,QAAQ;AAAA,IACnD,MAAM,QACJ,WAAW,YAAY,SAAS,SAAU;AAAA,IAE5C,OAAO;AAAA,MACN,OAAO,SAAS;AAAA,MAChB;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IACf;AAAA;AAAA,EAIO,qBAAqB,CAAC,KAA0C;AAAA,IACvE,MAAM,aACL,QAAQ,YAAY,aAAa,YAAY,GAAG,KAAK,CAAC;AAAA,IACvD,MAAM,MAAM,IAAI;AAAA,IAChB,WAAW,KAAK,YAAY;AAAA,MAC3B,IAAI,KAAK,MAAM;AAAA,QAAQ,IAAI,IAAI,CAAC;AAAA,IACjC;AAAA,IACA,OAAO;AAAA;AAAA,EAIA,wBAAwB,CAC/B,UAC2B;AAAA,IAC3B,MAAM,MAAM,IAAI;AAAA,IAChB,IACC,YAAY,YACZ,MAAM,QAAS,SAA6B,MAAM,GACjD;AAAA,MACD,WAAW,OAAQ,SAA6B,QAAS;AAAA,QACxD,IAAI,OAAO,OAAO,QAAQ,YAAY,WAAW,KAAK;AAAA,UACrD,IAAI,IAAK,IAAY,KAAK;AAAA,QAC3B,EAAO,SAAI,KAAK;AAAA,UACf,IAAI,IAAI,GAA0B;AAAA,QACnC;AAAA,MACD;AAAA,IACD,EAAO,SAAI,cAAc,UAAU;AAAA,MAClC,MAAM,MAAO,SAAiB;AAAA,MAC9B,OAAO,KAAK,sBAAsB,GAAG;AAAA,IACtC;AAAA,IACA,OAAO;AAAA;AAAA,EAOR,OAAgB,CAAC,OAA6B;AAAA,IAC7C,IAAI,KAAK,UAAU,IAAI,KAAK,GAAG;AAAA,MAC9B,MAAM,IAAI,MACT,iDAAiD,KAAK,UAAU,KAAK,SACpE,qBAAqB,CAAC,GAAG,KAAK,SAAS,EAAE,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,MAAM,GACpF;AAAA,IACD;AAAA,IAGA,MAAM,SAAS,KAAK,WAAW,IAAI,KAAK;AAAA,IACxC,IAAI,WAAW;AAAA,MAAW,OAAO;AAAA,IAKjC,MAAM,UAAU,KAAK,UAAU,IAAI,KAAK;AAAA,IACxC,IAAI,WAAW,QAAQ,UAAU,WAAW;AAAA,MAC3C,MAAM,QAAQ,oBAAoB,IAAI;AAAA,MACtC,IAAI,OAAO;AAAA,QACV,MAAM,KAAK,MAAM,UAAU,WAAW,IAAI,KAAK;AAAA,QAC/C,IAAI,OAAO;AAAA,UAAW,OAAO;AAAA,QAC7B,MAAM,OAAO,KAAK,YAAY,OAAO;AAAA,QACrC,MAAM,UAAU,WAAW,IAAI,OAAO,IAAI;AAAA,QAC1C,OAAO;AAAA,MACR;AAAA,IACD;AAAA,IAEA,MAAM,SAAS,KAAK,UAAU,IAAI,KAAK;AAAA,IACvC,IAAI,CAAC,QAAQ;AAAA,MACZ,IAAI,KAAK,QAAQ;AAAA,QAChB,IAAI;AAAA,UACH,OAAO,KAAK,OAAO,QAAW,KAAK;AAAA,UAClC,MAAM;AAAA,MAGT;AAAA,MACA,MAAM,IAAI,MACT,oBAAoB,KAAK,UAAU,KAAK,SACvC,0EACF;AAAA,IACD;AAAA,IAGA,MAAM,kBAAkB,KAAK,UAAU,IAAI,KAAK,MAAM,SAAS,OAAO;AAAA,IAEtE,KAAK,UAAU,IAAI,KAAK;AAAA,IACxB,IAAI;AAAA,MACH,MAAM,WAAW,gBAAgB,YAAY,MAAM;AAAA,MACnD,IAAI,OAAO,UAAU,aAAa;AAAA,QACjC,gBAAgB,WAAW,IAAI,OAAO,QAAQ;AAAA,MAC/C;AAAA,MACA,OAAO;AAAA,cACN;AAAA,MACD,KAAK,UAAU,OAAO,KAAK;AAAA;AAAA;AAAA,EAK7B,UAAmB,CAAC,OAAyC;AAAA,IAC5D,IAAI;AAAA,MACH,OAAO,KAAK,QAAW,KAAK;AAAA,MAC3B,MAAM;AAAA,MACP;AAAA;AAAA;AAAA,EAQM,WAAW,CAAC,QAA6B;AAAA,IAChD,MAAM,WAAW,OAAO;AAAA,IAExB,IAAI,KAAK,QAAQ,QAAQ,GAAG;AAAA,MAC3B,MAAM,aACL,QAAQ,YAAY,aAAa,YAAY,QAAQ,KAAK,CAAC;AAAA,MAK5D,MAAM,YACL,QAAQ,YAAY,aAAa,QAAQ,QAAQ,KAAK,IAAI;AAAA,MAK3D,MAAM,iBACL,UAAU,OAAO,IAAI,KAAK,IAAI,GAAG,MAAM,KAAK,UAAU,KAAK,CAAC,CAAC,IAAI,IAAI;AAAA,MACtE,MAAM,cAAc,KAAK,IAAI,WAAW,QAAQ,cAAc;AAAA,MAC9D,MAAM,SAAgB,IAAI,MAAM,WAAW;AAAA,MAE3C,SAAS,QAAQ,EAAG,QAAQ,aAAa,SAAS;AAAA,QACjD,IAAI,UAAU,IAAI,KAAK,GAAG;AAAA,UACzB,OAAO,SAAS,KAAK,QAAQ,UAAU,IAAI,KAAK,CAAC;AAAA,UACjD;AAAA,QACD;AAAA,QACA,MAAM,OAAO,WAAW;AAAA,QACxB,IAAI,CAAC,QAAQ,SAAS,QAAQ;AAAA,UAC7B,MAAM,IAAI,MACT,oCAAoC,aAAa,SAAS,QAAQ,oBACjE,2DACA,+DACA,iEACA,kEACA,oFACF;AAAA,QACD;AAAA,QACA,OAAO,SAAS,KAAK,QAAQ,IAAI;AAAA,MAClC;AAAA,MAEA,OAAO,IAAI,SAAS,GAAG,MAAM;AAAA,IAC9B;AAAA,IAEA,IAAI,cAAc,UAAU;AAAA,MAC3B,OAAQ,SAAgC;AAAA,IACzC;AAAA,IAEA,IAAI,cAAc,UAAU;AAAA,MAC3B,MAAM,WAAY,SAAiB;AAAA,MAGnC,MAAM,aACL,QAAQ,YAAY,aAAa,YAAY,QAAQ,KAAK,CAAC;AAAA,MAC5D,MAAM,YACL,QAAQ,YAAY,aAAa,QAAQ,QAAQ,KAAK,IAAI;AAAA,MAC3D,MAAM,iBACL,UAAU,OAAO,IAAI,KAAK,IAAI,GAAG,MAAM,KAAK,UAAU,KAAK,CAAC,CAAC,IAAI,IAAI;AAAA,MACtE,MAAM,cAAc,KAAK,IAAI,WAAW,QAAQ,cAAc;AAAA,MAC9D,MAAM,SAAgB,IAAI,MAAM,WAAW;AAAA,MAC3C,SAAS,QAAQ,EAAG,QAAQ,aAAa,SAAS;AAAA,QACjD,IAAI,UAAU,IAAI,KAAK,GAAG;AAAA,UACzB,OAAO,SAAS,KAAK,QAAQ,UAAU,IAAI,KAAK,CAAC;AAAA,UACjD;AAAA,QACD;AAAA,QACA,MAAM,OAAO,WAAW;AAAA,QACxB,IAAI,CAAC,QAAQ,SAAS,QAAQ;AAAA,UAC7B,MAAM,IAAI,MACT,oCAAoC,aAAa,SAAS,WACzD,yEACA,qBACF;AAAA,QACD;AAAA,QACA,OAAO,SAAS,KAAK,QAAQ,IAAI;AAAA,MAClC;AAAA,MACA,OAAO,IAAI,SAAS,GAAG,MAAM;AAAA,IAC9B;AAAA,IAEA,IAAI,gBAAgB,UAAU;AAAA,MAC7B,MAAM,kBAAkB;AAAA,MACxB,MAAM,SAAS,gBAAgB,UAAU,CAAC;AAAA,MAC1C,MAAM,QAAO,OAAO,IAAI,CAAC,QAAQ;AAAA,QAChC,IAAI,OAAO,OAAO,QAAQ,YAAY,WAAW,KAAK;AAAA,UACrD,QAAQ,OAAO,aAAa;AAAA,UAC5B,OAAO,WAAW,KAAK,WAAW,KAAK,IAAI,KAAK,QAAQ,KAAK;AAAA,QAC9D;AAAA,QACA,OAAO,KAAK,QAAQ,GAA0B;AAAA,OAC9C;AAAA,MACD,OAAO,gBAAgB,WAAW,GAAG,KAAI;AAAA,IAC1C;AAAA,IAEA,IAAI,iBAAiB,UAAU;AAAA,MAC9B,MAAM,WAAY,SAAiB;AAAA,MACnC,OAAO,KAAK,QAAQ,QAAQ;AAAA,IAC7B;AAAA,IAEA,MAAM,IAAI,MACT,qCAAqC,KAAK,UAAU,OAAO,KAAK,IACjE;AAAA;AAAA,EAID,GAAG,CAAC,OAAqC;AAAA,IACxC,OAAO,KAAK,UAAU,IAAI,KAAK;AAAA;AAAA,EAIhC,IAAI,GAAa;AAAA,IAChB,OAAO,CAAC,GAAG,KAAK,UAAU,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA;AAAA,EAGvD,OAAO,CAAC,OAAgC;AAAA,IAC/C,OAAO,OAAO,UAAU;AAAA;AAAA,EAGjB,SAAS,CAAC,OAAoC;AAAA,IACrD,IAAI,OAAO,UAAU;AAAA,MAAY,OAAO,MAAM,QAAQ;AAAA,IACtD,IAAI,OAAO,UAAU;AAAA,MAAU,OAAO,MAAM,SAAS;AAAA,IACrD,OAAO,OAAO,KAAK;AAAA;AAErB;AAAA,IAMa;AAAA;AAAA,EArUb;AAAA,EASA;AAAA,EA4Ta,uBAAN,MAAM,6BAA6B,YAAY;AAAA,IAC7C,mBAAmB,IAAI;AAAA,IAE/B,cAAc,CAAC,aAAwB,WAA8B;AAAA,MACpE,KAAK,iBAAiB,IAAI,aAAa,SAAS;AAAA;AAAA,IAGjD,kBAAkB,CAAC,aAAiD;AAAA,MACnE,OAAO,KAAK,iBAAiB,IAAI,WAAW;AAAA;AAAA,EAE9C;AAAA;;;ACxUO,MAAM,cAAc;AAAA,EAGN;AAAA,EAFZ,UAAU,IAAI;AAAA,EAEtB,WAAW,CAAS,MAA4B;AAAA,IAA5B;AAAA;AAAA,EAMpB,IAAI,CAAC,YAAoE;AAAA,IACxE,MAAM,aAAa,KAAK,WAAW,YAAY,KAAK,IAAI;AAAA,IACxD,MAAM,MAAM,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC;AAAA,IACrC,OAAO,EAAE,MAAM,YAAY,SAAS,IAAI;AAAA;AAAA,EAQjC,UAAU,CACjB,aACA,iBACa;AAAA,IACb,IAAI,KAAK,QAAQ,IAAI,WAAW,GAAG;AAAA,MAClC,OAAO,KAAK,QAAQ,IAAI,WAAW;AAAA,IACpC;AAAA,IAEA,MAAM,UAAU,KAAK,kBAAkB,WAAW;AAAA,IAClD,MAAM,YAAY,gBAAgB,YAAY;AAAA,IAC9C,KAAK,KAAK,eAAe,aAAa,SAAS;AAAA,IAG/C,MAAM,cAA0B;AAAA,MAC/B,aAAa,CAAC;AAAA,MACd,WAAW,CAAC;AAAA,MACZ,SAAS,CAAC;AAAA,MACV;AAAA,IACD;AAAA,IACA,KAAK,QAAQ,IAAI,aAAa,WAAW;AAAA,IAGzC,WAAW,YAAY,QAAQ,WAAW,CAAC,GAAG;AAAA,MAC7C,MAAM,iBAAiB,KAAK,WAAW,UAAU,eAAe;AAAA,MAGhE,WAAW,OAAO,eAAe,SAAS;AAAA,QACzC,IAAI,CAAC,gBAAgB,IAAI,GAAG,GAAG;AAAA,UAG9B,gBAAgB,SAAS;AAAA,YACxB,SAAS;AAAA,YACT,YAAY,MAAM,eAAe,UAAU,QAAQ,GAAG;AAAA,UACvD,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IAGA,MAAM,YAAY;AAAA,MACjB,GAAI,QAAQ,aAAa,CAAC;AAAA,MAC1B,GAAI,QAAQ,eAAe,CAAC;AAAA,IAC7B;AAAA,IACA,UAAU,SAAS,SAAS;AAAA,IAG5B,WAAW,OAAO,QAAQ,WAAW,CAAC,GAAG;AAAA,MACxC,IAAI,CAAC,gBAAgB,IAAI,GAAG,GAAG;AAAA,QAC9B,gBAAgB,SAAS;AAAA,UACxB,SAAS;AAAA,UACT,YAAY,MAAM,UAAU,QAAQ,GAAG;AAAA,QACxC,CAAC;AAAA,MACF;AAAA,IACD;AAAA,IAEA,MAAM,SAAqB;AAAA,MAC1B,aAAa,QAAQ,eAAe,CAAC;AAAA,MACrC,WAAW,QAAQ,aAAa,CAAC;AAAA,MACjC,SAAS,QAAQ,WAAW,CAAC;AAAA,MAC7B;AAAA,IACD;AAAA,IACA,KAAK,QAAQ,IAAI,aAAa,MAAM;AAAA,IACpC,OAAO;AAAA;AAAA,EAGA,iBAAiB,CAAC,aAAuC;AAAA,IAChE,MAAM,OAAO,QAAQ,YAAY,aAAa,QAAQ,WAAW;AAAA,IAGjE,IAAI,CAAC,MAAM;AAAA,MACV,MAAM,IAAI,MACT,UAAU,YAAY,2CACvB;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAIR,GAAG,CAAC,aAAgD;AAAA,IACnD,OAAO,KAAK,QAAQ,IAAI,WAAW;AAAA;AAErC;AAAA;AAAA,EApHA;AAAA;;;ACMO,SAAS,OAAM,GAAe;AAAA,EACpC,OAAO,OAAO,IAAG,SAAS;AAAA,IACzB,MAAM,QAAQ,YAAY,IAAI;AAAA,IAC9B,MAAM,KAAK;AAAA,IACX,MAAM,MAAM,YAAY,IAAI,IAAI,OAAO,QAAQ,CAAC;AAAA,IAChD,MAAM,SAAS,GAAE,IAAI;AAAA,IACrB,QAAQ,IAAI,IAAI,GAAE,IAAI,WAAW,GAAE,IAAI,WAAW,WAAW,OAAO;AAAA,IACpE;AAAA;AAAA;AAWK,SAAS,IAAI,CAAC,SAKN;AAAA,EACd,MAAM,SAAS,QAAQ;AAAA,EACvB,MAAM,UAAU,QAAQ,WAAW;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,MAAM,aAAa,QAAQ,WAAW,CAAC,gBAAgB,eAAe;AAAA,EACtE,MAAM,eAAe,MAAM,QAAQ,UAAU,IAC1C,WAAW,KAAK,GAAG,IACnB;AAAA,EAEH,OAAO,OAAO,IAAG,SAAS;AAAA,IACzB,MAAM,MAAM,CAAC,KAAa,UAAkB;AAAA,MAC3C,GAAE,IAAI,QAAQ,IAAI,KAAK,KAAK;AAAA;AAAA,IAE7B,IACC,+BACA,MAAM,QAAQ,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI,MAC5C;AAAA,IACA,IAAI,gCAAgC,QAAQ,KAAK,GAAG,CAAC;AAAA,IACrD,IAAI,gCAAgC,YAAY;AAAA,IAChD,IAAI,QAAQ;AAAA,MAAa,IAAI,oCAAoC,MAAM;AAAA,IAEvE,IAAI,GAAE,IAAI,WAAW,WAAW;AAAA,MAC/B,OAAO,GAAE,KAAK,MAAM,GAAG;AAAA,IACxB;AAAA,IACA,MAAM,KAAK;AAAA,IACX;AAAA;AAAA;AAQK,SAAS,YAAY,GAAe;AAAA,EAC1C,OAAO,OAAO,IAAG,SAAS;AAAA,IACzB,IAAI;AAAA,MACH,MAAM,KAAK;AAAA,MACV,OAAO,KAAU;AAAA,MAClB,MAAM,SAAS,KAAK,UAAU;AAAA,MAC9B,MAAM,OAAO,KAAK,QAAQ;AAAA,QACzB,OAAO,KAAK,WAAW;AAAA,MACxB;AAAA,MACA,OAAO,GAAE,KAAK,MAAM,MAAa;AAAA;AAAA,IAElC;AAAA;AAAA;;;ACxEF;AAIO,SAAS,UAAU,CAAC,SAAiB,KAAqB;AAAA,EAChE,OAAO,CAAC,WAAmB;AAAA,IAC1B,MAAM,aAAa,gBAAgB,MAAM;AAAA,IACzC,MAAM,OAA2B,EAAE,QAAQ,WAAW;AAAA,IACtD,QAAQ,eAAe,aAAa,YAAY,MAAM,MAAM;AAAA;AAAA;AAIvD,SAAS,qBAAqB,CAAC,QAAiC;AAAA,EACtE,OACC,QAAQ,YAAY,aAAa,YAAY,MAAM,KAAK,EAAE,QAAQ,IAAI;AAAA;AAIjE,SAAS,YAAY,CAAC,QAAsB;AAAA,EAClD,OAAO,QAAQ,YAAY,aAAa,YAAY,MAAM;AAAA;AAS3D,SAAS,eAAe,CAAC,QAAwB;AAAA,EAChD,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,IAAI,WAAW,OAAO,OAAO,SAAS,GAAG,GAAG;AAAA,IAC3C,OAAO,OAAO,MAAM,GAAG,EAAE;AAAA,EAC1B;AAAA,EACA,OAAO;AAAA;AAAA;AAAA,EAhCR;AAAA;;;ACGA;AAIA,SAAS,WAAW,CAAC,QAAoB,MAA+B;AAAA,EACvE,OAAO,CACN,QACA,aACA,eACI;AAAA,IACJ,MAAM,SACL,QAAQ,YAAY,aAAa,QAAQ,OAAO,WAAW,KAAK,CAAC;AAAA,IAElE,OAAO,KAAK;AAAA,MACX;AAAA,MACA,MAAM,cAAc,IAAI;AAAA,MACxB;AAAA,MACA,SAAS,WAAW;AAAA,IACrB,CAAC;AAAA,IAED,QAAQ,eAAe,aAAa,QAAQ,QAAQ,OAAO,WAAW;AAAA;AAAA;AAIxE,SAAS,aAAa,CAAC,MAAsB;AAAA,EAC5C,IAAI,CAAC,QAAQ,SAAS;AAAA,IAAK,OAAO;AAAA,EAClC,OAAO,KAAK,WAAW,GAAG,IAAI,OAAO,IAAI;AAAA;AAWnC,SAAS,SAAS,CAAC,QAA8B;AAAA,EACvD,OAAO,QAAQ,YAAY,aAAa,QAAQ,MAAM,KAAK,CAAC;AAAA;AAAA,IAThD,MAAM,CAAC,OAAe,QAAQ,YAAY,OAAO,IAAI,GACrD,OAAO,CAAC,OAAe,QAAQ,YAAY,QAAQ,IAAI,GACvD,MAAM,CAAC,OAAe,QAAQ,YAAY,OAAO,IAAI,GACrD,SAAS,CAAC,OAAe,QAAQ,YAAY,UAAU,IAAI,GAC3D,QAAQ,CAAC,OAAe,QAAQ,YAAY,SAAS,IAAI,GACzD,UAAU,CAAC,OAAe,QAAQ,YAAY,WAAW,IAAI,GAC7D,OAAO,CAAC,OAAe,QAAQ,YAAY,QAAQ,IAAI;AAAA;AAAA,EAlCpE;AAAA;;;ACHA;AAIO,SAAS,oBAAoB,CACnC,MACA,MACqB;AAAA,EACrB,OAAO,CACN,QACA,aACA,mBACI;AAAA,IAGJ,IAAI,gBAAgB,WAAW;AAAA,MAC9B,MAAM,SACL,QAAQ,YAAY,aAAa,QAAQ,QAAQ,WAAW,KAAK,CAAC;AAAA,MACnE,OAAO,KAAK;AAAA,QACX,OAAO;AAAA,QACP;AAAA,QACA,MAAM,OAAO,SAAS,WAAW,OAAO;AAAA,QACxC,MAAM,OAAO,SAAS,WAAW,OAAO;AAAA,MACzC,CAAC;AAAA,MACD,QAAQ,eAAe,aAAa,QAAQ,QAAQ,QAAQ,WAAW;AAAA,IACxE,EAAO;AAAA,MACN,MAAM,SACL,QAAQ,YAAY,aAAa,QAAQ,MAAM,KAAK,CAAC;AAAA,MACtD,OAAO,KAAK;AAAA,QACX,OAAO;AAAA,QACP;AAAA,QACA,MAAM,OAAO,SAAS,WAAW,OAAO;AAAA,QACxC,MAAM,OAAO,SAAS,WAAW,OAAO;AAAA,MACzC,CAAC;AAAA,MACD,QAAQ,eAAe,aAAa,QAAQ,QAAQ,MAAM;AAAA;AAAA;AAAA;AAmBtD,SAAS,gBAAgB,CAC/B,QACA,aACkB;AAAA,EAClB,OAAO,QAAQ,YAAY,aAAa,QAAQ,QAAQ,WAAW,KAAK,CAAC;AAAA;AAAA,IAlB7D,MAAM,MAAM,qBAAqB,YAAY,OAAO,GACpD,MAAM,MAAM,qBAAqB,YAAY,QAAQ,GACrD,OAAO,MAAM,qBAAqB,YAAY,IAAI,GAClD,OAAO,CAAC,QACpB,qBAAqB,YAAY,MAAM,GAAG,GAC9B,QAAQ,CAAC,QACrB,qBAAqB,YAAY,OAAO,GAAG,GAC/B,QAAQ,CAAC,QACrB,qBAAqB,YAAY,OAAO,GAAG,GAC/B,WAAU,CAAC,QACvB,qBAAqB,YAAY,SAAS,GAAG,GACjC,MAAM,MAAM,qBAAqB,YAAY,GAAG,GAChD,OAAO,MAAM,qBAAqB,YAAY,IAAI;AAAA;AAAA,EAlD/D;AAAA;;;ACFA;AAIO,SAAS,QAAQ,CAAC,SAA8C;AAAA,EACtE,OAAO,CACN,QACA,aACA,eACI;AAAA,IACJ,QAAQ,eACP,aAAa,UACb,SACA,OAAO,aACP,WACD;AAAA;AAAA;AAIK,SAAS,qBAAqB,CACpC,QACA,aACiC;AAAA,EACjC,OAAO,QAAQ,YAAY,aAAa,UAAU,QAAQ,WAAW;AAAA;AAAA;AAAA,EAtBtE;AAAA;;;ACyBO,SAAS,eAAe,CAC9B,UACA,OACmB;AAAA,EACnB,IAAI,CAAC;AAAA,IAAU,OAAO;AAAA,EAEtB,MAAM,SAA2B,CAAC;AAAA,EAElC,IAAI,SAAS;AAAA,IAAM,OAAO,OAAO,UAAU,SAAS,MAAM,MAAM,MAAM,MAAM;AAAA,EACvE;AAAA,WAAO,OAAO,MAAM;AAAA,EAEzB,IAAI,SAAS;AAAA,IACZ,OAAO,QAAQ,UAAU,SAAS,OAAO,MAAM,OAAO,OAAO;AAAA,EACzD;AAAA,WAAO,QAAQ,MAAM;AAAA,EAE1B,IAAI,SAAS;AAAA,IACZ,OAAO,SAAS,UAAU,SAAS,QAAQ,MAAM,QAAQ,QAAQ;AAAA,EAC7D;AAAA,WAAO,SAAS,MAAM;AAAA,EAE3B,IAAI,SAAS;AAAA,IACZ,OAAO,UAAU,UAAU,SAAS,SAAS,MAAM,SAAS,SAAS;AAAA,EACjE;AAAA,WAAO,UAAU,MAAM;AAAA,EAE5B,OAAO;AAAA;AAGR,SAAS,SAAS,CAAC,QAAa,OAAgB,MAAuB;AAAA,EACtE,IAAI,CAAC,YAAY,MAAM,GAAG;AAAA,IAEzB,IAAI,OAAO,WAAW;AAAA,MAAY,OAAO,OAAO,KAAK;AAAA,IACrD,MAAM,IAAI,MACT,cAAc,yDAAyD,OAAO,SAC/E;AAAA,EACD;AAAA,EACA,MAAM,SAAS,OAAO,UAAU,KAAK;AAAA,EACrC,IAAI,CAAC,OAAO,SAAS;AAAA,IACpB,MAAM,IAAI,gBAAgB,OAAO,KAAK;AAAA,EACvC;AAAA,EACA,OAAO,OAAO;AAAA;AAGf,SAAS,WAAW,CAAC,OAAgC;AAAA,EACpD,OACC,UAAU,QACV,OAAO,UAAU,YACjB,OAAO,MAAM,cAAc;AAAA;AAQtB,SAAS,qBAAqB,CAAC,KAGpC;AAAA,EACD,OAAO;AAAA,IACN,QAAQ,IAAI;AAAA,IACZ,MAAM;AAAA,MACL,OAAO,IAAI;AAAA,MACX,QAAQ,IAAI;AAAA,IACb;AAAA,EACD;AAAA;AAAA,IA7FY;AAAA;AAAA,oBAAN,MAAM,wBAAwB,MAAM;AAAA,IACjC,SAAS;AAAA,IACT;AAAA,IAET,WAAW,CAAC,UAAoB;AAAA,MAC/B,MAAM,mBAAmB;AAAA,MACzB,KAAK,OAAO;AAAA,MACZ,KAAK,SAAS,SAAS;AAAA;AAAA,EAEzB;AAAA;;;ACXA;AAAA;AAGO,MAAM,aAAoC;AAAA,EACvC,OAAO;AAAA,EACR,QAAQ,IAAI;AAAA,EAEpB,MAAM,CACL,WACA,MACA,SACA,SACkB;AAAA,IASlB,MAAM,OAA4B,CAAC;AAAA,IACnC,YAAY,GAAG,MAAM,OAAO,QAAQ,IAAI,GAAG;AAAA,MAC1C,KAAK,KAAK,OAAO,MAAM,WAAW,IAAI,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,IAChE;AAAA,IACA,MAAM,SAAS,KAAK,UAAU,MAAM,SAAS,OAAO;AAAA,IACpD,OAAO,KAAK,YAAY,WAAU,OAAO,EAAE,MAAM;AAAA;AAAA,EAGlD,OAAO,CAAC,WAAkB,SAAuB;AAAA,IAChD,MAAM,WAAW,KAAK,YAAY,WAAU,OAAO;AAAA,IACnD,OAAO,CAAC,SAA8B,SAAS,IAAI;AAAA;AAAA,EAG5C,WAAW,CAAC,WAAkB,SAAuB;AAAA,IAC5D,MAAM,WAAW,UAAU,GAAG,QAAQ,SAAS,MAAM,OAAO;AAAA,IAC5D,IAAI,WAAW,KAAK,MAAM,IAAI,QAAQ;AAAA,IACtC,IAAI,CAAC,UAAU;AAAA,MACd,WAAW,gBAAgB,WAAU;AAAA,QACpC,QAAQ,SAAS,UAAU;AAAA,MAC5B,CAAC;AAAA,MACD,KAAK,MAAM,IAAI,UAAU,QAAQ;AAAA,IAClC;AAAA,IACA,OAAO;AAAA;AAAA,EAIA,SAAS,CAChB,MACA,SACA,SACsB;AAAA,IACtB,MAAM,SAA8B,KAAK,KAAK;AAAA,IAC9C,IAAI,SAAS;AAAA,MACZ,IAAI,QAAQ;AAAA,QAAS,OAAO,WAAW,QAAQ;AAAA,MAC/C,IAAI,QAAQ;AAAA,QAAU,OAAO,YAAY,QAAQ;AAAA,MACjD,IAAI,QAAQ;AAAA,QAAS,OAAO,OAAO,QAAQ,QAAQ,OAAO;AAAA,IAC3D;AAAA,IACA,IAAI,SAAS;AAAA,MAAQ,OAAO,UAAU,QAAQ;AAAA,IAC9C,OAAO;AAAA;AAET;AAAA;;;AClDO,MAAM,YAAmC;AAAA,EAE3B;AAAA,EADX,OAAO;AAAA,EAChB,WAAW,CAAS,MAAiB;AAAA,IAAjB;AAAA;AAAA,OAEd,OAAM,CACX,WACA,MACA,SACA,SACkB;AAAA,IAClB,IAAI,CAAC,KAAK,MAAM;AAAA,MACf,MAAM,IAAI,MACT,4CACC,+DACA,0CACF;AAAA,IACD;AAAA,IACA,MAAM,KAAK,KAAK,KAAK,aAAa,KAAK,KAAK;AAAA,IAC5C,IAAI,CAAC,IAAI;AAAA,MACR,MAAM,IAAI,MACT,mEACD;AAAA,IACD;AAAA,IACA,OAAO,GAAG,KAAK,KAAK,MAAM,WAAU,KAAK,MAAM,UAAU,QAAQ,CAAC;AAAA;AAEpE;;;ACvBO,MAAM,WAAkC;AAAA,EACrC,OAAO;AAAA,EACR,QAAQ,IAAI;AAAA,OAEd,OAAM,CACX,WACA,MACA,UACA,UACkB;AAAA,IAClB,MAAM,WAAW,KAAK,YAAY,SAAQ;AAAA,IAC1C,OAAO,SAAS,IAAI;AAAA;AAAA,EAGrB,OAAO,CAAC,WAAkB,UAAwB;AAAA,IACjD,MAAM,WAAW,KAAK,YAAY,SAAQ;AAAA,IAC1C,OAAO,CAAC,SAA8B,QAAQ,QAAQ,SAAS,IAAI,CAAC;AAAA;AAAA,EAG7D,WAAW,CAAC,WAAkB;AAAA,IACrC,IAAI,KAAK,KAAK,MAAM,IAAI,SAAQ;AAAA,IAChC,IAAI,CAAC,IAAI;AAAA,MAGR,IAAI;AAAA,MACJ,IAAI;AAAA,QAEH,uBAAqB;AAAA,QACpB,OAAO,GAAG;AAAA,QACX,MAAM,IAAI,MACT,6DACC,qEACF;AAAA;AAAA,MAED,MAAM,MAAM,IAAI;AAAA,MAChB,KAAK,CAAC,SACL,IAAI,aAAa,WAAU,IAAI;AAAA,MAChC,KAAK,MAAM,IAAI,WAAU,EAAE;AAAA,IAC5B;AAAA,IACA,OAAO;AAAA;AAET;;;;;;;;;;ACrCO,SAAS,YAAY,CAAC,MAAoB;AAAA,EAChD,WAAW,OAAQ,KAAK,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,IAAI,OAAO,GAAG,UAAW;AAAA;AAI9E,SAAS,YAAY,GAAW;AAAA,EACtC,OAAO;AAAA;AAWR,SAAS,cAAc,CAAC,MAAuB;AAAA,EAC9C,MAAM,QAAQ,KAAK,YAAY;AAAA,EAC/B,OAAO,eAAe,KAAK,CAAC,QAAQ,MAAM,SAAS,GAAG,CAAC;AAAA;AAUxD,SAAS,aAAa,CAAC,WAA+B;AAAA,EACrD,MAAM,QAAQ,UAAS,YAAY;AAAA,EACnC,IAAI,MAAM,SAAS,OAAO;AAAA,IAAG,OAAO,IAAI;AAAA,EACxC,IAAI,MAAM,SAAS,MAAM;AAAA,IAAG,OAAO,IAAI;AAAA,EACvC,OAAO,IAAI;AAAA;AAgBZ,eAAsB,UAAU,CAC/B,WACA,MACA,SACkB;AAAA,EAClB,IAAI,SAAS;AAAA,EACb,IAAI,eAAe,SAAQ,KAAK,SAAS,SAAS,GAAG;AAAA,IACpD,MAAM,SAAS,MAAM,aAAa,UAAU,SAAQ;AAAA,IACpD,IAAI,WAAW,MAAM;AAAA,MACpB,MAAM,IAAI,MACT,iCAAiC,yBAAwB,WAC1D;AAAA,IACD;AAAA,IACA,SAAS;AAAA,EACV;AAAA,EACA,MAAM,UAAU,cAAc,MAAM;AAAA,EACpC,OAAO,QAAQ,OAAO,QAAQ,MAAM,OAAO;AAAA;AAS5C,eAAsB,YAAY,CACjC,KACA,MACyB;AAAA,EACzB,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EACjB,MAAM,OAAO,SAAS,KAAK,IAAI;AAAA,EAC/B,IAAI;AAAA,IACH,MAAM,OAAO,MAAM,UAAS,IAAI;AAAA,IAChC,IAAI,SAAS;AAAA,MAAM,OAAO;AAAA,IACzB,MAAM;AAAA,EAGR,OAAO;AAAA;AAOR,SAAS,QAAQ,CAAC,KAAa,MAAsB;AAAA,EACpD,IAAI,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,IAAI,SAAS,IAAI;AAAA,IAAG,OAAO,GAAG,OAAO;AAAA,EAChE,OAAO,GAAG,MAAM;AAAA;AAGjB,eAAe,SAAQ,CAAC,MAAsC;AAAA,EAE7D,IAAI,OAAO,WAAW,QAAQ,aAAa;AAAA,IAC1C,IAAI;AAAA,MACH,MAAM,OAAQ,WAAmB,IAAI,KAAK,IAAI;AAAA,MAC9C,IAAI,MAAM,KAAK,OAAO;AAAA,QAAG,OAAO,KAAK,KAAK;AAAA,MACzC,MAAM;AAAA,EAGT;AAAA,EAEA,IAAI;AAAA,IACH,MAAM,MAAK,MAAa;AAAA,IACxB,OAAO,MAAM,IAAG,SAAS,MAAM,MAAM;AAAA,IACpC,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAAA,IApHL,WAAmB,IAajB;AAAA;AAAA,EA3BN;AAAA,EA2BM,iBAAiB,CAAC,SAAS,SAAS,UAAU,MAAM;AAAA;;;ACtB1D;AAAA;AA+DA,MAAM,gBAAuC;AAAA,EACpC;AAAA,EACA;AAAA,EAER,aAWK,CAAC;AAAA,EAEN,WAAW,CAAC,MAAY,MAA4B;AAAA,IACnD,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA;AAAA,EAGb,OAAO,GAAS;AAAA,IACf,OAAO,KAAK;AAAA;AAAA,EAIb,SAAS,GAWN;AAAA,IACF,OAAO,KAAK;AAAA;AAAA,EAGb,kBAAkB,CAAC,YAAuB,WAA+B;AAAA,IACxE,IAAI,CAAC,aAAa,UAAU,GAAG;AAAA,MAC9B,MAAM,IAAI,MACT,UAAU,WAAW,+CACtB;AAAA,IACD;AAAA,IAEA,QAAQ,WAAW,sBAAsB,UAAU;AAAA,IACnD,MAAM,SAAS,UAAU,UAAU;AAAA,IACnC,MAAM,oBACL,aAAa,KAAK,2BAA2B,UAAU;AAAA,IAExD,IAAI,OAAO,WAAW,GAAG;AAAA,MAGxB;AAAA,IACD;AAAA,IAEA,WAAW,SAAS,QAAQ;AAAA,MAC3B,MAAM,WAAW,KAAK,UAAU,QAAQ,MAAM,IAAI;AAAA,MAClD,KAAK,WAAW,YAAY,OAAO,UAAU,iBAAiB;AAAA,IAC/D;AAAA;AAAA,EAGD,GAAG,CACF,QACA,MACA,SACA,YACA,WACO;AAAA,IAIP,IACC,OAAO,YAAY,cACnB,cACA,QAAQ,aACR,aAAa,OAAO,GACnB;AAAA,MACD,MAAM,sBAAsB,aAAa,KAAK,MAAM,QAAQ,OAAO;AAAA,MACnE,MAAM,YAAY,mBAAmB;AAAA,MACrC,MAAM,WAAW,KAAK,UACrB,sBAAsB,OAAO,EAAE,QAC/B,IACD;AAAA,MACA,MAAM,SAAS,UAAU,OAAO;AAAA,MAChC,MAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,gBAAgB,UAAU;AAAA,MAC7D,IAAI,CAAC,OAAO;AAAA,QAGX,KAAK,IAAI,QAAQ,UAAU,OAAO,OACjC,UAAU,KAAK,oBAAoB,EAAC,CACrC;AAAA,QACA;AAAA,MACD;AAAA,MACA,KAAK,WACJ,SACA,KAAK,OAAO,SAAS,UAAU,GAC/B,UACA,aAAa,KAAK,IACnB;AAAA,MACA;AAAA,IACD;AAAA,IAGA,KAAK,IAAI,QAAQ,MAAM,OAAO;AAAA;AAAA,EAG/B,GAAG,CAAC,QAAoB,MAAc,SAA4B;AAAA,IACjE,MAAM,KAAK,oBAAoB;AAAA,IAE/B,IAAI,WAAW,QAAQ;AAAA,MACrB,KAAK,KAAa,GAAG,QAAQ,MAAM,OAAc;AAAA,MAClD;AAAA,IACD;AAAA,IACC,KAAK,KAAa,IAAI,MAAM,OAAc;AAAA;AAAA,EAOpC,UAAU,CACjB,YACA,OACA,UACA,WACO;AAAA,IACP,MAAM,aAAa,sBAAsB,YAAY,MAAM,WAAW;AAAA,IACtE,MAAM,YAAY,iBAAiB,WAAW,WAAW,MAAM,WAAW;AAAA,IAG1E,KAAK,WAAW,KAAK;AAAA,MACpB,QAAQ,MAAM;AAAA,MACd,MAAM;AAAA,MACN,QAAQ,WAAW;AAAA,MACnB,aAAa,MAAM;AAAA,MACnB,YAAY,cAAc;AAAA,IAC3B,CAAC;AAAA,IAED,MAAM,cAAc,OAAO,OAAW;AAAA,MACrC,IAAI;AAAA,QAGH,MAAM,WAAW,UAAU,QAAQ,UAAU;AAAA,QAC7C,MAAM,QAAO,MAAM,KAAK,UAAU,IAAG,WAAW,UAAU;AAAA,QAE1D,MAAM,SAAS,MAAM,QAAQ,QAC5B,MAAM,QAAQ,KAAK,UAAU,GAAG,KAAI,CACrC;AAAA,QAEA,OAAO,MAAM,KAAK,UAAU,IAAG,MAAM;AAAA,QACpC,OAAO,KAAK;AAAA,QACb,OAAO,KAAK,YAAY,IAAG,GAAG;AAAA;AAAA;AAAA,IAIhC,MAAM,KAAK,oBAAoB,MAAM;AAAA,IACrC,IAAI,MAAM,WAAW,QAAQ;AAAA,MAC3B,KAAK,KAAa,GAAG,QAAQ,UAAU,WAAW;AAAA,MACnD;AAAA,IACD;AAAA,IACC,KAAK,KAAa,IAAI,UAAU,WAAW;AAAA;AAAA,OAO/B,UAAS,CACtB,IACA,QACA,YACC;AAAA,IAED,IAAI;AAAA,IACJ,MAAM,kBACL,eACC,WAAW,QACX,WAAW,SACX,WAAW,UACX,WAAW;AAAA,IAOb,MAAM,eAAe,OAAO,KAAK,CAAC,MAAW,EAAE,SAAS,YAAY,IAAI;AAAA,IAExE,IAAI,mBAAmB,cAAc;AAAA,MACpC,MAAM,cACL,mBAAmB,WAAW,OAC3B,aAAa,EAAC,IACd,eACC,aAAa,EAAC,IACd,QAAQ,QAAQ,SAAS;AAAA,MAC9B,OAAO,QAAQ,MAAM,QAAQ,IAAI,CAAC,WAAW,CAAC;AAAA,MAC9C,SAAS,gBAAgB,cAAc,CAAC,GAAG;AAAA,QAC1C;AAAA,QACA,OAAO,GAAE,IAAI,MAAM;AAAA,QACnB,QAAQ,GAAE,IAAI,MAAM;AAAA,QACpB,SAAS,GAAE,IAAI,OAAO;AAAA,MACvB,CAAC;AAAA,IACF;AAAA,IAEA,MAAM,aAAoB,CAAC;AAAA,IAC3B,WAAW,SAAS,QAAQ;AAAA,MAC3B,WAAW,MAAM,SAAS,KAAK,aAAa,IAAG,OAAO,MAAM;AAAA,IAC7D;AAAA,IACA,OAAO;AAAA;AAAA,EAGA,YAAY,CAAC,IAAQ,OAAY,QAAa;AAAA,IACrD,QAAQ,MAAM;AAAA,WACR,YAAY;AAAA,WACZ,YAAY;AAAA,QAChB,OAAO;AAAA,WACH,YAAY;AAAA,QAChB,OAAO,GAAE;AAAA,WACL,YAAY;AAAA,QAChB,OAAO,YAAY;AAAA,WACf,YAAY;AAAA,QAChB,IAAI;AAAA,UAAQ,OAAO,OAAO;AAAA,QAC1B,OAAO,MAAM,OACT,aAAa,EAAC,IAAY,MAAM,QACjC,aAAa,EAAC;AAAA,WACb,YAAY;AAAA,QAChB,IAAI,QAAQ;AAAA,UACX,IAAI,MAAM;AAAA,YAAM,OAAQ,OAAO,QAAgB,MAAM;AAAA,UACrD,OAAO,OAAO;AAAA,QACf;AAAA,QACA,OAAO,MAAM,OAAO,GAAE,IAAI,MAAM,MAAM,IAAI,IAAI,GAAE,IAAI,MAAM;AAAA,WACtD,YAAY;AAAA,QAChB,IAAI,QAAQ;AAAA,UACX,IAAI,MAAM;AAAA,YAAM,OAAQ,OAAO,SAAiB,MAAM;AAAA,UACtD,OAAO,OAAO;AAAA,QACf;AAAA,QACA,OAAO,MAAM,OAAO,GAAE,IAAI,MAAM,MAAM,IAAI,IAAI,GAAE,IAAI,MAAM;AAAA,WACtD,YAAY;AAAA,QAChB,IAAI,QAAQ;AAAA,UACX,IAAI,MAAM;AAAA,YACT,OACE,OAAO,UAAkB,MAAM,SAAS,GAAE,IAAI,OAAO,MAAM,IAAI;AAAA,UAElE,OAAO,OAAO,WAAW,GAAE,IAAI,OAAO;AAAA,QACvC;AAAA,QACA,OAAO,MAAM,OAAO,GAAE,IAAI,OAAO,MAAM,IAAI,IAAI,GAAE,IAAI,OAAO;AAAA,WACxD,YAAY;AAAA,QAChB,OAAQ,GAAU,KAAK,OAAO;AAAA;AAAA,QAE9B;AAAA;AAAA;AAAA,OAaW,UAAS,CAAC,IAAQ,OAA0B;AAAA,IACzD,IAAI,UAAU,aAAa,UAAU,MAAM;AAAA,MAC1C,OAAO,GAAE,KAAK,MAAM,GAAG;AAAA,IACxB;AAAA,IACA,IAAI,iBAAiB,UAAU;AAAA,MAM9B,MAAM,UAAkC,CAAC;AAAA,MACzC,MAAM,QAAQ,QAAQ,CAAC,GAAG,MAAM;AAAA,QAC/B,QAAQ,KAAK;AAAA,OACb;AAAA,MACD,MAAM,OAAO,MAAM,MAAM,KAAK;AAAA,MAC9B,OAAO,GAAE,KAAK,MAAM,MAAM,QAAe,OAAO;AAAA,IACjD;AAAA,IAIA,IAAI,KAAK,kBAAkB,KAAK,GAAG;AAAA,MAClC,OAAO,KAAK,iBAAiB,IAAG,KAAK;AAAA,IACtC;AAAA,IACA,IAAI,OAAO,UAAU,UAAU;AAAA,MAC9B,IAAI,UAAU,OAAO;AAAA,QAEpB,OAAO,mBAAmB,IAAG,KAAK;AAAA,MACnC;AAAA,MACA,IAAI,cAAc,OAAO;AAAA,QACxB,OAAO,GAAE,SAAS,MAAM,UAAU,MAAM,UAAU,GAAG;AAAA,MACtD;AAAA,MACA,IAAI,YAAY,SAAS,UAAU,OAAO;AAAA,QACzC,OAAO,GAAE,KAAK,MAAM,MAAM,MAAM,MAAM;AAAA,MACvC;AAAA,MACA,OAAO,GAAE,KAAK,KAAK;AAAA,IACpB;AAAA,IACA,IAAI,OAAO,UAAU,UAAU;AAAA,MAC9B,OAAO,GAAE,KAAK,KAAK;AAAA,IACpB;AAAA,IACA,OAAO,GAAE,KAAK,KAAK;AAAA;AAAA,EAOZ,iBAAiB,CAAC,OAAqB;AAAA,IAC9C,OACC,UAAU,QACV,OAAO,UAAU,YACjB,MAAM,kCAAkC,QACxC,OAAO,MAAM,eAAe;AAAA;AAAA,OAShB,iBAAgB,CAAC,IAAQ,OAA+B;AAAA,IACrE,OAAO,MAAM,MAAM,WAAW,EAAC;AAAA;AAAA,EAGxB,WAAW,CAAC,IAAQ,KAAe;AAAA,IAC1C,IAAI,eAAe,iBAAiB;AAAA,MACnC,QAAQ,QAAQ,SAAS,sBAAsB,GAAG;AAAA,MAClD,OAAO,GAAE,KAAK,MAAM,MAAa;AAAA,IAClC;AAAA,IAEA,MAAM;AAAA;AAAA,EAGC,0BAA0B,CAAC,YAAoC;AAAA,IAEtE,cAAc,cAAe,KAAK,KAAa,oBAC9C,IAAI,KAAO;AAAA,MACX,IAAK,UAAkB,MAAM,UAAU;AAAA,QAAG,OAAO;AAAA,IAClD;AAAA,IAEA,OAAO,KAAK;AAAA;AAAA,EAGL,SAAS,CAAC,QAAgB,MAAsB;AAAA,IACvD,IAAI,CAAC,UAAU,WAAW;AAAA,MAAK,OAAO,QAAQ;AAAA,IAC9C,IAAI,CAAC,QAAQ,SAAS;AAAA,MAAK,OAAO;AAAA,IAClC,IAAI,OAAO,SAAS,GAAG;AAAA,MAAG,OAAO,GAAG,SAAS;AAAA,IAC7C,OAAO,GAAG,SAAS;AAAA;AAErB;AAEA,eAAe,kBAAkB,CAAC,IAAQ,OAA+B;AAAA,EACxE,QAAQ,4BAAe;AAAA,EACvB,MAAM,OAAO,MAAM,YAAW,MAAM,MAAM,MAAM,QAAQ,CAAC,CAAC;AAAA,EAC1D,OAAO,GAAE,KAAK,MAAM,MAAM,UAAU,GAAG;AAAA;AAGxC,eAAe,YAAY,CAAC,IAAsB;AAAA,EACjD,IAAI;AAAA,IACH,MAAM,KAAK,GAAE,IAAI,OAAO,cAAc,KAAK;AAAA,IAC3C,IAAI,GAAG,SAAS,kBAAkB,GAAG;AAAA,MACpC,OAAO,MAAM,GAAE,IAAI,KAAK;AAAA,IACzB;AAAA,IACA,IACC,GAAG,SAAS,mCAAmC,KAC/C,GAAG,SAAS,qBAAqB,GAChC;AAAA,MACD,OAAO,MAAM,GAAE,IAAI,UAAU;AAAA,IAC9B;AAAA,IACA,OAAO,MAAM,GAAE,IAAI,KAAK;AAAA,IACvB,MAAM;AAAA,IACP;AAAA;AAAA;AAKK,SAAS,YAAY,CAC3B,MACA,WACc;AAAA,EACd,OAAO,IAAI,gBAAgB,MAAM,SAAS;AAAA;AAAA,IAhZrC;AAAA;AAAA,EAhDN;AAAA,EAEA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAuCM,sBAGF;AAAA,IACH,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,SAAS;AAAA,IACT,MAAM;AAAA,EACP;AAAA;;;;;;;;AC7CO,SAAS,oBAAoB,CAAC,MAAyB;AAAA,EAE7D,MAAM,WAAY,KAAa;AAAA,EAC/B,IAAI,aAAa,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,aAAa;AAAA,IAAI;AAAA,EAExE,KAAK,SAAS;AAAA,IACb,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY,MAAM,oBAAoB,IAAI,GAAG;AAAA,EAC9C,CAAC;AAAA,EACD,KAAK,SAAS;AAAA,IACb,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY,MAAM,oBAAoB,IAAI;AAAA,EAC3C,CAAC;AAAA;AAYK,SAAS,sBAAsB,CAAC,MAAsC;AAAA,EAC5E,qBAAqB,IAAI;AAAA,EACzB,OAAO,OAAO,IAAG,SAAS;AAAA,IAGzB,MAAM,eAAe,IAAI,YAAY,IAAI;AAAA,IACzC,MAAM,QAAQ,oBAAoB,OAAO,IAAkB,YAAY;AAAA,IACvE,OAAO,oBAAoB,IAAI,OAAO,MAAM,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,EAjDpD;AAAA,EACA;AAAA;;;;;;;ACJO,SAAS,UAAU,CAAC,KAAW,OAAe,MAAW;AAAA,EAC/D,MAAM,OAAO,WAAmB;AAAA,EAChC,IAAI,CAAC,QAAO,OAAO,KAAI,UAAU,YAAY;AAAA,IAC5C,MAAM,IAAI,MAAM,wCAAwC;AAAA,EACzD;AAAA,EAEA,MAAM,SAAS,KAAI,MAAM;AAAA,IACxB;AAAA,IACA,OAAO,CAAC,QAAiB,IAAI,MAAM,GAAG;AAAA,IACtC,OAAO,CAAC,QAAe;AAAA,MACtB,QAAQ,MAAM,wBAAwB,GAAG;AAAA,MACzC,OAAO,IAAI,SAAS,yBAAyB,EAAE,QAAQ,IAAI,CAAC;AAAA;AAAA,EAE9D,CAAC;AAAA,EAED,QAAQ,IAAI,yCAAyC,OAAO,MAAM;AAAA,EAClE,OAAO;AAAA;;;;;;;ACpBR;AAEO,SAAS,WAAW,CAAC,KAAW,OAAe,MAAW;AAAA,EAChE,MAAM,SAAS,aAAa,OAAO,KAAK,QAAQ;AAAA,IAC/C,IAAI;AAAA,MACH,MAAM,MAAM,UAAU,IAAI,QAAQ,OAAO,IAAI;AAAA,MAC7C,MAAM,UAAU,IAAI;AAAA,MACpB,YAAY,GAAG,MAAM,OAAO,QAAQ,IAAI,OAAO,GAAG;AAAA,QACjD,IAAI,KAAK;AAAA,UAAM;AAAA,QACf,IAAI,MAAM,QAAQ,CAAC;AAAA,UAAG,QAAQ,IAAI,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA,QAC5C;AAAA,kBAAQ,IAAI,GAAG,OAAO,CAAC,CAAC;AAAA,MAC9B;AAAA,MAEA,MAAM,SAAS,IAAI,UAAU;AAAA,MAC7B,MAAM,OAAoB,EAAE,QAAQ,QAAQ;AAAA,MAE5C,IAAI,WAAW,SAAS,WAAW,QAAQ;AAAA,QAC1C,MAAM,UAAU,MAAM,IAAI,QAAgB,CAAC,WAAS,WAAW;AAAA,UAC9D,MAAM,SAAmB,CAAC;AAAA,UAC1B,IAAI,GAAG,QAAQ,CAAC,OAAM,OAAO,KAAK,EAAC,CAAC;AAAA,UACpC,IAAI,GAAG,OAAO,MAAM,UAAQ,OAAO,OAAO,MAAM,CAAC,CAAC;AAAA,UAClD,IAAI,GAAG,SAAS,MAAM;AAAA,SACtB;AAAA,QAKD,KAAK,OAAO,IAAI,WACf,QAAQ,QACR,QAAQ,YACR,QAAQ,UACT;AAAA,QAEC,KAAa,SAAS;AAAA,MACxB;AAAA,MAEA,MAAM,UAAU,MAAM,IAAI,MAAM,IAAI,QAAQ,KAAK,IAAI,CAAC;AAAA,MACtD,IAAI,aAAa,QAAQ;AAAA,MACzB,QAAQ,QAAQ,QAAQ,CAAC,GAAG,MAAM,IAAI,UAAU,GAAG,CAAC,CAAC;AAAA,MACrD,MAAM,MAAM,OAAO,KAAK,MAAM,QAAQ,YAAY,CAAC;AAAA,MACnD,IAAI,IAAI,GAAG;AAAA,MACV,OAAO,KAAK;AAAA,MACb,QAAQ,MAAM,yBAAyB,GAAG;AAAA,MAC1C,IAAI,aAAa;AAAA,MACjB,IAAI,IAAI,uBAAuB;AAAA;AAAA,GAEhC;AAAA,EAED,OAAO,OAAO,MAAM,MAAM;AAAA,IACzB,QAAQ,IAAI,yCAAyC,MAAM;AAAA,GAC3D;AAAA,EAED,OAAO;AAAA;AAAA;;;;;;;AC7CD,SAAS,iBAAiB,CAAC,KAAW;AAAA,EAC5C,OAAO;AAAA,IACN,OAAO,CAAC,KAAc,KAAW,QAAc,IAAI,MAAM,KAAK,KAAK,GAAG;AAAA,EACvE;AAAA;;;ACRD;AACA;AAAA;AAkBO,MAAM,YAAY;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACD;AAAA,EAER,WAAW,CACV,WACA,UAA8B,CAAC,GAC9B;AAAA,IACD,KAAK,YAAY;AAAA,IACjB,KAAK,MAAM,IAAI;AAAA,IACf,KAAK,SAAS,aAAa,KAAK,KAAK,SAAS;AAAA,IAC9C,KAAK,UAAU;AAAA,MACd,SAAS,QAAQ,WAAW;AAAA,MAC5B,cAAc,QAAQ,gBAAgB;AAAA,MACtC,MAAM,QAAQ,QAAQ;AAAA,IACvB;AAAA,IACA,KAAK,UAAU;AAAA;AAAA,EAIR,SAAS,GAAS;AAAA,IAIzB,QAAQ;AAAA,IACR,KAAK,IAAI,IAAI,KAAK,wBAAuB,KAAK,SAAgB,CAAC;AAAA,IAC/D,IAAI,KAAK,QAAQ;AAAA,MAAc,KAAK,IAAI,IAAI,KAAK,aAAa,CAAC;AAAA,IAC/D,IAAI,KAAK,QAAQ;AAAA,MAAS,KAAK,IAAI,IAAI,KAAK,QAAO,CAAC;AAAA;AAAA,EAMrD,GAAG,IAAI,UAAuB;AAAA,IAC7B,WAAW,KAAK;AAAA,MAAU,KAAK,IAAI,IAAI,KAAK,CAAC;AAAA,IAC7C,OAAO;AAAA;AAAA,EAIR,OAAO,CAAC,MAAoB;AAAA,IAC1B,KAAK,QAAgB,OAAO;AAAA,IAC7B,OAAO;AAAA;AAAA,OAQF,MAAK,GAAiB;AAAA,IAC3B,MAAM,UAAU,MAAM,cAAc;AAAA,IACpC,IAAI,YAAY,OAAO;AAAA,MACtB,QAAQ,4BAAe;AAAA,MACvB,OAAO,YAAW,KAAK,KAAK,KAAK,QAAQ,IAAI;AAAA,IAC9C;AAAA,IACA,IAAI,YAAY,QAAQ;AAAA,MACvB,QAAQ,8BAAgB;AAAA,MACxB,OAAO,aAAY,KAAK,KAAK,KAAK,QAAQ,IAAI;AAAA,IAC/C;AAAA,IACA,IAAI,YAAY,cAAc;AAAA,MAC7B,QAAQ,0CAAsB;AAAA,MAC9B,OAAO,mBAAkB,KAAK,GAAG;AAAA,IAClC;AAAA,IACA,MAAM,IAAI,MACT,mEACD;AAAA;AAAA,MAOG,KAAK,GAA8D;AAAA,IACtE,OAAO,OAAO,KAAK,KAAK,QAAQ,KAAK,IAAI,MAAM,KAAK,KAAK,GAAG;AAAA;AAE9D;AAQA,eAAsB,aAAa,GAA2C;AAAA,EAC7E,IAAI,OAAQ,WAAmB,QAAQ;AAAA,IAAa,OAAO;AAAA,EAC3D,IAAI,OAAO,YAAY,eAAe,QAAQ,UAAU;AAAA,IAAM,OAAO;AAAA,EACrE,OAAO;AAAA;AAAA;AAAA,EAvGR;AAAA;;ACgBO,MAAM,aAAkD;AAAA,EAI5C;AAAA,EAED;AAAA,EALR,gBAAgB;AAAA,EAEzB,WAAW,CACO,UAED,QAAgB,WAC/B;AAAA,IAHgB;AAAA,IAED;AAAA;AAAA,EAGjB,OAAO,GAAmB;AAAA,IACzB,OAAO,KAAK,SAAS;AAAA;AAEvB;AAiKO,SAAS,eAAe,CAAC,OAAwC;AAAA,EACvE,OACC,UAAU,QACV,OAAO,UAAU,YACjB,OAAQ,MAAc,kBAAkB,YACxC,OAAQ,MAAc,YAAY;AAAA;;;AClMpC,eAAsB,iBAAiB,CACtC,SACA,KACA,WACA,MACA,IACoB;AAAA,EACpB,MAAM,QAAQ,QAAQ,MAAM;AAAA,EAC5B,MAAM,WAAqB,CAAC;AAAA,EAC5B,IAAI,WAAW;AAAA,EAEf,IAAI,KAAK;AAAA,IACR,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,IAAI,OAAO,WAAW,KAAK,KAAK;AAAA,MACrD,WAAW,OAAO,QAAQ;AAAA,MAC1B,IAAI,OAAO;AAAA,QAAM,SAAS,KAAK,GAAG,OAAO,IAAI;AAAA,MAC7C,IAAI,OAAO,MAAM;AAAA,QAEhB,OAAO,OAAO,MAAM,OAAO,IAAI;AAAA,MAChC;AAAA,MACC,OAAO,KAAK;AAAA,MAGb,QAAQ,MAAM,oCAAoC,eAAe,GAAG;AAAA;AAAA,EAEtE;AAAA,EAEA,IAAI,KAAK,MAAM;AAAA,IACd,IAAI;AAAA,MACH,MAAM,QAAQ,MAAM,IAAI,KAAK;AAAA,MAC7B,SAAS,KAAK,GAAG,KAAK;AAAA,MACrB,MAAM;AAAA,EAGT;AAAA,EAEA,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,SAKL,WAAW,KAAK;AAAA,EACvB,SAAS,KAAK;AAAA,CAAI;AAAA;AAAA;AAAA,2BAGO,WAAW,KAAK,UAAU,IAAI,CAAC,MAAM;AAAA;AAAA;AAAA,EAI/D,OAAO,GAAE,KAAK,MAAM,KAAK;AAAA,IACxB,MAAM;AAAA,EACP,CAAC;AAAA;AAGF,SAAS,UAAU,CAAC,GAAmB;AAAA,EACtC,OAAO,EACL,QAAQ,MAAM,OAAO,EACrB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,MAAM,EACpB,QAAQ,MAAM,QAAQ;AAAA;AAGzB,SAAS,UAAU,CAAC,GAAmB;AAAA,EACtC,OAAO,WAAW,CAAC,EAAE,QAAQ,MAAM,OAAO;AAAA;;;IC3D9B,uBAAuB,8BAEvB;AAAA;AAAA,oBAAN,MAAM,gBAAgB;AAAA,IAiBV;AAAA,IACA;AAAA,IACA;AAAA,KAjBR,wBAAwB;AAAA,IAEjB,UAGb,CAAC;AAAA,IAOY,YAAY,IAAI;AAAA,IAEjC,WAAW,CACO,SACA,WACA,OAChB;AAAA,MAHgB;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IAIlB,kBAAkB,CAAC,UAAmB,MAAY;AAAA,MACjD,KAAK,QAAQ,iBAAiB;AAAA,MAC9B,OAAO;AAAA;AAAA,IAIR,gBAAgB,CAAC,QAAiB,MAAY;AAAA,MAC7C,KAAK,QAAQ,eAAe;AAAA,MAC5B,OAAO;AAAA;AAAA,SAMF,WAAU,CAAC,IAA+B;AAAA,MAC/C,MAAM,MAAM,GAAE,IAAI;AAAA,MAClB,MAAM,OAAO,KAAK,oBAAoB,EAAC;AAAA,MAGvC,IAAI,KAAK,aAAa,KAAK,kBAAkB,WAAW;AAAA,QACvD,MAAM,gBAAgB,MAAM,KAAK,QAAQ,eAAe;AAAA,QACxD,IAAI,kBAAkB,aAAa,KAAK,kBAAkB,eAAe;AAAA,UACxE,OAAO,KAAK,qBAAqB,GAAE,IAAI,GAAG;AAAA,QAC3C;AAAA,MACD;AAAA,MAGA,MAAM,OAAO,MAAM,KAAK,UAAU,KAAK,MAAM,EAAC;AAAA,MAG9C,IAAI,KAAK,WAAW;AAAA,QACnB,OAAO,KAAK,aAAa,IAAI;AAAA,MAC9B;AAAA,MACA,OAAO,KAAK,aAAa,IAAG,IAAI;AAAA;AAAA,SAOnB,UAAS,CACtB,KACA,MACA,IACuB;AAAA,MAEvB,MAAM,SAAS,MAAM,KAAK,QAAQ,aAAa,EAAC;AAAA,MAChD,MAAM,WAAW,KAAK,WAAW,KAAK,MAAM;AAAA,MAG5C,MAAM,WAAgC,CAAC;AAAA,MACvC,MAAM,gBAA0C,CAAC;AAAA,MACjD,MAAM,aAAuB,CAAC;AAAA,MAC9B,MAAM,iBAA2B,CAAC;AAAA,MAClC,MAAM,eAA2B,CAAC;AAAA,MAElC,YAAY,KAAK,UAAU,OAAO,QAAQ,QAAQ,GAAG;AAAA,QACpD,IAAI,gBAAgB,KAAK,GAAG;AAAA,UAC3B,MAAM,SAAS;AAAA,UACf,QAAQ,OAAO;AAAA,iBACT,YAAY;AAAA,cAChB,MAAM,IAAI;AAAA,cACV,MAAM,QAAgB,EAAE,SAAS;AAAA,eAChC,cAAc,WAAW,CAAC,GAAG,KAAK,GAAG;AAAA,cAEtC,SAAS,OAAO;AAAA,cAChB;AAAA,YACD;AAAA,iBACK,UAAU;AAAA,cACd,SAAS,OAAO,MAAM,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,cACtD;AAAA,YACD;AAAA,iBACK,YAAY;AAAA,cAChB,MAAM,IAAI,MAAM,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,cAChD,MAAM,IAAI;AAAA,cACV,MAAM,YAAoB,EAAE,aAAa;AAAA,cACzC,IAAI,MAAM,QAAQ,CAAC,KAAK,EAAE,UAAU,WAAW;AAAA,gBAE9C,IAAI,KAAK,gBAAgB,IAAI,GAAG;AAAA,kBAC/B;AAAA,gBACD;AAAA,cACD;AAAA,cACA,SAAS,OAAO;AAAA,cAChB;AAAA,YACD;AAAA,iBACK,SAAS;AAAA,cACb,MAAM,IAAI,MAAM,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,cAChD,WAAW,KAAK,GAAG;AAAA,cACnB,MAAM,IAAI;AAAA,cACV,IAAI,EAAE,gBAAgB,EAAE,aAAa,SAAS,GAAG;AAAA,gBAChD,eAAe,KAAK,GAAG;AAAA,gBACvB,aAAa,KAAK,EAAE,YAAY;AAAA,cACjC;AAAA,cACA,SAAS,OAAO;AAAA,cAChB;AAAA,YACD;AAAA,iBACK,aAAa;AAAA,cACjB,SAAS,OAAO,MAAM,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,cACtD,WAAW,KAAK,GAAG;AAAA,cACnB,eAAe,KAAK,GAAG;AAAA,cACvB;AAAA,YACD;AAAA,iBACK,QAAQ;AAAA,cACZ,IAAI,KAAK,WAAW;AAAA,gBAEnB;AAAA,cACD;AAAA,cACA,SAAS,OAAO,MAAM,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,cACtD;AAAA,YACD;AAAA,iBACK,QAAQ;AAAA,cAIZ,MAAM,KAAK;AAAA,cACX,MAAM,MAAM,GAAG;AAAA,cACf,IAAI,KAAK,UAAU,IAAI,GAAG,GAAG;AAAA,gBAC5B,SAAS,OAAO,KAAK,UAAU,IAAI,GAAG;AAAA,cACvC,EAAO;AAAA,gBACN,MAAM,IAAI,MAAM,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,gBAChD,KAAK,UAAU,IAAI,KAAK,CAAC;AAAA,gBACzB,SAAS,OAAO;AAAA;AAAA,cAEjB;AAAA,YACD;AAAA,qBACS;AAAA,cAER,SAAS,OAAO,MAAM,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,YACvD;AAAA;AAAA,QAEF,EAAO;AAAA,UACN,SAAS,OAAO;AAAA;AAAA,MAElB;AAAA,MAGA,MAAM,aAAa,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC;AAAA,MAC9C,KAAK,mBAAmB,UAAU,MAAM,UAAU;AAAA,MAGlD,MAAM,UAAU,MAAM,KAAK,QAAQ,eAAe;AAAA,MAClD,OAAO;AAAA,QACN,WAAW,KAAK;AAAA,QAChB,OAAO;AAAA,QACP;AAAA,QACA,SAAS,WAAW;AAAA,QACpB,gBACC,KAAK,QAAQ,kBAAkB,KAAK,QAAQ,eAAe;AAAA,QAC5D,cAAc,KAAK,QAAQ,gBAAgB;AAAA,QAC3C,eACC,OAAO,KAAK,aAAa,EAAE,SAAS,IAAI,gBAAgB;AAAA,QACzD,YAAY,WAAW,SAAS,IAAI,aAAa;AAAA,QACjD,gBAAgB,eAAe,SAAS,IAAI,iBAAiB;AAAA,QAC7D,cAAc,aAAa,SAAS,IAAI,eAAe;AAAA,QACvD,eAAe,CAAC;AAAA,MACjB;AAAA;AAAA,IAUO,kBAAkB,CACzB,UACA,MACA,YACO;AAAA,MACP,IAAI,CAAC,KAAK,gBAAgB,IAAI;AAAA,QAAG;AAAA,MAEjC,IAAI,KAAK,aAAa;AAAA,QACrB,WAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AAAA,UACxC,MAAM,WAAW,WAAW,IAAI,GAAG;AAAA,UACnC,IAAI,CAAC,KAAK,YAAY,SAAS,GAAG,KAAK,CAAC,UAAU;AAAA,YACjD,OAAO,SAAS;AAAA,UACjB;AAAA,QACD;AAAA,MACD;AAAA,MAEA,IAAI,KAAK,eAAe;AAAA,QACvB,WAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AAAA,UACxC,MAAM,WAAW,WAAW,IAAI,GAAG;AAAA,UACnC,IAAI,KAAK,cAAc,SAAS,GAAG,KAAK,CAAC,UAAU;AAAA,YAClD,OAAO,SAAS;AAAA,UACjB;AAAA,QACD;AAAA,MACD;AAAA;AAAA,IAGO,eAAe,CAAC,MAAmC;AAAA,MAC1D,OAAO,KAAK,cAAc,CAAC,CAAC,KAAK,eAAe,CAAC,CAAC,KAAK;AAAA;AAAA,IAGhD,mBAAmB,CAAC,IAAgC;AAAA,MAC3D,MAAM,YAAY,GAAE,IAAI,OAAO,WAAW,MAAM;AAAA,MAChD,MAAM,oBAAoB,GAAE,IAAI,OAAO,wBAAwB;AAAA,MAC/D,MAAM,sBAAsB,GAAE,IAAI,OAAO,0BAA0B;AAAA,MACnE,MAAM,cAAc,GAAE,IAAI,OAAO,iBAAiB;AAAA,MAElD,OAAO;AAAA,QACN;AAAA,QACA,eAAe,GAAE,IAAI,OAAO,mBAAmB,KAAK;AAAA,QACpD,kBACC,GAAE,IAAI,OAAO,6BAA6B,KAAK;AAAA,QAChD,aAAa,KAAK,IAAI,iBAAiB;AAAA,QACvC,eAAe,KAAK,IAAI,mBAAmB;AAAA,QAC3C,OAAO,KAAK,IAAI,WAAW;AAAA,QAC3B,cAAc,GAAE,IAAI,OAAO,uBAAuB,MAAM;AAAA,MACzD;AAAA;AAAA,IAGO,GAAG,CAAC,OAAiD;AAAA,MAC5D,IAAI,CAAC;AAAA,QAAO;AAAA,MACZ,MAAM,QAAQ,MACZ,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AAAA,MAChB,OAAO,MAAM,SAAS,IAAI,QAAQ;AAAA;AAAA,IAG3B,YAAY,CAAC,MAA6B;AAAA,MACjD,OAAO,IAAI,SAAS,KAAK,UAAU,IAAI,GAAG;AAAA,QACzC,QAAQ;AAAA,QACR,SAAS;AAAA,UACR,gBAAgB;AAAA,UAChB,MAAM;AAAA,UACN,aAAa;AAAA,QACd;AAAA,MACD,CAAC;AAAA;AAAA,IAGM,YAAY,CACnB,IACA,MAC+B;AAAA,MAC/B,MAAM,MAAM,KAAK,QAAQ,IAAI;AAAA,MAC7B,OAAO,kBACN,KAAK,SACL,OAAO,MACP,KAAK,WACL,MACA,EACD;AAAA;AAAA,IAGO,oBAAoB,CAAC,KAAuB;AAAA,MACnD,OAAO,IAAI,SAAS,MAAM;AAAA,QACzB,QAAQ;AAAA,QACR,SAAS;AAAA,UACR,sBAAsB;AAAA,QACvB;AAAA,MACD,CAAC;AAAA;AAAA,EAEH;AAAA;;;ACxPO,MAAM,mBAAmB;AAAA,EAMb;AAAA,EACA;AAAA,EANV;AAAA,EACA,WAAqC,CAAC;AAAA,EACtC;AAAA,EAER,WAAW,CACO,SACA,WACjB,eAAoC,CAAC,GACpC;AAAA,IAHgB;AAAA,IACA;AAAA,IAGjB,KAAK,QAAQ,KAAK,aAAa;AAAA;AAAA,EAQhC,SAAS,CAAC,OAAkC;AAAA,IAC3C,OAAO,OAAO,KAAK,OAAO,KAAK;AAAA,IAC/B,OAAO;AAAA;AAAA,EAIR,IAAI,CAAC,KAAa,OAAkB;AAAA,IACnC,KAAK,MAAM,OAAO;AAAA,IAClB,OAAO;AAAA;AAAA,EAQR,UAAU,CAAC,QAAwB;AAAA,IAClC,YAAY,OAAO,YAAY,OAAO,QAAQ,MAAM,GAAG;AAAA,MACtD,MAAM,OAAO,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAAA,MAExD,KAAK,SAAS,SAAS,CAAC,GAAI,KAAK,SAAS,UAAU,CAAC,GAAI,GAAG,IAAI;AAAA,IACjE;AAAA,IACA,OAAO;AAAA;AAAA,EAIR,SAAS,CAAC,OAAe,SAAuB;AAAA,KAC9C,KAAK,SAAS,WAAW,CAAC,GAAG,KAAK,OAAO;AAAA,IAC1C,OAAO;AAAA;AAAA,EAOR,YAAY,CAAC,MAAoB;AAAA,IAChC,KAAK,eAAe;AAAA,IACpB,OAAO;AAAA;AAAA,EAOR,UAAU,CAAC,QAAmC;AAAA,IAC7C,KAAK,MAAM,SAAS;AAAA,IACpB,OAAO;AAAA;AAAA,EAYR,MAAM,GAAoB;AAAA,IACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,SAAS,GAAG;AAAA,MAC1C,KAAK,MAAM,SAAS,KAAK,KAAK,SAAS;AAAA,IACxC;AAAA,IACA,IAAI,KAAK,cAAc;AAAA,MACtB,KAAK,MAAM,WAAW,KAAK;AAAA,IAC5B;AAAA,IACA,OAAO,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,KAAK;AAAA;AAAA,EAStD,QAAQ,CAAC,KAAuB;AAAA,IAC/B,OAAO,IAAI,SAAS,MAAM;AAAA,MACzB,QAAQ;AAAA,MACR,SAAS,EAAE,UAAU,IAAI;AAAA,IAC1B,CAAC;AAAA;AAAA,EAQF,IAAI,CAAC,IAAuB;AAAA,IAC3B,OAAO,IAAI,SAAS,MAAM;AAAA,MACzB,QAAQ;AAAA,MACR,SAAS,EAAE,UAAU,MAAM,OAAO;AAAA,IACnC,CAAC;AAAA;AAAA,EAQF,SAAS,GAA6B;AAAA,IACrC,OAAO,KAAK,KAAK,SAAS;AAAA;AAAA,EAI3B,QAAQ,GAAwB;AAAA,IAC/B,OAAO,KAAK,KAAK,MAAM;AAAA;AAEzB;;;ICnHM;AAAA;AAAA,iBAAe,IAAI,IAAI,CAAC,QAAQ,OAAO,SAAS,QAAQ,CAAC;AAAA;;;AC5C/D;AAAA,IAqBM,eAEO;AAAA;AAAA,EALb;AAAA,EAGM,gBAAgB,OAAO,IAAI,eAAe;AAAA,EAEnC,UAAN,MAAM,QAAkC;AAAA,IACtC;AAAA,IAEA,SAA8B,CAAC;AAAA,IAEvC,WAAW,CAAC,UAAwB,CAAC,GAAG;AAAA,MACvC,KAAK,SAAS;AAAA,QACb,gBAAgB;AAAA,WACb;AAAA,MACJ;AAAA;AAAA,IAqBD,MAAM,CACL,WACA,iBACA,YACkB;AAAA,MAClB,QAAQ,WAAW,MAAM,UAAU,KAAK,oBACvC,WACA,iBACA,UACD;AAAA,MACA,OAAO,IAAI,gBAAgB,MAAM,MAAM,KAAK;AAAA;AAAA,IAQ7C,QAAQ,CAAC,KAAuB;AAAA,MAC/B,OAAO,IAAI,SAAS,MAAM;AAAA,QACzB,QAAQ;AAAA,QACR,SAAS;AAAA,UACR,sBAAsB;AAAA,QACvB;AAAA,MACD,CAAC;AAAA;AAAA,IAIF,QAAQ,CAAC,KAAa,SAAiB,KAAe;AAAA,MAGrD,OAAO,IAAI,SAAS,MAAM;AAAA,QACzB;AAAA,QACA,SAAS,EAAE,UAAU,IAAI;AAAA,MAC1B,CAAC;AAAA;AAAA,IAIF,IAAI,GAAa;AAAA,MAChB,OAAO,IAAI,SAAS,MAAM;AAAA,QACzB,QAAQ;AAAA,QACR,SAAS,EAAE,UAAU,OAAO;AAAA,MAC7B,CAAC;AAAA;AAAA,IAgBF,IAAI,CACH,WACA,eAAoC,CAAC,GAChB;AAAA,MACrB,OAAO,IAAI,mBAAmB,MAAM,WAAW,YAAY;AAAA;AAAA,IAO5D,UAAU,CAAC,SAA+B;AAAA,MACzC,KAAK,OAAO,UAAU;AAAA,MACtB,OAAO;AAAA;AAAA,IAGR,aAAa,CAAC,SAAkC;AAAA,MAC/C,KAAK,OAAO,MAAM,WAAW;AAAA,MAC7B,OAAO;AAAA;AAAA,IAGR,QAAQ,CAAC,OAAqB;AAAA,MAC7B,KAAK,OAAO,QAAQ;AAAA,MACpB,OAAO;AAAA;AAAA,IAGR,iBAAiB,CAAC,UAAmB,MAAY;AAAA,MAChD,KAAK,OAAO,iBAAiB;AAAA,MAC7B,OAAO;AAAA;AAAA,IAGR,cAAc,CAAC,QAA4C;AAAA,MAC1D,KAAK,OAAO,cAAc;AAAA,MAC1B,OAAO;AAAA;AAAA,IAYR,KAAK,CAAC,KAAmC,OAAmB;AAAA,MAC3D,IAAI,OAAO,QAAQ,UAAU;AAAA,QAC5B,KAAK,OAAO,OAAO;AAAA,MACpB,EAAO,SAAI,OAAO,OAAO,QAAQ,UAAU;AAAA,QAC1C,OAAO,OAAO,KAAK,QAAQ,GAAG;AAAA,MAC/B;AAAA;AAAA,IAID,OAAO,CAAC,KAAmB;AAAA,MAC1B,OAAO,KAAK,OAAO;AAAA;AAAA,IAIpB,SAAS,GAAwB;AAAA,MAChC,OAAO,KAAK,KAAK,OAAO;AAAA;AAAA,IAOzB,KAAK,GAAW;AAAA,MACf,OAAO,KAAK,OAAO,SAAS;AAAA;AAAA,IAG7B,cAAc,GAAY;AAAA,MACzB,OAAO,KAAK,OAAO,kBAAkB;AAAA;AAAA,IAGtC,GAAG,GAAsB;AAAA,MACxB,OAAO,KAAK,OAAO,OAAO;AAAA;AAAA,SAGrB,eAAc,GAAgC;AAAA,MACnD,MAAM,IAAI,KAAK,OAAO;AAAA,MACtB,IAAI,OAAO,MAAM;AAAA,QAAY,OAAO,MAAM,EAAE;AAAA,MAC5C,OAAO;AAAA;AAAA,SAGF,aAAY,CAAC,IAA2C;AAAA,MAC7D,MAAM,UAAU,KAAK,UAAU;AAAA,MAC/B,MAAM,aAAa,KAAK,OAAO;AAAA,MAC/B,IAAI,OAAO,eAAe,YAAY;AAAA,QACrC,MAAM,MAAM,MAAM,WAAW;AAAA,QAC7B,OAAO,KAAK,YAAY,IAAI;AAAA,MAC7B;AAAA,MACA,OAAO,KAAK,YAAa,cAAc,CAAC,EAAG;AAAA;AAAA,WAQ5B,QAAQ;AAAA,IAWhB,mBAAmB,CAC1B,WACA,iBACA,YAIC;AAAA,MACD,IAAI,eAAe,WAAW;AAAA,QAE7B,MAAM,WAAyC,CAAC;AAAA,QAChD,YAAY,GAAG,MAAM,OAAO,QAAQ,eAAe,GAAG;AAAA,UACrD,IAAI,aAAa;AAAA,YAAc,SAAS,KAAK;AAAA,UAE5C;AAAA,kBAAM,IAAI,MACT,2FACC,kCAAkC,KACpC;AAAA,QACF;AAAA,QACA,OAAO,EAAE,WAAW,OAAO,KAAK,aAAa,WAAW,EAAE;AAAA,MAC3D;AAAA,MAIA,OAAO,EAAE,WAAW,OAAO,mBAAmB,CAAC,EAAE;AAAA;AAAA,EAEnD;AAAA;;;AC1PO,MAAM,kBAAkB;AAAA,EACb,MAAM,IAAI;AAAA,EAM3B,QAAQ,CAAC,MAAc,WAAsB;AAAA,IAC5C,KAAK,IAAI,IAAI,MAAM,SAAS;AAAA,IAC5B,OAAO;AAAA;AAAA,EAIR,WAAW,CAAC,YAAuC;AAAA,IAClD,YAAY,MAAM,cAAc,OAAO,QAAQ,UAAU,GAAG;AAAA,MAC3D,KAAK,IAAI,IAAI,MAAM,SAAS;AAAA,IAC7B;AAAA,IACA,OAAO;AAAA;AAAA,EAIR,OAAO,CAAC,MAAmB;AAAA,IAC1B,OAAO,KAAK,IAAI,IAAI,IAAI;AAAA;AAAA,EAIzB,GAAG,CAAC,MAAuB;AAAA,IAC1B,OAAO,KAAK,IAAI,IAAI,IAAI;AAAA;AAAA,EAIzB,UAAU,CAAC,MAAuB;AAAA,IACjC,OAAO,KAAK,IAAI,OAAO,IAAI;AAAA;AAAA,EAI5B,KAAK,GAAa;AAAA,IACjB,OAAO,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC;AAAA;AAAA,MAIvB,IAAI,GAAW;AAAA,IAClB,OAAO,KAAK,IAAI;AAAA;AAElB;;;;;;;;;;;;;;;;ECjDA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;;;;ECAA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA;;;;;;;ACFA;AAAA;AAiBO,MAAM,YAAY;AAAA,EACf;AAAA,EACA;AAAA,EAEA;AAAA,EACD;AAAA,EAER,WAAW,CAAC,YAAuB,UAA8B,CAAC,GAAG;AAAA,IAEpE,KAAK,YAAY,IAAI;AAAA,IACrB,MAAM,UAAU,IAAI,cAAc,KAAK,SAAS;AAAA,IAChD,QAAQ,MAAM,YAAY,QAAQ,KAAK,UAAU;AAAA,IAGjD,KAAK,SAAS,IAAI,YAAY,KAAK,WAAW,OAAO;AAAA,IAGrD,WAAW,KAAK,SAAS;AAAA,MACxB,WAAW,cAAc,EAAE,aAAa;AAAA,QACvC,KAAK,OAAO,OAAO,mBAAmB,YAAY,EAAE,SAAS;AAAA,MAC9D;AAAA,IACD;AAAA,IAEA,WAAW,cAAc,KAAK,aAAa;AAAA,MAC1C,KAAK,OAAO,OAAO,mBAAmB,YAAY,KAAK,SAAS;AAAA,IACjE;AAAA,IAEA,KAAK,cAAc,QAAQ,eAAe,IAAI;AAAA,IAK9C,IAAI,QAAQ,SAAS;AAAA,MACpB,KAAK,UAAU,IAAI,QAAQ,QAAQ,OAAO;AAAA,MAC1C,KAAK,UAAU,SAAS;AAAA,QACvB,SAAS,QAAQ;AAAA,QACjB,UAAU,KAAK;AAAA,MAChB,CAAC;AAAA,IACF,EAAO;AAAA,MACN,KAAK,UAAU;AAAA;AAAA,IAKhB,KAAK,gBAAgB;AAAA,IAGrB,IAAI,QAAQ,IAAI,mBAAmB,KAAK;AAAA,MACvC,QAAQ,IAAI,oBAAoB,QAAQ,MAAM;AAAA,MAC9C,QAAQ,IACP,wBACA,QAAQ,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,OAAM,GAAE,IAAI,CACxD;AAAA,MACA,QAAQ,IAAI,6BAA6B,KAAK,UAAU,KAAK,CAAC;AAAA,MAC9D,QAAQ,IAAI,oBAAoB,KAAK,UAAU,YAAY,UAAU;AAAA,IACtE;AAAA;AAAA,EAIO,eAAe,GAAS;AAAA,IAK/B,IAAI;AAAA,MAAgC;AAAA,IACpC,IAAI;AAAA,MACH,MAAM,MAAM,UAAQ,QAAQ,IAAI,IAAI,eAAe;AAAA,MACnD,MAAM,MAAM,IAAI,WAAW;AAAA,MAC3B,IAAI,OAAO,OAAO,IAAI,cAAc,YAAY,IAAI,UAAU,SAAS,GAAG;AAAA,QACzE,aAAmB,IAAI,SAAS;AAAA,MACjC;AAAA,MACC,MAAM;AAAA;AAAA,EAMT,cAAc,CAAC,SAA4B;AAAA,IAC1C,KAAK,cAAc;AAAA,IACnB,OAAO;AAAA;AAAA,EA0BR,YAAY,CAAC,MAAoB;AAAA,IAChC,aAAmB,IAAI;AAAA,IACvB,OAAO;AAAA;AAAA,OAIF,OAAM,CAAC,MAAc,OAA4B,CAAC,GAAoB;AAAA,IAC3E,OAAO,KAAK,YAAY,OAAO,MAAM,IAAI;AAAA;AAAA,OAMpC,OAAM,CAAC,MAA6B;AAAA,IACzC,IAAI,MAAM;AAAA,MACT,KAAK,OAAO,QAAQ,IAAI;AAAA,IACzB;AAAA,IACA,OAAO,KAAK,OAAO,MAAM;AAAA;AAAA,MAMtB,KAAK,GAAG;AAAA,IACX,OAAO,KAAK,OAAO;AAAA;AAAA,SAMb,SAAS,CACf,YACA,SACc;AAAA,IACd,OAAO,IAAI,YAAY,YAAY,OAAO;AAAA;AAE5C;AAAA;AAAA,EA7JA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA;;;ACdA,oBAAS;;;ACeT,IAAM,UAAU;AAChB,IAAM,WAAW;AAEV,SAAS,SAAS,CAAC,MAA4B;AAAA,EACrD,MAAM,aAAuB,CAAC;AAAA,EAC9B,MAAM,QAAqD,CAAC;AAAA,EAC5D,IAAI,eAAe;AAAA,EAEnB,IAAI,IAAI;AAAA,EACR,OAAO,IAAI,KAAK,QAAQ;AAAA,IACvB,MAAM,MAAM,KAAK;AAAA,IAEjB,IAAI,QAAQ,MAAM;AAAA,MACjB,eAAe;AAAA,MACf;AAAA,MACA;AAAA,IACD;AAAA,IAEA,IAAI,gBAAgB,CAAC,IAAI,WAAW,GAAG,GAAG;AAAA,MACzC,WAAW,KAAK,GAAG;AAAA,MACnB;AAAA,MACA;AAAA,IACD;AAAA,IAEA,MAAM,YAAY,QAAQ,KAAK,GAAG;AAAA,IAClC,IAAI,WAAW;AAAA,MACd,SAAS,MAAM,UAAU;AAAA,MACzB,MAAM,WAAW;AAAA,MAEjB,IAAI,WAAW,WAAW;AAAA,QACzB,QAAQ,OAAO,UAAU,MAAM;AAAA,QAC/B;AAAA,QACA;AAAA,MACD;AAAA,MAGA,MAAM,OAAO,KAAK,IAAI;AAAA,MACtB,IAAI,SAAS,aAAa,CAAC,KAAK,WAAW,GAAG,GAAG;AAAA,QAChD,QAAQ,OAAO,UAAU,IAAI;AAAA,QAC7B,KAAK;AAAA,MACN,EAAO;AAAA,QACN,QAAQ,OAAO,UAAU,IAAI;AAAA,QAC7B;AAAA;AAAA,MAED;AAAA,IACD;AAAA,IAEA,MAAM,aAAa,SAAS,KAAK,GAAG;AAAA,IACpC,IAAI,YAAY;AAAA,MACf,MAAM,WAAW,WAAW;AAAA,MAC5B,MAAM,OAAO,KAAK,IAAI;AAAA,MACtB,IAAI,SAAS,aAAa,CAAC,KAAK,WAAW,GAAG,GAAG;AAAA,QAChD,QAAQ,OAAO,UAAU,IAAI;AAAA,QAC7B,KAAK;AAAA,MACN,EAAO;AAAA,QACN,QAAQ,OAAO,UAAU,IAAI;AAAA,QAC7B;AAAA;AAAA,MAED;AAAA,IACD;AAAA,IAGA,WAAW,KAAK,GAAG;AAAA,IACnB;AAAA,EACD;AAAA,EAEA,MAAM,UAAU,WAAW,MAAM;AAAA,EACjC,OAAO,EAAE,SAAS,YAAY,MAAM;AAAA;AAGrC,SAAS,OAAO,CACf,OACA,MACA,OACC;AAAA,EAED,IAAI,KAAK,WAAW,KAAK,KAAK,UAAU,MAAM;AAAA,IAC7C,MAAM,MAAM,KAAK,MAAM,CAAC;AAAA,IACxB,MAAM,OAAO;AAAA,IACb;AAAA,EACD;AAAA,EAEA,MAAM,WAAW,MAAM;AAAA,EACvB,IAAI,aAAa,WAAW;AAAA,IAC3B,MAAM,QAAQ;AAAA,EACf,EAAO,SAAI,MAAM,QAAQ,QAAQ,GAAG;AAAA,IACnC,SAAS,KAAK,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK,CAAC;AAAA,EAChE,EAAO;AAAA,IACN,MAAM,QAAQ;AAAA,MACb,OAAO,QAAQ;AAAA,MACf,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AAAA,IACjD;AAAA;AAAA;AAkBK,SAAS,QAAQ,CACvB,OACA,MACA,WAAW,OACD;AAAA,EACV,MAAM,IAAI,MAAM;AAAA,EAChB,IAAI,MAAM;AAAA,IAAW,OAAO;AAAA,EAC5B,IAAI,OAAO,MAAM;AAAA,IAAW,OAAO;AAAA,EACnC,OAAO,MAAM,WAAW,MAAM,OAAO,MAAM;AAAA;AAIrC,SAAS,QAAQ,CACvB,OACA,MACW;AAAA,EACX,MAAM,IAAI,MAAM;AAAA,EAChB,IAAI,MAAM;AAAA,IAAW,OAAO,CAAC;AAAA,EAC7B,IAAI,MAAM,QAAQ,CAAC;AAAA,IAAG,OAAO;AAAA,EAC7B,IAAI,OAAO,MAAM;AAAA,IAAU,OAAO,CAAC,CAAC;AAAA,EACpC,OAAO,CAAC,OAAO,CAAC,CAAC;AAAA;;AC7IlB;AACA;AA6HO,IAAM,iBAA2B;AAAA,EACvC,SAAS;AAAA,EACT,MAAM;AAAA,EACN,KAAK;AAAA,EACL,UAAU;AAAA,IACT,QAAQ;AAAA,IACR,KAAK;AAAA,EACN;AAAA,EACA,SAAS;AAAA,IACR,UAAU;AAAA,IACV,KAAK;AAAA,IACL,SAAS;AAAA,EACV;AAAA,EACA,OAAO;AAAA,IACN,KAAK;AAAA,IACL,aAAa;AAAA,IACb,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,KAAK;AAAA,EACN;AAAA,EACA,aAAa;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AACR;AAEA,IAAM,oBAAoB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAUA,eAAsB,UAAU,CAC/B,MAAc,QAAQ,IAAI,GACN;AAAA,EACpB,IAAI,SAA4B,CAAC;AAAA,EACjC,IAAI,eAAe;AAAA,EAEnB,WAAW,aAAa,mBAAmB;AAAA,IAC1C,MAAM,OAAO,QAAQ,KAAK,SAAS;AAAA,IACnC,IAAI,CAAC,WAAW,IAAI;AAAA,MAAG;AAAA,IAEvB,IAAI;AAAA,MACH,IAAI,UAAU,SAAS,OAAO,GAAG;AAAA,QAChC,MAAM,MAAM,aAAa,MAAM,MAAM;AAAA,QACrC,SAAS,KAAK,MAAM,GAAG;AAAA,MACxB,EAAO;AAAA,QAMN,IAAI;AAAA,UACH,MAAM,MAAW,MAAa;AAAA,UAC9B,SAAU,IAAI,WAAW;AAAA,UACxB,OAAO,WAAgB;AAAA,UAIxB,QAAQ,KACP,qCAAqC,cAAc,UAAU,WAAW,sCACzE;AAAA,UACA,SAAS,CAAC;AAAA;AAAA;AAAA,MAGZ,eAAe;AAAA,MACf;AAAA,MACC,OAAO,KAAU;AAAA,MAClB,MAAM,IAAI,MACT,kBAAkB,cAAc,IAAI,WAAW,OAAO,GAAG,GAC1D;AAAA;AAAA,EAEF;AAAA,EAEA,MAAM,SAAS,aAAa,gBAAgB,MAAM;AAAA,EAGlD,WAAW,WAAW,OAAO,SAAS;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,WAAW,QAAQ,OAAO,MAAM,CAAC,SAAS,QAAQ,WAAW,MAAM,CAAC;AAAA,EACpE,WAAW,OAAO,OAAO,KAAK,CAAC,WAAW,UAAU,UAAU,MAAM,CAAC;AAAA,EACrE,WAAW,mBAAmB,OAAO,SAAS,QAAQ;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,WAAW,oBAAoB,OAAO,QAAQ,UAAU;AAAA,IACvD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EAED,IAAI,QAAQ,IAAI,gBAAgB,KAAK;AAAA,IACpC,QAAQ,IAAI,uBAAuB,cAAc;AAAA,EAClD;AAAA,EAEA,OAAO;AAAA;AASR,SAAS,YAAY,CAAC,MAAgB,UAAuC;AAAA,EAC5E,MAAM,MAAM,QAAQ;AAAA,EACpB,MAAM,SAAmB;AAAA,OACrB;AAAA,OACA;AAAA,IACH,UAAU,KAAK,KAAK,aAAc,SAAS,YAAY,CAAC,EAAG;AAAA,IAC3D,SAAS,KAAK,KAAK,YAAa,SAAS,WAAW,CAAC,EAAG;AAAA,IACxD,OAAO,KAAK,KAAK,UAAW,SAAS,SAAS,CAAC,EAAG;AAAA,EACnD;AAAA,EAEA,IAAI,IAAI;AAAA,IAAe,OAAO,UAAU,IAAI;AAAA,EAC5C,IAAI,IAAI;AAAA,IAAY,OAAO,OAAO,IAAI;AAAA,EACtC,IAAI,IAAI;AAAA,IAAW,OAAO,MAAM,IAAI;AAAA,EACpC,IAAI,IAAI;AAAA,IACP,OAAO,SAAS,SAAS,IAAI;AAAA,EAC9B,IAAI,IAAI;AAAA,IAAoB,OAAO,SAAS,MAAM,IAAI;AAAA,EACtD,IAAI,IAAI;AAAA,IACP,OAAO,QAAQ,WAAW,IAAI;AAAA,EAC/B,IAAI,IAAI;AAAA,IACP,OAAO,QAAQ,MACd,IAAI,sBAAsB,WAAW,IAAI,sBAAsB;AAAA,EACjE,IAAI,IAAI;AAAA,IACP,OAAO,QAAQ,UAAU,IAAI;AAAA,EAE9B,OAAO;AAAA;AAGR,SAAS,UAA4B,CACpC,KACA,OACA,SACqB;AAAA,EACrB,IAAI,CAAC,QAAQ,SAAS,KAAU,GAAG;AAAA,IAClC,MAAM,IAAI,MACT,qBAAqB,SAAS,oBAAoB,QAAQ,KAAK,IAAI,IACpE;AAAA,EACD;AAAA;;ACtSD;AAAA,gBACC;AAAA;AAAA,kBAEA;AAAA;AAAA;AAAA;AAID,mDAAwC;AAajC,SAAS,SAAS,CACxB,MACA,UACA,OAAqB,CAAC,GACZ;AAAA,EACV,MAAM,OAAO,KAAK,QAAQ,QAAQ,IAAI;AAAA,EACtC,MAAM,SAAS,WAAW,IAAI,IAAI,OAAO,SAAQ,MAAM,IAAI;AAAA,EAE3D,IAAI,KAAK,gBAAgB,YAAW,MAAM,GAAG;AAAA,IAC5C,OAAO;AAAA,EACR;AAAA,EAEA,UAAU,QAAQ,MAAM,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAC9C,cAAc,QAAQ,QAAQ;AAAA,EAC9B,OAAO;AAAA;AAmCD,SAAS,YAAY,CAAC,OAAe;AAAA,EAC3C,MAAM,UAAU,MAAM,QAAQ,sBAAsB,EAAE;AAAA,EAGtD,MAAM,SACL,QACE,MAAM,SAAS,EACf,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAC/D,OAAO,OAAO,EACd,KAAK,EAAE,KAAK;AAAA,EAGf,MAAM,QAAQ,OAAO,OAAO,CAAC,EAAE,YAAY,IAAI,OAAO,MAAM,CAAC;AAAA,EAG7D,MAAM,QAAQ,OACZ,MAAM,WAAW,EACjB,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAC1B,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,EAGV,MAAM,QAAQ,MAAM,QAAQ,MAAM,GAAG;AAAA,EAErC,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,UAAU,MAAM;AAAA,IACxB,aAAa,UAAU,KAAK;AAAA,IAC5B,aAAa,UAAU,KAAK;AAAA,EAC7B;AAAA;AAID,SAAS,SAAS,CAAC,GAAmB;AAAA,EACrC,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,IAAI,kBAAkB,KAAK,CAAC;AAAA,IAAG,OAAO,GAAG;AAAA,EACzC,IAAI,cAAc,KAAK,CAAC;AAAA,IAAG,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE;AAAA,EAClD,IAAI,MAAM,KAAK,CAAC;AAAA,IAAG,OAAO,GAAG;AAAA,EAC7B,OAAO,GAAG;AAAA;;ACpGX,IAAM,YACL,QAAQ,IAAI,gBAAgB,aAC5B,QAAQ,IAAI,mBAAmB,OAC/B,QAAQ,OAAO,UAAU;AAE1B,IAAM,OAAO,CAAC,MAAc,UAAkB,CAAC,MAC9C,YAAY,QAAQ,QAAQ,SAAS,WAAW;AAEjD,IAAM,IAAI;AAAA,EACT,OAAO,KAAK,GAAG,CAAC;AAAA,EAChB,MAAM,KAAK,GAAG,EAAE;AAAA,EAChB,KAAK,KAAK,GAAG,EAAE;AAAA,EACf,KAAK,KAAK,IAAI,EAAE;AAAA,EAChB,OAAO,KAAK,IAAI,EAAE;AAAA,EAClB,QAAQ,KAAK,IAAI,EAAE;AAAA,EACnB,MAAM,KAAK,IAAI,EAAE;AAAA,EACjB,SAAS,KAAK,IAAI,EAAE;AAAA,EACpB,MAAM,KAAK,IAAI,EAAE;AAAA,EACjB,MAAM,KAAK,IAAI,EAAE;AAClB;AAEA,IAAM,WAAW;AAAA,EAChB,MAAM,GAAG,EAAE,KAAK,QAAE;AAAA,EAClB,SAAS,GAAG,EAAE,MAAM,QAAE;AAAA,EACtB,MAAM,GAAG,EAAE,OAAO,QAAE;AAAA,EACpB,OAAO,GAAG,EAAE,IAAI,QAAE;AAAA,EAClB,OAAO,GAAG,EAAE,KAAK,MAAE;AAAA,EACnB,QAAQ,GAAG,EAAE,QAAQ,QAAE;AACxB;AAAA;AAIO,MAAM,OAAO;AAAA,EACX,UAAU;AAAA,EAElB,UAAU,CAAC,GAAY;AAAA,IACtB,KAAK,UAAU;AAAA;AAAA,EAGhB,IAAI,CAAC,SAAiB;AAAA,IACrB,QAAQ,IAAI,GAAG,SAAS,SAAS,SAAS;AAAA;AAAA,EAG3C,OAAO,CAAC,SAAiB;AAAA,IACxB,QAAQ,IAAI,GAAG,SAAS,YAAY,SAAS;AAAA;AAAA,EAG9C,IAAI,CAAC,SAAiB;AAAA,IACrB,QAAQ,KAAK,GAAG,SAAS,SAAS,EAAE,OAAO,OAAO,GAAG;AAAA;AAAA,EAGtD,KAAK,CAAC,SAAiB;AAAA,IACtB,QAAQ,MAAM,GAAG,SAAS,UAAU,EAAE,IAAI,OAAO,GAAG;AAAA;AAAA,EAGrD,KAAK,CAAC,SAAiB;AAAA,IACtB,IAAI,CAAC,KAAK;AAAA,MAAS;AAAA,IACnB,QAAQ,IAAI,GAAG,SAAS,UAAU,EAAE,KAAK,OAAO,GAAG;AAAA;AAAA,EAGpD,MAAM,CAAC,SAAiB;AAAA,IACvB,QAAQ,IAAI,GAAG,SAAS,WAAW,EAAE,QAAQ,OAAO,GAAG;AAAA;AAAA,EAOxD,KAAK,CAAC,MAA+B;AAAA,IACpC,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC;AAAA,IAC1D,YAAY,OAAO,UAAU,MAAM;AAAA,MAClC,MAAM,SAAS,MAAM,OAAO,UAAU;AAAA,MACtC,QAAQ,IAAI,KAAK,EAAE,IAAI,MAAM,MAAM,OAAO;AAAA,IAC3C;AAAA;AAAA,EAGD,OAAO,CAAC,MAAc;AAAA,IACrB,MAAM,MAAM,SAAG,OAAO,KAAK,SAAS,CAAC;AAAA,IACrC,QAAQ,IAAI;AAAA,EAAK,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,GAAG;AAAA,IACtC,QAAQ,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,KAAK,QAAQ,CAAC,GAAG;AAAA,IAC9C,QAAQ,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC;AAAA,CAAK;AAAA;AAAA,EAGvC,KAAK,GAAG;AAAA,IACP,QAAQ,IAAI,EAAE;AAAA;AAEhB;AAEO,IAAM,SAAS,IAAI;AAGnB,IAAM,SAAS;;AC9FtB;AAWA,eAAsB,MAAM,CAC3B,SACA,UAAyB,CAAC,GACR;AAAA,EAClB,MAAM,cAAc,QAAQ,eAAe;AAAA,EAC3C,MAAM,WAAW,QAAQ,WAAW,QAAQ,UAAU;AAAA,EAEtD,IAAI,CAAC,eAAe,CAAC,QAAQ,MAAM,OAAO;AAAA,IACzC,IAAI,aAAa,WAAW;AAAA,MAC3B,MAAM,IAAI,MACT,mDAAmD,SACpD;AAAA,IACD;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAAA,EAC3E,OAAO,IAAI,QAAQ,CAAC,aAAY;AAAA,IAC/B,MAAM,SAAS,QAAQ,UAAU,KAAK,QAAQ,QAAQ,KAAK,GAAG,OAAO;AAAA,IACrE,MAAM,MAAM,QAAQ,WAAW,QAAQ,UAAU,MAAM;AAAA,IACvD,MAAM,YAAY,KAAK,UAAU,WAAW;AAAA,IAC5C,GAAG,SAAS,WAAW,CAAC,WAAW;AAAA,MAClC,GAAG,MAAM;AAAA,MACT,MAAM,UAAU,OAAO,KAAK;AAAA,MAC5B,SAAQ,YAAY,KAAK,MAAM,OAAO;AAAA,KACtC;AAAA,GACD;AAAA;AAuBF,eAAsB,MAAM,CAC3B,SACA,SACA,UAAyB,CAAC,GACR;AAAA,EAClB,OAAO,OAAO,SAAS,KAAK,SAAS,QAAQ,CAAC;AAAA;;ACvC/C,IAAM,SAAS;AACf,IAAM,aACL;AAEM,SAAS,MAAM,CAAC,UAAkB,SAAgC;AAAA,EAExE,IAAI,MAAM,SAAS,QAClB,YACA,CAAC,GAAG,MAAiB,KAAa,SAAiB;AAAA,IAClD,MAAM,IAAI,OAAO,SAAS,GAAG;AAAA,IAC7B,MAAM,SAAS,SAAS,CAAC;AAAA,IACzB,IAAI,SAAS;AAAA,MAAK,OAAO,SAAS,OAAO;AAAA,IACzC,OAAO,SAAS,KAAK;AAAA,GAEvB;AAAA,EAIA,IAAI;AAAA,EACJ,GAAG;AAAA,IACF,OAAO;AAAA,IACP,MAAM,IAAI,QAAQ,QAAQ,CAAC,GAAG,KAAa,WAAoB;AAAA,MAC9D,MAAM,IAAI,OAAO,SAAS,GAAG;AAAA,MAC7B,OAAO,YACN,MAAM,aAAa,MAAM,OAAO,KAAK,OAAO,CAAC,GAC7C,MACD;AAAA,KACA;AAAA,EACF,SAAS,QAAQ;AAAA,EAEjB,OAAO;AAAA;AAGR,SAAS,MAAM,CAAC,KAAoB,QAA6B;AAAA,EAChE,IAAI,UAAU;AAAA,IAAK,OAAO,IAAI;AAAA,EAC9B,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,EAC9B,IAAI,MAAW;AAAA,EACf,WAAW,KAAK,OAAO;AAAA,IACtB,IAAI,OAAO,QAAQ,OAAO,QAAQ;AAAA,MAAU;AAAA,IAC5C,MAAM,IAAI;AAAA,EACX;AAAA,EACA,OAAO,QAAQ,aAAa,QAAQ,OAAO,YAAY;AAAA;AAGxD,SAAS,QAAQ,CAAC,GAAyB;AAAA,EAC1C,IAAI,MAAM,aAAa,MAAM;AAAA,IAAM,OAAO;AAAA,EAC1C,IAAI,OAAO,MAAM;AAAA,IAAU,OAAO,EAAE,SAAS,KAAK,MAAM,WAAW,MAAM;AAAA,EACzE,IAAI,OAAO,MAAM;AAAA,IAAU,OAAO,MAAM;AAAA,EACxC,IAAI,OAAO,MAAM;AAAA,IAAW,OAAO;AAAA,EAEnC,IAAI,MAAM,QAAQ,CAAC;AAAA,IAAG,OAAO,EAAE,SAAS;AAAA,EACxC,OAAO,OAAO,KAAK,CAAC,EAAE,SAAS;AAAA;AAGhC,SAAS,WAAW,CAAC,OAAe,QAAoC;AAAA,EACvE,QAAQ;AAAA,SACF;AAAA,SACA;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO,MAAM,YAAY;AAAA,SACrB;AAAA,MACJ,OAAO,MAAM,YAAY;AAAA,SACrB;AAAA,MACJ,OAAO,SAAS,KAAK;AAAA,SACjB;AAAA,MACJ,OAAO,QAAQ,KAAK;AAAA,SAChB;AAAA,MACJ,OAAO,QAAQ,KAAK;AAAA,SAChB;AAAA,MACJ,OAAO,QAAQ,KAAK;AAAA,SAChB;AAAA,MACJ,OAAO,WAAU,KAAK;AAAA,SAClB;AAAA,MACJ,OAAO,YAAY,KAAK;AAAA;AAAA,MAExB,MAAM,IAAI,MAAM,4BAA4B,QAAQ;AAAA;AAAA;AAQvD,SAAS,UAAU,CAAC,GAAqB;AAAA,EACxC,OAAO,EACL,QAAQ,sBAAsB,OAAO,EACrC,MAAM,SAAS,EACf,OAAO,OAAO;AAAA;AAGV,SAAS,QAAQ,CAAC,GAAmB;AAAA,EAC3C,OAAO,WAAW,CAAC,EACjB,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAC/D,KAAK,EAAE;AAAA;AAGH,SAAS,OAAO,CAAC,GAAmB;AAAA,EAC1C,MAAM,IAAI,SAAS,CAAC;AAAA,EACpB,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC;AAAA;AAGtC,SAAS,OAAO,CAAC,GAAmB;AAAA,EAC1C,OAAO,WAAW,CAAC,EACjB,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAC1B,KAAK,GAAG;AAAA;AAGJ,SAAS,OAAO,CAAC,GAAmB;AAAA,EAC1C,OAAO,WAAW,CAAC,EACjB,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAC1B,KAAK,GAAG;AAAA;AAOJ,SAAS,UAAS,CAAC,GAAmB;AAAA,EAC5C,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,IAAI,kBAAkB,KAAK,CAAC;AAAA,IAAG,OAAO,GAAG;AAAA,EACzC,IAAI,cAAc,KAAK,CAAC;AAAA,IAAG,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE;AAAA,EAClD,IAAI,MAAM,KAAK,CAAC;AAAA,IAAG,OAAO,GAAG;AAAA,EAC7B,OAAO,GAAG;AAAA;AAGJ,SAAS,WAAW,CAAC,GAAmB;AAAA,EAC9C,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,IAAI,4BAA4B,KAAK,CAAC;AAAA,IAAG,OAAO,EAAE,MAAM,GAAG,EAAE;AAAA,EAC7D,IAAI,QAAQ,KAAK,CAAC;AAAA,IAAG,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE;AAAA,EAC5C,IAAI,MAAM,KAAK,CAAC,KAAK,EAAE,SAAS;AAAA,IAAG,OAAO,EAAE,MAAM,GAAG,EAAE;AAAA,EACvD,OAAO;AAAA;;AN5JD,IAAM,cAAuB;AAAA,EACnC,MAAM;AAAA,EACN,SAAS,CAAC,GAAG;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,OACP,IAAG,CAAC,KAAsC;AAAA,IAC/C,OAAO,QAAQ,+BAAyB;AAAA,IAExC,OAAO,KAAK,OAAO,KAAK,wBAAwB,CAAC;AAAA,IACjD,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,MACZ,CAAC,WAAW,OAAO,IAAI,OAAO,OAAO,CAAC;AAAA,MACtC,CAAC,QAAQ,OAAO,IAAI,OAAO,IAAI,CAAC;AAAA,MAChC,CAAC,OAAO,OAAO,IAAI,OAAO,GAAG,CAAC;AAAA,MAC9B,CAAC,WAAW,OAAO,IAAI,OAAO,WAAW,QAAQ,CAAC;AAAA,MAClD,CAAC,mBAAmB,OAAO,IAAI,OAAO,SAAS,MAAM,CAAC;AAAA,MACtD,CAAC,gBAAgB,OAAO,IAAI,OAAO,SAAS,GAAG,CAAC;AAAA,MAChD,CAAC,oBAAoB,OAAO,IAAI,OAAO,QAAQ,QAAQ,CAAC;AAAA,MACxD,CAAC,eAAe,OAAO,IAAI,OAAO,QAAQ,GAAG,CAAC;AAAA,MAC9C,CAAC,mBAAmB,OAAO,IAAI,OAAO,QAAQ,OAAO,CAAC;AAAA,IACvD,CAAC;AAAA,IAED,OAAO,MAAM;AAAA,IACb,OAAO,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,IAChC,OAAO,MAAM;AAAA,IACb,YAAY,GAAG,MAAM,OAAO,QAAQ,IAAI,OAAO,KAAK,GAAG;AAAA,MACtD,OAAO,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,IACtB;AAAA,IAEA,OAAO,MAAM;AAAA,IACb,OAAO,KAAK,OAAO,KAAK,aAAa,CAAC;AAAA,IACtC,OAAO,MAAM;AAAA,IACb,MAAM,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,WAAW,KAAK,SAAS;AAAA,MACxB,MAAM,IAAI,QAAQ,IAAI;AAAA,MACtB,OAAO,MAAM,CAAC,CAAC,GAAG,MAAM,YAAY,OAAO,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC;AAAA,IAChE;AAAA,IAEA,OAAO,MAAM;AAAA,IACb,OAAO,KAAK,OAAO,KAAK,mBAAmB,CAAC;AAAA,IAC5C,OAAO,MAAM;AAAA,IACb,OAAO,KAAK,KAAK,SAAQ,IAAI,GAAG,GAAG;AAAA,IACnC,OAAO,MAAM;AAAA,IAEb,OAAO;AAAA;AAET;AAEA,IAAe;;;AOtCf,uBAAS,0BAAY,4BAAW,gCAAc;AAC9C,oBAAS;;;ACZF,SAAS,cAA2C,CAAC,MAAiB;AAAA,EAC5E,OAAO,IAAI,MAAM,MAAM,IAAI;AAAA;;;ACjB5B,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0Bb,UAAU;;;AC3BZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6Bb,UAAU;;;ACrBZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCb,UAAU;;;AC1CZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6Db,UAAU;;;AC7DZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAab,UAAU;;;ACfZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeb,UAAU;;;ACXZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4Bb,UAAU;;;AC9BZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBb,UAAU;;;ACZZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAab,UAAU;;;ACfZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUb,UAAU;;;ACNZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeb,UAAU;;;ACjBZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiDb,UAAU;;;ACjDZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoCb,UAAU;;;AChCZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBb,UAAU;;;AC1BZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKf,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCf,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYb,UAAU;;;ACbZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCb,UAAU;;;ACvCZ,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcb,UAAU;;;ACOL,IAAM,YAAY;AAAA,EACxB,YAAY;AAAA,IACX,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,EACT;AAAA,EACA,WAAW;AAAA,IACV,SAAS;AAAA,IACT,KAAK;AAAA,EACN;AAAA,EACA,MAAM;AAAA,IACL,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,MAAM;AAAA,EACP;AAAA,EACA,SAAS;AAAA,IACR,gBAAgB;AAAA,IAChB,qBAAqB;AAAA,EACtB;AACD;;;ArBRO,IAAM,cAAuB;AAAA,EACnC,MAAM;AAAA,EACN,SAAS,CAAC,GAAG;AAAA,EACb,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN,EAAE,MAAM,UAAU,aAAa,kCAAkC;AAAA,IACjE;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA,EAAE,MAAM,QAAQ,aAAa,4CAA4C;AAAA,IACzE,EAAE,MAAM,OAAO,aAAa,0CAA0C;AAAA,IACtE;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA,EAAE,MAAM,UAAU,aAAa,sBAAsB;AAAA,IACrD,EAAE,MAAM,SAAS,aAAa,qCAAqC;AAAA,IACnE,EAAE,MAAM,kBAAkB,aAAa,8BAA8B;AAAA,EACtE;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,cAAc,CAAC,SAAS,IAAI,OAAO,kBAAkB,KAAK;AAAA,IAChE,MAAM,QAAQ,SAAS,IAAI,OAAO,SAAS,KAAK;AAAA,IAChD,MAAM,SAAS,SACd,IAAI,KACH,IAAI,MAAM,aAAoC,GAChD;AAAA,IAEA,IAAI,CAAC,YAAW,MAAM,GAAG;AAAA,MACxB,OAAO,MAAM,oCAAoC,QAAQ;AAAA,MACzD,OAAO,KACN,kEAAkE,iBACnE;AAAA,MACA,OAAO;AAAA,IACR;AAAA,IAGA,MAAM,UACJ,IAAI,MAAM,YACV,MAAM,OAAO,iBAAiB,CAAC,QAAQ,UAAU,YAAY,GAAG;AAAA,MAChE;AAAA,MACA,SAAS;AAAA,IACV,CAAC;AAAA,IACF,MAAM,OACJ,IAAI,MAAM,WACV,MAAM,OAAO,eAAe,CAAC,SAAS,QAAQ,OAAO,WAAW,MAAM,GAAG;AAAA,MACzE;AAAA,MACA,SAAS;AAAA,IACV,CAAC;AAAA,IACF,MAAM,MACJ,IAAI,MAAM,UACV,MAAM,OAAO,cAAc,CAAC,WAAW,UAAU,UAAU,MAAM,GAAG;AAAA,MACpE;AAAA,MACA,SAAS;AAAA,IACV,CAAC;AAAA,IACF,MAAM,KACJ,IAAI,MAAM,SACV,MAAM,OACN,mBACA,CAAC,cAAc,eAAe,UAAU,YAAY,SAAS,MAAM,GACnE;AAAA,MACC;AAAA,MACA,SAAS;AAAA,IACV,CACD;AAAA,IACD,MAAM,WACJ,IAAI,MAAM,eACV,MAAM,OAAO,oBAAoB,CAAC,SAAS,OAAO,UAAU,OAAO,GAAG;AAAA,MACtE;AAAA,MACA,SAAS;AAAA,IACV,CAAC;AAAA,IACF,MAAM,MAAM,CAAC,SAAS,IAAI,OAAO,UAAU,KAAK;AAAA,IAGhD,MAAM,OAAoB;AAAA,MACzB,EAAE,MAAM,gBAAgB,MAAM,QAAQ;AAAA,MACtC,EAAE,MAAM,gBAAgB,MAAM,YAAY;AAAA,MAC1C,EAAE,MAAM,iBAAiB,MAAM,iBAAiB;AAAA,MAChD,EAAE,MAAM,mBAAmB,MAAM,QAAQ;AAAA,MACzC,EAAE,MAAM,gCAAgC,MAAM,QAAQ;AAAA,MACtD,EAAE,MAAM,QAAQ,MAAM,OAAO;AAAA,MAC7B,EAAE,MAAM,cAAc,MAAM,OAAO;AAAA,MACnC,EAAE,MAAM,cAAc,MAAM,OAAO;AAAA,MACnC,EAAE,MAAM,eAAe,MAAM,QAAQ;AAAA,MACrC,EAAE,MAAM,qBAAqB,MAAM,QAAQ;AAAA,MAC3C,EAAE,MAAM,sCAAsC,MAAM,QAAQ;AAAA,MAC5D,EAAE,MAAM,aAAa,MAAM,QAAQ;AAAA,IACpC;AAAA,IAEA,MAAM,UAAoB,CAAC;AAAA,IAC3B,MAAM,UAAoB,CAAC;AAAA,IAC3B,MAAM,SAAmB,CAAC;AAAA,IAG1B,WAAU,SAAQ,QAAQ,iBAAiB,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IACjE,WAAU,SAAQ,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IACxD,WAAU,SAAQ,QAAQ,iBAAiB,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IAEjE,WAAW,SAAS,MAAM;AAAA,MACzB,MAAM,MAAM,SAAQ,QAAQ,MAAM,IAAI;AAAA,MACtC,MAAM,SAAS,YAAW,GAAG;AAAA,MAE7B,IAAI,MAAM,SAAS,aAAa;AAAA,QAG/B,IAAI,QAAQ;AAAA,UACX,iBAAiB,KAAK;AAAA,YACrB,SAAS;AAAA,YACT,oBAAoB;AAAA,YACpB,MAAM;AAAA,YACN,KAAK;AAAA,UACN,CAAC;AAAA,UACD,OAAO,KAAK,MAAM,IAAI;AAAA,QACvB,EAAO;AAAA,UACN,eACC,KACA,KAAK,UACJ;AAAA,YACC,MAAM,OAAO,MAAM,GAAG,EAAE,IAAI,KAAK;AAAA,YACjC,SAAS;AAAA,YACT,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS;AAAA,cACR,KAAK;AAAA,cACL,OAAO;AAAA,cACP,OAAO;AAAA,cACP,MAAM;AAAA,cACN,IAAI;AAAA,YACL;AAAA,YACA,cAAc;AAAA,cACb,SAAS;AAAA,cACT,oBAAoB;AAAA,cACpB,MAAM;AAAA,cACN,KAAK;AAAA,YACN;AAAA,UACD,GACA,MACA,CACD,CACD;AAAA,UACA,QAAQ,KAAK,MAAM,IAAI;AAAA;AAAA,QAExB;AAAA,MACD;AAAA,MAEA,IAAI,MAAM,SAAS,kBAAkB;AAAA,QAEpC,IAAI,QAAQ;AAAA,UACX,cAAc,KAAK;AAAA,YAClB,wBAAwB;AAAA,YACxB,uBAAuB;AAAA,UACxB,CAAC;AAAA,UACD,OAAO,KAAK,MAAM,IAAI;AAAA,QACvB,EAAO;AAAA,UACN,eAAc,KAAK,gBAAgB,CAAC;AAAA,UACpC,QAAQ,KAAK,MAAM,IAAI;AAAA;AAAA,QAExB;AAAA,MACD;AAAA,MAGA,IAAI,UAAU,CAAC,OAAO;AAAA,QACrB,QAAQ,KAAK,MAAM,IAAI;AAAA,QACvB;AAAA,MACD;AAAA,MAEA,MAAM,UAAU,cAAc,MAAM,MAAM;AAAA,QACzC;AAAA,QACA;AAAA,QACA,WAAW,SAAS,SAAS,KAAK;AAAA,QAClC;AAAA,QACA,UAAU;AAAA,QACV,OAAO,OAAO,gBAAgB,OAAO,gBAAgB,WAAW;AAAA,QAChE,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,YAAY,OAAO,MAAM,GAAG,EAAE,IAAI,KAAK;AAAA,MACxC,CAAC;AAAA,MACD,eAAc,KAAK,OAAO;AAAA,MAC1B,QAAQ,KAAK,MAAM,IAAI;AAAA,IACxB;AAAA,IAGA,OAAO,QAAQ,0BAA0B,QAAQ;AAAA,IACjD,OAAO,MAAM;AAAA,IACb,IAAI,QAAQ,QAAQ;AAAA,MACnB,OAAO,QAAQ,SAAS;AAAA,MACxB,WAAW,KAAK;AAAA,QAAS,OAAO,KAAK,OAAO,GAAG;AAAA,IAChD;AAAA,IACA,IAAI,OAAO,QAAQ;AAAA,MAClB,OAAO,QAAQ,4BAA4B;AAAA,MAC3C,WAAW,KAAK;AAAA,QAAQ,OAAO,KAAK,OAAO,GAAG;AAAA,IAC/C;AAAA,IACA,IAAI,QAAQ,QAAQ;AAAA,MACnB,OAAO,QAAQ,mDAAmD;AAAA,MAClE,WAAW,KAAK;AAAA,QAAS,OAAO,KAAK,OAAO,GAAG;AAAA,IAChD;AAAA,IACA,OAAO,MAAM;AAAA,IACb,OAAO,QAAQ,YAAY;AAAA,IAC3B,OAAO,KAAK,QAAQ,WAAW,IAAI,MAAM,MAAM,QAAQ;AAAA,IACvD,OAAO,KAAK,eAAe;AAAA,IAC3B,OAAO,KAAK,eAAe;AAAA,IAC3B,OAAO,MAAM;AAAA,IAEb,OAAO;AAAA;AAET;AAqBA,SAAS,aAAa,CAAC,MAAc,KAAwB;AAAA,EAC5D,QAAQ;AAAA,SACF;AAAA,MACJ,OAAO,OAAO,UAAU,QAAQ,iBAAiB,GAAG;AAAA,SAChD;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO,kBAAkB,IAAI;AAAA;AAAA;AAAA;AAAA,SACzB;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAOH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SA+BH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAWH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAaH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SASH;AAAA,MACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAaH;AAAA,MACJ,OAAO,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBhB,MAAM,IAAI,MAAM,2BAA2B,MAAM;AAAA;AAAA;AAIpD,SAAS,eAAe,GAAW;AAAA,EAClC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBR,SAAS,gBAAgB,CAAC,MAAc,WAAyC;AAAA,EAChF,MAAM,MAAM,cAAa,MAAM,MAAM;AAAA,EACrC,MAAM,MAAM,eAAwC,GAAG;AAAA,EACvD,IAAI,UAAU;AAAA,EAGd,IAAI,CAAC,IAAI,SAAS;AAAA,IACjB,IAAI,UAAU;AAAA,IACd,UAAU;AAAA,EACX;AAAA,EAGA,IAAI,CAAC,IAAI,YAAY;AAAA,IACpB,IAAI,aAAa;AAAA,IACjB,UAAU;AAAA,EACX;AAAA,EAGA,MAAM,UAAkC;AAAA,IACvC,KAAK;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,IACN,IAAI;AAAA,EACL;AAAA,EACA,MAAM,kBAAmB,IAAI,cAAqD,CAAC;AAAA,EACnF,YAAY,GAAG,MAAM,OAAO,QAAQ,OAAO,GAAG;AAAA,IAC7C,IAAI,EAAE,KAAK,kBAAkB;AAAA,MAC5B,gBAAgB,KAAK;AAAA,MACrB,UAAU;AAAA,IACX;AAAA,EACD;AAAA,EACA,IAAI,OAAO,KAAK,eAAe,EAAE,SAAS,GAAG;AAAA,IAC5C,IAAI,aAAa;AAAA,EAClB;AAAA,EAGA,MAAM,OAAQ,IAAI,mBAA0D,CAAC;AAAA,EAC7E,YAAY,GAAG,MAAM,OAAO,QAAQ,SAAS,GAAG;AAAA,IAC/C,IAAI,EAAE,KAAK,OAAO;AAAA,MACjB,KAAK,KAAK;AAAA,MACV,UAAU;AAAA,IACX;AAAA,EACD;AAAA,EACA,IAAI,kBAAkB;AAAA,EAEtB,IAAI,SAAS;AAAA,IACZ,eAAc,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,IAAI;AAAA,CAAI;AAAA,EACxD;AAAA;AAOD,SAAS,aAAa,CACrB,MACA,WACO;AAAA,EACP,MAAM,MAAM,cAAa,MAAM,MAAM;AAAA,EACrC,MAAM,MAAM,eAGT,GAAG;AAAA,EACN,MAAM,KAAM,IAAI,mBAAmB,CAAC;AAAA,EACpC,IAAI,UAAU;AAAA,EACd,YAAY,GAAG,MAAM,OAAO,QAAQ,SAAS,GAAG;AAAA,IAC/C,IAAI,EAAE,KAAK,KAAK;AAAA,MACf,GAAG,KAAK;AAAA,MACR,UAAU;AAAA,IACX;AAAA,EACD;AAAA,EAEA,MAAM,MAAO,IAAI,WAAW,CAAC;AAAA,EAC7B,IAAI,CAAC,IAAI,SAAS,aAAa,GAAG;AAAA,IACjC,IAAI,KAAK,aAAa;AAAA,IACtB,UAAU;AAAA,EACX;AAAA,EACA,IAAI,CAAC,IAAI,SAAS,cAAc,GAAG;AAAA,IAClC,IAAI,KAAK,cAAc;AAAA,IACvB,UAAU;AAAA,EACX;AAAA,EACA,IAAI,SAAS;AAAA,IACZ,IAAI,kBAAkB;AAAA,IACtB,IAAI,UAAU;AAAA,IACd,eAAc,MAAM,KAAK,UAAU,KAAK,MAAM,CAAC,IAAI;AAAA,CAAI;AAAA,EACxD;AAAA;AAGD,IAAe;;;AsB3ff,oBAAS;AAST,IAAM,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoC/B,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAY7B,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAK3B,IAAM,kBAAkE;AAAA,EACvE,QAAQ,EAAE,KAAK,UAAU,OAAO,SAAS;AAAA,EACzC,QAAQ,EAAE,KAAK,UAAU,OAAO,SAAS;AAAA,EACzC,SAAS,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,EAC5C,WAAW,EAAE,KAAK,aAAa,OAAO,YAAY;AAAA,EAClD,OAAO,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,EACtC,UAAU,EAAE,KAAK,YAAY,OAAO,WAAW;AAAA,EAC/C,QAAQ,EAAE,KAAK,UAAU,OAAO,SAAS;AAAA,EACzC,OAAO,EAAE,KAAK,SAAS,OAAO,QAAQ;AAAA,EACtC,SAAS,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,EAC5C,SAAS,EAAE,KAAK,WAAW,OAAO,UAAU;AAAA,EAC5C,UAAU,EAAE,KAAK,YAAY,OAAO,WAAW;AAChD;AAEO,IAAM,kBAA2B;AAAA,EACvC,MAAM;AAAA,EACN,SAAS,CAAC,QAAQ,cAAc;AAAA,EAChC,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA,EAAE,MAAM,WAAW,aAAa,uCAAuC;AAAA,IACvE,EAAE,MAAM,SAAS,aAAa,0CAA0C;AAAA,IACxE,EAAE,MAAM,WAAW,aAAa,0BAA0B;AAAA,IAC1D;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,OAAO,QAAQ,yBAAyB;AAAA,IAExC,MAAM,YAAY,SAAS,IAAI,OAAO,UAAU;AAAA,IAChD,MAAM,aAAa,IAAI,MAAM,WAAW;AAAA,IACxC,MAAM,iBAAiB,IAAI,MAAM,eAAe;AAAA,IAChD,MAAM,OAAQ,IAAI,MAAM,YAAmC;AAAA,IAC3D,MAAM,SACJ,IAAI,MAAM,cAAqC;AAAA,IACjD,MAAM,SACJ,IAAI,MAAM,aAAoC;AAAA,IAEhD,MAAM,UAAU,UAAU,IAAI,CAAC,MAAM;AAAA,MACpC,MAAM,QAAQ,gBAAgB,EAAE,YAAY;AAAA,MAC5C,OAAO;AAAA,QACN,MAAM,EAAE,YAAY;AAAA,QACpB,QAAQ,OAAO,OAAO,EAAE,YAAY;AAAA,MACrC;AAAA,KACA;AAAA,IAGD,MAAM,WAAW,OAAO,wBAAwB;AAAA,MAC/C,KAAK;AAAA,MACL,SAAS;AAAA,MACT,WAAW,UAAU,SAAS;AAAA,MAC9B;AAAA,MACA,eAAe;AAAA,MACf,aAAa;AAAA,MACb,eAAe,MAAM,QAAQ,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI;AAAA,IAC3D,CAAC;AAAA,IACD,MAAM,UAAU,SAAQ,IAAI,KAAK,kBAAkB;AAAA,IACnD,IAAI,UAAU,SAAS,QAAQ,GAAG;AAAA,MACjC,OAAO,QAAQ,WAAW,SAAS;AAAA,IACpC,EAAO;AAAA,MACN,OAAO,KAAK,qBAAqB,SAAS;AAAA;AAAA,IAI3C,MAAM,UAAU,OAAO,sBAAsB;AAAA,MAC5C,WAAW,UAAU,SAAS;AAAA,MAC9B;AAAA,IACD,CAAC;AAAA,IACD,MAAM,SAAS,SAAQ,IAAI,KAAK,cAAc;AAAA,IAC9C,IAAI,UAAU,QAAQ,SAAS,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,MACvD,OAAO,QAAQ,WAAW,QAAQ;AAAA,IACnC,EAAO;AAAA,MACN,OAAO,KAAK,qBAAqB,QAAQ;AAAA;AAAA,IAI1C,OAAO,MAAM;AAAA,IACb,OAAO,QAAQ,YAAY;AAAA,IAC3B,OAAO,KAAK,0BAA0B;AAAA,IACtC,OAAO,KAAK,oDAAoD;AAAA,IAChE,OAAO,KAAK,kCAAkC;AAAA,IAC9C,OAAO,KAAK,QAAQ,mBAAmB,KAAK,GAAG;AAAA,IAC/C,IAAI,UAAU,SAAS,GAAG;AAAA,MACzB,OAAO,KAAK,oCAAoC,UAAU,KAAK,IAAI,GAAG;AAAA,IACvE;AAAA,IACA,IAAI,gBAAgB;AAAA,MACnB,OAAO,KAAK,sDAAsD;AAAA,IACnE;AAAA,IACA,OAAO,KAAK,qDAAqD;AAAA,IACjE,OAAO,MAAM;AAAA,IAEb,OAAO;AAAA;AAET;AAEA,IAAe;;;AC9Kf,oBAAS;AAKF,IAAM,wBAAiC;AAAA,EAC7C,MAAM;AAAA,EACN,SAAS,CAAC,MAAM,iBAAiB;AAAA,EACjC,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,kCAAkC;AAAA,MAC/C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,QACJ,IAAI,MAAM,YAAmC,IAAI,OAAO;AAAA,IAE1D,IAAI,CAAC,CAAC,QAAQ,UAAU,YAAY,EAAE,SAAS,KAAK,GAAG;AAAA,MACtD,OAAO,MACN,kBAAkB,2CACnB;AAAA,MACA,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,cAAc,IAAI,MAAM,kBAAkB;AAAA,IAChD,MAAM,cAAc,GAAG,SAAS;AAAA,IAChC,MAAM,eAAe,SAAS,QAAQ;AAAA,IAEtC,MAAM,MACL,UAAU,WAAW;AAAA,IACtB,MAAM,OAAO,OAAO,KAAK;AAAA,MACxB,MAAM,SAAS;AAAA,MACf,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS;AAAA,MAChB,QAAQ,SAAS;AAAA,MACjB,SAAS;AAAA,MACT;AAAA,IACD,CAAC,EAAE,QAEF,gBACA,cACG,CAAC,MAAe,EAAE,SAAS,WAAW,IAAI,KAAK,IAC/C,CAAC,MAAc,CACnB;AAAA,IAEA,MAAM,MAAM,SACX,IAAI,KACJ,IAAI,OAAO,MAAM,aACjB,GAAG,SAAS,qBACb;AAAA,IAEA,MAAM,KAAK,UAAU,KAAK,MAAM,EAAE,cAAc,MAAM,CAAC;AAAA,IACvD,IAAI,CAAC,IAAI;AAAA,MACR,OAAO,MAAM,wCAAwC,KAAK;AAAA,MAC1D,OAAO;AAAA,IACR;AAAA,IAEA,OAAO,QAAQ,WAAW,KAAK;AAAA,IAC/B,OAAO,OAAO,QAAQ,SAAS,0CAA0C;AAAA,IACzE,OAAO;AAAA;AAET;AAEA,IAAe;;;ACxEf,sBAAS;AACT,oBAAS,qBAAS;;;ACFX,SAAS,oBAAoB,CAAC,SAAyB;AAAA,EAC7D,MAAM,OAAO,cAAc,YAAY,cAAc;AAAA,EACrD,OAAO;AAAA,WACG,KAAK,QAAQ,KAAK,IAAI,aAAa,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,6BAKtB,KAAK;AAAA,QAC1B,KAAK,6BAA6B,KAAK;AAAA;AAAA,eAEhC,KAAK,2BAA2B,KAAK;AAAA,eACrC,KAAK,2BAA2B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlD,UAAU;AAAA;AAaZ,IAAM,gBAA6C;AAAA,EAClD,UAAU;AAAA,IACT,SAAS;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,YAAY;AAAA,EACb;AAAA,EACA,cAAc;AAAA,IACb,SAAS,CAAC,eAAe,WAAW,QAAQ,MAAM;AAAA,IAClD,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,YAAY;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,IACP,SAAS,CAAC,eAAe,WAAW,QAAQ,MAAM;AAAA,IAClD,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,YAAY;AAAA,EACb;AAAA,EACA,IAAI;AAAA,IACH,SAAS,CAAC,eAAe,WAAW,QAAQ,MAAM;AAAA,IAClD,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,YAAY;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACN,SAAS;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,YAAY;AAAA,EACb;AACD;AAGO,SAAS,cAAc,CAAC,SAAiB,MAAsB;AAAA,EACrE,MAAM,IAAI,KAAK,YAAY;AAAA,EAC3B,IAAI,MAAM,UAAU,MAAM,YAAY,MAAM;AAAA,IAAW,OAAO;AAAA,EAC9D,IAAI,MAAM,SAAS,MAAM,WAAW;AAAA,IACnC,OAAO,YAAY,UAAU,QAAQ;AAAA,EACtC;AAAA,EACA,IAAI,MAAM,YAAY,MAAM;AAAA,IAC3B,OAAO,YAAY,UAAU,WAAW;AAAA,EACzC,IAAI,MAAM,UAAU,MAAM;AAAA,IACzB,OAAO,YAAY,UAAU,YAAY;AAAA,EAC1C,IAAI,MAAM,WAAW,MAAM,YAAY,MAAM,UAAU,MAAM,UAAU;AAAA,IACtE,OAAO,YAAY,UAAU,WAAW;AAAA,EACzC;AAAA,EACA,IAAI,MAAM,cAAc,MAAM,eAAe,MAAM,QAAQ;AAAA,IAC1D,OAAO,YAAY,UAChB,cACA,YAAY,aACX,cACA;AAAA,EACL;AAAA,EACA,IAAI,MAAM,UAAU,MAAM,SAAS;AAAA,IAClC,OAAO,YAAY,UAAU,SAAS;AAAA,EACvC;AAAA,EACA,OAAO;AAAA;;;ADrGD,IAAM,kBAA2B;AAAA,EACvC,MAAM;AAAA,EACN,SAAS,CAAC,QAAQ,aAAa,UAAU;AAAA,EACzC,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN,EAAE,MAAM,YAAY,aAAa,8BAA8B;AAAA,IAC/D,EAAE,MAAM,WAAW,aAAa,8BAA8B;AAAA,IAC9D,EAAE,MAAM,WAAW,aAAa,gCAAgC;AAAA,IAChE,EAAE,MAAM,SAAS,aAAa,yBAAyB;AAAA,IACvD,EAAE,MAAM,OAAO,aAAa,sBAAsB;AAAA,IAClD;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,4BAA4B;AAAA,MACzC,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,QACJ,IAAI,MAAM,YAAmC,IAAI,OAAO;AAAA,IAC1D,MAAM,MAAO,IAAI,MAAM,UAAiC,IAAI,OAAO;AAAA,IACnE,MAAM,UACJ,IAAI,MAAM,cACX,IAAI,OAAO,WACX;AAAA,IACD,MAAM,SAAS,SAAS,IAAI,OAAO,WAAW,KAAK,KAAK,QAAQ;AAAA,IAChE,MAAM,SAAS,SAAS,IAAI,OAAO,WAAW,KAAK;AAAA,IACnD,MAAM,aACL,IAAI,OAAO,SAAS,aAAa,CAAC,SAAS,IAAI,OAAO,YAAY,KAAK;AAAA,IAGxE,MAAM,aAAa,GAAG,SAAS;AAAA,IAC/B,MAAM,UAAU,GAAG,SAAS;AAAA,IAC5B,MAAM,aAAa,GAAG,SAAS;AAAA,IAC/B,MAAM,YAAY,SAAS;AAAA,IAC3B,MAAM,gBAAgB,GAAG,SAAS;AAAA,IAClC,MAAM,oBAAoB,GAAG,SAAS;AAAA,IAEtC,OAAO,QACN,eAAe,SAAS,iBAAiB,eAAe,IAAI,OAAO,aAAa,MACjF;AAAA,IACA,MAAM,UAAoB,CAAC;AAAA,IAG3B;AAAA,MACC,MAAM,OAAO,OAAO,UAAU,KAAK,YAAY;AAAA,QAC9C,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,QAChB;AAAA,QACA;AAAA,QACA,cAAc,SAAS,QAAQ;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAC;AAAA,MACD,MAAM,MAAM,SACX,IAAI,KACJ,IAAI,OAAO,MAAM,aACjB,GAAG,SAAS,qBACb;AAAA,MACA,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,QAClD,OAAO,KAAK,qBAAqB,KAAK;AAAA,MACvC,EAAO;AAAA,QACN,OAAO,QAAQ,WAAW,KAAK;AAAA,QAC/B,QAAQ,KAAK,GAAG;AAAA;AAAA,IAElB;AAAA,IAGA;AAAA,MACC,MAAM,OAAO,OAAO,UAAU,SAAS;AAAA,QACtC,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,QAChB,SAAS,CAAC;AAAA,QACV;AAAA,QACA,iBAAiB,SAAS,QAAQ;AAAA,MACnC,CAAC;AAAA,MACD,MAAM,MAAM,SACX,IAAI,KACJ,IAAI,OAAO,MAAM,UACjB,GAAG,SAAS,kBACb;AAAA,MACA,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,QAClD,OAAO,KAAK,qBAAqB,KAAK;AAAA,MACvC,EAAO;AAAA,QACN,OAAO,QAAQ,WAAW,KAAK;AAAA,QAC/B,QAAQ,KAAK,GAAG;AAAA;AAAA,IAElB;AAAA,IAGA,IAAI,CAAC,QAAQ;AAAA,MACZ,IAAI,QAAQ,aAAa,QAAQ,YAAY,QAAQ,UAAU;AAAA,QAC9D,IAAI;AAAA,QACJ,IAAI,QAAQ,WAAW;AAAA,UAEtB,MAAM,MAAM,qBAAqB,OAAO;AAAA,UACxC,OAAO,OAAO,KAAK;AAAA,YAClB,MAAM,SAAS;AAAA,YACf,OAAO,SAAS;AAAA,YAChB,OAAO,SAAS;AAAA,YAChB,OAAO,SAAS;AAAA,YAChB;AAAA,YACA,SAAS,qBAAqB,OAAO;AAAA,YACrC,aAAa;AAAA,UACd,CAAC;AAAA,QACF,EAAO;AAAA,UACN,MAAM,MAAM,UAAU,MAAM;AAAA,UAC5B,OAAO,OAAO,KAAK;AAAA,YAClB,MAAM,SAAS;AAAA,YACf,OAAO,SAAS;AAAA,YAChB,OAAO,SAAS;AAAA,YAChB,OAAO,SAAS;AAAA,YAChB;AAAA,YACA,SAAS,qBAAqB,GAAG;AAAA,YACjC,aAAa;AAAA,UACd,CAAC;AAAA;AAAA,QAEF,MAAM,MAAM,SACX,IAAI,KACJ,IAAI,OAAO,MAAM,QACjB,GAAG,SAAS,gBACb;AAAA,QACA,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,UAClD,OAAO,KAAK,qBAAqB,KAAK;AAAA,QACvC,EAAO;AAAA,UACN,OAAO,QAAQ,WAAW,KAAK;AAAA,UAC/B,QAAQ,KAAK,GAAG;AAAA;AAAA,MAElB;AAAA,MAGA,MAAM,WAAW,OAAO,UAAU,YAAY;AAAA,QAC7C,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,QAChB;AAAA,QACA;AAAA,MACD,CAAC;AAAA,MACD,MAAM,UAAU,SACf,IAAI,KACJ,GAAG,IAAI,OAAO,MAAM,oBACpB,GAAG,SAAS,qBACb;AAAA,MACA,WAAU,SAAQ,OAAO,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,MAC/C,IAAI,CAAC,UAAU,SAAS,UAAU,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,QAC1D,OAAO,KAAK,qBAAqB,SAAS;AAAA,MAC3C,EAAO;AAAA,QACN,OAAO,QAAQ,WAAW,SAAS;AAAA,QACnC,QAAQ,KAAK,OAAO;AAAA;AAAA,IAEtB;AAAA,IAGA;AAAA,MACC,MAAM,OAAO,OAAO,UAAU,KAAK,KAAK;AAAA,QACvC,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,MACjB,CAAC;AAAA,MACD,MAAM,MAAM,SACX,IAAI,KACJ,IAAI,OAAO,MAAM,KACjB,GAAG,SAAS,cACb;AAAA,MACA,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,QAClD,OAAO,KAAK,qBAAqB,KAAK;AAAA,MACvC,EAAO;AAAA,QACN,OAAO,QAAQ,WAAW,KAAK;AAAA,QAC/B,QAAQ,KAAK,GAAG;AAAA;AAAA,IAElB;AAAA,IAGA;AAAA,MACC,MAAM,OAAO,OAAO,UAAU,KAAK,QAAQ;AAAA,QAC1C,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,CAAC;AAAA,MACX,CAAC;AAAA,MACD,MAAM,MAAM,SACX,IAAI,KACJ,IAAI,OAAO,MAAM,SACjB,GAAG,SAAS,iBACb;AAAA,MACA,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,QAClD,OAAO,KAAK,qBAAqB,KAAK;AAAA,MACvC,EAAO;AAAA,QACN,OAAO,QAAQ,WAAW,KAAK;AAAA,QAC/B,QAAQ,KAAK,GAAG;AAAA;AAAA,IAElB;AAAA,IAGA,IAAI,CAAC,QAAQ;AAAA,MACZ,MAAM,OAAO,OAAO,UAAU,KAAK,MAAM;AAAA,QACxC,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,QAChB;AAAA,QACA;AAAA,MACD,CAAC;AAAA,MACD,MAAM,MAAM,SAAQ,IAAI,KAAK,SAAS,GAAG,SAAS,eAAe;AAAA,MACjE,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,QAClD,OAAO,KAAK,qBAAqB,KAAK;AAAA,MACvC,EAAO;AAAA,QACN,OAAO,QAAQ,WAAW,KAAK;AAAA,QAC/B,QAAQ,KAAK,GAAG;AAAA;AAAA,IAElB;AAAA,IAEA,OAAO,MAAM;AAAA,IACb,OAAO,QAAQ,YAAY;AAAA,IAC3B,OAAO,KAAK,gCAAgC;AAAA,IAC5C,WAAW,KAAK;AAAA,MAAS,OAAO,KAAK,QAAQ,GAAG;AAAA,IAChD,OAAO,KAAK,UAAU,SAAS,oCAAoC;AAAA,IACnE,OAAO,KACN,MAAM,SAAS,KAAK,8DACrB;AAAA,IACA,OAAO,KAAK,qDAAqD;AAAA,IACjE,OAAO,MAAM;AAAA,IAEb,OAAO;AAAA;AAET;AAEA,SAAS,oBAAoB,CAAC,KAAqB;AAAA,EAClD,IAAI,QAAQ,WAAW;AAAA,IACtB,OAAO;AAAA,EACR;AAAA,EACA,IAAI,QAAQ,UAAU;AAAA,IACrB,OAAO;AAAA,EACR;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,oBAAoB,CAAC,SAAyB;AAAA,EACtD,MAAM,SAAS,eAAe,SAAS,MAAM;AAAA,EAC7C,OAAO,YAAY;AAAA;AAGpB,IAAe;;;AEnSf,oBAAS;AAIT,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgCxB,UAAU;AAEL,IAAM,sBAA+B;AAAA,EAC3C,MAAM;AAAA,EACN,SAAS,CAAC,MAAM,eAAe;AAAA,EAC/B,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU,CAAC,+BAA+B,8BAA8B;AAAA,OAClE,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,gCAAgC;AAAA,MAC7C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,OAAO,OAAO,mBAAmB;AAAA,MACtC,MAAM,SAAS;AAAA,MACf,OAAO,SAAS;AAAA,IACjB,CAAC;AAAA,IACD,MAAM,MAAM,SACX,IAAI,KACJ,wBACA,GAAG,SAAS,mBACb;AAAA,IAEA,IAAI,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,MACjD,OAAO,QAAQ,WAAW,KAAK;AAAA,IAChC,EAAO;AAAA,MACN,OAAO,KAAK,qBAAqB,KAAK;AAAA;AAAA,IAGvC,OAAO,MAAM;AAAA,IACb,OAAO,QAAQ,YAAY;AAAA,IAC3B,OAAO,KAAK,sDAAsD;AAAA,IAClE,OAAO,KAAK,+BAA+B;AAAA,IAC3C,OAAO,KAAK,yCAAyC;AAAA,IACrD,OAAO,KAAK,+BAA+B;AAAA,IAC3C,OAAO,KAAK,yDAAyD;AAAA,IACrE,OAAO,MAAM;AAAA,IAEb,OAAO;AAAA;AAET;AAEA,IAAe;;;AC1Ff,oBAAS;AAKF,IAAM,wBAAiC;AAAA,EAC7C,MAAM;AAAA,EACN,SAAS,CAAC,OAAO,iBAAiB;AAAA,EAClC,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU,CAAC,2BAA2B,8BAA8B;AAAA,OAC9D,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,kCAAkC;AAAA,MAC/C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,OAAO,OAAO,UAAU,YAAY;AAAA,MACzC,MAAM,SAAS;AAAA,IAChB,CAAC;AAAA,IAED,MAAM,MAAM,SACX,IAAI,KACJ,IAAI,OAAO,MAAM,YACjB,GAAG,SAAS,qBACb;AAAA,IAEA,UAAU,KAAK,IAAI;AAAA,IACnB,OAAO,QAAQ,WAAW,KAAK;AAAA,IAC/B,OAAO,OACN,8CAA8C,SAAS,4BACxD;AAAA,IACA,OAAO;AAAA;AAET;AAEA,IAAe;;;ACzBf,oBAAS;AASF,IAAM,uBAAgC;AAAA,EAC5C,MAAM;AAAA,EACN,SAAS,CAAC,OAAO,gBAAgB;AAAA,EACjC,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,iDAAiD;AAAA,MAC9D,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,MAAO,IAAI,MAAM,UAAiC,IAAI,OAAO;AAAA,IACnE,MAAM,UACJ,IAAI,MAAM,cACX,IAAI,OAAO,WACX;AAAA,IACD,MAAM,YAAY,QAAQ;AAAA,IAC1B,MAAM,gBACL,QAAQ,UAAU,QAAQ,YAAY,QAAQ;AAAA,IAE/C,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,YAAY,eAAe,IAAI;AAAA,IACrC,MAAM,WAAW,IAAI,MAAM;AAAA,IAC3B,MAAM,OAAO,aAAa,YAAY,YAAY;AAAA,IAIlD,MAAM,iBAAiB,sBAAqB,MAAM,OAAO;AAAA,IACzD,MAAM,aAAa,iBAAiB,MAAM,OAAO;AAAA,IAEjD,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI,WAAW;AAAA,MACd,IAAI,CAAC,eAAe,OAAO,GAAG;AAAA,QAC7B,OAAO,MACN,gCAAgC,4DACjC;AAAA,QACA,OAAO;AAAA,MACR;AAAA,MACA,OAAO,qBAAqB,OAAO;AAAA,MACnC,OAAO,OAAO,MAAM;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,QAChB;AAAA,QACA,SAAS;AAAA,QACT,WAAW,gBAAgB,IAAI,IAAM;AAAA,MACtC,CAAC;AAAA,MACD,YAAY;AAAA,IACb,EAAO,SAAI,eAAe;AAAA,MACzB,MAAM,MAAM,UAAU,UAAU;AAAA,MAChC,OAAO,OAAO,KAAK;AAAA,QAClB,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,QAChB;AAAA,QACA,SAAS;AAAA,QACT,WAAW,gBAAgB,IAAI,IAAM;AAAA,MACtC,CAAC;AAAA,MACD,YAAY;AAAA,IACb,EAAO;AAAA,MACN,OAAO,MACN,kCAAkC,8CACnC;AAAA,MACA,OAAO;AAAA;AAAA,IAGR,MAAM,WAAW,GAAG,gBAAgB,IAAI,IAAM,KAAK,SAAS,SAAS;AAAA,IACrE,MAAM,MAAM,UAAQ,IAAI,KAAK,IAAI,OAAO,MAAM,YAAY,QAAQ;AAAA,IAElE,UAAU,KAAK,IAAI;AAAA,IACnB,OAAO,QAAQ,WAAW,KAAK;AAAA,IAC/B,IAAI,WAAW;AAAA,MACd,OAAO,OAAO,iDAAiD;AAAA,IAChE,EAAO;AAAA,MACN,OAAO,OAAO,0DAA0D;AAAA;AAAA,IAEzE,OAAO;AAAA;AAET;AAEA,SAAS,cAAc,CACtB,GAC6D;AAAA,EAC7D,OAAO,CAAC,YAAY,SAAS,UAAU,cAAc,IAAI,EAAE,SAAS,CAAC;AAAA;AAGtE,SAAS,cAAc,CAAC,OAAuB;AAAA,EAG9C,MAAM,IAAI,uBAAuB,KAAK,KAAK;AAAA,EAC3C,IAAI;AAAA,IAAG,OAAO,EAAE;AAAA,EAChB,MAAM,KAAK,6CAA6C,KAAK,KAAK;AAAA,EAClE,IAAI;AAAA,IAAI,OAAO,GAAG;AAAA,EAClB,OAAO,MAAM,YAAY,EAAE,QAAQ,MAAM,EAAE,IAAI;AAAA;AAGhD,SAAS,YAAY,CAAC,OAAmD;AAAA,EACxE,MAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,MAAM,MAAM,GAAG;AAAA,EAC3D,OAAO,KACL,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO,EACd,IAAI,CAAC,OAAM;AAAA,IACX,OAAO,MAAM,OAAO,UAAU,GAAE,MAAM,GAAG;AAAA,IACzC,OAAO,CAAC,MAAO,IAAI;AAAA,GACnB;AAAA;AAGH,SAAS,gBAAgB,CACxB,MACA,SACS;AAAA,EACT,OAAO,KACL,IAAI,EAAE,MAAM,UAAU;AAAA,IACtB,MAAM,UAAU,WAAW,MAAM,OAAO;AAAA,IACxC,MAAM,UAAU,YAAY,KAAK,OAAO,IAAI,KAAK;AAAA,IACjD,OAAO,KAAK,QAAQ,UAAU;AAAA,GAC9B,EACA,KAAK;AAAA,CAAI;AAAA;AAGZ,SAAS,qBAAoB,CAC5B,MACA,SACS;AAAA,EACT,OAAO,KACL,IAAI,EAAE,MAAM,UAAU;AAAA,IACtB,MAAM,SAAS,eAAe,SAAS,IAAI;AAAA,IAC3C,OAAO,KAAK,SAAS,WAAW;AAAA,GAChC,EACA,KAAK;AAAA,CAAI;AAAA;AAGZ,SAAS,UAAU,CAAC,GAAW,SAAyB;AAAA,EACvD,MAAM,OAAO,EAAE,YAAY;AAAA,EAC3B,QAAQ;AAAA,SACF;AAAA,SACA;AAAA,SACA;AAAA,MACJ,OAAO,YAAY,UAAU,iBAAiB;AAAA,SAC1C;AAAA,SACA;AAAA,MACJ,OAAO,YAAY,aAChB,YACA,YAAY,UACX,QACA;AAAA,SACA;AAAA,SACA;AAAA,MACJ,OAAO,YAAY,aAAa,WAAW;AAAA,SACvC;AAAA,MACJ,OAAO,YAAY,aAAa,WAAW;AAAA,SACvC;AAAA,SACA;AAAA,MACJ,OAAO,YAAY,UAAU,YAAY;AAAA,SACrC;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACJ,OAAO,YAAY,UAAU,WAAW;AAAA,SACpC;AAAA,SACA;AAAA,MACJ,OAAO,YAAY,aAChB,cACA,YAAY,UACX,aACA;AAAA,SACA;AAAA,MACJ,OAAO,YAAY,UAAU,SAAS;AAAA,SAClC;AAAA,MACJ,OAAO,YAAY,aAChB,UACA,YAAY,UACX,SACA;AAAA,SACA;AAAA,MACJ,OAAO,YAAY,aAAa,UAAU;AAAA;AAAA,MAE1C,OAAO;AAAA;AAAA;AAIV,SAAS,eAAe,CAAC,GAAiB;AAAA,EACzC,MAAM,MAAM,CAAC,MAAc,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG;AAAA,EACpD,OACC,GAAG,EAAE,YAAY,IAAI,IAAI,EAAE,SAAS,IAAI,CAAC,IAAI,IAAI,EAAE,QAAQ,CAAC,MAC5D,IAAI,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC;AAAA;AAIlE,IAAe;;;AC1Nf,oBAAS;AAeF,IAAM,mBAA4B;AAAA,EACxC,MAAM;AAAA,EACN,SAAS,CAAC,UAAU,YAAY;AAAA,EAChC,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MACN,uEACD;AAAA,MACA,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,MAAO,IAAI,MAAM,UAAiC,IAAI,OAAO;AAAA,IACnE,IAAI,QAAQ,aAAa,QAAQ,YAAY,QAAQ,UAAU;AAAA,MAC9D,OAAO,MACN,oBAAoB,gFACrB;AAAA,MACA,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,YAAY,SAAS;AAAA,IAG3B,MAAM,WAAW,SAAS,IAAI,OAAO,SAAS;AAAA,IAC9C,MAAM,UAAU,SAAS,SAAS,IAAI,WAAW,CAAC,YAAY;AAAA,IAC9D,MAAM,cAAc,cACnB,SACA,KACA,IAAI,MAAM,UACX;AAAA,IACA,MAAM,cAAc,kBAAkB,SAAS,QAAQ,OAAO;AAAA,IAE9D,IAAI;AAAA,IACJ,IAAI,QAAQ,WAAW;AAAA,MACtB,MAAM,UACJ,IAAI,MAAM,cACX,IAAI,OAAO,WACX;AAAA,MACD,IAAI,CAAC,gBAAe,OAAO,GAAG;AAAA,QAC7B,OAAO,MACN,gCAAgC,4DACjC;AAAA,QACA,OAAO;AAAA,MACR;AAAA,MACA,OAAO,qBAAqB,OAAO;AAAA,MACnC,OAAO,OAAO,MAAM;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,QAChB;AAAA,QACA,SAAS;AAAA,QACT;AAAA,MACD,CAAC;AAAA,IACF,EAAO;AAAA,MACN,MAAM,MAAM,UAAU,MAAM;AAAA,MAC5B,OAAO,OAAO,KAAK;AAAA,QAClB,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,QAChB;AAAA,QACA,SAAS;AAAA,QACT;AAAA,MACD,CAAC;AAAA;AAAA,IAGF,MAAM,MAAM,UACX,IAAI,KACJ,IAAI,OAAO,MAAM,QACjB,GAAG,SAAS,gBACb;AAAA,IAEA,UAAU,KAAK,IAAI;AAAA,IACnB,OAAO,QAAQ,WAAW,KAAK;AAAA,IAC/B,OAAO,OACN,kCAAkC,4CACnC;AAAA,IACA,IAAI,QAAQ,WAAW;AAAA,MACtB,OAAO,OACN,iEACD;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAET;AAEA,SAAS,eAAc,CACtB,GAC6D;AAAA,EAC7D,OAAO,CAAC,YAAY,SAAS,UAAU,cAAc,IAAI,EAAE,SAAS,CAAC;AAAA;AAGtE,SAAS,aAAa,CACrB,MACA,KACA,SACS;AAAA,EAET,MAAM,OAAO,KACX,QAAQ,CAAC,OAAM,GAAE,MAAM,GAAG,CAAC,EAC3B,IAAI,CAAC,OAAM,GAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AAAA,EAChB,OAAO,KACL,IAAI,CAAC,QAAQ;AAAA,IACb,OAAO,SAAS,UAAU,UAAU,IAAI,MAAM,GAAG;AAAA,IACjD,MAAM,SAAS,SAAQ,OAAO;AAAA,IAC9B,QAAQ;AAAA,WACF,WAAW;AAAA,QACf,MAAM,IAAK,WAAW;AAAA,QAMtB,MAAM,SAAS,eAAe,GAAG,OAAO;AAAA,QACxC,OAAO,KAAK,WAAW,WAAW;AAAA,MACnC;AAAA,WACK,UAAU;AAAA,QACd,MAAM,SAAS,YAAY,SAAS,WAAW;AAAA,QAC/C,OAAO,KAAK,YAAY;AAAA,MACzB;AAAA,WACK;AAAA;AAAA,QAEJ,OAAO,KAAK,WAAW;AAAA;AAAA,GAEzB,EACA,KAAK;AAAA,CAAI;AAAA;AAGZ,SAAS,iBAAiB,CAAC,WAAmB,MAAwB;AAAA,EACrE,MAAM,aAAa,KACjB,IAAI,CAAC,OAAM;AAAA,IACX,OAAO,MAAM,OAAO,YAAY,GAAE,MAAM,GAAG;AAAA,IAC3C,OAAO,KAAK,KAAK,OAAO,EAAE,KAAK,WAAW,IAAI;AAAA,GAC9C,EACA,KAAK;AAAA,CAAI;AAAA,EACX,OAAO,YAAY;AAAA;AAAA,EAElB,WACA,MAAM;AAAA,CAAI,EACV,IAAI,CAAC,MAAM,KAAK,GAAG,EACnB,KAAK;AAAA,CAAI;AAAA;AAAA;AAAA;AAAA;AAMX,SAAS,QAAO,CAAC,GAAmB;AAAA,EACnC,OAAO,EAAE,QAAQ,aAAa,CAAC,GAAG,OAAM,GAAE,YAAY,CAAC;AAAA;AAGxD,SAAS,UAAU,CAAC,GAAmB;AAAA,EACtC,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,MAAM,CAAC;AAAA;AAG7C,IAAe;;;AC/Mf,oBAAS;AAWF,IAAM,oBAA6B;AAAA,EACzC,MAAM;AAAA,EACN,SAAS,CAAC,MAAM,aAAa;AAAA,EAC7B,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU,CAAC,uBAAuB,qCAAqC;AAAA,EACvE,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA,EAAE,MAAM,cAAc,aAAa,6BAA6B;AAAA,IAChE,EAAE,MAAM,WAAW,aAAa,gCAAgC;AAAA,EACjE;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,8BAA8B;AAAA,MAC3C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,gBAAgB,CAAC,SAAS,IAAI,OAAO,iBAAiB,KAAK;AAAA,IACjE,MAAM,aAAa,CAAC,SAAS,IAAI,OAAO,cAAc,KAAK;AAAA,IAC3D,MAAM,UACL,CAAC,SAAS,IAAI,OAAO,WAAW,KAAK,KAAK,IAAI,OAAO,QAAQ;AAAA,IAE9D,MAAM,OAAO,OAAO,UAAU,QAAQ;AAAA,MACrC,MAAM,SAAS;AAAA,MACf,OAAO,SAAS;AAAA,MAChB,YAAY,GAAG,SAAS;AAAA,MACxB,SAAS,GAAG,SAAS;AAAA,MACrB,YAAY,GAAG,SAAS;AAAA,MACxB;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IAED,MAAM,MAAM,UACX,IAAI,KACJ,IAAI,OAAO,MAAM,SACjB,GAAG,SAAS,iBACb;AAAA,IAEA,UAAU,KAAK,IAAI;AAAA,IACnB,OAAO,QAAQ,WAAW,KAAK;AAAA,IAC/B,OAAO,OAAO,OAAO,SAAS,oCAAoC;AAAA,IAClE,OAAO;AAAA;AAET;AAEA,IAAe;;;ACxDf,oBAAS;AAUT,IAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6CtB,UAAU;AAEZ,IAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4B1B,UAAU;AAEZ,IAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAShB,KAAK;AAEA,IAAM,mBAA4B;AAAA,EACxC,MAAM;AAAA,EACN,SAAS,CAAC,MAAM,YAAY;AAAA,EAC5B,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,6BAA6B;AAAA,MAC1C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,UACJ,IAAI,MAAM,cACX,IAAI,OAAO,OAAO,WAClB;AAAA,IAED,IAAI,CAAC,CAAC,UAAU,cAAc,QAAQ,EAAE,SAAS,OAAO,GAAG;AAAA,MAC1D,OAAO,MACN,oBAAoB,+CACrB;AAAA,MACA,OAAO;AAAA,IACR;AAAA,IAEA,OAAO,QAAQ,eAAe,SAAS,mBAAmB,UAAU;AAAA,IAGpE,IAAI,CAAC,SAAS,IAAI,OAAO,aAAa,KAAK,GAAG;AAAA,MAC7C,MAAM,OAAO,OAAO,iBAAiB;AAAA,QACpC,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,MACjB,CAAC;AAAA,MACD,MAAM,MAAM,UACX,IAAI,KACJ,qBACA,GAAG,SAAS,iBACb;AAAA,MACA,IAAI,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,QACjD,OAAO,QAAQ,WAAW,KAAK;AAAA,MAChC,EAAO;AAAA,QACN,OAAO,KAAK,qBAAqB,KAAK;AAAA;AAAA,IAExC;AAAA,IAGA,IAAI,CAAC,SAAS,IAAI,OAAO,UAAU,KAAK,GAAG;AAAA,MAC1C,MAAM,OAAO,OAAO,qBAAqB;AAAA,QACxC,MAAM,SAAS;AAAA,QACf,OAAO,SAAS;AAAA,MACjB,CAAC;AAAA,MACD,MAAM,MAAM,UACX,IAAI,KACJ,kBACA,GAAG,SAAS,cACb;AAAA,MACA,IAAI,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,QACjD,OAAO,QAAQ,WAAW,KAAK;AAAA,MAChC,EAAO;AAAA,QACN,OAAO,KAAK,qBAAqB,KAAK;AAAA;AAAA,IAExC;AAAA,IAEA,OAAO,MAAM;AAAA,IACb,OAAO,QAAQ,YAAY;AAAA,IAC3B,OAAO,KAAK,yDAAyD;AAAA,IACrE,OAAO,KAAK,wCAAwC,kBAAkB;AAAA,IACtE,OAAO,KAAK,2CAA2C;AAAA,IACvD,OAAO,KACN,OAAO,WAAW,EAAE,MAAM,SAAS,QAAQ,OAAO,SAAS,MAAM,CAAC,EAChE,MAAM;AAAA,CAAI,EACV,IAAI,CAAC,MAAM,UAAU,CAAC,EACtB,KAAK;AAAA,CAAI,CACZ;AAAA,IACA,OAAO,KACN,0BAA0B,SAAS,wCACpC;AAAA,IACA,OAAO,MAAM;AAAA,IAEb,OAAO;AAAA;AAET;AAEA,IAAe;;;ACzMf,oBAAS;AAIT,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqCpB,UAAU;AAEL,IAAM,sBAA+B;AAAA,EAC3C,MAAM;AAAA,EACN,SAAS,CAAC,OAAO,eAAe;AAAA,EAChC,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU,CAAC,kCAAkC,8BAA8B;AAAA,OACrE,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,gCAAgC;AAAA,MAC7C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,OAAO,OAAO,eAAe;AAAA,MAClC,MAAM,SAAS;AAAA,MACf,OAAO,SAAS;AAAA,IACjB,CAAC;AAAA,IACD,MAAM,MAAM,UACX,IAAI,KACJ,sBACA,GAAG,SAAS,eACb;AAAA,IAEA,IAAI,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,MACjD,OAAO,QAAQ,WAAW,KAAK;AAAA,IAChC,EAAO;AAAA,MACN,OAAO,KAAK,qBAAqB,KAAK;AAAA;AAAA,IAGvC,OAAO,MAAM;AAAA,IACb,OAAO,QAAQ,YAAY;AAAA,IAC3B,OAAO,KAAK,4DAA4D;AAAA,IACxE,OAAO,KAAK,+BAA+B;AAAA,IAC3C,OAAO,KAAK,wCAAwC;AAAA,IACpD,OAAO,KACN,iEACD;AAAA,IACA,OAAO,MAAM;AAAA,IAEb,OAAO;AAAA;AAET;AAEA,IAAe;;;AClGf,oBAAS;AAKF,IAAM,qBAA8B;AAAA,EAC1C,MAAM;AAAA,EACN,SAAS,CAAC,MAAM,cAAc;AAAA,EAC9B,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU,CAAC,wBAAwB,iCAAiC;AAAA,EACpE,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,+BAA+B;AAAA,MAC5C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,UAAU,IAAI,MAAM,eAAe,QAAQ,IAAI,OAAO,QAAQ;AAAA,IACpE,MAAM,aAAa,GAAG,SAAS;AAAA,IAC/B,MAAM,kBAAkB,SAAS,QAAQ;AAAA,IAEzC,MAAM,OAAO,OAAO,UAAU,SAAS;AAAA,MACtC,MAAM,SAAS;AAAA,MACf,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IAED,MAAM,MAAM,UACX,IAAI,KACJ,IAAI,OAAO,MAAM,UACjB,GAAG,SAAS,kBACb;AAAA,IAEA,UAAU,KAAK,IAAI;AAAA,IACnB,OAAO,QAAQ,WAAW,KAAK;AAAA,IAC/B,OAAO;AAAA;AAET;AAEA,IAAe;;;AC3Cf,oBAAS;AAIT,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2CvB,UAAU;AAEL,IAAM,qBAA8B;AAAA,EAC1C,MAAM;AAAA,EACN,SAAS,CAAC,SAAS,cAAc;AAAA,EACjC,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU,CAAC,wBAAwB,uBAAuB;AAAA,OACpD,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,+BAA+B;AAAA,MAC5C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,OAAO,OAAO,kBAAkB;AAAA,MACrC,MAAM,SAAS;AAAA,MACf,OAAO,SAAS;AAAA,IACjB,CAAC;AAAA,IACD,MAAM,MAAM,UACX,IAAI,KACJ,wBACA,GAAG,SAAS,kBACb;AAAA,IAEA,IAAI,UAAU,KAAK,MAAM,EAAE,cAAc,KAAK,CAAC,GAAG;AAAA,MACjD,OAAO,QAAQ,WAAW,KAAK;AAAA,IAChC,EAAO;AAAA,MACN,OAAO,KAAK,qBAAqB,KAAK;AAAA;AAAA,IAGvC,OAAO,MAAM;AAAA,IACb,OAAO,QAAQ,YAAY;AAAA,IAC3B,OAAO,KAAK,2DAA2D;AAAA,IACvE,OAAO,KAAK,2DAA2D;AAAA,IACvE,OAAO,KAAK,6CAA6C;AAAA,IACzD,OAAO,MAAM;AAAA,IAEb,OAAO;AAAA;AAET;AAEA,IAAe;;;ACnGf,oBAAS;AAKF,IAAM,uBAAgC;AAAA,EAC5C,MAAM;AAAA,EACN,SAAS,CAAC,MAAM,gBAAgB;AAAA,EAChC,SAAS;AAAA,EACT,aAAa;AAAA,EACb,UAAU,CAAC,0BAA0B,+BAA+B;AAAA,OAC9D,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,iCAAiC;AAAA,MAC9C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,aAAa,IAAI;AAAA,IAClC,MAAM,OAAO,OAAO,UAAU,WAAW;AAAA,MACxC,MAAM,SAAS;AAAA,IAChB,CAAC;AAAA,IAED,MAAM,MAAM,UACX,IAAI,KACJ,IAAI,OAAO,MAAM,KACjB,GAAG,SAAS,cACb;AAAA,IAEA,UAAU,KAAK,IAAI;AAAA,IACnB,OAAO,QAAQ,WAAW,KAAK;AAAA,IAC/B,OAAO;AAAA;AAET;AAEA,IAAe;;;ACVf;AACA,uBAAS;AACT,oBAAS;AAIF,IAAM,mBAA4B;AAAA,EACxC,MAAM;AAAA,EACN,SAAS,CAAC,QAAQ,SAAS;AAAA,EAC3B,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,SACJ,IAAI,MAAM,aACX,UAAQ,IAAI,KAAK,IAAI,OAAO,MAAM,UAAU;AAAA,IAC7C,MAAM,UACJ,IAAI,MAAM,cACX,IAAI,OAAO,WACX;AAAA,IACD,MAAM,aACJ,IAAI,MAAM,aACX,UAAQ,IAAI,KAAK,mBAAmB;AAAA,IACrC,MAAM,aAAa,QAAQ,IAAI,MAAM,SAAS;AAAA,IAC9C,MAAM,eAAe,IAAI,MAAM;AAAA,IAE/B,IAAI,cAAc;AAAA,MACjB,OAAO,cAAc,IAAI,KAAK;AAAA,QAC7B;AAAA,QACA,GAAI,YAAW,UAAU,IAAI,CAAC,YAAY,YAAY,IAAI,CAAC;AAAA,QAC3D;AAAA,QACA;AAAA,MACD,CAAC;AAAA,IACF;AAAA,IAEA,IAAI,YAAY;AAAA,MACf,OAAO,MAAM,UACb,IAAI,KACJ,QACA,SACC,IAAI,OAAO,UAAkB,OAAO,EACtC;AAAA,IACA;AAAA,IAGA,OAAO,cAAc,IAAI,KAAK;AAAA,MAC7B;AAAA,MACA,GAAI,YAAW,UAAU,IAAI,CAAC,YAAY,YAAY,IAAI,CAAC;AAAA,IAC5D,CAAC;AAAA;AAEH;AAEO,SAAS,aAAa,CAAC,KAAa,OAAiC;AAAA,EAC3E,OAAO,IAAI,QAAQ,CAAC,aAAa;AAAA,IAChC,MAAM,MAAM;AAAA,IACZ,OAAO,KAAK,KAAK,mBAAmB,MAAK,KAAK,GAAG,GAAG;AAAA,IACpD,MAAM,QAAQ,MAAM,KAAK,CAAC,eAAe,GAAG,KAAI,GAAG;AAAA,MAClD;AAAA,MACA,OAAO;AAAA,MACP,OAAO,QAAQ,aAAa;AAAA,IAC7B,CAAC;AAAA,IACD,MAAM,GAAG,QAAQ,CAAC,SAAS,SAAS,QAAQ,CAAC,CAAC;AAAA,IAC9C,MAAM,GAAG,SAAS,CAAC,QAAQ;AAAA,MAC1B,OAAO,MAAM,gCAAgC,IAAI,SAAS;AAAA,MAC1D,SAAS,CAAC;AAAA,KACV;AAAA,GACD;AAAA;AAQF,eAAe,SAAS,CACvB,KACA,QACA,SACA,YAAoB,IACF;AAAA,EAClB,IAAI,CAAC,YAAW,MAAM,GAAG;AAAA,IACxB,OAAO,KAAK,gCAAgC,QAAQ;AAAA,IACpD,OAAO;AAAA,EACR;AAAA,EACA,MAAM,MAAM,WAAW,OAAO,KAAK;AAAA,EACnC,IAAI,CAAC,KAAK;AAAA,IACT,OAAO,MACN,kBAAkB,iEACnB;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EACA,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA,cAIF,KAAK,UAAU,GAAG;AAAA,kBACd,KAAK,UAAU,OAAO;AAAA,iBACvB,KAAK,UAAU,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrC,MAAM,UAAU,UAAQ,KAAK,wBAAwB;AAAA,EACrD,MAAa,sBAAoB,KAAK,CAAC,MACtC,EAAE,UAAU,SAAS,QAAQ,OAAO,CACrC;AAAA,EACA,IAAI;AAAA,IACH,MAAM,OAAO,MAAM,IAAI,QAAgB,CAAC,SAAS;AAAA,MAChD,MAAM,QAAQ,MAAM,OAAO,CAAC,OAAO,GAAG;AAAA,QACrC;AAAA,QACA,OAAO;AAAA,QACP,OAAO,QAAQ,aAAa;AAAA,MAC7B,CAAC;AAAA,MACD,MAAM,GAAG,QAAQ,CAAC,OAAM,KAAK,MAAK,CAAC,CAAC;AAAA,MACpC,MAAM,GAAG,SAAS,MAAM,KAAK,CAAC,CAAC;AAAA,KAC/B;AAAA,IACD,OAAO;AAAA,YACN;AAAA,IACD,MAAa,sBAAoB,KAAK,CAAC,MACtC,EAAE,OAAO,OAAO,EAAE,MAAM,MAAM,EAAE,CACjC;AAAA;AAAA;AAIF,SAAS,UAAU,CAAC,SAAgC;AAAA,EACnD,MAAM,MACL,QAAQ,IAAI,mBACZ,QAAQ,IAAI,oBACX,YAAY,aACV,QAAQ,IAAI,kBACZ,YAAY,UACX,QAAQ,IAAI,eACZ,QAAQ,SAAS,QAAQ,IACxB,QAAQ,IAAI,qBACZ;AAAA,EACN,OAAO,OAAO;AAAA;AAIf,IAAe;;;ACxLf,oBAAS;AAKF,IAAM,oBAA6B;AAAA,EACzC,MAAM;AAAA,EACN,SAAS,CAAC,QAAQ,eAAe,oBAAoB;AAAA,EACrD,SAAS;AAAA,EACT,aACC,+FACA,0DACA;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,MAAM,UACJ,IAAI,MAAM,cAAqC,IAAI,OAAO,WAAW;AAAA,IACvE,MAAM,QAAQ,IAAI,MAAM,WAAW;AAAA,IAEnC,IAAI,OAAO;AAAA,MACV,IAAI,CAAC,MAAM;AAAA,QACV,OAAO,MAAM,oCAAoC;AAAA,QACjD,OAAO;AAAA,MACR;AAAA,MACA,OAAO,KAAK,iCAAiC,iBAAiB,UAAU;AAAA,MACxE,OAAO,eAAe,IAAI,KAAK,MAAM,OAAO;AAAA,IAC7C;AAAA,IAGA,MAAM,aAAa,UAAQ,IAAI,KAAK,mBAAmB;AAAA,IACvD,MAAM,QAAO,CAAC,YAAY,YAAY,UAAU;AAAA,IAChD,IAAI;AAAA,MAAM,MAAK,KAAK,UAAU,IAAI;AAAA,IAElC,OAAO,KAAK,yBAAyB,iBAAiB,UAAU;AAAA,IAChE,OAAO,cAAc,IAAI,KAAK,KAAI;AAAA;AAEpC;AAKA,eAAe,cAAc,CAC5B,KACA,MACA,SACkB;AAAA,EAClB,QAAQ,uBAAW,kCAAkB,MAAa;AAAA,EAClD,QAAQ,SAAS,MAAa;AAAA,EAC9B,MAAM,gBAAgB,KAAK,KAAK,OAAO,YAAY,YAAY;AAAA,EAC/D,WAAU,eAAe,EAAE,WAAW,KAAK,CAAC;AAAA,EAE5C,MAAM,YAAY,KAAK,IAAI;AAAA,EAC3B,MAAM,WAAW,GAAG,aAAa,KAAK,QAAQ,gBAAgB,GAAG;AAAA,EACjE,MAAM,WAAW,KAAK,eAAe,QAAQ;AAAA,EAE7C,MAAM,SAAS,YAAY,cAAc,YAAY,UAClD,iBAAiB;AAAA,cAAqB;AAAA,gBAA0B,IAAI,KAAK,EAAE,YAAY;AAAA;AAAA,IACvF,iBAAiB;AAAA,cAAqB;AAAA,gBAAmC,IAAI,KAAK,EAAE,YAAY;AAAA;AAAA;AAAA,EAEnG,eAAc,UAAU,MAAM;AAAA,EAC9B,OAAO,QAAQ,WAAW,UAAU;AAAA,EACpC,OAAO,KAAK,0DAA0D;AAAA,EACtE,OAAO;AAAA;AAGR,IAAe;;;AC1Df,kBAAS;AACT,uBAAS;AACT,sCAAmC;AACnC,oBAAS;AAIT,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0Bf,IAAM,gBAAyB;AAAA,EACrC,MAAM;AAAA,EACN,SAAS,CAAC,QAAQ,MAAM;AAAA,EACxB,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,SAAS,UACd,IAAI,KACH,IAAI,MAAM,aACT,IAAI,OAAO,OAA8B,SAC1C,UACF;AAAA,IACA,MAAM,UACJ,IAAI,MAAM,cACX,IAAI,OAAO,WACX;AAAA,IACD,MAAM,aAAa,IAAI,MAAM;AAAA,IAC7B,MAAM,WAAW,IAAI,MAAM;AAAA,IAC3B,MAAM,QAAQ,QAAQ,IAAI,MAAM,QAAQ;AAAA,IAGxC,IAAI,YAAY;AAAA,MACf,OAAO,MAAM,eAAe,QAAQ,UAAU;AAAA,IAC/C;AAAA,IAEA,IAAI,CAAC,YAAW,MAAM,GAAG;AAAA,MAExB,OAAO,KAAK,kCAAkC,QAAQ;AAAA,MACtD,MAAM,MAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,MACvC,MAAM,WACL,UAAQ,QAAQ,YAAY,GAC5B;AAAA,GACA,OACD;AAAA,MACA,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,QAAQ,MAAM,iBAAiB,MAAM;AAAA,IAG3C,IAAI,UAAU;AAAA,MACb,MAAM,UAAU,MAAM,OAAO,CAAC,MAC7B,EAAE,YAAY,EAAE,SAAS,SAAS,YAAY,CAAC,CAChD;AAAA,MACA,IAAI,QAAQ,WAAW,GAAG;AAAA,QACzB,OAAO,MAAM,0BAA0B,gBAAgB,QAAQ;AAAA,QAC/D,OAAO;AAAA,MACR;AAAA,IACD,EAAO,SAAI,MAAM,WAAW,GAAG;AAAA,MAC9B,OAAO,KAAK,0BAA0B,QAAQ;AAAA,MAC9C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,SAAS,WACZ,MAAM,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,SAAS,YAAY,CAAC,CAAC,IACpE;AAAA,IAEH,MAAM,MAAM,YAAW,OAAO;AAAA,IAC9B,IAAI,CAAC,KAAK;AAAA,MACT,OAAO,MACN,kBAAkB,iEACnB;AAAA,MACA,OAAO;AAAA,IACR;AAAA,IAEA,IAAI,OAAO;AAAA,MACV,OAAO,KACN,4EACD;AAAA,IACD;AAAA,IAMA,MAAM,cAAc,OAClB,IAAI,CAAC,GAAG,MAAM,eAAe,UAAU,KAAK,UAAU,UAAQ,QAAQ,CAAC,CAAC,IAAI,EAC5E,KAAK;AAAA,CAAI;AAAA,IACX,MAAM,YAAY,OAChB,IACA,CAAC,GAAG,MACH,gBAAgB,8DAClB,EACC,KAAK;AAAA,CAAI;AAAA,IAEX,MAAM,SAAS;AAAA;AAAA,kCAEiB,eAAe,IAAI,KAAK,sBAAsB;AAAA,6CACnC,eAAe,IAAI,KAAK,qBAAqB;AAAA;AAAA,cAE5E,KAAK,UAAU,GAAG;AAAA,kBACd,KAAK,UAAU,OAAO;AAAA,gBACxB,KAAK,UAAU,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAelC;AAAA;AAAA,EAEA;AAAA;AAAA;AAAA,mCAGiC,OAAO;AAAA;AAAA,IAExC,MAAM,UAAU,UAAQ,IAAI,KAAK,iBAAiB;AAAA,IAClD,MAAM,WAAU,SAAS,QAAQ,OAAO;AAAA,IACxC,IAAI;AAAA,MACH,MAAM,OAAO,MAAM,IAAI,QAAgB,CAAC,SAAS;AAAA,QAChD,MAAM,QAAQ,OAAM,OAAO,CAAC,OAAO,GAAG;AAAA,UACrC,KAAK,IAAI;AAAA,UACT,OAAO;AAAA,UACP,OAAO,QAAQ,aAAa;AAAA,QAC7B,CAAC;AAAA,QACD,MAAM,GAAG,QAAQ,CAAC,OAAM,KAAK,MAAK,CAAC,CAAC;AAAA,QACpC,MAAM,GAAG,SAAS,MAAM,KAAK,CAAC,CAAC;AAAA,OAC/B;AAAA,MACD,OAAO;AAAA,cACN;AAAA,MACD,MAAM,OAAO,OAAO,EAAE,MAAM,MAAM,EAAE;AAAA;AAAA;AAGvC;AAMA,eAAe,gBAAgB,CAAC,QAAmC;AAAA,EAClE,MAAM,MAAM,MAAM,QAAQ,QAAQ,EAAE,eAAe,KAAK,CAAC;AAAA,EACzD,MAAM,MAAgB,CAAC;AAAA,EACvB,WAAW,KAAK,KAAK;AAAA,IACpB,IAAI,CAAC,EAAE,OAAO;AAAA,MAAG;AAAA,IACjB,IAAI,EAAE,KAAK,WAAW,GAAG;AAAA,MAAG;AAAA,IAC5B,IAAI,CAAC,qBAAqB,KAAK,EAAE,IAAI;AAAA,MAAG;AAAA,IACxC,IAAI,KAAK,EAAE,IAAI;AAAA,EAChB;AAAA,EACA,IAAI,KAAK;AAAA,EACT,OAAO;AAAA;AAGR,eAAe,cAAc,CAC5B,QACA,MACkB;AAAA,EAClB,IAAI,CAAC,iBAAiB,KAAK,IAAI,GAAG;AAAA,IACjC,OAAO,MACN,sBAAsB,sDACvB;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EACA,IAAI,CAAC,YAAW,MAAM;AAAA,IAAG,MAAM,MAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,EAGhE,IAAI,YAAY,GAAG;AAAA,EACnB,IAAI,IAAI;AAAA,EACR,OAAO,YAAW,UAAQ,QAAQ,SAAS,CAAC,GAAG;AAAA,IAC9C,YAAY,GAAG,QAAQ;AAAA,IACvB;AAAA,EACD;AAAA,EACA,MAAM,OAAO,UAAQ,QAAQ,SAAS;AAAA,EACtC,MAAM,OAAO,cAAc,QAAQ,aAAa,IAAI;AAAA,EACpD,MAAM,WAAU,MAAM,MAAM,OAAO;AAAA,EACnC,OAAO,KAAK,WAAW,MAAM;AAAA,EAC7B,OAAO;AAAA;AAGR,SAAS,WAAU,CAAC,SAAgC;AAAA,EACnD,MAAM,MACL,QAAQ,IAAI,mBACZ,QAAQ,IAAI,oBACX,YAAY,aACV,QAAQ,IAAI,kBACZ,YAAY,UACX,QAAQ,IAAI,eACZ,QAAQ,SAAS,QAAQ,IACxB,QAAQ,IAAI,qBACZ;AAAA,EACN,OAAO,OAAO;AAAA;AAGf,SAAS,cAAc,CAAC,KAAa,QAAwB;AAAA,EAC5D,MAAM,MAAM,UAAQ,KAAK,MAAM;AAAA,EAC/B,IAAI,MAAM;AAAA,EACV,IAAI,IAAI,WAAW,GAAG;AAAA,IAAG,MAAM,IAAI,MAAM,IAAI,MAAM;AAAA,EACnD,IAAI,IAAI,WAAW,GAAG;AAAA,IAAG,MAAM,IAAI,MAAM,CAAC;AAAA,EAC1C,IAAI,CAAC,IAAI,WAAW,GAAG;AAAA,IAAG,MAAM,OAAO;AAAA,EACvC,OAAO;AAAA;AAGR,IAAe;;;ACxSf,uBAAS,0BAAY,6BAAW;AAChC,oBAAS;AAKF,IAAM,aAAsB;AAAA,EAClC,MAAM;AAAA,EACN,SAAS,CAAC,GAAG;AAAA,EACb,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA,EAAE,MAAM,QAAQ,aAAa,4CAA4C;AAAA,IACzE,EAAE,MAAM,OAAO,aAAa,0CAA0C;AAAA,IACtE;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA,EAAE,MAAM,UAAU,aAAa,sBAAsB;AAAA,IACrD,EAAE,MAAM,kBAAkB,aAAa,8BAA8B;AAAA,EACtE;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,OAAO,IAAI,WAAW;AAAA,IAC5B,IAAI,CAAC,MAAM;AAAA,MACV,OAAO,MAAM,8BAA8B;AAAA,MAC3C,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,cAAc,CAAC,SAAS,IAAI,OAAO,kBAAkB,KAAK;AAAA,IAChE,MAAM,SAAS,UAAQ,IAAI,KAAK,IAAI;AAAA,IAEpC,IAAI,YAAW,MAAM,GAAG;AAAA,MACvB,OAAO,MAAM,6BAA6B,QAAQ;AAAA,MAClD,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,UACJ,IAAI,MAAM,YACV,MAAM,OAAO,iBAAiB,CAAC,QAAQ,UAAU,YAAY,GAAG;AAAA,MAChE;AAAA,MACA,SAAS;AAAA,IACV,CAAC;AAAA,IAEF,MAAM,OACJ,IAAI,MAAM,WACV,MAAM,OAAO,eAAe,CAAC,SAAS,QAAQ,OAAO,WAAW,MAAM,GAAG;AAAA,MACzE;AAAA,MACA,SAAS;AAAA,IACV,CAAC;AAAA,IAEF,MAAM,MACJ,IAAI,MAAM,UACV,MAAM,OAAO,cAAc,CAAC,WAAW,UAAU,UAAU,MAAM,GAAG;AAAA,MACpE;AAAA,MACA,SAAS;AAAA,IACV,CAAC;AAAA,IAEF,MAAM,KACJ,IAAI,MAAM,SACV,MAAM,OACN,mBACA,CAAC,cAAc,eAAe,UAAU,YAAY,SAAS,MAAM,GACnE;AAAA,MACC;AAAA,MACA,SAAS;AAAA,IACV,CACD;AAAA,IAED,MAAM,WACJ,IAAI,MAAM,eACV,MAAM,OAAO,oBAAoB,CAAC,SAAS,OAAO,UAAU,OAAO,GAAG;AAAA,MACtE;AAAA,MACA,SAAS;AAAA,IACV,CAAC;AAAA,IAEF,MAAM,MAAM,CAAC,SAAS,IAAI,OAAO,UAAU,KAAK;AAAA,IAEhD,WAAU,UAAQ,QAAQ,KAAK,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IACrD,WAAU,UAAQ,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IACxD,WAAU,UAAQ,QAAQ,iBAAiB,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IAEjE,eAAc,UAAQ,QAAQ,iBAAiB,GAAG,EAAE;AAAA,IAEpD,eACC,UAAQ,QAAQ,8BAA8B,GAC9C,kBAAkB;AAAA;AAAA;AAAA,CACnB;AAAA,IAEA,eAAc,UAAQ,QAAQ,MAAM,GAAG,gBAAgB,CAAC;AAAA,IACxD,eAAc,UAAQ,QAAQ,YAAY,GAAG,qBAAqB,CAAC;AAAA,IACnE,eAAc,UAAQ,QAAQ,YAAY,GAAG,kBAAkB,CAAC;AAAA,IAEhE,MAAM,OAAO,OAAO,UAAU,QAAQ,iBAAiB;AAAA,MACtD;AAAA,MACA;AAAA,MACA,WAAW,SAAS,SAAS,KAAK;AAAA,MAClC;AAAA,MACA,UAAU;AAAA,MACV,OAAO,OAAO,gBAAgB,OAAO,gBAAgB,WAAW;AAAA,MAChE,iBAAiB;AAAA,MACjB,YAAY;AAAA,MACZ,gBAAgB;AAAA,IACjB,CAAC;AAAA,IACD,eAAc,UAAQ,QAAQ,cAAc,GAAG,IAAI;AAAA,IAEnD,eACC,UAAQ,QAAQ,cAAc,GAC9B,KAAK,UACJ;AAAA,MACC;AAAA,MACA,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,QACR,KAAK;AAAA,QACL,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,IAAI;AAAA,MACL;AAAA,MACA,cAAc;AAAA,QACb,SAAS;AAAA,QACT,oBAAoB;AAAA,QACpB,MAAM;AAAA,QACN,KAAK;AAAA,MACN;AAAA,IACD,GACA,MACA,CACD,CACD;AAAA,IAEA,eACC,UAAQ,QAAQ,eAAe,GAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAeD;AAAA,IAEA,eACC,UAAQ,QAAQ,aAAa,GAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAaD;AAAA,IAEA,eACC,UAAQ,QAAQ,mBAAmB,GACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CASD;AAAA,IAEA,WAAU,UAAQ,QAAQ,iBAAiB,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IACjE,eACC,UAAQ,QAAQ,oCAAoC,GACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAaD;AAAA,IAEA,eACC,UAAQ,QAAQ,WAAW,GAC3B,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAiBN;AAAA,IAEA,OAAO,QAAQ,WAAW,QAAQ;AAAA,IAClC,OAAO,MAAM;AAAA,IACb,OAAO,QAAQ,YAAY;AAAA,IAC3B,OAAO,KAAK,QAAQ,MAAM;AAAA,IAC1B,OAAO,KAAK,eAAe;AAAA,IAC3B,OAAO,KAAK,eAAe;AAAA,IAC3B,OAAO,MAAM;AAAA,IAEb,OAAO;AAAA;AAET;AAGA,SAAS,eAAe,GAAW;AAAA,EAClC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BR,SAAS,oBAAoB,GAAW;AAAA,EACvC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaR,SAAS,iBAAiB,GAAW;AAAA,EACpC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASR,IAAe;;;AC9Qf,uBAAS,6BAAY,gCAAc;AACnC,oBAAS;AAkBT,IAAM,iBAAiC;AAAA,EACtC,SAAS;AAAA,EACT,MAAM;AAAA,EACN,WAAW;AAAA,EACX,KAAK;AAAA,EACL,UAAU;AAAA,EACV,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,gBAAgB;AACjB;AAMA,SAAS,mBAAmB,CAAC,MAA8B;AAAA,EAC1D,MAAM,MAAsB,KAAK,eAAe;AAAA,EAChD,IAAI,CAAC,YAAW,IAAI;AAAA,IAAG,OAAO;AAAA,EAC9B,MAAM,MAAM,cAAa,MAAM,MAAM;AAAA,EACrC,MAAM,OAAO,CAAC,OAAmC;AAAA,IAChD,MAAM,IAAI,IAAI,MAAM,EAAE;AAAA,IACtB,OAAO,IAAI;AAAA;AAAA,EAEZ,MAAM,UAAU,KAAK,6BAA6B;AAAA,EAClD,MAAM,OAAO,KAAK,0BAA0B;AAAA,EAC5C,MAAM,iBAAiB,IAAI,MAAM,+BAA+B;AAAA,EAChE,IAAI,gBAAgB;AAAA,IACnB,IAAI,YAAY,eAAe;AAAA,EAChC;AAAA,EACA,MAAM,MAAM,KAAK,yBAAyB;AAAA,EAC1C,MAAM,SAAS,KAAK,4BAA4B;AAAA,EAChD,MAAM,MAAM,KAAK,6DAA6D;AAAA,EAC9E,MAAM,WAAW,KAAK,8BAA8B;AAAA,EACpD,MAAM,MAAM,KAAK,qBAAqB;AAAA,EACtC,MAAM,UAAU,KAAK,6BAA6B;AAAA,EAClD,IAAI;AAAA,IAAS,IAAI,UAAU;AAAA,EAC3B,IAAI;AAAA,IAAM,IAAI,OAAO;AAAA,EACrB,IAAI;AAAA,IAAK,IAAI,MAAM;AAAA,EACnB,IAAI;AAAA,IAAQ,IAAI,WAAW;AAAA,EAC3B,IAAI,QAAQ;AAAA,IAAW,IAAI,QAAQ;AAAA,EACnC,IAAI;AAAA,IAAU,IAAI,kBAAkB;AAAA,EACpC,IAAI;AAAA,IAAK,IAAI,aAAa,QAAQ;AAAA,EAClC,IAAI;AAAA,IAAS,IAAI,iBAAiB;AAAA,EAClC,OAAO;AAAA;AAIR,SAAS,eAAe,CAAC,QAAwB;AAAA,EAChD,QAAQ;AAAA,SACF;AAAA,SACA;AAAA,SACA;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO;AAAA;AAAA,MAEP,OAAO;AAAA;AAAA;AAKV,SAAS,YAAY,CAAC,QAAwB;AAAA,EAC7C,IAAI,WAAW,gBAAgB,WAAW,iBAAiB,WAAW,UAAU;AAAA,IAC/E,OAAO;AAAA,EACR;AAAA,EACA,OAAO;AAAA;AAGD,IAAM,gBAAyB;AAAA,EACrC,MAAM;AAAA,EACN,SAAS,CAAC,KAAK;AAAA,EACf,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN,EAAE,MAAM,UAAU,aAAa,kCAAkC;AAAA,IACjE;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA,EAAE,MAAM,QAAQ,aAAa,wCAAwC;AAAA,IACrE;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA,EAAE,MAAM,OAAO,aAAa,0CAA0C;AAAA,IACtE;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,IACjD,EAAE,MAAM,UAAU,aAAa,sBAAsB;AAAA,IACrD,EAAE,MAAM,SAAS,aAAa,wCAAwC;AAAA,IACtE,EAAE,MAAM,kBAAkB,aAAa,8BAA8B;AAAA,EACtE;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,cAAc,CAAC,SAAS,IAAI,OAAO,kBAAkB,KAAK;AAAA,IAChE,MAAM,QAAQ,SAAS,IAAI,OAAO,SAAS,KAAK;AAAA,IAChD,MAAM,SAAS,UACd,IAAI,KACH,IAAI,MAAM,aAAoC,GAChD;AAAA,IAEA,IAAI,CAAC,YAAW,MAAM,GAAG;AAAA,MACxB,OAAO,MAAM,oCAAoC,QAAQ;AAAA,MACzD,OAAO;AAAA,IACR;AAAA,IAGA,MAAM,eAAe,UAAQ,QAAQ,cAAc;AAAA,IACnD,MAAM,SAAyB,oBAAoB,YAAY;AAAA,IAG/D,MAAM,OAAO,CAAC,MAAc,IAAI,MAAM;AAAA,IACtC,MAAM,iBAAiB,CAAC,GAAW,QAClC,SAAS,IAAI,OAAO,GAAG,GAAG;AAAA,IAC3B,IAAI,KAAK,OAAO;AAAA,MAAG,OAAO,UAAU,KAAK,OAAO;AAAA,IAChD,IAAI,KAAK,MAAM;AAAA,MAAG,OAAO,OAAO,KAAK,MAAM;AAAA,IAC5C,IAAI,KAAK,YAAY,GAAG;AAAA,MACvB,OAAO,YAAY,KAAK,YAAY;AAAA,IACrC;AAAA,IACC,IAAI,KAAK,KAAK;AAAA,MAAG,OAAO,MAAM,KAAK,KAAK;AAAA,IACxC,IAAI,KAAK,IAAI;AAAA,MAAG,OAAO,WAAW,KAAK,IAAI;AAAA,IAC3C,IAAI,KAAK,QAAQ,MAAM;AAAA,MAAW,OAAO,QAAQ,KAAK,QAAQ;AAAA,IAC9D,IAAI,KAAK,UAAU;AAAA,MAAG,OAAO,kBAAkB,KAAK,UAAU;AAAA,IAC9D,IAAI,eAAe,OAAO,KAAK;AAAA,MAAG,OAAO,aAAa;AAAA,IACtD,IAAI,eAAe,UAAU,KAAK;AAAA,MAAG,OAAO,aAAa;AAAA,IAMzD,MAAM,UAAU,OAAO,OAAO,IAAI,KAAK,EAAE,KACxC,CAAC,MAAM,MAAM,aAAa,MAAM,KACjC;AAAA,IACA,IAAI,eAAe,CAAC,WAAW,CAAC,YAAW,YAAY,GAAG;AAAA,MACzD,OAAO,UACL,MAAM,OAAO,iBAAiB,CAAC,QAAQ,UAAU,YAAY,GAAG;AAAA,QAChE;AAAA,QACA,SAAS,OAAO;AAAA,MACjB,CAAC,KAAM,OAAO;AAAA,MACf,OAAO,OACL,MAAM,OAAO,eAAe,CAAC,WAAW,SAAS,QAAQ,MAAM,GAAG;AAAA,QAClE;AAAA,QACA,SAAS,OAAO;AAAA,MACjB,CAAC,KAAM,OAAO;AAAA,MACf,OAAO,MACL,MAAM,OAAO,cAAc,CAAC,WAAW,UAAU,UAAU,MAAM,GAAG;AAAA,QACpE;AAAA,QACA,SAAS,OAAO;AAAA,MACjB,CAAC,KAAM,OAAO;AAAA,MACf,OAAO,WACL,MAAM,OACN,mBACA,CAAC,cAAc,eAAe,UAAU,YAAY,SAAS,MAAM,GACnE,EAAE,aAAa,SAAS,OAAO,SAAS,CACzC,KAAM,OAAO;AAAA,MACd,OAAO,kBACL,MAAM,OACN,oBACA,CAAC,SAAS,OAAO,UAAU,OAAO,GAClC,EAAE,aAAa,SAAS,OAAO,gBAAgB,CAChD,KAAM,OAAO;AAAA,IACf;AAAA,IAGA,IAAI,KAAK,QAAQ,MAAM,aAAa,KAAK,IAAI,MAAM,WAAW;AAAA,MAC7D,OAAO,QAAQ,aAAa,OAAO,QAAQ;AAAA,IAC5C;AAAA,IAGA,MAAM,UAAU,YAAW,YAAY;AAAA,IACvC,IAAI,WAAW,CAAC,OAAO;AAAA,MAItB,IAAI,SAAS;AAAA,QACZ,cAAc,QAAQ,MAAM;AAAA,QAC5B,OAAO,KAAK,4BAA4B;AAAA,MACzC,EAAO;AAAA,QACN,OAAO,KAAK,gEAAgE;AAAA;AAAA,IAE9E,EAAO;AAAA,MACN,cAAc,QAAQ,MAAM;AAAA,MAC5B,OAAO,KAAK,kBAAkB;AAAA;AAAA,IAI/B,MAAM,oBAAoB,UAAQ,QAAQ,mBAAmB;AAAA,IAC7D,IAAI,OAAO,QAAQ,WAAW;AAAA,MAC7B,MAAM,UAAU,gBAAgB,OAAO,QAAQ;AAAA,MAC/C,MAAM,QAAQ,OAAO;AAAA,MACrB,MAAM,iBAAiB,YAAW,iBAAiB;AAAA,MACnD,IAAI,kBAAkB,CAAC,SAAS,CAAC,SAAS;AAAA,QACzC,OAAO,KAAK,qEAAqE;AAAA,MAClF,EAAO;AAAA,QACN,mBAAmB,QAAQ,EAAE,SAAS,MAAM,CAAC;AAAA,QAC7C,OAAO,KAAK,KAAK,iBAAiB,MAAM,uBAAuB;AAAA;AAAA,IAEjE,EAAO,SAAI,YAAW,iBAAiB,GAAG;AAAA,MACzC,OAAO,KACN,8CAA8C,OAAO,sBACtD;AAAA,IACD;AAAA,IAEA,OAAO,MAAM;AAAA,IACb,OAAO,QAAQ,qBAAqB,QAAQ;AAAA,IAC5C,OAAO,MAAM;AAAA,IACb,OAAO,QAAQ,YAAY;AAAA,IAC3B,OAAO,KAAK,QAAQ,WAAW,IAAI,MAAM,MAAM,QAAQ;AAAA,IACvD,IAAI,OAAO,QAAQ,WAAW;AAAA,MAC7B,OAAO,KAAK,gDAAgD;AAAA,IAC7D;AAAA,IACA,OAAO,MAAM;AAAA,IAEb,OAAO;AAAA;AAET;AAMA,SAAS,aAAa,CAAC,QAAgB,QAA8B;AAAA,EACpE,MAAM,OAAO,OAAO,UAAU,QAAQ,iBAAiB,MAAM;AAAA,EAC7D,eAAc,UAAQ,QAAQ,cAAc,GAAG,IAAI;AAAA;AAGpD,SAAS,kBAAkB,CAC1B,QACA,QACO;AAAA,EACP,MAAM,OAAO,OAAO,UAAU,QAAQ,sBAAsB,MAAM;AAAA,EAClE,eAAc,UAAQ,QAAQ,mBAAmB,GAAG,IAAI;AAAA;AAGzD,IAAe;;;AC7Rf;AAAA,gBACC;AAAA,eACA;AAAA,kBACA;AAAA,mBACA;AAAA;AAED,oBAAS,qBAAS;AAClB;AACA;AAIA,IAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAMf,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2Bb,IAAM,UAA2C;AAAA,EAChD,CAAC,MAAM,oCAAoC,gBAAgB;AAAA,EAC3D,CAAC,UAAU,kCAAkC,eAAe;AAAA,EAC5D,CAAC,OAAO,kCAAkC,eAAe;AAAA,EACzD,CAAC,SAAS,gCAAgC,cAAc;AAAA,EACxD,CAAC,UAAU,iCAAiC,cAAc;AAC3D;AAEO,IAAM,cAAuB;AAAA,EACnC,MAAM;AAAA,EACN,SAAS,CAAC,WAAW,OAAO;AAAA,EAC5B,SAAS;AAAA,EACT,aACC;AAAA,EACD,UAAU;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,OAAO;AAAA,IACN;AAAA,MACC,MAAM;AAAA,MACN,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,IACd;AAAA,EACD;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,MAAM,IAAI,MAAM;AAAA,IACtB,MAAM,SAAS,QAAQ,IAAI,MAAM,UAAU;AAAA,IAC3C,MAAM,WAAW,UAChB,IAAI,KACH,IAAI,MAAM,cAAqC,kBACjD;AAAA,IAEA,MAAM,MAA+B,EAAE,QAAQ;AAAA,IAE/C,IAAI,CAAC,QAAQ;AAAA,MACZ,MAAM,UAAU,UACf,IAAI,KACJ,OAAO,mBACR;AAAA,MACA,IAAI,CAAC,YAAW,OAAO,GAAG;AAAA,QACzB,OAAO,MAAM,qBAAqB,SAAS;AAAA,QAC3C,OAAO,KACN,mDACD;AAAA,QACA,OAAO;AAAA,MACR;AAAA,MACA,IAAI;AAAA,QACH,MAAM,UAAU,MAAa;AAAA,QAC7B,MAAM,YACL,QAAQ,WAAW,QAAQ;AAAA,QAC5B,IAAI,CAAC,WAAW;AAAA,UACf,OAAO,MACN,aAAa,8DACd;AAAA,UACA,OAAO;AAAA,QACR;AAAA,QACA,QAAQ,8BAAgB;AAAA,QAGxB,MAAM,MAAM,IAAI,aAAY,SAAS;AAAA,QACrC,IAAI,MAAM;AAAA,QACV,IAAI,YAAY,IAAI;AAAA,QAEpB,YAAY,MAAM,MAAM,cAAc,SAAS;AAAA,UAC9C,MAAM,eACL,KACA,KACA,MACA,MACA,SACD;AAAA,QACD;AAAA,QAEA,OAAO,KAAK,iBAAW,SAAS;AAAA,QAC/B,OAAO,KAAK;AAAA,QACb,OAAO,MAAM,mBAAoB,IAAc,SAAS;AAAA,QACxD,OAAO;AAAA;AAAA,IAET;AAAA,IAEA,QAAQ,IAAI,MAAM;AAAA,IAClB,IAAI,QAAQ;AAAA,MACX,QAAQ,IAAI,8CAA8C;AAAA,IAC3D;AAAA,IAEA,MAAM,UAAU,YAAY,QAAQ;AAAA,IAEpC,MAAM,KAAc,yBAAgB;AAAA,MACnC,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV;AAAA,MACA,aAAa;AAAA,IACd,CAAC;AAAA,IAED,MAAM,WAAW,MAAM,gBAAgB,UAAW,GAAyC,WAAW,CAAC,CAAC;AAAA,IACxG,GAAG,GAAG,SAAS,MAAM;AAAA,MACpB,SAAS;AAAA,MACT,QAAQ,KAAK,CAAC;AAAA,KACd;AAAA,IACD,QAAQ,GAAG,UAAU,MAAM;AAAA,MAC1B,SAAS;AAAA,MACT,QAAQ,KAAK,CAAC;AAAA,KACd;AAAA,IACD,QAAQ,GAAG,QAAQ,QAAQ;AAAA,IAE3B,IAAI,SAAS;AAAA,IACb,MAAM,YAAe,iBAAc,GAAG;AAAA,IAEtC,MAAM,WAAW,OAAO,SAAgC;AAAA,MACvD,IAAI;AAAA,QACH,MAAM,SAAS,IAAO,UAAO,MAAM,EAAE,UAAU,YAAY,CAAC;AAAA,QAC5D,MAAM,SAAS,OAAO,aAAa,WAAW;AAAA,UAC7C,eAAe;AAAA,QAChB,CAAC;AAAA,QACD,IAAI,WAAW;AAAA,UAAW;AAAA,QAC1B,IACC,UACA,OAAQ,OAA8B,SAAS,YAC9C;AAAA,UACD,MAAM,IAAI,MAAO;AAAA,UACjB,QAAQ,IAAI,aAAa,CAAC,CAAC;AAAA,QAC5B,EAAO;AAAA,UACN,QAAQ,IAAI,aAAa,MAAM,CAAC;AAAA;AAAA,QAEhC,OAAO,KAAK;AAAA,QACb,QAAQ,MAAM,YAAY,GAAY,CAAC;AAAA;AAAA;AAAA,IAIzC,MAAM,mBAAmB,OAAO,SAAmC;AAAA,MAClE,MAAM,MAAM,KAAK,KAAK;AAAA,MACtB,QAAQ;AAAA,aACF;AAAA,UACJ,QAAQ,IAAI,IAAI;AAAA,UAChB,OAAO;AAAA,aACH;AAAA,aACA;AAAA,UACJ,SAAS;AAAA,UACT,GAAG,MAAM;AAAA,UACT,OAAO;AAAA,aACH;AAAA,UACJ,QAAQ,MAAM;AAAA,UACd,QAAQ,IAAI,MAAM;AAAA,UAClB,OAAO;AAAA,aACH,aAAa;AAAA,UACjB,MAAM,WAAW,aAAa,IAAI,SAAS;AAAA,UAC3C,IAAI,SAAS,WAAW,GAAG;AAAA,YAC1B,QAAQ,IAAI,4BAA4B;AAAA,UACzC,EAAO;AAAA,YACN,WAAW,KAAK;AAAA,cAAU,QAAQ,IAAI,KAAK,GAAG;AAAA;AAAA,UAE/C,OAAO;AAAA,QACR;AAAA,aACK,YAAY;AAAA,UAChB,MAAM,OAAQ,IAAI,KACf;AAAA,UACH,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAAA,YAC/B,QAAQ,IAAI,gBAAgB;AAAA,UAC7B,EAAO;AAAA,YACN,WAAW,KAAK,MAAM;AAAA,cACrB,QAAQ,IACP,KAAK,EAAE,QAAQ,EAAE,aAAa,QAAQ,UACvC;AAAA,YACD;AAAA;AAAA,UAED,OAAO;AAAA,QACR;AAAA,aACK,WAAW;AAAA,UACf,MAAM,MAAM,IAAI;AAAA,UAOhB,MAAM,SAAS,KAAK,QAAQ,KAAK,UAAU,CAAC;AAAA,UAC5C,IAAI,OAAO,WAAW,GAAG;AAAA,YACxB,QAAQ,IAAI,0BAA0B;AAAA,UACvC,EAAO;AAAA,YACN,WAAW,KAAK,QAAQ;AAAA,cACvB,MAAM,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC;AAAA,cACpC,QAAQ,IAAI,KAAK,KAAK,EAAE,QAAQ,KAAK;AAAA,YACtC;AAAA;AAAA,UAED,OAAO;AAAA,QACR;AAAA,aACK,YAAY;AAAA,UAChB,MAAM,OAAQ,GAAyC,WAAW,CAAC;AAAA,UACnE,MAAM,UAAU;AAAA,UAChB,QAAQ,QAAQ,CAAC,GAAW,MAAc;AAAA,YACzC,QAAQ,IAAI,MAAM,IAAI,GAAG,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG;AAAA,WACvD;AAAA,UACD,OAAO;AAAA,QACR;AAAA,aACK,UAAU;AAAA,UACd,WAAW,KAAK,OAAO,KAAK,GAAG,GAAG;AAAA,YACjC,IAAI,MAAM;AAAA,cAAW,OAAO,IAAI;AAAA,UACjC;AAAA,UACA,QAAQ,IAAI,iBAAiB;AAAA,UAC7B,OAAO;AAAA,QACR;AAAA;AAAA,UAEC,QAAQ,MAAM,sBAAsB,KAAK;AAAA,UACzC,QAAQ,IAAI,2BAA2B;AAAA,UACvC,OAAO;AAAA;AAAA;AAAA,IAIV,GAAG,GAAG,QAAQ,OAAO,SAAS;AAAA,MAC7B,MAAM,UAAU,KAAK,KAAK;AAAA,MAC1B,IAAI,QAAQ,WAAW,GAAG,GAAG;AAAA,QAC5B,MAAM,iBAAiB,OAAO;AAAA,MAC/B,EAAO;AAAA,QACN,UAAU,OAAO;AAAA;AAAA,QACjB,IAAI,aAAa,MAAM,GAAG;AAAA,UACzB,GAAG,UAAU,MAAM;AAAA,UACnB,GAAG,OAAO;AAAA,UACV;AAAA,QACD;AAAA,QACA,MAAM,SAAS,MAAM;AAAA,QACrB,SAAS;AAAA,QACT,GAAG,UAAU,SAAG;AAAA;AAAA,MAEjB,GAAG,OAAO;AAAA,KACV;AAAA,IAED,GAAG,OAAO;AAAA,IAGV,OAAO,IAAI,QAAQ,MAAM,EAExB;AAAA;AAEH;AAMA,eAAsB,cAAc,CACnC,KACA,KACA,MACA,MACA,WACgB;AAAA,EAChB,IAAI;AAAA,IACH,MAAM,MAAO,MAAa;AAAA,IAC1B,MAAM,eAAe,IAAI;AAAA,IAMzB,IAAI,CAAC;AAAA,MAAc;AAAA,IACnB,MAAM,QACL,aAAa,SACb,aAAa,GAAG,UAAU,YAAY;AAAA,IACvC,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,IAAI;AAAA,MACH,IAAI,QAAQ,IAAI,UAAU,QAAQ,KAAK;AAAA,MACtC,MAAM;AAAA,MACP,IAAI;AAAA,QACH,IAAI,QAAQ,IAAI,UAAU,QAAQ,YAAY;AAAA,QAC7C,MAAM;AAAA;AAAA,IAIR,MAAM;AAAA;AAKF,SAAS,YAAY,CAC3B,WACW;AAAA,EACX,IAAI,CAAC;AAAA,IAAW,OAAO,CAAC;AAAA,EACxB,MAAM,KAAI;AAAA,EAGV,IAAI,OAAO,GAAE,kBAAkB;AAAA,IAAY,OAAO,CAAC;AAAA,EACnD,IAAI;AAAA,IACH,OAAO,GACL,cAAc,EACd,IAAI,CAAC,MAAM,EAAE,OAAO,WAAW,KAAK,OAAO,EAAE,KAAK,CAAC;AAAA,IACpD,MAAM;AAAA,IACP,OAAO,CAAC;AAAA;AAAA;AAIH,SAAS,YAAY,CAAC,MAAuB;AAAA,EAInD,MAAM,QAAkB,CAAC;AAAA,EACzB,IAAI,WAA0B;AAAA,EAC9B,IAAI,YAAqC;AAAA,EACzC,SAAS,IAAI,EAAG,IAAI,KAAK,QAAQ,KAAK;AAAA,IACrC,MAAM,KAAI,KAAK;AAAA,IACf,MAAM,OAAO,KAAK,IAAI;AAAA,IACtB,IAAI,cAAc,QAAQ;AAAA,MACzB,IAAI,OAAM;AAAA;AAAA,QAAM,YAAY;AAAA,MAC5B;AAAA,IACD;AAAA,IACA,IAAI,cAAc,SAAS;AAAA,MAC1B,IAAI,OAAM,OAAO,SAAS,KAAK;AAAA,QAC9B,YAAY;AAAA,QACZ;AAAA,MACD;AAAA,MACA;AAAA,IACD;AAAA,IACA,IAAI,UAAU;AAAA,MACb,IAAI,OAAM,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MACD;AAAA,MACA,IAAI,OAAM;AAAA,QAAU,WAAW;AAAA,MAC/B;AAAA,IACD;AAAA,IACA,IAAI,OAAM,OAAO,SAAS,KAAK;AAAA,MAC9B,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACD;AAAA,IACA,IAAI,OAAM,OAAO,SAAS,KAAK;AAAA,MAC9B,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACD;AAAA,IACA,IAAI,OAAM,OAAO,OAAM,OAAO,OAAM,KAAK;AAAA,MACxC,WAAW;AAAA,MACX;AAAA,IACD;AAAA,IACA,IAAI,OAAM,OAAO,OAAM,OAAO,OAAM;AAAA,MAAK,MAAM,KAAK,EAAC;AAAA,IAChD,SAAI,OAAM,OAAO,OAAM,OAAO,OAAM;AAAA,MAAK,MAAM,IAAI;AAAA,EACzD;AAAA,EACA,OAAO,MAAM,SAAS,KAAK,aAAa,QAAQ,cAAc;AAAA;AAGxD,SAAS,YAAY,CAAC,GAAoB;AAAA,EAChD,IAAI,MAAM;AAAA,IAAM,OAAO;AAAA,EACvB,IAAI,MAAM;AAAA,IAAW,OAAO;AAAA,EAC5B,IAAI,OAAO,MAAM;AAAA,IAAU,OAAO;AAAA,EAClC,IACC,OAAO,MAAM,YACb,OAAO,MAAM,aACb,OAAO,MAAM;AAAA,IACZ,OAAO,OAAO,CAAC;AAAA,EACjB,IAAI,OAAO,MAAM,YAAY;AAAA,IAC5B,MAAM,KAAK;AAAA,IACX,OAAO,cAAc,GAAG,QAAQ;AAAA,EACjC;AAAA,EACA,IAAI,OAAO,MAAM;AAAA,IAAU,OAAO,EAAE,SAAS;AAAA,EAC7C,IAAI;AAAA,IACH,OAAO,KAAK,UAAU,GAAG,MAAM,CAAC;AAAA,IAC/B,MAAM;AAAA,IACP,OAAO,OAAO,UAAU,SAAS,KAAK,CAAC;AAAA;AAAA;AAIlC,SAAS,WAAW,CAAC,GAAkB;AAAA,EAC7C,IAAI,EAAE,SAAS;AAAA,IAAe,OAAO,EAAE;AAAA,EACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM;AAAA,CAAI,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK;AAAA,CAAI,IAAI,EAAE;AAAA;AAGjE,SAAS,WAAW,CAAC,MAAwB;AAAA,EAC5C,IAAI,CAAC,YAAW,IAAI;AAAA,IAAG,OAAO,CAAC;AAAA,EAC/B,IAAI;AAAA,IACH,OAAO,cAAa,MAAM,OAAO,EAAE,MAAM;AAAA,CAAI,EAAE,OAAO,OAAO;AAAA,IAC5D,MAAM;AAAA,IACP,OAAO,CAAC;AAAA;AAAA;AAIV,SAAS,eAAe,CAAC,MAAc,SAAyB;AAAA,EAC/D,IAAI;AAAA,IACH,MAAM,MAAM,SAAQ,IAAI;AAAA,IACxB,IAAI,CAAC,YAAW,GAAG;AAAA,MAAG,WAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IACxD,eAAc,MAAM,QAAQ,MAAM,KAAK,EAAE,KAAK;AAAA,CAAI,CAAC;AAAA,IAClD,MAAM;AAAA;AAKT,IAAe;;;AC/cf,kCAAsB;AACtB,oBAAS;AAWF,IAAM,mBAA4B;AAAA,EACxC,MAAM;AAAA,EACN,SAAS,CAAC,UAAU,YAAY;AAAA,EAChC,SAAS;AAAA,EACT,aACC;AAAA,EACD,OAAO;AAAA,IACN,EAAE,MAAM,UAAU,aAAa,wCAAwC;AAAA,EACxE;AAAA,OACM,IAAG,CAAC,KAAsC;AAAA,IAC/C,MAAM,iBAAiB,UAAQ,IAAI,KAAK,IAAI,OAAO,MAAM,WAAW;AAAA,IAEpE,IAAI;AAAA,MACH,UAAS,cAAc;AAAA,MACtB,MAAM;AAAA,MACP,OAAO,KAAK,+BAA+B,iBAAiB;AAAA,MAC5D,OAAO;AAAA;AAAA,IAGR,MAAM,QAAQ,YAAY,cAAc,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC;AAAA,IACzE,IAAI,MAAM,WAAW,GAAG;AAAA,MACvB,OAAO,KAAK,uBAAuB;AAAA,MACnC,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,SAA4B,CAAC;AAAA,IAEnC,WAAW,QAAQ,OAAO;AAAA,MACzB,MAAM,WAAW,UAAQ,gBAAgB,IAAI;AAAA,MAC7C,IAAI;AAAA,QACH,MAAM,MAAW,MAAa,UAAG,cAAc,KAAK,IAAI;AAAA,QACxD,WAAW,cAAc,OAAO,KAAK,GAAG,GAAG;AAAA,UAC1C,MAAM,MAAM,IAAI;AAAA,UAChB,IAAI,OAAO,QAAQ;AAAA,YAAY;AAAA,UAE/B,MAAM,SACL,QAAQ,YAAY,2BAA2B,GAAG,KAAK;AAAA,UACxD,MAAM,YAAY,QAAQ,YAAY,gBAAgB,GAAG,KAAK,CAAC;AAAA,UAE/D,WAAW,KAAK,WAAW;AAAA,YAC1B,OAAO,KAAK;AAAA,cACX,QAAQ,OAAO,EAAE,MAAM,EAAE,YAAY;AAAA,cACrC,MAAM,UAAS,QAAQ,EAAE,IAAI;AAAA,cAC7B,SAAS,OAAO,EAAE,WAAW;AAAA,cAC7B,YAAY,IAAI,QAAQ;AAAA,YACzB,CAAC;AAAA,UACF;AAAA,QACD;AAAA,QACC,OAAO,KAAU;AAAA,QAClB,OAAO,KAAK,mBAAmB,SAAS,IAAI,WAAW,KAAK;AAAA;AAAA,IAE9D;AAAA,IAEA,IAAI,OAAO,WAAW,GAAG;AAAA,MACxB,OAAO,KACN,wCACC,wGACF;AAAA,MACA,OAAO;AAAA,IACR;AAAA,IAEA,MAAM,SAAU,IAAI,MAAM,aAAoC;AAAA,IAC9D,IAAI,WAAW,QAAQ;AAAA,MACtB,QAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,MAC3C,OAAO;AAAA,IACR;AAAA,IAEA,OAAO,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,IAClD,OAAO,QAAQ,WAAW,OAAO,SAAS;AAAA,IAC1C,MAAM,eAAsD;AAAA,MAC3D,KAAK,OAAO;AAAA,MACZ,MAAM,OAAO;AAAA,MACb,KAAK,OAAO;AAAA,MACZ,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO;AAAA,IACd;AAAA,IACA,MAAM,YAAY,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,MAAM,CAAC;AAAA,IAC9D,MAAM,cAAc,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC;AAAA,IAClE,WAAW,KAAK,QAAQ;AAAA,MACvB,MAAM,WAAW,aAAa,EAAE,WAAW,OAAO;AAAA,MAClD,MAAM,IAAI,SAAS,EAAE,OAAO,OAAO,WAAW,CAAC;AAAA,MAC/C,MAAM,IAAI,OAAO,KAAK,EAAE,KAAK,OAAO,SAAS,CAAC;AAAA,MAC9C,MAAM,KAAI,OAAO,IAAI,GAAG,EAAE,cAAc,EAAE,SAAS;AAAA,MACnD,QAAQ,IAAI,KAAK,MAAM,MAAM,IAAG;AAAA,IACjC;AAAA,IACA,OAAO,MAAM;AAAA,IACb,OAAO;AAAA;AAET;AAEA,SAAS,SAAQ,CAAC,QAAgB,KAAqB;AAAA,EACtD,MAAM,IAAI,OAAO,SAAS,GAAG,IAAI,OAAO,MAAM,GAAG,EAAE,IAAI;AAAA,EACvD,MAAM,IAAI,IAAI,WAAW,GAAG,IAAI,MAAM,IAAI;AAAA,EAC1C,OAAO,GAAG,IAAI,OAAO;AAAA;AAGtB,IAAe;;;ACxFR,IAAM,WAAsB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAGO,SAAS,WAAW,CAAC,MAAmC;AAAA,EAC9D,OAAO,SAAS,KACf,CAAC,OAAM,GAAE,SAAS,SAAS,GAAE,WAAW,CAAC,GAAG,SAAS,IAAI,CAC1D;AAAA;;;AClCD,eAAe,IAAI,GAAoB;AAAA,EACtC,MAAM,SAAS,UAAU,QAAQ,KAAK,MAAM,CAAC,CAAC;AAAA,EAC9C,MAAM,UAAU,SAAS,OAAO,OAAO,WAAW,KAAK;AAAA,EACvD,OAAO,WAAW,OAAO;AAAA,EAGzB,IAAI,OAAO,MAAM,eAAe,MAAM;AAAA,IACrC,QAAQ,IAAI,WAAW;AAAA,IACvB,OAAO;AAAA,EACR;AAAA,EAEA,IAAI,OAAO,MAAM,YAAY,QAAQ,OAAO,YAAY,QAAQ;AAAA,IAC/D,OAAO,WAAW,OAAO,WAAW,EAAE;AAAA,EACvC;AAAA,EAEA,MAAM,UAAU,OAAO,UAAU,YAAY,OAAO,OAAO,IAAI;AAAA,EAC/D,IAAI,CAAC,SAAS;AAAA,IACb,IAAI,OAAO,SAAS;AAAA,MACnB,OAAO,MAAM,oBAAoB,OAAO,SAAS;AAAA,MACjD,OAAO,KAAK,yCAAyC;AAAA,MACrD,OAAO;AAAA,IACR;AAAA,IACA,OAAO,WAAW;AAAA,EACnB;AAAA,EAEA,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,MAAM,UAAS,MAAM,WAAW,GAAG;AAAA,EAEnC,OAAO,QAAQ,IAAI;AAAA,IAClB;AAAA,IACA;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,OAAO,OAAO;AAAA,EACf,CAAC;AAAA;AAGF,SAAS,UAAU,CAAC,aAA8B;AAAA,EACjD,IAAI,aAAa;AAAA,IAChB,MAAM,MAAM,YAAY,WAAW;AAAA,IACnC,IAAI,CAAC,KAAK;AAAA,MACT,OAAO,MAAM,oBAAoB,aAAa;AAAA,MAC9C,OAAO;AAAA,IACR;AAAA,IACA,kBAAkB,GAAG;AAAA,IACrB,OAAO;AAAA,EACR;AAAA,EAEA,OAAO,QAAQ,qBAAe;AAAA,EAC9B,QAAQ,IAAI;AAAA,IACT,OAAO,IAAI,4DAA4D;AAAA;AAAA,EAEzE,OAAO,KAAK,OAAO;AAAA;AAAA;AAAA,EAGnB,OAAO,KAAK,UAAU;AAAA,CACvB;AAAA,EAEA,MAAM,YAAY,KAAK,IAAI,GAAG,SAAS,IAAI,CAAC,OAAM,GAAE,KAAK,MAAM,CAAC;AAAA,EAChE,WAAW,MAAK,UAAU;AAAA,IACzB,MAAM,SAAS,GAAE,KAAK,OAAO,SAAS;AAAA,IACtC,MAAM,WAAW,GAAE,SAAS,SACzB,IAAI,OAAO,IAAI,IAAI,GAAE,QAAQ,KAAK,IAAI,IAAI,MAC1C;AAAA,IACH,QAAQ,IAAI,KAAK,OAAO,KAAK,MAAM,IAAI,aAAa,GAAE,SAAS;AAAA,EAChE;AAAA,EAEA,QAAQ,IAAI;AAAA,EACX,OAAO,KAAK,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,OAAO,KAAK,UAAU;AAAA,IACpB,OAAO,IAAI,eAAe;AAAA,IAC1B,OAAO,IAAI,mDAAmD;AAAA,IAC9D,OAAO,IAAI,mBAAmB;AAAA,IAC9B,OAAO,IAAI,yBAAyB;AAAA,IACpC,OAAO,IAAI,sCAAsC;AAAA,IACjD,OAAO,IAAI,SAAS;AAAA,IACpB,OAAO,IAAI,eAAe;AAAA,CAC7B;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,iBAAiB,CAAC,KAA8C;AAAA,EACxE,OAAO,QAAQ,IAAI,IAAI;AAAA,EACvB,IAAI,IAAI,SAAS,QAAQ;AAAA,IACxB,QAAQ,IAAI,KAAK,OAAO,IAAI,UAAU,KAAK,IAAI,QAAQ,KAAK,IAAI,GAAG;AAAA,EACpE;AAAA,EACA,IAAI,IAAI;AAAA,IAAa,QAAQ,IAAI;AAAA,IAAO,IAAI;AAAA,CAAe;AAAA,EAE3D,IAAI,IAAI,OAAO,QAAQ;AAAA,IACtB,QAAQ,IAAI,OAAO,KAAK;AAAA,MAAS,CAAC;AAAA,IAClC,WAAW,KAAK,IAAI,OAAO;AAAA,MAC1B,MAAM,QAAQ,EAAE,QAAQ,MAAM,EAAE,UAAU;AAAA,MAC1C,MAAM,MACL,EAAE,YAAY,YACX,IAAI,OAAO,IAAI,aAAa,OAAO,EAAE,OAAO,IAAI,MAChD;AAAA,MACJ,QAAQ,IAAI,OAAO,EAAE,OAAO,MAAM,OAAO,CAAC,MAAM,EAAE,cAAc,KAAK;AAAA,IACtE;AAAA,EACD;AAAA,EAEA,IAAI,IAAI,UAAU,QAAQ;AAAA,IACzB,QAAQ,IAAI,OAAO,KAAK;AAAA,SAAY,CAAC;AAAA,IACrC,WAAW,MAAM,IAAI,UAAU;AAAA,MAC9B,QAAQ,IAAI,KAAK,OAAO,KAAK,EAAE,GAAG;AAAA,IACnC;AAAA,EACD;AAAA,EACA,QAAQ,IAAI;AAAA;AAGb,IAAM,cAAc;AAEpB,KAAK,EACH,KAAK,CAAC,SAAS,QAAQ,KAAK,IAAI,CAAC,EACjC,MAAM,CAAC,QAAQ;AAAA,EACf,OAAO,MAAM,KAAK,WAAW,OAAO,GAAG,CAAC;AAAA,EACxC,IAAI,QAAQ,IAAI,gBAAgB,OAAO,KAAK,OAAO;AAAA,IAClD,QAAQ,MAAM,IAAI,KAAK;AAAA,EACxB;AAAA,EACA,QAAQ,KAAK,CAAC;AAAA,CACd;",
89
+ "debugId": "48BFAAFA2E0D62F964756E2164756E21",
90
+ "names": []
91
+ }