@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,17 @@
1
+ import type { DetectMatch, FrameworkAdapter } from '../types.js';
2
+ /** The deterministic Litestar signal set (dependency names only). */
3
+ export interface LitestarSignals {
4
+ hasLitestar: boolean;
5
+ hasLitestarPlugin: boolean;
6
+ }
7
+ /** Gather the signal set for a single root dir (reads manifests only). */
8
+ export declare function gatherLitestarSignals(baseDir: string): LitestarSignals;
9
+ /**
10
+ * Decide Litestar from the signal set. `litestar` is REQUIRED; a `litestar-*`
11
+ * plugin raises confidence. Returns null → generic-Python fallthrough,
12
+ * byte-for-byte unchanged.
13
+ */
14
+ export declare function scoreLitestar(s: LitestarSignals, rootPath?: string): DetectMatch | null;
15
+ export type LitestarRole = 'app' | 'controller' | 'route-handler' | 'provider';
16
+ export declare const litestarAdapter: FrameworkAdapter;
17
+ //# sourceMappingURL=litestar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"litestar.d.ts","sourceRoot":"","sources":["../../../src/framework/litestar/litestar.ts"],"names":[],"mappings":"AAmEA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAOjB,MAAM,aAAa,CAAC;AAMrB,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAStE;AA6CD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,SAAK,GAAG,WAAW,GAAG,IAAI,CAYnF;AAMD,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,eAAe,GAAG,UAAU,CAAC;AAqc/E,eAAO,MAAM,eAAe,EAAE,gBA+C7B,CAAC"}
@@ -0,0 +1,536 @@
1
+ // the Litestar FrameworkAdapter. Net-new adapter following the FastAPI
2
+ // template, reusing the shared Python core (py-ast +
3
+ // parsePythonScope). Litestar's request surface is shaped very much like FastAPI's
4
+ // (module-level handlers + routers + an app object), but with three structural
5
+ // differences this adapter accounts for:
6
+ //
7
+ // * Route decorators are BARE imported functions (`from litestar import get`;
8
+ // `@get("/")`), not methods on a router object (FastAPI's `@router.get`), so
9
+ // handler detection keys off the decorator's imported-from-litestar identity.
10
+ // * Controllers are CLASSES (`class UserController(Controller)`) whose methods
11
+ // are the handlers — read via py-ast's shared class primitives (`classes` +
12
+ // `classBaseChains`, established by the ORM entity pass ).
13
+ // * Registration is by constructor list (`Litestar(route_handlers=[…])` /
14
+ // `Router(route_handlers=[…])`) or `.register(…)`, and dependency injection is
15
+ // layered (`dependencies={"x": Provide(fn)}` on the app / router / controller
16
+ // / handler) — both wirings the import graph doesn't name as verbs.
17
+ //
18
+ // All read STATICALLY (install-free, never-store-source — a pure syntactic Pyright
19
+ // parse; never executes repo code), persisting only the derived groups/edges/roles:
20
+ //
21
+ // * detect() — the `litestar` dependency (a `litestar-*` plugin raises
22
+ // confidence); shallow nested scan for a `backend/`|`server/`
23
+ // package (mirrors FastAPI's ).
24
+ // * groupingPrior — one FrameworkGroup per Controller and per Router → its own
25
+ // subsystem, authoritative over directory grouping (the
26
+ // FastAPI router / Nest @Module mechanism): the contribute-
27
+ // step makes each group its own subsystem.
28
+ // * syntheticEdges — `Litestar(route_handlers=[…])` / `Router(route_handlers=[…])`
29
+ // mounting + `.register(…)` (kind 'calls'), and layered
30
+ // `Provide(fn)` DI → consumer→provider (kind 'calls'). File-id
31
+ // endpoints; same-file wiring collapses (it's the role, not
32
+ // an edge).
33
+ // * roleTags — Litestar app + Controller subclass + `@get`/`@post`/… route
34
+ // handlers → `gateway`; a DI provider function → `service`.
35
+ // METADATA onto the LOCKED MODULE_KINDS enum; never a new kind
36
+ // (only `role` renders).
37
+ //
38
+ // Unresolvable registration / Provide targets DEGRADE + LOG — no silent caps.
39
+ import { existsSync, readdirSync } from 'node:fs';
40
+ import { join } from 'node:path';
41
+ import { clampConfidence, resolveBase } from '../detect-util.js';
42
+ import { readPythonDeps } from '../../graph/python-manifest.js';
43
+ import { parsePythonScope } from '../python/analyze.js';
44
+ import { callCallee, classAttr, classAttrString, classBaseChains, firstListString, keywordArg, listItems, memberChain, nameValue, positionalArgs, stringValue, PN, } from '../python/py-ast.js';
45
+ /** Gather the signal set for a single root dir (reads manifests only). */
46
+ export function gatherLitestarSignals(baseDir) {
47
+ const deps = readPythonDeps(baseDir);
48
+ return {
49
+ hasLitestar: deps.has('litestar'),
50
+ // A `litestar-*` plugin is a strong secondary signal that this really is a
51
+ // Litestar app (vs. `litestar` pulled in transitively). ASGI servers
52
+ // (uvicorn/granian/hypercorn) are SHARED with FastAPI, so they're not a signal.
53
+ hasLitestarPlugin: [...deps].some((d) => d.startsWith('litestar-')),
54
+ };
55
+ }
56
+ // Non-source dirs the nested scan skips (cheap + can't hold a first-party manifest).
57
+ const NESTED_SKIP_DIRS = new Set([
58
+ 'node_modules',
59
+ 'dist',
60
+ 'build',
61
+ 'out',
62
+ 'coverage',
63
+ 'venv',
64
+ '.venv',
65
+ '__pycache__',
66
+ 'site-packages',
67
+ ]);
68
+ /** True if `dir` holds a Python manifest worth scanning for deps. */
69
+ function hasPythonManifest(dir) {
70
+ return (existsSync(join(dir, 'pyproject.toml')) ||
71
+ existsSync(join(dir, 'setup.py')) ||
72
+ existsSync(join(dir, 'setup.cfg')) ||
73
+ existsSync(join(dir, 'requirements.txt')));
74
+ }
75
+ /**
76
+ * Immediate subdirs (depth 1) that contain a Python manifest — the shallow search
77
+ * for a nested Litestar backend (`backend/` | `server/` | `api/`). Sorted, so the
78
+ * first-match pick is deterministic; skips dot-dirs + non-source dirs to stay cheap.
79
+ */
80
+ function shallowManifestSubdirs(base) {
81
+ let entries;
82
+ try {
83
+ entries = readdirSync(base, { withFileTypes: true });
84
+ }
85
+ catch {
86
+ return [];
87
+ }
88
+ const out = [];
89
+ for (const e of entries) {
90
+ if (!e.isDirectory() || e.name.startsWith('.') || NESTED_SKIP_DIRS.has(e.name))
91
+ continue;
92
+ if (hasPythonManifest(join(base, e.name)))
93
+ out.push(e.name);
94
+ }
95
+ return out.sort();
96
+ }
97
+ /**
98
+ * Decide Litestar from the signal set. `litestar` is REQUIRED; a `litestar-*`
99
+ * plugin raises confidence. Returns null → generic-Python fallthrough,
100
+ * byte-for-byte unchanged.
101
+ */
102
+ export function scoreLitestar(s, rootPath = '') {
103
+ if (!s.hasLitestar)
104
+ return null;
105
+ let confidence = 0.8;
106
+ if (s.hasLitestarPlugin)
107
+ confidence += 0.1;
108
+ return {
109
+ adapter: 'litestar',
110
+ confidence: clampConfidence(confidence),
111
+ rootPath,
112
+ metadata: {
113
+ signals: { litestar: s.hasLitestar, litestarPlugin: s.hasLitestarPlugin },
114
+ },
115
+ };
116
+ }
117
+ // Collapse priority when one FILE carries several roles, AND downstream when
118
+ // several files of different roles land in one module. app (the Litestar entry)
119
+ // outranks a Controller (a class that declares a domain's handlers) outranks a
120
+ // bare function-based route-handler; a DI provider is the lowest (a service, not
121
+ // a request entry). A file defining a Controller reads as `controller` even if it
122
+ // also holds a loose provider fn — the more informative request-surface label.
123
+ const ROLE_PRIORITY = {
124
+ app: 8,
125
+ controller: 7,
126
+ 'route-handler': 6,
127
+ provider: 5,
128
+ };
129
+ const ROLE_KIND = {
130
+ app: 'gateway',
131
+ controller: 'gateway',
132
+ 'route-handler': 'gateway',
133
+ provider: 'service',
134
+ };
135
+ // Litestar HTTP/websocket handler decorators (imported from `litestar` /
136
+ // `litestar.handlers`), used bare: `@get("/")`, `@route(...)`, `@websocket(...)`.
137
+ const HANDLER_DECORATORS = new Set([
138
+ 'get',
139
+ 'post',
140
+ 'put',
141
+ 'patch',
142
+ 'delete',
143
+ 'head',
144
+ 'options',
145
+ 'route',
146
+ 'websocket',
147
+ 'asgi',
148
+ ]);
149
+ // Memoized on the FrameworkContext OBJECT (not repoDir) so groupingPrior +
150
+ // syntheticEdges + roleTags share ONE parse, while the merge walk's per-checkpoint
151
+ // ctx gets a fresh analysis — no cross-tree staleness. Mirrors fastapi / flask / nest.
152
+ const ANALYSIS_CACHE = new WeakMap();
153
+ function slugify(s) {
154
+ return s
155
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
156
+ .toLowerCase()
157
+ .replace(/[^a-z0-9]+/g, '-')
158
+ .replace(/^-+|-+$/g, '');
159
+ }
160
+ function humanize(s) {
161
+ const words = s
162
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
163
+ .replace(/[_\-.]+/g, ' ')
164
+ .trim()
165
+ .split(/\s+/)
166
+ .filter(Boolean);
167
+ if (words.length === 0)
168
+ return s;
169
+ return words.map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
170
+ }
171
+ function baseName(fileId) {
172
+ const last = fileId.split('/').pop() ?? fileId;
173
+ return last.replace(/\.[^.]+$/, '');
174
+ }
175
+ function dirSegment(fileId) {
176
+ const slash = fileId.indexOf('/');
177
+ return slash > 0 ? slugify(fileId.slice(0, slash)) : 'root';
178
+ }
179
+ // Generic URL prefix segments that aren't a domain name (a leading `/api`,
180
+ // `/v1`, …). Skipped only on a MULTI-segment path, so a bare `path="/api"`
181
+ // (where 'api' IS the name) is preserved.
182
+ const GENERIC_PATH_SEGMENTS = new Set(['api']);
183
+ const isVersionSegment = (s) => /^v\d+$/.test(s);
184
+ // A URL path → a clean domain-name segment (`/api/tags/{id}` → 'tags',
185
+ // `/api` → 'api', `/` → undefined). Drops empty + parameter segments; on a
186
+ // multi-segment path also skips a leading generic/version prefix, so the domain
187
+ // segment wins over a common `/api` mount prefix.
188
+ function pathName(path) {
189
+ if (!path)
190
+ return undefined;
191
+ const segs = path.split('/').filter((s) => s && !s.startsWith('{') && !s.startsWith(':'));
192
+ if (segs.length === 0)
193
+ return undefined;
194
+ if (segs.length === 1)
195
+ return segs[0];
196
+ const meaningful = segs.find((s) => !GENERIC_PATH_SEGMENTS.has(s) && !isVersionSegment(s));
197
+ return meaningful ?? segs[segs.length - 1];
198
+ }
199
+ // Keep the highest-priority candidate role per file (deterministic, lexical
200
+ // tiebreak) — mirrors the fastapi/flask/nest addRole + the contribute-step collapse.
201
+ function addRole(map, fileId, role) {
202
+ const cur = map.get(fileId);
203
+ if (cur === undefined ||
204
+ ROLE_PRIORITY[role] > ROLE_PRIORITY[cur] ||
205
+ (ROLE_PRIORITY[role] === ROLE_PRIORITY[cur] && role < cur)) {
206
+ map.set(fileId, role);
207
+ }
208
+ }
209
+ function addEdge(edges, from, to, kind, relation) {
210
+ if (from === to)
211
+ return; // intra-file wiring collapses; the step drops self-edges too
212
+ const key = `${from}→${to}:${kind}`;
213
+ if (!edges.has(key)) {
214
+ edges.set(key, { source: from, target: to, kind, metadata: { framework: 'litestar', relation } });
215
+ }
216
+ }
217
+ // A dotted-name chain's canonical litestar symbol, or undefined (`get` via
218
+ // `from litestar import get`; `litestar.Controller` via `import litestar`).
219
+ function litestarCanonical(chain, imports) {
220
+ if (!chain)
221
+ return undefined;
222
+ if (chain.path.length === 0)
223
+ return imports.names.get(chain.root);
224
+ if (chain.path.length === 1 && imports.moduleAliases.has(chain.root))
225
+ return chain.path[0];
226
+ return undefined;
227
+ }
228
+ function collectLitestarImports(nodes) {
229
+ const names = new Map();
230
+ const moduleAliases = new Set();
231
+ for (const imp of nodes.imports) {
232
+ if (imp.nodeType === PN.ImportFrom) {
233
+ const from = imp;
234
+ if (from.d.module.d.leadingDots !== 0)
235
+ continue; // relative import — not the litestar pkg
236
+ const parts = from.d.module.d.nameParts.map((p) => p.d.value);
237
+ if (parts[0] !== 'litestar')
238
+ continue; // litestar / litestar.di / litestar.handlers …
239
+ for (const spec of from.d.imports) {
240
+ const imported = spec.d.name.d.value;
241
+ const local = spec.d.alias ? spec.d.alias.d.value : imported;
242
+ names.set(local, imported);
243
+ }
244
+ }
245
+ else if (imp.nodeType === PN.Import) {
246
+ const node = imp;
247
+ for (const entry of node.d.list) {
248
+ const parts = entry.d.module.d.nameParts.map((p) => p.d.value);
249
+ if (parts[0] !== 'litestar')
250
+ continue;
251
+ const local = entry.d.alias ? entry.d.alias.d.value : parts[0];
252
+ moduleAliases.add(local);
253
+ }
254
+ }
255
+ }
256
+ return { names, moduleAliases };
257
+ }
258
+ // The ctor name of an `x = Ctor(...)` RHS, resolved to its canonical litestar
259
+ // symbol (`Litestar` / `Router`), or undefined if the RHS isn't a litestar ctor.
260
+ function litestarCtor(rhs, imports) {
261
+ if (rhs.nodeType !== PN.Call)
262
+ return undefined;
263
+ return litestarCanonical(callCallee(rhs), imports);
264
+ }
265
+ // A decorator's callee chain (`@get(...)` → root 'get', path []; `@litestar.get(...)`
266
+ // → root 'litestar', path ['get']). The decorator expr is a call (route decorators
267
+ // are always called) or a bare name/attribute.
268
+ function decoratorChain(deco) {
269
+ const expr = deco.d.expr;
270
+ if (expr.nodeType === PN.Call)
271
+ return callCallee(expr);
272
+ return memberChain(expr);
273
+ }
274
+ function assignUnitGroups(seeds) {
275
+ const taken = new Set();
276
+ const byFileId = [...seeds].sort((a, b) => a.fileId < b.fileId ? -1 : a.fileId > b.fileId ? 1 : a.baseSlug < b.baseSlug ? -1 : a.baseSlug > b.baseSlug ? 1 : 0);
277
+ const groups = [];
278
+ for (const seed of byFileId) {
279
+ let id = seed.baseSlug;
280
+ if (taken.has(id))
281
+ id = `${seed.baseSlug}-${dirSegment(seed.fileId)}`;
282
+ let n = 2;
283
+ while (taken.has(id))
284
+ id = `${seed.baseSlug}-${n++}`;
285
+ taken.add(id);
286
+ groups.push({ id, label: seed.label, fileIds: [seed.fileId] });
287
+ }
288
+ return groups.sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
289
+ }
290
+ function analyzeLitestar(ctx) {
291
+ const { parsed } = parsePythonScope(ctx);
292
+ // Pass 1 — per-file litestar imports + app / router variables + Controller
293
+ // classes (module-level singletons + class definitions, file-scoped).
294
+ const importsByFile = new Map();
295
+ const appVarsByFile = new Map();
296
+ const routerVarsByFile = new Map();
297
+ const controllersByFile = new Map();
298
+ // Names DEFINED locally in a file (classes / functions / assignment targets), so
299
+ // a same-file registration (`Litestar(route_handlers=[LocalController])`) resolves
300
+ // to self (a dropped self-edge), not a false "unresolvable mount".
301
+ const localNamesByFile = new Map();
302
+ for (const [id, file] of parsed) {
303
+ const imports = collectLitestarImports(file.nodes);
304
+ importsByFile.set(id, imports);
305
+ const appVars = new Set();
306
+ const routerVars = new Map();
307
+ const localNames = new Set();
308
+ for (const a of file.nodes.assignments) {
309
+ const target = nameValue(a.d.leftExpr);
310
+ if (target)
311
+ localNames.add(target);
312
+ if (!target)
313
+ continue;
314
+ const ctor = litestarCtor(a.d.rightExpr, imports);
315
+ if (ctor === 'Litestar')
316
+ appVars.add(target);
317
+ else if (ctor === 'Router') {
318
+ const call = a.d.rightExpr;
319
+ routerVars.set(target, { path: stringValue(keywordArg(call, 'path')), call });
320
+ }
321
+ }
322
+ for (const fn of file.nodes.functions) {
323
+ const fnName = nameValue(fn.d.name);
324
+ if (fnName)
325
+ localNames.add(fnName);
326
+ }
327
+ const controllers = [];
328
+ for (const cls of file.nodes.classes) {
329
+ const className = nameValue(cls.d.name);
330
+ if (className)
331
+ localNames.add(className);
332
+ // A Controller subclass: any DIRECT base resolves to litestar `Controller`.
333
+ const isController = classBaseChains(cls).some((b) => litestarCanonical(b, imports) === 'Controller');
334
+ if (isController && className) {
335
+ controllers.push({
336
+ className,
337
+ tag: firstListString(classAttr(cls, 'tags')),
338
+ path: classAttrString(cls, 'path'),
339
+ });
340
+ }
341
+ }
342
+ appVarsByFile.set(id, appVars);
343
+ routerVarsByFile.set(id, routerVars);
344
+ controllersByFile.set(id, controllers);
345
+ localNamesByFile.set(id, localNames);
346
+ }
347
+ // Pass 2 — roles, edges, grouping seeds.
348
+ const roleByFile = new Map();
349
+ const edges = new Map();
350
+ const groupSeeds = [];
351
+ const diag = { unresolvedMounts: new Set(), unresolvedProviders: new Set() };
352
+ // Resolve a registration/provider reference's ROOT name → a file id: an import
353
+ // binding (cross-file) else a same-file local definition (→ self). Undefined ⇒
354
+ // an external/unknown target (degrade + log).
355
+ const resolveRef = (root, thisFile, binds) => binds.get(root) ?? (localNamesByFile.get(thisFile)?.has(root) ? thisFile : undefined);
356
+ for (const [id, file] of parsed) {
357
+ const imports = importsByFile.get(id);
358
+ const appVars = appVarsByFile.get(id);
359
+ const routerVars = routerVarsByFile.get(id);
360
+ const controllers = controllersByFile.get(id);
361
+ const binds = file.bindings;
362
+ // Function-based route handlers: a top-level/def with a litestar handler
363
+ // decorator (`@get`, `@route`, …). Controller METHODS also match here, but
364
+ // the Controller role (below) already covers their file.
365
+ for (const fn of file.nodes.functions) {
366
+ for (const deco of fn.d.decorators) {
367
+ const canonical = litestarCanonical(decoratorChain(deco), imports);
368
+ if (canonical && HANDLER_DECORATORS.has(canonical)) {
369
+ addRole(roleByFile, id, 'route-handler');
370
+ break;
371
+ }
372
+ }
373
+ }
374
+ // Litestar app file(s) → gateway (`app` role); Controller subclasses → gateway.
375
+ if (appVars.size > 0)
376
+ addRole(roleByFile, id, 'app');
377
+ if (controllers.length > 0)
378
+ addRole(roleByFile, id, 'controller');
379
+ // Grouping seeds: each Controller + each Router is its own subsystem. Name a
380
+ // Controller by its OpenAPI `tags=[…]` (the human group label — like FastAPI's
381
+ // router tags), else its path's domain segment, else its class name.
382
+ for (const c of controllers) {
383
+ const name = c.tag || pathName(c.path) || c.className;
384
+ groupSeeds.push({ fileId: id, baseSlug: slugify(name) || 'controller', label: humanize(name) || name });
385
+ }
386
+ for (const [varName, meta] of routerVars) {
387
+ const name = pathName(meta.path) || (varName !== 'router' ? varName : '') || baseName(id);
388
+ groupSeeds.push({ fileId: id, baseSlug: slugify(name) || 'router', label: humanize(name) || name });
389
+ }
390
+ // Registration edges from `route_handlers=[…]` on a Litestar()/Router() ctor.
391
+ const registrationCalls = [];
392
+ for (const [, meta] of routerVars)
393
+ registrationCalls.push({ call: meta.call, label: 'Router' });
394
+ // The Litestar() app ctor(s) — collected from assignments in pass 1 via appVars,
395
+ // but the CALL node is here in nodes.calls; match by canonical ctor.
396
+ for (const call of file.nodes.calls) {
397
+ const canonical = litestarCanonical(callCallee(call), imports);
398
+ if (canonical === 'Litestar')
399
+ registrationCalls.push({ call, label: 'Litestar' });
400
+ }
401
+ for (const { call, label } of registrationCalls) {
402
+ for (const item of listItems(keywordArg(call, 'route_handlers'))) {
403
+ const root = memberChain(item)?.root;
404
+ const target = root ? resolveRef(root, id, binds) : undefined;
405
+ if (target)
406
+ addEdge(edges, id, target, 'calls', 'route-handlers');
407
+ else if (root)
408
+ diag.unresolvedMounts.add(`${id}: ${label}(route_handlers=[…${root}…])`);
409
+ }
410
+ }
411
+ // Registration edges from `.register(handler)` on an app/router var, and
412
+ // layered DI edges from `Provide(fn)` (consumer→provider). Both scanned from
413
+ // nodes.calls (recursive → also catches Provide inside a class-body
414
+ // `dependencies={…}` dict).
415
+ for (const call of file.nodes.calls) {
416
+ const callee = callCallee(call);
417
+ if (!callee)
418
+ continue;
419
+ if (callee.path.length === 1 && callee.path[0] === 'register' && (appVars.has(callee.root) || routerVars.has(callee.root))) {
420
+ const root = memberChain(positionalArgs(call)[0])?.root;
421
+ const target = root ? resolveRef(root, id, binds) : undefined;
422
+ if (target)
423
+ addEdge(edges, id, target, 'calls', 'register');
424
+ else if (root)
425
+ diag.unresolvedMounts.add(`${id}: ${callee.root}.register(${root})`);
426
+ continue;
427
+ }
428
+ if (callee.path.length === 0 && litestarCanonical(callee, imports) === 'Provide') {
429
+ const root = memberChain(positionalArgs(call)[0])?.root;
430
+ const providerFile = root ? resolveRef(root, id, binds) : undefined;
431
+ if (providerFile) {
432
+ addRole(roleByFile, providerFile, 'provider');
433
+ addEdge(edges, id, providerFile, 'calls', 'di-provider');
434
+ }
435
+ else if (root) {
436
+ diag.unresolvedProviders.add(`${id}: Provide(${root})`);
437
+ }
438
+ }
439
+ }
440
+ }
441
+ const groups = assignUnitGroups(groupSeeds);
442
+ const roles = new Map();
443
+ for (const [fileId, role] of roleByFile) {
444
+ roles.set(fileId, {
445
+ role,
446
+ kind: ROLE_KIND[role],
447
+ priority: ROLE_PRIORITY[role],
448
+ metadata: { framework: 'litestar' },
449
+ });
450
+ }
451
+ const sortedEdges = [...edges.values()].sort((a, b) => a.source < b.source
452
+ ? -1
453
+ : a.source > b.source
454
+ ? 1
455
+ : a.target < b.target
456
+ ? -1
457
+ : a.target > b.target
458
+ ? 1
459
+ : a.kind < b.kind
460
+ ? -1
461
+ : a.kind > b.kind
462
+ ? 1
463
+ : 0);
464
+ // Positive signal for validation (mirrors fastapi/flask/nest's log line).
465
+ if (groups.length > 0 || roleByFile.size > 0 || sortedEdges.length > 0) {
466
+ console.log(` [litestar] ${roleByFile.size} role(s) · ${groups.length} controller/router group(s) · ${sortedEdges.length} edge(s)`);
467
+ }
468
+ // No silent caps (locked): log everything that degraded.
469
+ if (diag.unresolvedMounts.size > 0 || diag.unresolvedProviders.size > 0) {
470
+ const parts = [];
471
+ if (diag.unresolvedMounts.size > 0) {
472
+ parts.push(`${diag.unresolvedMounts.size} unresolvable mount(s): ${[...diag.unresolvedMounts].sort().slice(0, 10).join(' · ')}`);
473
+ }
474
+ if (diag.unresolvedProviders.size > 0) {
475
+ parts.push(`${diag.unresolvedProviders.size} unresolvable provider(s): ${[...diag.unresolvedProviders].sort().slice(0, 10).join(' · ')}`);
476
+ }
477
+ console.log(` [litestar] degraded: ${parts.join(' · ')} (logged, not silently dropped)`);
478
+ }
479
+ return { groups, edges: sortedEdges, roles };
480
+ }
481
+ function getAnalysis(ctx) {
482
+ let a = ANALYSIS_CACHE.get(ctx);
483
+ if (!a) {
484
+ a = analyzeLitestar(ctx);
485
+ ANALYSIS_CACHE.set(ctx, a);
486
+ }
487
+ return a;
488
+ }
489
+ // ---------------------------------------------------------------------------
490
+ // The adapter.
491
+ export const litestarAdapter = {
492
+ name: 'litestar',
493
+ async detect(ctx) {
494
+ const { base, rootPath } = resolveBase(ctx);
495
+ // Root scan first (a repo whose manifest is at root reports rootPath '').
496
+ const rootMatch = scoreLitestar(gatherLitestarSignals(base), rootPath);
497
+ if (rootMatch)
498
+ return rootMatch;
499
+ // A Litestar backend often lives one dir down (a `backend/` | `server/` |
500
+ // `api/` package in a frontend+backend monorepo), so a root-only scan misses
501
+ // it. Shallow-scan immediate subdirs for a litestar manifest and scope to it.
502
+ // Only when NOT already scoped to a workspace package (the path).
503
+ if (!ctx.packageDir) {
504
+ for (const sub of shallowManifestSubdirs(base)) {
505
+ const m = scoreLitestar(gatherLitestarSignals(join(base, sub)), sub);
506
+ if (m)
507
+ return m;
508
+ }
509
+ }
510
+ return null;
511
+ },
512
+ // One grouping prior per Controller / Router → its own subsystem, authoritative
513
+ // over directory grouping (the fastapi/nest mechanism). Fully deterministic
514
+ // (path/name-derived) → no classificationsNeeded.
515
+ async groupingPrior(ctx) {
516
+ return { groups: getAnalysis(ctx).groups };
517
+ },
518
+ // route_handlers=[…] / .register(…) mounting + layered Provide(…) DI (kind
519
+ // 'calls'). File-id endpoints; the step resolves to modules, drops self-edges,
520
+ // dedupes, 8-verb-validates.
521
+ async syntheticEdges(ctx) {
522
+ return getAnalysis(ctx).edges;
523
+ },
524
+ // app / controller / route-handler → gateway; provider → service. METADATA; the
525
+ // module's `kind` is unchanged.
526
+ async roleTags(ctx) {
527
+ return getAnalysis(ctx).roles;
528
+ },
529
+ // The hooks READ SOURCE (Python). Declare the paths the diff-driven hosted walk
530
+ // must treat as framework-relevant. Never-store-source holds: parse server-side,
531
+ // persist only the derived groups/edges/roles.
532
+ scansSourcePath(path) {
533
+ return path.endsWith('.py') || path.endsWith('.pyi');
534
+ },
535
+ };
536
+ //# sourceMappingURL=litestar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"litestar.js","sourceRoot":"","sources":["../../../src/framework/litestar/litestar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { DetectMatch, FrameworkAdapter } from '../types.js';
2
+ /** The deterministic NestJS signal set read from a repo (or workspace package). */
3
+ export interface NestSignals {
4
+ hasNestCoreDep: boolean;
5
+ hasNestCliJson: boolean;
6
+ }
7
+ /** Gather the signal set for a single root dir (fs only). */
8
+ export declare function gatherNestSignals(baseDir: string): NestSignals;
9
+ /**
10
+ * Decide NestJS from the signal set. Returns a DetectMatch, or null when no
11
+ * signal fires (generic-TS fallthrough intact).
12
+ *
13
+ * Both signals are SUFFICIENT on their own (each is Nest-specific): the
14
+ * `@nestjs/core` dep, or a nest-cli.json file.
15
+ */
16
+ export declare function scoreNest(s: NestSignals, rootPath?: string): DetectMatch | null;
17
+ export type NestRole = 'controller' | 'resolver' | 'guard' | 'interceptor' | 'pipe' | 'service' | 'module';
18
+ export declare const nestAdapter: FrameworkAdapter;
19
+ //# sourceMappingURL=nest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nest.d.ts","sourceRoot":"","sources":["../../../src/framework/nest/nest.ts"],"names":[],"mappings":"AAqDA,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAOjB,MAAM,aAAa,CAAC;AAGrB,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAM9D;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,SAAK,GAAG,WAAW,GAAG,IAAI,CAkB3E;AAkBD,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,UAAU,GACV,OAAO,GACP,aAAa,GACb,MAAM,GACN,SAAS,GACT,QAAQ,CAAC;AAilBb,eAAO,MAAM,WAAW,EAAE,gBAoCzB,CAAC"}