codesift-mcp 0.3.0 → 0.5.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 (543) hide show
  1. package/README.md +215 -23
  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/help.d.ts.map +1 -1
  7. package/dist/cli/help.js +8 -6
  8. package/dist/cli/help.js.map +1 -1
  9. package/dist/cli/platform.d.ts.map +1 -1
  10. package/dist/cli/platform.js +12 -14
  11. package/dist/cli/platform.js.map +1 -1
  12. package/dist/cli/setup.d.ts +1 -1
  13. package/dist/cli/setup.d.ts.map +1 -1
  14. package/dist/cli/setup.js +27 -3
  15. package/dist/cli/setup.js.map +1 -1
  16. package/dist/formatters-shortening.d.ts +13 -0
  17. package/dist/formatters-shortening.d.ts.map +1 -1
  18. package/dist/formatters-shortening.js +131 -0
  19. package/dist/formatters-shortening.js.map +1 -1
  20. package/dist/formatters.d.ts +38 -0
  21. package/dist/formatters.d.ts.map +1 -1
  22. package/dist/formatters.js +521 -0
  23. package/dist/formatters.js.map +1 -1
  24. package/dist/instructions.d.ts +1 -1
  25. package/dist/instructions.d.ts.map +1 -1
  26. package/dist/instructions.js +39 -38
  27. package/dist/instructions.js.map +1 -1
  28. package/dist/lsp/lsp-servers.d.ts.map +1 -1
  29. package/dist/lsp/lsp-servers.js +5 -0
  30. package/dist/lsp/lsp-servers.js.map +1 -1
  31. package/dist/lsp/lsp-tools.d.ts.map +1 -1
  32. package/dist/lsp/lsp-tools.js +1 -0
  33. package/dist/lsp/lsp-tools.js.map +1 -1
  34. package/dist/parser/astro-template.d.ts +47 -0
  35. package/dist/parser/astro-template.d.ts.map +1 -0
  36. package/dist/parser/astro-template.js +171 -0
  37. package/dist/parser/astro-template.js.map +1 -0
  38. package/dist/parser/extractors/_shared.d.ts +4 -0
  39. package/dist/parser/extractors/_shared.d.ts.map +1 -1
  40. package/dist/parser/extractors/_shared.js +8 -0
  41. package/dist/parser/extractors/_shared.js.map +1 -1
  42. package/dist/parser/extractors/astro.d.ts +4 -5
  43. package/dist/parser/extractors/astro.d.ts.map +1 -1
  44. package/dist/parser/extractors/astro.js +102 -26
  45. package/dist/parser/extractors/astro.js.map +1 -1
  46. package/dist/parser/extractors/gradle-kts.d.ts +4 -0
  47. package/dist/parser/extractors/gradle-kts.d.ts.map +1 -0
  48. package/dist/parser/extractors/gradle-kts.js +246 -0
  49. package/dist/parser/extractors/gradle-kts.js.map +1 -0
  50. package/dist/parser/extractors/hono-inline-analyzer.d.ts +34 -0
  51. package/dist/parser/extractors/hono-inline-analyzer.d.ts.map +1 -0
  52. package/dist/parser/extractors/hono-inline-analyzer.js +465 -0
  53. package/dist/parser/extractors/hono-inline-analyzer.js.map +1 -0
  54. package/dist/parser/extractors/hono-model.d.ts +196 -0
  55. package/dist/parser/extractors/hono-model.d.ts.map +1 -0
  56. package/dist/parser/extractors/hono-model.js +10 -0
  57. package/dist/parser/extractors/hono-model.js.map +1 -0
  58. package/dist/parser/extractors/hono.d.ts +118 -0
  59. package/dist/parser/extractors/hono.d.ts.map +1 -0
  60. package/dist/parser/extractors/hono.js +1527 -0
  61. package/dist/parser/extractors/hono.js.map +1 -0
  62. package/dist/parser/extractors/kotlin.d.ts +4 -0
  63. package/dist/parser/extractors/kotlin.d.ts.map +1 -0
  64. package/dist/parser/extractors/kotlin.js +521 -0
  65. package/dist/parser/extractors/kotlin.js.map +1 -0
  66. package/dist/parser/extractors/php.d.ts +22 -0
  67. package/dist/parser/extractors/php.d.ts.map +1 -0
  68. package/dist/parser/extractors/php.js +334 -0
  69. package/dist/parser/extractors/php.js.map +1 -0
  70. package/dist/parser/extractors/python.d.ts.map +1 -1
  71. package/dist/parser/extractors/python.js +234 -11
  72. package/dist/parser/extractors/python.js.map +1 -1
  73. package/dist/parser/extractors/sql.d.ts +33 -0
  74. package/dist/parser/extractors/sql.d.ts.map +1 -0
  75. package/dist/parser/extractors/sql.js +506 -0
  76. package/dist/parser/extractors/sql.js.map +1 -0
  77. package/dist/parser/extractors/typescript.d.ts.map +1 -1
  78. package/dist/parser/extractors/typescript.js +209 -3
  79. package/dist/parser/extractors/typescript.js.map +1 -1
  80. package/dist/parser/languages/tree-sitter-javascript.wasm +0 -0
  81. package/dist/parser/languages/tree-sitter-kotlin.wasm +0 -0
  82. package/dist/parser/languages/tree-sitter-php.wasm +0 -0
  83. package/dist/parser/languages/tree-sitter-php_only.wasm +0 -0
  84. package/dist/parser/languages/tree-sitter-python.wasm +0 -0
  85. package/dist/parser/parse-cache.d.ts +39 -0
  86. package/dist/parser/parse-cache.d.ts.map +1 -0
  87. package/dist/parser/parse-cache.js +87 -0
  88. package/dist/parser/parse-cache.js.map +1 -0
  89. package/dist/parser/parser-manager.d.ts +32 -0
  90. package/dist/parser/parser-manager.d.ts.map +1 -1
  91. package/dist/parser/parser-manager.js +93 -3
  92. package/dist/parser/parser-manager.js.map +1 -1
  93. package/dist/parser/symbol-extractor.d.ts.map +1 -1
  94. package/dist/parser/symbol-extractor.js +16 -0
  95. package/dist/parser/symbol-extractor.js.map +1 -1
  96. package/dist/register-tools.d.ts +38 -2
  97. package/dist/register-tools.d.ts.map +1 -1
  98. package/dist/register-tools.js +2444 -195
  99. package/dist/register-tools.js.map +1 -1
  100. package/dist/search/reranker.js +1 -1
  101. package/dist/search/reranker.js.map +1 -1
  102. package/dist/search/tool-ranker.d.ts +90 -0
  103. package/dist/search/tool-ranker.d.ts.map +1 -0
  104. package/dist/search/tool-ranker.js +420 -0
  105. package/dist/search/tool-ranker.js.map +1 -0
  106. package/dist/server-helpers.d.ts.map +1 -1
  107. package/dist/server-helpers.js +11 -0
  108. package/dist/server-helpers.js.map +1 -1
  109. package/dist/server.js +47 -14
  110. package/dist/server.js.map +1 -1
  111. package/dist/storage/index-store.d.ts +15 -1
  112. package/dist/storage/index-store.d.ts.map +1 -1
  113. package/dist/storage/index-store.js +27 -1
  114. package/dist/storage/index-store.js.map +1 -1
  115. package/dist/storage/session-state.d.ts +1 -1
  116. package/dist/storage/session-state.d.ts.map +1 -1
  117. package/dist/storage/session-state.js +6 -4
  118. package/dist/storage/session-state.js.map +1 -1
  119. package/dist/storage/usage-tracker.d.ts.map +1 -1
  120. package/dist/storage/usage-tracker.js +4 -1
  121. package/dist/storage/usage-tracker.js.map +1 -1
  122. package/dist/tools/agent-config-tools.d.ts +24 -0
  123. package/dist/tools/agent-config-tools.d.ts.map +1 -0
  124. package/dist/tools/agent-config-tools.js +119 -0
  125. package/dist/tools/agent-config-tools.js.map +1 -0
  126. package/dist/tools/architecture-tools.d.ts +23 -0
  127. package/dist/tools/architecture-tools.d.ts.map +1 -0
  128. package/dist/tools/architecture-tools.js +140 -0
  129. package/dist/tools/architecture-tools.js.map +1 -0
  130. package/dist/tools/astro-actions.d.ts +54 -0
  131. package/dist/tools/astro-actions.d.ts.map +1 -0
  132. package/dist/tools/astro-actions.js +561 -0
  133. package/dist/tools/astro-actions.js.map +1 -0
  134. package/dist/tools/astro-audit.d.ts +87 -0
  135. package/dist/tools/astro-audit.d.ts.map +1 -0
  136. package/dist/tools/astro-audit.js +345 -0
  137. package/dist/tools/astro-audit.js.map +1 -0
  138. package/dist/tools/astro-config.d.ts +33 -0
  139. package/dist/tools/astro-config.d.ts.map +1 -0
  140. package/dist/tools/astro-config.js +260 -0
  141. package/dist/tools/astro-config.js.map +1 -0
  142. package/dist/tools/astro-content-collections.d.ts +44 -0
  143. package/dist/tools/astro-content-collections.d.ts.map +1 -0
  144. package/dist/tools/astro-content-collections.js +630 -0
  145. package/dist/tools/astro-content-collections.js.map +1 -0
  146. package/dist/tools/astro-islands.d.ts +63 -0
  147. package/dist/tools/astro-islands.d.ts.map +1 -0
  148. package/dist/tools/astro-islands.js +255 -0
  149. package/dist/tools/astro-islands.js.map +1 -0
  150. package/dist/tools/astro-migration.d.ts +31 -0
  151. package/dist/tools/astro-migration.d.ts.map +1 -0
  152. package/dist/tools/astro-migration.js +378 -0
  153. package/dist/tools/astro-migration.js.map +1 -0
  154. package/dist/tools/astro-routes.d.ts +49 -0
  155. package/dist/tools/astro-routes.d.ts.map +1 -0
  156. package/dist/tools/astro-routes.js +119 -0
  157. package/dist/tools/astro-routes.js.map +1 -0
  158. package/dist/tools/async-correctness.d.ts +26 -0
  159. package/dist/tools/async-correctness.d.ts.map +1 -0
  160. package/dist/tools/async-correctness.js +166 -0
  161. package/dist/tools/async-correctness.js.map +1 -0
  162. package/dist/tools/audit-tools.d.ts +38 -0
  163. package/dist/tools/audit-tools.d.ts.map +1 -0
  164. package/dist/tools/audit-tools.js +248 -0
  165. package/dist/tools/audit-tools.js.map +1 -0
  166. package/dist/tools/celery-tools.d.ts +38 -0
  167. package/dist/tools/celery-tools.d.ts.map +1 -0
  168. package/dist/tools/celery-tools.js +154 -0
  169. package/dist/tools/celery-tools.js.map +1 -0
  170. package/dist/tools/clone-tools.js +1 -1
  171. package/dist/tools/clone-tools.js.map +1 -1
  172. package/dist/tools/complexity-tools.d.ts +4 -0
  173. package/dist/tools/complexity-tools.d.ts.map +1 -1
  174. package/dist/tools/complexity-tools.js +78 -4
  175. package/dist/tools/complexity-tools.js.map +1 -1
  176. package/dist/tools/compose-tools.d.ts +60 -0
  177. package/dist/tools/compose-tools.d.ts.map +1 -0
  178. package/dist/tools/compose-tools.js +203 -0
  179. package/dist/tools/compose-tools.js.map +1 -0
  180. package/dist/tools/coupling-tools.d.ts +50 -0
  181. package/dist/tools/coupling-tools.d.ts.map +1 -0
  182. package/dist/tools/coupling-tools.js +262 -0
  183. package/dist/tools/coupling-tools.js.map +1 -0
  184. package/dist/tools/dependency-audit-tools.d.ts +65 -0
  185. package/dist/tools/dependency-audit-tools.d.ts.map +1 -0
  186. package/dist/tools/dependency-audit-tools.js +553 -0
  187. package/dist/tools/dependency-audit-tools.js.map +1 -0
  188. package/dist/tools/django-settings.d.ts +22 -0
  189. package/dist/tools/django-settings.d.ts.map +1 -0
  190. package/dist/tools/django-settings.js +301 -0
  191. package/dist/tools/django-settings.js.map +1 -0
  192. package/dist/tools/django-view-security-tools.d.ts +32 -0
  193. package/dist/tools/django-view-security-tools.d.ts.map +1 -0
  194. package/dist/tools/django-view-security-tools.js +184 -0
  195. package/dist/tools/django-view-security-tools.js.map +1 -0
  196. package/dist/tools/fastapi-depends.d.ts +63 -0
  197. package/dist/tools/fastapi-depends.d.ts.map +1 -0
  198. package/dist/tools/fastapi-depends.js +191 -0
  199. package/dist/tools/fastapi-depends.js.map +1 -0
  200. package/dist/tools/frequency-tools.js +1 -1
  201. package/dist/tools/frequency-tools.js.map +1 -1
  202. package/dist/tools/graph-tools.d.ts +8 -2
  203. package/dist/tools/graph-tools.d.ts.map +1 -1
  204. package/dist/tools/graph-tools.js +44 -3
  205. package/dist/tools/graph-tools.js.map +1 -1
  206. package/dist/tools/hilt-tools.d.ts +55 -0
  207. package/dist/tools/hilt-tools.d.ts.map +1 -0
  208. package/dist/tools/hilt-tools.js +258 -0
  209. package/dist/tools/hilt-tools.js.map +1 -0
  210. package/dist/tools/hono-analyze-app.d.ts +48 -0
  211. package/dist/tools/hono-analyze-app.d.ts.map +1 -0
  212. package/dist/tools/hono-analyze-app.js +94 -0
  213. package/dist/tools/hono-analyze-app.js.map +1 -0
  214. package/dist/tools/hono-api-contract.d.ts +22 -0
  215. package/dist/tools/hono-api-contract.d.ts.map +1 -0
  216. package/dist/tools/hono-api-contract.js +112 -0
  217. package/dist/tools/hono-api-contract.js.map +1 -0
  218. package/dist/tools/hono-conditional-middleware.d.ts +27 -0
  219. package/dist/tools/hono-conditional-middleware.d.ts.map +1 -0
  220. package/dist/tools/hono-conditional-middleware.js +62 -0
  221. package/dist/tools/hono-conditional-middleware.js.map +1 -0
  222. package/dist/tools/hono-context-flow.d.ts +24 -0
  223. package/dist/tools/hono-context-flow.d.ts.map +1 -0
  224. package/dist/tools/hono-context-flow.js +70 -0
  225. package/dist/tools/hono-context-flow.js.map +1 -0
  226. package/dist/tools/hono-dead-routes.d.ts +26 -0
  227. package/dist/tools/hono-dead-routes.d.ts.map +1 -0
  228. package/dist/tools/hono-dead-routes.js +102 -0
  229. package/dist/tools/hono-dead-routes.js.map +1 -0
  230. package/dist/tools/hono-entry-resolver.d.ts +27 -0
  231. package/dist/tools/hono-entry-resolver.d.ts.map +1 -0
  232. package/dist/tools/hono-entry-resolver.js +31 -0
  233. package/dist/tools/hono-entry-resolver.js.map +1 -0
  234. package/dist/tools/hono-env-regression.d.ts +29 -0
  235. package/dist/tools/hono-env-regression.d.ts.map +1 -0
  236. package/dist/tools/hono-env-regression.js +157 -0
  237. package/dist/tools/hono-env-regression.js.map +1 -0
  238. package/dist/tools/hono-inline-analyze.d.ts +31 -0
  239. package/dist/tools/hono-inline-analyze.d.ts.map +1 -0
  240. package/dist/tools/hono-inline-analyze.js +59 -0
  241. package/dist/tools/hono-inline-analyze.js.map +1 -0
  242. package/dist/tools/hono-middleware-chain.d.ts +40 -0
  243. package/dist/tools/hono-middleware-chain.d.ts.map +1 -0
  244. package/dist/tools/hono-middleware-chain.js +121 -0
  245. package/dist/tools/hono-middleware-chain.js.map +1 -0
  246. package/dist/tools/hono-modules.d.ts +22 -0
  247. package/dist/tools/hono-modules.d.ts.map +1 -0
  248. package/dist/tools/hono-modules.js +118 -0
  249. package/dist/tools/hono-modules.js.map +1 -0
  250. package/dist/tools/hono-response-types.d.ts +37 -0
  251. package/dist/tools/hono-response-types.d.ts.map +1 -0
  252. package/dist/tools/hono-response-types.js +76 -0
  253. package/dist/tools/hono-response-types.js.map +1 -0
  254. package/dist/tools/hono-rpc-types.d.ts +21 -0
  255. package/dist/tools/hono-rpc-types.d.ts.map +1 -0
  256. package/dist/tools/hono-rpc-types.js +49 -0
  257. package/dist/tools/hono-rpc-types.js.map +1 -0
  258. package/dist/tools/hono-security.d.ts +31 -0
  259. package/dist/tools/hono-security.d.ts.map +1 -0
  260. package/dist/tools/hono-security.js +269 -0
  261. package/dist/tools/hono-security.js.map +1 -0
  262. package/dist/tools/hono-visualize.d.ts +13 -0
  263. package/dist/tools/hono-visualize.d.ts.map +1 -0
  264. package/dist/tools/hono-visualize.js +64 -0
  265. package/dist/tools/hono-visualize.js.map +1 -0
  266. package/dist/tools/hotspot-tools.d.ts.map +1 -1
  267. package/dist/tools/hotspot-tools.js +9 -7
  268. package/dist/tools/hotspot-tools.js.map +1 -1
  269. package/dist/tools/index-tools.d.ts +17 -0
  270. package/dist/tools/index-tools.d.ts.map +1 -1
  271. package/dist/tools/index-tools.js +210 -10
  272. package/dist/tools/index-tools.js.map +1 -1
  273. package/dist/tools/kotlin-tools.d.ts +142 -0
  274. package/dist/tools/kotlin-tools.d.ts.map +1 -0
  275. package/dist/tools/kotlin-tools.js +572 -0
  276. package/dist/tools/kotlin-tools.js.map +1 -0
  277. package/dist/tools/legacy-hono-conventions.d.ts +14 -0
  278. package/dist/tools/legacy-hono-conventions.d.ts.map +1 -0
  279. package/dist/tools/legacy-hono-conventions.js +152 -0
  280. package/dist/tools/legacy-hono-conventions.js.map +1 -0
  281. package/dist/tools/migration-lint-tools.d.ts +26 -0
  282. package/dist/tools/migration-lint-tools.d.ts.map +1 -0
  283. package/dist/tools/migration-lint-tools.js +247 -0
  284. package/dist/tools/migration-lint-tools.js.map +1 -0
  285. package/dist/tools/model-tools.d.ts +30 -0
  286. package/dist/tools/model-tools.d.ts.map +1 -0
  287. package/dist/tools/model-tools.js +145 -0
  288. package/dist/tools/model-tools.js.map +1 -0
  289. package/dist/tools/nest-ext-tools.d.ts +207 -0
  290. package/dist/tools/nest-ext-tools.d.ts.map +1 -0
  291. package/dist/tools/nest-ext-tools.js +752 -0
  292. package/dist/tools/nest-ext-tools.js.map +1 -0
  293. package/dist/tools/nest-tools.d.ts +198 -0
  294. package/dist/tools/nest-tools.d.ts.map +1 -0
  295. package/dist/tools/nest-tools.js +1142 -0
  296. package/dist/tools/nest-tools.js.map +1 -0
  297. package/dist/tools/nextjs-api-contract-readers.d.ts +14 -0
  298. package/dist/tools/nextjs-api-contract-readers.d.ts.map +1 -0
  299. package/dist/tools/nextjs-api-contract-readers.js +204 -0
  300. package/dist/tools/nextjs-api-contract-readers.js.map +1 -0
  301. package/dist/tools/nextjs-api-contract-tools.d.ts +57 -0
  302. package/dist/tools/nextjs-api-contract-tools.d.ts.map +1 -0
  303. package/dist/tools/nextjs-api-contract-tools.js +144 -0
  304. package/dist/tools/nextjs-api-contract-tools.js.map +1 -0
  305. package/dist/tools/nextjs-boundary-tools.d.ts +39 -0
  306. package/dist/tools/nextjs-boundary-tools.d.ts.map +1 -0
  307. package/dist/tools/nextjs-boundary-tools.js +152 -0
  308. package/dist/tools/nextjs-boundary-tools.js.map +1 -0
  309. package/dist/tools/nextjs-component-readers.d.ts +101 -0
  310. package/dist/tools/nextjs-component-readers.d.ts.map +1 -0
  311. package/dist/tools/nextjs-component-readers.js +287 -0
  312. package/dist/tools/nextjs-component-readers.js.map +1 -0
  313. package/dist/tools/nextjs-component-tools.d.ts +51 -0
  314. package/dist/tools/nextjs-component-tools.d.ts.map +1 -0
  315. package/dist/tools/nextjs-component-tools.js +212 -0
  316. package/dist/tools/nextjs-component-tools.js.map +1 -0
  317. package/dist/tools/nextjs-data-flow-tools.d.ts +42 -0
  318. package/dist/tools/nextjs-data-flow-tools.d.ts.map +1 -0
  319. package/dist/tools/nextjs-data-flow-tools.js +158 -0
  320. package/dist/tools/nextjs-data-flow-tools.js.map +1 -0
  321. package/dist/tools/nextjs-framework-audit-tools.d.ts +60 -0
  322. package/dist/tools/nextjs-framework-audit-tools.d.ts.map +1 -0
  323. package/dist/tools/nextjs-framework-audit-tools.js +394 -0
  324. package/dist/tools/nextjs-framework-audit-tools.js.map +1 -0
  325. package/dist/tools/nextjs-link-tools.d.ts +41 -0
  326. package/dist/tools/nextjs-link-tools.d.ts.map +1 -0
  327. package/dist/tools/nextjs-link-tools.js +157 -0
  328. package/dist/tools/nextjs-link-tools.js.map +1 -0
  329. package/dist/tools/nextjs-metadata-tools.d.ts +74 -0
  330. package/dist/tools/nextjs-metadata-tools.d.ts.map +1 -0
  331. package/dist/tools/nextjs-metadata-tools.js +252 -0
  332. package/dist/tools/nextjs-metadata-tools.js.map +1 -0
  333. package/dist/tools/nextjs-middleware-coverage-tools.d.ts +41 -0
  334. package/dist/tools/nextjs-middleware-coverage-tools.d.ts.map +1 -0
  335. package/dist/tools/nextjs-middleware-coverage-tools.js +88 -0
  336. package/dist/tools/nextjs-middleware-coverage-tools.js.map +1 -0
  337. package/dist/tools/nextjs-route-readers.d.ts +81 -0
  338. package/dist/tools/nextjs-route-readers.d.ts.map +1 -0
  339. package/dist/tools/nextjs-route-readers.js +340 -0
  340. package/dist/tools/nextjs-route-readers.js.map +1 -0
  341. package/dist/tools/nextjs-route-tools.d.ts +36 -0
  342. package/dist/tools/nextjs-route-tools.d.ts.map +1 -0
  343. package/dist/tools/nextjs-route-tools.js +175 -0
  344. package/dist/tools/nextjs-route-tools.js.map +1 -0
  345. package/dist/tools/nextjs-security-readers.d.ts +22 -0
  346. package/dist/tools/nextjs-security-readers.d.ts.map +1 -0
  347. package/dist/tools/nextjs-security-readers.js +318 -0
  348. package/dist/tools/nextjs-security-readers.js.map +1 -0
  349. package/dist/tools/nextjs-security-scoring.d.ts +15 -0
  350. package/dist/tools/nextjs-security-scoring.d.ts.map +1 -0
  351. package/dist/tools/nextjs-security-scoring.js +65 -0
  352. package/dist/tools/nextjs-security-scoring.js.map +1 -0
  353. package/dist/tools/nextjs-security-tools.d.ts +75 -0
  354. package/dist/tools/nextjs-security-tools.d.ts.map +1 -0
  355. package/dist/tools/nextjs-security-tools.js +153 -0
  356. package/dist/tools/nextjs-security-tools.js.map +1 -0
  357. package/dist/tools/nextjs-tools.d.ts +15 -0
  358. package/dist/tools/nextjs-tools.d.ts.map +1 -0
  359. package/dist/tools/nextjs-tools.js +15 -0
  360. package/dist/tools/nextjs-tools.js.map +1 -0
  361. package/dist/tools/outline-tools.d.ts.map +1 -1
  362. package/dist/tools/outline-tools.js +20 -0
  363. package/dist/tools/outline-tools.js.map +1 -1
  364. package/dist/tools/pattern-tools.d.ts +8 -0
  365. package/dist/tools/pattern-tools.d.ts.map +1 -1
  366. package/dist/tools/pattern-tools.js +651 -3
  367. package/dist/tools/pattern-tools.js.map +1 -1
  368. package/dist/tools/perf-tools.d.ts +32 -0
  369. package/dist/tools/perf-tools.d.ts.map +1 -0
  370. package/dist/tools/perf-tools.js +227 -0
  371. package/dist/tools/perf-tools.js.map +1 -0
  372. package/dist/tools/php-tools.d.ts +185 -0
  373. package/dist/tools/php-tools.d.ts.map +1 -0
  374. package/dist/tools/php-tools.js +645 -0
  375. package/dist/tools/php-tools.js.map +1 -0
  376. package/dist/tools/plan-turn-tools.d.ts +89 -0
  377. package/dist/tools/plan-turn-tools.d.ts.map +1 -0
  378. package/dist/tools/plan-turn-tools.js +508 -0
  379. package/dist/tools/plan-turn-tools.js.map +1 -0
  380. package/dist/tools/prisma-schema-tools.d.ts +44 -0
  381. package/dist/tools/prisma-schema-tools.d.ts.map +1 -0
  382. package/dist/tools/prisma-schema-tools.js +358 -0
  383. package/dist/tools/prisma-schema-tools.js.map +1 -0
  384. package/dist/tools/project-tools.d.ts +116 -7
  385. package/dist/tools/project-tools.d.ts.map +1 -1
  386. package/dist/tools/project-tools.js +595 -218
  387. package/dist/tools/project-tools.js.map +1 -1
  388. package/dist/tools/pydantic-models.d.ts +46 -0
  389. package/dist/tools/pydantic-models.d.ts.map +1 -0
  390. package/dist/tools/pydantic-models.js +249 -0
  391. package/dist/tools/pydantic-models.js.map +1 -0
  392. package/dist/tools/pyproject-tools.d.ts +23 -0
  393. package/dist/tools/pyproject-tools.d.ts.map +1 -0
  394. package/dist/tools/pyproject-tools.js +133 -0
  395. package/dist/tools/pyproject-tools.js.map +1 -0
  396. package/dist/tools/pytest-tools.d.ts +20 -0
  397. package/dist/tools/pytest-tools.d.ts.map +1 -0
  398. package/dist/tools/pytest-tools.js +106 -0
  399. package/dist/tools/pytest-tools.js.map +1 -0
  400. package/dist/tools/python-audit.d.ts +40 -0
  401. package/dist/tools/python-audit.d.ts.map +1 -0
  402. package/dist/tools/python-audit.js +244 -0
  403. package/dist/tools/python-audit.js.map +1 -0
  404. package/dist/tools/python-callers.d.ts +28 -0
  405. package/dist/tools/python-callers.d.ts.map +1 -0
  406. package/dist/tools/python-callers.js +110 -0
  407. package/dist/tools/python-callers.js.map +1 -0
  408. package/dist/tools/python-circular-imports.d.ts +19 -0
  409. package/dist/tools/python-circular-imports.d.ts.map +1 -0
  410. package/dist/tools/python-circular-imports.js +126 -0
  411. package/dist/tools/python-circular-imports.js.map +1 -0
  412. package/dist/tools/python-constants-tools.d.ts +44 -0
  413. package/dist/tools/python-constants-tools.d.ts.map +1 -0
  414. package/dist/tools/python-constants-tools.js +525 -0
  415. package/dist/tools/python-constants-tools.js.map +1 -0
  416. package/dist/tools/python-deps-analyzer.d.ts +46 -0
  417. package/dist/tools/python-deps-analyzer.d.ts.map +1 -0
  418. package/dist/tools/python-deps-analyzer.js +227 -0
  419. package/dist/tools/python-deps-analyzer.js.map +1 -0
  420. package/dist/tools/query-tools.d.ts +23 -0
  421. package/dist/tools/query-tools.d.ts.map +1 -0
  422. package/dist/tools/query-tools.js +256 -0
  423. package/dist/tools/query-tools.js.map +1 -0
  424. package/dist/tools/react-tools.d.ts +263 -0
  425. package/dist/tools/react-tools.d.ts.map +1 -0
  426. package/dist/tools/react-tools.js +839 -0
  427. package/dist/tools/react-tools.js.map +1 -0
  428. package/dist/tools/report-tools.js +47 -0
  429. package/dist/tools/report-tools.js.map +1 -1
  430. package/dist/tools/review-diff-tools.d.ts +5 -4
  431. package/dist/tools/review-diff-tools.d.ts.map +1 -1
  432. package/dist/tools/review-diff-tools.js +157 -66
  433. package/dist/tools/review-diff-tools.js.map +1 -1
  434. package/dist/tools/room-tools.d.ts +36 -0
  435. package/dist/tools/room-tools.d.ts.map +1 -0
  436. package/dist/tools/room-tools.js +147 -0
  437. package/dist/tools/room-tools.js.map +1 -0
  438. package/dist/tools/route-tools.d.ts +27 -1
  439. package/dist/tools/route-tools.d.ts.map +1 -1
  440. package/dist/tools/route-tools.js +744 -18
  441. package/dist/tools/route-tools.js.map +1 -1
  442. package/dist/tools/ruff-tools.d.ts +32 -0
  443. package/dist/tools/ruff-tools.d.ts.map +1 -0
  444. package/dist/tools/ruff-tools.js +114 -0
  445. package/dist/tools/ruff-tools.js.map +1 -0
  446. package/dist/tools/search-ranker.d.ts.map +1 -1
  447. package/dist/tools/search-ranker.js +7 -0
  448. package/dist/tools/search-ranker.js.map +1 -1
  449. package/dist/tools/search-tools.d.ts +3 -2
  450. package/dist/tools/search-tools.d.ts.map +1 -1
  451. package/dist/tools/search-tools.js +16 -3
  452. package/dist/tools/search-tools.js.map +1 -1
  453. package/dist/tools/serialization-tools.d.ts +24 -0
  454. package/dist/tools/serialization-tools.d.ts.map +1 -0
  455. package/dist/tools/serialization-tools.js +156 -0
  456. package/dist/tools/serialization-tools.js.map +1 -0
  457. package/dist/tools/sql-tools.d.ts +274 -0
  458. package/dist/tools/sql-tools.d.ts.map +1 -0
  459. package/dist/tools/sql-tools.js +1160 -0
  460. package/dist/tools/sql-tools.js.map +1 -0
  461. package/dist/tools/status-tools.d.ts +10 -0
  462. package/dist/tools/status-tools.d.ts.map +1 -0
  463. package/dist/tools/status-tools.js +32 -0
  464. package/dist/tools/status-tools.js.map +1 -0
  465. package/dist/tools/symbol-tools.d.ts +19 -0
  466. package/dist/tools/symbol-tools.d.ts.map +1 -1
  467. package/dist/tools/symbol-tools.js +75 -4
  468. package/dist/tools/symbol-tools.js.map +1 -1
  469. package/dist/tools/taint-tools.d.ts +43 -0
  470. package/dist/tools/taint-tools.d.ts.map +1 -0
  471. package/dist/tools/taint-tools.js +922 -0
  472. package/dist/tools/taint-tools.js.map +1 -0
  473. package/dist/tools/test-impact-tools.d.ts +29 -0
  474. package/dist/tools/test-impact-tools.d.ts.map +1 -0
  475. package/dist/tools/test-impact-tools.js +156 -0
  476. package/dist/tools/test-impact-tools.js.map +1 -0
  477. package/dist/tools/typecheck-tools.d.ts +39 -0
  478. package/dist/tools/typecheck-tools.d.ts.map +1 -0
  479. package/dist/tools/typecheck-tools.js +191 -0
  480. package/dist/tools/typecheck-tools.js.map +1 -0
  481. package/dist/tools/wiring-tools.d.ts +19 -0
  482. package/dist/tools/wiring-tools.d.ts.map +1 -0
  483. package/dist/tools/wiring-tools.js +147 -0
  484. package/dist/tools/wiring-tools.js.map +1 -0
  485. package/dist/types.d.ts +9 -1
  486. package/dist/types.d.ts.map +1 -1
  487. package/dist/utils/framework-detect.d.ts +18 -2
  488. package/dist/utils/framework-detect.d.ts.map +1 -1
  489. package/dist/utils/framework-detect.js +150 -3
  490. package/dist/utils/framework-detect.js.map +1 -1
  491. package/dist/utils/import-graph.d.ts +42 -0
  492. package/dist/utils/import-graph.d.ts.map +1 -1
  493. package/dist/utils/import-graph.js +248 -9
  494. package/dist/utils/import-graph.js.map +1 -1
  495. package/dist/utils/language-detect.d.ts +21 -0
  496. package/dist/utils/language-detect.d.ts.map +1 -0
  497. package/dist/utils/language-detect.js +183 -0
  498. package/dist/utils/language-detect.js.map +1 -0
  499. package/dist/utils/nextjs-ast-readers.d.ts +44 -0
  500. package/dist/utils/nextjs-ast-readers.d.ts.map +1 -0
  501. package/dist/utils/nextjs-ast-readers.js +341 -0
  502. package/dist/utils/nextjs-ast-readers.js.map +1 -0
  503. package/dist/utils/nextjs-audit-cache.d.ts +51 -0
  504. package/dist/utils/nextjs-audit-cache.d.ts.map +1 -0
  505. package/dist/utils/nextjs-audit-cache.js +116 -0
  506. package/dist/utils/nextjs-audit-cache.js.map +1 -0
  507. package/dist/utils/nextjs-metadata-readers.d.ts +65 -0
  508. package/dist/utils/nextjs-metadata-readers.d.ts.map +1 -0
  509. package/dist/utils/nextjs-metadata-readers.js +447 -0
  510. package/dist/utils/nextjs-metadata-readers.js.map +1 -0
  511. package/dist/utils/nextjs.d.ts +42 -0
  512. package/dist/utils/nextjs.d.ts.map +1 -0
  513. package/dist/utils/nextjs.js +284 -0
  514. package/dist/utils/nextjs.js.map +1 -0
  515. package/dist/utils/python-import-resolver.d.ts +42 -0
  516. package/dist/utils/python-import-resolver.d.ts.map +1 -0
  517. package/dist/utils/python-import-resolver.js +101 -0
  518. package/dist/utils/python-import-resolver.js.map +1 -0
  519. package/dist/utils/python-imports.d.ts +28 -0
  520. package/dist/utils/python-imports.d.ts.map +1 -0
  521. package/dist/utils/python-imports.js +117 -0
  522. package/dist/utils/python-imports.js.map +1 -0
  523. package/dist/utils/react-alias.d.ts +15 -0
  524. package/dist/utils/react-alias.d.ts.map +1 -0
  525. package/dist/utils/react-alias.js +31 -0
  526. package/dist/utils/react-alias.js.map +1 -0
  527. package/dist/utils/test-file.d.ts.map +1 -1
  528. package/dist/utils/test-file.js +7 -0
  529. package/dist/utils/test-file.js.map +1 -1
  530. package/dist/utils/walk.d.ts +22 -0
  531. package/dist/utils/walk.d.ts.map +1 -1
  532. package/dist/utils/walk.js +70 -2
  533. package/dist/utils/walk.js.map +1 -1
  534. package/package.json +4 -3
  535. package/rules/codesift.md +71 -5
  536. package/rules/codesift.mdc +71 -5
  537. package/rules/codex.md +71 -5
  538. package/rules/gemini.md +71 -5
  539. package/src/parser/languages/tree-sitter-javascript.wasm +0 -0
  540. package/src/parser/languages/tree-sitter-kotlin.wasm +0 -0
  541. package/src/parser/languages/tree-sitter-php.wasm +0 -0
  542. package/src/parser/languages/tree-sitter-php_only.wasm +0 -0
  543. package/src/parser/languages/tree-sitter-python.wasm +0 -0
