codesift-mcp 0.3.0 → 0.4.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 (461) hide show
  1. package/README.md +143 -20
  2. package/dist/cache/hono-cache.d.ts +50 -0
  3. package/dist/cache/hono-cache.d.ts.map +1 -0
  4. package/dist/cache/hono-cache.js +132 -0
  5. package/dist/cache/hono-cache.js.map +1 -0
  6. package/dist/cli/setup.d.ts.map +1 -1
  7. package/dist/cli/setup.js +17 -2
  8. package/dist/cli/setup.js.map +1 -1
  9. package/dist/formatters-shortening.d.ts +13 -0
  10. package/dist/formatters-shortening.d.ts.map +1 -1
  11. package/dist/formatters-shortening.js +131 -0
  12. package/dist/formatters-shortening.js.map +1 -1
  13. package/dist/formatters.d.ts +38 -0
  14. package/dist/formatters.d.ts.map +1 -1
  15. package/dist/formatters.js +498 -0
  16. package/dist/formatters.js.map +1 -1
  17. package/dist/instructions.d.ts +1 -1
  18. package/dist/instructions.d.ts.map +1 -1
  19. package/dist/instructions.js +27 -26
  20. package/dist/instructions.js.map +1 -1
  21. package/dist/lsp/lsp-servers.d.ts.map +1 -1
  22. package/dist/lsp/lsp-servers.js +5 -0
  23. package/dist/lsp/lsp-servers.js.map +1 -1
  24. package/dist/lsp/lsp-tools.d.ts.map +1 -1
  25. package/dist/lsp/lsp-tools.js +1 -0
  26. package/dist/lsp/lsp-tools.js.map +1 -1
  27. package/dist/parser/astro-template.d.ts +47 -0
  28. package/dist/parser/astro-template.d.ts.map +1 -0
  29. package/dist/parser/astro-template.js +171 -0
  30. package/dist/parser/astro-template.js.map +1 -0
  31. package/dist/parser/extractors/_shared.d.ts +4 -0
  32. package/dist/parser/extractors/_shared.d.ts.map +1 -1
  33. package/dist/parser/extractors/_shared.js +8 -0
  34. package/dist/parser/extractors/_shared.js.map +1 -1
  35. package/dist/parser/extractors/astro.d.ts +4 -5
  36. package/dist/parser/extractors/astro.d.ts.map +1 -1
  37. package/dist/parser/extractors/astro.js +102 -26
  38. package/dist/parser/extractors/astro.js.map +1 -1
  39. package/dist/parser/extractors/gradle-kts.d.ts +4 -0
  40. package/dist/parser/extractors/gradle-kts.d.ts.map +1 -0
  41. package/dist/parser/extractors/gradle-kts.js +246 -0
  42. package/dist/parser/extractors/gradle-kts.js.map +1 -0
  43. package/dist/parser/extractors/hono-inline-analyzer.d.ts +34 -0
  44. package/dist/parser/extractors/hono-inline-analyzer.d.ts.map +1 -0
  45. package/dist/parser/extractors/hono-inline-analyzer.js +465 -0
  46. package/dist/parser/extractors/hono-inline-analyzer.js.map +1 -0
  47. package/dist/parser/extractors/hono-model.d.ts +196 -0
  48. package/dist/parser/extractors/hono-model.d.ts.map +1 -0
  49. package/dist/parser/extractors/hono-model.js +10 -0
  50. package/dist/parser/extractors/hono-model.js.map +1 -0
  51. package/dist/parser/extractors/hono.d.ts +118 -0
  52. package/dist/parser/extractors/hono.d.ts.map +1 -0
  53. package/dist/parser/extractors/hono.js +1527 -0
  54. package/dist/parser/extractors/hono.js.map +1 -0
  55. package/dist/parser/extractors/kotlin.d.ts +4 -0
  56. package/dist/parser/extractors/kotlin.d.ts.map +1 -0
  57. package/dist/parser/extractors/kotlin.js +521 -0
  58. package/dist/parser/extractors/kotlin.js.map +1 -0
  59. package/dist/parser/extractors/php.d.ts +22 -0
  60. package/dist/parser/extractors/php.d.ts.map +1 -0
  61. package/dist/parser/extractors/php.js +326 -0
  62. package/dist/parser/extractors/php.js.map +1 -0
  63. package/dist/parser/extractors/python.d.ts.map +1 -1
  64. package/dist/parser/extractors/python.js +234 -11
  65. package/dist/parser/extractors/python.js.map +1 -1
  66. package/dist/parser/extractors/sql.d.ts +33 -0
  67. package/dist/parser/extractors/sql.d.ts.map +1 -0
  68. package/dist/parser/extractors/sql.js +506 -0
  69. package/dist/parser/extractors/sql.js.map +1 -0
  70. package/dist/parser/extractors/typescript.d.ts.map +1 -1
  71. package/dist/parser/extractors/typescript.js +166 -3
  72. package/dist/parser/extractors/typescript.js.map +1 -1
  73. package/dist/parser/languages/tree-sitter-javascript.wasm +0 -0
  74. package/dist/parser/languages/tree-sitter-kotlin.wasm +0 -0
  75. package/dist/parser/languages/tree-sitter-php.wasm +0 -0
  76. package/dist/parser/languages/tree-sitter-php_only.wasm +0 -0
  77. package/dist/parser/languages/tree-sitter-python.wasm +0 -0
  78. package/dist/parser/parser-manager.d.ts +32 -0
  79. package/dist/parser/parser-manager.d.ts.map +1 -1
  80. package/dist/parser/parser-manager.js +82 -3
  81. package/dist/parser/parser-manager.js.map +1 -1
  82. package/dist/parser/symbol-extractor.d.ts.map +1 -1
  83. package/dist/parser/symbol-extractor.js +16 -0
  84. package/dist/parser/symbol-extractor.js.map +1 -1
  85. package/dist/register-tools.d.ts +37 -1
  86. package/dist/register-tools.d.ts.map +1 -1
  87. package/dist/register-tools.js +2657 -191
  88. package/dist/register-tools.js.map +1 -1
  89. package/dist/search/reranker.js +1 -1
  90. package/dist/search/reranker.js.map +1 -1
  91. package/dist/server-helpers.d.ts.map +1 -1
  92. package/dist/server-helpers.js +11 -0
  93. package/dist/server-helpers.js.map +1 -1
  94. package/dist/server.js +28 -1
  95. package/dist/server.js.map +1 -1
  96. package/dist/storage/index-store.d.ts +15 -1
  97. package/dist/storage/index-store.d.ts.map +1 -1
  98. package/dist/storage/index-store.js +27 -1
  99. package/dist/storage/index-store.js.map +1 -1
  100. package/dist/storage/session-state.d.ts +1 -1
  101. package/dist/storage/session-state.d.ts.map +1 -1
  102. package/dist/storage/session-state.js +6 -4
  103. package/dist/storage/session-state.js.map +1 -1
  104. package/dist/tools/agent-config-tools.d.ts +24 -0
  105. package/dist/tools/agent-config-tools.d.ts.map +1 -0
  106. package/dist/tools/agent-config-tools.js +119 -0
  107. package/dist/tools/agent-config-tools.js.map +1 -0
  108. package/dist/tools/architecture-tools.d.ts +23 -0
  109. package/dist/tools/architecture-tools.d.ts.map +1 -0
  110. package/dist/tools/architecture-tools.js +140 -0
  111. package/dist/tools/architecture-tools.js.map +1 -0
  112. package/dist/tools/astro-config.d.ts +33 -0
  113. package/dist/tools/astro-config.d.ts.map +1 -0
  114. package/dist/tools/astro-config.js +260 -0
  115. package/dist/tools/astro-config.js.map +1 -0
  116. package/dist/tools/astro-islands.d.ts +61 -0
  117. package/dist/tools/astro-islands.d.ts.map +1 -0
  118. package/dist/tools/astro-islands.js +240 -0
  119. package/dist/tools/astro-islands.js.map +1 -0
  120. package/dist/tools/astro-routes.d.ts +49 -0
  121. package/dist/tools/astro-routes.d.ts.map +1 -0
  122. package/dist/tools/astro-routes.js +119 -0
  123. package/dist/tools/astro-routes.js.map +1 -0
  124. package/dist/tools/audit-tools.d.ts +38 -0
  125. package/dist/tools/audit-tools.d.ts.map +1 -0
  126. package/dist/tools/audit-tools.js +248 -0
  127. package/dist/tools/audit-tools.js.map +1 -0
  128. package/dist/tools/celery-tools.d.ts +38 -0
  129. package/dist/tools/celery-tools.d.ts.map +1 -0
  130. package/dist/tools/celery-tools.js +154 -0
  131. package/dist/tools/celery-tools.js.map +1 -0
  132. package/dist/tools/clone-tools.js +1 -1
  133. package/dist/tools/clone-tools.js.map +1 -1
  134. package/dist/tools/complexity-tools.d.ts +4 -0
  135. package/dist/tools/complexity-tools.d.ts.map +1 -1
  136. package/dist/tools/complexity-tools.js +78 -4
  137. package/dist/tools/complexity-tools.js.map +1 -1
  138. package/dist/tools/compose-tools.d.ts +60 -0
  139. package/dist/tools/compose-tools.d.ts.map +1 -0
  140. package/dist/tools/compose-tools.js +203 -0
  141. package/dist/tools/compose-tools.js.map +1 -0
  142. package/dist/tools/coupling-tools.d.ts +50 -0
  143. package/dist/tools/coupling-tools.d.ts.map +1 -0
  144. package/dist/tools/coupling-tools.js +262 -0
  145. package/dist/tools/coupling-tools.js.map +1 -0
  146. package/dist/tools/dependency-audit-tools.d.ts +65 -0
  147. package/dist/tools/dependency-audit-tools.d.ts.map +1 -0
  148. package/dist/tools/dependency-audit-tools.js +553 -0
  149. package/dist/tools/dependency-audit-tools.js.map +1 -0
  150. package/dist/tools/django-settings.d.ts +22 -0
  151. package/dist/tools/django-settings.d.ts.map +1 -0
  152. package/dist/tools/django-settings.js +301 -0
  153. package/dist/tools/django-settings.js.map +1 -0
  154. package/dist/tools/frequency-tools.js +1 -1
  155. package/dist/tools/frequency-tools.js.map +1 -1
  156. package/dist/tools/graph-tools.d.ts +8 -2
  157. package/dist/tools/graph-tools.d.ts.map +1 -1
  158. package/dist/tools/graph-tools.js +44 -3
  159. package/dist/tools/graph-tools.js.map +1 -1
  160. package/dist/tools/hilt-tools.d.ts +55 -0
  161. package/dist/tools/hilt-tools.d.ts.map +1 -0
  162. package/dist/tools/hilt-tools.js +258 -0
  163. package/dist/tools/hilt-tools.js.map +1 -0
  164. package/dist/tools/hono-analyze-app.d.ts +48 -0
  165. package/dist/tools/hono-analyze-app.d.ts.map +1 -0
  166. package/dist/tools/hono-analyze-app.js +102 -0
  167. package/dist/tools/hono-analyze-app.js.map +1 -0
  168. package/dist/tools/hono-api-contract.d.ts +22 -0
  169. package/dist/tools/hono-api-contract.d.ts.map +1 -0
  170. package/dist/tools/hono-api-contract.js +80 -0
  171. package/dist/tools/hono-api-contract.js.map +1 -0
  172. package/dist/tools/hono-conditional-middleware.d.ts +27 -0
  173. package/dist/tools/hono-conditional-middleware.d.ts.map +1 -0
  174. package/dist/tools/hono-conditional-middleware.js +62 -0
  175. package/dist/tools/hono-conditional-middleware.js.map +1 -0
  176. package/dist/tools/hono-context-flow.d.ts +24 -0
  177. package/dist/tools/hono-context-flow.d.ts.map +1 -0
  178. package/dist/tools/hono-context-flow.js +78 -0
  179. package/dist/tools/hono-context-flow.js.map +1 -0
  180. package/dist/tools/hono-dead-routes.d.ts +26 -0
  181. package/dist/tools/hono-dead-routes.d.ts.map +1 -0
  182. package/dist/tools/hono-dead-routes.js +109 -0
  183. package/dist/tools/hono-dead-routes.js.map +1 -0
  184. package/dist/tools/hono-env-regression.d.ts +29 -0
  185. package/dist/tools/hono-env-regression.d.ts.map +1 -0
  186. package/dist/tools/hono-env-regression.js +157 -0
  187. package/dist/tools/hono-env-regression.js.map +1 -0
  188. package/dist/tools/hono-inline-analyze.d.ts +31 -0
  189. package/dist/tools/hono-inline-analyze.d.ts.map +1 -0
  190. package/dist/tools/hono-inline-analyze.js +67 -0
  191. package/dist/tools/hono-inline-analyze.js.map +1 -0
  192. package/dist/tools/hono-middleware-chain.d.ts +22 -0
  193. package/dist/tools/hono-middleware-chain.d.ts.map +1 -0
  194. package/dist/tools/hono-middleware-chain.js +84 -0
  195. package/dist/tools/hono-middleware-chain.js.map +1 -0
  196. package/dist/tools/hono-modules.d.ts +22 -0
  197. package/dist/tools/hono-modules.d.ts.map +1 -0
  198. package/dist/tools/hono-modules.js +126 -0
  199. package/dist/tools/hono-modules.js.map +1 -0
  200. package/dist/tools/hono-response-types.d.ts +37 -0
  201. package/dist/tools/hono-response-types.d.ts.map +1 -0
  202. package/dist/tools/hono-response-types.js +84 -0
  203. package/dist/tools/hono-response-types.js.map +1 -0
  204. package/dist/tools/hono-rpc-types.d.ts +21 -0
  205. package/dist/tools/hono-rpc-types.d.ts.map +1 -0
  206. package/dist/tools/hono-rpc-types.js +57 -0
  207. package/dist/tools/hono-rpc-types.js.map +1 -0
  208. package/dist/tools/hono-security.d.ts +21 -0
  209. package/dist/tools/hono-security.d.ts.map +1 -0
  210. package/dist/tools/hono-security.js +98 -0
  211. package/dist/tools/hono-security.js.map +1 -0
  212. package/dist/tools/hono-visualize.d.ts +13 -0
  213. package/dist/tools/hono-visualize.d.ts.map +1 -0
  214. package/dist/tools/hono-visualize.js +72 -0
  215. package/dist/tools/hono-visualize.js.map +1 -0
  216. package/dist/tools/hotspot-tools.d.ts.map +1 -1
  217. package/dist/tools/hotspot-tools.js +9 -7
  218. package/dist/tools/hotspot-tools.js.map +1 -1
  219. package/dist/tools/index-tools.d.ts +17 -0
  220. package/dist/tools/index-tools.d.ts.map +1 -1
  221. package/dist/tools/index-tools.js +210 -10
  222. package/dist/tools/index-tools.js.map +1 -1
  223. package/dist/tools/kotlin-tools.d.ts +142 -0
  224. package/dist/tools/kotlin-tools.d.ts.map +1 -0
  225. package/dist/tools/kotlin-tools.js +572 -0
  226. package/dist/tools/kotlin-tools.js.map +1 -0
  227. package/dist/tools/legacy-hono-conventions.d.ts +14 -0
  228. package/dist/tools/legacy-hono-conventions.d.ts.map +1 -0
  229. package/dist/tools/legacy-hono-conventions.js +152 -0
  230. package/dist/tools/legacy-hono-conventions.js.map +1 -0
  231. package/dist/tools/migration-lint-tools.d.ts +26 -0
  232. package/dist/tools/migration-lint-tools.d.ts.map +1 -0
  233. package/dist/tools/migration-lint-tools.js +247 -0
  234. package/dist/tools/migration-lint-tools.js.map +1 -0
  235. package/dist/tools/model-tools.d.ts +30 -0
  236. package/dist/tools/model-tools.d.ts.map +1 -0
  237. package/dist/tools/model-tools.js +145 -0
  238. package/dist/tools/model-tools.js.map +1 -0
  239. package/dist/tools/nest-ext-tools.d.ts +92 -0
  240. package/dist/tools/nest-ext-tools.d.ts.map +1 -0
  241. package/dist/tools/nest-ext-tools.js +359 -0
  242. package/dist/tools/nest-ext-tools.js.map +1 -0
  243. package/dist/tools/nest-tools.d.ts +171 -0
  244. package/dist/tools/nest-tools.d.ts.map +1 -0
  245. package/dist/tools/nest-tools.js +1042 -0
  246. package/dist/tools/nest-tools.js.map +1 -0
  247. package/dist/tools/nextjs-api-contract-readers.d.ts +14 -0
  248. package/dist/tools/nextjs-api-contract-readers.d.ts.map +1 -0
  249. package/dist/tools/nextjs-api-contract-readers.js +204 -0
  250. package/dist/tools/nextjs-api-contract-readers.js.map +1 -0
  251. package/dist/tools/nextjs-api-contract-tools.d.ts +57 -0
  252. package/dist/tools/nextjs-api-contract-tools.d.ts.map +1 -0
  253. package/dist/tools/nextjs-api-contract-tools.js +144 -0
  254. package/dist/tools/nextjs-api-contract-tools.js.map +1 -0
  255. package/dist/tools/nextjs-boundary-tools.d.ts +39 -0
  256. package/dist/tools/nextjs-boundary-tools.d.ts.map +1 -0
  257. package/dist/tools/nextjs-boundary-tools.js +152 -0
  258. package/dist/tools/nextjs-boundary-tools.js.map +1 -0
  259. package/dist/tools/nextjs-component-tools.d.ts +121 -0
  260. package/dist/tools/nextjs-component-tools.d.ts.map +1 -0
  261. package/dist/tools/nextjs-component-tools.js +460 -0
  262. package/dist/tools/nextjs-component-tools.js.map +1 -0
  263. package/dist/tools/nextjs-data-flow-tools.d.ts +42 -0
  264. package/dist/tools/nextjs-data-flow-tools.d.ts.map +1 -0
  265. package/dist/tools/nextjs-data-flow-tools.js +158 -0
  266. package/dist/tools/nextjs-data-flow-tools.js.map +1 -0
  267. package/dist/tools/nextjs-framework-audit-tools.d.ts +37 -0
  268. package/dist/tools/nextjs-framework-audit-tools.d.ts.map +1 -0
  269. package/dist/tools/nextjs-framework-audit-tools.js +211 -0
  270. package/dist/tools/nextjs-framework-audit-tools.js.map +1 -0
  271. package/dist/tools/nextjs-link-tools.d.ts +41 -0
  272. package/dist/tools/nextjs-link-tools.d.ts.map +1 -0
  273. package/dist/tools/nextjs-link-tools.js +157 -0
  274. package/dist/tools/nextjs-link-tools.js.map +1 -0
  275. package/dist/tools/nextjs-metadata-tools.d.ts +74 -0
  276. package/dist/tools/nextjs-metadata-tools.d.ts.map +1 -0
  277. package/dist/tools/nextjs-metadata-tools.js +252 -0
  278. package/dist/tools/nextjs-metadata-tools.js.map +1 -0
  279. package/dist/tools/nextjs-middleware-coverage-tools.d.ts +41 -0
  280. package/dist/tools/nextjs-middleware-coverage-tools.d.ts.map +1 -0
  281. package/dist/tools/nextjs-middleware-coverage-tools.js +88 -0
  282. package/dist/tools/nextjs-middleware-coverage-tools.js.map +1 -0
  283. package/dist/tools/nextjs-route-tools.d.ts +100 -0
  284. package/dist/tools/nextjs-route-tools.d.ts.map +1 -0
  285. package/dist/tools/nextjs-route-tools.js +493 -0
  286. package/dist/tools/nextjs-route-tools.js.map +1 -0
  287. package/dist/tools/nextjs-security-readers.d.ts +22 -0
  288. package/dist/tools/nextjs-security-readers.d.ts.map +1 -0
  289. package/dist/tools/nextjs-security-readers.js +318 -0
  290. package/dist/tools/nextjs-security-readers.js.map +1 -0
  291. package/dist/tools/nextjs-security-scoring.d.ts +15 -0
  292. package/dist/tools/nextjs-security-scoring.d.ts.map +1 -0
  293. package/dist/tools/nextjs-security-scoring.js +65 -0
  294. package/dist/tools/nextjs-security-scoring.js.map +1 -0
  295. package/dist/tools/nextjs-security-tools.d.ts +75 -0
  296. package/dist/tools/nextjs-security-tools.d.ts.map +1 -0
  297. package/dist/tools/nextjs-security-tools.js +153 -0
  298. package/dist/tools/nextjs-security-tools.js.map +1 -0
  299. package/dist/tools/nextjs-tools.d.ts +15 -0
  300. package/dist/tools/nextjs-tools.d.ts.map +1 -0
  301. package/dist/tools/nextjs-tools.js +15 -0
  302. package/dist/tools/nextjs-tools.js.map +1 -0
  303. package/dist/tools/outline-tools.d.ts.map +1 -1
  304. package/dist/tools/outline-tools.js +20 -0
  305. package/dist/tools/outline-tools.js.map +1 -1
  306. package/dist/tools/pattern-tools.d.ts +8 -0
  307. package/dist/tools/pattern-tools.d.ts.map +1 -1
  308. package/dist/tools/pattern-tools.js +561 -3
  309. package/dist/tools/pattern-tools.js.map +1 -1
  310. package/dist/tools/perf-tools.d.ts +32 -0
  311. package/dist/tools/perf-tools.d.ts.map +1 -0
  312. package/dist/tools/perf-tools.js +227 -0
  313. package/dist/tools/perf-tools.js.map +1 -0
  314. package/dist/tools/php-tools.d.ts +176 -0
  315. package/dist/tools/php-tools.d.ts.map +1 -0
  316. package/dist/tools/php-tools.js +543 -0
  317. package/dist/tools/php-tools.js.map +1 -0
  318. package/dist/tools/prisma-schema-tools.d.ts +44 -0
  319. package/dist/tools/prisma-schema-tools.d.ts.map +1 -0
  320. package/dist/tools/prisma-schema-tools.js +358 -0
  321. package/dist/tools/prisma-schema-tools.js.map +1 -0
  322. package/dist/tools/project-tools.d.ts +115 -6
  323. package/dist/tools/project-tools.d.ts.map +1 -1
  324. package/dist/tools/project-tools.js +594 -217
  325. package/dist/tools/project-tools.js.map +1 -1
  326. package/dist/tools/pyproject-tools.d.ts +23 -0
  327. package/dist/tools/pyproject-tools.d.ts.map +1 -0
  328. package/dist/tools/pyproject-tools.js +133 -0
  329. package/dist/tools/pyproject-tools.js.map +1 -0
  330. package/dist/tools/pytest-tools.d.ts +20 -0
  331. package/dist/tools/pytest-tools.d.ts.map +1 -0
  332. package/dist/tools/pytest-tools.js +106 -0
  333. package/dist/tools/pytest-tools.js.map +1 -0
  334. package/dist/tools/python-callers.d.ts +28 -0
  335. package/dist/tools/python-callers.d.ts.map +1 -0
  336. package/dist/tools/python-callers.js +110 -0
  337. package/dist/tools/python-callers.js.map +1 -0
  338. package/dist/tools/python-circular-imports.d.ts +19 -0
  339. package/dist/tools/python-circular-imports.d.ts.map +1 -0
  340. package/dist/tools/python-circular-imports.js +126 -0
  341. package/dist/tools/python-circular-imports.js.map +1 -0
  342. package/dist/tools/python-deps-analyzer.d.ts +46 -0
  343. package/dist/tools/python-deps-analyzer.d.ts.map +1 -0
  344. package/dist/tools/python-deps-analyzer.js +227 -0
  345. package/dist/tools/python-deps-analyzer.js.map +1 -0
  346. package/dist/tools/query-tools.d.ts +23 -0
  347. package/dist/tools/query-tools.d.ts.map +1 -0
  348. package/dist/tools/query-tools.js +256 -0
  349. package/dist/tools/query-tools.js.map +1 -0
  350. package/dist/tools/react-tools.d.ts +218 -0
  351. package/dist/tools/react-tools.d.ts.map +1 -0
  352. package/dist/tools/react-tools.js +714 -0
  353. package/dist/tools/react-tools.js.map +1 -0
  354. package/dist/tools/report-tools.js +47 -0
  355. package/dist/tools/report-tools.js.map +1 -1
  356. package/dist/tools/review-diff-tools.d.ts +2 -6
  357. package/dist/tools/review-diff-tools.d.ts.map +1 -1
  358. package/dist/tools/review-diff-tools.js +51 -66
  359. package/dist/tools/review-diff-tools.js.map +1 -1
  360. package/dist/tools/room-tools.d.ts +36 -0
  361. package/dist/tools/room-tools.d.ts.map +1 -0
  362. package/dist/tools/room-tools.js +147 -0
  363. package/dist/tools/room-tools.js.map +1 -0
  364. package/dist/tools/route-tools.d.ts +27 -1
  365. package/dist/tools/route-tools.d.ts.map +1 -1
  366. package/dist/tools/route-tools.js +744 -18
  367. package/dist/tools/route-tools.js.map +1 -1
  368. package/dist/tools/ruff-tools.d.ts +32 -0
  369. package/dist/tools/ruff-tools.d.ts.map +1 -0
  370. package/dist/tools/ruff-tools.js +114 -0
  371. package/dist/tools/ruff-tools.js.map +1 -0
  372. package/dist/tools/search-ranker.d.ts.map +1 -1
  373. package/dist/tools/search-ranker.js +7 -0
  374. package/dist/tools/search-ranker.js.map +1 -1
  375. package/dist/tools/serialization-tools.d.ts +24 -0
  376. package/dist/tools/serialization-tools.d.ts.map +1 -0
  377. package/dist/tools/serialization-tools.js +156 -0
  378. package/dist/tools/serialization-tools.js.map +1 -0
  379. package/dist/tools/sql-tools.d.ts +234 -0
  380. package/dist/tools/sql-tools.d.ts.map +1 -0
  381. package/dist/tools/sql-tools.js +1037 -0
  382. package/dist/tools/sql-tools.js.map +1 -0
  383. package/dist/tools/status-tools.d.ts +10 -0
  384. package/dist/tools/status-tools.d.ts.map +1 -0
  385. package/dist/tools/status-tools.js +32 -0
  386. package/dist/tools/status-tools.js.map +1 -0
  387. package/dist/tools/symbol-tools.d.ts +19 -0
  388. package/dist/tools/symbol-tools.d.ts.map +1 -1
  389. package/dist/tools/symbol-tools.js +78 -4
  390. package/dist/tools/symbol-tools.js.map +1 -1
  391. package/dist/tools/test-impact-tools.d.ts +29 -0
  392. package/dist/tools/test-impact-tools.d.ts.map +1 -0
  393. package/dist/tools/test-impact-tools.js +156 -0
  394. package/dist/tools/test-impact-tools.js.map +1 -0
  395. package/dist/tools/typecheck-tools.d.ts +39 -0
  396. package/dist/tools/typecheck-tools.d.ts.map +1 -0
  397. package/dist/tools/typecheck-tools.js +191 -0
  398. package/dist/tools/typecheck-tools.js.map +1 -0
  399. package/dist/tools/wiring-tools.d.ts +19 -0
  400. package/dist/tools/wiring-tools.d.ts.map +1 -0
  401. package/dist/tools/wiring-tools.js +147 -0
  402. package/dist/tools/wiring-tools.js.map +1 -0
  403. package/dist/types.d.ts +9 -1
  404. package/dist/types.d.ts.map +1 -1
  405. package/dist/utils/framework-detect.d.ts +18 -2
  406. package/dist/utils/framework-detect.d.ts.map +1 -1
  407. package/dist/utils/framework-detect.js +150 -3
  408. package/dist/utils/framework-detect.js.map +1 -1
  409. package/dist/utils/import-graph.d.ts +36 -0
  410. package/dist/utils/import-graph.d.ts.map +1 -1
  411. package/dist/utils/import-graph.js +212 -9
  412. package/dist/utils/import-graph.js.map +1 -1
  413. package/dist/utils/language-detect.d.ts +21 -0
  414. package/dist/utils/language-detect.d.ts.map +1 -0
  415. package/dist/utils/language-detect.js +183 -0
  416. package/dist/utils/language-detect.js.map +1 -0
  417. package/dist/utils/nextjs-ast-readers.d.ts +44 -0
  418. package/dist/utils/nextjs-ast-readers.d.ts.map +1 -0
  419. package/dist/utils/nextjs-ast-readers.js +341 -0
  420. package/dist/utils/nextjs-ast-readers.js.map +1 -0
  421. package/dist/utils/nextjs-audit-cache.d.ts +51 -0
  422. package/dist/utils/nextjs-audit-cache.d.ts.map +1 -0
  423. package/dist/utils/nextjs-audit-cache.js +116 -0
  424. package/dist/utils/nextjs-audit-cache.js.map +1 -0
  425. package/dist/utils/nextjs-metadata-readers.d.ts +65 -0
  426. package/dist/utils/nextjs-metadata-readers.d.ts.map +1 -0
  427. package/dist/utils/nextjs-metadata-readers.js +447 -0
  428. package/dist/utils/nextjs-metadata-readers.js.map +1 -0
  429. package/dist/utils/nextjs.d.ts +42 -0
  430. package/dist/utils/nextjs.d.ts.map +1 -0
  431. package/dist/utils/nextjs.js +284 -0
  432. package/dist/utils/nextjs.js.map +1 -0
  433. package/dist/utils/python-import-resolver.d.ts +42 -0
  434. package/dist/utils/python-import-resolver.d.ts.map +1 -0
  435. package/dist/utils/python-import-resolver.js +101 -0
  436. package/dist/utils/python-import-resolver.js.map +1 -0
  437. package/dist/utils/python-imports.d.ts +28 -0
  438. package/dist/utils/python-imports.d.ts.map +1 -0
  439. package/dist/utils/python-imports.js +117 -0
  440. package/dist/utils/python-imports.js.map +1 -0
  441. package/dist/utils/react-alias.d.ts +15 -0
  442. package/dist/utils/react-alias.d.ts.map +1 -0
  443. package/dist/utils/react-alias.js +31 -0
  444. package/dist/utils/react-alias.js.map +1 -0
  445. package/dist/utils/test-file.d.ts.map +1 -1
  446. package/dist/utils/test-file.js +7 -0
  447. package/dist/utils/test-file.js.map +1 -1
  448. package/dist/utils/walk.d.ts +22 -0
  449. package/dist/utils/walk.d.ts.map +1 -1
  450. package/dist/utils/walk.js +70 -2
  451. package/dist/utils/walk.js.map +1 -1
  452. package/package.json +3 -2
  453. package/rules/codesift.md +33 -5
  454. package/rules/codesift.mdc +33 -5
  455. package/rules/codex.md +33 -5
  456. package/rules/gemini.md +33 -5
  457. package/src/parser/languages/tree-sitter-javascript.wasm +0 -0
  458. package/src/parser/languages/tree-sitter-kotlin.wasm +0 -0
  459. package/src/parser/languages/tree-sitter-php.wasm +0 -0
  460. package/src/parser/languages/tree-sitter-php_only.wasm +0 -0
  461. package/src/parser/languages/tree-sitter-python.wasm +0 -0
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Shared cache for the Next.js framework audit (T11).
3
+ *
4
+ * Sub-tools called by `frameworkAudit` re-walk the same files and re-parse
5
+ * the same trees. This cache shares parsed tree promises and walk results
6
+ * across sub-tools, with a TTL eviction policy so long-running servers don't
7
+ * grow unbounded.
8
+ *
9
+ * Pattern: promise-sharing (not result caching). Concurrent calls for the
10
+ * same key reuse the in-flight promise. After resolution, the result stays
11
+ * in cache until the TTL expires.
12
+ */
13
+ import { parseFile } from "../parser/parser-manager.js";
14
+ import { walkDirectory } from "./walk.js";
15
+ const DEFAULT_TTL_MS = 60000;
16
+ // ---------------------------------------------------------------------------
17
+ // Module-level singleton for framework_audit to share across sub-tools
18
+ // ---------------------------------------------------------------------------
19
+ let _globalCache = null;
20
+ /** Activate the shared cache (called by frameworkAudit at start). */
21
+ export function activateGlobalCache() {
22
+ _globalCache = new NextjsAuditCache();
23
+ return _globalCache;
24
+ }
25
+ /** Deactivate and clear (called by frameworkAudit at end). */
26
+ export function deactivateGlobalCache() {
27
+ _globalCache?.clear();
28
+ _globalCache = null;
29
+ }
30
+ /** Get the active cache, or null if not in a framework_audit context. */
31
+ export function getGlobalCache() {
32
+ return _globalCache;
33
+ }
34
+ /**
35
+ * Proxy for walkDirectory that uses global cache when active.
36
+ * Drop-in replacement — same signature as walkDirectory.
37
+ */
38
+ export async function cachedWalkDirectory(root, options) {
39
+ if (_globalCache)
40
+ return _globalCache.getWalk(root, options);
41
+ return walkDirectory(root, options);
42
+ }
43
+ /**
44
+ * Proxy for parseFile that uses global cache when active.
45
+ * Drop-in replacement — same signature as parseFile.
46
+ */
47
+ export async function cachedParseFile(path, source) {
48
+ if (_globalCache)
49
+ return _globalCache.getParsedFile(path, source);
50
+ return parseFile(path, source);
51
+ }
52
+ export class NextjsAuditCache {
53
+ parseFileCache = new Map();
54
+ walkCache = new Map();
55
+ ttl;
56
+ constructor() {
57
+ const envTtl = process.env.NEXTJS_AST_CACHE_TTL_MS;
58
+ if (envTtl !== undefined) {
59
+ const parsed = Number(envTtl);
60
+ this.ttl = Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_TTL_MS;
61
+ }
62
+ else {
63
+ this.ttl = DEFAULT_TTL_MS;
64
+ }
65
+ }
66
+ /**
67
+ * Parse and cache a file. Concurrent calls share the same promise.
68
+ * Synchronous (returns the cached/in-flight Promise directly) so that
69
+ * `cache.getParsedFile(p) === cache.getParsedFile(p)` for concurrent calls.
70
+ */
71
+ getParsedFile(path, source) {
72
+ const now = Date.now();
73
+ this.evictExpired(now);
74
+ const cached = this.parseFileCache.get(path);
75
+ if (cached && cached.expires > now) {
76
+ return cached.promise;
77
+ }
78
+ const promise = parseFile(path, source);
79
+ this.parseFileCache.set(path, { promise, expires: now + this.ttl });
80
+ return promise;
81
+ }
82
+ /** Walk and cache a directory. Concurrent calls share the same promise. */
83
+ getWalk(root, options) {
84
+ const key = `${root}::${JSON.stringify(options ?? {})}`;
85
+ const now = Date.now();
86
+ this.evictExpired(now);
87
+ const cached = this.walkCache.get(key);
88
+ if (cached && cached.expires > now) {
89
+ return cached.promise;
90
+ }
91
+ const promise = walkDirectory(root, options);
92
+ this.walkCache.set(key, { promise, expires: now + this.ttl });
93
+ return promise;
94
+ }
95
+ /** Clear all entries. */
96
+ clear() {
97
+ this.parseFileCache.clear();
98
+ this.walkCache.clear();
99
+ }
100
+ /** Total cached entries. */
101
+ size() {
102
+ return this.parseFileCache.size + this.walkCache.size;
103
+ }
104
+ /** Evict entries whose TTL has passed. */
105
+ evictExpired(now) {
106
+ for (const [key, entry] of this.parseFileCache) {
107
+ if (entry.expires <= now)
108
+ this.parseFileCache.delete(key);
109
+ }
110
+ for (const [key, entry] of this.walkCache) {
111
+ if (entry.expires <= now)
112
+ this.walkCache.delete(key);
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=nextjs-audit-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs-audit-cache.js","sourceRoot":"","sources":["../../src/utils/nextjs-audit-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type Parser from "web-tree-sitter";
2
+ export interface MetadataFields {
3
+ title?: string;
4
+ description?: string;
5
+ openGraph?: {
6
+ title?: string;
7
+ description?: string;
8
+ images?: string[];
9
+ };
10
+ twitter?: {
11
+ card?: string;
12
+ title?: string;
13
+ description?: string;
14
+ };
15
+ alternates?: {
16
+ canonical?: string;
17
+ };
18
+ robots?: string;
19
+ other?: Record<string, unknown>;
20
+ /** Set when the metadata export references an identifier or a non-literal expression. */
21
+ _non_literal?: boolean;
22
+ }
23
+ /** Unwrap a tree-sitter string node (e.g. `"foo"`, `'foo'`, `` `foo` ``) to its literal content, or null. */
24
+ export declare function readStringLiteral(node: Parser.SyntaxNode | null | undefined): string | null;
25
+ /**
26
+ * Parse a Next.js page/layout for `metadata` or `generateMetadata` exports.
27
+ *
28
+ * Supports two shapes:
29
+ * - `export const metadata = { title: "...", ... }`
30
+ * - `export async function generateMetadata() { return { ... }; }`
31
+ *
32
+ * Returns an empty object when no metadata export is present, and sets
33
+ * `_non_literal: true` when the export exists but is not a parseable object
34
+ * literal (e.g. `export const metadata = someExternal`).
35
+ */
36
+ export declare function parseMetadataExport(tree: Parser.Tree, _source: string): MetadataFields;
37
+ export type FetchCallee = "fetch" | "cookies" | "headers" | "unstable_noStore";
38
+ export interface FetchCall {
39
+ callee: FetchCallee;
40
+ line: number;
41
+ /**
42
+ * Parsed cache directive from fetch() options:
43
+ * - `"force-cache"` / `"no-store"` / `"default"` / ...
44
+ * - `"isr-60"` for `next: { revalidate: 60 }`
45
+ * - `null` when no options or fetch callee
46
+ */
47
+ cacheOption: string | null;
48
+ /** True if this awaited call is sequential w.r.t. a previous await in the same block. */
49
+ isSequential: boolean;
50
+ /** True if this call forces SSR (cookies/headers, fetch no-store, unstable_noStore). */
51
+ isSsrTrigger: boolean;
52
+ }
53
+ /**
54
+ * Read all fetch/cookies/headers/unstable_noStore calls out of a tree.
55
+ *
56
+ * `isSequential` is set when two awaited fetches live in the same statement_block
57
+ * with no identifier overlap between the earlier statement's bindings and the
58
+ * later statement's argument expression. Callers wanting waterfall detection
59
+ * use this flag directly.
60
+ *
61
+ * `// sequential intentional` comments on the line preceding an await suppress
62
+ * the flag for that await.
63
+ */
64
+ export declare function extractFetchCalls(tree: Parser.Tree, source: string): FetchCall[];
65
+ //# sourceMappingURL=nextjs-metadata-readers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs-metadata-readers.d.ts","sourceRoot":"","sources":["../../src/utils/nextjs-metadata-readers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAM1C,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,yFAAyF;IACzF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,6GAA6G;AAC7G,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAmB3F;AA8HD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CA6DtF;AAMD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,kBAAkB,CAAC;AAE/E,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAC;IACtB,wFAAwF;IACxF,YAAY,EAAE,OAAO,CAAC;CACvB;AAoGD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CA0HhF"}
@@ -0,0 +1,447 @@
1
+ /** Unwrap a tree-sitter string node (e.g. `"foo"`, `'foo'`, `` `foo` ``) to its literal content, or null. */
2
+ export function readStringLiteral(node) {
3
+ if (!node)
4
+ return null;
5
+ if (node.type === "string") {
6
+ // Look for string_fragment child first (quoted string)
7
+ const frag = node.namedChildren.find((c) => c.type === "string_fragment");
8
+ if (frag)
9
+ return frag.text;
10
+ const raw = node.text;
11
+ if (raw.length >= 2)
12
+ return raw.slice(1, -1);
13
+ return raw;
14
+ }
15
+ if (node.type === "template_string") {
16
+ // Only accept fully-literal template strings (no substitutions)
17
+ const hasSubs = node.namedChildren.some((c) => c.type === "template_substitution");
18
+ if (hasSubs)
19
+ return null;
20
+ const raw = node.text;
21
+ if (raw.length >= 2)
22
+ return raw.slice(1, -1);
23
+ return raw;
24
+ }
25
+ return null;
26
+ }
27
+ /** Extract a string-literal array (e.g. `["a","b"]`) into a string[]. Returns null if any element is non-literal. */
28
+ function readStringArray(node) {
29
+ if (!node || node.type !== "array")
30
+ return null;
31
+ const out = [];
32
+ for (const el of node.namedChildren) {
33
+ const s = readStringLiteral(el);
34
+ if (s === null)
35
+ return null;
36
+ out.push(s);
37
+ }
38
+ return out;
39
+ }
40
+ /** Walk an object literal node and return a map of literal key -> child value node. */
41
+ function readObjectPairs(node) {
42
+ const map = new Map();
43
+ if (node.type !== "object")
44
+ return map;
45
+ for (const pair of node.namedChildren) {
46
+ if (pair.type !== "pair")
47
+ continue;
48
+ const key = pair.childForFieldName("key") ?? pair.namedChild(0);
49
+ if (!key)
50
+ continue;
51
+ let keyText = null;
52
+ if (key.type === "property_identifier" || key.type === "identifier") {
53
+ keyText = key.text;
54
+ }
55
+ else if (key.type === "string") {
56
+ keyText = readStringLiteral(key);
57
+ }
58
+ if (!keyText)
59
+ continue;
60
+ const value = pair.childForFieldName("value") ?? pair.namedChild(1);
61
+ if (value)
62
+ map.set(keyText, value);
63
+ }
64
+ return map;
65
+ }
66
+ /** Read known metadata fields off an object-literal node into the MetadataFields shape. */
67
+ function readMetadataObject(obj) {
68
+ const out = {};
69
+ if (obj.type !== "object")
70
+ return out;
71
+ const pairs = readObjectPairs(obj);
72
+ const title = pairs.get("title");
73
+ if (title) {
74
+ const s = readStringLiteral(title);
75
+ if (s !== null)
76
+ out.title = s;
77
+ }
78
+ const description = pairs.get("description");
79
+ if (description) {
80
+ const s = readStringLiteral(description);
81
+ if (s !== null)
82
+ out.description = s;
83
+ }
84
+ const robots = pairs.get("robots");
85
+ if (robots) {
86
+ const s = readStringLiteral(robots);
87
+ if (s !== null)
88
+ out.robots = s;
89
+ }
90
+ const openGraph = pairs.get("openGraph");
91
+ if (openGraph && openGraph.type === "object") {
92
+ const ogPairs = readObjectPairs(openGraph);
93
+ const og = {};
94
+ const ogTitle = ogPairs.get("title");
95
+ if (ogTitle) {
96
+ const s = readStringLiteral(ogTitle);
97
+ if (s !== null)
98
+ og.title = s;
99
+ }
100
+ const ogDesc = ogPairs.get("description");
101
+ if (ogDesc) {
102
+ const s = readStringLiteral(ogDesc);
103
+ if (s !== null)
104
+ og.description = s;
105
+ }
106
+ const ogImages = ogPairs.get("images");
107
+ if (ogImages) {
108
+ const arr = readStringArray(ogImages);
109
+ if (arr)
110
+ og.images = arr;
111
+ }
112
+ out.openGraph = og;
113
+ }
114
+ const twitter = pairs.get("twitter");
115
+ if (twitter && twitter.type === "object") {
116
+ const tPairs = readObjectPairs(twitter);
117
+ const tw = {};
118
+ const tCard = tPairs.get("card");
119
+ if (tCard) {
120
+ const s = readStringLiteral(tCard);
121
+ if (s !== null)
122
+ tw.card = s;
123
+ }
124
+ const tTitle = tPairs.get("title");
125
+ if (tTitle) {
126
+ const s = readStringLiteral(tTitle);
127
+ if (s !== null)
128
+ tw.title = s;
129
+ }
130
+ const tDesc = tPairs.get("description");
131
+ if (tDesc) {
132
+ const s = readStringLiteral(tDesc);
133
+ if (s !== null)
134
+ tw.description = s;
135
+ }
136
+ out.twitter = tw;
137
+ }
138
+ const alternates = pairs.get("alternates");
139
+ if (alternates && alternates.type === "object") {
140
+ const aPairs = readObjectPairs(alternates);
141
+ const alt = {};
142
+ const canonical = aPairs.get("canonical");
143
+ if (canonical) {
144
+ const s = readStringLiteral(canonical);
145
+ if (s !== null)
146
+ alt.canonical = s;
147
+ }
148
+ out.alternates = alt;
149
+ }
150
+ const other = pairs.get("other");
151
+ if (other && other.type === "object") {
152
+ // Store the raw text; callers treat this as opaque "any custom fields exist" marker.
153
+ out.other = { _raw: other.text };
154
+ }
155
+ return out;
156
+ }
157
+ /**
158
+ * Parse a Next.js page/layout for `metadata` or `generateMetadata` exports.
159
+ *
160
+ * Supports two shapes:
161
+ * - `export const metadata = { title: "...", ... }`
162
+ * - `export async function generateMetadata() { return { ... }; }`
163
+ *
164
+ * Returns an empty object when no metadata export is present, and sets
165
+ * `_non_literal: true` when the export exists but is not a parseable object
166
+ * literal (e.g. `export const metadata = someExternal`).
167
+ */
168
+ export function parseMetadataExport(tree, _source) {
169
+ const root = tree.rootNode;
170
+ const exportStatements = root.descendantsOfType("export_statement");
171
+ // Pass 1: look for `export const metadata = ...`
172
+ for (const exp of exportStatements) {
173
+ for (const decl of exp.descendantsOfType("variable_declarator")) {
174
+ const name = decl.childForFieldName("name");
175
+ if (name?.text !== "metadata")
176
+ continue;
177
+ const value = decl.childForFieldName("value");
178
+ if (!value)
179
+ return { _non_literal: true };
180
+ if (value.type !== "object")
181
+ return { _non_literal: true };
182
+ return readMetadataObject(value);
183
+ }
184
+ }
185
+ // Pass 2: look for `export async function generateMetadata` (or variant).
186
+ for (const exp of exportStatements) {
187
+ const fnDecl = exp.descendantsOfType("function_declaration")[0];
188
+ if (!fnDecl)
189
+ continue;
190
+ const fnName = fnDecl.childForFieldName("name");
191
+ if (fnName?.text !== "generateMetadata")
192
+ continue;
193
+ // Walk the body for a `return <object>` statement.
194
+ const body = fnDecl.childForFieldName("body");
195
+ if (!body)
196
+ continue;
197
+ const returns = body.descendantsOfType("return_statement");
198
+ for (const ret of returns) {
199
+ // Skip nested return statements belonging to inner functions.
200
+ // Compare by node.id because tree-sitter wrappers are not reference-stable.
201
+ let parent = ret.parent;
202
+ let inInnerFn = false;
203
+ while (parent && parent.id !== fnDecl.id) {
204
+ if (parent.type === "function_declaration" ||
205
+ parent.type === "arrow_function" ||
206
+ parent.type === "function_expression" ||
207
+ parent.type === "method_definition") {
208
+ inInnerFn = true;
209
+ break;
210
+ }
211
+ parent = parent.parent;
212
+ }
213
+ if (inInnerFn)
214
+ continue;
215
+ const retValue = ret.namedChildren[0];
216
+ if (!retValue)
217
+ continue;
218
+ // The returned expression may be wrapped in parentheses: `return ({ ... })`
219
+ const unwrap = retValue.type === "parenthesized_expression"
220
+ ? retValue.namedChildren[0]
221
+ : retValue;
222
+ if (!unwrap)
223
+ continue;
224
+ if (unwrap.type === "object") {
225
+ return readMetadataObject(unwrap);
226
+ }
227
+ // Non-literal return → flag
228
+ return { _non_literal: true };
229
+ }
230
+ }
231
+ return {};
232
+ }
233
+ /** Extract the string-literal or number-literal value of a single pair inside an object node. */
234
+ function readPairValue(obj, key) {
235
+ if (obj.type !== "object")
236
+ return null;
237
+ const pairs = readObjectPairs(obj);
238
+ return pairs.get(key) ?? null;
239
+ }
240
+ function parseCacheOption(optsNode) {
241
+ if (!optsNode || optsNode.type !== "object")
242
+ return null;
243
+ // cache: 'no-store' | 'force-cache' | 'default' | ...
244
+ const cacheVal = readPairValue(optsNode, "cache");
245
+ if (cacheVal) {
246
+ const s = readStringLiteral(cacheVal);
247
+ if (s)
248
+ return s;
249
+ }
250
+ // next: { revalidate: <number> }
251
+ const nextVal = readPairValue(optsNode, "next");
252
+ if (nextVal && nextVal.type === "object") {
253
+ const rev = readPairValue(nextVal, "revalidate");
254
+ if (rev) {
255
+ if (rev.type === "number")
256
+ return `isr-${rev.text}`;
257
+ // Fallback: accept negative/parenthesized numeric text
258
+ const text = rev.text;
259
+ if (/^-?\d+$/.test(text))
260
+ return `isr-${text}`;
261
+ }
262
+ }
263
+ return null;
264
+ }
265
+ /**
266
+ * Collect the enclosing `statement_block` id of a node (for grouping awaits by scope).
267
+ */
268
+ function enclosingBlockId(node) {
269
+ let cur = node.parent;
270
+ while (cur) {
271
+ if (cur.type === "statement_block")
272
+ return cur.id;
273
+ cur = cur.parent;
274
+ }
275
+ return null;
276
+ }
277
+ /**
278
+ * Walk upward from `node` to find the containing `await_expression`, or null.
279
+ */
280
+ function enclosingAwait(node) {
281
+ let cur = node.parent;
282
+ while (cur) {
283
+ if (cur.type === "await_expression")
284
+ return cur;
285
+ if (cur.type === "statement_block" ||
286
+ cur.type === "program" ||
287
+ cur.type === "function_declaration" ||
288
+ cur.type === "arrow_function" ||
289
+ cur.type === "function_expression") {
290
+ return null;
291
+ }
292
+ cur = cur.parent;
293
+ }
294
+ return null;
295
+ }
296
+ /**
297
+ * Collect the identifiers bound by a single statement (`const x = …`, `const {a,b} = …`).
298
+ * Returns an empty set for non-declarations.
299
+ */
300
+ function identifiersBoundByStatement(stmt) {
301
+ const out = new Set();
302
+ if (stmt.type !== "lexical_declaration" && stmt.type !== "variable_declaration") {
303
+ return out;
304
+ }
305
+ for (const decl of stmt.namedChildren) {
306
+ if (decl.type !== "variable_declarator")
307
+ continue;
308
+ const name = decl.childForFieldName("name");
309
+ if (!name)
310
+ continue;
311
+ if (name.type === "identifier") {
312
+ out.add(name.text);
313
+ }
314
+ else if (name.type === "object_pattern" || name.type === "array_pattern") {
315
+ for (const id of name.descendantsOfType("identifier")) {
316
+ out.add(id.text);
317
+ }
318
+ for (const id of name.descendantsOfType("shorthand_property_identifier_pattern")) {
319
+ out.add(id.text);
320
+ }
321
+ }
322
+ }
323
+ return out;
324
+ }
325
+ /** Collect all identifier references inside a subtree. */
326
+ function collectIdentifierRefs(node) {
327
+ const out = new Set();
328
+ for (const id of node.descendantsOfType("identifier")) {
329
+ out.add(id.text);
330
+ }
331
+ return out;
332
+ }
333
+ /**
334
+ * Read all fetch/cookies/headers/unstable_noStore calls out of a tree.
335
+ *
336
+ * `isSequential` is set when two awaited fetches live in the same statement_block
337
+ * with no identifier overlap between the earlier statement's bindings and the
338
+ * later statement's argument expression. Callers wanting waterfall detection
339
+ * use this flag directly.
340
+ *
341
+ * `// sequential intentional` comments on the line preceding an await suppress
342
+ * the flag for that await.
343
+ */
344
+ export function extractFetchCalls(tree, source) {
345
+ const root = tree.rootNode;
346
+ const out = [];
347
+ // Lines with `// sequential intentional` opt-out comment
348
+ const optOutLines = new Set();
349
+ const lines = source.split("\n");
350
+ for (let i = 0; i < lines.length; i++) {
351
+ if (/\/\/\s*sequential intentional/i.test(lines[i])) {
352
+ // The opt-out comment applies to the NEXT line
353
+ optOutLines.add(i + 2); // next source line (1-indexed)
354
+ }
355
+ }
356
+ const raws = [];
357
+ for (const call of root.descendantsOfType("call_expression")) {
358
+ const fn = call.childForFieldName("function") ?? call.namedChild(0);
359
+ if (!fn || fn.type !== "identifier")
360
+ continue;
361
+ const name = fn.text;
362
+ if (name !== "fetch" &&
363
+ name !== "cookies" &&
364
+ name !== "headers" &&
365
+ name !== "unstable_noStore") {
366
+ continue;
367
+ }
368
+ const args = call.childForFieldName("arguments") ?? call.namedChild(1);
369
+ let cacheOption = null;
370
+ if (name === "fetch" && args) {
371
+ const argChildren = args.namedChildren;
372
+ if (argChildren.length >= 2) {
373
+ cacheOption = parseCacheOption(argChildren[1] ?? null);
374
+ }
375
+ }
376
+ // Find the enclosing top-level statement (a direct child of the block)
377
+ let containingStmt = null;
378
+ const blockId = enclosingBlockId(call);
379
+ if (blockId !== null) {
380
+ let p = call;
381
+ while (p && p.parent && p.parent.type !== "statement_block") {
382
+ p = p.parent;
383
+ }
384
+ containingStmt = p;
385
+ }
386
+ raws.push({
387
+ callee: name,
388
+ call,
389
+ line: call.startPosition.row + 1,
390
+ blockId,
391
+ containingStmt,
392
+ awaitNode: enclosingAwait(call),
393
+ cacheOption,
394
+ });
395
+ }
396
+ // Pass 2: compute isSequential per raw call
397
+ for (let i = 0; i < raws.length; i++) {
398
+ const cur = raws[i];
399
+ let isSequential = false;
400
+ if (cur.awaitNode && cur.blockId !== null && cur.containingStmt) {
401
+ // Find any earlier raw in same block, earlier position, also awaited
402
+ for (let j = 0; j < i; j++) {
403
+ const prev = raws[j];
404
+ if (prev.blockId !== cur.blockId)
405
+ continue;
406
+ if (!prev.awaitNode || !prev.containingStmt)
407
+ continue;
408
+ if (prev.containingStmt.endIndex >= cur.containingStmt.startIndex)
409
+ continue;
410
+ // Dependent check: do cur's argument refs overlap prev's bound identifiers?
411
+ const prevBindings = identifiersBoundByStatement(prev.containingStmt);
412
+ if (prevBindings.size > 0) {
413
+ const curArgs = cur.call.childForFieldName("arguments") ?? cur.call.namedChild(1);
414
+ if (curArgs) {
415
+ const refs = collectIdentifierRefs(curArgs);
416
+ let shared = false;
417
+ for (const r of refs) {
418
+ if (prevBindings.has(r)) {
419
+ shared = true;
420
+ break;
421
+ }
422
+ }
423
+ if (shared)
424
+ continue; // dependent → not sequential
425
+ }
426
+ }
427
+ isSequential = true;
428
+ break;
429
+ }
430
+ }
431
+ if (optOutLines.has(cur.line))
432
+ isSequential = false;
433
+ const isSsrTrigger = cur.callee === "cookies" ||
434
+ cur.callee === "headers" ||
435
+ cur.callee === "unstable_noStore" ||
436
+ (cur.callee === "fetch" && cur.cacheOption === "no-store");
437
+ out.push({
438
+ callee: cur.callee,
439
+ line: cur.line,
440
+ cacheOption: cur.cacheOption,
441
+ isSequential,
442
+ isSsrTrigger,
443
+ });
444
+ }
445
+ return out;
446
+ }
447
+ //# sourceMappingURL=nextjs-metadata-readers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs-metadata-readers.js","sourceRoot":"","sources":["../../src/utils/nextjs-metadata-readers.ts"],"names":[],"mappings":"AA4BA,6GAA6G;AAC7G,MAAM,UAAU,iBAAiB,CAAC,IAA0C;IAC1E,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,uDAAuD;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;QAC1E,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACpC,gEAAgE;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,uBAAuB,CAAC,CAAC;QACnF,IAAI,OAAO;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qHAAqH;AACrH,SAAS,eAAe,CAAC,IAA0C;IACjE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uFAAuF;AACvF,SAAS,eAAe,CACtB,IAAuB;IAEvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAA6B,CAAC;IACjD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,SAAS;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACpE,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,KAAK;YAAE,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2FAA2F;AAC3F,SAAS,kBAAkB,CAAC,GAAsB;IAChD,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACtC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAEnC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,EAAE,GAA6C,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,IAAI;gBAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,IAAI;gBAAE,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,GAAG;gBAAE,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC;QAC3B,CAAC;QACD,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC;IACrB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,EAAE,GAA2C,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,IAAI;gBAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,IAAI;gBAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,IAAI;gBAAE,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3C,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,GAAG,GAA8C,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,IAAI;gBAAE,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;IACvB,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,qFAAqF;QACrF,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAiB,EAAE,OAAe;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAEpE,iDAAiD;IACjD,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU;gBAAE,SAAS;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YAC3D,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,MAAM,EAAE,IAAI,KAAK,kBAAkB;YAAE,SAAS;QAClD,mDAAmD;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QAC3D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,8DAA8D;YAC9D,4EAA4E;YAC5E,IAAI,MAAM,GAA6B,GAAG,CAAC,MAAM,CAAC;YAClD,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,OAAO,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;gBACzC,IACE,MAAM,CAAC,IAAI,KAAK,sBAAsB;oBACtC,MAAM,CAAC,IAAI,KAAK,gBAAgB;oBAChC,MAAM,CAAC,IAAI,KAAK,qBAAqB;oBACrC,MAAM,CAAC,IAAI,KAAK,mBAAmB,EACnC,CAAC;oBACD,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACR,CAAC;gBACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACzB,CAAC;YACD,IAAI,SAAS;gBAAE,SAAS;YACxB,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ;gBAAE,SAAS;YACxB,4EAA4E;YAC5E,MAAM,MAAM,GACV,QAAQ,CAAC,IAAI,KAAK,0BAA0B;gBAC1C,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC3B,CAAC,CAAC,QAAQ,CAAC;YACf,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;YACD,4BAA4B;YAC5B,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAwBD,iGAAiG;AACjG,SAAS,aAAa,CAAC,GAAsB,EAAE,GAAW;IACxD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAChC,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAkC;IAC1D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzD,sDAAsD;IACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAClB,CAAC;IACD,iCAAiC;IACjC,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACjD,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;YACpD,uDAAuD;YACvD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;YACtB,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,OAAO,IAAI,EAAE,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,IAAuB;IAC/C,IAAI,GAAG,GAA6B,IAAI,CAAC,MAAM,CAAC;IAChD,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,CAAC,IAAI,KAAK,iBAAiB;YAAE,OAAO,GAAG,CAAC,EAAE,CAAC;QAClD,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,IAAuB;IAC7C,IAAI,GAAG,GAA6B,IAAI,CAAC,MAAM,CAAC;IAChD,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB;YAAE,OAAO,GAAG,CAAC;QAChD,IACE,GAAG,CAAC,IAAI,KAAK,iBAAiB;YAC9B,GAAG,CAAC,IAAI,KAAK,SAAS;YACtB,GAAG,CAAC,IAAI,KAAK,sBAAsB;YACnC,GAAG,CAAC,IAAI,KAAK,gBAAgB;YAC7B,GAAG,CAAC,IAAI,KAAK,qBAAqB,EAClC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,2BAA2B,CAAC,IAAuB;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QAChF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB;YAAE,SAAS;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC3E,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,uCAAuC,CAAC,EAAE,CAAC;gBACjF,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0DAA0D;AAC1D,SAAS,qBAAqB,CAAC,IAAuB;IACpD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,MAAc;IACjE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC3B,MAAM,GAAG,GAAgB,EAAE,CAAC;IAE5B,yDAAyD;IACzD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YACrD,+CAA+C;YAC/C,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,+BAA+B;QACzD,CAAC;IACH,CAAC;IAYD,MAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,YAAY;YAAE,SAAS;QAC9C,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,IACE,IAAI,KAAK,OAAO;YAChB,IAAI,KAAK,SAAS;YAClB,IAAI,KAAK,SAAS;YAClB,IAAI,KAAK,kBAAkB,EAC3B,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,WAAW,GAAkB,IAAI,CAAC;QACtC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;YACvC,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC5B,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,IAAI,cAAc,GAA6B,IAAI,CAAC;QACpD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,GAA6B,IAAI,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAC5D,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YACf,CAAC;YACD,cAAc,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC;YACR,MAAM,EAAE,IAAmB;YAC3B,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;YAChC,OAAO;YACP,cAAc;YACd,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC;YAC/B,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED,4CAA4C;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;YAChE,qEAAqE;YACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;gBACtB,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;oBAAE,SAAS;gBAC3C,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc;oBAAE,SAAS;gBACtD,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,IAAI,GAAG,CAAC,cAAc,CAAC,UAAU;oBAAE,SAAS;gBAE5E,4EAA4E;gBAC5E,MAAM,YAAY,GAAG,2BAA2B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACtE,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAClF,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;wBAC5C,IAAI,MAAM,GAAG,KAAK,CAAC;wBACnB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;4BACrB,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gCACxB,MAAM,GAAG,IAAI,CAAC;gCACd,MAAM;4BACR,CAAC;wBACH,CAAC;wBACD,IAAI,MAAM;4BAAE,SAAS,CAAC,6BAA6B;oBACrD,CAAC;gBACH,CAAC;gBACD,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,YAAY,GAAG,KAAK,CAAC;QAEpD,MAAM,YAAY,GAChB,GAAG,CAAC,MAAM,KAAK,SAAS;YACxB,GAAG,CAAC,MAAM,KAAK,SAAS;YACxB,GAAG,CAAC,MAAM,KAAK,kBAAkB;YACjC,CAAC,GAAG,CAAC,MAAM,KAAK,OAAO,IAAI,GAAG,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC;QAE7D,GAAG,CAAC,IAAI,CAAC;YACP,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,YAAY;YACZ,YAAY;SACb,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}