@backthread/extractor 0.1.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 (379) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/cluster/domain-grouping.d.ts +113 -0
  4. package/dist/cluster/domain-grouping.d.ts.map +1 -0
  5. package/dist/cluster/domain-grouping.js +277 -0
  6. package/dist/cluster/domain-grouping.js.map +1 -0
  7. package/dist/cluster/grouping-gate.d.ts +54 -0
  8. package/dist/cluster/grouping-gate.d.ts.map +1 -0
  9. package/dist/cluster/grouping-gate.js +0 -0
  10. package/dist/cluster/grouping-gate.js.map +1 -0
  11. package/dist/cluster/louvain.d.ts +88 -0
  12. package/dist/cluster/louvain.d.ts.map +1 -0
  13. package/dist/cluster/louvain.js +674 -0
  14. package/dist/cluster/louvain.js.map +1 -0
  15. package/dist/cluster/overrides.d.ts +19 -0
  16. package/dist/cluster/overrides.d.ts.map +1 -0
  17. package/dist/cluster/overrides.js +32 -0
  18. package/dist/cluster/overrides.js.map +1 -0
  19. package/dist/cluster/subsystem.d.ts +45 -0
  20. package/dist/cluster/subsystem.d.ts.map +1 -0
  21. package/dist/cluster/subsystem.js +299 -0
  22. package/dist/cluster/subsystem.js.map +1 -0
  23. package/dist/cluster/workspaces.d.ts +64 -0
  24. package/dist/cluster/workspaces.d.ts.map +1 -0
  25. package/dist/cluster/workspaces.js +739 -0
  26. package/dist/cluster/workspaces.js.map +1 -0
  27. package/dist/extract.d.ts +52 -0
  28. package/dist/extract.d.ts.map +1 -0
  29. package/dist/extract.js +48 -0
  30. package/dist/extract.js.map +1 -0
  31. package/dist/framework/celery/celery.d.ts +17 -0
  32. package/dist/framework/celery/celery.d.ts.map +1 -0
  33. package/dist/framework/celery/celery.js +524 -0
  34. package/dist/framework/celery/celery.js.map +1 -0
  35. package/dist/framework/contribute-step.d.ts +38 -0
  36. package/dist/framework/contribute-step.d.ts.map +1 -0
  37. package/dist/framework/contribute-step.js +403 -0
  38. package/dist/framework/contribute-step.js.map +1 -0
  39. package/dist/framework/detect-step.d.ts +8 -0
  40. package/dist/framework/detect-step.d.ts.map +1 -0
  41. package/dist/framework/detect-step.js +54 -0
  42. package/dist/framework/detect-step.js.map +1 -0
  43. package/dist/framework/detect-util.d.ts +24 -0
  44. package/dist/framework/detect-util.d.ts.map +1 -0
  45. package/dist/framework/detect-util.js +59 -0
  46. package/dist/framework/detect-util.js.map +1 -0
  47. package/dist/framework/django/django.d.ts +22 -0
  48. package/dist/framework/django/django.d.ts.map +1 -0
  49. package/dist/framework/django/django.js +940 -0
  50. package/dist/framework/django/django.js.map +1 -0
  51. package/dist/framework/fastapi/fastapi.d.ts +27 -0
  52. package/dist/framework/fastapi/fastapi.d.ts.map +1 -0
  53. package/dist/framework/fastapi/fastapi.js +477 -0
  54. package/dist/framework/fastapi/fastapi.js.map +1 -0
  55. package/dist/framework/faststream/faststream.d.ts +19 -0
  56. package/dist/framework/faststream/faststream.d.ts.map +1 -0
  57. package/dist/framework/faststream/faststream.js +765 -0
  58. package/dist/framework/faststream/faststream.js.map +1 -0
  59. package/dist/framework/flask/flask.d.ts +17 -0
  60. package/dist/framework/flask/flask.d.ts.map +1 -0
  61. package/dist/framework/flask/flask.js +507 -0
  62. package/dist/framework/flask/flask.js.map +1 -0
  63. package/dist/framework/graphql/graphql.d.ts +17 -0
  64. package/dist/framework/graphql/graphql.d.ts.map +1 -0
  65. package/dist/framework/graphql/graphql.js +708 -0
  66. package/dist/framework/graphql/graphql.js.map +1 -0
  67. package/dist/framework/grpc/grpc.d.ts +22 -0
  68. package/dist/framework/grpc/grpc.d.ts.map +1 -0
  69. package/dist/framework/grpc/grpc.js +618 -0
  70. package/dist/framework/grpc/grpc.js.map +1 -0
  71. package/dist/framework/litestar/litestar.d.ts +17 -0
  72. package/dist/framework/litestar/litestar.d.ts.map +1 -0
  73. package/dist/framework/litestar/litestar.js +536 -0
  74. package/dist/framework/litestar/litestar.js.map +1 -0
  75. package/dist/framework/nest/nest.d.ts +19 -0
  76. package/dist/framework/nest/nest.d.ts.map +1 -0
  77. package/dist/framework/nest/nest.js +613 -0
  78. package/dist/framework/nest/nest.js.map +1 -0
  79. package/dist/framework/next/next.d.ts +22 -0
  80. package/dist/framework/next/next.d.ts.map +1 -0
  81. package/dist/framework/next/next.js +449 -0
  82. package/dist/framework/next/next.js.map +1 -0
  83. package/dist/framework/node/node.d.ts +24 -0
  84. package/dist/framework/node/node.d.ts.map +1 -0
  85. package/dist/framework/node/node.js +1009 -0
  86. package/dist/framework/node/node.js.map +1 -0
  87. package/dist/framework/orchestrator/orchestrator.d.ts +34 -0
  88. package/dist/framework/orchestrator/orchestrator.d.ts.map +1 -0
  89. package/dist/framework/orchestrator/orchestrator.js +691 -0
  90. package/dist/framework/orchestrator/orchestrator.js.map +1 -0
  91. package/dist/framework/orm/orm.d.ts +61 -0
  92. package/dist/framework/orm/orm.d.ts.map +1 -0
  93. package/dist/framework/orm/orm.js +620 -0
  94. package/dist/framework/orm/orm.js.map +1 -0
  95. package/dist/framework/python/analyze.d.ts +38 -0
  96. package/dist/framework/python/analyze.d.ts.map +1 -0
  97. package/dist/framework/python/analyze.js +98 -0
  98. package/dist/framework/python/analyze.js.map +1 -0
  99. package/dist/framework/python/py-ast.d.ts +130 -0
  100. package/dist/framework/python/py-ast.d.ts.map +1 -0
  101. package/dist/framework/python/py-ast.js +344 -0
  102. package/dist/framework/python/py-ast.js.map +1 -0
  103. package/dist/framework/python-orm/python-orm.d.ts +19 -0
  104. package/dist/framework/python-orm/python-orm.d.ts.map +1 -0
  105. package/dist/framework/python-orm/python-orm.js +516 -0
  106. package/dist/framework/python-orm/python-orm.js.map +1 -0
  107. package/dist/framework/react-native/react-native.d.ts +35 -0
  108. package/dist/framework/react-native/react-native.d.ts.map +1 -0
  109. package/dist/framework/react-native/react-native.js +1181 -0
  110. package/dist/framework/react-native/react-native.js.map +1 -0
  111. package/dist/framework/register.d.ts +2 -0
  112. package/dist/framework/register.d.ts.map +1 -0
  113. package/dist/framework/register.js +59 -0
  114. package/dist/framework/register.js.map +1 -0
  115. package/dist/framework/registry.d.ts +31 -0
  116. package/dist/framework/registry.d.ts.map +1 -0
  117. package/dist/framework/registry.js +70 -0
  118. package/dist/framework/registry.js.map +1 -0
  119. package/dist/framework/routing/expo-router.d.ts +31 -0
  120. package/dist/framework/routing/expo-router.d.ts.map +1 -0
  121. package/dist/framework/routing/expo-router.js +356 -0
  122. package/dist/framework/routing/expo-router.js.map +1 -0
  123. package/dist/framework/routing/index.d.ts +4 -0
  124. package/dist/framework/routing/index.d.ts.map +1 -0
  125. package/dist/framework/routing/index.js +16 -0
  126. package/dist/framework/routing/index.js.map +1 -0
  127. package/dist/framework/routing/next-router.d.ts +45 -0
  128. package/dist/framework/routing/next-router.d.ts.map +1 -0
  129. package/dist/framework/routing/next-router.js +378 -0
  130. package/dist/framework/routing/next-router.js.map +1 -0
  131. package/dist/framework/routing/route-tree.d.ts +73 -0
  132. package/dist/framework/routing/route-tree.d.ts.map +1 -0
  133. package/dist/framework/routing/route-tree.js +120 -0
  134. package/dist/framework/routing/route-tree.js.map +1 -0
  135. package/dist/framework/types.d.ts +230 -0
  136. package/dist/framework/types.d.ts.map +1 -0
  137. package/dist/framework/types.js +25 -0
  138. package/dist/framework/types.js.map +1 -0
  139. package/dist/graph/cross-language.d.ts +11 -0
  140. package/dist/graph/cross-language.d.ts.map +1 -0
  141. package/dist/graph/cross-language.js +123 -0
  142. package/dist/graph/cross-language.js.map +1 -0
  143. package/dist/graph/extract.d.ts +13 -0
  144. package/dist/graph/extract.d.ts.map +1 -0
  145. package/dist/graph/extract.js +79 -0
  146. package/dist/graph/extract.js.map +1 -0
  147. package/dist/graph/file-graph.d.ts +186 -0
  148. package/dist/graph/file-graph.d.ts.map +1 -0
  149. package/dist/graph/file-graph.js +427 -0
  150. package/dist/graph/file-graph.js.map +1 -0
  151. package/dist/graph/http-callsites.d.ts +14 -0
  152. package/dist/graph/http-callsites.d.ts.map +1 -0
  153. package/dist/graph/http-callsites.js +107 -0
  154. package/dist/graph/http-callsites.js.map +1 -0
  155. package/dist/graph/incremental.d.ts +122 -0
  156. package/dist/graph/incremental.d.ts.map +1 -0
  157. package/dist/graph/incremental.js +448 -0
  158. package/dist/graph/incremental.js.map +1 -0
  159. package/dist/graph/language.d.ts +31 -0
  160. package/dist/graph/language.d.ts.map +1 -0
  161. package/dist/graph/language.js +146 -0
  162. package/dist/graph/language.js.map +1 -0
  163. package/dist/graph/noise-filter.d.ts +46 -0
  164. package/dist/graph/noise-filter.d.ts.map +1 -0
  165. package/dist/graph/noise-filter.js +199 -0
  166. package/dist/graph/noise-filter.js.map +1 -0
  167. package/dist/graph/python-adapter.d.ts +36 -0
  168. package/dist/graph/python-adapter.d.ts.map +1 -0
  169. package/dist/graph/python-adapter.js +402 -0
  170. package/dist/graph/python-adapter.js.map +1 -0
  171. package/dist/graph/python-manifest.d.ts +22 -0
  172. package/dist/graph/python-manifest.d.ts.map +1 -0
  173. package/dist/graph/python-manifest.js +137 -0
  174. package/dist/graph/python-manifest.js.map +1 -0
  175. package/dist/graph/python-stdlib.d.ts +2 -0
  176. package/dist/graph/python-stdlib.d.ts.map +1 -0
  177. package/dist/graph/python-stdlib.js +53 -0
  178. package/dist/graph/python-stdlib.js.map +1 -0
  179. package/dist/graph/ts-morph-adapter.d.ts +65 -0
  180. package/dist/graph/ts-morph-adapter.d.ts.map +1 -0
  181. package/dist/graph/ts-morph-adapter.js +265 -0
  182. package/dist/graph/ts-morph-adapter.js.map +1 -0
  183. package/dist/graph/types.d.ts +37 -0
  184. package/dist/graph/types.d.ts.map +1 -0
  185. package/dist/graph/types.js +50 -0
  186. package/dist/graph/types.js.map +1 -0
  187. package/dist/index.d.ts +45 -0
  188. package/dist/index.d.ts.map +1 -0
  189. package/dist/index.js +51 -0
  190. package/dist/index.js.map +1 -0
  191. package/dist/infra/aws/aws-parse.d.ts +39 -0
  192. package/dist/infra/aws/aws-parse.d.ts.map +1 -0
  193. package/dist/infra/aws/aws-parse.js +149 -0
  194. package/dist/infra/aws/aws-parse.js.map +1 -0
  195. package/dist/infra/aws/aws.d.ts +6 -0
  196. package/dist/infra/aws/aws.d.ts.map +1 -0
  197. package/dist/infra/aws/aws.js +425 -0
  198. package/dist/infra/aws/aws.js.map +1 -0
  199. package/dist/infra/azure/azure-parse.d.ts +73 -0
  200. package/dist/infra/azure/azure-parse.d.ts.map +1 -0
  201. package/dist/infra/azure/azure-parse.js +178 -0
  202. package/dist/infra/azure/azure-parse.js.map +1 -0
  203. package/dist/infra/azure/azure.d.ts +12 -0
  204. package/dist/infra/azure/azure.d.ts.map +1 -0
  205. package/dist/infra/azure/azure.js +673 -0
  206. package/dist/infra/azure/azure.js.map +1 -0
  207. package/dist/infra/cloudflare/cloudflare.d.ts +50 -0
  208. package/dist/infra/cloudflare/cloudflare.d.ts.map +1 -0
  209. package/dist/infra/cloudflare/cloudflare.js +382 -0
  210. package/dist/infra/cloudflare/cloudflare.js.map +1 -0
  211. package/dist/infra/cloudflare/wrangler-parse.d.ts +6 -0
  212. package/dist/infra/cloudflare/wrangler-parse.d.ts.map +1 -0
  213. package/dist/infra/cloudflare/wrangler-parse.js +278 -0
  214. package/dist/infra/cloudflare/wrangler-parse.js.map +1 -0
  215. package/dist/infra/compose/compose-parse.d.ts +24 -0
  216. package/dist/infra/compose/compose-parse.d.ts.map +1 -0
  217. package/dist/infra/compose/compose-parse.js +77 -0
  218. package/dist/infra/compose/compose-parse.js.map +1 -0
  219. package/dist/infra/compose/compose.d.ts +12 -0
  220. package/dist/infra/compose/compose.d.ts.map +1 -0
  221. package/dist/infra/compose/compose.js +201 -0
  222. package/dist/infra/compose/compose.js.map +1 -0
  223. package/dist/infra/convex/convex-parse.d.ts +28 -0
  224. package/dist/infra/convex/convex-parse.d.ts.map +1 -0
  225. package/dist/infra/convex/convex-parse.js +74 -0
  226. package/dist/infra/convex/convex-parse.js.map +1 -0
  227. package/dist/infra/convex/convex.d.ts +18 -0
  228. package/dist/infra/convex/convex.d.ts.map +1 -0
  229. package/dist/infra/convex/convex.js +199 -0
  230. package/dist/infra/convex/convex.js.map +1 -0
  231. package/dist/infra/digitalocean/digitalocean.d.ts +33 -0
  232. package/dist/infra/digitalocean/digitalocean.d.ts.map +1 -0
  233. package/dist/infra/digitalocean/digitalocean.js +204 -0
  234. package/dist/infra/digitalocean/digitalocean.js.map +1 -0
  235. package/dist/infra/firebase/firebase.d.ts +43 -0
  236. package/dist/infra/firebase/firebase.d.ts.map +1 -0
  237. package/dist/infra/firebase/firebase.js +271 -0
  238. package/dist/infra/firebase/firebase.js.map +1 -0
  239. package/dist/infra/fly/fly-parse.d.ts +52 -0
  240. package/dist/infra/fly/fly-parse.d.ts.map +1 -0
  241. package/dist/infra/fly/fly-parse.js +114 -0
  242. package/dist/infra/fly/fly-parse.js.map +1 -0
  243. package/dist/infra/fly/fly.d.ts +15 -0
  244. package/dist/infra/fly/fly.d.ts.map +1 -0
  245. package/dist/infra/fly/fly.js +265 -0
  246. package/dist/infra/fly/fly.js.map +1 -0
  247. package/dist/infra/gcp/gcp-parse.d.ts +24 -0
  248. package/dist/infra/gcp/gcp-parse.d.ts.map +1 -0
  249. package/dist/infra/gcp/gcp-parse.js +123 -0
  250. package/dist/infra/gcp/gcp-parse.js.map +1 -0
  251. package/dist/infra/gcp/gcp.d.ts +10 -0
  252. package/dist/infra/gcp/gcp.d.ts.map +1 -0
  253. package/dist/infra/gcp/gcp.js +502 -0
  254. package/dist/infra/gcp/gcp.js.map +1 -0
  255. package/dist/infra/heroku/heroku-parse.d.ts +33 -0
  256. package/dist/infra/heroku/heroku-parse.d.ts.map +1 -0
  257. package/dist/infra/heroku/heroku-parse.js +63 -0
  258. package/dist/infra/heroku/heroku-parse.js.map +1 -0
  259. package/dist/infra/heroku/heroku.d.ts +24 -0
  260. package/dist/infra/heroku/heroku.d.ts.map +1 -0
  261. package/dist/infra/heroku/heroku.js +253 -0
  262. package/dist/infra/heroku/heroku.js.map +1 -0
  263. package/dist/infra/image-resolve.d.ts +56 -0
  264. package/dist/infra/image-resolve.d.ts.map +1 -0
  265. package/dist/infra/image-resolve.js +229 -0
  266. package/dist/infra/image-resolve.js.map +1 -0
  267. package/dist/infra/infra-step.d.ts +39 -0
  268. package/dist/infra/infra-step.d.ts.map +1 -0
  269. package/dist/infra/infra-step.js +57 -0
  270. package/dist/infra/infra-step.js.map +1 -0
  271. package/dist/infra/k8s/index.d.ts +78 -0
  272. package/dist/infra/k8s/index.d.ts.map +1 -0
  273. package/dist/infra/k8s/index.js +251 -0
  274. package/dist/infra/k8s/index.js.map +1 -0
  275. package/dist/infra/kamal/kamal-parse.d.ts +23 -0
  276. package/dist/infra/kamal/kamal-parse.d.ts.map +1 -0
  277. package/dist/infra/kamal/kamal-parse.js +66 -0
  278. package/dist/infra/kamal/kamal-parse.js.map +1 -0
  279. package/dist/infra/kamal/kamal.d.ts +17 -0
  280. package/dist/infra/kamal/kamal.d.ts.map +1 -0
  281. package/dist/infra/kamal/kamal.js +162 -0
  282. package/dist/infra/kamal/kamal.js.map +1 -0
  283. package/dist/infra/netlify/netlify.d.ts +33 -0
  284. package/dist/infra/netlify/netlify.d.ts.map +1 -0
  285. package/dist/infra/netlify/netlify.js +247 -0
  286. package/dist/infra/netlify/netlify.js.map +1 -0
  287. package/dist/infra/opentofu/opentofu.d.ts +3 -0
  288. package/dist/infra/opentofu/opentofu.d.ts.map +1 -0
  289. package/dist/infra/opentofu/opentofu.js +157 -0
  290. package/dist/infra/opentofu/opentofu.js.map +1 -0
  291. package/dist/infra/pulumi/pulumi-parse.d.ts +60 -0
  292. package/dist/infra/pulumi/pulumi-parse.d.ts.map +1 -0
  293. package/dist/infra/pulumi/pulumi-parse.js +155 -0
  294. package/dist/infra/pulumi/pulumi-parse.js.map +1 -0
  295. package/dist/infra/pulumi/pulumi.d.ts +23 -0
  296. package/dist/infra/pulumi/pulumi.d.ts.map +1 -0
  297. package/dist/infra/pulumi/pulumi.js +260 -0
  298. package/dist/infra/pulumi/pulumi.js.map +1 -0
  299. package/dist/infra/railway/railway-parse.d.ts +54 -0
  300. package/dist/infra/railway/railway-parse.d.ts.map +1 -0
  301. package/dist/infra/railway/railway-parse.js +200 -0
  302. package/dist/infra/railway/railway-parse.js.map +1 -0
  303. package/dist/infra/railway/railway.d.ts +19 -0
  304. package/dist/infra/railway/railway.d.ts.map +1 -0
  305. package/dist/infra/railway/railway.js +397 -0
  306. package/dist/infra/railway/railway.js.map +1 -0
  307. package/dist/infra/register.d.ts +2 -0
  308. package/dist/infra/register.d.ts.map +1 -0
  309. package/dist/infra/register.js +81 -0
  310. package/dist/infra/register.js.map +1 -0
  311. package/dist/infra/registry.d.ts +64 -0
  312. package/dist/infra/registry.d.ts.map +1 -0
  313. package/dist/infra/registry.js +205 -0
  314. package/dist/infra/registry.js.map +1 -0
  315. package/dist/infra/relevance.d.ts +16 -0
  316. package/dist/infra/relevance.d.ts.map +1 -0
  317. package/dist/infra/relevance.js +132 -0
  318. package/dist/infra/relevance.js.map +1 -0
  319. package/dist/infra/render/render-parse.d.ts +76 -0
  320. package/dist/infra/render/render-parse.d.ts.map +1 -0
  321. package/dist/infra/render/render-parse.js +155 -0
  322. package/dist/infra/render/render-parse.js.map +1 -0
  323. package/dist/infra/render/render.d.ts +11 -0
  324. package/dist/infra/render/render.d.ts.map +1 -0
  325. package/dist/infra/render/render.js +303 -0
  326. package/dist/infra/render/render.js.map +1 -0
  327. package/dist/infra/sst/sst-parse.d.ts +25 -0
  328. package/dist/infra/sst/sst-parse.d.ts.map +1 -0
  329. package/dist/infra/sst/sst-parse.js +45 -0
  330. package/dist/infra/sst/sst-parse.js.map +1 -0
  331. package/dist/infra/sst/sst.d.ts +19 -0
  332. package/dist/infra/sst/sst.d.ts.map +1 -0
  333. package/dist/infra/sst/sst.js +236 -0
  334. package/dist/infra/sst/sst.js.map +1 -0
  335. package/dist/infra/supabase/supabase-parse.d.ts +34 -0
  336. package/dist/infra/supabase/supabase-parse.d.ts.map +1 -0
  337. package/dist/infra/supabase/supabase-parse.js +113 -0
  338. package/dist/infra/supabase/supabase-parse.js.map +1 -0
  339. package/dist/infra/supabase/supabase.d.ts +15 -0
  340. package/dist/infra/supabase/supabase.d.ts.map +1 -0
  341. package/dist/infra/supabase/supabase.js +198 -0
  342. package/dist/infra/supabase/supabase.js.map +1 -0
  343. package/dist/infra/terraform/hcl-parse.d.ts +34 -0
  344. package/dist/infra/terraform/hcl-parse.d.ts.map +1 -0
  345. package/dist/infra/terraform/hcl-parse.js +203 -0
  346. package/dist/infra/terraform/hcl-parse.js.map +1 -0
  347. package/dist/infra/terraform/terraform.d.ts +14 -0
  348. package/dist/infra/terraform/terraform.d.ts.map +1 -0
  349. package/dist/infra/terraform/terraform.js +264 -0
  350. package/dist/infra/terraform/terraform.js.map +1 -0
  351. package/dist/infra/types.d.ts +151 -0
  352. package/dist/infra/types.d.ts.map +1 -0
  353. package/dist/infra/types.js +14 -0
  354. package/dist/infra/types.js.map +1 -0
  355. package/dist/infra/vercel/vercel-parse.d.ts +70 -0
  356. package/dist/infra/vercel/vercel-parse.d.ts.map +1 -0
  357. package/dist/infra/vercel/vercel-parse.js +194 -0
  358. package/dist/infra/vercel/vercel-parse.js.map +1 -0
  359. package/dist/infra/vercel/vercel.d.ts +30 -0
  360. package/dist/infra/vercel/vercel.d.ts.map +1 -0
  361. package/dist/infra/vercel/vercel.js +523 -0
  362. package/dist/infra/vercel/vercel.js.map +1 -0
  363. package/dist/infra/walk.d.ts +36 -0
  364. package/dist/infra/walk.d.ts.map +1 -0
  365. package/dist/infra/walk.js +85 -0
  366. package/dist/infra/walk.js.map +1 -0
  367. package/dist/safety.d.ts +13 -0
  368. package/dist/safety.d.ts.map +1 -0
  369. package/dist/safety.js +67 -0
  370. package/dist/safety.js.map +1 -0
  371. package/dist/types.d.ts +47 -0
  372. package/dist/types.d.ts.map +1 -0
  373. package/dist/types.js +111 -0
  374. package/dist/types.js.map +1 -0
  375. package/dist/version.d.ts +2 -0
  376. package/dist/version.d.ts.map +1 -0
  377. package/dist/version.js +35 -0
  378. package/dist/version.js.map +1 -0
  379. package/package.json +65 -0