@@ -0,0 +1,341 @@
1
+ import { readStringLiteral } from "./nextjs-metadata-readers.js";
2
+ // ---------------------------------------------------------------------------
3
+ // Zod schema extraction (T2, T3 helper)
4
+ // ---------------------------------------------------------------------------
5
+ /** Allowed top-level Zod field methods. */
6
+ const ZOD_FIELD_METHODS = new Set([
7
+ "object",
8
+ "string",
9
+ "number",
10
+ "boolean",
11
+ "array",
12
+ "union",
13
+ "enum",
14
+ "literal",
15
+ "optional",
16
+ "nullable",
17
+ "record",
18
+ "tuple",
19
+ "discriminatedUnion",
20
+ "date",
21
+ "any",
22
+ "unknown",
23
+ "bigint",
24
+ "void",
25
+ "never",
26
+ "null",
27
+ "undefined",
28
+ ]);
29
+ /** Allowed chained refinement methods (non-structural). */
30
+ const ZOD_CHAIN_METHODS = new Set([
31
+ "extend",
32
+ "merge",
33
+ "omit",
34
+ "pick",
35
+ "strict",
36
+ "refine",
37
+ "superRefine",
38
+ "transform",
39
+ "brand",
40
+ "describe",
41
+ "default",
42
+ "catch",
43
+ "readonly",
44
+ "optional",
45
+ "nullable",
46
+ "nullish",
47
+ ]);
48
+ /** Per-type constraint methods that we record (not exhaustive — tracks common cases). */
49
+ const ZOD_CONSTRAINT_METHODS = new Set([
50
+ "int",
51
+ "min",
52
+ "max",
53
+ "length",
54
+ "email",
55
+ "url",
56
+ "uuid",
57
+ "regex",
58
+ "startsWith",
59
+ "endsWith",
60
+ "positive",
61
+ "negative",
62
+ "nonnegative",
63
+ "nonpositive",
64
+ "gt",
65
+ "gte",
66
+ "lt",
67
+ "lte",
68
+ "multipleOf",
69
+ "finite",
70
+ "safe",
71
+ "trim",
72
+ "toLowerCase",
73
+ "toUpperCase",
74
+ ]);
75
+ /**
76
+ * Unwrap a call expression like `z.object({...}).strict().refine(...)` down to
77
+ * the root z.<method>(...) invocation. Returns the underlying call node, the
78
+ * captured field method, and any collected chain modifiers.
79
+ */
80
+ function unwrapZodChain(call) {
81
+ const chain = [];
82
+ let partial = false;
83
+ let cur = call;
84
+ while (cur.type === "call_expression") {
85
+ const fn = cur.childForFieldName("function") ?? cur.namedChild(0);
86
+ if (!fn)
87
+ return null;
88
+ // z.<method>(...) — base case
89
+ if (fn.type === "member_expression") {
90
+ const obj = fn.childForFieldName("object") ?? fn.namedChild(0);
91
+ const prop = fn.childForFieldName("property") ?? fn.namedChild(1);
92
+ if (obj?.type === "identifier" && (obj.text === "z" || obj.text === "zod")) {
93
+ if (prop?.type !== "property_identifier")
94
+ return null;
95
+ const method = prop.text;
96
+ if (!ZOD_FIELD_METHODS.has(method))
97
+ return null;
98
+ return { rootCall: cur, rootMethod: method, chain, partial };
99
+ }
100
+ // Chained: <inner>.<chainMethod>(...)
101
+ if (prop?.type === "property_identifier") {
102
+ const method = prop.text;
103
+ if (ZOD_CHAIN_METHODS.has(method)) {
104
+ chain.unshift(method);
105
+ if (method === "extend" || method === "merge")
106
+ partial = true;
107
+ if (!obj)
108
+ return null;
109
+ if (obj.type === "call_expression") {
110
+ cur = obj;
111
+ continue;
112
+ }
113
+ // Identifier base (e.g. `BaseSchema.extend(...)`)
114
+ return null;
115
+ }
116
+ if (ZOD_CONSTRAINT_METHODS.has(method)) {
117
+ chain.unshift(method);
118
+ if (!obj)
119
+ return null;
120
+ if (obj.type === "call_expression") {
121
+ cur = obj;
122
+ continue;
123
+ }
124
+ return null;
125
+ }
126
+ // Unknown chain method on unknown base
127
+ return null;
128
+ }
129
+ }
130
+ // Not a Zod chain
131
+ return null;
132
+ }
133
+ return null;
134
+ }
135
+ /** Recursively parse a single field call like `z.string()` into a ZodFieldType. */
136
+ function parseZodField(call) {
137
+ const unwrapped = unwrapZodChain(call);
138
+ if (!unwrapped)
139
+ return null;
140
+ const { rootCall, rootMethod, chain } = unwrapped;
141
+ const field = { type: rootMethod };
142
+ const constraints = chain.filter((c) => ZOD_CONSTRAINT_METHODS.has(c));
143
+ if (constraints.length > 0)
144
+ field.constraints = constraints;
145
+ if (chain.includes("optional"))
146
+ field.optional = true;
147
+ if (chain.includes("nullable") || chain.includes("nullish"))
148
+ field.nullable = true;
149
+ if (rootMethod === "object") {
150
+ const args = rootCall.childForFieldName("arguments") ?? rootCall.namedChild(1);
151
+ if (args) {
152
+ const objArg = args.namedChildren.find((c) => c.type === "object");
153
+ if (objArg) {
154
+ const nested = parseZodObjectArg(objArg);
155
+ if (nested)
156
+ field.nested = nested;
157
+ }
158
+ }
159
+ }
160
+ return field;
161
+ }
162
+ /** Walk an `{ key: z.<method>(), ... }` object literal into a fields map. */
163
+ function parseZodObjectArg(objNode) {
164
+ if (objNode.type !== "object")
165
+ return null;
166
+ const out = {};
167
+ for (const pair of objNode.namedChildren) {
168
+ if (pair.type !== "pair")
169
+ continue;
170
+ const key = pair.childForFieldName("key") ?? pair.namedChild(0);
171
+ if (!key)
172
+ continue;
173
+ let keyText = null;
174
+ if (key.type === "property_identifier" || key.type === "identifier") {
175
+ keyText = key.text;
176
+ }
177
+ else if (key.type === "string") {
178
+ keyText = readStringLiteral(key);
179
+ }
180
+ if (!keyText)
181
+ continue;
182
+ const value = pair.childForFieldName("value") ?? pair.namedChild(1);
183
+ if (!value || value.type !== "call_expression")
184
+ continue;
185
+ const field = parseZodField(value);
186
+ if (field)
187
+ out[keyText] = field;
188
+ }
189
+ return out;
190
+ }
191
+ /**
192
+ * Extract the shape of a top-level Zod schema from a source tree.
193
+ *
194
+ * Walks `variable_declarator` nodes and tries each one's initializer. Returns
195
+ * the first successfully parsed Zod schema, or `null` when no z.object(...) is
196
+ * found. Other validation libraries (Yup, Joi, etc.) intentionally return null
197
+ * — downstream tools wrap this and add `schema_lib: "unknown"` at their own
198
+ * aggregation level.
199
+ */
200
+ export function extractZodSchema(tree, _source) {
201
+ const root = tree.rootNode;
202
+ for (const decl of root.descendantsOfType("variable_declarator")) {
203
+ const value = decl.childForFieldName("value");
204
+ if (!value || value.type !== "call_expression")
205
+ continue;
206
+ const unwrapped = unwrapZodChain(value);
207
+ if (!unwrapped)
208
+ continue;
209
+ if (unwrapped.rootMethod !== "object")
210
+ continue;
211
+ const args = unwrapped.rootCall.childForFieldName("arguments") ?? unwrapped.rootCall.namedChild(1);
212
+ if (!args)
213
+ continue;
214
+ const objArg = args.namedChildren.find((c) => c.type === "object");
215
+ if (!objArg)
216
+ continue;
217
+ const fields = parseZodObjectArg(objArg);
218
+ if (!fields)
219
+ continue;
220
+ return { fields, partial: unwrapped.partial };
221
+ }
222
+ return null;
223
+ }
224
+ /**
225
+ * Extract navigation target references from a parsed tree:
226
+ * - `<Link href="/path">` JSX components
227
+ * - `router.push("/path")` / `router.replace("/path")` call sites
228
+ *
229
+ * Literal string values populate `href` with the unquoted content and
230
+ * `isDynamic: false`. Template literals with substitutions and identifier
231
+ * references populate `href` with the raw expression text and `isDynamic: true`.
232
+ */
233
+ export function extractLinkHrefs(tree, _source) {
234
+ const refs = [];
235
+ const root = tree.rootNode;
236
+ // <Link href="...">
237
+ for (const opening of root.descendantsOfType("jsx_opening_element")) {
238
+ const name = opening.childForFieldName("name") ?? opening.namedChild(0);
239
+ if (name?.type !== "identifier" || name.text !== "Link")
240
+ continue;
241
+ for (const attr of opening.namedChildren) {
242
+ if (attr.type !== "jsx_attribute")
243
+ continue;
244
+ const attrName = attr.namedChild(0);
245
+ if (!attrName)
246
+ continue;
247
+ const attrNameText = attrName.type === "property_identifier" || attrName.type === "identifier"
248
+ ? attrName.text
249
+ : null;
250
+ if (attrNameText !== "href")
251
+ continue;
252
+ const value = attr.namedChild(1);
253
+ if (!value)
254
+ continue;
255
+ const line = attr.startPosition.row + 1;
256
+ if (value.type === "string") {
257
+ const s = readStringLiteral(value);
258
+ refs.push({
259
+ href: s ?? value.text,
260
+ isDynamic: false,
261
+ line,
262
+ kind: "link",
263
+ });
264
+ }
265
+ else if (value.type === "jsx_expression") {
266
+ const inner = value.namedChildren[0];
267
+ if (!inner)
268
+ continue;
269
+ if (inner.type === "string") {
270
+ const s = readStringLiteral(inner);
271
+ refs.push({ href: s ?? inner.text, isDynamic: false, line, kind: "link" });
272
+ }
273
+ else if (inner.type === "template_string") {
274
+ // template literal — dynamic unless fully literal
275
+ const hasSubs = inner.namedChildren.some((c) => c.type === "template_substitution");
276
+ if (!hasSubs) {
277
+ const literal = readStringLiteral(inner);
278
+ refs.push({
279
+ href: literal ?? inner.text,
280
+ isDynamic: false,
281
+ line,
282
+ kind: "link",
283
+ });
284
+ }
285
+ else {
286
+ refs.push({ href: inner.text, isDynamic: true, line, kind: "link" });
287
+ }
288
+ }
289
+ else {
290
+ // identifier, call, etc. — dynamic
291
+ refs.push({ href: inner.text, isDynamic: true, line, kind: "link" });
292
+ }
293
+ }
294
+ }
295
+ }
296
+ // router.push(...) / router.replace(...)
297
+ for (const call of root.descendantsOfType("call_expression")) {
298
+ const fn = call.childForFieldName("function") ?? call.namedChild(0);
299
+ if (!fn || fn.type !== "member_expression")
300
+ continue;
301
+ const obj = fn.childForFieldName("object") ?? fn.namedChild(0);
302
+ const prop = fn.childForFieldName("property") ?? fn.namedChild(1);
303
+ if (obj?.type !== "identifier" || obj.text !== "router")
304
+ continue;
305
+ if (prop?.type !== "property_identifier")
306
+ continue;
307
+ const method = prop.text;
308
+ if (method !== "push" && method !== "replace")
309
+ continue;
310
+ const args = call.childForFieldName("arguments") ?? call.namedChild(1);
311
+ const firstArg = args?.namedChildren[0];
312
+ if (!firstArg)
313
+ continue;
314
+ const line = call.startPosition.row + 1;
315
+ const kind = method === "push" ? "router_push" : "router_replace";
316
+ if (firstArg.type === "string") {
317
+ const s = readStringLiteral(firstArg);
318
+ refs.push({
319
+ href: s ?? firstArg.text,
320
+ isDynamic: false,
321
+ line,
322
+ kind,
323
+ });
324
+ }
325
+ else if (firstArg.type === "template_string") {
326
+ const hasSubs = firstArg.namedChildren.some((c) => c.type === "template_substitution");
327
+ if (!hasSubs) {
328
+ const literal = readStringLiteral(firstArg);
329
+ refs.push({ href: literal ?? firstArg.text, isDynamic: false, line, kind });
330
+ }
331
+ else {
332
+ refs.push({ href: firstArg.text, isDynamic: true, line, kind });
333
+ }
334
+ }
335
+ else {
336
+ refs.push({ href: firstArg.text, isDynamic: true, line, kind });
337
+ }
338
+ }
339
+ return refs;
340
+ }
341
+ //# sourceMappingURL=nextjs-ast-readers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs-ast-readers.js","sourceRoot":"","sources":["../../src/utils/nextjs-ast-readers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
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 type Parser from "web-tree-sitter";
14
+ import { type WalkOptions } from "./walk.js";
15
+ /** Activate the shared cache (called by frameworkAudit at start). */
16
+ export declare function activateGlobalCache(): NextjsAuditCache;
17
+ /** Deactivate and clear (called by frameworkAudit at end). */
18
+ export declare function deactivateGlobalCache(): void;
19
+ /** Get the active cache, or null if not in a framework_audit context. */
20
+ export declare function getGlobalCache(): NextjsAuditCache | null;
21
+ /**
22
+ * Proxy for walkDirectory that uses global cache when active.
23
+ * Drop-in replacement — same signature as walkDirectory.
24
+ */
25
+ export declare function cachedWalkDirectory(root: string, options?: WalkOptions): Promise<string[]>;
26
+ /**
27
+ * Proxy for parseFile that uses global cache when active.
28
+ * Drop-in replacement — same signature as parseFile.
29
+ */
30
+ export declare function cachedParseFile(path: string, source: string): Promise<Parser.Tree | null>;
31
+ export declare class NextjsAuditCache {
32
+ private parseFileCache;
33
+ private walkCache;
34
+ private readonly ttl;
35
+ constructor();
36
+ /**
37
+ * Parse and cache a file. Concurrent calls share the same promise.
38
+ * Synchronous (returns the cached/in-flight Promise directly) so that
39
+ * `cache.getParsedFile(p) === cache.getParsedFile(p)` for concurrent calls.
40
+ */
41
+ getParsedFile(path: string, source: string): Promise<Parser.Tree | null>;
42
+ /** Walk and cache a directory. Concurrent calls share the same promise. */
43
+ getWalk(root: string, options?: WalkOptions): Promise<string[]>;
44
+ /** Clear all entries. */
45
+ clear(): void;
46
+ /** Total cached entries. */
47
+ size(): number;
48
+ /** Evict entries whose TTL has passed. */
49
+ private evictExpired;
50
+ }
51
+ //# sourceMappingURL=nextjs-audit-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs-audit-cache.d.ts","sourceRoot":"","sources":["../../src/utils/nextjs-audit-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAc5D,qEAAqE;AACrE,wBAAgB,mBAAmB,IAAI,gBAAgB,CAGtD;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED,yEAAyE;AACzE,wBAAgB,cAAc,IAAI,gBAAgB,GAAG,IAAI,CAExD;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGhG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAG/F;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAA0D;IAChF,OAAO,CAAC,SAAS,CAAgD;IACjE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;;IAY7B;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IAcxE,2EAA2E;IAC3E,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAe/D,yBAAyB;IACzB,KAAK,IAAI,IAAI;IAKb,4BAA4B;IAC5B,IAAI,IAAI,MAAM;IAId,0CAA0C;IAC1C,OAAO,CAAC,YAAY;CAQrB"}
@@ -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":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAoB,MAAM,WAAW,CAAC;AAE5D,MAAM,cAAc,GAAG,KAAK,CAAC;AAO7B,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAC9E,IAAI,YAAY,GAA4B,IAAI,CAAC;AAEjD,qEAAqE;AACrE,MAAM,UAAU,mBAAmB;IACjC,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACtC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,qBAAqB;IACnC,YAAY,EAAE,KAAK,EAAE,CAAC;IACtB,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAAqB;IAC3E,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,MAAc;IAChE,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClE,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,OAAO,gBAAgB;IACnB,cAAc,GAAgD,IAAI,GAAG,EAAE,CAAC;IACxE,SAAS,GAAsC,IAAI,GAAG,EAAE,CAAC;IAChD,GAAG,CAAS;IAE7B;QACE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACnD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,GAAG,cAAc,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,IAAY,EAAE,MAAc;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACpE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2EAA2E;IAC3E,OAAO,CAAC,IAAY,EAAE,OAAqB;QACzC,MAAM,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC,OAAO,CAAC;QACxB,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,yBAAyB;IACzB,KAAK;QACH,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,4BAA4B;IAC5B,IAAI;QACF,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACxD,CAAC;IAED,0CAA0C;IAClC,YAAY,CAAC,GAAW;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG;gBAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CACF"}
@@ -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"}