codesift-mcp 0.2.18 → 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 +34 -5
  454. package/rules/codesift.mdc +34 -5
  455. package/rules/codex.md +34 -5
  456. package/rules/gemini.md +34 -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,493 @@
1
+ /**
2
+ * Next.js route map: enumerate all route files (App Router + Pages Router),
3
+ * classify rendering strategy from route segment config, and detect hybrid
4
+ * conflicts where the same URL is served by both routers.
5
+ */
6
+ import { readFile } from "node:fs/promises";
7
+ import { relative, basename, join } from "node:path";
8
+ import { cachedParseFile as parseFile } from "../utils/nextjs-audit-cache.js";
9
+ import { computeLayoutChain, deriveUrlPath, discoverWorkspaces, extractFetchCalls, scanDirective, traceMiddleware, } from "../utils/nextjs.js";
10
+ import { cachedWalkDirectory as walkDirectory } from "../utils/nextjs-audit-cache.js";
11
+ import { getCodeIndex } from "./index-tools.js";
12
+ // ---------------------------------------------------------------------------
13
+ // Route segment config reader (AST initializer extraction)
14
+ // ---------------------------------------------------------------------------
15
+ const KNOWN_CONFIG_NAMES = new Set([
16
+ "dynamic",
17
+ "revalidate",
18
+ "runtime",
19
+ "fetchCache",
20
+ "preferredRegion",
21
+ "maxDuration",
22
+ "dynamicParams",
23
+ ]);
24
+ const DYNAMIC_VALUES = new Set(["auto", "force-dynamic", "force-static", "error"]);
25
+ const RUNTIME_VALUES = new Set(["nodejs", "edge"]);
26
+ /**
27
+ * Read Next.js route segment config exports from an AST.
28
+ *
29
+ * Recognizes:
30
+ * export const dynamic = "force-dynamic"
31
+ * export const revalidate = 60 | false
32
+ * export const runtime = "edge"
33
+ * export async function generateStaticParams() {...}
34
+ *
35
+ * Non-literal initializers (Identifier, BinaryExpression, etc.) set a
36
+ * `_non_literal` flag and leave the corresponding value `undefined`.
37
+ *
38
+ * @internal exported for unit testing
39
+ */
40
+ export function readRouteSegmentConfig(tree, _source) {
41
+ const config = { has_generate_static_params: false };
42
+ const root = tree.rootNode;
43
+ for (const exportNode of root.descendantsOfType("export_statement")) {
44
+ // `export const X = Y` → lexical_declaration > variable_declarator
45
+ for (const decl of exportNode.descendantsOfType("variable_declarator")) {
46
+ const nameNode = decl.childForFieldName("name") ?? decl.namedChild(0);
47
+ if (nameNode?.type !== "identifier")
48
+ continue;
49
+ const name = nameNode.text;
50
+ if (!KNOWN_CONFIG_NAMES.has(name))
51
+ continue;
52
+ const value = decl.childForFieldName("value") ?? decl.namedChild(1);
53
+ if (!value)
54
+ continue;
55
+ readConfigValue(config, name, value);
56
+ }
57
+ // `export async function generateStaticParams() {...}` / `export function ...`
58
+ for (const fn of exportNode.descendantsOfType("function_declaration")) {
59
+ const nameNode = fn.childForFieldName("name") ?? fn.namedChild(0);
60
+ if (nameNode?.type === "identifier" && nameNode.text === "generateStaticParams") {
61
+ config.has_generate_static_params = true;
62
+ }
63
+ }
64
+ }
65
+ return config;
66
+ }
67
+ function readConfigValue(config, name, value) {
68
+ // String literal
69
+ if (value.type === "string") {
70
+ const frag = value.namedChild(0);
71
+ const text = frag?.type === "string_fragment" ? frag.text : value.text.slice(1, -1);
72
+ if (name === "dynamic" && DYNAMIC_VALUES.has(text)) {
73
+ config.dynamic = text;
74
+ }
75
+ else if (name === "runtime" && RUNTIME_VALUES.has(text)) {
76
+ config.runtime = text;
77
+ }
78
+ return;
79
+ }
80
+ // Number literal
81
+ if (value.type === "number") {
82
+ const num = parseFloat(value.text);
83
+ if (!Number.isNaN(num) && name === "revalidate") {
84
+ config.revalidate = num;
85
+ }
86
+ return;
87
+ }
88
+ // Boolean false literal
89
+ if (value.type === "false") {
90
+ if (name === "revalidate")
91
+ config.revalidate = false;
92
+ return;
93
+ }
94
+ if (value.type === "true") {
95
+ // `revalidate = true` is not a valid Next.js value — ignore
96
+ return;
97
+ }
98
+ // Any other initializer (Identifier, BinaryExpression, CallExpression, ...)
99
+ // is "non-literal". Flag it so callers know the value is unknowable at
100
+ // static-analysis time.
101
+ if (name === "dynamic")
102
+ config.dynamic_non_literal = true;
103
+ else if (name === "revalidate")
104
+ config.revalidate_non_literal = true;
105
+ else if (name === "runtime")
106
+ config.runtime_non_literal = true;
107
+ }
108
+ /**
109
+ * Map a route segment config (+ optional Pages Router signals) to a
110
+ * rendering strategy.
111
+ *
112
+ * Priority (App Router): runtime=edge > force-dynamic > force-static >
113
+ * revalidate > generateStaticParams > default (static).
114
+ *
115
+ * Pages Router: getServerSideProps → ssr; getStaticProps + revalidate → isr;
116
+ * getStaticProps → static; otherwise unknown.
117
+ *
118
+ * @internal exported for unit testing
119
+ */
120
+ export function classifyRendering(config, router, pagesSignals) {
121
+ if (router === "pages") {
122
+ if (pagesSignals?.hasGetServerSideProps)
123
+ return "ssr";
124
+ if (pagesSignals?.hasGetStaticProps) {
125
+ return pagesSignals.hasRevalidateInReturn ? "isr" : "static";
126
+ }
127
+ return "unknown";
128
+ }
129
+ // App Router priority
130
+ if (config.runtime === "edge")
131
+ return "edge";
132
+ if (config.dynamic === "force-dynamic")
133
+ return "ssr";
134
+ if (config.dynamic === "force-static")
135
+ return "static";
136
+ if (typeof config.revalidate === "number" && config.revalidate > 0)
137
+ return "isr";
138
+ if (config.has_generate_static_params)
139
+ return "static";
140
+ // Next.js 15 default: static
141
+ return "static";
142
+ }
143
+ // ---------------------------------------------------------------------------
144
+ // parseRouteFile — process a single route file into a NextjsRouteEntry
145
+ // ---------------------------------------------------------------------------
146
+ const HTTP_METHODS = new Set([
147
+ "GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS",
148
+ ]);
149
+ const APP_CONVENTION_TYPES = {
150
+ page: "page",
151
+ route: "route",
152
+ layout: "layout",
153
+ loading: "loading",
154
+ error: "error",
155
+ "not-found": "not-found",
156
+ "global-error": "global-error",
157
+ default: "default",
158
+ template: "template",
159
+ };
160
+ /** Derive a route file's `type` field from its path. */
161
+ function deriveRouteType(filePath, router) {
162
+ const name = basename(filePath).replace(/\.[jt]sx?$/, "");
163
+ if (router === "pages") {
164
+ if (name === "_app")
165
+ return "app";
166
+ if (name === "_document")
167
+ return "document";
168
+ if (name === "_error")
169
+ return "error_page";
170
+ // default for pages/ files: treat api/* as route, otherwise page
171
+ return filePath.includes("/api/") ? "route" : "page";
172
+ }
173
+ // App Router
174
+ if (filePath.includes("/@"))
175
+ return "parallel";
176
+ if (/\/\(\.{1,3}\)/.test(filePath))
177
+ return "intercepting";
178
+ return APP_CONVENTION_TYPES[name] ?? "page";
179
+ }
180
+ /** Detect Pages Router data-fetching signals via exported function/const names. */
181
+ function detectPagesRouterSignals(tree) {
182
+ const signals = {};
183
+ for (const exportNode of tree.rootNode.descendantsOfType("export_statement")) {
184
+ for (const fn of exportNode.descendantsOfType("function_declaration")) {
185
+ const name = (fn.childForFieldName("name") ?? fn.namedChild(0))?.text;
186
+ if (name === "getServerSideProps")
187
+ signals.hasGetServerSideProps = true;
188
+ if (name === "getStaticProps")
189
+ signals.hasGetStaticProps = true;
190
+ }
191
+ for (const decl of exportNode.descendantsOfType("variable_declarator")) {
192
+ const name = (decl.childForFieldName("name") ?? decl.namedChild(0))?.text;
193
+ if (name === "getServerSideProps")
194
+ signals.hasGetServerSideProps = true;
195
+ if (name === "getStaticProps")
196
+ signals.hasGetStaticProps = true;
197
+ }
198
+ }
199
+ return signals;
200
+ }
201
+ /** Detect `export const metadata = {...}` or `export function generateMetadata`. */
202
+ function detectMetadataExport(tree) {
203
+ for (const exportNode of tree.rootNode.descendantsOfType("export_statement")) {
204
+ for (const decl of exportNode.descendantsOfType("variable_declarator")) {
205
+ const name = (decl.childForFieldName("name") ?? decl.namedChild(0))?.text;
206
+ if (name === "metadata")
207
+ return true;
208
+ }
209
+ for (const fn of exportNode.descendantsOfType("function_declaration")) {
210
+ const name = (fn.childForFieldName("name") ?? fn.namedChild(0))?.text;
211
+ if (name === "generateMetadata")
212
+ return true;
213
+ }
214
+ }
215
+ return false;
216
+ }
217
+ /** Collect HTTP method names from top-level exports of a route.ts file. */
218
+ function extractHttpMethods(tree) {
219
+ const methods = new Set();
220
+ for (const exportNode of tree.rootNode.descendantsOfType("export_statement")) {
221
+ for (const fn of exportNode.descendantsOfType("function_declaration")) {
222
+ const name = (fn.childForFieldName("name") ?? fn.namedChild(0))?.text;
223
+ if (name && HTTP_METHODS.has(name))
224
+ methods.add(name);
225
+ }
226
+ for (const decl of exportNode.descendantsOfType("variable_declarator")) {
227
+ const name = (decl.childForFieldName("name") ?? decl.namedChild(0))?.text;
228
+ if (name && HTTP_METHODS.has(name))
229
+ methods.add(name);
230
+ }
231
+ }
232
+ return [...methods];
233
+ }
234
+ /**
235
+ * Process a single route file into a `NextjsRouteEntry`.
236
+ *
237
+ * @internal exported for unit testing
238
+ */
239
+ export async function parseRouteFile(filePath, repoRoot, router) {
240
+ const relPath = relative(repoRoot, filePath);
241
+ const type = deriveRouteType(relPath, router);
242
+ const url_path = deriveUrlPath(relPath, router);
243
+ const source = await readFile(filePath, "utf8");
244
+ const tree = await parseFile(filePath, source);
245
+ if (!tree) {
246
+ return {
247
+ url_path,
248
+ file_path: relPath,
249
+ router,
250
+ type,
251
+ rendering: "unknown",
252
+ config: { has_generate_static_params: false },
253
+ has_metadata: false,
254
+ layout_chain: [],
255
+ middleware_applies: false,
256
+ is_client_component: false,
257
+ };
258
+ }
259
+ const config = readRouteSegmentConfig(tree, source);
260
+ const has_metadata = detectMetadataExport(tree);
261
+ let methods;
262
+ if (type === "route") {
263
+ methods = extractHttpMethods(tree);
264
+ }
265
+ const pagesSignals = router === "pages" ? detectPagesRouterSignals(tree) : undefined;
266
+ let rendering = classifyRendering(config, router, pagesSignals);
267
+ // Q2 — detect runtime SSR triggers (cookies/headers/fetch no-store) and
268
+ // upgrade `static` → `ssr` when present, capturing a human-readable reason.
269
+ let rendering_reason;
270
+ if (router === "app") {
271
+ if (rendering === "ssr") {
272
+ // Already SSR — explain why.
273
+ if (config.dynamic === "force-dynamic") {
274
+ rendering_reason = "dynamic='force-dynamic' config export";
275
+ }
276
+ else {
277
+ const fetches = extractFetchCalls(tree, source);
278
+ const noStore = fetches.find((f) => f.callee === "fetch" && f.cacheOption === "no-store");
279
+ if (noStore) {
280
+ rendering_reason = `fetch with cache:'no-store' at line ${noStore.line}`;
281
+ }
282
+ else {
283
+ const dynamicCall = fetches.find((f) => f.callee === "cookies" || f.callee === "headers");
284
+ if (dynamicCall) {
285
+ rendering_reason = `${dynamicCall.callee}() called at line ${dynamicCall.line}`;
286
+ }
287
+ else {
288
+ rendering_reason = "unknown SSR trigger";
289
+ }
290
+ }
291
+ }
292
+ }
293
+ else if (rendering === "static") {
294
+ // Maybe upgrade: presence of cookies/headers/fetch no-store implies SSR.
295
+ const fetches = extractFetchCalls(tree, source);
296
+ const noStore = fetches.find((f) => f.callee === "fetch" && f.cacheOption === "no-store");
297
+ if (noStore) {
298
+ rendering = "ssr";
299
+ rendering_reason = `fetch with cache:'no-store' at line ${noStore.line}`;
300
+ }
301
+ else {
302
+ const dynamicCall = fetches.find((f) => f.callee === "cookies" || f.callee === "headers");
303
+ if (dynamicCall) {
304
+ rendering = "ssr";
305
+ rendering_reason = `${dynamicCall.callee}() called at line ${dynamicCall.line}`;
306
+ }
307
+ }
308
+ }
309
+ }
310
+ const directive = await scanDirective(filePath);
311
+ const is_client_component = directive === "use client";
312
+ const layout_chain = router === "app"
313
+ ? await computeLayoutChain(relPath, repoRoot)
314
+ : [];
315
+ const entry = {
316
+ url_path,
317
+ file_path: relPath,
318
+ router,
319
+ type,
320
+ rendering,
321
+ config,
322
+ has_metadata,
323
+ layout_chain,
324
+ middleware_applies: false, // filled in by orchestrator (Task 30)
325
+ is_client_component,
326
+ };
327
+ if (methods !== undefined) {
328
+ entry.methods = methods;
329
+ }
330
+ if (rendering_reason !== undefined) {
331
+ entry.rendering_reason = rendering_reason;
332
+ }
333
+ return entry;
334
+ }
335
+ // ---------------------------------------------------------------------------
336
+ // Orchestrator
337
+ // ---------------------------------------------------------------------------
338
+ const APP_CONVENTION_RE = /^(page|layout|loading|error|not-found|global-error|default|template|route)\.[jt]sx?$/;
339
+ const ROUTE_EXTS = new Set([".tsx", ".jsx", ".ts", ".js"]);
340
+ const DEFAULT_MAX_ROUTES = 1000;
341
+ const ROUTE_PARSE_CONCURRENCY = 10;
342
+ /** Whether a file in `app/` is a canonical convention route file. */
343
+ function isAppConventionFile(name) {
344
+ return APP_CONVENTION_RE.test(name);
345
+ }
346
+ /**
347
+ * Enumerate all Next.js routes (App + Pages Router) with rendering strategy
348
+ * classification and hybrid conflict detection.
349
+ */
350
+ export async function nextjsRouteMap(repo, options) {
351
+ if (process.env.CODESIFT_DISABLE_TOOLS?.includes("nextjs_route_map")) {
352
+ throw new Error("nextjs_route_map is disabled via CODESIFT_DISABLE_TOOLS");
353
+ }
354
+ const index = await getCodeIndex(repo);
355
+ if (!index) {
356
+ throw new Error(`Repository not found: ${repo}. Run index_folder first.`);
357
+ }
358
+ const projectRoot = index.root;
359
+ // Resolve workspaces
360
+ let workspaceRoots;
361
+ if (options?.workspace) {
362
+ workspaceRoots = [join(projectRoot, options.workspace)];
363
+ }
364
+ else {
365
+ const discovered = await discoverWorkspaces(projectRoot);
366
+ workspaceRoots = discovered.length > 0
367
+ ? discovered.map((w) => w.root)
368
+ : [projectRoot];
369
+ }
370
+ const routerFilter = options?.router ?? "both";
371
+ const maxRoutes = options?.max_routes ?? DEFAULT_MAX_ROUTES;
372
+ const routes = [];
373
+ const scan_errors = [];
374
+ const workspaces_scanned = [];
375
+ let truncated = false;
376
+ let truncated_at;
377
+ // Middleware: use the first workspace's middleware.ts (single-app case).
378
+ // traceMiddleware accepts a URL path for matching — we pass "/" as a probe
379
+ // so we can still return the file + matchers fields.
380
+ let middleware = null;
381
+ for (const wsRoot of workspaceRoots) {
382
+ workspaces_scanned.push(wsRoot);
383
+ // Collect candidate files
384
+ const appCandidates = [];
385
+ const pagesCandidates = [];
386
+ if (routerFilter === "app" || routerFilter === "both") {
387
+ for (const appDir of ["app", "src/app"]) {
388
+ try {
389
+ const walked = await walkDirectory(join(wsRoot, appDir), {
390
+ followSymlinks: true,
391
+ fileFilter: (ext, name) => {
392
+ if (!ROUTE_EXTS.has(ext))
393
+ return false;
394
+ return name ? isAppConventionFile(name) : false;
395
+ },
396
+ });
397
+ appCandidates.push(...walked);
398
+ }
399
+ catch (err) {
400
+ scan_errors.push(`${appDir}: ${err instanceof Error ? err.message : String(err)}`);
401
+ }
402
+ }
403
+ }
404
+ if (routerFilter === "pages" || routerFilter === "both") {
405
+ for (const pagesDir of ["pages", "src/pages"]) {
406
+ try {
407
+ const walked = await walkDirectory(join(wsRoot, pagesDir), {
408
+ followSymlinks: true,
409
+ fileFilter: (ext) => ROUTE_EXTS.has(ext),
410
+ });
411
+ pagesCandidates.push(...walked);
412
+ }
413
+ catch (err) {
414
+ scan_errors.push(`${pagesDir}: ${err instanceof Error ? err.message : String(err)}`);
415
+ }
416
+ }
417
+ }
418
+ const wsMiddleware = await traceMiddleware(wsRoot, "/").catch(() => null);
419
+ if (wsMiddleware && !middleware) {
420
+ middleware = { file: wsMiddleware.file, matchers: wsMiddleware.matchers };
421
+ }
422
+ // Process each router's candidates. Apply the global max_routes cap.
423
+ const workspaceFiles = [
424
+ ...appCandidates.map((p) => ({ path: p, router: "app" })),
425
+ ...pagesCandidates.map((p) => ({ path: p, router: "pages" })),
426
+ ];
427
+ for (let i = 0; i < workspaceFiles.length; i += ROUTE_PARSE_CONCURRENCY) {
428
+ if (routes.length >= maxRoutes) {
429
+ truncated = true;
430
+ truncated_at = maxRoutes;
431
+ break;
432
+ }
433
+ const chunk = workspaceFiles.slice(i, i + ROUTE_PARSE_CONCURRENCY);
434
+ const entries = await Promise.all(chunk.map(async ({ path, router }) => {
435
+ try {
436
+ // Parse relative to workspace root so deriveUrlPath sees `app/…`
437
+ const entry = await parseRouteFile(path, wsRoot, router);
438
+ // Re-anchor file_path to the repo root for display
439
+ entry.file_path = relative(projectRoot, path);
440
+ // Fill middleware_applies per route
441
+ if (wsMiddleware) {
442
+ const perRoute = await traceMiddleware(wsRoot, entry.url_path).catch(() => null);
443
+ entry.middleware_applies = perRoute?.applies ?? false;
444
+ }
445
+ return entry;
446
+ }
447
+ catch (err) {
448
+ const rel = relative(projectRoot, path);
449
+ scan_errors.push(`${rel}: ${err instanceof Error ? err.message : String(err)}`);
450
+ return null;
451
+ }
452
+ }));
453
+ for (const entry of entries) {
454
+ if (entry === null)
455
+ continue;
456
+ if (routes.length >= maxRoutes) {
457
+ truncated = true;
458
+ truncated_at = maxRoutes;
459
+ break;
460
+ }
461
+ routes.push(entry);
462
+ }
463
+ }
464
+ }
465
+ // Detect hybrid conflicts: same url_path appears in both routers
466
+ const byPath = new Map();
467
+ for (const route of routes) {
468
+ const bucket = byPath.get(route.url_path) ?? {};
469
+ if (route.router === "app" && !bucket.app)
470
+ bucket.app = route.file_path;
471
+ if (route.router === "pages" && !bucket.pages)
472
+ bucket.pages = route.file_path;
473
+ byPath.set(route.url_path, bucket);
474
+ }
475
+ const conflicts = [];
476
+ for (const [url_path, bucket] of byPath.entries()) {
477
+ if (bucket.app && bucket.pages) {
478
+ conflicts.push({ url_path, app: bucket.app, pages: bucket.pages });
479
+ }
480
+ }
481
+ const result = {
482
+ routes,
483
+ conflicts,
484
+ middleware,
485
+ workspaces_scanned,
486
+ scan_errors,
487
+ truncated,
488
+ };
489
+ if (truncated_at !== undefined)
490
+ result.truncated_at = truncated_at;
491
+ return result;
492
+ }
493
+ //# sourceMappingURL=nextjs-route-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs-route-tools.js","sourceRoot":"","sources":["../../src/tools/nextjs-route-tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,EAAE,eAAe,IAAI,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,IAAI,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA+EhD,8EAA8E;AAC9E,2DAA2D;AAC3D,8EAA8E;AAE9E,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,SAAS;IACT,YAAY;IACZ,SAAS;IACT,YAAY;IACZ,iBAAiB;IACjB,aAAa;IACb,eAAe;CAChB,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;AACnF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAiB,EACjB,OAAe;IAEf,MAAM,MAAM,GAAuB,EAAE,0BAA0B,EAAE,KAAK,EAAE,CAAC;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;IAE3B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACpE,mEAAmE;QACnE,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACtE,IAAI,QAAQ,EAAE,IAAI,KAAK,YAAY;gBAAE,SAAS;YAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE5C,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,+EAA+E;QAC/E,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACtE,MAAM,QAAQ,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAClE,IAAI,QAAQ,EAAE,IAAI,KAAK,YAAY,IAAI,QAAQ,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;gBAChF,MAAM,CAAC,0BAA0B,GAAG,IAAI,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CACtB,MAA0B,EAC1B,IAAY,EACZ,KAAwB;IAExB,iBAAiB;IACjB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,IAAI,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,OAAO,GAAG,IAA2D,CAAC;QAC/E,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,OAAO,GAAG,IAAyB,CAAC;QAC7C,CAAC;QACD,OAAO;IACT,CAAC;IAED,iBAAiB;IACjB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAChD,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;QAC1B,CAAC;QACD,OAAO;IACT,CAAC;IAED,wBAAwB;IACxB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,YAAY;YAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;QACrD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,4DAA4D;QAC5D,OAAO;IACT,CAAC;IAED,4EAA4E;IAC5E,uEAAuE;IACvE,wBAAwB;IACxB,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC;SACrD,IAAI,IAAI,KAAK,YAAY;QAAE,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC;SAChE,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACjE,CAAC;AAYD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAA0B,EAC1B,MAAuB,EACvB,YAAiC;IAEjC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,IAAI,YAAY,EAAE,qBAAqB;YAAE,OAAO,KAAK,CAAC;QACtD,IAAI,YAAY,EAAE,iBAAiB,EAAE,CAAC;YACpC,OAAO,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC/D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,sBAAsB;IACtB,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAC7C,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc;QAAE,OAAO,QAAQ,CAAC;IACvD,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACjF,IAAI,MAAM,CAAC,0BAA0B;QAAE,OAAO,QAAQ,CAAC;IAEvD,6BAA6B;IAC7B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAE9E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS;CAC3D,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAmC;IAC3D,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,WAAW;IACxB,cAAc,EAAE,cAAc;IAC9B,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF,wDAAwD;AACxD,SAAS,eAAe,CAAC,QAAgB,EAAE,MAAuB;IAChE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAE1D,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,IAAI,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAClC,IAAI,IAAI,KAAK,WAAW;YAAE,OAAO,UAAU,CAAC;QAC5C,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAC;QAC3C,iEAAiE;QACjE,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACvD,CAAC;IAED,aAAa;IACb,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IAC/C,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,cAAc,CAAC;IAC1D,OAAO,oBAAoB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;AAC9C,CAAC;AAED,mFAAmF;AACnF,SAAS,wBAAwB,CAAC,IAAiB;IACjD,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7E,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YACtE,IAAI,IAAI,KAAK,oBAAoB;gBAAE,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;YACxE,IAAI,IAAI,KAAK,gBAAgB;gBAAE,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAClE,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAC1E,IAAI,IAAI,KAAK,oBAAoB;gBAAE,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;YACxE,IAAI,IAAI,KAAK,gBAAgB;gBAAE,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAClE,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,oFAAoF;AACpF,SAAS,oBAAoB,CAAC,IAAiB;IAC7C,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7E,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAC1E,IAAI,IAAI,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;QACvC,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YACtE,IAAI,IAAI,KAAK,kBAAkB;gBAAE,OAAO,IAAI,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2EAA2E;AAC3E,SAAS,kBAAkB,CAAC,IAAiB;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7E,KAAK,MAAM,EAAE,IAAI,UAAU,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YACtE,IAAI,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAC1E,IAAI,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,QAAgB,EAChB,MAAuB;IAEvB,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,QAAQ;YACR,SAAS,EAAE,OAAO;YAClB,MAAM;YACN,IAAI;YACJ,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,EAAE,0BAA0B,EAAE,KAAK,EAAE;YAC7C,YAAY,EAAE,KAAK;YACnB,YAAY,EAAE,EAAE;YAChB,kBAAkB,EAAE,KAAK;YACzB,mBAAmB,EAAE,KAAK;SAC3B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEhD,IAAI,OAA6B,CAAC;IAClC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,IAAI,SAAS,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;IAEhE,wEAAwE;IACxE,4EAA4E;IAC5E,IAAI,gBAAoC,CAAC;IACzC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,6BAA6B;YAC7B,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;gBACvC,gBAAgB,GAAG,uCAAuC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,KAAK,UAAU,CAC5D,CAAC;gBACF,IAAI,OAAO,EAAE,CAAC;oBACZ,gBAAgB,GAAG,uCAAuC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC3E,CAAC;qBAAM,CAAC;oBACN,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CACxD,CAAC;oBACF,IAAI,WAAW,EAAE,CAAC;wBAChB,gBAAgB,GAAG,GAAG,WAAW,CAAC,MAAM,qBAAqB,WAAW,CAAC,IAAI,EAAE,CAAC;oBAClF,CAAC;yBAAM,CAAC;wBACN,gBAAgB,GAAG,qBAAqB,CAAC;oBAC3C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,yEAAyE;YACzE,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,KAAK,UAAU,CAC5D,CAAC;YACF,IAAI,OAAO,EAAE,CAAC;gBACZ,SAAS,GAAG,KAAK,CAAC;gBAClB,gBAAgB,GAAG,uCAAuC,OAAO,CAAC,IAAI,EAAE,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CACxD,CAAC;gBACF,IAAI,WAAW,EAAE,CAAC;oBAChB,SAAS,GAAG,KAAK,CAAC;oBAClB,gBAAgB,GAAG,GAAG,WAAW,CAAC,MAAM,qBAAqB,WAAW,CAAC,IAAI,EAAE,CAAC;gBAClF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,mBAAmB,GAAG,SAAS,KAAK,YAAY,CAAC;IAEvD,MAAM,YAAY,GAAG,MAAM,KAAK,KAAK;QACnC,CAAC,CAAC,MAAM,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC7C,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,KAAK,GAAqB;QAC9B,QAAQ;QACR,SAAS,EAAE,OAAO;QAClB,MAAM;QACN,IAAI;QACJ,SAAS;QACT,MAAM;QACN,YAAY;QACZ,YAAY;QACZ,kBAAkB,EAAE,KAAK,EAAE,sCAAsC;QACjE,mBAAmB;KACpB,CAAC;IACF,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,sFAAsF,CAAC;AACjH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3D,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,qEAAqE;AACrE,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,OAA+B;IAE/B,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,2BAA2B,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;IAE/B,qBAAqB;IACrB,IAAI,cAAwB,CAAC;IAC7B,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,cAAc,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACzD,cAAc,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;YACpC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/B,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC;IAC/C,MAAM,SAAS,GAAG,OAAO,EAAE,UAAU,IAAI,kBAAkB,CAAC;IAC5D,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,YAAgC,CAAC;IAErC,yEAAyE;IACzE,2EAA2E;IAC3E,qDAAqD;IACrD,IAAI,UAAU,GAAuC,IAAI,CAAC;IAE1D,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QACpC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhC,0BAA0B;QAC1B,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,eAAe,GAAa,EAAE,CAAC;QAErC,IAAI,YAAY,KAAK,KAAK,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YACtD,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;wBACvD,cAAc,EAAE,IAAI;wBACpB,UAAU,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;4BACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gCAAE,OAAO,KAAK,CAAC;4BACvC,OAAO,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;wBAClD,CAAC;qBACF,CAAC,CAAC;oBACH,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;gBAChC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,YAAY,KAAK,OAAO,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YACxD,KAAK,MAAM,QAAQ,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACzD,cAAc,EAAE,IAAI;wBACpB,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;qBACzC,CAAC,CAAC;oBACH,eAAe,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACvF,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,UAAU,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC5E,CAAC;QAED,qEAAqE;QACrE,MAAM,cAAc,GAAqD;YACvE,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAc,EAAE,CAAC,CAAC;YAClE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,OAAgB,EAAE,CAAC,CAAC;SACvE,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC;YACxE,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;gBAC/B,SAAS,GAAG,IAAI,CAAC;gBACjB,YAAY,GAAG,SAAS,CAAC;gBACzB,MAAM;YACR,CAAC;YACD,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;gBACnC,IAAI,CAAC;oBACH,iEAAiE;oBACjE,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;oBACzD,mDAAmD;oBACnD,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBAC9C,oCAAoC;oBACpC,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;wBACjF,KAAK,CAAC,kBAAkB,GAAG,QAAQ,EAAE,OAAO,IAAI,KAAK,CAAC;oBACxD,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBACxC,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChF,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CACH,CAAC;YACF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,KAAK,IAAI;oBAAE,SAAS;gBAC7B,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;oBAC/B,SAAS,GAAG,IAAI,CAAC;oBACjB,YAAY,GAAG,SAAS,CAAC;oBACzB,MAAM;gBACR,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4C,CAAC;IACnE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;QACxE,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;QAC9E,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,SAAS,GAA0B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAClD,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAyB;QACnC,MAAM;QACN,SAAS;QACT,UAAU;QACV,kBAAkB;QAClB,WAAW;QACX,SAAS;KACV,CAAC;IACF,IAAI,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * AST readers for Next.js Server Actions security audit (T2).
3
+ *
4
+ * Each reader is a focused, pure function that extracts a specific signal
5
+ * from a parsed tree-sitter Tree. The orchestrator in `nextjs-security-tools.ts`
6
+ * composes them into a per-action audit.
7
+ */
8
+ import type Parser from "web-tree-sitter";
9
+ import type { AuthGuardInfo, InputValidationInfo, RateLimitingInfo } from "./nextjs-security-tools.js";
10
+ export interface ServerActionFn {
11
+ name: string;
12
+ file: string;
13
+ line: number;
14
+ isAsync: boolean;
15
+ bodyNode: Parser.SyntaxNode | null;
16
+ fnNode: Parser.SyntaxNode;
17
+ }
18
+ export declare function extractServerActionFunctions(tree: Parser.Tree, _source: string, file: string): ServerActionFn[];
19
+ export declare function detectAuthGuard(fn: ServerActionFn): AuthGuardInfo;
20
+ export declare function detectInputValidation(fn: ServerActionFn, tree: Parser.Tree, source: string): InputValidationInfo;
21
+ export declare function detectRateLimiting(fn: ServerActionFn, _tree: Parser.Tree, _source: string): RateLimitingInfo;
22
+ //# sourceMappingURL=nextjs-security-readers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs-security-readers.d.ts","sourceRoot":"","sources":["../../src/tools/nextjs-security-readers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAE1C,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AA+BpC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC;CAC3B;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,cAAc,EAAE,CAwGlB;AAmBD,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,aAAa,CAiGjE;AAMD,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,MAAM,EAAE,MAAM,GACb,mBAAmB,CAiCrB;AAcD,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,MAAM,CAAC,IAAI,EAClB,OAAO,EAAE,MAAM,GACd,gBAAgB,CAWlB"}