@@ -0,0 +1,22 @@
1
+ import type { DetectMatch, FrameworkAdapter } from '../types.js';
2
+ /** The deterministic Next.js signal set read from a repo (or workspace package). */
3
+ export interface NextSignals {
4
+ hasNextDep: boolean;
5
+ hasNextConfig: boolean;
6
+ hasAppDir: boolean;
7
+ hasPagesDir: boolean;
8
+ }
9
+ /** Gather the signal set for a single root dir (fs only). */
10
+ export declare function gatherNextSignals(baseDir: string): NextSignals;
11
+ /**
12
+ * Decide Next.js from the signal set. Returns a DetectMatch, or null when the
13
+ * signals are too weak to claim the stack (generic-TS fallthrough intact).
14
+ *
15
+ * SUFFICIENT (match-on-its-own): the `next` dep, OR a next.config.* file — both
16
+ * Next-specific. An app/ or pages/ dir alone is only SUPPORTING (raises
17
+ * confidence) — both names are far too generic to claim the stack on their own.
18
+ */
19
+ export declare function scoreNext(s: NextSignals, rootPath?: string): DetectMatch | null;
20
+ export type NextRole = 'middleware' | 'route-handler' | 'server-action' | 'page' | 'layout' | 'client-component' | 'server-component';
21
+ export declare const nextAdapter: FrameworkAdapter;
22
+ //# sourceMappingURL=next.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../../src/framework/next/next.ts"],"names":[],"mappings":"AAsEA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAOjB,MAAM,aAAa,CAAC;AAKrB,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAQ9D;AAUD;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,SAAK,GAAG,WAAW,GAAG,IAAI,CAyB3E;AAoBD,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,eAAe,GACf,eAAe,GACf,MAAM,GACN,QAAQ,GACR,kBAAkB,GAClB,kBAAkB,CAAC;AAuVvB,eAAO,MAAM,WAAW,EAAE,gBAqCzB,CAAC"}
@@ -0,0 +1,449 @@
1
+ // (Slice 2) — the Next.js FrameworkAdapter DETECTION.
2
+ // the route-segment grouping prior + RSC/client roles + the API/action
3
+ // surface edges (the contribution hooks).
4
+ //
5
+ // DETECTION: decides "is this a Next.js app, and which router (App /
6
+ // Pages)?" from package.json deps + config-file/dir existence — never source
7
+ // content (never-store-source).
8
+ //
9
+ // CONTRIBUTION: a Next app's real structure is route segments + the
10
+ // server/client boundary + its API/action surface — none of which are plain
11
+ // import edges. We recover them with the SHARED file-based-routing convention
12
+ // (routing/next-router.ts, the Next convention) + a static ts-morph scan
13
+ // of the RSC directives (`'use client'` / `'use server'`) + call sites. We read
14
+ // STATICALLY (install-free; never-store-source — read server-side, persist only
15
+ // the derived groups/edges/roles) and contribute in the graph FILE-ID space; the
16
+ // generic contribute-step resolves to MODULE ids.
17
+ //
18
+ // * groupingPrior — one FrameworkGroup per top-level ROUTE SEGMENT (`next:<seg>`)
19
+ // over every file in that segment (page/layout/route + the
20
+ // co-located components/helpers). The contribute-step makes
21
+ // each its own subsystem, AUTHORITATIVE over directory — so a
22
+ // deep `app/dashboard/**` tree renders as ONE "Dashboard"
23
+ // box instead of fragmenting by sub-directory.
24
+ // * roleTags — Page/Layout → frontend · RouteHandler/ServerAction/
25
+ // Middleware → gateway · Client/Server-Component → frontend.
26
+ // The Server↔Client split is carried in `role` (+ `rsc`
27
+ // metadata on routed nodes); NO new Module-kind, NO new verb.
28
+ // * syntheticEdges — `calls` only (8-verb): route nav (from the route tree),
29
+ // client→Server-Action invocation, page→Route-Handler fetch.
30
+ //
31
+ // Dynamic / unresolvable targets (a computed `<Link href>`, an inline
32
+ // function-level `'use server'`) DEGRADE + LOG — no silent caps.
33
+ //
34
+ // Detection signals (manifest + config/dir existence only):
35
+ // * dep: `next` — the authoritative signal
36
+ // * config: next.config.{js,ts,mjs} — Next-specific
37
+ // * router: app/ | src/app/ (App) · pages/ | src/pages/ (Pages)
38
+ //
39
+ // scoreNext is PURE; the adapter gathers the fs signals and calls it.
40
+ import { existsSync } from 'node:fs';
41
+ import { join } from 'node:path';
42
+ import { SyntaxKind, } from 'ts-morph';
43
+ import { addAllSourceFiles, buildExtractionProject, toId, } from '../../graph/ts-morph-adapter.js';
44
+ import { SOURCE_EXTENSIONS } from '../../graph/file-graph.js';
45
+ import { buildHrefResolver, extractNextRouteTree, findNextRouteDirs, nextSegmentKey, walkNextSourceFiles, } from '../routing/index.js';
46
+ import { clampConfidence, existsAny, isDir, readDeps, resolveBase, } from '../detect-util.js';
47
+ const NEXT_CONFIG_NAMES = ['next.config.js', 'next.config.ts', 'next.config.mjs'];
48
+ /** Gather the signal set for a single root dir (fs only). */
49
+ export function gatherNextSignals(baseDir) {
50
+ const deps = readDeps(baseDir);
51
+ return {
52
+ hasNextDep: 'next' in deps,
53
+ hasNextConfig: existsAny(baseDir, NEXT_CONFIG_NAMES),
54
+ hasAppDir: isDir(baseDir, 'app') || isDir(baseDir, 'src/app'),
55
+ hasPagesDir: isDir(baseDir, 'pages') || isDir(baseDir, 'src/pages'),
56
+ };
57
+ }
58
+ /** App-router / Pages-router / both / unknown, for the metadata + log variant. */
59
+ function routerOf(s) {
60
+ if (s.hasAppDir && s.hasPagesDir)
61
+ return 'app+pages';
62
+ if (s.hasAppDir)
63
+ return 'app';
64
+ if (s.hasPagesDir)
65
+ return 'pages';
66
+ return 'unknown';
67
+ }
68
+ /**
69
+ * Decide Next.js from the signal set. Returns a DetectMatch, or null when the
70
+ * signals are too weak to claim the stack (generic-TS fallthrough intact).
71
+ *
72
+ * SUFFICIENT (match-on-its-own): the `next` dep, OR a next.config.* file — both
73
+ * Next-specific. An app/ or pages/ dir alone is only SUPPORTING (raises
74
+ * confidence) — both names are far too generic to claim the stack on their own.
75
+ */
76
+ export function scoreNext(s, rootPath = '') {
77
+ if (!s.hasNextDep && !s.hasNextConfig)
78
+ return null;
79
+ let confidence = 0;
80
+ if (s.hasNextDep)
81
+ confidence += 0.6;
82
+ if (s.hasNextConfig)
83
+ confidence += 0.3;
84
+ if (s.hasAppDir)
85
+ confidence += 0.1;
86
+ if (s.hasPagesDir)
87
+ confidence += 0.1;
88
+ const router = routerOf(s);
89
+ return {
90
+ adapter: 'next',
91
+ confidence: clampConfidence(confidence),
92
+ rootPath,
93
+ metadata: {
94
+ variant: router,
95
+ router,
96
+ signals: {
97
+ nextDep: s.hasNextDep,
98
+ nextConfig: s.hasNextConfig,
99
+ appDir: s.hasAppDir,
100
+ pagesDir: s.hasPagesDir,
101
+ },
102
+ },
103
+ };
104
+ }
105
+ const ROLE_PRIORITY = {
106
+ middleware: 7,
107
+ 'route-handler': 6,
108
+ 'server-action': 5,
109
+ page: 4,
110
+ layout: 3,
111
+ 'client-component': 2,
112
+ 'server-component': 1,
113
+ };
114
+ const ROLE_KIND = {
115
+ middleware: 'gateway',
116
+ 'route-handler': 'gateway',
117
+ 'server-action': 'gateway',
118
+ page: 'frontend',
119
+ layout: 'frontend',
120
+ 'client-component': 'frontend',
121
+ 'server-component': 'frontend',
122
+ };
123
+ // The route-tree RouteRole → the adapter's base NextRole.
124
+ const ROUTE_ROLE_TO_NEXT = {
125
+ page: 'page',
126
+ layout: 'layout',
127
+ endpoint: 'route-handler',
128
+ route: 'page', // generic routable — Next never emits it; map defensively
129
+ };
130
+ const SOURCE_EXT_SET = new Set(SOURCE_EXTENSIONS);
131
+ const MIDDLEWARE_NAMES = ['middleware.ts', 'middleware.js', 'middleware.tsx', 'middleware.jsx'];
132
+ // Memoized on the FrameworkContext OBJECT (not repoDir) so groupingPrior +
133
+ // syntheticEdges + roleTags share ONE analysis, while the merge walk's
134
+ // per-checkpoint ctx (same clone.dir, different tree) gets a fresh one — no
135
+ // cross-tree staleness. Mirrors the Nest / RN adapters.
136
+ const ANALYSIS_CACHE = new WeakMap();
137
+ // ---------------------------------------------------------------------------
138
+ // Static helpers (install-free, deterministic).
139
+ function inScope(fileId, rootPath) {
140
+ if (rootPath === '')
141
+ return true;
142
+ return fileId === rootPath || fileId.startsWith(`${rootPath}/`);
143
+ }
144
+ function under(fileId, rootId) {
145
+ return fileId === rootId || fileId.startsWith(`${rootId}/`);
146
+ }
147
+ // Deterministic slug (camelCase → kebab, drop non-alnum).
148
+ function slugify(s) {
149
+ return s
150
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
151
+ .toLowerCase()
152
+ .replace(/[^a-z0-9]+/g, '-')
153
+ .replace(/^-+|-+$/g, '');
154
+ }
155
+ // Humanize a route segment into a subsystem label: drop dynamic/group brackets,
156
+ // split on separators, title-case ('blog' → 'Blog', '[slug]' → 'Slug').
157
+ function humanizeSegment(seg) {
158
+ const base = seg.replace(/[[\]().]/g, '').replace(/^\.\.\.|^\.\.|^\./, '');
159
+ const words = base
160
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
161
+ .replace(/[_-]+/g, ' ')
162
+ .trim()
163
+ .split(/\s+/)
164
+ .filter(Boolean);
165
+ if (words.length === 0)
166
+ return seg || 'Home';
167
+ return words.map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
168
+ }
169
+ // The module's directive: a top-of-module 'use client' / 'use server' is a
170
+ // directive prologue (the FIRST statement, comments aside — getStatements skips
171
+ // comments). Returns 'client' | 'server' | null.
172
+ function moduleDirective(sf) {
173
+ const first = sf.getStatements()[0];
174
+ if (!first || first.getKind() !== SyntaxKind.ExpressionStatement)
175
+ return null;
176
+ const expr = first.getExpression?.();
177
+ if (!expr || expr.getKind() !== SyntaxKind.StringLiteral)
178
+ return null;
179
+ const v = expr.getLiteralValue();
180
+ if (v === 'use client')
181
+ return 'client';
182
+ if (v === 'use server')
183
+ return 'server';
184
+ return null;
185
+ }
186
+ // Count function-level 'use server' directives (inline server actions) — a
187
+ // 'use server' string-literal expression statement whose parent is NOT the
188
+ // SourceFile (it sits inside a function/arrow body). These can't be statically
189
+ // linked across the client/server prop boundary → degrade + log.
190
+ function countInlineServerActions(sf) {
191
+ let n = 0;
192
+ for (const es of sf.getDescendantsOfKind(SyntaxKind.ExpressionStatement)) {
193
+ const expr = es.getExpression();
194
+ if (expr.getKind() !== SyntaxKind.StringLiteral)
195
+ continue;
196
+ if (expr.getLiteralValue() !== 'use server')
197
+ continue;
198
+ if (es.getParent()?.getKind() !== SyntaxKind.SourceFile)
199
+ n++;
200
+ }
201
+ return n;
202
+ }
203
+ function hasJsx(sf) {
204
+ return (sf.getFirstDescendantByKind(SyntaxKind.JsxElement) !== undefined ||
205
+ sf.getFirstDescendantByKind(SyntaxKind.JsxSelfClosingElement) !== undefined ||
206
+ sf.getFirstDescendantByKind(SyntaxKind.JsxFragment) !== undefined);
207
+ }
208
+ // Resolved INTERNAL import target file ids of one source file (install-free —
209
+ // getModuleSpecifierSourceFile is null for a bare external specifier).
210
+ function resolvedImports(sf, repoDir) {
211
+ const out = [];
212
+ for (const decl of sf.getImportDeclarations()) {
213
+ const resolved = decl.getModuleSpecifierSourceFile();
214
+ if (resolved)
215
+ out.push(toId(repoDir, resolved.getFilePath()));
216
+ }
217
+ return out;
218
+ }
219
+ // `fetch('/path')` string-literal arguments in one source file.
220
+ function collectFetchTargets(sf) {
221
+ const out = [];
222
+ for (const call of sf.getDescendantsOfKind(SyntaxKind.CallExpression)) {
223
+ const callee = call.getExpression();
224
+ // `fetch(…)` (global) — a `.fetch(…)` method call is out of scope.
225
+ if (callee.getKind() !== SyntaxKind.Identifier || callee.getText() !== 'fetch')
226
+ continue;
227
+ const arg = call.getArguments()[0];
228
+ if (arg && arg.getKind() === SyntaxKind.StringLiteral)
229
+ out.push(arg.getLiteralValue());
230
+ }
231
+ return out;
232
+ }
233
+ function keepHigher(map, fileId, role) {
234
+ const cur = map.get(fileId);
235
+ if (cur === undefined ||
236
+ ROLE_PRIORITY[role] > ROLE_PRIORITY[cur] ||
237
+ (ROLE_PRIORITY[role] === ROLE_PRIORITY[cur] && role < cur)) {
238
+ map.set(fileId, role);
239
+ }
240
+ }
241
+ function addEdge(edges, from, to, relation) {
242
+ if (from === to)
243
+ return; // intra-file collapses; the step drops self-edges too
244
+ const key = `${from}→${to}`;
245
+ if (!edges.has(key)) {
246
+ edges.set(key, { source: from, target: to, kind: 'calls', metadata: { framework: 'next', relation } });
247
+ }
248
+ }
249
+ // ---------------------------------------------------------------------------
250
+ // The full analysis.
251
+ function analyzeNext(ctx) {
252
+ const { repoDir, rootPath } = ctx;
253
+ // The in-scope base dir (a workspace package when rootPath is set).
254
+ const base = rootPath ? join(repoDir, rootPath) : repoDir;
255
+ const { appDirAbs, pagesDirAbs } = findNextRouteDirs(repoDir, rootPath);
256
+ const appRootId = appDirAbs ? toId(repoDir, appDirAbs) : null;
257
+ // --- the shared routing convention (route nodes + nav edges) -------------
258
+ const tree = extractNextRouteTree({ repoDir, rootPath });
259
+ const routeRoleByFile = new Map();
260
+ for (const node of tree?.routes ?? [])
261
+ routeRoleByFile.set(node.fileId, node);
262
+ // --- static directive / call-site scan over every in-scope source file ----
263
+ // Glob only the in-scope `base` (not the whole repo) so a per-package fan-out
264
+ // doesn't parse a whole monorepo per Next package; the project root
265
+ // stays `repoDir` so tsconfig path/baseUrl resolution + the repo-relative file
266
+ // ids are unchanged. `inScope` stays as a defensive filter.
267
+ const project = buildExtractionProject(repoDir);
268
+ addAllSourceFiles(project, base);
269
+ const fileById = new Map();
270
+ for (const sf of project.getSourceFiles()) {
271
+ const id = toId(repoDir, sf.getFilePath());
272
+ if (inScope(id, rootPath))
273
+ fileById.set(id, sf);
274
+ }
275
+ const directiveByFile = new Map();
276
+ let inlineServerActions = 0;
277
+ for (const [fileId, sf] of fileById) {
278
+ const dir = moduleDirective(sf);
279
+ if (dir)
280
+ directiveByFile.set(fileId, dir);
281
+ inlineServerActions += countInlineServerActions(sf);
282
+ }
283
+ // --- roles ---------------------------------------------------------------
284
+ const roleByFile = new Map();
285
+ // (1) route-tree structural roles (page / layout / route-handler).
286
+ for (const [fileId, node] of routeRoleByFile) {
287
+ keepHigher(roleByFile, fileId, ROUTE_ROLE_TO_NEXT[node.role] ?? 'page');
288
+ }
289
+ // (2) middleware.{ts,js} at the route base (root or src/).
290
+ for (const cand of MIDDLEWARE_NAMES) {
291
+ for (const sub of ['', 'src']) {
292
+ const abs = join(base, sub, cand);
293
+ if (existsSync(abs))
294
+ keepHigher(roleByFile, toId(repoDir, abs), 'middleware');
295
+ }
296
+ }
297
+ // (3) RSC directives. A module-level 'use server' is a server-actions module;
298
+ // 'use client' marks the client side of the boundary. A server component
299
+ // is the app/-dir default (a JSX component without an explicit directive).
300
+ for (const [fileId, sf] of fileById) {
301
+ const dir = directiveByFile.get(fileId);
302
+ if (dir === 'server')
303
+ keepHigher(roleByFile, fileId, 'server-action');
304
+ else if (dir === 'client')
305
+ keepHigher(roleByFile, fileId, 'client-component');
306
+ else if (appRootId && under(fileId, appRootId) && hasJsx(sf)) {
307
+ keepHigher(roleByFile, fileId, 'server-component');
308
+ }
309
+ }
310
+ // Materialize role tags (carry rsc on routed nodes for the server/client read).
311
+ const roles = new Map();
312
+ for (const [fileId, role] of roleByFile) {
313
+ const node = routeRoleByFile.get(fileId);
314
+ const dir = directiveByFile.get(fileId);
315
+ const metadata = { framework: 'next' };
316
+ if (node) {
317
+ metadata.routePath = node.routePath;
318
+ if (node.parentFileId !== undefined)
319
+ metadata.parentFileId = node.parentFileId;
320
+ }
321
+ // RSC side: an explicit directive wins; else app/ defaults to server.
322
+ if (dir === 'client' || role === 'client-component')
323
+ metadata.rsc = 'client';
324
+ else if (dir === 'server')
325
+ metadata.rsc = 'server';
326
+ else if (appRootId && under(fileId, appRootId))
327
+ metadata.rsc = 'server';
328
+ roles.set(fileId, { role, kind: ROLE_KIND[role], priority: ROLE_PRIORITY[role], metadata });
329
+ }
330
+ // --- edges (kind 'calls' only) -------------------------------------------
331
+ const edges = new Map();
332
+ // (a) route navigation (from the shared route tree).
333
+ for (const e of tree?.navEdges ?? [])
334
+ addEdge(edges, e.fromFileId, e.toFileId, 'navigation');
335
+ // (b) client → Server-Action invocation: a 'use client' file that imports a
336
+ // module-level 'use server' actions module is invoking it across the RPC
337
+ // boundary. Import resolution IS the static evidence (you only import an
338
+ // action to call it).
339
+ for (const [fileId, sf] of fileById) {
340
+ if (directiveByFile.get(fileId) !== 'client')
341
+ continue;
342
+ for (const target of resolvedImports(sf, repoDir)) {
343
+ if (directiveByFile.get(target) === 'server')
344
+ addEdge(edges, fileId, target, 'server-action');
345
+ }
346
+ }
347
+ // (c) page → Route-Handler fetch: a statically-resolvable `fetch('/api/…')`
348
+ // whose path matches an endpoint route. Build a resolver over the endpoint
349
+ // nodes (relabelled `page` so the shared resolver — which only resolves
350
+ // page/route — includes them).
351
+ const endpoints = (tree?.routes ?? []).filter((r) => r.role === 'endpoint');
352
+ if (endpoints.length > 0) {
353
+ const resolveEndpoint = buildHrefResolver(endpoints.map((r) => ({ ...r, role: 'page' })));
354
+ for (const [fileId, sf] of fileById) {
355
+ for (const href of collectFetchTargets(sf)) {
356
+ const target = resolveEndpoint(href);
357
+ if (target)
358
+ addEdge(edges, fileId, target, 'route-handler-fetch');
359
+ }
360
+ }
361
+ }
362
+ // --- grouping prior (route segment → group) ------------------------------
363
+ const groups = buildSegmentGroups(repoDir, appDirAbs, pagesDirAbs);
364
+ // Deterministic edge ordering.
365
+ const sortedEdges = [...edges.values()].sort((a, b) => a.source < b.source ? -1 : a.source > b.source ? 1 : a.target < b.target ? -1 : a.target > b.target ? 1 : 0);
366
+ // Positive signal for validation.
367
+ if (groups.length > 0 || roles.size > 0) {
368
+ console.log(` [next] ${tree?.routes.length ?? 0} route(s) → ${groups.length} segment group(s) · ${roles.size} role(s) · ${sortedEdges.length} edge(s)`);
369
+ }
370
+ // No silent caps: inline (function-level) server actions can't be statically
371
+ // linked across the client/server prop boundary.
372
+ if (inlineServerActions > 0) {
373
+ console.log(` [next] degraded: ${inlineServerActions} inline (function-level) server action(s) not statically linkable (logged, not silently dropped)`);
374
+ }
375
+ return { groups, edges: sortedEdges, roles };
376
+ }
377
+ // Build one FrameworkGroup per top-level route segment over EVERY file in the
378
+ // segment (page/layout/route + co-located components/helpers). App + Pages share
379
+ // the URL namespace, so a segment present in both (e.g. `api`) MERGES into one
380
+ // group. Deterministic id (path-slug, never an index) + sorted file ids.
381
+ function buildSegmentGroups(repoDir, appDirAbs, pagesDirAbs) {
382
+ const byId = new Map();
383
+ const add = (dirAbs, router) => {
384
+ if (!dirAbs)
385
+ return;
386
+ const rootId = toId(repoDir, dirAbs);
387
+ for (const fileId of walkNextSourceFiles(dirAbs, repoDir)) {
388
+ const relToRoot = fileId.slice(rootId.length + 1);
389
+ const key = nextSegmentKey(relToRoot, router);
390
+ const id = slugify(key) || 'root';
391
+ const label = key === '' ? 'Home' : humanizeSegment(key);
392
+ let g = byId.get(id);
393
+ if (!g) {
394
+ g = { label, files: new Set() };
395
+ byId.set(id, g);
396
+ }
397
+ g.files.add(fileId);
398
+ }
399
+ };
400
+ add(appDirAbs, 'app');
401
+ add(pagesDirAbs, 'pages');
402
+ return [...byId.entries()]
403
+ .map(([id, g]) => ({ id, label: g.label, fileIds: [...g.files].sort() }))
404
+ .sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
405
+ }
406
+ function getAnalysis(ctx) {
407
+ let a = ANALYSIS_CACHE.get(ctx);
408
+ if (!a) {
409
+ a = analyzeNext(ctx);
410
+ ANALYSIS_CACHE.set(ctx, a);
411
+ }
412
+ return a;
413
+ }
414
+ // ---------------------------------------------------------------------------
415
+ // The adapter.
416
+ export const nextAdapter = {
417
+ name: 'next',
418
+ async detect(ctx) {
419
+ const { base, rootPath } = resolveBase(ctx);
420
+ return scoreNext(gatherNextSignals(base), rootPath);
421
+ },
422
+ // one grouping prior per top-level route segment. The contribute-step
423
+ // makes each its own subsystem, AUTHORITATIVE over directory. No
424
+ // classificationsNeeded: segments are deterministic from the path (nothing to
425
+ // defer to the LLM classifier).
426
+ async groupingPrior(ctx) {
427
+ return { groups: getAnalysis(ctx).groups };
428
+ },
429
+ // route nav + client→server-action + page→route-handler fetch (file-id
430
+ // space; the step resolves to modules, drops self-edges, dedupes, 8-verb-validates).
431
+ // kind 'calls' only.
432
+ async syntheticEdges(ctx) {
433
+ return getAnalysis(ctx).edges;
434
+ },
435
+ // Page/Layout/Client/Server-Component → frontend; RouteHandler/
436
+ // ServerAction/Middleware → gateway. METADATA; the module's `kind` is unchanged.
437
+ async roleTags(ctx) {
438
+ return getAnalysis(ctx).roles;
439
+ },
440
+ // The hooks READ SOURCE ('use client'/'use server' directives, <Link href>,
441
+ // fetch()/redirect() call sites), so declare the source paths the diff-driven
442
+ // hosted walk must treat as framework-relevant. Never-store-source holds: read
443
+ // server-side, persist only the derived groups/edges/roles.
444
+ scansSourcePath(path) {
445
+ const ext = path.split('.').pop();
446
+ return ext !== undefined && SOURCE_EXT_SET.has(ext);
447
+ },
448
+ };
449
+ //# sourceMappingURL=next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../../../src/framework/next/next.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { DetectMatch, FrameworkAdapter } from '../types.js';
2
+ declare const NODE_FRAMEWORKS: readonly ["express", "fastify", "koa", "hono"];
3
+ export type NodeFramework = (typeof NODE_FRAMEWORKS)[number];
4
+ /** The deterministic Node-backend signal set: which server framework deps are present. */
5
+ export interface NodeSignals {
6
+ /** Matched server-framework deps, in NODE_FRAMEWORKS priority order. */
7
+ frameworks: NodeFramework[];
8
+ }
9
+ /** Gather the signal set for a single root dir (fs only). */
10
+ export declare function gatherNodeSignals(baseDir: string): NodeSignals;
11
+ /**
12
+ * Decide Node-backend from the signal set. Returns a DetectMatch, or null when
13
+ * no server-framework dep is present (generic-TS fallthrough intact).
14
+ *
15
+ * Each server-framework dep is SUFFICIENT (authoritative). A single dep scores
16
+ * the base confidence; co-present frameworks (a repo mounting more than one)
17
+ * nudge it up — there's no config file to corroborate, so deps are the whole
18
+ * rubric. `variant` is the priority-primary framework; `frameworks` lists all.
19
+ */
20
+ export declare function scoreNode(s: NodeSignals, rootPath?: string): DetectMatch | null;
21
+ export type NodeRole = 'entrypoint' | 'route-handler' | 'controller' | 'middleware' | 'service';
22
+ export declare const nodeAdapter: FrameworkAdapter;
23
+ export {};
24
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/framework/node/node.ts"],"names":[],"mappings":"AAwDA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAOjB,MAAM,aAAa,CAAC;AAMrB,QAAA,MAAM,eAAe,gDAAiD,CAAC;AACvE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,0FAA0F;AAC1F,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAG9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,SAAK,GAAG,WAAW,GAAG,IAAI,CAa3E;AAsBD,MAAM,MAAM,QAAQ,GAAG,YAAY,GAAG,eAAe,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC;AA+9BhG,eAAO,MAAM,WAAW,EAAE,gBAqCzB,CAAC"}