gennady 0.6.0 → 0.7.0

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 (319) hide show
  1. package/README.md +2 -15
  2. package/ai/agents/agent-resolve-conflicts.xml +6 -0
  3. package/ai/agents/agent-review-verifier.xml +6 -0
  4. package/ai/directives/architecture/README.md +21 -0
  5. package/ai/directives/coding/README.md +23 -0
  6. package/ai/directives/coding/result-conventions.xml +55 -0
  7. package/ai/directives/coding/svelte5-runes.xml +248 -0
  8. package/ai/directives/coding/sveltekit-rules.xml +247 -0
  9. package/ai/directives/coding/typescript-rules.xml +589 -0
  10. package/ai/directives/coding/uikit-component-storybook.xml +347 -0
  11. package/ai/directives/coding/uikit-component-svelte.xml +344 -0
  12. package/ai/directives/coding/uikit-spec-drafting.xml +243 -0
  13. package/ai/directives/dbc-audit.directive.xml +131 -0
  14. package/ai/directives/dev-review.directive.xml +148 -0
  15. package/ai/directives/infra/README.md +11 -0
  16. package/ai/directives/infra/eslint-setup.xml +467 -0
  17. package/ai/directives/infra/git-setup.xml +261 -0
  18. package/ai/directives/infra/nodejs-npm-setup.xml +354 -0
  19. package/ai/directives/infra/storybook-setup.xml +153 -0
  20. package/ai/directives/knowledge.xml +206 -0
  21. package/ai/directives/perf-auditor/perf-auditor.directive.xml +75 -0
  22. package/ai/directives/perf-auditor/rules/async-latency.xml +101 -0
  23. package/ai/directives/perf-auditor/rules/data-structures.xml +103 -0
  24. package/ai/directives/perf-auditor/rules/iteration-fusion.xml +96 -0
  25. package/ai/directives/perf-auditor/rules/memory-gc.xml +102 -0
  26. package/ai/directives/sdd/README.md +49 -0
  27. package/ai/directives/sdd/audit.directive.xml +543 -0
  28. package/ai/directives/sdd/discovery.directive.xml +824 -0
  29. package/ai/directives/sdd/fix.directive.xml +249 -0
  30. package/ai/directives/sdd/module-decomposition.directive.xml +666 -0
  31. package/ai/directives/sdd/phase-execution-protocol.xml +339 -0
  32. package/ai/directives/sdd/scaffold.directive.xml +717 -0
  33. package/ai/directives/sdd/setup.directive.xml +213 -0
  34. package/ai/directives/sdd/svelte-ui-discovery.directive.xml +263 -0
  35. package/ai/directives/semantic-change-extractor.directive.xml +99 -0
  36. package/ai/directives/testing/README.md +25 -0
  37. package/ai/directives/testing/common.xml +234 -0
  38. package/ai/directives/testing/node-test.xml +288 -0
  39. package/ai/directives/testing/playwright-cli.xml +199 -0
  40. package/ai/directives/testing/playwright-e2e.xml +292 -0
  41. package/ai/directives/testing/storybook-usage.xml +173 -0
  42. package/ai/directives/testing/svelte-testing.xml +237 -0
  43. package/ai/directives/testing/vitest-rules.xml +326 -0
  44. package/ai/docs/README.md +17 -0
  45. package/ai/docs/ai-icl.md +538 -0
  46. package/ai/docs/ai-priming.md +548 -0
  47. package/ai/docs/ai-prompt-formats.md +406 -0
  48. package/ai/docs/ai-promting.md +572 -0
  49. package/ai/drafts/DRAFT.md +120 -0
  50. package/ai/drafts/agent-devgen-class-from-description.rules.xml +123 -0
  51. package/ai/drafts/agent-typescript-devgen.v1.xml +303 -0
  52. package/ai/drafts/d.md +65 -0
  53. package/ai/drafts/music-posts.md +105 -0
  54. package/ai/fw/v1/architecture/blueprint-factory.xml +77 -0
  55. package/ai/fw/v1/core/mental-model.xml +50 -0
  56. package/ai/fw/v1/discovery/intent-reactor.xml +92 -0
  57. package/ai/fw/v1/production/swarm-protocol.xml +122 -0
  58. package/ai/fw/v1/review/quality-pipeline.xml +102 -0
  59. package/ai/fw/v2/arch-universal.xml +73 -0
  60. package/ai/fw-draft/README.md +79 -0
  61. package/ai/fw-draft/bin/discovery.sh +116 -0
  62. package/ai/fw-draft/gennady.xml +58 -0
  63. package/ai/fw-draft/provider/claude.xml +16 -0
  64. package/ai/fw-draft/provider/cursor.xml +23 -0
  65. package/ai/fw-draft/provider/default.xml +12 -0
  66. package/ai/fw-draft/roles/developer.xml +18 -0
  67. package/ai/fw-draft/router.xml +39 -0
  68. package/ai/fw-draft/routes/development.xml +32 -0
  69. package/ai/fw-draft/routes/universal.xml +58 -0
  70. package/ai/fw-draft/rules/dev/base/file-structure-rules.xml +89 -0
  71. package/ai/fw-draft/rules/dev/typescript/contacts.xml +194 -0
  72. package/dist/ai/agents/agent-resolve-conflicts.xml +6 -0
  73. package/dist/ai/agents/agent-review-verifier.xml +6 -0
  74. package/dist/ai/directives/architecture/README.md +21 -0
  75. package/dist/ai/directives/coding/README.md +23 -0
  76. package/dist/ai/directives/coding/result-conventions.xml +55 -0
  77. package/dist/ai/directives/coding/svelte5-runes.xml +248 -0
  78. package/dist/ai/directives/coding/sveltekit-rules.xml +247 -0
  79. package/dist/ai/directives/coding/typescript-rules.xml +589 -0
  80. package/dist/ai/directives/coding/uikit-component-storybook.xml +347 -0
  81. package/dist/ai/directives/coding/uikit-component-svelte.xml +344 -0
  82. package/dist/ai/directives/coding/uikit-spec-drafting.xml +243 -0
  83. package/dist/ai/directives/dbc-audit.directive.xml +131 -0
  84. package/dist/ai/directives/dev-review.directive.xml +148 -0
  85. package/dist/ai/directives/infra/README.md +11 -0
  86. package/dist/ai/directives/infra/eslint-setup.xml +467 -0
  87. package/dist/ai/directives/infra/git-setup.xml +261 -0
  88. package/dist/ai/directives/infra/nodejs-npm-setup.xml +354 -0
  89. package/dist/ai/directives/infra/storybook-setup.xml +153 -0
  90. package/dist/ai/directives/knowledge.xml +206 -0
  91. package/dist/ai/directives/perf-auditor/perf-auditor.directive.xml +75 -0
  92. package/dist/ai/directives/perf-auditor/rules/async-latency.xml +101 -0
  93. package/dist/ai/directives/perf-auditor/rules/data-structures.xml +103 -0
  94. package/dist/ai/directives/perf-auditor/rules/iteration-fusion.xml +96 -0
  95. package/dist/ai/directives/perf-auditor/rules/memory-gc.xml +102 -0
  96. package/dist/ai/directives/sdd/README.md +49 -0
  97. package/dist/ai/directives/sdd/audit.directive.xml +543 -0
  98. package/dist/ai/directives/sdd/discovery.directive.xml +824 -0
  99. package/dist/ai/directives/sdd/fix.directive.xml +249 -0
  100. package/dist/ai/directives/sdd/module-decomposition.directive.xml +666 -0
  101. package/dist/ai/directives/sdd/phase-execution-protocol.xml +339 -0
  102. package/dist/ai/directives/sdd/scaffold.directive.xml +717 -0
  103. package/dist/ai/directives/sdd/setup.directive.xml +213 -0
  104. package/dist/ai/directives/sdd/svelte-ui-discovery.directive.xml +263 -0
  105. package/dist/ai/directives/semantic-change-extractor.directive.xml +99 -0
  106. package/dist/ai/directives/testing/README.md +25 -0
  107. package/dist/ai/directives/testing/common.xml +234 -0
  108. package/dist/ai/directives/testing/node-test.xml +288 -0
  109. package/dist/ai/directives/testing/playwright-cli.xml +199 -0
  110. package/dist/ai/directives/testing/playwright-e2e.xml +292 -0
  111. package/dist/ai/directives/testing/storybook-usage.xml +173 -0
  112. package/dist/ai/directives/testing/svelte-testing.xml +237 -0
  113. package/dist/ai/directives/testing/vitest-rules.xml +326 -0
  114. package/dist/ai/docs/README.md +17 -0
  115. package/dist/ai/docs/ai-icl.md +538 -0
  116. package/dist/ai/docs/ai-priming.md +548 -0
  117. package/dist/ai/docs/ai-prompt-formats.md +406 -0
  118. package/dist/ai/docs/ai-promting.md +572 -0
  119. package/dist/ai/drafts/DRAFT.md +120 -0
  120. package/dist/ai/drafts/agent-devgen-class-from-description.rules.xml +123 -0
  121. package/dist/ai/drafts/agent-typescript-devgen.v1.xml +303 -0
  122. package/dist/ai/drafts/d.md +65 -0
  123. package/dist/ai/drafts/music-posts.md +105 -0
  124. package/dist/ai/fw/v1/architecture/blueprint-factory.xml +77 -0
  125. package/dist/ai/fw/v1/core/mental-model.xml +50 -0
  126. package/dist/ai/fw/v1/discovery/intent-reactor.xml +92 -0
  127. package/dist/ai/fw/v1/production/swarm-protocol.xml +122 -0
  128. package/dist/ai/fw/v1/review/quality-pipeline.xml +102 -0
  129. package/dist/ai/fw/v2/arch-universal.xml +73 -0
  130. package/dist/ai/fw-draft/README.md +79 -0
  131. package/dist/ai/fw-draft/bin/discovery.sh +116 -0
  132. package/dist/ai/fw-draft/gennady.xml +58 -0
  133. package/dist/ai/fw-draft/provider/claude.xml +16 -0
  134. package/dist/ai/fw-draft/provider/cursor.xml +23 -0
  135. package/dist/ai/fw-draft/provider/default.xml +12 -0
  136. package/dist/ai/fw-draft/roles/developer.xml +18 -0
  137. package/dist/ai/fw-draft/router.xml +39 -0
  138. package/dist/ai/fw-draft/routes/development.xml +32 -0
  139. package/dist/ai/fw-draft/routes/universal.xml +58 -0
  140. package/dist/ai/fw-draft/rules/dev/base/file-structure-rules.xml +89 -0
  141. package/dist/ai/fw-draft/rules/dev/typescript/contacts.xml +194 -0
  142. package/dist/chunks/devtools-B-7ugZhF.js +79 -0
  143. package/dist/chunks/{help.cmd-CWasx25o.js → help.cmd-B_G7EWzF.js} +9 -2
  144. package/dist/chunks/{index-B63fYXL2.js → index-BeL1Zcbg.js} +1 -1
  145. package/dist/chunks/index-CVR66voe.js +26963 -0
  146. package/dist/chunks/index-CXuhZzS3.js +16979 -0
  147. package/dist/chunks/{index-B5bA2T7A.js → index-CaahtXiM.js} +33 -9
  148. package/dist/chunks/{index-iqg0w_pE.js → index-CiEM-8nJ.js} +35 -19
  149. package/dist/chunks/{index-B4m0-PAT.js → index-D1qsi0Uc.js} +57 -33
  150. package/dist/chunks/index-D9ceRUyB.js +443 -0
  151. package/dist/chunks/index-DJpVmyp2.js +176 -0
  152. package/dist/chunks/{index-C0andxna.js → index-DU6jD7SS.js} +1 -1
  153. package/dist/chunks/index-KxSZKmZn.js +540 -0
  154. package/dist/chunks/{index-Dqe1TdW4.js → index-UbHoePfr.js} +12 -12
  155. package/dist/chunks/{index-5xIgwwKx.js → index-g1LXlp77.js} +2 -2
  156. package/dist/chunks/index-zBnnuvLA.js +3788 -0
  157. package/dist/chunks/{run-review-command.logic-a_M3CkeZ.js → run-review-command.logic-DpkRoEi8.js} +2 -2
  158. package/dist/chunks/services-CaLOhuLV.js +2889 -0
  159. package/dist/chunks/shared-Bjy30TeM.js +665 -0
  160. package/dist/cli/cmd/_shared/prompt/io/load-agent-template.io.d.ts +3 -3
  161. package/dist/cli/cmd/_shared/prompt/logic/build-ai-first-knowledge-block.logic.d.ts +3 -3
  162. package/dist/cli/cmd/_shared/prompt/logic/build-ai-verify-placeholders.logic.d.ts +7 -4
  163. package/dist/cli/cmd/_shared/prompt/logic/verify-commands/resolve-verify-commands.logic.d.ts +5 -0
  164. package/dist/cli/cmd/_shared/update-check-worker.d.ts +1 -0
  165. package/dist/cli/cmd/_shared/update-check.d.ts +38 -0
  166. package/dist/cli/cmd/agent-mon/cmd/create-providers.d.ts +15 -0
  167. package/dist/cli/cmd/agent-mon/cmd/index.d.ts +1 -0
  168. package/dist/cli/cmd/agent-mon/cmd/run.d.ts +12 -0
  169. package/dist/cli/cmd/agent-mon/state/create-state-manager.d.ts +32 -0
  170. package/dist/cli/cmd/agent-mon/state/group-by-provider.d.ts +14 -0
  171. package/dist/cli/cmd/agent-mon/state/index.d.ts +5 -0
  172. package/dist/cli/cmd/agent-mon/state/is-waiting.d.ts +9 -0
  173. package/dist/cli/cmd/agent-mon/state/view-model.type.d.ts +74 -0
  174. package/dist/cli/cmd/agent-mon/ui/app.d.ts +16 -0
  175. package/dist/cli/cmd/agent-mon/ui/column-view.d.ts +14 -0
  176. package/dist/cli/cmd/agent-mon/ui/index.d.ts +10 -0
  177. package/dist/cli/cmd/agent-mon/ui/provider-column.d.ts +14 -0
  178. package/dist/cli/cmd/agent-mon/ui/session-card.d.ts +12 -0
  179. package/dist/cli/cmd/agent-mon/ui/status-badge.d.ts +10 -0
  180. package/dist/cli/cmd/alt-opinion/alt-opinion-parser.d.ts +18 -0
  181. package/dist/cli/cmd/alt-opinion/alt-opinion-runner.d.ts +32 -0
  182. package/dist/cli/cmd/alt-opinion/alt-opinion.cmd.d.ts +34 -0
  183. package/dist/cli/cmd/alt-opinion/alt-opinion.types.d.ts +88 -0
  184. package/dist/cli/cmd/alt-opinion/index.d.ts +1 -0
  185. package/dist/cli/cmd/cat/cat-url.fn.d.ts +19 -0
  186. package/dist/cli/cmd/lint/checks/anchor.check.d.ts +11 -0
  187. package/dist/cli/cmd/lint/checks/dbc-contract.check.d.ts +16 -0
  188. package/dist/cli/cmd/lint/checks/disables.check.d.ts +12 -0
  189. package/dist/cli/cmd/lint/checks/file-header.check.d.ts +10 -0
  190. package/dist/cli/cmd/lint/checks/language.check.d.ts +11 -0
  191. package/dist/cli/cmd/lint/index.d.ts +1 -0
  192. package/dist/cli/cmd/lint/lint.cmd.d.ts +18 -0
  193. package/dist/cli/cmd/lint/lint.types.d.ts +72 -0
  194. package/dist/cli/cmd/lint/utils/resolve-references.fn.d.ts +32 -0
  195. package/dist/cli/cmd/remote-console/index.d.ts +2 -0
  196. package/dist/cli/cmd/remote-console/remote-console.cmd.d.ts +55 -0
  197. package/dist/cli/cmd/resolve-conflicts/_core/io/resolve-conflicts-template-load.io.d.ts +2 -2
  198. package/dist/cli/cmd/resolve-conflicts/_core/logic/resolve-conflicts-command-args-parse.logic.d.ts +3 -3
  199. package/dist/cli/cmd/resolve-conflicts/_core/logic/resolve-conflicts-command-run.logic.d.ts +3 -3
  200. package/dist/cli/cmd/resolve-conflicts/_core/logic/resolve-conflicts-context-git-build.logic.d.ts +4 -4
  201. package/dist/cli/cmd/resolve-conflicts/_core/types/resolve-conflicts-artifact.type.d.ts +3 -1
  202. package/dist/cli/cmd/resolve-conflicts/_core/types/resolve-conflicts-command-args.type.d.ts +3 -1
  203. package/dist/cli/cmd/resolve-conflicts/_core/types/resolve-conflicts-command-result.type.d.ts +5 -1
  204. package/dist/cli/cmd/resolve-conflicts/_core/types/resolve-conflicts-context-git.type.d.ts +18 -2
  205. package/dist/cli/cmd/resolve-conflicts/_core/xml/resolve-conflicts-artifact-build.xml.d.ts +6 -6
  206. package/dist/cli/cmd/resolve-conflicts/_core/xml/resolve-conflicts-render.xml.d.ts +4 -4
  207. package/dist/cli/cmd/review/_core/io/load-review-verify-template.io.d.ts +2 -2
  208. package/dist/cli/cmd/review/_core/logic/build-review-context-git.logic.d.ts +3 -3
  209. package/dist/cli/cmd/review/_core/logic/build-review-context-vcs.logic.d.ts +2 -2
  210. package/dist/cli/cmd/review/_core/logic/load-review-context-mr.logic.d.ts +5 -5
  211. package/dist/cli/cmd/review/_core/logic/parse-review-command-args.logic.d.ts +3 -3
  212. package/dist/cli/cmd/review/_core/logic/resolve-review-intent.logic.d.ts +3 -3
  213. package/dist/cli/cmd/review/_core/logic/run-review-command.logic.d.ts +3 -3
  214. package/dist/cli/cmd/review/_core/types/review-artifact.type.d.ts +4 -1
  215. package/dist/cli/cmd/review/_core/types/review-command-args.type.d.ts +7 -1
  216. package/dist/cli/cmd/review/_core/types/review-command-mode.type.d.ts +1 -1
  217. package/dist/cli/cmd/review/_core/types/review-command-options.type.d.ts +3 -1
  218. package/dist/cli/cmd/review/_core/types/review-command-result.type.d.ts +5 -1
  219. package/dist/cli/cmd/review/_core/types/review-context-git.type.d.ts +3 -1
  220. package/dist/cli/cmd/review/_core/types/review-context-mr.type.d.ts +22 -3
  221. package/dist/cli/cmd/review/_core/types/review-context-vcs.type.d.ts +4 -1
  222. package/dist/cli/cmd/review/_core/types/review-intent.type.d.ts +1 -1
  223. package/dist/cli/cmd/review/_core/xml/build-review-artifact.xml.d.ts +10 -10
  224. package/dist/cli/cmd/review/_core/xml/render-review-issues.xml.d.ts +3 -3
  225. package/dist/cli/cmd/review/_core/xml/render-review-verify.xml.d.ts +4 -4
  226. package/dist/cli/cmd/sync/index.d.ts +1 -0
  227. package/dist/cli/cmd/sync/sync-core.d.ts +65 -0
  228. package/dist/cli/cmd/sync/sync-formatter.d.ts +12 -0
  229. package/dist/cli/cmd/sync/sync.cmd.d.ts +33 -0
  230. package/dist/cli/cmd/sync/sync.types.d.ts +50 -0
  231. package/dist/cli/cmd/vcs-reply/vcs-reply.cmd.d.ts +4 -4
  232. package/dist/cli/utils/ai-legacy/ai-legacy-agent.d.ts +12 -11
  233. package/dist/cli/utils/ai-legacy/ai-legacy-core.d.ts +33 -17
  234. package/dist/cli/utils/ai-legacy/ai-legacy-model.d.ts +42 -23
  235. package/dist/cli/utils/cat-gen/cat-gen.d.ts +19 -8
  236. package/dist/cli/utils/commit-gen/commit-gen.d.ts +39 -15
  237. package/dist/cli/utils/prompts/index.d.ts +6 -6
  238. package/dist/cli/utils/review-gen/review-gen.d.ts +33 -9
  239. package/dist/gennady.js +30 -10
  240. package/dist/index.d.ts +1 -0
  241. package/dist/index.js +44 -23
  242. package/dist/services/agent-mon/diff/diff.d.ts +9 -0
  243. package/dist/services/agent-mon/diff/index.d.ts +1 -0
  244. package/dist/services/agent-mon/index.d.ts +10 -0
  245. package/dist/services/agent-mon/model/agent-provider.type.d.ts +20 -0
  246. package/dist/services/agent-mon/model/agent-session.type.d.ts +49 -0
  247. package/dist/services/agent-mon/model/errors.d.ts +20 -0
  248. package/dist/services/agent-mon/model/index.d.ts +7 -0
  249. package/dist/services/agent-mon/model/observe-opts.type.d.ts +7 -0
  250. package/dist/services/agent-mon/model/scan-opts.type.d.ts +7 -0
  251. package/dist/services/agent-mon/model/session-changes.type.d.ts +10 -0
  252. package/dist/services/agent-mon/monitor/agent-monitor.d.ts +44 -0
  253. package/dist/services/agent-mon/monitor/create-monitor.d.ts +6 -0
  254. package/dist/services/agent-mon/monitor/index.d.ts +2 -0
  255. package/dist/services/agent-mon/observe/index.d.ts +1 -0
  256. package/dist/services/agent-mon/observe/observe.d.ts +12 -0
  257. package/dist/services/agent-mon/providers/claude/claude-provider.d.ts +50 -0
  258. package/dist/services/agent-mon/providers/claude/index.d.ts +5 -0
  259. package/dist/services/agent-mon/providers/claude/ps.d.ts +36 -0
  260. package/dist/services/agent-mon/providers/claude/session-json.d.ts +37 -0
  261. package/dist/services/agent-mon/providers/opencode/db.d.ts +41 -0
  262. package/dist/services/agent-mon/providers/opencode/index.d.ts +3 -0
  263. package/dist/services/agent-mon/providers/opencode/model-parser.d.ts +6 -0
  264. package/dist/services/agent-mon/providers/opencode/opencode-provider.d.ts +45 -0
  265. package/dist/services/ai-client/providers/ai-model.type.d.ts +14 -0
  266. package/dist/services/ai-client/providers/open-router/open-router-model.type.d.ts +1 -4
  267. package/dist/services/ai-client/providers/open-router/open-router-provider.d.ts +17 -0
  268. package/dist/services/ai-client/providers/openai-like-provider.d.ts +1 -0
  269. package/dist/services/data-ore/telegram/telegram-data-ore.d.ts +17 -0
  270. package/dist/services/data-ore/telegram/telegram-data-ore.types.d.ts +4 -0
  271. package/dist/services/data-ore/telegram/telegram-demo-music-helper.d.ts +1 -0
  272. package/dist/services/data-ore/telegram/telegram-demo.d.ts +1 -0
  273. package/dist/services/dbc/linter/dbc-ast-adapter.types.d.ts +82 -0
  274. package/dist/services/dbc/linter/dbc-linter.types.d.ts +95 -0
  275. package/dist/services/dbc/linter/implementations/ts/dbc-ts-ast-adapter.d.ts +183 -0
  276. package/dist/services/dbc/linter/implementations/ts/dbc-ts-linter.d.ts +152 -0
  277. package/dist/services/dbc/parser/dbc-parser.types.d.ts +16 -16
  278. package/dist/services/dbc/parser/implementations/jsdoc/dbc-jsdoc-parser.d.ts +14 -4
  279. package/dist/services/logger/logger.d.ts +26 -6
  280. package/dist/services/remote-console/client/remote-console-client-serializer.d.ts +7 -0
  281. package/dist/services/remote-console/client/remote-console-client.d.ts +20 -0
  282. package/dist/services/remote-console/client/remote-console-client.types.d.ts +88 -0
  283. package/dist/services/remote-console/remote-console.d.ts +6 -0
  284. package/dist/services/remote-console/server/remote-console-server.d.ts +10 -0
  285. package/dist/services/remote-console/server/remote-console-server.types.d.ts +44 -0
  286. package/dist/services/remote-console/server/remote-console-stdout-writer.d.ts +26 -0
  287. package/dist/services/vcs-client/abstract/vcs-client-merge-discussions.d.ts +22 -14
  288. package/dist/services/vcs-client/abstract/vcs-client-merge-requests.d.ts +31 -14
  289. package/dist/services/vcs-client/abstract/vcs-client-repository-files.d.ts +16 -0
  290. package/dist/services/vcs-client/abstract/vcs-client.d.ts +9 -5
  291. package/dist/services/vcs-client/entities/vcs-file-content.type.d.ts +24 -0
  292. package/dist/services/vcs-client/entities/vcs-merge-request-changes.type.d.ts +32 -0
  293. package/dist/services/vcs-client/entities/vcs-url.type.d.ts +14 -0
  294. package/dist/services/vcs-client/entities/vcs-user.type.d.ts +3 -0
  295. package/dist/services/vcs-client/github/vcs-github-client.d.ts +31 -0
  296. package/dist/services/vcs-client/github/vcs-github-merge-requests.d.ts +40 -0
  297. package/dist/services/vcs-client/github/vcs-github-repository-files.d.ts +27 -0
  298. package/dist/services/vcs-client/gitlab/vcs-gitlab-client.d.ts +13 -4
  299. package/dist/services/vcs-client/gitlab/vcs-gitlab-merge-discussions.d.ts +16 -5
  300. package/dist/services/vcs-client/gitlab/vcs-gitlab-merge-requests.d.ts +24 -5
  301. package/dist/services/vcs-client/gitlab/vcs-gitlab-repository-files.d.ts +27 -0
  302. package/dist/services/vcs-client/parse-vcs-url.d.ts +3 -0
  303. package/dist/shared/backend/git/git-core.d.ts +24 -22
  304. package/dist/shared/backend/git/git-diff.d.ts +16 -5
  305. package/dist/shared/backend/rc/rc-config.d.ts +27 -15
  306. package/dist/shared/common/exec.d.ts +4 -6
  307. package/dist/shared/common/files.d.ts +1 -3
  308. package/dist/shared/common/language.d.ts +3 -6
  309. package/dist/shared/common/parse-args.d.ts +1 -4
  310. package/dist/shared/common/style.d.ts +3 -3
  311. package/dist/shared/common/think.d.ts +1 -5
  312. package/dist/shared/common/tokens.d.ts +1 -5
  313. package/dist/shared/common/unguard.d.ts +4 -8
  314. package/dist/shared/common/xml.d.ts +16 -12
  315. package/package.json +20 -4
  316. package/dist/.ai/agents/agent-review-verifier.xml +0 -181
  317. package/dist/chunks/index-CNbmXK8M.js +0 -3548
  318. package/dist/chunks/services-Sb7TwLxt.js +0 -122
  319. package/dist/chunks/shared-BgLzFWMH.js +0 -577
@@ -0,0 +1,2889 @@
1
+ import Me from "os";
2
+ import _e from "path";
3
+ import Le from "fs";
4
+ import { createServer as Pe } from "node:http";
5
+ import { readFileSync as L, writeFileSync as De, existsSync as he, readdirSync as ge, statSync as Oe } from "node:fs";
6
+ import Fe from "tree-sitter";
7
+ import * as O from "node:path";
8
+ import { join as M } from "node:path";
9
+ import * as Be from "node:os";
10
+ import { homedir as J } from "node:os";
11
+ import { execSync as Ue } from "node:child_process";
12
+ import { DatabaseSync as We } from "node:sqlite";
13
+ var sr = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
14
+ function ze(s) {
15
+ return s && s.__esModule && Object.prototype.hasOwnProperty.call(s, "default") ? s.default : s;
16
+ }
17
+ const E = { debug: 0, info: 1, warn: 2, error: 3, silent: 4 };
18
+ let j = "warn";
19
+ const ir = (s) => {
20
+ j = s;
21
+ }, _ = {
22
+ debug: (s, e) => {
23
+ E[j] <= E.debug && console.debug(s, ...e !== void 0 ? [e] : []);
24
+ },
25
+ info: (s, e) => {
26
+ E[j] <= E.info && console.info(s, ...e !== void 0 ? [e] : []);
27
+ },
28
+ warn: (s, e) => {
29
+ E[j] <= E.warn && console.warn(s, ...e !== void 0 ? [e] : []);
30
+ },
31
+ error: (s, e) => {
32
+ E[j] <= E.error && console.error(s, ...e !== void 0 ? [e] : []);
33
+ }
34
+ }, pr = (s) => {
35
+ if (!s || typeof s != "string" || s.trim().length === 0)
36
+ return null;
37
+ const e = s.trim();
38
+ let t;
39
+ try {
40
+ t = new URL(e);
41
+ } catch {
42
+ return null;
43
+ }
44
+ const n = t.host, r = t.pathname.replace(/\/$/, ""), a = r.match(/^\/(.+?)\/-\/merge_requests\/(\d+)$/);
45
+ if (a) {
46
+ const p = parseInt(a[2], 10);
47
+ return isNaN(p) ? null : {
48
+ provider: "gitlab",
49
+ host: n,
50
+ repository: a[1],
51
+ iid: p
52
+ };
53
+ }
54
+ const i = r.match(/^\/(.+?)\/pull\/(\d+)$/);
55
+ if (i) {
56
+ const p = parseInt(i[2], 10);
57
+ return isNaN(p) ? null : {
58
+ provider: "github",
59
+ host: n,
60
+ repository: i[1],
61
+ iid: p
62
+ };
63
+ }
64
+ return null;
65
+ };
66
+ class qe {
67
+ }
68
+ class Ge extends qe {
69
+ /** @purpose Bound HTTP request function injected for GitLab API calls */
70
+ _request;
71
+ /**
72
+ * @purpose Wire the HTTP request adapter for GitLab merge request endpoints.
73
+ * @param request Authenticated HTTP request function targeting GitLab API.
74
+ */
75
+ constructor(e) {
76
+ super(), this._request = e;
77
+ }
78
+ /**
79
+ * @param query Target project and optional filters.
80
+ * @returns List of merge requests matching the filters.
81
+ * @sideEffect Network: GET /projects/:project/merge_requests
82
+ * @see {VcsClientMergeRequests#getList} in services/vcs-client/abstract/vcs-merge-requests.ts
83
+ */
84
+ async getList(e) {
85
+ const t = new URLSearchParams(), n = e?.state ?? "opened";
86
+ e?.sourceBranch && t.set("source_branch", e.sourceBranch), n && t.set("state", n), e?.perPage && t.set("per_page", String(e.perPage)), e?.page && t.set("page", String(e.page));
87
+ const r = encodeURIComponent(e.project), a = await this._request(
88
+ `/projects/${r}/merge_requests?${t.toString()}`
89
+ );
90
+ return Array.isArray(a) ? a : [];
91
+ }
92
+ /**
93
+ * @param query Target project and optional filters.
94
+ * @returns First matching merge request or null.
95
+ * @sideEffect Network: Delegates to getList() with per_page=1 limit.
96
+ * @see {VcsClientMergeRequests#getList} in services/vcs-client/abstract/vcs-merge-requests.ts
97
+ */
98
+ async getOne(e) {
99
+ const t = await this.getList({ ...e, perPage: 1 });
100
+ return t.length > 0 ? t[0] : null;
101
+ }
102
+ /**
103
+ * @param query Target project and MR IID.
104
+ * @returns Merge request object or null on 404.
105
+ * @sideEffect Network: GET /projects/:project/merge_requests/:iid
106
+ * @see {VcsClientMergeRequests#getList} in services/vcs-client/abstract/vcs-merge-requests.ts
107
+ */
108
+ async getByIid(e) {
109
+ const t = encodeURIComponent(e.project), n = encodeURIComponent(String(e.iid));
110
+ try {
111
+ return await this._request(`/projects/${t}/merge_requests/${n}`);
112
+ } catch (r) {
113
+ if ((r.message ?? "").includes("404"))
114
+ return null;
115
+ throw r;
116
+ }
117
+ }
118
+ /**
119
+ * @param query Target repository and MR IID, optional pagination.
120
+ * @returns List of changed files with metadata.
121
+ * @sideEffect Network: GET /projects/:project/merge_requests/:iid/changes
122
+ * @see {VcsClientMergeRequests#getChanges} in services/vcs-client/abstract/vcs-client-merge-requests.ts
123
+ */
124
+ async getChanges(e) {
125
+ const t = new URLSearchParams();
126
+ e?.perPage && t.set("per_page", String(e.perPage)), e?.page && t.set("page", String(e.page));
127
+ const n = encodeURIComponent(e.repository), r = encodeURIComponent(String(e.iid)), a = await this._request(
128
+ `/projects/${n}/merge_requests/${r}/changes?${t.toString()}`
129
+ ), i = a?.changes ?? [], p = a.sha ?? a.source_branch ?? "main";
130
+ return i.map((u) => {
131
+ const l = u.new_path ?? u.old_path ?? "", d = u.new_file, y = u.deleted_file, f = u.renamed_file;
132
+ let m = "modified";
133
+ y ? m = "deleted" : d ? m = "added" : f && (m = "renamed");
134
+ const o = {
135
+ path: l,
136
+ status: m,
137
+ ref: p
138
+ };
139
+ return f && u.old_path && (o.previousPath = u.old_path), typeof u.additions == "number" && (o.additions = u.additions), typeof u.deletions == "number" && (o.deletions = u.deletions), o;
140
+ });
141
+ }
142
+ }
143
+ class Je {
144
+ }
145
+ class He extends Je {
146
+ /** @purpose Bound HTTP request function injected for GitLab API calls */
147
+ _request;
148
+ /**
149
+ * @purpose Wire the HTTP request adapter for GitLab merge discussion endpoints.
150
+ * @param request Authenticated HTTP request function targeting GitLab API.
151
+ */
152
+ constructor(e) {
153
+ super(), this._request = e;
154
+ }
155
+ /**
156
+ * @param query Target project, MR, discussion, and note body.
157
+ * @returns Created note object from GitLab API.
158
+ * @sideEffect Network: POST /projects/:project/merge_requests/:iid/discussions/:discussion_id/notes
159
+ * @see {VcsClientMergeDiscussions#addNote} in services/vcs-client/abstract/vcs-merge-discussions.ts
160
+ */
161
+ async addNote(e) {
162
+ const t = encodeURIComponent(e.project), n = encodeURIComponent(String(e.iid)), r = encodeURIComponent(e.discussionId);
163
+ return this._request(
164
+ `/projects/${t}/merge_requests/${n}/discussions/${r}/notes`,
165
+ {
166
+ method: "POST",
167
+ headers: { "Content-Type": "application/json" },
168
+ body: JSON.stringify({ body: e.body })
169
+ }
170
+ );
171
+ }
172
+ /**
173
+ * @param query Target project, MR, and optional pagination.
174
+ * @returns List of discussions for the requested page.
175
+ * @sideEffect Network: GET /projects/:project/merge_requests/:iid/discussions
176
+ * @see {VcsClientMergeDiscussions#getList} in services/vcs-client/abstract/vcs-merge-discussions.ts
177
+ */
178
+ async getList(e) {
179
+ const t = new URLSearchParams();
180
+ e?.perPage && t.set("per_page", String(e.perPage)), e?.page && t.set("page", String(e.page));
181
+ const n = encodeURIComponent(e.project), r = await this._request(
182
+ `/projects/${n}/merge_requests/${encodeURIComponent(String(e.iid))}/discussions?${t.toString()}`
183
+ );
184
+ return Array.isArray(r) ? r : [];
185
+ }
186
+ /**
187
+ * @param query Target project and MR.
188
+ * @returns Complete list of all discussions across all pages.
189
+ * @sideEffect Network: Multiple GET requests for paginated loading.
190
+ * @see {VcsClientMergeDiscussions#getAll} in services/vcs-client/abstract/vcs-merge-discussions.ts
191
+ */
192
+ async getAll(e) {
193
+ let n = 1;
194
+ const r = [];
195
+ for (; ; ) {
196
+ const a = await this.getList({ ...e, perPage: 100, page: n });
197
+ if (!Array.isArray(a) || a.length === 0 || (r.push(...a), a.length < 100)) break;
198
+ n += 1;
199
+ }
200
+ return r;
201
+ }
202
+ }
203
+ class be {
204
+ }
205
+ class Ve extends be {
206
+ /** @purpose GitLab instance base URL */
207
+ _baseUrl;
208
+ /** @purpose GitLab access token */
209
+ _token;
210
+ /**
211
+ * @purpose Wire the adapter with GitLab connection params for raw file fetches.
212
+ * @param baseUrl GitLab instance base URL (e.g. https://gitlab.com/api/v4).
213
+ * @param token GitLab personal access token.
214
+ */
215
+ constructor(e, t) {
216
+ super(), this._baseUrl = e, this._token = t;
217
+ }
218
+ /**
219
+ * @param query Target repository, file path, and ref.
220
+ * @returns File content or null if file not found.
221
+ * @sideEffect Network: GET /projects/:id/repository/files/:path/raw?ref=
222
+ * @see {VcsClientRepositoryFiles#getFileContent} in services/vcs-client/abstract/vcs-client-repository-files.ts
223
+ */
224
+ async getFileContent(e) {
225
+ const t = encodeURIComponent(e.repository), n = encodeURIComponent(e.path), r = encodeURIComponent(e.ref);
226
+ let a;
227
+ try {
228
+ a = await fetch(
229
+ `${this._baseUrl}/projects/${t}/repository/files/${n}/raw?ref=${r}`,
230
+ { headers: { "PRIVATE-TOKEN": this._token } }
231
+ );
232
+ } catch (l) {
233
+ throw new Error(`GitLab request failed: network error for file ${e.path}`, { cause: l });
234
+ }
235
+ if (a.status === 404)
236
+ return null;
237
+ if (!a.ok) {
238
+ const l = await a.text().catch(() => "");
239
+ throw new Error(`GitLab request failed: ${a.status} ${a.statusText} ${l}`);
240
+ }
241
+ const i = a.headers.get("content-type") ?? "", p = await a.text(), u = i.startsWith("text/") || i.includes("json") || i.includes("xml") || i.includes("javascript") || !i;
242
+ return {
243
+ path: e.path,
244
+ content: p,
245
+ encoding: u ? "utf-8" : "base64"
246
+ };
247
+ }
248
+ }
249
+ class xe {
250
+ }
251
+ class ur extends xe {
252
+ /** @see {VcsClient#MergeRequests} in services/vcs-client/abstract/vcs-client.ts */
253
+ MergeRequests;
254
+ /** @see {VcsClient#MergeDiscussions} in services/vcs-client/abstract/vcs-client.ts */
255
+ MergeDiscussions;
256
+ /** @see {VcsClient#RepositoryFiles} in services/vcs-client/abstract/vcs-client.ts */
257
+ RepositoryFiles;
258
+ /**
259
+ * @purpose Create a GitLab API client bound to a base URL with access token.
260
+ * @param options Connection parameters: base URL and access token.
261
+ */
262
+ constructor(e) {
263
+ super();
264
+ const t = async (n, r = {}) => {
265
+ const a = await fetch(`${e.baseUrl}${n}`, {
266
+ ...r,
267
+ headers: {
268
+ "PRIVATE-TOKEN": e.token,
269
+ ...r.headers ?? {}
270
+ }
271
+ });
272
+ if (!a.ok) {
273
+ const i = await a.text().catch(() => "");
274
+ throw new Error(`GitLab request failed: ${a.status} ${a.statusText} ${i}`);
275
+ }
276
+ return a.json();
277
+ };
278
+ this.MergeRequests = new Ge(t), this.MergeDiscussions = new He(t), this.RepositoryFiles = new Ve(e.baseUrl, e.token);
279
+ }
280
+ }
281
+ class Ke extends qe {
282
+ /** @purpose Bound HTTP request function for GitHub API calls */
283
+ _request;
284
+ /**
285
+ * @purpose Wire the HTTP request adapter for GitHub PR endpoints.
286
+ * @param request Authenticated HTTP request function targeting GitHub API.
287
+ */
288
+ constructor(e) {
289
+ super(), this._request = e;
290
+ }
291
+ /**
292
+ * @purpose GitHub getList not implemented — use getChanges for PR files.
293
+ * @returns Empty array — not implemented.
294
+ */
295
+ async getList() {
296
+ throw new Error("GitHub getList not implemented — use getChanges for PR files");
297
+ }
298
+ /**
299
+ * @purpose GitHub getOne not implemented.
300
+ * @returns Null — not implemented.
301
+ */
302
+ async getOne() {
303
+ throw new Error("GitHub getOne not implemented");
304
+ }
305
+ /**
306
+ * @purpose GitHub getByIid not implemented.
307
+ * @returns Null — not implemented.
308
+ */
309
+ async getByIid() {
310
+ throw new Error("GitHub getByIid not implemented");
311
+ }
312
+ /**
313
+ * @param query Target repository and PR number, optional pagination.
314
+ * @returns List of changed files with metadata.
315
+ * @sideEffect Network: GET /repos/:owner/:repo/pulls/:number/files
316
+ * @see {VcsClientMergeRequests#getChanges} in services/vcs-client/abstract/vcs-client-merge-requests.ts
317
+ */
318
+ async getChanges(e) {
319
+ const t = new URLSearchParams();
320
+ e?.perPage && t.set("per_page", String(e.perPage)), e?.page && t.set("page", String(e.page));
321
+ const n = encodeURIComponent(e.repository), r = encodeURIComponent(String(e.iid)), [a, i] = await Promise.all([
322
+ this._request(`/repos/${n}/pulls/${r}`),
323
+ this._request(`/repos/${n}/pulls/${r}/files?${t.toString()}`)
324
+ ]), p = a?.head?.ref ?? "main";
325
+ return (Array.isArray(i) ? i : []).map((l) => {
326
+ const d = l.filename ?? "", y = l.status ?? "modified", f = l.additions, m = l.deletions;
327
+ let o = "modified";
328
+ y === "added" ? o = "added" : y === "removed" ? o = "deleted" : y === "renamed" && (o = "renamed");
329
+ const c = {
330
+ path: d,
331
+ status: o,
332
+ ref: p
333
+ };
334
+ return o === "renamed" && l.previous_filename && (c.previousPath = l.previous_filename), typeof f == "number" && (c.additions = f), typeof m == "number" && (c.deletions = m), c;
335
+ });
336
+ }
337
+ }
338
+ class Xe extends be {
339
+ /** @purpose GitHub API base URL */
340
+ _baseUrl;
341
+ /** @purpose GitHub access token */
342
+ _token;
343
+ /**
344
+ * @purpose Wire the adapter with GitHub connection params for raw content fetches.
345
+ * @param baseUrl GitHub API base URL (e.g. https://api.github.com).
346
+ * @param token GitHub personal access token.
347
+ */
348
+ constructor(e, t) {
349
+ super(), this._baseUrl = e, this._token = t;
350
+ }
351
+ /**
352
+ * @param query Target repository, file path, and ref.
353
+ * @returns File content or null if file not found.
354
+ * @sideEffect Network: GET /repos/:owner/:repo/contents/:path?ref=
355
+ * @see {VcsClientRepositoryFiles#getFileContent} in services/vcs-client/abstract/vcs-client-repository-files.ts
356
+ */
357
+ async getFileContent(e) {
358
+ const t = encodeURIComponent(e.repository), n = encodeURIComponent(e.path), r = encodeURIComponent(e.ref);
359
+ let a;
360
+ try {
361
+ a = await fetch(`${this._baseUrl}/repos/${t}/contents/${n}?ref=${r}`, {
362
+ headers: {
363
+ Authorization: "Bearer " + this._token,
364
+ Accept: "application/vnd.github+json",
365
+ "X-GitHub-Api-Version": "2022-11-28"
366
+ }
367
+ });
368
+ } catch (d) {
369
+ throw new Error(`GitHub request failed: network error for file ${e.path}`, { cause: d });
370
+ }
371
+ if (a.status === 404)
372
+ return null;
373
+ if (!a.ok) {
374
+ const d = await a.text().catch(() => "");
375
+ throw new Error(`GitHub request failed: ${a.status} ${a.statusText} ${d}`);
376
+ }
377
+ const i = await a.json(), p = i.encoding ?? "none", u = i.content ?? "";
378
+ if (p === "base64") {
379
+ const d = Buffer.from(u, "base64").toString("utf-8"), y = !d.includes("\0");
380
+ return {
381
+ path: e.path,
382
+ content: y ? d : u,
383
+ encoding: y ? "utf-8" : "base64"
384
+ };
385
+ }
386
+ const l = i.type;
387
+ return l === "submodule" || l === "symlink" ? {
388
+ path: e.path,
389
+ content: i.submodule_git_url ?? i.target ?? "",
390
+ encoding: "utf-8"
391
+ } : {
392
+ path: e.path,
393
+ content: u,
394
+ encoding: "utf-8"
395
+ };
396
+ }
397
+ }
398
+ class dr extends xe {
399
+ /** @see {VcsClient#MergeRequests} in services/vcs-client/abstract/vcs-client.ts */
400
+ MergeRequests;
401
+ /** @see {VcsClient#MergeDiscussions} in services/vcs-client/abstract/vcs-client.ts */
402
+ MergeDiscussions = void 0;
403
+ /** @see {VcsClient#RepositoryFiles} in services/vcs-client/abstract/vcs-client.ts */
404
+ RepositoryFiles;
405
+ /**
406
+ * @purpose Create a GitHub API client bound to a base URL with access token.
407
+ * @param options Connection parameters: base URL and access token.
408
+ */
409
+ constructor(e) {
410
+ super();
411
+ const t = async (n, r = {}) => {
412
+ const a = await fetch(`${e.baseUrl}${n}`, {
413
+ ...r,
414
+ headers: {
415
+ Authorization: "Bearer " + e.token,
416
+ Accept: "application/vnd.github+json",
417
+ "X-GitHub-Api-Version": "2022-11-28",
418
+ ...r.headers ?? {}
419
+ }
420
+ });
421
+ if (!a.ok) {
422
+ const i = await a.text().catch(() => "");
423
+ throw new Error(`GitHub request failed: ${a.status} ${a.statusText} ${i}`);
424
+ }
425
+ return a.json();
426
+ };
427
+ this.MergeRequests = new Ke(t), this.RepositoryFiles = new Xe(e.baseUrl, e.token);
428
+ }
429
+ }
430
+ function F(s) {
431
+ try {
432
+ if (s === null)
433
+ return { kind: "primitive", text: "null" };
434
+ if (s === void 0)
435
+ return { kind: "primitive", text: "undefined" };
436
+ const e = typeof s;
437
+ if (e === "string" || e === "number" || e === "boolean" || e === "bigint" || e === "symbol")
438
+ return { kind: "primitive", text: String(s) };
439
+ if (e === "function")
440
+ return {
441
+ kind: "tagged",
442
+ tag: "[object Function]",
443
+ text: `[function ${s.name || "anonymous"}]`
444
+ };
445
+ const t = Object.prototype.toString.call(s);
446
+ if (s instanceof Error) {
447
+ const r = s.message ? `${s.name}: ${s.message}` : s.name;
448
+ return { kind: "tagged", tag: t, text: r };
449
+ }
450
+ const n = Ye(s);
451
+ return n ? { kind: "tagged", tag: t, text: `${t} ${n}` } : { kind: "tagged", tag: t, text: t };
452
+ } catch (e) {
453
+ return {
454
+ kind: "tagged",
455
+ tag: "[object Unserializable]",
456
+ text: `[unserializable: ${String(e)}]`
457
+ };
458
+ }
459
+ }
460
+ function Ye(s) {
461
+ const e = /* @__PURE__ */ new WeakSet();
462
+ try {
463
+ return JSON.stringify(s, (n, r) => {
464
+ if (typeof r == "bigint")
465
+ return `${r.toString()}n`;
466
+ if (typeof r == "symbol")
467
+ return r.toString();
468
+ if (typeof r == "function")
469
+ return `[function ${r.name || "anonymous"}]`;
470
+ if (r && typeof r == "object") {
471
+ if (e.has(r))
472
+ return "[circular]";
473
+ e.add(r);
474
+ }
475
+ return r;
476
+ }) ?? null;
477
+ } catch {
478
+ return null;
479
+ }
480
+ }
481
+ const H = ["log", "info", "warn", "error", "debug"], Qe = 5e3, B = /* @__PURE__ */ new WeakMap(), $ = globalThis;
482
+ function Ze(s, e) {
483
+ et(s, e);
484
+ const t = B.get(s);
485
+ if (t)
486
+ return t.duplicateConnectWarned || (t.duplicateConnectWarned = !0, t.originals.warn(
487
+ "[remoteConsoleClient.connect] [connected → connected] Duplicate connect ignored for existing target"
488
+ )), t.runtime;
489
+ const n = tt(s), a = {
490
+ disconnect: async () => {
491
+ const p = B.get(s);
492
+ p && await W(p, !1);
493
+ }
494
+ }, i = {
495
+ url: e.url,
496
+ tabId: e.tabId,
497
+ branch: e.branch,
498
+ consoleTarget: s,
499
+ originals: n,
500
+ queue: [],
501
+ flushInFlight: !1,
502
+ transportFailureNotified: !1,
503
+ duplicateConnectWarned: !1,
504
+ shutdownStarted: !1,
505
+ intervalId: null,
506
+ pagehideListener: () => {
507
+ W(i, !0);
508
+ },
509
+ beforeunloadListener: () => {
510
+ W(i, !0);
511
+ },
512
+ runtime: a
513
+ };
514
+ return rt(i), nt(i), st(i), i.intervalId = setInterval(() => {
515
+ ve(i, !1);
516
+ }, Qe), s.__remote__ = a, B.set(s, i), a;
517
+ }
518
+ const lr = {
519
+ connect: Ze
520
+ };
521
+ function et(s, e) {
522
+ try {
523
+ new URL(e.url);
524
+ } catch (t) {
525
+ throw new Error("[remoteConsoleClient.connect] Invalid config.url: expected absolute URL", {
526
+ cause: t
527
+ });
528
+ }
529
+ for (const t of H)
530
+ if (typeof s[t] != "function")
531
+ throw new Error(`[remoteConsoleClient.connect] Missing console method: ${t}`);
532
+ }
533
+ function tt(s) {
534
+ return {
535
+ log: s.log.bind(s),
536
+ info: s.info.bind(s),
537
+ warn: s.warn.bind(s),
538
+ error: s.error.bind(s),
539
+ debug: s.debug.bind(s)
540
+ };
541
+ }
542
+ function rt(s) {
543
+ for (const e of H) {
544
+ const t = s.originals[e];
545
+ s.consoleTarget[e] = (...n) => {
546
+ t(...n), !s.shutdownStarted && s.queue.push({
547
+ level: e,
548
+ timestamp: Date.now(),
549
+ args: n.map((r) => F(r)),
550
+ tabId: s.tabId,
551
+ branch: s.branch
552
+ });
553
+ };
554
+ }
555
+ }
556
+ function nt(s) {
557
+ s.queue.push({
558
+ level: "info",
559
+ timestamp: Date.now(),
560
+ args: [
561
+ F("[remote-console] connected"),
562
+ F(`tabId=${s.tabId ?? "unknown"}`),
563
+ F(`branch=${s.branch ?? "unknown"}`)
564
+ ],
565
+ tabId: s.tabId,
566
+ branch: s.branch
567
+ });
568
+ }
569
+ function at(s) {
570
+ for (const e of H)
571
+ s.consoleTarget[e] = s.originals[e];
572
+ delete s.consoleTarget.__remote__;
573
+ }
574
+ function st(s) {
575
+ typeof $.addEventListener == "function" && ($.addEventListener("pagehide", s.pagehideListener), $.addEventListener("beforeunload", s.beforeunloadListener));
576
+ }
577
+ function it(s) {
578
+ typeof $.removeEventListener == "function" && ($.removeEventListener("pagehide", s.pagehideListener), $.removeEventListener("beforeunload", s.beforeunloadListener));
579
+ }
580
+ async function W(s, e) {
581
+ if (!s.shutdownStarted) {
582
+ s.shutdownStarted = !0, s.intervalId && (clearInterval(s.intervalId), s.intervalId = null), it(s);
583
+ try {
584
+ await ve(s, e);
585
+ try {
586
+ await we(s, { type: "disconnect", tabId: s.tabId }, e);
587
+ } catch {
588
+ }
589
+ } finally {
590
+ at(s), B.delete(s.consoleTarget);
591
+ }
592
+ }
593
+ }
594
+ async function ve(s, e) {
595
+ if (s.flushInFlight || s.queue.length === 0)
596
+ return;
597
+ s.flushInFlight = !0;
598
+ const t = s.queue.splice(0, s.queue.length);
599
+ try {
600
+ await we(s, { type: "logs", tabId: s.tabId, items: t }, e);
601
+ } catch (n) {
602
+ s.transportFailureNotified || (s.transportFailureNotified = !0, s.originals.error(
603
+ "[remoteConsoleClient.connect] [streaming → degraded] Remote sink became unavailable; local console remains active",
604
+ { cause: n }
605
+ ));
606
+ } finally {
607
+ s.flushInFlight = !1;
608
+ }
609
+ }
610
+ async function we(s, e, t) {
611
+ if (t) {
612
+ await pt(s.url, e);
613
+ return;
614
+ }
615
+ const n = await fetch(s.url, {
616
+ method: "POST",
617
+ headers: {
618
+ "content-type": "application/json"
619
+ },
620
+ body: JSON.stringify(e)
621
+ });
622
+ if (!n.ok)
623
+ throw new Error(`[remoteConsoleClient.connect] Unexpected response status: ${n.status}`);
624
+ }
625
+ async function pt(s, e) {
626
+ const t = JSON.stringify(e), n = new Blob([t], { type: "application/json" }), r = $.navigator?.sendBeacon;
627
+ if (!(typeof r == "function" && r.call($.navigator, s, n)))
628
+ try {
629
+ await fetch(s, {
630
+ method: "POST",
631
+ headers: {
632
+ "content-type": "application/json"
633
+ },
634
+ body: t,
635
+ keepalive: !0
636
+ });
637
+ } catch {
638
+ }
639
+ }
640
+ class ut {
641
+ /** @purpose Stores low-level line sink used to emit already-rendered stdout entries. */
642
+ _writeLine;
643
+ /**
644
+ * @purpose Configures writer with injected sink or defaults to process.stdout line output.
645
+ * @param [writeLine] Optional custom line writer function.
646
+ */
647
+ constructor(e) {
648
+ this._writeLine = e ?? ((t) => process.stdout.write(`${t}
649
+ `));
650
+ }
651
+ /**
652
+ * @purpose Prints ordered log entries as one normalized line per entry.
653
+ * @param items Parsed log entry list from command envelope payload.
654
+ * @sideEffect IO: writes rendered lines into stdout stream (or injected writer).
655
+ */
656
+ write(e) {
657
+ for (const t of e) {
658
+ const n = this.render(t);
659
+ this._writeLine(n);
660
+ }
661
+ }
662
+ /**
663
+ * @purpose Creates stable text format independent from platform util.inspect behavior.
664
+ * @param item Single remote log entry with serialized args.
665
+ * @returns Flat line in format `[console.<level>] <arg1> <arg2> ...`.
666
+ */
667
+ render(e) {
668
+ const t = e.args.map((n) => n.text).join(" ").trim();
669
+ return t ? `[console.${e.level}] ${t}` : `[console.${e.level}]`;
670
+ }
671
+ }
672
+ const Ie = "/";
673
+ async function mr(s) {
674
+ dt(s);
675
+ const e = s.host ?? "127.0.0.1", t = new ut(s.stdoutWrite), n = new ot(
676
+ s.exitCode ?? 0,
677
+ s.exit
678
+ ), r = Pe((i, p) => {
679
+ lt(i, p, t, n, r).catch(
680
+ () => {
681
+ p.writableEnded || C(p, 500, { ok: !1, error: "runtime_failure" });
682
+ }
683
+ );
684
+ });
685
+ await new Promise((i, p) => {
686
+ r.once("error", p), r.listen(s.port, e, () => {
687
+ r.off("error", p), i();
688
+ });
689
+ });
690
+ const a = r.address();
691
+ if (!a || typeof a == "string")
692
+ throw new Error("[startRemoteConsoleServer] Failed to resolve runtime endpoint address");
693
+ return {
694
+ url: `http://${e}:${a.port}${Ie}`,
695
+ close: async () => {
696
+ await Se(r);
697
+ }
698
+ };
699
+ }
700
+ function dt(s) {
701
+ if (!Number.isInteger(s.port) || s.port < 0 || s.port > 65535)
702
+ throw new Error("[startRemoteConsoleServer] Invalid port: expected integer in range 0..65535");
703
+ }
704
+ async function lt(s, e, t, n, r) {
705
+ try {
706
+ if (s.url !== Ie) {
707
+ C(e, 404, { ok: !1, error: "not_found" });
708
+ return;
709
+ }
710
+ if (s.method !== "POST") {
711
+ C(e, 405, { ok: !1, error: "method_not_allowed" });
712
+ return;
713
+ }
714
+ const a = await yt(s);
715
+ let i;
716
+ try {
717
+ i = JSON.parse(a);
718
+ } catch {
719
+ C(e, 400, { ok: !1, error: "invalid_json" });
720
+ return;
721
+ }
722
+ if (!mt(i)) {
723
+ C(e, 400, { ok: !1, error: "invalid_envelope" });
724
+ return;
725
+ }
726
+ if (i.type === "logs") {
727
+ if (!Array.isArray(i.items) || i.items.length === 0) {
728
+ C(e, 400, { ok: !1, error: "invalid_logs_payload" });
729
+ return;
730
+ }
731
+ t.write(i.items), C(e, 202, { ok: !0 });
732
+ return;
733
+ }
734
+ if (i.type === "disconnect") {
735
+ C(e, 202, { ok: !0 }), await n.begin(r);
736
+ return;
737
+ }
738
+ C(e, 400, { ok: !1, error: "unsupported_command" });
739
+ } catch {
740
+ e.writableEnded || C(e, 500, { ok: !1, error: "runtime_failure" });
741
+ }
742
+ }
743
+ function mt(s) {
744
+ if (!s || typeof s != "object")
745
+ return !1;
746
+ const e = s.type;
747
+ return e === "disconnect" ? !0 : e === "logs" ? Array.isArray(s.items) : !1;
748
+ }
749
+ async function yt(s) {
750
+ let e = "";
751
+ for await (const t of s)
752
+ e += t.toString();
753
+ return e;
754
+ }
755
+ function C(s, e, t) {
756
+ s.statusCode = e, s.setHeader("content-type", "application/json"), s.end(JSON.stringify(t));
757
+ }
758
+ async function Se(s) {
759
+ await new Promise((e, t) => {
760
+ s.close((n) => {
761
+ if (n) {
762
+ t(n);
763
+ return;
764
+ }
765
+ e();
766
+ });
767
+ });
768
+ }
769
+ class ot {
770
+ /** @purpose Stores configured exit code used after controlled socket shutdown completes. */
771
+ _exitCode;
772
+ /** @purpose Stores process-exit strategy (real exit in prod, spy callback in tests). */
773
+ _exit;
774
+ /** @purpose Prevents duplicate shutdown orchestration across repeated disconnect signals. */
775
+ _started = !1;
776
+ /** @purpose Initializes controller with deterministic exit behavior for runtime or test harnesses. */
777
+ constructor(e, t) {
778
+ this._exitCode = e, this._exit = t ?? ((n) => process.exit(n));
779
+ }
780
+ /**
781
+ * @purpose Starts shutdown exactly once: close server socket first, then trigger configured exit strategy.
782
+ * @param server Active server runtime instance.
783
+ * @sideEffect Network: stops accepting incoming HTTP connections.
784
+ * @sideEffect Process: triggers exit callback with configured exit code.
785
+ */
786
+ async begin(e) {
787
+ if (!this._started) {
788
+ this._started = !0;
789
+ try {
790
+ await Se(e);
791
+ } finally {
792
+ this._exit(this._exitCode);
793
+ }
794
+ }
795
+ }
796
+ }
797
+ const ae = "ERR_DBC_PURPOSE_CONFLICT", ft = "ERR_DBC_ORDER", ct = "ERR_DBC_PARAM_NAME_MISSING", _t = "ERR_DBC_SEE_FORMAT_INVALID", ht = [
798
+ "implements",
799
+ "invariant",
800
+ "pre",
801
+ "param",
802
+ "throws",
803
+ "returns",
804
+ "post",
805
+ "sideEffect"
806
+ ], gt = new Map(
807
+ ht.map((s, e) => [s, e])
808
+ );
809
+ class yr {
810
+ /**
811
+ * @param inputContract Raw contract text to parse.
812
+ * @returns Parsed DBC schema with entries and format metadata.
813
+ * @see {DbcParser#parse} in ../../dbc-parser.types.ts
814
+ */
815
+ parse(e) {
816
+ const t = [];
817
+ let r = e.trim();
818
+ r.startsWith("/**") && (r = r.slice(3)), r.endsWith("*/") && (r = r.slice(0, -2)), r = r.trim();
819
+ const a = r.includes(`
820
+ `) ? "multi-line" : "single-line", i = e.split(/\r?\n/u);
821
+ let p, u = !1;
822
+ const l = [];
823
+ for (let y = 0; y < i.length; y += 1) {
824
+ const f = y + 1, m = this.normalizeLine(i[y] ?? "");
825
+ if (m.length !== 0) {
826
+ if (m.startsWith("@")) {
827
+ !u && l.length > 0 && (t.push({
828
+ type: "description",
829
+ value: l.join(`
830
+ `),
831
+ issues: [],
832
+ line: 1
833
+ }), l.length = 0), u = !0;
834
+ const o = this.parseTagLine(m, f);
835
+ if (!o)
836
+ continue;
837
+ t.push(o), p = o;
838
+ continue;
839
+ }
840
+ if (!u) {
841
+ l.push(m);
842
+ continue;
843
+ }
844
+ p && (p.value = p.value.length > 0 ? `${p.value}
845
+ ${m}` : m);
846
+ }
847
+ }
848
+ !u && l.length > 0 && t.push({
849
+ type: "description",
850
+ value: l.join(`
851
+ `),
852
+ issues: [],
853
+ line: 1
854
+ }), this.validatePurposeConflict(t), this.validateContractOrder(t), this.validateParamSpecifier(t), this.validateSeeSpecifier(t);
855
+ let d;
856
+ if (a === "single-line" && t.length > 0) {
857
+ const y = t[0];
858
+ if (y && y.value.includes(" | @")) {
859
+ const f = y.value.split(" | @");
860
+ y.value = (f[0] ?? "").trim();
861
+ const m = [];
862
+ for (let o = 1; o < f.length; o += 1) {
863
+ const c = `@${f[o] ?? ""}`, b = this.parseTagLine(c, y.line);
864
+ b && m.push(b);
865
+ }
866
+ m.length > 0 && (d = m);
867
+ }
868
+ }
869
+ return {
870
+ entries: t.map(({ line: y, ...f }, m) => m === 0 && d ? {
871
+ ...f,
872
+ inline: d.map(({ line: o, ...c }) => c)
873
+ } : f),
874
+ format: a
875
+ };
876
+ }
877
+ /**
878
+ * @purpose Normalizes a raw source line by stripping JSDoc framing tokens and edge whitespace.
879
+ * @param sourceLine Raw line from the input contract.
880
+ * @returns Line prepared for tag and multiline-value parsing.
881
+ */
882
+ normalizeLine(e) {
883
+ let t = e.trimStart();
884
+ return t.startsWith("*/") ? "" : (t.startsWith("/**") && (t = t.slice(3)), t = t.trimStart(), t.startsWith("*") && (t = t.slice(1).trimStart()), t.endsWith("*/") && (t = t.slice(0, -2).trimEnd()), t.trim());
885
+ }
886
+ /**
887
+ * @purpose Parses a normalized tag line into an entry object with a source line reference.
888
+ * @param tagLine Normalized line starting with `@`.
889
+ * @param line One-based source line number.
890
+ * @returns Parsed entry or undefined when the tag name is missing.
891
+ */
892
+ parseTagLine(e, t) {
893
+ const n = /^@(\S+)(?:\s+([\s\S]*))?$/u.exec(e);
894
+ if (!n)
895
+ return;
896
+ const r = n[1]?.trim();
897
+ if (!r)
898
+ return;
899
+ const a = (n[2] ?? "").trim();
900
+ return r === "param" ? this.parseParamTag(r, a, t) : r === "see" ? this.parseSeeTag(r, a, t) : r === "implements" ? this.parseImplementsTag(r, a, t) : r === "returns" || r === "throws" ? this.parseTagWithOptionalDataType(r, a, t) : r === "description" ? {
901
+ type: "description",
902
+ value: a,
903
+ issues: [],
904
+ line: t
905
+ } : {
906
+ type: r,
907
+ value: a,
908
+ issues: [],
909
+ line: t
910
+ };
911
+ }
912
+ /**
913
+ * @purpose Parses tags where `{dataType}` is optional and the remainder is a plain value.
914
+ * @param type Tag type.
915
+ * @param tail Content after the tag name.
916
+ * @param line One-based source line number.
917
+ * @returns Parsed entry.
918
+ */
919
+ parseTagWithOptionalDataType(e, t, n) {
920
+ const r = /^\{([^}]+)\}\s*(.*)$/u.exec(t);
921
+ return r ? {
922
+ type: e,
923
+ dataType: r[1]?.trim(),
924
+ value: (r[2] ?? "").trim(),
925
+ issues: [],
926
+ line: n
927
+ } : {
928
+ type: e,
929
+ value: t,
930
+ issues: [],
931
+ line: n
932
+ };
933
+ }
934
+ /**
935
+ * @purpose Parses `@param` into `dataType`, optional `specifier`, `optional`, and value fields.
936
+ * @param type Tag type.
937
+ * @param tail Content after `@param`.
938
+ * @param line One-based source line number.
939
+ * @returns Parsed entry.
940
+ */
941
+ parseParamTag(e, t, n) {
942
+ const r = {
943
+ type: e,
944
+ value: "",
945
+ issues: [],
946
+ line: n
947
+ };
948
+ let a = t;
949
+ const i = /^\{([^}]+)\}\s*(.*)$/u.exec(a);
950
+ if (i && (r.dataType = i[1]?.trim(), a = (i[2] ?? "").trim()), a.length === 0)
951
+ return r;
952
+ const p = /^(\[[^\]]+\]|\S+)(?:\s+([\s\S]*))?$/u.exec(a);
953
+ if (!p)
954
+ return r.value = a, r;
955
+ const u = p[1] ?? "";
956
+ return u.startsWith("[") && u.endsWith("]") ? (r.optional = !0, r.specifier = u.slice(1, -1).trim()) : r.specifier = u.trim(), r.value = (p[2] ?? "").trim(), r;
957
+ }
958
+ /**
959
+ * @purpose Parses `@see` into required `{specifier}` and optional trailing value.
960
+ * @param type Tag type.
961
+ * @param tail Content after `@see`.
962
+ * @param line Source line number.
963
+ * @returns Parsed entry.
964
+ */
965
+ parseSeeTag(e, t, n) {
966
+ const r = {
967
+ type: e,
968
+ value: "",
969
+ issues: [],
970
+ line: n
971
+ }, a = /^\{([^}]+)\}\s*(.*)$/u.exec(t);
972
+ return a ? (r.specifier = a[1]?.trim(), r.value = (a[2] ?? "").trim(), r) : (r.value = t, r);
973
+ }
974
+ /**
975
+ * @purpose Parses `@implements` into required `{ContractName}` and optional trailing value.
976
+ * @param type Tag type.
977
+ * @param tail Content after `@implements`.
978
+ * @param line One-based source line number.
979
+ * @returns Parsed entry.
980
+ */
981
+ parseImplementsTag(e, t, n) {
982
+ const r = {
983
+ type: e,
984
+ value: "",
985
+ issues: [],
986
+ line: n
987
+ }, a = /^\{([^}]+)\}\s*(.*)$/u.exec(t);
988
+ return a ? (r.specifier = a[1]?.trim(), r.value = (a[2] ?? "").trim(), r) : (r.value = t, r);
989
+ }
990
+ /**
991
+ * @purpose Emits a conflict issue when `purpose` and `see` are both present in the parsed entries.
992
+ * @param entries Parsed entries with source lines.
993
+ */
994
+ validatePurposeConflict(e) {
995
+ let t = !1, n = !1;
996
+ for (const r of e) {
997
+ if (r.type === "purpose") {
998
+ n && this.attachIssue(r, ae), t = !0;
999
+ continue;
1000
+ }
1001
+ r.type === "see" && (t && this.attachIssue(r, ae), n = !0);
1002
+ }
1003
+ }
1004
+ /**
1005
+ * @purpose Verifies that contract tags follow the strict sequence required by the DBC standard.
1006
+ * @param entries Parsed entries with source lines.
1007
+ */
1008
+ validateContractOrder(e) {
1009
+ let t = -1;
1010
+ for (const n of e) {
1011
+ const r = gt.get(n.type);
1012
+ r !== void 0 && (r < t && this.attachIssue(n, ft), t = Math.max(t, r));
1013
+ }
1014
+ }
1015
+ /**
1016
+ * @purpose Emits missing-parameter-name issues for `@param` entries without a non-empty specifier.
1017
+ * @param entries Parsed entries with source lines.
1018
+ */
1019
+ validateParamSpecifier(e) {
1020
+ for (const t of e)
1021
+ t.type === "param" && (!t.specifier || t.specifier.trim().length === 0) && this.attachIssue(t, ct);
1022
+ }
1023
+ /**
1024
+ * @purpose Emits invalid-see-format issues for `@see` entries.
1025
+ * @param entries Parsed entries to validate.
1026
+ */
1027
+ validateSeeSpecifier(e) {
1028
+ for (const t of e)
1029
+ t.type === "see" && (!t.specifier || t.specifier.trim().length === 0) && this.attachIssue(t, _t);
1030
+ }
1031
+ /**
1032
+ * @purpose Adds an issue to a specific entry and preserves the entry start line in diagnostics.
1033
+ * @param entry Parsed entry with source line.
1034
+ * @param code Stable parser issue code.
1035
+ */
1036
+ attachIssue(e, t) {
1037
+ e.issues.push({
1038
+ code: t,
1039
+ line: e.line
1040
+ });
1041
+ }
1042
+ }
1043
+ const se = "ERR_DBC_LINT_MISSING_CONTRACT", P = "ERR_DBC_LINT_PARSE_FAILED", qt = "ERR_DBC_LINT_PARAM_MISSING", ie = "ERR_DBC_LINT_PARAM_EXTRA", bt = "ERR_DBC_LINT_PARAM_ORDER", pe = "ERR_DBC_LINT_RETURNS_MISSING", ue = "ERR_DBC_LINT_RETURNS_UNEXPECTED", xt = "ERR_DBC_LINT_TYPE_REDUNDANT", de = "ERR_DBC_LINT_PARAM_OPTIONAL_MISMATCH", V = /* @__PURE__ */ new Set([
1044
+ "function",
1045
+ "method",
1046
+ "interface-method",
1047
+ "constructor",
1048
+ "export-default"
1049
+ ]), K = /* @__PURE__ */ new Set([
1050
+ "function",
1051
+ "method",
1052
+ "interface-method",
1053
+ "export-default"
1054
+ ]), Re = /* @__PURE__ */ new Set(["getter"]), X = /* @__PURE__ */ new Set([
1055
+ "constructor",
1056
+ "setter",
1057
+ "field",
1058
+ "interface-property",
1059
+ "const",
1060
+ "type",
1061
+ "enum",
1062
+ "enum-member",
1063
+ "class",
1064
+ "interface"
1065
+ ]), vt = /* @__PURE__ */ new Set([
1066
+ ...V,
1067
+ ...K,
1068
+ ...Re,
1069
+ ...X,
1070
+ "export-default"
1071
+ ]);
1072
+ function A(s) {
1073
+ let e = s;
1074
+ return e.startsWith("...") && (e = e.slice(3)), e.startsWith("[") && e.endsWith("]") && (e = e.slice(1, -1)), e;
1075
+ }
1076
+ function S(s, e) {
1077
+ return {
1078
+ file: "",
1079
+ line: 1,
1080
+ col: 1,
1081
+ severity: "error",
1082
+ code: s,
1083
+ message: e
1084
+ };
1085
+ }
1086
+ function wt(s, e, t) {
1087
+ if (!vt.has(t))
1088
+ return [];
1089
+ const n = [], r = s.filter((d) => d.type === "param"), a = s.find((d) => d.type === "returns"), i = V.has(t), p = K.has(t), u = Re.has(t), l = X.has(t);
1090
+ if (i) {
1091
+ const d = e.params.map((m) => m.name), y = r.map((m) => A(m.specifier ?? ""));
1092
+ for (const m of d)
1093
+ y.includes(m) || n.push(
1094
+ S(qt, `Parameter '${m}' is missing from contract`)
1095
+ );
1096
+ for (let m = 0; m < r.length; m += 1) {
1097
+ const o = y[m];
1098
+ d.includes(o) || n.push(
1099
+ S(
1100
+ ie,
1101
+ `Extra @param '${r[m].specifier ?? ""}' not in signature`
1102
+ )
1103
+ );
1104
+ }
1105
+ const f = new Map(e.params.map((m) => [m.name, m]));
1106
+ for (const m of r) {
1107
+ const o = A(m.specifier ?? ""), c = f.get(o);
1108
+ c && !c.isRest && (c.optional && !m.optional ? n.push(
1109
+ S(
1110
+ de,
1111
+ `Parameter '${o}' is optional in signature but missing brackets in contract`
1112
+ )
1113
+ ) : !c.optional && m.optional && n.push(
1114
+ S(
1115
+ de,
1116
+ `Parameter '${o}' is not optional in signature but has brackets in contract`
1117
+ )
1118
+ ));
1119
+ }
1120
+ if (d.length === y.length && d.every((m) => y.includes(m))) {
1121
+ let m = 0, o = !1;
1122
+ for (const c of y) {
1123
+ const b = d.indexOf(c);
1124
+ if (b >= 0) {
1125
+ if (b < m) {
1126
+ o = !0;
1127
+ break;
1128
+ }
1129
+ m = b;
1130
+ }
1131
+ }
1132
+ o && n.push(S(bt, "@param order does not match signature"));
1133
+ }
1134
+ } else
1135
+ for (let d = 0; d < r.length; d += 1)
1136
+ n.push(S(ie, `@param not applicable for kind '${t}'`));
1137
+ u ? a || n.push(S(pe, `Missing @returns for kind '${t}'`)) : p ? (e.returnType !== "void" && !a && n.push(
1138
+ S(
1139
+ pe,
1140
+ `Missing @returns for non-void return type '${e.returnType}'`
1141
+ )
1142
+ ), e.returnType === "void" && a && n.push(
1143
+ S(ue, "Unexpected @returns for void return type")
1144
+ )) : l && a && n.push(
1145
+ S(ue, `@returns not applicable for kind '${t}'`)
1146
+ );
1147
+ for (const d of s)
1148
+ (d.type === "param" || d.type === "returns") && d.dataType && n.push(
1149
+ S(xt, `Redundant {${d.dataType}} in @${d.type}`)
1150
+ );
1151
+ return n;
1152
+ }
1153
+ function N(s) {
1154
+ return s.map((e) => `${e.file}:${e.line}:${e.col}: ${e.severity}: ${e.code}: ${e.message}`).join(`
1155
+ `);
1156
+ }
1157
+ class or {
1158
+ /** @purpose DBC parser for parsing contract text */
1159
+ _parser;
1160
+ /** @purpose AST adapter for parsing TypeScript source files */
1161
+ _astAdapter;
1162
+ /**
1163
+ * @purpose Construct a linter with injected parser and AST adapter.
1164
+ * @param parser DbcParser instance for contract parsing.
1165
+ * @param astAdapter DbcAstAdapter instance for source file parsing.
1166
+ */
1167
+ constructor(e, t) {
1168
+ this._parser = e, this._astAdapter = t;
1169
+ }
1170
+ /**
1171
+ * @param filePath Path to the source file to check.
1172
+ * @param [options] Optional lint configuration.
1173
+ * @returns Full lint report with errors and a formatting function.
1174
+ * @see {DbcLinter#lint} in ../../dbc-linter.types.ts
1175
+ */
1176
+ async lint(e, t) {
1177
+ _.debug(`[DbcTsLinter#lint] [idle → parsing] ${e}`);
1178
+ try {
1179
+ const n = await this._astAdapter.parseFile(
1180
+ e,
1181
+ t?.content
1182
+ );
1183
+ if (!n.ok) {
1184
+ const a = {
1185
+ file: e,
1186
+ line: 1,
1187
+ col: 1,
1188
+ severity: "error",
1189
+ code: P,
1190
+ message: n.error
1191
+ };
1192
+ return _.warn(`[DbcTsLinter#lint] [parsing → parse-failed] ${e}`), { errors: [a], format: () => N([a]) };
1193
+ }
1194
+ const r = this._lintEntities(n.exported, e);
1195
+ return _.info(`[DbcTsLinter#lint] [parsing → linted] ${e} (${r.length} errors)`), {
1196
+ errors: r,
1197
+ format: () => N(r)
1198
+ };
1199
+ } catch (n) {
1200
+ const r = new Error(`[DbcTsLinter#lint] Lint failed for ${e}`, { cause: n });
1201
+ _.error(`[DbcTsLinter#lint] [parsing → failed] ${e}`, {
1202
+ error: r
1203
+ });
1204
+ const a = {
1205
+ file: e,
1206
+ line: 1,
1207
+ col: 1,
1208
+ severity: "error",
1209
+ code: P,
1210
+ message: `Unexpected error: ${String(n)}`
1211
+ };
1212
+ return { errors: [a], format: () => N([a]) };
1213
+ }
1214
+ }
1215
+ /**
1216
+ * @param filePath Path to the source file to check.
1217
+ * @param [options] Optional lint configuration.
1218
+ * @returns Combined report with errors and count of auto-fixed issues.
1219
+ * @see {DbcLinter#lintAndFix} in ../../dbc-linter.types.ts
1220
+ */
1221
+ async lintAndFix(e, t) {
1222
+ _.debug(`[DbcTsLinter#lintAndFix] [idle → linting] ${e}`);
1223
+ try {
1224
+ const n = await this.lint(e, t), r = n.errors.length, a = await this._astAdapter.parseFile(e, t?.content);
1225
+ if (!a.ok)
1226
+ return {
1227
+ errors: n.errors,
1228
+ autoFixed: 0,
1229
+ format: () => N(n.errors)
1230
+ };
1231
+ let i = t?.content ?? L(e, "utf8");
1232
+ const p = this._collectContracts(a.exported);
1233
+ let u = !1;
1234
+ for (const f of p) {
1235
+ const m = f.text;
1236
+ let o = m;
1237
+ if (o = this._expandToMultiline(o, f.kind), o = this._removeRedundantTypes(o), o = this._normalizeParamBrackets(o, f.signature), o = this._removeExtraParams(o, f.signature), o = this._removeUnexpectedReturns(o, f.kind, f.signature), o = this._reorderParams(o, f.signature), o = this._reorderTags(o), o = this._normalizeMultiLine(o), o !== m) {
1238
+ let c = o;
1239
+ if (o.includes(`
1240
+ `) && !m.includes(`
1241
+ `)) {
1242
+ const b = i.indexOf(m), I = b > 0 ? i.lastIndexOf(`
1243
+ `, b - 1) : -1, R = i.slice(I + 1, b), w = o.split(`
1244
+ `);
1245
+ for (let k = 1; k < w.length; k += 1)
1246
+ w[k] = R + " " + w[k].trimStart();
1247
+ w[w.length - 1] = R + "*/", c = w.join(`
1248
+ `);
1249
+ }
1250
+ i = i.replace(m, c), u = !0;
1251
+ }
1252
+ }
1253
+ u ? (De(e, i, "utf8"), _.info(`[DbcTsLinter#lintAndFix] [fixing → written] ${e}`)) : _.info(`[DbcTsLinter#lintAndFix] [linting → clean] ${e} (nothing to fix)`);
1254
+ const l = u ? await this.lint(e, { strategy: "full" }) : n, d = l.errors.length, y = r - d;
1255
+ return _.info(`[DbcTsLinter#lintAndFix] [written → done] ${e} (autoFixed=${y})`), {
1256
+ errors: l.errors,
1257
+ autoFixed: y >= 0 ? y : 0,
1258
+ format: () => N(l.errors)
1259
+ };
1260
+ } catch (n) {
1261
+ const r = new Error(`[DbcTsLinter#lintAndFix] Fix failed for ${e}`, { cause: n });
1262
+ return _.error(`[DbcTsLinter#lintAndFix] [linting → failed] ${e}`, { error: r }), {
1263
+ errors: [
1264
+ {
1265
+ file: e,
1266
+ line: 1,
1267
+ col: 1,
1268
+ severity: "error",
1269
+ code: P,
1270
+ message: `Autofix error: ${String(n)}`
1271
+ }
1272
+ ],
1273
+ autoFixed: 0,
1274
+ format: () => N([
1275
+ {
1276
+ file: e,
1277
+ line: 1,
1278
+ col: 1,
1279
+ severity: "error",
1280
+ code: P,
1281
+ message: `Autofix error: ${String(n)}`
1282
+ }
1283
+ ])
1284
+ };
1285
+ }
1286
+ }
1287
+ // #region START_LINT_HELPERS
1288
+ /**
1289
+ * @purpose Walk all exported entities and their members, collecting lint errors.
1290
+ * @param entities Exported entities from AST parse result.
1291
+ * @param filePath Source file path for error attribution.
1292
+ * @returns Array of lint errors collected from entities and members.
1293
+ */
1294
+ _lintEntities(e, t) {
1295
+ const n = [];
1296
+ for (const r of e) {
1297
+ if (!r.contract)
1298
+ n.push(
1299
+ S(
1300
+ se,
1301
+ `Entity '${r.name}' (${r.kind}) is missing a DBC contract`
1302
+ )
1303
+ );
1304
+ else {
1305
+ const a = this._validateContract(
1306
+ r.contract.text,
1307
+ r.signature,
1308
+ r.kind,
1309
+ t,
1310
+ r.contract.startLine,
1311
+ r.contract.startCol
1312
+ );
1313
+ n.push(...a);
1314
+ }
1315
+ for (const a of r.members)
1316
+ if (!a.contract)
1317
+ n.push(
1318
+ S(
1319
+ se,
1320
+ `Member '${a.name}' (${a.kind}) of '${r.name}' is missing a DBC contract`
1321
+ )
1322
+ );
1323
+ else {
1324
+ const i = this._validateContract(
1325
+ a.contract.text,
1326
+ a.signature,
1327
+ a.kind,
1328
+ t,
1329
+ a.contract.startLine,
1330
+ a.contract.startCol
1331
+ );
1332
+ n.push(...i);
1333
+ }
1334
+ }
1335
+ return n.map((r, a) => ({
1336
+ ...r,
1337
+ file: t || r.file,
1338
+ line: r.line > 1 ? r.line : a + 1
1339
+ }));
1340
+ }
1341
+ /**
1342
+ * @purpose Parse a contract text and validate it, returning both parser issues
1343
+ * (translated per FR-23) and structural mismatches via DbcContractMatchValidator.
1344
+ * @param contractText Raw JSDoc contract text to parse and validate.
1345
+ * @param signature Signature info from AST for parameter/returns matching.
1346
+ * @param kind Entity or member kind for validation matrix lookup.
1347
+ * @param filePath Source file path for error attribution.
1348
+ * @param startLine Contract start line in source for error position.
1349
+ * @param startCol Contract start column in source for error position.
1350
+ * @returns Array of lint errors from parser issues and structural mismatches.
1351
+ */
1352
+ _validateContract(e, t, n, r, a, i) {
1353
+ const p = [], u = this._parser.parse(e), l = [];
1354
+ for (const y of u.entries)
1355
+ if (l.push(y), y.inline)
1356
+ for (const f of y.inline)
1357
+ l.push(f);
1358
+ for (const y of l)
1359
+ for (const f of y.issues) {
1360
+ const m = a + (f.line ?? 1) - 1;
1361
+ p.push({
1362
+ file: r,
1363
+ line: m > 0 ? m : a,
1364
+ col: i,
1365
+ severity: "error",
1366
+ code: f.code,
1367
+ message: `Parser issue in contract: ${f.code}`
1368
+ });
1369
+ }
1370
+ const d = wt(l, t, n);
1371
+ for (const y of d)
1372
+ p.push({
1373
+ ...y,
1374
+ file: r,
1375
+ line: a,
1376
+ col: i
1377
+ });
1378
+ return p;
1379
+ }
1380
+ // #endregion END_LINT_HELPERS
1381
+ // #region START_AUTOFIX_COLLECT
1382
+ /** @purpose Internal record of a contract block with context for autofix. */
1383
+ _ContractBlock = class {
1384
+ text;
1385
+ kind;
1386
+ signature;
1387
+ constructor(e, t, n) {
1388
+ this.text = e, this.kind = t, this.signature = n;
1389
+ }
1390
+ };
1391
+ /**
1392
+ * @purpose Walk entities and members, collecting all JSDoc contract blocks
1393
+ * with their associated kind and signature for autofix processing.
1394
+ * @param entities Exported entities from AST parse result.
1395
+ * @returns Array of contract blocks with kind and signature context.
1396
+ */
1397
+ _collectContracts(e) {
1398
+ const t = [];
1399
+ for (const n of e) {
1400
+ n.contract && t.push(new this._ContractBlock(n.contract.text, n.kind, n.signature));
1401
+ for (const r of n.members)
1402
+ r.contract && t.push(new this._ContractBlock(r.contract.text, r.kind, r.signature));
1403
+ }
1404
+ return t;
1405
+ }
1406
+ // #endregion END_AUTOFIX_COLLECT
1407
+ // #region START_AUTOFIX_CHAIN_METHODS
1408
+ /**
1409
+ * @purpose Expand single-line pipe contracts to multi-line for callable kinds or >3 tags.
1410
+ * @param jsdocText Raw JSDoc comment text.
1411
+ * @param [kind] Entity kind — callable kinds or pipe with >3 tags are expanded.
1412
+ * @returns JSDoc text in multi-line format if applicable.
1413
+ */
1414
+ _expandToMultiline(e, t) {
1415
+ if (e.includes(`
1416
+ `) || !e.includes(" | @")) return e;
1417
+ const r = e.replace(/^\s*\/\*\*\s*/, "").replace(/\s*\*\/\s*$/, "").split(" | @");
1418
+ if (r.length === 0 || r.length <= 3 && !V.has(t ?? "")) return e;
1419
+ const i = e.match(/^(\s*)/), p = i ? i[1] : "", u = p + " ", l = [p + "/**"];
1420
+ l.push(u + "* " + (r[0] ?? "").trim());
1421
+ for (let d = 1; d < r.length; d += 1)
1422
+ l.push(u + "* @" + (r[d] ?? "").trim());
1423
+ return l.push(p + " */"), l.join(`
1424
+ `);
1425
+ }
1426
+ /**
1427
+ * @purpose Remove redundant `{dataType}` annotations from @param and @returns tags.
1428
+ * @param jsdocText Raw JSDoc comment text.
1429
+ * @returns JSDoc text with types stripped.
1430
+ */
1431
+ _removeRedundantTypes(e) {
1432
+ return e.replace(/(\*?\s*)@(param|returns)\s+\{[^}]*\}\s+/g, "$1@$2 ");
1433
+ }
1434
+ /**
1435
+ * @purpose Adjust @param specifiers to wrap optional params in `[brackets]` and remove brackets from required params.
1436
+ * @param jsdocText Raw JSDoc comment text.
1437
+ * @param signature Signature with optionality flags.
1438
+ * @returns JSDoc text with normalized brackets.
1439
+ */
1440
+ _normalizeParamBrackets(e, t) {
1441
+ const n = new Map(t.params.map((i) => [i.name, i]));
1442
+ if (!e.includes(`
1443
+ `)) {
1444
+ const i = e.match(/^(\s*)/), p = i ? i[1] : "", d = e.replace(/^\s*\/\*\*\s*/, "").replace(/\s*\*\/\s*$/, "").split(" | ").map((y) => {
1445
+ const f = y.trim();
1446
+ if (!/^@param\s/.test(f)) return y;
1447
+ const m = this._extractParamSpecifier(f), o = A(m), c = n.get(o);
1448
+ if (!c || c.isRest) return y;
1449
+ const b = c.optional, I = m.startsWith("[") && m.endsWith("]");
1450
+ if (b === I) return y;
1451
+ let R;
1452
+ b ? R = m.startsWith("...") ? "[..." + o + "]" : "[" + o + "]" : R = m.startsWith("...") ? "..." + o : o;
1453
+ const w = m.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1454
+ return y.replace(
1455
+ new RegExp(`(@param\\s+(?:\\{[^}]*\\}\\s+)?)${w}`),
1456
+ `$1${R}`
1457
+ );
1458
+ });
1459
+ return p + "/** " + d.join(" | ") + " */";
1460
+ }
1461
+ const r = e.split(`
1462
+ `), a = [];
1463
+ for (const i of r) {
1464
+ let p = i.trim();
1465
+ if (p.startsWith("* ") ? p = p.slice(2).trimStart() : p.startsWith("*") && (p = p.slice(1).trimStart()), !/^@param\s/.test(p)) {
1466
+ a.push(i);
1467
+ continue;
1468
+ }
1469
+ const u = this._extractParamSpecifier(p), l = A(u), d = n.get(l);
1470
+ if (!d || d.isRest) {
1471
+ a.push(i);
1472
+ continue;
1473
+ }
1474
+ const y = d.optional, f = u.startsWith("[") && u.endsWith("]");
1475
+ if (y === f) {
1476
+ a.push(i);
1477
+ continue;
1478
+ }
1479
+ let m;
1480
+ y ? m = u.startsWith("...") ? "[..." + l + "]" : "[" + l + "]" : m = u.startsWith("...") ? "..." + l : l;
1481
+ const o = u.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), c = i.replace(
1482
+ new RegExp(`(@param\\s+(?:\\{[^}]*\\}\\s+)?)${o}`),
1483
+ `$1${m}`
1484
+ );
1485
+ a.push(c);
1486
+ }
1487
+ return a.join(`
1488
+ `);
1489
+ }
1490
+ /**
1491
+ * @purpose Remove @param entries whose specifier does not match any signature parameter. | Handles both multi-line and single-line contracts.
1492
+ * @param jsdocText Raw JSDoc comment text.
1493
+ * @param signature Signature to match against.
1494
+ * @returns JSDoc text with extra params removed.
1495
+ */
1496
+ _removeExtraParams(e, t) {
1497
+ const n = new Set(t.params.map((p) => p.name)), r = e.split(`
1498
+ `), a = [];
1499
+ let i = !1;
1500
+ for (const p of r) {
1501
+ let u = p.trim();
1502
+ if (u === "*/" || u === "*/ ") {
1503
+ i = !1, a.push(p);
1504
+ continue;
1505
+ }
1506
+ if (u.startsWith("* ") ? u = u.slice(2).trimStart() : u.startsWith("*") && (u = u.slice(1).trimStart()), /^@param\s/.test(u)) {
1507
+ const l = this._extractParamSpecifier(u), d = A(l);
1508
+ n.has(d) ? (i = !1, a.push(p)) : i = !0;
1509
+ } else /^@\w/.test(u) ? (i = !1, a.push(p)) : i || a.push(p);
1510
+ }
1511
+ return a.join(`
1512
+ `);
1513
+ }
1514
+ /**
1515
+ * @purpose Remove @returns tag when the kind does not allow it or return type is void.
1516
+ * @param jsdocText Raw JSDoc comment text.
1517
+ * @param kind Entity or member kind.
1518
+ * @param [signature] Optional signature info to check void return type.
1519
+ * @returns JSDoc text with unexpected @returns removed.
1520
+ */
1521
+ _removeUnexpectedReturns(e, t, n) {
1522
+ if (!(X.has(t) || K.has(t) && n?.returnType === "void"))
1523
+ return e;
1524
+ const a = e.split(`
1525
+ `), i = [];
1526
+ let p = !1;
1527
+ for (const u of a) {
1528
+ let l = u.trim();
1529
+ if (l === "*/" || l === "*/ ") {
1530
+ p = !1, i.push(u);
1531
+ continue;
1532
+ }
1533
+ l.startsWith("* ") ? l = l.slice(2).trimStart() : l.startsWith("*") && (l = l.slice(1).trimStart()), /^@returns\b/.test(l) ? p = !0 : /^@\w/.test(l) ? (p = !1, i.push(u)) : p || i.push(u);
1534
+ }
1535
+ return i.join(`
1536
+ `);
1537
+ }
1538
+ /**
1539
+ * @purpose Reorder @param entries to match the signature parameter order.
1540
+ * @param jsdocText Raw JSDoc comment text.
1541
+ * @param signature Signature with desired parameter order.
1542
+ * @returns JSDoc text with params reordered.
1543
+ */
1544
+ _reorderParams(e, t) {
1545
+ if (t.params.length === 0)
1546
+ return e;
1547
+ const n = t.params.map((o) => o.name), r = e.split(`
1548
+ `), a = [], i = [], p = [];
1549
+ let u = !1, l = !1, d = null;
1550
+ for (const o of r) {
1551
+ let c = o.trim();
1552
+ if (c.startsWith("* ") ? c = c.slice(2).trimStart() : c.startsWith("*") && (c = c.slice(1).trimStart()), !u && !l && /^@param\s/.test(c) && (u = !0), !u && !l) {
1553
+ if (i.push(o), /^@param\s/.test(c)) {
1554
+ u = !0;
1555
+ const b = this._extractParamSpecifier(c);
1556
+ d = {
1557
+ name: A(b),
1558
+ lines: [o]
1559
+ };
1560
+ }
1561
+ continue;
1562
+ }
1563
+ if (u)
1564
+ if (/^@param\s/.test(c)) {
1565
+ d && a.push(d);
1566
+ const b = this._extractParamSpecifier(c);
1567
+ d = {
1568
+ name: A(b),
1569
+ lines: [o]
1570
+ };
1571
+ } else /^@\w/.test(c) ? (d && (a.push(d), d = null), u = !1, l = !0, p.push(o)) : d && d.lines.push(o);
1572
+ else l && p.push(o);
1573
+ }
1574
+ d && a.push(d);
1575
+ const y = /* @__PURE__ */ new Map();
1576
+ for (const o of a)
1577
+ y.set(o.name, o);
1578
+ const f = [];
1579
+ for (const o of n) {
1580
+ const c = y.get(o);
1581
+ c && (f.push(c), y.delete(o));
1582
+ }
1583
+ for (const [, o] of y)
1584
+ f.push(o);
1585
+ const m = [...i];
1586
+ for (const o of f)
1587
+ m.push(...o.lines);
1588
+ return m.push(...p), m.join(`
1589
+ `);
1590
+ }
1591
+ /**
1592
+ * @purpose Reorder contract tags to canonical DBC order. | Order: description → purpose → implements → invariant → pre → param(*) → | throws → returns → post → sideEffect → other tags.
1593
+ * @param jsdocText Raw JSDoc comment text.
1594
+ * @returns JSDoc text with tags in canonical order.
1595
+ */
1596
+ _reorderTags(e) {
1597
+ const t = /* @__PURE__ */ new Map([
1598
+ ["purpose", 0],
1599
+ ["implements", 1],
1600
+ ["invariant", 2],
1601
+ ["pre", 3],
1602
+ ["param", 4],
1603
+ ["throws", 5],
1604
+ ["returns", 6],
1605
+ ["post", 7],
1606
+ ["sideEffect", 8],
1607
+ ["see", 9],
1608
+ ["consumer", 9],
1609
+ ["consumers", 9],
1610
+ ["author", 9],
1611
+ ["deprecated", 9]
1612
+ ]), n = e.split(`
1613
+ `), r = [], a = [];
1614
+ let i = null, p = !1, u = null;
1615
+ for (const y of n) {
1616
+ let f = y.trim();
1617
+ if (f === "*/" || f === "*/ ") {
1618
+ u = y;
1619
+ continue;
1620
+ }
1621
+ f.startsWith("* ") ? f = f.slice(2).trimStart() : f.startsWith("*") && (f = f.slice(1).trimStart());
1622
+ const m = f.match(/^@(\w+)/);
1623
+ if (!p && !m)
1624
+ r.push(y);
1625
+ else if (m) {
1626
+ p = !0;
1627
+ const o = m[1];
1628
+ i && a.push(i), i = {
1629
+ tag: o,
1630
+ order: t.get(o) ?? 99,
1631
+ lines: [y]
1632
+ };
1633
+ } else p && i ? i.lines.push(y) : r.push(y);
1634
+ }
1635
+ i && a.push(i);
1636
+ const l = a.map((y, f) => ({ ...y, origIdx: f }));
1637
+ l.sort((y, f) => y.order !== f.order ? y.order - f.order : y.origIdx - f.origIdx);
1638
+ const d = [...r];
1639
+ for (const y of l)
1640
+ d.push(...y.lines);
1641
+ return u !== null && d.push(u), d.join(`
1642
+ `);
1643
+ }
1644
+ /**
1645
+ * @purpose Normalize multi-line JSDoc format: ensure closing marker is on its own line | and opening marker is bare (no content after it). | Preserves original indentation by patching specific format issues | rather than reconstructing the entire block.
1646
+ * @invariant Single-line contracts pass through unchanged.
1647
+ * @param jsdocText Raw JSDoc comment text.
1648
+ * @returns Normalized JSDoc text.
1649
+ */
1650
+ _normalizeMultiLine(e) {
1651
+ if (!e.includes(`
1652
+ `))
1653
+ return e;
1654
+ const t = e.split(`
1655
+ `), r = t[0].match(/^(\s*\/\*\*)\s+(.+)/);
1656
+ if (r) {
1657
+ t[0] = r[1];
1658
+ const u = this._detectContentIndent(t);
1659
+ t.splice(1, 0, u + "* " + r[2]);
1660
+ }
1661
+ const a = t.length - 1, p = t[a].match(/^(\s*)\*\s+(.+?)\s*\*\/\s*$/);
1662
+ if (p) {
1663
+ const u = p[1];
1664
+ t[a] = u + "* " + p[2];
1665
+ const l = u.length > 0 ? u.slice(0, -1) : "";
1666
+ t.push(l + " */");
1667
+ }
1668
+ for (let u = 1; u < t.length - 1; u += 1) {
1669
+ const l = t[u];
1670
+ if (l.trim() !== "" && !/^\s*\*\s/.test(l)) {
1671
+ const d = l.match(/^(\s*)/), y = d ? d[1] : "";
1672
+ t[u] = y + "* " + l.trimStart();
1673
+ }
1674
+ }
1675
+ return t.join(`
1676
+ `);
1677
+ }
1678
+ /**
1679
+ * @purpose Detect the indentation pattern used by content lines. | Returns the whitespace prefix before `*` on the first content line, | or the indent of the opening line as fallback.
1680
+ * @param lines All lines of the JSDoc block (may be mutated by Step 1).
1681
+ * @returns Indent string for `*`-prefixed content lines.
1682
+ */
1683
+ _detectContentIndent(e) {
1684
+ for (let n = 1; n < e.length - 1; n += 1) {
1685
+ const r = e[n].match(/^(\s*)\*\s/);
1686
+ if (r)
1687
+ return r[1];
1688
+ }
1689
+ return (e[0].match(/^(\s*)/)?.[1] ?? "") + " ";
1690
+ }
1691
+ /**
1692
+ * @purpose Attempt to convert a multi-line JSDoc comment to single-line format. | Inlines only single-tag contracts (1 @tag); multi-tag contracts stay multi-line. | Performs a dry-run through the parser: if the inline version introduces new | parse errors, the original multi-line text is returned unchanged.
1693
+ * @param jsdocText Raw JSDoc comment text.
1694
+ * @returns Inline text if safe, otherwise the original text.
1695
+ */
1696
+ _inlineIfSafe(e) {
1697
+ if (!e.includes(`
1698
+ `))
1699
+ return e;
1700
+ const t = e.replace(/^\/\*\*\s*/, "").replace(/\s*\*\/\s*$/, "").split(`
1701
+ `).map((l) => l.replace(/^\s*\*\s?/, "").trim()).filter((l) => l.length > 0);
1702
+ if (t.length === 0 || t.filter((l) => /^@\w/.test(l)).length > 1)
1703
+ return e;
1704
+ const r = e.match(/^(\s*)/), i = (r ? r[1] : "") + "/** " + t.join(" | ") + " */";
1705
+ return this._parser.parse(i).entries.some((l) => l.issues.length > 0) ? e : i;
1706
+ }
1707
+ /**
1708
+ * @purpose Extract the specifier (parameter name) from a @param tag line. | Example: `@param userId Description` → `userId`
1709
+ * @param line Trimmed line content starting with `@param`.
1710
+ * @returns The specifier or empty string.
1711
+ */
1712
+ _extractParamSpecifier(e) {
1713
+ const r = e.replace(/^(\*?\s*)?@param\s+/, "").replace(/^\{[^}]*\}\s+/, "").match(/^(\S+)/);
1714
+ return r ? r[1] : "";
1715
+ }
1716
+ // #endregion END_AUTOFIX_CHAIN_METHODS
1717
+ }
1718
+ function Y(s) {
1719
+ throw new Error('Could not dynamically require "' + s + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
1720
+ }
1721
+ var z = { exports: {} }, D = { exports: {} }, G, le;
1722
+ function It() {
1723
+ if (le) return G;
1724
+ le = 1;
1725
+ var s = Le, e = _e, t = Me, n = typeof __webpack_require__ == "function" ? __non_webpack_require__ : Y, r = process.config && process.config.variables || {}, a = !!process.env.PREBUILDS_ONLY, i = process.versions.modules, p = $e() ? "electron" : Ee() ? "node-webkit" : "node", u = process.env.npm_config_arch || t.arch(), l = process.env.npm_config_platform || t.platform(), d = process.env.LIBC || (ke(l) ? "musl" : "glibc"), y = process.env.ARM_VERSION || (u === "arm64" ? "8" : r.arm_version) || "", f = (process.versions.uv || "").split(".")[0];
1726
+ G = m;
1727
+ function m(h) {
1728
+ return n(m.resolve(h));
1729
+ }
1730
+ m.resolve = m.path = function(h) {
1731
+ h = e.resolve(h || ".");
1732
+ try {
1733
+ var q = n(e.join(h, "package.json")).name.toUpperCase().replace(/-/g, "_");
1734
+ process.env[q + "_PREBUILD"] && (h = process.env[q + "_PREBUILD"]);
1735
+ } catch {
1736
+ }
1737
+ if (!a) {
1738
+ var g = c(e.join(h, "build/Release"), b);
1739
+ if (g) return g;
1740
+ var v = c(e.join(h, "build/Debug"), b);
1741
+ if (v) return v;
1742
+ }
1743
+ var T = ee(h);
1744
+ if (T) return T;
1745
+ var x = ee(e.dirname(process.execPath));
1746
+ if (x) return x;
1747
+ var Ae = [
1748
+ "platform=" + l,
1749
+ "arch=" + u,
1750
+ "runtime=" + p,
1751
+ "abi=" + i,
1752
+ "uv=" + f,
1753
+ y ? "armv=" + y : "",
1754
+ "libc=" + d,
1755
+ "node=" + process.versions.node,
1756
+ process.versions.electron ? "electron=" + process.versions.electron : "",
1757
+ typeof __webpack_require__ == "function" ? "webpack=true" : ""
1758
+ // eslint-disable-line
1759
+ ].filter(Boolean).join(" ");
1760
+ throw new Error("No native build was found for " + Ae + `
1761
+ loaded from: ` + h + `
1762
+ `);
1763
+ function ee(U) {
1764
+ var Te = o(e.join(U, "prebuilds")).map(I), te = Te.filter(R(l, u)).sort(w)[0];
1765
+ if (te) {
1766
+ var re = e.join(U, "prebuilds", te.name), Ne = o(re).map(k), je = Ne.filter(Q(p, i)), ne = je.sort(Z(p))[0];
1767
+ if (ne) return e.join(re, ne.file);
1768
+ }
1769
+ }
1770
+ };
1771
+ function o(h) {
1772
+ try {
1773
+ return s.readdirSync(h);
1774
+ } catch {
1775
+ return [];
1776
+ }
1777
+ }
1778
+ function c(h, q) {
1779
+ var g = o(h).filter(q);
1780
+ return g[0] && e.join(h, g[0]);
1781
+ }
1782
+ function b(h) {
1783
+ return /\.node$/.test(h);
1784
+ }
1785
+ function I(h) {
1786
+ var q = h.split("-");
1787
+ if (q.length === 2) {
1788
+ var g = q[0], v = q[1].split("+");
1789
+ if (g && v.length && v.every(Boolean))
1790
+ return { name: h, platform: g, architectures: v };
1791
+ }
1792
+ }
1793
+ function R(h, q) {
1794
+ return function(g) {
1795
+ return g == null || g.platform !== h ? !1 : g.architectures.includes(q);
1796
+ };
1797
+ }
1798
+ function w(h, q) {
1799
+ return h.architectures.length - q.architectures.length;
1800
+ }
1801
+ function k(h) {
1802
+ var q = h.split("."), g = q.pop(), v = { file: h, specificity: 0 };
1803
+ if (g === "node") {
1804
+ for (var T = 0; T < q.length; T++) {
1805
+ var x = q[T];
1806
+ if (x === "node" || x === "electron" || x === "node-webkit")
1807
+ v.runtime = x;
1808
+ else if (x === "napi")
1809
+ v.napi = !0;
1810
+ else if (x.slice(0, 3) === "abi")
1811
+ v.abi = x.slice(3);
1812
+ else if (x.slice(0, 2) === "uv")
1813
+ v.uv = x.slice(2);
1814
+ else if (x.slice(0, 4) === "armv")
1815
+ v.armv = x.slice(4);
1816
+ else if (x === "glibc" || x === "musl")
1817
+ v.libc = x;
1818
+ else
1819
+ continue;
1820
+ v.specificity++;
1821
+ }
1822
+ return v;
1823
+ }
1824
+ }
1825
+ function Q(h, q) {
1826
+ return function(g) {
1827
+ return !(g == null || g.runtime && g.runtime !== h && !Ce(g) || g.abi && g.abi !== q && !g.napi || g.uv && g.uv !== f || g.armv && g.armv !== y || g.libc && g.libc !== d);
1828
+ };
1829
+ }
1830
+ function Ce(h) {
1831
+ return h.runtime === "node" && h.napi;
1832
+ }
1833
+ function Z(h) {
1834
+ return function(q, g) {
1835
+ return q.runtime !== g.runtime ? q.runtime === h ? -1 : 1 : q.abi !== g.abi ? q.abi ? -1 : 1 : q.specificity !== g.specificity ? q.specificity > g.specificity ? -1 : 1 : 0;
1836
+ };
1837
+ }
1838
+ function Ee() {
1839
+ return !!(process.versions && process.versions.nw);
1840
+ }
1841
+ function $e() {
1842
+ return process.versions && process.versions.electron || process.env.ELECTRON_RUN_AS_NODE ? !0 : typeof window < "u" && window.process && window.process.type === "renderer";
1843
+ }
1844
+ function ke(h) {
1845
+ return h === "linux" && s.existsSync("/etc/alpine-release");
1846
+ }
1847
+ return m.parseTags = k, m.matchTags = Q, m.compareTags = Z, m.parseTuple = I, m.matchTuple = R, m.compareTuples = w, G;
1848
+ }
1849
+ var me;
1850
+ function St() {
1851
+ if (me) return D.exports;
1852
+ me = 1;
1853
+ const s = typeof __webpack_require__ == "function" ? __non_webpack_require__ : Y;
1854
+ return typeof s.addon == "function" ? D.exports = s.addon.bind(s) : D.exports = It(), D.exports;
1855
+ }
1856
+ const Rt = /* @__PURE__ */ JSON.parse('[{"type":"declaration","named":true,"subtypes":[{"type":"abstract_class_declaration","named":true},{"type":"ambient_declaration","named":true},{"type":"class_declaration","named":true},{"type":"enum_declaration","named":true},{"type":"function_declaration","named":true},{"type":"function_signature","named":true},{"type":"generator_function_declaration","named":true},{"type":"import_alias","named":true},{"type":"interface_declaration","named":true},{"type":"internal_module","named":true},{"type":"lexical_declaration","named":true},{"type":"module","named":true},{"type":"type_alias_declaration","named":true},{"type":"variable_declaration","named":true}]},{"type":"expression","named":true,"subtypes":[{"type":"as_expression","named":true},{"type":"assignment_expression","named":true},{"type":"augmented_assignment_expression","named":true},{"type":"await_expression","named":true},{"type":"binary_expression","named":true},{"type":"instantiation_expression","named":true},{"type":"internal_module","named":true},{"type":"new_expression","named":true},{"type":"primary_expression","named":true},{"type":"satisfies_expression","named":true},{"type":"ternary_expression","named":true},{"type":"type_assertion","named":true},{"type":"unary_expression","named":true},{"type":"update_expression","named":true},{"type":"yield_expression","named":true}]},{"type":"pattern","named":true,"subtypes":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"non_null_expression","named":true},{"type":"object_pattern","named":true},{"type":"rest_pattern","named":true},{"type":"subscript_expression","named":true},{"type":"undefined","named":true}]},{"type":"primary_expression","named":true,"subtypes":[{"type":"array","named":true},{"type":"arrow_function","named":true},{"type":"call_expression","named":true},{"type":"class","named":true},{"type":"false","named":true},{"type":"function_expression","named":true},{"type":"generator_function","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"meta_property","named":true},{"type":"non_null_expression","named":true},{"type":"null","named":true},{"type":"number","named":true},{"type":"object","named":true},{"type":"parenthesized_expression","named":true},{"type":"regex","named":true},{"type":"string","named":true},{"type":"subscript_expression","named":true},{"type":"super","named":true},{"type":"template_string","named":true},{"type":"this","named":true},{"type":"true","named":true},{"type":"undefined","named":true}]},{"type":"primary_type","named":true,"subtypes":[{"type":"array_type","named":true},{"type":"conditional_type","named":true},{"type":"const","named":false},{"type":"existential_type","named":true},{"type":"flow_maybe_type","named":true},{"type":"generic_type","named":true},{"type":"index_type_query","named":true},{"type":"intersection_type","named":true},{"type":"literal_type","named":true},{"type":"lookup_type","named":true},{"type":"nested_type_identifier","named":true},{"type":"object_type","named":true},{"type":"parenthesized_type","named":true},{"type":"predefined_type","named":true},{"type":"template_literal_type","named":true},{"type":"this_type","named":true},{"type":"tuple_type","named":true},{"type":"type_identifier","named":true},{"type":"type_query","named":true},{"type":"union_type","named":true}]},{"type":"statement","named":true,"subtypes":[{"type":"break_statement","named":true},{"type":"continue_statement","named":true},{"type":"debugger_statement","named":true},{"type":"declaration","named":true},{"type":"do_statement","named":true},{"type":"empty_statement","named":true},{"type":"export_statement","named":true},{"type":"expression_statement","named":true},{"type":"for_in_statement","named":true},{"type":"for_statement","named":true},{"type":"if_statement","named":true},{"type":"import_statement","named":true},{"type":"labeled_statement","named":true},{"type":"return_statement","named":true},{"type":"statement_block","named":true},{"type":"switch_statement","named":true},{"type":"throw_statement","named":true},{"type":"try_statement","named":true},{"type":"while_statement","named":true},{"type":"with_statement","named":true}]},{"type":"type","named":true,"subtypes":[{"type":"call_expression","named":true},{"type":"constructor_type","named":true},{"type":"function_type","named":true},{"type":"infer_type","named":true},{"type":"member_expression","named":true},{"type":"primary_type","named":true},{"type":"readonly_type","named":true}]},{"type":"abstract_class_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"class_body","named":true}]},"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"class_heritage","named":true}]}},{"type":"abstract_method_signature","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"accessibility_modifier","named":true,"fields":{}},{"type":"adding_type_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"ambient_declaration","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"declaration","named":true},{"type":"property_identifier","named":true},{"type":"statement_block","named":true},{"type":"type","named":true}]}},{"type":"arguments","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"expression","named":true},{"type":"spread_element","named":true}]}},{"type":"array","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"expression","named":true},{"type":"spread_element","named":true}]}},{"type":"array_pattern","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"assignment_pattern","named":true},{"type":"pattern","named":true}]}},{"type":"array_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"primary_type","named":true}]}},{"type":"arrow_function","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"statement_block","named":true}]},"parameter":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":false,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"as_expression","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"expression","named":true},{"type":"type","named":true}]}},{"type":"asserts","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"this","named":true},{"type":"type_predicate","named":true}]}},{"type":"asserts_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"asserts","named":true}]}},{"type":"assignment_expression","named":true,"fields":{"left":{"multiple":false,"required":true,"types":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"non_null_expression","named":true},{"type":"object_pattern","named":true},{"type":"parenthesized_expression","named":true},{"type":"subscript_expression","named":true},{"type":"undefined","named":true}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"assignment_pattern","named":true,"fields":{"left":{"multiple":false,"required":true,"types":[{"type":"pattern","named":true}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"augmented_assignment_expression","named":true,"fields":{"left":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"non_null_expression","named":true},{"type":"parenthesized_expression","named":true},{"type":"subscript_expression","named":true}]},"operator":{"multiple":false,"required":true,"types":[{"type":"%=","named":false},{"type":"&&=","named":false},{"type":"&=","named":false},{"type":"**=","named":false},{"type":"*=","named":false},{"type":"+=","named":false},{"type":"-=","named":false},{"type":"/=","named":false},{"type":"<<=","named":false},{"type":">>=","named":false},{"type":">>>=","named":false},{"type":"??=","named":false},{"type":"^=","named":false},{"type":"|=","named":false},{"type":"||=","named":false}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"await_expression","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}},{"type":"binary_expression","named":true,"fields":{"left":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"private_property_identifier","named":true}]},"operator":{"multiple":false,"required":true,"types":[{"type":"!=","named":false},{"type":"!==","named":false},{"type":"%","named":false},{"type":"&","named":false},{"type":"&&","named":false},{"type":"*","named":false},{"type":"**","named":false},{"type":"+","named":false},{"type":"-","named":false},{"type":"/","named":false},{"type":"<","named":false},{"type":"<<","named":false},{"type":"<=","named":false},{"type":"==","named":false},{"type":"===","named":false},{"type":">","named":false},{"type":">=","named":false},{"type":">>","named":false},{"type":">>>","named":false},{"type":"??","named":false},{"type":"^","named":false},{"type":"in","named":false},{"type":"instanceof","named":false},{"type":"|","named":false},{"type":"||","named":false}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"break_statement","named":true,"fields":{"label":{"multiple":false,"required":false,"types":[{"type":"statement_identifier","named":true}]}}},{"type":"call_expression","named":true,"fields":{"arguments":{"multiple":false,"required":true,"types":[{"type":"arguments","named":true},{"type":"template_string","named":true}]},"function":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"import","named":true}]},"type_arguments":{"multiple":false,"required":false,"types":[{"type":"type_arguments","named":true}]}}},{"type":"call_signature","named":true,"fields":{"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"catch_clause","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"parameter":{"multiple":false,"required":false,"types":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"object_pattern","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]}}},{"type":"class","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"class_body","named":true}]},"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"type_identifier","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"class_heritage","named":true}]}},{"type":"class_body","named":true,"fields":{"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"abstract_method_signature","named":true},{"type":"class_static_block","named":true},{"type":"index_signature","named":true},{"type":"method_definition","named":true},{"type":"method_signature","named":true},{"type":"public_field_definition","named":true}]}},{"type":"class_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"class_body","named":true}]},"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"class_heritage","named":true}]}},{"type":"class_heritage","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"extends_clause","named":true},{"type":"implements_clause","named":true}]}},{"type":"class_static_block","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]}}},{"type":"computed_property_name","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}},{"type":"conditional_type","named":true,"fields":{"alternative":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]},"consequence":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]},"left":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]},"right":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}}},{"type":"constraint","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"construct_signature","named":true,"fields":{"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"constructor_type","named":true,"fields":{"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"type":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"continue_statement","named":true,"fields":{"label":{"multiple":false,"required":false,"types":[{"type":"statement_identifier","named":true}]}}},{"type":"debugger_statement","named":true,"fields":{}},{"type":"decorator","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"call_expression","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"parenthesized_expression","named":true}]}},{"type":"default_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"do_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"condition":{"multiple":false,"required":true,"types":[{"type":"parenthesized_expression","named":true}]}}},{"type":"else_clause","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]}},{"type":"empty_statement","named":true,"fields":{}},{"type":"enum_assignment","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"enum_body","named":true,"fields":{"name":{"multiple":true,"required":false,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"enum_assignment","named":true}]}},{"type":"enum_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"enum_body","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]}}},{"type":"existential_type","named":true,"fields":{}},{"type":"export_clause","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"export_specifier","named":true}]}},{"type":"export_specifier","named":true,"fields":{"alias":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true},{"type":"string","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"string","named":true}]}}},{"type":"export_statement","named":true,"fields":{"declaration":{"multiple":false,"required":false,"types":[{"type":"declaration","named":true}]},"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"source":{"multiple":false,"required":false,"types":[{"type":"string","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"export_clause","named":true},{"type":"expression","named":true},{"type":"identifier","named":true},{"type":"namespace_export","named":true}]}},{"type":"expression_statement","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]}},{"type":"extends_clause","named":true,"fields":{"type_arguments":{"multiple":true,"required":false,"types":[{"type":"type_arguments","named":true}]},"value":{"multiple":true,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"extends_type_clause","named":true,"fields":{"type":{"multiple":true,"required":true,"types":[{"type":"generic_type","named":true},{"type":"nested_type_identifier","named":true},{"type":"type_identifier","named":true}]}}},{"type":"finally_clause","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]}}},{"type":"flow_maybe_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"primary_type","named":true}]}},{"type":"for_in_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"kind":{"multiple":false,"required":false,"types":[{"type":"const","named":false},{"type":"let","named":false},{"type":"var","named":false}]},"left":{"multiple":false,"required":true,"types":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"non_null_expression","named":true},{"type":"object_pattern","named":true},{"type":"parenthesized_expression","named":true},{"type":"subscript_expression","named":true},{"type":"undefined","named":true}]},"operator":{"multiple":false,"required":true,"types":[{"type":"in","named":false},{"type":"of","named":false}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}}},{"type":"for_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"condition":{"multiple":true,"required":true,"types":[{"type":";","named":false},{"type":"empty_statement","named":true},{"type":"expression","named":true},{"type":"sequence_expression","named":true}]},"increment":{"multiple":false,"required":false,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]},"initializer":{"multiple":false,"required":true,"types":[{"type":"empty_statement","named":true},{"type":"expression","named":true},{"type":"lexical_declaration","named":true},{"type":"sequence_expression","named":true},{"type":"variable_declaration","named":true}]}}},{"type":"formal_parameters","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"optional_parameter","named":true},{"type":"required_parameter","named":true}]}},{"type":"function_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"function_expression","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"function_signature","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"function_type","named":true,"fields":{"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":true,"types":[{"type":"asserts","named":true},{"type":"type","named":true},{"type":"type_predicate","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"generator_function","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"generator_function_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"generic_type","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"nested_type_identifier","named":true},{"type":"type_identifier","named":true}]},"type_arguments":{"multiple":false,"required":true,"types":[{"type":"type_arguments","named":true}]}}},{"type":"identifier","named":true,"fields":{}},{"type":"if_statement","named":true,"fields":{"alternative":{"multiple":false,"required":false,"types":[{"type":"else_clause","named":true}]},"condition":{"multiple":false,"required":true,"types":[{"type":"parenthesized_expression","named":true}]},"consequence":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]}}},{"type":"implements_clause","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true}]}},{"type":"import","named":true,"fields":{}},{"type":"import_alias","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"identifier","named":true},{"type":"nested_identifier","named":true}]}},{"type":"import_attribute","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"object","named":true}]}},{"type":"import_clause","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"identifier","named":true},{"type":"named_imports","named":true},{"type":"namespace_import","named":true}]}},{"type":"import_require_clause","named":true,"fields":{"source":{"multiple":false,"required":true,"types":[{"type":"string","named":true}]}},"children":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]}},{"type":"import_specifier","named":true,"fields":{"alias":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"string","named":true}]}}},{"type":"import_statement","named":true,"fields":{"source":{"multiple":false,"required":false,"types":[{"type":"string","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"import_attribute","named":true},{"type":"import_clause","named":true},{"type":"import_require_clause","named":true}]}},{"type":"index_signature","named":true,"fields":{"index_type":{"multiple":false,"required":false,"types":[{"type":"type","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"sign":{"multiple":false,"required":false,"types":[{"type":"+","named":false},{"type":"-","named":false}]},"type":{"multiple":false,"required":true,"types":[{"type":"adding_type_annotation","named":true},{"type":"omitting_type_annotation","named":true},{"type":"opting_type_annotation","named":true},{"type":"type_annotation","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"mapped_type_clause","named":true}]}},{"type":"index_type_query","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"primary_type","named":true}]}},{"type":"infer_type","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true},{"type":"type_identifier","named":true}]}},{"type":"instantiation_expression","named":true,"fields":{"function":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true},{"type":"import","named":true},{"type":"member_expression","named":true},{"type":"subscript_expression","named":true}]},"type_arguments":{"multiple":false,"required":true,"types":[{"type":"type_arguments","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},{"type":"interface_body","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"call_signature","named":true},{"type":"construct_signature","named":true},{"type":"export_statement","named":true},{"type":"index_signature","named":true},{"type":"method_signature","named":true},{"type":"property_signature","named":true}]}},{"type":"interface_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"interface_body","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"extends_type_clause","named":true}]}},{"type":"internal_module","named":true,"fields":{"body":{"multiple":false,"required":false,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"nested_identifier","named":true},{"type":"string","named":true}]}}},{"type":"intersection_type","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true}]}},{"type":"labeled_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"label":{"multiple":false,"required":true,"types":[{"type":"statement_identifier","named":true}]}}},{"type":"lexical_declaration","named":true,"fields":{"kind":{"multiple":false,"required":true,"types":[{"type":"const","named":false},{"type":"let","named":false}]}},"children":{"multiple":true,"required":true,"types":[{"type":"variable_declarator","named":true}]}},{"type":"literal_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"false","named":true},{"type":"null","named":true},{"type":"number","named":true},{"type":"string","named":true},{"type":"true","named":true},{"type":"unary_expression","named":true},{"type":"undefined","named":true}]}},{"type":"lookup_type","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true}]}},{"type":"mapped_type_clause","named":true,"fields":{"alias":{"multiple":false,"required":false,"types":[{"type":"type","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"type":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}}},{"type":"member_expression","named":true,"fields":{"object":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"import","named":true}]},"optional_chain":{"multiple":false,"required":false,"types":[{"type":"optional_chain","named":true}]},"property":{"multiple":false,"required":true,"types":[{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true}]}}},{"type":"meta_property","named":true,"fields":{}},{"type":"method_definition","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"method_signature","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"module","named":true,"fields":{"body":{"multiple":false,"required":false,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"nested_identifier","named":true},{"type":"string","named":true}]}}},{"type":"named_imports","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"import_specifier","named":true}]}},{"type":"namespace_export","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"string","named":true}]}},{"type":"namespace_import","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]}},{"type":"nested_identifier","named":true,"fields":{"object":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"member_expression","named":true}]},"property":{"multiple":false,"required":true,"types":[{"type":"property_identifier","named":true}]}}},{"type":"nested_type_identifier","named":true,"fields":{"module":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"nested_identifier","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]}}},{"type":"new_expression","named":true,"fields":{"arguments":{"multiple":false,"required":false,"types":[{"type":"arguments","named":true}]},"constructor":{"multiple":false,"required":true,"types":[{"type":"primary_expression","named":true}]},"type_arguments":{"multiple":false,"required":false,"types":[{"type":"type_arguments","named":true}]}}},{"type":"non_null_expression","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}},{"type":"object","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"method_definition","named":true},{"type":"pair","named":true},{"type":"shorthand_property_identifier","named":true},{"type":"spread_element","named":true}]}},{"type":"object_assignment_pattern","named":true,"fields":{"left":{"multiple":false,"required":true,"types":[{"type":"array_pattern","named":true},{"type":"object_pattern","named":true},{"type":"shorthand_property_identifier_pattern","named":true}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"object_pattern","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"object_assignment_pattern","named":true},{"type":"pair_pattern","named":true},{"type":"rest_pattern","named":true},{"type":"shorthand_property_identifier_pattern","named":true}]}},{"type":"object_type","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"call_signature","named":true},{"type":"construct_signature","named":true},{"type":"export_statement","named":true},{"type":"index_signature","named":true},{"type":"method_signature","named":true},{"type":"property_signature","named":true}]}},{"type":"omitting_type_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"opting_type_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"optional_chain","named":true,"fields":{}},{"type":"optional_parameter","named":true,"fields":{"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"pattern":{"multiple":false,"required":false,"types":[{"type":"pattern","named":true},{"type":"this","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"optional_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"override_modifier","named":true,"fields":{}},{"type":"pair","named":true,"fields":{"key":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"pair_pattern","named":true,"fields":{"key":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"assignment_pattern","named":true},{"type":"pattern","named":true}]}}},{"type":"parenthesized_expression","named":true,"fields":{"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]}},"children":{"multiple":false,"required":true,"types":[{"type":"call_expression","named":true},{"type":"expression","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"sequence_expression","named":true}]}},{"type":"parenthesized_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"predefined_type","named":true,"fields":{}},{"type":"program","named":true,"root":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"hash_bang_line","named":true},{"type":"statement","named":true}]}},{"type":"property_signature","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"public_field_definition","named":true,"fields":{"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"readonly_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"regex","named":true,"fields":{"flags":{"multiple":false,"required":false,"types":[{"type":"regex_flags","named":true}]},"pattern":{"multiple":false,"required":true,"types":[{"type":"regex_pattern","named":true}]}}},{"type":"required_parameter","named":true,"fields":{"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true},{"type":"rest_pattern","named":true}]},"pattern":{"multiple":false,"required":false,"types":[{"type":"pattern","named":true},{"type":"this","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"rest_pattern","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"non_null_expression","named":true},{"type":"object_pattern","named":true},{"type":"subscript_expression","named":true},{"type":"undefined","named":true}]}},{"type":"rest_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"return_statement","named":true,"fields":{},"children":{"multiple":false,"required":false,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]}},{"type":"satisfies_expression","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"expression","named":true},{"type":"type","named":true}]}},{"type":"sequence_expression","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"expression","named":true}]}},{"type":"spread_element","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}},{"type":"statement_block","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"statement","named":true}]}},{"type":"string","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"escape_sequence","named":true},{"type":"string_fragment","named":true}]}},{"type":"subscript_expression","named":true,"fields":{"index":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"number","named":true},{"type":"predefined_type","named":true},{"type":"sequence_expression","named":true},{"type":"string","named":true}]},"object":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]},"optional_chain":{"multiple":false,"required":false,"types":[{"type":"optional_chain","named":true}]}}},{"type":"switch_body","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"switch_case","named":true},{"type":"switch_default","named":true}]}},{"type":"switch_case","named":true,"fields":{"body":{"multiple":true,"required":false,"types":[{"type":"statement","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]}}},{"type":"switch_default","named":true,"fields":{"body":{"multiple":true,"required":false,"types":[{"type":"statement","named":true}]}}},{"type":"switch_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"switch_body","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"parenthesized_expression","named":true}]}}},{"type":"template_literal_type","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"string_fragment","named":true},{"type":"template_type","named":true}]}},{"type":"template_string","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"escape_sequence","named":true},{"type":"string_fragment","named":true},{"type":"template_substitution","named":true}]}},{"type":"template_substitution","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]}},{"type":"template_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"infer_type","named":true},{"type":"primary_type","named":true}]}},{"type":"ternary_expression","named":true,"fields":{"alternative":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]},"condition":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]},"consequence":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"throw_statement","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]}},{"type":"try_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"finalizer":{"multiple":false,"required":false,"types":[{"type":"finally_clause","named":true}]},"handler":{"multiple":false,"required":false,"types":[{"type":"catch_clause","named":true}]}}},{"type":"tuple_type","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"optional_parameter","named":true},{"type":"optional_type","named":true},{"type":"required_parameter","named":true},{"type":"rest_type","named":true},{"type":"type","named":true}]}},{"type":"type_alias_declaration","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}}},{"type":"type_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"type_arguments","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true}]}},{"type":"type_assertion","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"expression","named":true},{"type":"type_arguments","named":true}]}},{"type":"type_parameter","named":true,"fields":{"constraint":{"multiple":false,"required":false,"types":[{"type":"constraint","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"default_type","named":true}]}}},{"type":"type_parameters","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type_parameter","named":true}]}},{"type":"type_predicate","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"this","named":true}]},"type":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}}},{"type":"type_predicate_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type_predicate","named":true}]}},{"type":"type_query","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"call_expression","named":true},{"type":"identifier","named":true},{"type":"instantiation_expression","named":true},{"type":"member_expression","named":true},{"type":"subscript_expression","named":true},{"type":"this","named":true}]}},{"type":"unary_expression","named":true,"fields":{"argument":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"number","named":true}]},"operator":{"multiple":false,"required":true,"types":[{"type":"!","named":false},{"type":"+","named":false},{"type":"-","named":false},{"type":"delete","named":false},{"type":"typeof","named":false},{"type":"void","named":false},{"type":"~","named":false}]}}},{"type":"union_type","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true}]}},{"type":"update_expression","named":true,"fields":{"argument":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]},"operator":{"multiple":false,"required":true,"types":[{"type":"++","named":false},{"type":"--","named":false}]}}},{"type":"variable_declaration","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"variable_declarator","named":true}]}},{"type":"variable_declarator","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"object_pattern","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}}},{"type":"while_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"condition":{"multiple":false,"required":true,"types":[{"type":"parenthesized_expression","named":true}]}}},{"type":"with_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"object":{"multiple":false,"required":true,"types":[{"type":"parenthesized_expression","named":true}]}}},{"type":"yield_expression","named":true,"fields":{},"children":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},{"type":"!","named":false},{"type":"!=","named":false},{"type":"!==","named":false},{"type":"\\"","named":false},{"type":"${","named":false},{"type":"%","named":false},{"type":"%=","named":false},{"type":"&","named":false},{"type":"&&","named":false},{"type":"&&=","named":false},{"type":"&=","named":false},{"type":"\'","named":false},{"type":"(","named":false},{"type":")","named":false},{"type":"*","named":false},{"type":"**","named":false},{"type":"**=","named":false},{"type":"*=","named":false},{"type":"+","named":false},{"type":"++","named":false},{"type":"+=","named":false},{"type":"+?:","named":false},{"type":",","named":false},{"type":"-","named":false},{"type":"--","named":false},{"type":"-=","named":false},{"type":"-?:","named":false},{"type":".","named":false},{"type":"...","named":false},{"type":"/","named":false},{"type":"/=","named":false},{"type":":","named":false},{"type":";","named":false},{"type":"<","named":false},{"type":"<<","named":false},{"type":"<<=","named":false},{"type":"<=","named":false},{"type":"=","named":false},{"type":"==","named":false},{"type":"===","named":false},{"type":"=>","named":false},{"type":">","named":false},{"type":">=","named":false},{"type":">>","named":false},{"type":">>=","named":false},{"type":">>>","named":false},{"type":">>>=","named":false},{"type":"?","named":false},{"type":"?.","named":false},{"type":"?:","named":false},{"type":"??","named":false},{"type":"??=","named":false},{"type":"@","named":false},{"type":"[","named":false},{"type":"]","named":false},{"type":"^","named":false},{"type":"^=","named":false},{"type":"`","named":false},{"type":"abstract","named":false},{"type":"accessor","named":false},{"type":"any","named":false},{"type":"as","named":false},{"type":"assert","named":false},{"type":"asserts","named":false},{"type":"async","named":false},{"type":"await","named":false},{"type":"boolean","named":false},{"type":"break","named":false},{"type":"case","named":false},{"type":"catch","named":false},{"type":"class","named":false},{"type":"comment","named":true},{"type":"const","named":false},{"type":"continue","named":false},{"type":"debugger","named":false},{"type":"declare","named":false},{"type":"default","named":false},{"type":"delete","named":false},{"type":"do","named":false},{"type":"else","named":false},{"type":"enum","named":false},{"type":"escape_sequence","named":true},{"type":"export","named":false},{"type":"extends","named":false},{"type":"false","named":true},{"type":"finally","named":false},{"type":"for","named":false},{"type":"from","named":false},{"type":"function","named":false},{"type":"get","named":false},{"type":"global","named":false},{"type":"hash_bang_line","named":true},{"type":"html_comment","named":true},{"type":"if","named":false},{"type":"implements","named":false},{"type":"import","named":false},{"type":"in","named":false},{"type":"infer","named":false},{"type":"instanceof","named":false},{"type":"interface","named":false},{"type":"is","named":false},{"type":"keyof","named":false},{"type":"let","named":false},{"type":"meta","named":false},{"type":"module","named":false},{"type":"namespace","named":false},{"type":"never","named":false},{"type":"new","named":false},{"type":"null","named":true},{"type":"number","named":true},{"type":"number","named":false},{"type":"object","named":false},{"type":"of","named":false},{"type":"override","named":false},{"type":"private","named":false},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"protected","named":false},{"type":"public","named":false},{"type":"readonly","named":false},{"type":"regex_flags","named":true},{"type":"regex_pattern","named":true},{"type":"require","named":false},{"type":"return","named":false},{"type":"satisfies","named":false},{"type":"set","named":false},{"type":"shorthand_property_identifier","named":true},{"type":"shorthand_property_identifier_pattern","named":true},{"type":"statement_identifier","named":true},{"type":"static","named":false},{"type":"string","named":false},{"type":"string_fragment","named":true},{"type":"super","named":true},{"type":"switch","named":false},{"type":"symbol","named":false},{"type":"target","named":false},{"type":"this","named":true},{"type":"this_type","named":true},{"type":"throw","named":false},{"type":"true","named":true},{"type":"try","named":false},{"type":"type","named":false},{"type":"type_identifier","named":true},{"type":"typeof","named":false},{"type":"undefined","named":true},{"type":"unique symbol","named":false},{"type":"unknown","named":false},{"type":"using","named":false},{"type":"var","named":false},{"type":"void","named":false},{"type":"while","named":false},{"type":"with","named":false},{"type":"yield","named":false},{"type":"{","named":false},{"type":"{|","named":false},{"type":"|","named":false},{"type":"|=","named":false},{"type":"||","named":false},{"type":"||=","named":false},{"type":"|}","named":false},{"type":"}","named":false},{"type":"~","named":false}]'), Ct = /* @__PURE__ */ JSON.parse('[{"type":"declaration","named":true,"subtypes":[{"type":"abstract_class_declaration","named":true},{"type":"ambient_declaration","named":true},{"type":"class_declaration","named":true},{"type":"enum_declaration","named":true},{"type":"function_declaration","named":true},{"type":"function_signature","named":true},{"type":"generator_function_declaration","named":true},{"type":"import_alias","named":true},{"type":"interface_declaration","named":true},{"type":"internal_module","named":true},{"type":"lexical_declaration","named":true},{"type":"module","named":true},{"type":"type_alias_declaration","named":true},{"type":"variable_declaration","named":true}]},{"type":"expression","named":true,"subtypes":[{"type":"as_expression","named":true},{"type":"assignment_expression","named":true},{"type":"augmented_assignment_expression","named":true},{"type":"await_expression","named":true},{"type":"binary_expression","named":true},{"type":"instantiation_expression","named":true},{"type":"internal_module","named":true},{"type":"jsx_element","named":true},{"type":"jsx_self_closing_element","named":true},{"type":"new_expression","named":true},{"type":"primary_expression","named":true},{"type":"satisfies_expression","named":true},{"type":"ternary_expression","named":true},{"type":"unary_expression","named":true},{"type":"update_expression","named":true},{"type":"yield_expression","named":true}]},{"type":"pattern","named":true,"subtypes":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"non_null_expression","named":true},{"type":"object_pattern","named":true},{"type":"rest_pattern","named":true},{"type":"subscript_expression","named":true},{"type":"undefined","named":true}]},{"type":"primary_expression","named":true,"subtypes":[{"type":"array","named":true},{"type":"arrow_function","named":true},{"type":"call_expression","named":true},{"type":"class","named":true},{"type":"false","named":true},{"type":"function_expression","named":true},{"type":"generator_function","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"meta_property","named":true},{"type":"non_null_expression","named":true},{"type":"null","named":true},{"type":"number","named":true},{"type":"object","named":true},{"type":"parenthesized_expression","named":true},{"type":"regex","named":true},{"type":"string","named":true},{"type":"subscript_expression","named":true},{"type":"super","named":true},{"type":"template_string","named":true},{"type":"this","named":true},{"type":"true","named":true},{"type":"undefined","named":true}]},{"type":"primary_type","named":true,"subtypes":[{"type":"array_type","named":true},{"type":"conditional_type","named":true},{"type":"const","named":false},{"type":"existential_type","named":true},{"type":"flow_maybe_type","named":true},{"type":"generic_type","named":true},{"type":"index_type_query","named":true},{"type":"intersection_type","named":true},{"type":"literal_type","named":true},{"type":"lookup_type","named":true},{"type":"nested_type_identifier","named":true},{"type":"object_type","named":true},{"type":"parenthesized_type","named":true},{"type":"predefined_type","named":true},{"type":"template_literal_type","named":true},{"type":"this_type","named":true},{"type":"tuple_type","named":true},{"type":"type_identifier","named":true},{"type":"type_query","named":true},{"type":"union_type","named":true}]},{"type":"statement","named":true,"subtypes":[{"type":"break_statement","named":true},{"type":"continue_statement","named":true},{"type":"debugger_statement","named":true},{"type":"declaration","named":true},{"type":"do_statement","named":true},{"type":"empty_statement","named":true},{"type":"export_statement","named":true},{"type":"expression_statement","named":true},{"type":"for_in_statement","named":true},{"type":"for_statement","named":true},{"type":"if_statement","named":true},{"type":"import_statement","named":true},{"type":"labeled_statement","named":true},{"type":"return_statement","named":true},{"type":"statement_block","named":true},{"type":"switch_statement","named":true},{"type":"throw_statement","named":true},{"type":"try_statement","named":true},{"type":"while_statement","named":true},{"type":"with_statement","named":true}]},{"type":"type","named":true,"subtypes":[{"type":"call_expression","named":true},{"type":"constructor_type","named":true},{"type":"function_type","named":true},{"type":"infer_type","named":true},{"type":"member_expression","named":true},{"type":"primary_type","named":true},{"type":"readonly_type","named":true}]},{"type":"abstract_class_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"class_body","named":true}]},"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"class_heritage","named":true}]}},{"type":"abstract_method_signature","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"accessibility_modifier","named":true,"fields":{}},{"type":"adding_type_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"ambient_declaration","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"declaration","named":true},{"type":"property_identifier","named":true},{"type":"statement_block","named":true},{"type":"type","named":true}]}},{"type":"arguments","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"expression","named":true},{"type":"spread_element","named":true}]}},{"type":"array","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"expression","named":true},{"type":"spread_element","named":true}]}},{"type":"array_pattern","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"assignment_pattern","named":true},{"type":"pattern","named":true}]}},{"type":"array_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"primary_type","named":true}]}},{"type":"arrow_function","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"statement_block","named":true}]},"parameter":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":false,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"as_expression","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"expression","named":true},{"type":"type","named":true}]}},{"type":"asserts","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"this","named":true},{"type":"type_predicate","named":true}]}},{"type":"asserts_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"asserts","named":true}]}},{"type":"assignment_expression","named":true,"fields":{"left":{"multiple":false,"required":true,"types":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"non_null_expression","named":true},{"type":"object_pattern","named":true},{"type":"parenthesized_expression","named":true},{"type":"subscript_expression","named":true},{"type":"undefined","named":true}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"assignment_pattern","named":true,"fields":{"left":{"multiple":false,"required":true,"types":[{"type":"pattern","named":true}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"augmented_assignment_expression","named":true,"fields":{"left":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"non_null_expression","named":true},{"type":"parenthesized_expression","named":true},{"type":"subscript_expression","named":true}]},"operator":{"multiple":false,"required":true,"types":[{"type":"%=","named":false},{"type":"&&=","named":false},{"type":"&=","named":false},{"type":"**=","named":false},{"type":"*=","named":false},{"type":"+=","named":false},{"type":"-=","named":false},{"type":"/=","named":false},{"type":"<<=","named":false},{"type":">>=","named":false},{"type":">>>=","named":false},{"type":"??=","named":false},{"type":"^=","named":false},{"type":"|=","named":false},{"type":"||=","named":false}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"await_expression","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}},{"type":"binary_expression","named":true,"fields":{"left":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"private_property_identifier","named":true}]},"operator":{"multiple":false,"required":true,"types":[{"type":"!=","named":false},{"type":"!==","named":false},{"type":"%","named":false},{"type":"&","named":false},{"type":"&&","named":false},{"type":"*","named":false},{"type":"**","named":false},{"type":"+","named":false},{"type":"-","named":false},{"type":"/","named":false},{"type":"<","named":false},{"type":"<<","named":false},{"type":"<=","named":false},{"type":"==","named":false},{"type":"===","named":false},{"type":">","named":false},{"type":">=","named":false},{"type":">>","named":false},{"type":">>>","named":false},{"type":"??","named":false},{"type":"^","named":false},{"type":"in","named":false},{"type":"instanceof","named":false},{"type":"|","named":false},{"type":"||","named":false}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"break_statement","named":true,"fields":{"label":{"multiple":false,"required":false,"types":[{"type":"statement_identifier","named":true}]}}},{"type":"call_expression","named":true,"fields":{"arguments":{"multiple":false,"required":true,"types":[{"type":"arguments","named":true},{"type":"template_string","named":true}]},"function":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"import","named":true}]},"type_arguments":{"multiple":false,"required":false,"types":[{"type":"type_arguments","named":true}]}}},{"type":"call_signature","named":true,"fields":{"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"catch_clause","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"parameter":{"multiple":false,"required":false,"types":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"object_pattern","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]}}},{"type":"class","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"class_body","named":true}]},"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"type_identifier","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"class_heritage","named":true}]}},{"type":"class_body","named":true,"fields":{"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"abstract_method_signature","named":true},{"type":"class_static_block","named":true},{"type":"index_signature","named":true},{"type":"method_definition","named":true},{"type":"method_signature","named":true},{"type":"public_field_definition","named":true}]}},{"type":"class_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"class_body","named":true}]},"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"class_heritage","named":true}]}},{"type":"class_heritage","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"extends_clause","named":true},{"type":"implements_clause","named":true}]}},{"type":"class_static_block","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]}}},{"type":"computed_property_name","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}},{"type":"conditional_type","named":true,"fields":{"alternative":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]},"consequence":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]},"left":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]},"right":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}}},{"type":"constraint","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"construct_signature","named":true,"fields":{"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"constructor_type","named":true,"fields":{"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"type":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"continue_statement","named":true,"fields":{"label":{"multiple":false,"required":false,"types":[{"type":"statement_identifier","named":true}]}}},{"type":"debugger_statement","named":true,"fields":{}},{"type":"decorator","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"call_expression","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"parenthesized_expression","named":true}]}},{"type":"default_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"do_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"condition":{"multiple":false,"required":true,"types":[{"type":"parenthesized_expression","named":true}]}}},{"type":"else_clause","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]}},{"type":"empty_statement","named":true,"fields":{}},{"type":"enum_assignment","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"enum_body","named":true,"fields":{"name":{"multiple":true,"required":false,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"enum_assignment","named":true}]}},{"type":"enum_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"enum_body","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]}}},{"type":"existential_type","named":true,"fields":{}},{"type":"export_clause","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"export_specifier","named":true}]}},{"type":"export_specifier","named":true,"fields":{"alias":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true},{"type":"string","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"string","named":true}]}}},{"type":"export_statement","named":true,"fields":{"declaration":{"multiple":false,"required":false,"types":[{"type":"declaration","named":true}]},"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"source":{"multiple":false,"required":false,"types":[{"type":"string","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"export_clause","named":true},{"type":"expression","named":true},{"type":"identifier","named":true},{"type":"namespace_export","named":true}]}},{"type":"expression_statement","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]}},{"type":"extends_clause","named":true,"fields":{"type_arguments":{"multiple":true,"required":false,"types":[{"type":"type_arguments","named":true}]},"value":{"multiple":true,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"extends_type_clause","named":true,"fields":{"type":{"multiple":true,"required":true,"types":[{"type":"generic_type","named":true},{"type":"nested_type_identifier","named":true},{"type":"type_identifier","named":true}]}}},{"type":"finally_clause","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]}}},{"type":"flow_maybe_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"primary_type","named":true}]}},{"type":"for_in_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"kind":{"multiple":false,"required":false,"types":[{"type":"const","named":false},{"type":"let","named":false},{"type":"var","named":false}]},"left":{"multiple":false,"required":true,"types":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"non_null_expression","named":true},{"type":"object_pattern","named":true},{"type":"parenthesized_expression","named":true},{"type":"subscript_expression","named":true},{"type":"undefined","named":true}]},"operator":{"multiple":false,"required":true,"types":[{"type":"in","named":false},{"type":"of","named":false}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}}},{"type":"for_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"condition":{"multiple":true,"required":true,"types":[{"type":";","named":false},{"type":"empty_statement","named":true},{"type":"expression","named":true},{"type":"sequence_expression","named":true}]},"increment":{"multiple":false,"required":false,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]},"initializer":{"multiple":false,"required":true,"types":[{"type":"empty_statement","named":true},{"type":"expression","named":true},{"type":"lexical_declaration","named":true},{"type":"sequence_expression","named":true},{"type":"variable_declaration","named":true}]}}},{"type":"formal_parameters","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"optional_parameter","named":true},{"type":"required_parameter","named":true}]}},{"type":"function_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"function_expression","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"function_signature","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"function_type","named":true,"fields":{"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":true,"types":[{"type":"asserts","named":true},{"type":"type","named":true},{"type":"type_predicate","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"generator_function","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"generator_function_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}}},{"type":"generic_type","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"nested_type_identifier","named":true},{"type":"type_identifier","named":true}]},"type_arguments":{"multiple":false,"required":true,"types":[{"type":"type_arguments","named":true}]}}},{"type":"identifier","named":true,"fields":{}},{"type":"if_statement","named":true,"fields":{"alternative":{"multiple":false,"required":false,"types":[{"type":"else_clause","named":true}]},"condition":{"multiple":false,"required":true,"types":[{"type":"parenthesized_expression","named":true}]},"consequence":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]}}},{"type":"implements_clause","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true}]}},{"type":"import","named":true,"fields":{}},{"type":"import_alias","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"identifier","named":true},{"type":"nested_identifier","named":true}]}},{"type":"import_attribute","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"object","named":true}]}},{"type":"import_clause","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"identifier","named":true},{"type":"named_imports","named":true},{"type":"namespace_import","named":true}]}},{"type":"import_require_clause","named":true,"fields":{"source":{"multiple":false,"required":true,"types":[{"type":"string","named":true}]}},"children":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]}},{"type":"import_specifier","named":true,"fields":{"alias":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"string","named":true}]}}},{"type":"import_statement","named":true,"fields":{"source":{"multiple":false,"required":false,"types":[{"type":"string","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"import_attribute","named":true},{"type":"import_clause","named":true},{"type":"import_require_clause","named":true}]}},{"type":"index_signature","named":true,"fields":{"index_type":{"multiple":false,"required":false,"types":[{"type":"type","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"sign":{"multiple":false,"required":false,"types":[{"type":"+","named":false},{"type":"-","named":false}]},"type":{"multiple":false,"required":true,"types":[{"type":"adding_type_annotation","named":true},{"type":"omitting_type_annotation","named":true},{"type":"opting_type_annotation","named":true},{"type":"type_annotation","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"mapped_type_clause","named":true}]}},{"type":"index_type_query","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"primary_type","named":true}]}},{"type":"infer_type","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true},{"type":"type_identifier","named":true}]}},{"type":"instantiation_expression","named":true,"fields":{"function":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true},{"type":"import","named":true},{"type":"member_expression","named":true},{"type":"subscript_expression","named":true}]},"type_arguments":{"multiple":false,"required":true,"types":[{"type":"type_arguments","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},{"type":"interface_body","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"call_signature","named":true},{"type":"construct_signature","named":true},{"type":"export_statement","named":true},{"type":"index_signature","named":true},{"type":"method_signature","named":true},{"type":"property_signature","named":true}]}},{"type":"interface_declaration","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"interface_body","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":false,"required":false,"types":[{"type":"extends_type_clause","named":true}]}},{"type":"internal_module","named":true,"fields":{"body":{"multiple":false,"required":false,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"nested_identifier","named":true},{"type":"string","named":true}]}}},{"type":"intersection_type","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true}]}},{"type":"jsx_attribute","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"jsx_element","named":true},{"type":"jsx_expression","named":true},{"type":"jsx_namespace_name","named":true},{"type":"jsx_self_closing_element","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]}},{"type":"jsx_closing_element","named":true,"fields":{"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true},{"type":"jsx_namespace_name","named":true},{"type":"member_expression","named":true}]}}},{"type":"jsx_element","named":true,"fields":{"close_tag":{"multiple":false,"required":true,"types":[{"type":"jsx_closing_element","named":true}]},"open_tag":{"multiple":false,"required":true,"types":[{"type":"jsx_opening_element","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"html_character_reference","named":true},{"type":"jsx_element","named":true},{"type":"jsx_expression","named":true},{"type":"jsx_self_closing_element","named":true},{"type":"jsx_text","named":true}]}},{"type":"jsx_expression","named":true,"fields":{},"children":{"multiple":false,"required":false,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true},{"type":"spread_element","named":true}]}},{"type":"jsx_namespace_name","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"identifier","named":true}]}},{"type":"jsx_opening_element","named":true,"fields":{"attribute":{"multiple":true,"required":false,"types":[{"type":"jsx_attribute","named":true},{"type":"jsx_expression","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true},{"type":"jsx_namespace_name","named":true},{"type":"member_expression","named":true}]},"type_arguments":{"multiple":false,"required":false,"types":[{"type":"type_arguments","named":true}]}}},{"type":"jsx_self_closing_element","named":true,"fields":{"attribute":{"multiple":true,"required":false,"types":[{"type":"jsx_attribute","named":true},{"type":"jsx_expression","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true},{"type":"jsx_namespace_name","named":true},{"type":"member_expression","named":true}]},"type_arguments":{"multiple":false,"required":false,"types":[{"type":"type_arguments","named":true}]}}},{"type":"labeled_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"label":{"multiple":false,"required":true,"types":[{"type":"statement_identifier","named":true}]}}},{"type":"lexical_declaration","named":true,"fields":{"kind":{"multiple":false,"required":true,"types":[{"type":"const","named":false},{"type":"let","named":false}]}},"children":{"multiple":true,"required":true,"types":[{"type":"variable_declarator","named":true}]}},{"type":"literal_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"false","named":true},{"type":"null","named":true},{"type":"number","named":true},{"type":"string","named":true},{"type":"true","named":true},{"type":"unary_expression","named":true},{"type":"undefined","named":true}]}},{"type":"lookup_type","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true}]}},{"type":"mapped_type_clause","named":true,"fields":{"alias":{"multiple":false,"required":false,"types":[{"type":"type","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"type":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}}},{"type":"member_expression","named":true,"fields":{"object":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"import","named":true}]},"optional_chain":{"multiple":false,"required":false,"types":[{"type":"optional_chain","named":true}]},"property":{"multiple":false,"required":true,"types":[{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true}]}}},{"type":"meta_property","named":true,"fields":{}},{"type":"method_definition","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"method_signature","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"parameters":{"multiple":false,"required":true,"types":[{"type":"formal_parameters","named":true}]},"return_type":{"multiple":false,"required":false,"types":[{"type":"asserts_annotation","named":true},{"type":"type_annotation","named":true},{"type":"type_predicate_annotation","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"module","named":true,"fields":{"body":{"multiple":false,"required":false,"types":[{"type":"statement_block","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"nested_identifier","named":true},{"type":"string","named":true}]}}},{"type":"named_imports","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"import_specifier","named":true}]}},{"type":"namespace_export","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"string","named":true}]}},{"type":"namespace_import","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true}]}},{"type":"nested_identifier","named":true,"fields":{"object":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"member_expression","named":true}]},"property":{"multiple":false,"required":true,"types":[{"type":"property_identifier","named":true}]}}},{"type":"nested_type_identifier","named":true,"fields":{"module":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"nested_identifier","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]}}},{"type":"new_expression","named":true,"fields":{"arguments":{"multiple":false,"required":false,"types":[{"type":"arguments","named":true}]},"constructor":{"multiple":false,"required":true,"types":[{"type":"primary_expression","named":true}]},"type_arguments":{"multiple":false,"required":false,"types":[{"type":"type_arguments","named":true}]}}},{"type":"non_null_expression","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}},{"type":"object","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"method_definition","named":true},{"type":"pair","named":true},{"type":"shorthand_property_identifier","named":true},{"type":"spread_element","named":true}]}},{"type":"object_assignment_pattern","named":true,"fields":{"left":{"multiple":false,"required":true,"types":[{"type":"array_pattern","named":true},{"type":"object_pattern","named":true},{"type":"shorthand_property_identifier_pattern","named":true}]},"right":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"object_pattern","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"object_assignment_pattern","named":true},{"type":"pair_pattern","named":true},{"type":"rest_pattern","named":true},{"type":"shorthand_property_identifier_pattern","named":true}]}},{"type":"object_type","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"call_signature","named":true},{"type":"construct_signature","named":true},{"type":"export_statement","named":true},{"type":"index_signature","named":true},{"type":"method_signature","named":true},{"type":"property_signature","named":true}]}},{"type":"omitting_type_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"opting_type_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"optional_chain","named":true,"fields":{}},{"type":"optional_parameter","named":true,"fields":{"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true}]},"pattern":{"multiple":false,"required":false,"types":[{"type":"pattern","named":true},{"type":"this","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"optional_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"override_modifier","named":true,"fields":{}},{"type":"pair","named":true,"fields":{"key":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"pair_pattern","named":true,"fields":{"key":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"assignment_pattern","named":true},{"type":"pattern","named":true}]}}},{"type":"parenthesized_expression","named":true,"fields":{"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]}},"children":{"multiple":false,"required":true,"types":[{"type":"call_expression","named":true},{"type":"expression","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"sequence_expression","named":true}]}},{"type":"parenthesized_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"predefined_type","named":true,"fields":{}},{"type":"program","named":true,"root":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"hash_bang_line","named":true},{"type":"statement","named":true}]}},{"type":"property_signature","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"public_field_definition","named":true,"fields":{"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"computed_property_name","named":true},{"type":"number","named":true},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"string","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"readonly_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"regex","named":true,"fields":{"flags":{"multiple":false,"required":false,"types":[{"type":"regex_flags","named":true}]},"pattern":{"multiple":false,"required":true,"types":[{"type":"regex_pattern","named":true}]}}},{"type":"required_parameter","named":true,"fields":{"decorator":{"multiple":true,"required":false,"types":[{"type":"decorator","named":true}]},"name":{"multiple":false,"required":false,"types":[{"type":"identifier","named":true},{"type":"rest_pattern","named":true}]},"pattern":{"multiple":false,"required":false,"types":[{"type":"pattern","named":true},{"type":"this","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},"children":{"multiple":true,"required":false,"types":[{"type":"accessibility_modifier","named":true},{"type":"override_modifier","named":true}]}},{"type":"rest_pattern","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"member_expression","named":true},{"type":"non_null_expression","named":true},{"type":"object_pattern","named":true},{"type":"subscript_expression","named":true},{"type":"undefined","named":true}]}},{"type":"rest_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"return_statement","named":true,"fields":{},"children":{"multiple":false,"required":false,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]}},{"type":"satisfies_expression","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"expression","named":true},{"type":"type","named":true}]}},{"type":"sequence_expression","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"expression","named":true}]}},{"type":"spread_element","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}},{"type":"statement_block","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"statement","named":true}]}},{"type":"string","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"escape_sequence","named":true},{"type":"html_character_reference","named":true},{"type":"string_fragment","named":true}]}},{"type":"subscript_expression","named":true,"fields":{"index":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"number","named":true},{"type":"predefined_type","named":true},{"type":"sequence_expression","named":true},{"type":"string","named":true}]},"object":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]},"optional_chain":{"multiple":false,"required":false,"types":[{"type":"optional_chain","named":true}]}}},{"type":"switch_body","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"switch_case","named":true},{"type":"switch_default","named":true}]}},{"type":"switch_case","named":true,"fields":{"body":{"multiple":true,"required":false,"types":[{"type":"statement","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]}}},{"type":"switch_default","named":true,"fields":{"body":{"multiple":true,"required":false,"types":[{"type":"statement","named":true}]}}},{"type":"switch_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"switch_body","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"parenthesized_expression","named":true}]}}},{"type":"template_literal_type","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"string_fragment","named":true},{"type":"template_type","named":true}]}},{"type":"template_string","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"escape_sequence","named":true},{"type":"string_fragment","named":true},{"type":"template_substitution","named":true}]}},{"type":"template_substitution","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]}},{"type":"template_type","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"infer_type","named":true},{"type":"primary_type","named":true}]}},{"type":"ternary_expression","named":true,"fields":{"alternative":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]},"condition":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]},"consequence":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]}}},{"type":"throw_statement","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"sequence_expression","named":true}]}},{"type":"try_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement_block","named":true}]},"finalizer":{"multiple":false,"required":false,"types":[{"type":"finally_clause","named":true}]},"handler":{"multiple":false,"required":false,"types":[{"type":"catch_clause","named":true}]}}},{"type":"tuple_type","named":true,"fields":{},"children":{"multiple":true,"required":false,"types":[{"type":"optional_parameter","named":true},{"type":"optional_type","named":true},{"type":"required_parameter","named":true},{"type":"rest_type","named":true},{"type":"type","named":true}]}},{"type":"type_alias_declaration","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"type_parameters":{"multiple":false,"required":false,"types":[{"type":"type_parameters","named":true}]},"value":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}}},{"type":"type_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}},{"type":"type_arguments","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true}]}},{"type":"type_parameter","named":true,"fields":{"constraint":{"multiple":false,"required":false,"types":[{"type":"constraint","named":true}]},"name":{"multiple":false,"required":true,"types":[{"type":"type_identifier","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"default_type","named":true}]}}},{"type":"type_parameters","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type_parameter","named":true}]}},{"type":"type_predicate","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"identifier","named":true},{"type":"this","named":true}]},"type":{"multiple":false,"required":true,"types":[{"type":"type","named":true}]}}},{"type":"type_predicate_annotation","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"type_predicate","named":true}]}},{"type":"type_query","named":true,"fields":{},"children":{"multiple":false,"required":true,"types":[{"type":"call_expression","named":true},{"type":"identifier","named":true},{"type":"instantiation_expression","named":true},{"type":"member_expression","named":true},{"type":"subscript_expression","named":true},{"type":"this","named":true}]}},{"type":"unary_expression","named":true,"fields":{"argument":{"multiple":false,"required":true,"types":[{"type":"expression","named":true},{"type":"number","named":true}]},"operator":{"multiple":false,"required":true,"types":[{"type":"!","named":false},{"type":"+","named":false},{"type":"-","named":false},{"type":"delete","named":false},{"type":"typeof","named":false},{"type":"void","named":false},{"type":"~","named":false}]}}},{"type":"union_type","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"type","named":true}]}},{"type":"update_expression","named":true,"fields":{"argument":{"multiple":false,"required":true,"types":[{"type":"expression","named":true}]},"operator":{"multiple":false,"required":true,"types":[{"type":"++","named":false},{"type":"--","named":false}]}}},{"type":"variable_declaration","named":true,"fields":{},"children":{"multiple":true,"required":true,"types":[{"type":"variable_declarator","named":true}]}},{"type":"variable_declarator","named":true,"fields":{"name":{"multiple":false,"required":true,"types":[{"type":"array_pattern","named":true},{"type":"identifier","named":true},{"type":"object_pattern","named":true}]},"type":{"multiple":false,"required":false,"types":[{"type":"type_annotation","named":true}]},"value":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}}},{"type":"while_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"condition":{"multiple":false,"required":true,"types":[{"type":"parenthesized_expression","named":true}]}}},{"type":"with_statement","named":true,"fields":{"body":{"multiple":false,"required":true,"types":[{"type":"statement","named":true}]},"object":{"multiple":false,"required":true,"types":[{"type":"parenthesized_expression","named":true}]}}},{"type":"yield_expression","named":true,"fields":{},"children":{"multiple":false,"required":false,"types":[{"type":"expression","named":true}]}},{"type":"!","named":false},{"type":"!=","named":false},{"type":"!==","named":false},{"type":"\\"","named":false},{"type":"${","named":false},{"type":"%","named":false},{"type":"%=","named":false},{"type":"&","named":false},{"type":"&&","named":false},{"type":"&&=","named":false},{"type":"&=","named":false},{"type":"\'","named":false},{"type":"(","named":false},{"type":")","named":false},{"type":"*","named":false},{"type":"**","named":false},{"type":"**=","named":false},{"type":"*=","named":false},{"type":"+","named":false},{"type":"++","named":false},{"type":"+=","named":false},{"type":"+?:","named":false},{"type":",","named":false},{"type":"-","named":false},{"type":"--","named":false},{"type":"-=","named":false},{"type":"-?:","named":false},{"type":".","named":false},{"type":"...","named":false},{"type":"/","named":false},{"type":"/=","named":false},{"type":"/>","named":false},{"type":":","named":false},{"type":";","named":false},{"type":"<","named":false},{"type":"</","named":false},{"type":"<<","named":false},{"type":"<<=","named":false},{"type":"<=","named":false},{"type":"=","named":false},{"type":"==","named":false},{"type":"===","named":false},{"type":"=>","named":false},{"type":">","named":false},{"type":">=","named":false},{"type":">>","named":false},{"type":">>=","named":false},{"type":">>>","named":false},{"type":">>>=","named":false},{"type":"?","named":false},{"type":"?.","named":false},{"type":"?:","named":false},{"type":"??","named":false},{"type":"??=","named":false},{"type":"@","named":false},{"type":"[","named":false},{"type":"]","named":false},{"type":"^","named":false},{"type":"^=","named":false},{"type":"`","named":false},{"type":"abstract","named":false},{"type":"accessor","named":false},{"type":"any","named":false},{"type":"as","named":false},{"type":"assert","named":false},{"type":"asserts","named":false},{"type":"async","named":false},{"type":"await","named":false},{"type":"boolean","named":false},{"type":"break","named":false},{"type":"case","named":false},{"type":"catch","named":false},{"type":"class","named":false},{"type":"comment","named":true},{"type":"const","named":false},{"type":"continue","named":false},{"type":"debugger","named":false},{"type":"declare","named":false},{"type":"default","named":false},{"type":"delete","named":false},{"type":"do","named":false},{"type":"else","named":false},{"type":"enum","named":false},{"type":"escape_sequence","named":true},{"type":"export","named":false},{"type":"extends","named":false},{"type":"false","named":true},{"type":"finally","named":false},{"type":"for","named":false},{"type":"from","named":false},{"type":"function","named":false},{"type":"get","named":false},{"type":"global","named":false},{"type":"hash_bang_line","named":true},{"type":"html_character_reference","named":true},{"type":"html_comment","named":true},{"type":"if","named":false},{"type":"implements","named":false},{"type":"import","named":false},{"type":"in","named":false},{"type":"infer","named":false},{"type":"instanceof","named":false},{"type":"interface","named":false},{"type":"is","named":false},{"type":"jsx_text","named":true},{"type":"keyof","named":false},{"type":"let","named":false},{"type":"meta","named":false},{"type":"module","named":false},{"type":"namespace","named":false},{"type":"never","named":false},{"type":"new","named":false},{"type":"null","named":true},{"type":"number","named":true},{"type":"number","named":false},{"type":"object","named":false},{"type":"of","named":false},{"type":"override","named":false},{"type":"private","named":false},{"type":"private_property_identifier","named":true},{"type":"property_identifier","named":true},{"type":"protected","named":false},{"type":"public","named":false},{"type":"readonly","named":false},{"type":"regex_flags","named":true},{"type":"regex_pattern","named":true},{"type":"require","named":false},{"type":"return","named":false},{"type":"satisfies","named":false},{"type":"set","named":false},{"type":"shorthand_property_identifier","named":true},{"type":"shorthand_property_identifier_pattern","named":true},{"type":"statement_identifier","named":true},{"type":"static","named":false},{"type":"string","named":false},{"type":"string_fragment","named":true},{"type":"super","named":true},{"type":"switch","named":false},{"type":"symbol","named":false},{"type":"target","named":false},{"type":"this","named":true},{"type":"this_type","named":true},{"type":"throw","named":false},{"type":"true","named":true},{"type":"try","named":false},{"type":"type","named":false},{"type":"type_identifier","named":true},{"type":"typeof","named":false},{"type":"undefined","named":true},{"type":"unique symbol","named":false},{"type":"unknown","named":false},{"type":"using","named":false},{"type":"var","named":false},{"type":"void","named":false},{"type":"while","named":false},{"type":"with","named":false},{"type":"yield","named":false},{"type":"{","named":false},{"type":"{|","named":false},{"type":"|","named":false},{"type":"|=","named":false},{"type":"||","named":false},{"type":"||=","named":false},{"type":"|}","named":false},{"type":"}","named":false},{"type":"~","named":false}]');
1857
+ var ye;
1858
+ function Et() {
1859
+ return ye || (ye = 1, (function(s) {
1860
+ const e = _e.join(__dirname, "..", "..");
1861
+ s.exports = typeof process.versions.bun == "string" ? Y(`../../prebuilds/${process.platform}-${process.arch}/tree-sitter-typescript.node`) : St()(e);
1862
+ try {
1863
+ s.exports.typescript.nodeTypeInfo = Rt, s.exports.tsx.nodeTypeInfo = Ct;
1864
+ } catch {
1865
+ }
1866
+ })(z)), z.exports;
1867
+ }
1868
+ var $t = Et();
1869
+ const oe = /* @__PURE__ */ ze($t);
1870
+ class fr {
1871
+ /** @purpose Lazy-initialized tree-sitter parser instance */
1872
+ _parser;
1873
+ /**
1874
+ * @param filePath Absolute path to the TypeScript source file.
1875
+ * @param [content] Optional pre-loaded file content, bypasses disk read.
1876
+ * @returns Parse result with exported entities or an error.
1877
+ * @see {DbcAstAdapter#parseFile} in ../../dbc-ast-adapter.types.ts
1878
+ */
1879
+ async parseFile(e, t) {
1880
+ try {
1881
+ _.debug(`[DbcTsAstAdapter#parseFile] [idle → reading] ${e}`);
1882
+ const n = t ?? L(e, "utf8"), a = this._initializeParser().parse(n);
1883
+ if (a.rootNode.hasError) {
1884
+ const u = this._findErrorNode(a.rootNode), l = u ? ` at line ${u.startPosition.row + 1}` : "";
1885
+ return _.warn(`[DbcTsAstAdapter#parseFile] [reading → parse-failed] ${e}${l}`), { ok: !1, error: `Syntax error in ${e}${l}` };
1886
+ }
1887
+ const p = this._extractExported(a.rootNode, n);
1888
+ return _.info(
1889
+ `[DbcTsAstAdapter#parseFile] [reading → parsed] ${e} (${p.length} entities)`
1890
+ ), { ok: !0, exported: p };
1891
+ } catch (n) {
1892
+ if (n instanceof Error && "code" in n && n.code === "ENOENT")
1893
+ return _.warn(`[DbcTsAstAdapter#parseFile] [reading → not-found] ${e}`), { ok: !1, error: `File not found: ${e}` };
1894
+ const a = new Error(`[DbcTsAstAdapter#parseFile] Parse failed for ${e}`, {
1895
+ cause: n
1896
+ });
1897
+ return _.error(`[DbcTsAstAdapter#parseFile] [reading → failed] ${e}`, { error: a }), { ok: !1, error: `Failed to parse ${e}: ${String(n)}` };
1898
+ }
1899
+ }
1900
+ /**
1901
+ * @purpose Lazy-initializes the tree-sitter Parser with the TypeScript grammar.
1902
+ * @returns Configured Parser instance.
1903
+ */
1904
+ _initializeParser() {
1905
+ if (!this._parser) {
1906
+ this._parser = new Fe();
1907
+ const e = oe.tsx ?? oe;
1908
+ this._parser.setLanguage(e);
1909
+ }
1910
+ return this._parser;
1911
+ }
1912
+ /**
1913
+ * @purpose Walks the root AST node and extracts all exported entities,
1914
+ * skipping re-exports.
1915
+ * @param root Root CST node.
1916
+ * @param source Full source text for slicing.
1917
+ * @returns Array of exported entities.
1918
+ */
1919
+ _extractExported(e, t) {
1920
+ const n = [];
1921
+ let r;
1922
+ for (let a = 0; a < e.childCount; a += 1) {
1923
+ const i = e.child(a);
1924
+ if (i) {
1925
+ if (i.type === "comment") {
1926
+ const p = t.slice(i.startIndex, i.endIndex);
1927
+ p.startsWith("/**") ? r = {
1928
+ text: p,
1929
+ startLine: i.startPosition.row + 1,
1930
+ startCol: i.startPosition.column + 1
1931
+ } : r = void 0;
1932
+ continue;
1933
+ }
1934
+ if (i.type === "export_statement") {
1935
+ const p = this._extractExportEntity(i, t, r);
1936
+ p && n.push(p), r = void 0;
1937
+ continue;
1938
+ }
1939
+ i.type !== "comment" && (r = void 0);
1940
+ }
1941
+ }
1942
+ return n;
1943
+ }
1944
+ /**
1945
+ * @purpose Extracts a single exported entity from an export_statement node.
1946
+ * Skips re-exports.
1947
+ * @param node export_statement node.
1948
+ * @param source Full source text.
1949
+ * @param pendingContract JSDoc contract that precedes this export, if any.
1950
+ * @returns Exported entity or undefined for re-exports.
1951
+ */
1952
+ _extractExportEntity(e, t, n) {
1953
+ if (this._isReExport(e))
1954
+ return;
1955
+ let r = !1, a = null;
1956
+ for (let f = 0; f < e.childCount; f += 1) {
1957
+ const m = e.child(f);
1958
+ if (m) {
1959
+ if (m.type === "default") {
1960
+ r = !0;
1961
+ continue;
1962
+ }
1963
+ m.type === "export" || m.type === ";" || !a && m.type !== "export" && m.type !== ";" && (a = m);
1964
+ }
1965
+ }
1966
+ if (!a)
1967
+ return;
1968
+ const i = this._mapKind(a.type, r), p = this._extractName(a, t, r), u = this._extractSignature(a, t), l = this._extractMembers(a, t, i), d = i === "class" ? this._hasImplements(a) : void 0, y = n ? {
1969
+ text: n.text,
1970
+ startLine: n.startLine,
1971
+ startCol: n.startCol
1972
+ } : void 0;
1973
+ return {
1974
+ name: p,
1975
+ kind: i,
1976
+ members: l,
1977
+ contract: y,
1978
+ signature: u,
1979
+ implementsInterfaces: d
1980
+ };
1981
+ }
1982
+ /**
1983
+ * @purpose Determines whether an export_statement is a re-export.
1984
+ * @param node export_statement node.
1985
+ * @returns True if the export is a re-export that should be skipped.
1986
+ */
1987
+ _isReExport(e) {
1988
+ for (let t = 0; t < e.childCount; t += 1) {
1989
+ const n = e.child(t);
1990
+ if (n && (n.type === "export_clause" || n.type === "*"))
1991
+ return !0;
1992
+ }
1993
+ return !1;
1994
+ }
1995
+ /**
1996
+ * @purpose Maps a declaration node type to an entity kind string.
1997
+ * @param nodeType tree-sitter node type.
1998
+ * @param isDefault Whether this is a default export.
1999
+ * @returns Entity kind.
2000
+ */
2001
+ _mapKind(e, t) {
2002
+ switch (e) {
2003
+ case "function_declaration":
2004
+ case "generator_function_declaration":
2005
+ return "function";
2006
+ case "class_declaration":
2007
+ return "class";
2008
+ case "interface_declaration":
2009
+ return "interface";
2010
+ case "type_alias_declaration":
2011
+ return "type";
2012
+ case "enum_declaration":
2013
+ return "enum";
2014
+ case "lexical_declaration":
2015
+ case "variable_declaration":
2016
+ return "const";
2017
+ default:
2018
+ return t ? "export-default" : e;
2019
+ }
2020
+ }
2021
+ /**
2022
+ * @purpose Extracts the entity name from a declaration node.
2023
+ * @param node Declaration node.
2024
+ * @param source Full source text.
2025
+ * @param isDefault Whether this is a default export.
2026
+ * @returns Entity name.
2027
+ */
2028
+ _extractName(e, t, n) {
2029
+ const r = e.childForFieldName?.("name") ?? null;
2030
+ if (r)
2031
+ return t.slice(r.startIndex, r.endIndex);
2032
+ for (let a = 0; a < e.childCount; a += 1) {
2033
+ const i = e.child(a);
2034
+ if (i) {
2035
+ if (i.type === "variable_declarator") {
2036
+ const p = i.child(0);
2037
+ if (p)
2038
+ return t.slice(p.startIndex, p.endIndex);
2039
+ }
2040
+ if (i.type === "identifier" && n)
2041
+ return t.slice(i.startIndex, i.endIndex);
2042
+ }
2043
+ }
2044
+ return n ? "_default" : "unknown";
2045
+ }
2046
+ /**
2047
+ * @purpose Extracts signature info (params + returnType) from a callable declaration.
2048
+ * @param node Declaration node.
2049
+ * @param source Full source text.
2050
+ * @returns Signature info with empty arrays for non-callable entities.
2051
+ */
2052
+ _extractSignature(e, t) {
2053
+ const n = [];
2054
+ let r = "void";
2055
+ const a = this._findChild(e, "formal_parameters");
2056
+ if (a)
2057
+ for (let p = 0; p < a.childCount; p += 1) {
2058
+ const u = a.child(p);
2059
+ u && (u.type === "required_parameter" || u.type === "optional_parameter") && n.push(this._extractParam(u, t));
2060
+ }
2061
+ if (e.type === "function_type") {
2062
+ const p = [];
2063
+ for (let l = 0; l < e.childCount; l += 1) {
2064
+ const d = e.child(l);
2065
+ d && p.push(d);
2066
+ }
2067
+ const u = p.findIndex((l) => l.type === "=>");
2068
+ return u >= 0 && u + 1 < p.length && (r = t.slice(p[u + 1].startIndex, p[u + 1].endIndex).trim(), r || (r = "unknown")), { params: n, returnType: r };
2069
+ }
2070
+ const i = e.childForFieldName?.("return_type") ?? null;
2071
+ return i && (r = t.slice(i.startIndex + 1, i.endIndex).trim(), r || (r = "unknown")), n.length === 0 && !i && (r = "void"), { params: n, returnType: r };
2072
+ }
2073
+ /**
2074
+ * @purpose Extracts a single parameter (required or optional) from the formal_parameters list.
2075
+ * @param paramNode required_parameter or optional_parameter node.
2076
+ * @param source Full source text.
2077
+ * @returns Parameter info.
2078
+ */
2079
+ _extractParam(e, t) {
2080
+ let n = "", r = "any", a = e.type === "optional_parameter", i = !1;
2081
+ for (let p = 0; p < e.childCount; p += 1) {
2082
+ const u = e.child(p);
2083
+ if (u) {
2084
+ if (u.type === "rest_pattern") {
2085
+ i = !0;
2086
+ for (let l = 0; l < u.childCount; l += 1) {
2087
+ const d = u.child(l);
2088
+ d && (d.type === "identifier" || d.type === "object_pattern" || d.type === "array_pattern") && (n = t.slice(d.startIndex, d.endIndex));
2089
+ }
2090
+ continue;
2091
+ }
2092
+ if (u.type === "...") {
2093
+ i = !0;
2094
+ continue;
2095
+ }
2096
+ if (u.type === "?") {
2097
+ a = !0;
2098
+ continue;
2099
+ }
2100
+ if (u.type === "=") {
2101
+ a = !0;
2102
+ continue;
2103
+ }
2104
+ if (u.type === "identifier" || u.type === "object_pattern" || u.type === "array_pattern") {
2105
+ n = t.slice(u.startIndex, u.endIndex);
2106
+ continue;
2107
+ }
2108
+ if (u.type === "type_annotation") {
2109
+ for (let l = 0; l < u.childCount; l += 1) {
2110
+ const d = u.child(l);
2111
+ d && d.type !== ":" && (r = t.slice(d.startIndex, d.endIndex));
2112
+ }
2113
+ continue;
2114
+ }
2115
+ }
2116
+ }
2117
+ return { name: n, type: r, optional: a, isRest: i };
2118
+ }
2119
+ /**
2120
+ * @purpose Extracts members of a class, interface, or enum entity.
2121
+ * @param node Declaration node.
2122
+ * @param source Full source text.
2123
+ * @param kind Entity kind.
2124
+ * @returns Array of members (empty for non-collection entities).
2125
+ */
2126
+ _extractMembers(e, t, n) {
2127
+ return n === "class" ? this._extractClassMembers(e, t) : n === "interface" ? this._extractInterfaceMembers(e, t) : n === "enum" ? this._extractEnumMembers(e, t) : n === "type" ? this._extractTypeAliasMembers(e, t) : [];
2128
+ }
2129
+ /**
2130
+ * @purpose Extracts members from a class declaration body.
2131
+ * @param node class_declaration node.
2132
+ * @param source Full source text.
2133
+ * @returns Array of class members.
2134
+ */
2135
+ _extractClassMembers(e, t) {
2136
+ const n = e.childForFieldName?.("body") ?? null;
2137
+ if (!n) return [];
2138
+ const r = [];
2139
+ let a;
2140
+ for (let i = 0; i < n.childCount; i += 1) {
2141
+ const p = n.child(i);
2142
+ if (!p) continue;
2143
+ if (p.type === "comment") {
2144
+ const y = t.slice(p.startIndex, p.endIndex);
2145
+ y.startsWith("/**") ? a = {
2146
+ text: y,
2147
+ startLine: p.startPosition.row + 1,
2148
+ startCol: p.startPosition.column + 1
2149
+ } : a = void 0;
2150
+ continue;
2151
+ }
2152
+ if (p.type === "comment") {
2153
+ a = void 0;
2154
+ continue;
2155
+ }
2156
+ let u, l = "", d = null;
2157
+ if (p.type === "method_definition" ? (l = this._extractMethodName(p, t), l === "constructor" ? u = "constructor" : this._hasToken(p, "get") ? u = "getter" : this._hasToken(p, "set") ? u = "setter" : u = "method", d = p) : p.type === "public_field_definition" && (l = this._extractFieldName(p, t), u = "field"), u && l) {
2158
+ const y = d ? this._extractSignature(d, t) : { params: [], returnType: "void" }, f = a ? {
2159
+ text: a.text,
2160
+ startLine: a.startLine,
2161
+ startCol: a.startCol
2162
+ } : void 0;
2163
+ r.push({ name: l, kind: u, contract: f, signature: y }), a = void 0;
2164
+ } else
2165
+ a = void 0;
2166
+ }
2167
+ return r;
2168
+ }
2169
+ /**
2170
+ * @purpose Extracts members from an interface declaration body.
2171
+ * @param node interface_declaration node.
2172
+ * @param source Full source text.
2173
+ * @returns Array of interface members.
2174
+ */
2175
+ _extractInterfaceMembers(e, t) {
2176
+ const n = e.childForFieldName?.("body") ?? null;
2177
+ return n ? this._extractObjectTypeMembers(n, t) : [];
2178
+ }
2179
+ /**
2180
+ * @purpose Extracts members from a type alias with an object type literal body.
2181
+ * Delegates to the same logic as interface members since object_type ≡ interface body.
2182
+ * @param node type_alias_declaration node.
2183
+ * @param source Full source text.
2184
+ * @returns Array of object type members.
2185
+ */
2186
+ _extractTypeAliasMembers(e, t) {
2187
+ for (let n = 0; n < e.childCount; n += 1) {
2188
+ const r = e.child(n);
2189
+ if (r?.type === "object_type")
2190
+ return this._extractObjectTypeMembers(r, t);
2191
+ }
2192
+ return [];
2193
+ }
2194
+ /**
2195
+ * @purpose Extracts members from an object_type or interface body node.
2196
+ * Shared by type alias (object_type) and interface declarations.
2197
+ * @param body object_type or interface_body node.
2198
+ * @param source Full source text.
2199
+ * @returns Array of members.
2200
+ */
2201
+ _extractObjectTypeMembers(e, t) {
2202
+ const n = [];
2203
+ let r;
2204
+ for (let a = 0; a < e.childCount; a += 1) {
2205
+ const i = e.child(a);
2206
+ if (!i) continue;
2207
+ if (i.type === "comment") {
2208
+ const d = t.slice(i.startIndex, i.endIndex);
2209
+ d.startsWith("/**") ? r = {
2210
+ text: d,
2211
+ startLine: i.startPosition.row + 1,
2212
+ startCol: i.startPosition.column + 1
2213
+ } : r = void 0;
2214
+ continue;
2215
+ }
2216
+ if (i.type === "{" || i.type === "}" || i.type === ";" || i.type === ",")
2217
+ continue;
2218
+ let p, u = "", l = null;
2219
+ if (i.type === "method_signature") {
2220
+ const d = i.childForFieldName?.("name") ?? null;
2221
+ d && (u = t.slice(d.startIndex, d.endIndex)), p = "interface-method", l = i;
2222
+ } else if (i.type === "property_signature") {
2223
+ const d = i.childForFieldName?.("name") ?? null;
2224
+ d && (u = t.slice(d.startIndex, d.endIndex)), this._isFunctionTypedProperty(i) ? (p = "interface-method", l = this._findFunctionTypeNode(i)) : p = "interface-property";
2225
+ }
2226
+ if (p && u) {
2227
+ const d = l ? this._extractSignature(l, t) : { params: [], returnType: "void" }, y = r ? {
2228
+ text: r.text,
2229
+ startLine: r.startLine,
2230
+ startCol: r.startCol
2231
+ } : void 0;
2232
+ n.push({ name: u, kind: p, contract: y, signature: d }), r = void 0;
2233
+ } else
2234
+ r = void 0;
2235
+ }
2236
+ return n;
2237
+ }
2238
+ /**
2239
+ * @purpose Checks if a property_signature node has a function type annotation.
2240
+ * @param node property_signature node.
2241
+ * @returns True if the property is function-typed.
2242
+ */
2243
+ _isFunctionTypedProperty(e) {
2244
+ for (let t = 0; t < e.childCount; t += 1) {
2245
+ const n = e.child(t);
2246
+ if (n?.type === "type_annotation") {
2247
+ for (let r = 0; r < n.childCount; r += 1)
2248
+ if (n.child(r)?.type === "function_type") return !0;
2249
+ }
2250
+ }
2251
+ return !1;
2252
+ }
2253
+ /**
2254
+ * @purpose Finds the function_type node inside a property_signature's type annotation.
2255
+ * @param node property_signature node.
2256
+ * @returns The function_type node, or null.
2257
+ */
2258
+ _findFunctionTypeNode(e) {
2259
+ for (let t = 0; t < e.childCount; t += 1) {
2260
+ const n = e.child(t);
2261
+ if (n?.type === "type_annotation")
2262
+ for (let r = 0; r < n.childCount; r += 1) {
2263
+ const a = n.child(r);
2264
+ if (a?.type === "function_type") return a;
2265
+ }
2266
+ }
2267
+ return null;
2268
+ }
2269
+ /**
2270
+ * @purpose Extracts members from an enum declaration body.
2271
+ * @param node enum_declaration node.
2272
+ * @param source Full source text.
2273
+ * @returns Array of enum members.
2274
+ */
2275
+ _extractEnumMembers(e, t) {
2276
+ const n = e.childForFieldName?.("body") ?? null;
2277
+ if (!n) return [];
2278
+ const r = [];
2279
+ let a;
2280
+ for (let i = 0; i < n.childCount; i += 1) {
2281
+ const p = n.child(i);
2282
+ if (p) {
2283
+ if (p.type === "comment") {
2284
+ const u = t.slice(p.startIndex, p.endIndex);
2285
+ u.startsWith("/**") ? a = {
2286
+ text: u,
2287
+ startLine: p.startPosition.row + 1,
2288
+ startCol: p.startPosition.column + 1
2289
+ } : a = void 0;
2290
+ continue;
2291
+ }
2292
+ if (p.type === "property_identifier" || p.type === "identifier" || p.type === "string" || p.type === "shorthand_property_identifier") {
2293
+ const u = t.slice(p.startIndex, p.endIndex), l = a ? {
2294
+ text: a.text,
2295
+ startLine: a.startLine,
2296
+ startCol: a.startCol
2297
+ } : void 0;
2298
+ r.push({
2299
+ name: u,
2300
+ kind: "enum-member",
2301
+ contract: l,
2302
+ signature: { params: [], returnType: "void" }
2303
+ }), a = void 0;
2304
+ } else p.type !== "," && p.type !== "{" && p.type !== "}" && (a = void 0);
2305
+ }
2306
+ }
2307
+ return r;
2308
+ }
2309
+ /**
2310
+ * @purpose Extracts the method name from a method_definition node,
2311
+ * handling getter/setter property names.
2312
+ * @param node method_definition node.
2313
+ * @param source Full source text.
2314
+ * @returns Method name.
2315
+ */
2316
+ _extractMethodName(e, t) {
2317
+ const n = e.childForFieldName?.("name") ?? null;
2318
+ return n ? t.slice(n.startIndex, n.endIndex) : "unknown";
2319
+ }
2320
+ /**
2321
+ * @purpose Extracts the field name from a public_field_definition node.
2322
+ * @param node public_field_definition node.
2323
+ * @param source Full source text.
2324
+ * @returns Field name.
2325
+ */
2326
+ _extractFieldName(e, t) {
2327
+ for (let n = 0; n < e.childCount; n += 1) {
2328
+ const r = e.child(n);
2329
+ if (r && (r.type === "property_identifier" || r.type === "identifier"))
2330
+ return t.slice(r.startIndex, r.endIndex);
2331
+ }
2332
+ return "unknown";
2333
+ }
2334
+ /**
2335
+ * @purpose Checks if a method_definition has a given token (e.g., 'get', 'set').
2336
+ * @param node method_definition node.
2337
+ * @param token Token text to search for.
2338
+ * @returns True if the token is present.
2339
+ */
2340
+ _hasToken(e, t) {
2341
+ for (let n = 0; n < e.childCount; n += 1) {
2342
+ const r = e.child(n);
2343
+ if (r && r.type === t)
2344
+ return !0;
2345
+ }
2346
+ return !1;
2347
+ }
2348
+ /**
2349
+ * @purpose Checks if a class_declaration node has an implements clause.
2350
+ * @param node class_declaration node.
2351
+ * @returns True if the class has `implements` clause.
2352
+ */
2353
+ _hasImplements(e) {
2354
+ const t = this._findChild(e, "class_heritage");
2355
+ return t ? this._findChild(t, "implements_clause") !== null : !1;
2356
+ }
2357
+ /**
2358
+ * @purpose Finds a direct child node by type, returning first match.
2359
+ * @param parent Parent node.
2360
+ * @param type Child node type to find.
2361
+ * @returns First matching child or null.
2362
+ */
2363
+ _findChild(e, t) {
2364
+ for (let n = 0; n < e.childCount; n += 1) {
2365
+ const r = e.child(n);
2366
+ if (r && r.type === t)
2367
+ return r;
2368
+ }
2369
+ return null;
2370
+ }
2371
+ /**
2372
+ * @purpose Recursively searches for the first ERROR node in the tree.
2373
+ * @param node Root node to search from.
2374
+ * @returns First ERROR node found, or undefined.
2375
+ */
2376
+ _findErrorNode(e) {
2377
+ if (e.type === "ERROR" || e.isError)
2378
+ return e;
2379
+ for (let t = 0; t < e.childCount; t += 1) {
2380
+ const n = e.child(t);
2381
+ if (!n) continue;
2382
+ const r = this._findErrorNode(n);
2383
+ if (r) return r;
2384
+ }
2385
+ }
2386
+ }
2387
+ class kt extends Error {
2388
+ /** @purpose The conflicting provider key */
2389
+ key;
2390
+ /**
2391
+ * @purpose Construct with the duplicate key and a trace-prefixed message.
2392
+ * @param key The provider key that is already registered.
2393
+ */
2394
+ constructor(e) {
2395
+ super(`[DuplicateProviderError] Provider with key "${e}" is already registered`), this.name = "DuplicateProviderError", this.key = e;
2396
+ }
2397
+ }
2398
+ class At extends Error {
2399
+ /** @purpose The missing provider key */
2400
+ key;
2401
+ /**
2402
+ * @purpose Construct with the missing key and a trace-prefixed message.
2403
+ * @param key The provider key that was not found.
2404
+ */
2405
+ constructor(e) {
2406
+ super(`[ProviderNotFoundError] Provider with key "${e}" is not registered`), this.name = "ProviderNotFoundError", this.key = e;
2407
+ }
2408
+ }
2409
+ class Tt {
2410
+ /** @purpose Provider registry — maps string keys to AgentProvider instances | @invariant Empty on construction; mutated only via register/unregister */
2411
+ _providers = /* @__PURE__ */ new Map();
2412
+ /**
2413
+ * @purpose Register a provider under a unique key; rejects on duplicate.
2414
+ * @param key Unique provider identifier — non-empty string.
2415
+ * @param provider The provider instance implementing AgentProvider.
2416
+ * @throws {DuplicateProviderError} When key is already registered.
2417
+ * @post Provider is stored in the registry under the given key.
2418
+ */
2419
+ register(e, t) {
2420
+ if (this._providers.has(e))
2421
+ throw new kt(e);
2422
+ this._providers.set(e, t), _.debug(`[AgentMonitor#register] [idle → registered] ${e}`);
2423
+ }
2424
+ /**
2425
+ * @purpose Remove a provider from the registry; no-op when the key is not found.
2426
+ * @param key Provider key to remove.
2427
+ * @post Provider with the given key is no longer in the registry.
2428
+ */
2429
+ unregister(e) {
2430
+ this._providers.delete(e), _.debug(`[AgentMonitor#unregister] [registered → removed] ${e}`);
2431
+ }
2432
+ /**
2433
+ * @purpose Scan all registered providers concurrently, aggregate and sort results by startedAt descending.
2434
+ * @invariant Graceful degradation: a failing provider returns [] and does not abort other providers.
2435
+ * @param [opts] Optional scan filtering (since timestamp or 'today').
2436
+ * @returns All sessions from all providers, sorted by startedAt descending.
2437
+ * @sideEffect Calls each registered provider's scan() — may read filesystem / database.
2438
+ */
2439
+ async scanAll(e) {
2440
+ _.debug(`[AgentMonitor#scanAll] [idle → scanning] providers=${this._providers.size}`);
2441
+ const n = (await Promise.all(
2442
+ [...this._providers.values()].map(async (r) => {
2443
+ try {
2444
+ return await r.scan(e);
2445
+ } catch (a) {
2446
+ const i = new Error(`[AgentMonitor#scanAll] Provider ${r.key} failed`, {
2447
+ cause: a
2448
+ });
2449
+ return _.error(`[AgentMonitor#scanAll] [scanning → degraded] ${r.key}`, { error: i }), [];
2450
+ }
2451
+ })
2452
+ )).flat().sort((r, a) => a.startedAt - r.startedAt);
2453
+ return _.info(`[AgentMonitor#scanAll] [scanning → completed] sessions=${n.length}`), n;
2454
+ }
2455
+ /**
2456
+ * @purpose Scan a single provider by key; rejects when the provider is not registered.
2457
+ * @param key Registered provider key.
2458
+ * @param [opts] Optional scan filtering.
2459
+ * @throws {ProviderNotFoundError} When the key is not registered.
2460
+ * @returns Sessions from the specified provider.
2461
+ * @sideEffect Calls the provider's scan() — may read filesystem / database.
2462
+ */
2463
+ async scanOne(e, t) {
2464
+ _.debug(`[AgentMonitor#scanOne] [idle → scanning] ${e}`);
2465
+ const n = this._providers.get(e);
2466
+ if (n === void 0)
2467
+ throw new At(e);
2468
+ try {
2469
+ const r = await n.scan(t);
2470
+ return _.info(
2471
+ `[AgentMonitor#scanOne] [scanning → completed] ${e} sessions=${r.length}`
2472
+ ), r;
2473
+ } catch (r) {
2474
+ const a = new Error(`[AgentMonitor#scanOne] Provider ${e} failed`, { cause: r });
2475
+ throw _.error(`[AgentMonitor#scanOne] [scanning → failed] ${e}`, { error: a }), a;
2476
+ }
2477
+ }
2478
+ }
2479
+ function cr() {
2480
+ return new Tt();
2481
+ }
2482
+ function Nt(s) {
2483
+ if (s.length === 0) return /* @__PURE__ */ new Map();
2484
+ try {
2485
+ const e = s.join(","), t = Ue(`ps -p ${e} -o pid=,pcpu=,rss=,args=`, {
2486
+ encoding: "utf-8",
2487
+ timeout: 5e3
2488
+ }), n = /* @__PURE__ */ new Map(), r = t.trim().split(`
2489
+ `);
2490
+ for (const a of r) {
2491
+ const i = a.trim();
2492
+ if (!i) continue;
2493
+ const p = i.split(/\s+/);
2494
+ if (p.length < 4) continue;
2495
+ const u = p[0], l = p[1], d = p[2], y = p.slice(3).join(" "), f = parseInt(u, 10), m = parseFloat(l), o = parseInt(d, 10);
2496
+ isNaN(f) || isNaN(m) || isNaN(o) || n.set(f, {
2497
+ pid: f,
2498
+ cpuPercent: m,
2499
+ memoryMb: o / 1024,
2500
+ args: y
2501
+ });
2502
+ }
2503
+ return _.debug(
2504
+ `[psInfo] [idle → completed] Batch ps: ${s.length} requested, ${n.size} alive`
2505
+ ), n;
2506
+ } catch (e) {
2507
+ const t = new Error("[psInfo] Batch ps command failed", { cause: e });
2508
+ return _.warn(`[psInfo] [idle → failed] ps command error for ${s.length} PIDs`, { error: t }), /* @__PURE__ */ new Map();
2509
+ }
2510
+ }
2511
+ function jt(s) {
2512
+ const e = {}, t = s.match(/--model\s+(\S+)/);
2513
+ t && (e.model = t[1]);
2514
+ const n = s.match(/--effort\s+(\S+)/);
2515
+ return n && (e.effort = n[1]), e;
2516
+ }
2517
+ function Mt(s) {
2518
+ const e = s.match(/--allowedTools\s+([^"]*?)(?:\s+--|$)/);
2519
+ if (!e) return;
2520
+ const n = (e[1] ?? "").match(/Read\(\/\/(?:Users\/[^/]+\/Developer\/)?([^)]+?)(?:\/\*\*)?\)/);
2521
+ if (!n) return;
2522
+ const a = (n[1] ?? "").split("/");
2523
+ return a.length <= 1 ? a[0] : a.slice(-2).join("/");
2524
+ }
2525
+ function Lt(s) {
2526
+ try {
2527
+ const e = L(s, "utf-8"), t = JSON.parse(e);
2528
+ if (typeof t != "object" || t === null)
2529
+ return _.warn(`[readSessionJson] [idle -> skipped] Not a JSON object: ${s}`), null;
2530
+ const n = t;
2531
+ return typeof n.pid != "number" || typeof n.sessionId != "string" || typeof n.cwd != "string" || typeof n.startedAt != "number" ? (_.warn(`[readSessionJson] [idle -> skipped] Missing required fields in: ${s}`), null) : {
2532
+ pid: n.pid,
2533
+ sessionId: n.sessionId,
2534
+ cwd: n.cwd,
2535
+ startedAt: n.startedAt
2536
+ };
2537
+ } catch (e) {
2538
+ const t = new Error("[readSessionJson] Failed to parse session JSON", { cause: e });
2539
+ return _.error(`[readSessionJson] [idle -> failed] ${s}`, { error: t }), null;
2540
+ }
2541
+ }
2542
+ function Pt(s, e) {
2543
+ try {
2544
+ const t = s.replace(/\//g, "-"), n = M(J(), ".claude", "projects", t, `${e}.jsonl`);
2545
+ if (!he(n))
2546
+ return _.debug(`[readSessionTitle] [idle -> not-found] JSONL missing: ${n}`), "Unknown";
2547
+ const a = L(n, "utf-8").trim().split(`
2548
+ `);
2549
+ for (const i of a)
2550
+ try {
2551
+ const p = JSON.parse(i);
2552
+ if (typeof p == "object" && p !== null && p.type === "ai-title" && typeof p.aiTitle == "string")
2553
+ return p.aiTitle;
2554
+ } catch {
2555
+ }
2556
+ for (const i of a)
2557
+ try {
2558
+ const p = JSON.parse(i);
2559
+ if (typeof p == "object" && p !== null && p.type === "user") {
2560
+ const u = p.message;
2561
+ if (u?.content) {
2562
+ const l = typeof u.content == "string" ? u.content : Array.isArray(u.content) && u.content.length > 0 ? String(u.content[0]?.text ?? "") : "";
2563
+ if (l) return l;
2564
+ }
2565
+ }
2566
+ } catch {
2567
+ }
2568
+ return "Unknown";
2569
+ } catch (t) {
2570
+ const n = new Error("[readSessionTitle] Failed to read session title", { cause: t });
2571
+ return _.warn(`[readSessionTitle] [idle -> failed] cwd=${s} sessionId=${e}`, { error: n }), "Unknown";
2572
+ }
2573
+ }
2574
+ function Dt(s) {
2575
+ try {
2576
+ const e = M(J(), ".claude", "tasks", s);
2577
+ if (!he(e)) return "Unknown";
2578
+ const t = ge(e).filter((r) => r.endsWith(".json"));
2579
+ if (t.length === 0) return "Unknown";
2580
+ let n;
2581
+ for (const r of t)
2582
+ try {
2583
+ const a = L(M(e, r), "utf-8"), i = JSON.parse(a), p = i?.subject;
2584
+ if (!p) continue;
2585
+ if (i?.status === "in_progress") return p;
2586
+ n = n ?? p;
2587
+ } catch {
2588
+ }
2589
+ return n ?? "Unknown";
2590
+ } catch {
2591
+ return "Unknown";
2592
+ }
2593
+ }
2594
+ class _r {
2595
+ /** @see {AgentProvider#key} in ../../model/agent-provider.type.ts */
2596
+ key = "claude";
2597
+ /** @purpose Batch ps inspection function */
2598
+ _psInfo;
2599
+ /** @purpose Claude CLI argument parser */
2600
+ _parseClaudeArgs;
2601
+ /** @purpose Session JSON file reader */
2602
+ _readSessionJson;
2603
+ /** @purpose Session title extractor from JSONL */
2604
+ _readSessionTitle;
2605
+ /** @purpose Logger instance */
2606
+ _logger;
2607
+ /**
2608
+ * @purpose Construct with optional DI overrides for testing.
2609
+ * @param [deps] Injectable function replacements; omitted deps use real implementations.
2610
+ */
2611
+ constructor(e) {
2612
+ this._psInfo = e?.psInfo ?? Nt, this._parseClaudeArgs = e?.parseClaudeArgs ?? jt, this._readSessionJson = e?.readSessionJson ?? Lt, this._readSessionTitle = e?.readSessionTitle ?? Pt, this._logger = _;
2613
+ }
2614
+ /**
2615
+ * @param [opts] Optional scan filtering parameters.
2616
+ * @returns Parsed agent sessions array.
2617
+ * @see {AgentProvider#scan} in ../../model/agent-provider.type.ts
2618
+ */
2619
+ async scan(e) {
2620
+ this._logger.debug("[ClaudeProvider#scan] [idle -> scanning]");
2621
+ const t = M(J(), ".claude", "sessions");
2622
+ let n;
2623
+ try {
2624
+ n = ge(t).filter((d) => d.endsWith(".json"));
2625
+ } catch (d) {
2626
+ if (d.code === "ENOENT")
2627
+ return this._logger.warn(
2628
+ `[ClaudeProvider#scan] [scanning -> not-found] Sessions dir missing: ${t}`
2629
+ ), [];
2630
+ const y = new Error("[ClaudeProvider#scan] Failed to read sessions directory", { cause: d });
2631
+ return this._logger.error("[ClaudeProvider#scan] [scanning -> failed]", { error: y }), [];
2632
+ }
2633
+ const r = [];
2634
+ for (const d of n) {
2635
+ const y = M(t, d), f = this._readSessionJson(y);
2636
+ if (!f) continue;
2637
+ let m = 0;
2638
+ try {
2639
+ m = Oe(y).mtimeMs;
2640
+ } catch {
2641
+ m = f.startedAt;
2642
+ }
2643
+ r.push({
2644
+ pid: f.pid,
2645
+ sessionId: f.sessionId,
2646
+ cwd: f.cwd,
2647
+ startedAt: f.startedAt,
2648
+ lastActivityAt: m
2649
+ });
2650
+ }
2651
+ if (r.length === 0)
2652
+ return this._logger.debug("[ClaudeProvider#scan] [scanning -> empty] No valid sessions found"), [];
2653
+ const a = r.map((d) => d.pid), i = this._psInfo(a), p = Date.now(), u = [];
2654
+ for (const d of r) {
2655
+ const y = i.get(d.pid), f = y !== void 0;
2656
+ let m, o, c;
2657
+ f ? (y?.cpuPercent ?? 0) > 0 ? m = "active" : (m = "idle", o = d.lastActivityAt > 0 ? (p - d.lastActivityAt) / 1e3 : void 0) : (m = "completed", c = d.lastActivityAt > 0 ? d.lastActivityAt : p);
2658
+ const b = y ? this._parseClaudeArgs(y.args).model : void 0;
2659
+ let I = this._readSessionTitle(d.cwd, d.sessionId);
2660
+ if (I === "Unknown" && (I = Dt(d.sessionId)), I === "Unknown" && y) {
2661
+ const w = Mt(y.args);
2662
+ w ? I = `${O.basename(d.cwd)}: ${w}` : I = `[${O.basename(d.cwd)}] session`;
2663
+ }
2664
+ const R = (p - d.startedAt) / 1e3;
2665
+ u.push({
2666
+ provider: "claude",
2667
+ pid: d.pid,
2668
+ sessionId: d.sessionId,
2669
+ cwd: d.cwd,
2670
+ project: O.basename(d.cwd),
2671
+ startedAt: d.startedAt,
2672
+ lastActivityAt: d.lastActivityAt > 0 ? d.lastActivityAt : void 0,
2673
+ status: m,
2674
+ title: I,
2675
+ model: b,
2676
+ cpuPercent: y?.cpuPercent,
2677
+ memoryMb: y?.memoryMb,
2678
+ elapsedSeconds: R,
2679
+ idleSeconds: o,
2680
+ completedAt: c
2681
+ });
2682
+ }
2683
+ let l = u;
2684
+ if (e?.since !== void 0) {
2685
+ const d = e.since === "today" ? Ot() : e.since;
2686
+ l = u.filter((y) => y.startedAt >= d);
2687
+ }
2688
+ return this._logger.info(
2689
+ `[ClaudeProvider#scan] [scanning -> completed] ${l.length} sessions (${u.length} total)`
2690
+ ), l;
2691
+ }
2692
+ }
2693
+ function Ot() {
2694
+ const s = /* @__PURE__ */ new Date();
2695
+ return s.setHours(0, 0, 0, 0), s.getTime();
2696
+ }
2697
+ function Ft(s, e) {
2698
+ let t = "SELECT id, slug, title, directory, time_created, time_updated, agent, model, tokens_input, tokens_output, parent_id FROM session WHERE time_archived IS NULL";
2699
+ const n = [], r = e?.since ?? Date.now() - 864e5;
2700
+ return t += " AND time_updated >= ?", n.push(r), t += " ORDER BY time_updated DESC", s.prepare(t).all(...n);
2701
+ }
2702
+ function Bt(s, e) {
2703
+ const n = s.prepare(
2704
+ "SELECT data FROM message WHERE session_id = ? ORDER BY time_updated DESC LIMIT 1"
2705
+ ).get(e);
2706
+ if (!n?.data) return null;
2707
+ try {
2708
+ const a = JSON.parse(n.data)?.content;
2709
+ return typeof a == "string" ? a : Array.isArray(a) && a.length > 0 && typeof a[0]?.text == "string" ? a[0].text : null;
2710
+ } catch {
2711
+ return n.data;
2712
+ }
2713
+ }
2714
+ function Ut(s) {
2715
+ if (s)
2716
+ try {
2717
+ return JSON.parse(s).id ?? s;
2718
+ } catch {
2719
+ return "unknown";
2720
+ }
2721
+ }
2722
+ const Wt = "~/.local/share/opencode/opencode.db";
2723
+ class hr {
2724
+ /** @purpose Provider identifier key ('opencode') */
2725
+ key = "opencode";
2726
+ /** @purpose Resolved dependency injection container */
2727
+ _deps;
2728
+ /** @purpose Logger instance for structured logging */
2729
+ _logger = _;
2730
+ /**
2731
+ * @purpose Construct with optional dependency injection for testing.
2732
+ * @param [deps] Injectable query functions and db path overrides.
2733
+ */
2734
+ constructor(e) {
2735
+ this._deps = {
2736
+ dbPath: e?.dbPath ?? Wt,
2737
+ querySessions: e?.querySessions ?? Ft,
2738
+ queryLastMessage: e?.queryLastMessage ?? Bt,
2739
+ parseModelJson: e?.parseModelJson ?? Ut
2740
+ };
2741
+ }
2742
+ /**
2743
+ * @param [opts] Optional scan filtering parameters.
2744
+ * @returns Parsed agent sessions array.
2745
+ * @see {AgentProvider#scan} in ../../model/agent-provider.type.ts
2746
+ */
2747
+ async scan(e) {
2748
+ this._logger.debug("[OpenCodeProvider#scan] [idle → opening]");
2749
+ const t = this._resolvePath(this._deps.dbPath);
2750
+ let n;
2751
+ try {
2752
+ n = new We(t);
2753
+ } catch (r) {
2754
+ return this._logger.warn(`[OpenCodeProvider#scan] [opening → not_found] ${t}`, { cause: r }), [];
2755
+ }
2756
+ try {
2757
+ const r = this._deps.querySessions(n, e), a = [];
2758
+ for (const i of r) {
2759
+ const p = this._deps.parseModelJson(i.model), u = this._deps.queryLastMessage(n, i.id), l = i.time_created, d = i.time_updated, y = Math.max(0, Math.round((d - l) / 1e3));
2760
+ a.push({
2761
+ provider: "opencode",
2762
+ pid: null,
2763
+ sessionId: i.slug,
2764
+ parentId: i.parent_id ?? void 0,
2765
+ title: i.title ?? "",
2766
+ slug: i.slug,
2767
+ cwd: i.directory,
2768
+ project: i.directory.split("/").pop() ?? i.directory,
2769
+ model: p,
2770
+ agent: i.agent ?? void 0,
2771
+ status: "active",
2772
+ startedAt: l,
2773
+ lastActivityAt: d,
2774
+ elapsedSeconds: y,
2775
+ tokensInput: i.tokens_input ?? void 0,
2776
+ tokensOutput: i.tokens_output ?? void 0,
2777
+ lastMessage: u ?? void 0
2778
+ });
2779
+ }
2780
+ return this._logger.info(`[OpenCodeProvider#scan] [querying → scanned] ${a.length} sessions`), a;
2781
+ } catch (r) {
2782
+ const a = new Error("[OpenCodeProvider#scan] Query failed", { cause: r });
2783
+ return this._logger.error("[OpenCodeProvider#scan] [querying → failed]", { error: a }), [];
2784
+ } finally {
2785
+ n.close();
2786
+ }
2787
+ }
2788
+ /**
2789
+ * @purpose Resolve tilde-prefixed path to an absolute path using the home directory.
2790
+ * @param raw Raw path string potentially starting with ~/.
2791
+ * @returns Absolute path with ~ resolved to os.homedir().
2792
+ */
2793
+ _resolvePath(e) {
2794
+ return e.startsWith("~/") ? O.join(Be.homedir(), e.slice(2)) : e;
2795
+ }
2796
+ }
2797
+ const zt = [
2798
+ "status",
2799
+ "title",
2800
+ "lastActivityAt",
2801
+ "elapsedSeconds",
2802
+ "idleSeconds",
2803
+ "toolCallCount",
2804
+ "errorCount",
2805
+ "lastMessage",
2806
+ "tokensInput",
2807
+ "tokensOutput"
2808
+ ];
2809
+ function Gt(s, e) {
2810
+ _.debug("[diff] [idle → comparing]");
2811
+ const t = new Map(s.map((p) => [p.sessionId, p])), n = new Map(e.map((p) => [p.sessionId, p])), r = [], a = [], i = [];
2812
+ for (const p of e) {
2813
+ const u = t.get(p.sessionId);
2814
+ if (!u) {
2815
+ r.push(p);
2816
+ continue;
2817
+ }
2818
+ Jt(u, p) && i.push(p);
2819
+ }
2820
+ for (const p of s)
2821
+ n.has(p.sessionId) || a.push(p);
2822
+ return _.debug(
2823
+ `[diff] [comparing → done] added=${r.length} removed=${a.length} updated=${i.length}`
2824
+ ), { added: r, removed: a, updated: i };
2825
+ }
2826
+ function Jt(s, e) {
2827
+ return zt.some((t) => s[t] !== e[t]);
2828
+ }
2829
+ const Ht = 3e5, fe = 100;
2830
+ function ce(s, e) {
2831
+ const t = Date.now();
2832
+ for (const n of s)
2833
+ n.lastActivityAt !== void 0 && t - n.lastActivityAt > e && (n.status = "idle");
2834
+ }
2835
+ function Vt() {
2836
+ return { added: [], removed: [], updated: [] };
2837
+ }
2838
+ async function* gr(s, e) {
2839
+ if (e.interval < fe)
2840
+ throw new RangeError(
2841
+ `[observe] interval must be >= ${fe}ms, got ${e.interval}`
2842
+ );
2843
+ const t = e.idleThresholdMs ?? Ht;
2844
+ _.debug(
2845
+ `[observe] [idle → initializing] interval=${e.interval}ms idleThreshold=${t}ms`
2846
+ );
2847
+ let n;
2848
+ try {
2849
+ n = await s.scanAll(), ce(n, t), _.debug(`[observe] [initializing → baseline] sessions=${n.length}`);
2850
+ } catch (r) {
2851
+ const a = new Error("[observe] Baseline scan failed", { cause: r });
2852
+ _.error("[observe] [initializing → failed]", { error: a }), n = [];
2853
+ }
2854
+ for (; ; ) {
2855
+ await new Promise((r) => setTimeout(r, e.interval));
2856
+ try {
2857
+ const r = await s.scanAll();
2858
+ ce(r, t);
2859
+ const a = Gt(n, r);
2860
+ _.debug(
2861
+ `[observe] [polling → yielded] added=${a.added.length} removed=${a.removed.length} updated=${a.updated.length}`
2862
+ ), n = r, yield a;
2863
+ } catch (r) {
2864
+ const a = new Error("[observe] Scan cycle failed", { cause: r });
2865
+ _.error("[observe] [polling → degraded]", { error: a }), yield Vt();
2866
+ }
2867
+ }
2868
+ }
2869
+ export {
2870
+ _r as C,
2871
+ or as D,
2872
+ hr as O,
2873
+ ut as R,
2874
+ ur as V,
2875
+ yr as a,
2876
+ fr as b,
2877
+ mr as c,
2878
+ sr as d,
2879
+ dr as e,
2880
+ cr as f,
2881
+ ze as g,
2882
+ Ze as h,
2883
+ F as i,
2884
+ _ as l,
2885
+ gr as o,
2886
+ pr as p,
2887
+ lr as r,
2888
+ ir as s
2889
+ };